@@ -116,12 +116,6 @@ struct iova_bitmap {
116
116
117
117
/* length of the IOVA range for the whole bitmap */
118
118
size_t length ;
119
-
120
- /* length of the IOVA range set ahead the pinned pages */
121
- unsigned long set_ahead_length ;
122
-
123
- /* true if it using the iterator otherwise it pins dynamically */
124
- bool iterator ;
125
119
};
126
120
127
121
/*
@@ -354,40 +348,6 @@ static bool iova_bitmap_mapped_range(struct iova_bitmap_map *mapped,
354
348
(iova + length - 1 ) <= (mapped -> iova + mapped -> length - 1 ));
355
349
}
356
350
357
- /*
358
- * Returns true if there's not more data to iterate.
359
- */
360
- static bool iova_bitmap_done (struct iova_bitmap * bitmap )
361
- {
362
- return bitmap -> mapped_base_index >= bitmap -> mapped_total_index ;
363
- }
364
-
365
- static int iova_bitmap_set_ahead (struct iova_bitmap * bitmap ,
366
- size_t set_ahead_length )
367
- {
368
- int ret = 0 ;
369
-
370
- while (set_ahead_length > 0 && !iova_bitmap_done (bitmap )) {
371
- unsigned long length = iova_bitmap_mapped_length (bitmap );
372
- unsigned long iova = iova_bitmap_mapped_iova (bitmap );
373
-
374
- ret = iova_bitmap_get (bitmap );
375
- if (ret )
376
- break ;
377
-
378
- length = min (length , set_ahead_length );
379
- iova_bitmap_set (bitmap , iova , length );
380
-
381
- set_ahead_length -= length ;
382
- bitmap -> mapped_base_index +=
383
- iova_bitmap_offset_to_index (bitmap , length - 1 ) + 1 ;
384
- iova_bitmap_put (bitmap );
385
- }
386
-
387
- bitmap -> set_ahead_length = 0 ;
388
- return ret ;
389
- }
390
-
391
351
/*
392
352
* Advances to a selected range, releases the current pinned
393
353
* pages and pins the next set of bitmap pages.
@@ -409,36 +369,6 @@ static int iova_bitmap_advance_to(struct iova_bitmap *bitmap,
409
369
return iova_bitmap_get (bitmap );
410
370
}
411
371
412
- /*
413
- * Advances to the next range, releases the current pinned
414
- * pages and pins the next set of bitmap pages.
415
- * Returns 0 on success or otherwise errno.
416
- */
417
- static int iova_bitmap_advance (struct iova_bitmap * bitmap )
418
- {
419
- unsigned long iova = iova_bitmap_mapped_length (bitmap ) - 1 ;
420
- unsigned long count = iova_bitmap_offset_to_index (bitmap , iova ) + 1 ;
421
-
422
- bitmap -> mapped_base_index += count ;
423
-
424
- iova_bitmap_put (bitmap );
425
-
426
- /* Iterate, set and skip any bits requested for next iteration */
427
- if (bitmap -> set_ahead_length ) {
428
- int ret ;
429
-
430
- ret = iova_bitmap_set_ahead (bitmap , bitmap -> set_ahead_length );
431
- if (ret )
432
- return ret ;
433
- }
434
-
435
- if (iova_bitmap_done (bitmap ))
436
- return 0 ;
437
-
438
- /* When advancing the index we pin the next set of bitmap pages */
439
- return iova_bitmap_get (bitmap );
440
- }
441
-
442
372
/**
443
373
* iova_bitmap_for_each() - Iterates over the bitmap
444
374
* @bitmap: IOVA bitmap to iterate
@@ -455,23 +385,7 @@ static int iova_bitmap_advance(struct iova_bitmap *bitmap)
455
385
int iova_bitmap_for_each (struct iova_bitmap * bitmap , void * opaque ,
456
386
iova_bitmap_fn_t fn )
457
387
{
458
- int ret = 0 ;
459
-
460
- ret = iova_bitmap_get (bitmap );
461
- if (ret )
462
- return ret ;
463
-
464
- bitmap -> iterator = true;
465
- for (; !iova_bitmap_done (bitmap ) && !ret ;
466
- ret = iova_bitmap_advance (bitmap )) {
467
- ret = fn (bitmap , iova_bitmap_mapped_iova (bitmap ),
468
- iova_bitmap_mapped_length (bitmap ), opaque );
469
- if (ret )
470
- break ;
471
- }
472
- bitmap -> iterator = false;
473
-
474
- return ret ;
388
+ return fn (bitmap , bitmap -> iova , bitmap -> length , opaque );
475
389
}
476
390
EXPORT_SYMBOL_NS_GPL (iova_bitmap_for_each , IOMMUFD );
477
391
@@ -492,15 +406,12 @@ void iova_bitmap_set(struct iova_bitmap *bitmap,
492
406
unsigned long cur_bit , last_bit , last_page_idx ;
493
407
494
408
update_indexes :
495
- if (unlikely (!bitmap -> iterator &&
496
- !iova_bitmap_mapped_range (mapped , iova , length ))) {
409
+ if (unlikely (!iova_bitmap_mapped_range (mapped , iova , length ))) {
497
410
498
411
/*
499
412
* The attempt to advance the base index to @iova
500
413
* may fail if it's out of bounds, or pinning the pages
501
414
* returns an error.
502
- *
503
- * It is a no-op if within a iova_bitmap_for_each() closure.
504
415
*/
505
416
if (iova_bitmap_advance_to (bitmap , iova ))
506
417
return ;
@@ -523,10 +434,6 @@ void iova_bitmap_set(struct iova_bitmap *bitmap,
523
434
unsigned long left =
524
435
((last_bit - cur_bit + 1 ) << mapped -> pgshift );
525
436
526
- if (bitmap -> iterator ) {
527
- bitmap -> set_ahead_length = left ;
528
- return ;
529
- }
530
437
iova += (length - left );
531
438
length = left ;
532
439
goto update_indexes ;
0 commit comments