Lines Matching full:mag
603 struct iova_magazine *mag; in iova_magazine_alloc() local
605 mag = kmem_cache_alloc(iova_magazine_cache, flags); in iova_magazine_alloc()
606 if (mag) in iova_magazine_alloc()
607 mag->size = 0; in iova_magazine_alloc()
609 return mag; in iova_magazine_alloc()
612 static void iova_magazine_free(struct iova_magazine *mag) in iova_magazine_free() argument
614 kmem_cache_free(iova_magazine_cache, mag); in iova_magazine_free()
618 iova_magazine_free_pfns(struct iova_magazine *mag, struct iova_domain *iovad) in iova_magazine_free_pfns() argument
625 for (i = 0 ; i < mag->size; ++i) { in iova_magazine_free_pfns()
626 struct iova *iova = private_find_iova(iovad, mag->pfns[i]); in iova_magazine_free_pfns()
637 mag->size = 0; in iova_magazine_free_pfns()
640 static bool iova_magazine_full(struct iova_magazine *mag) in iova_magazine_full() argument
642 return mag->size == IOVA_MAG_SIZE; in iova_magazine_full()
645 static bool iova_magazine_empty(struct iova_magazine *mag) in iova_magazine_empty() argument
647 return mag->size == 0; in iova_magazine_empty()
650 static unsigned long iova_magazine_pop(struct iova_magazine *mag, in iova_magazine_pop() argument
657 for (i = mag->size - 1; mag->pfns[i] > limit_pfn; i--) in iova_magazine_pop()
662 pfn = mag->pfns[i]; in iova_magazine_pop()
663 mag->pfns[i] = mag->pfns[--mag->size]; in iova_magazine_pop()
668 static void iova_magazine_push(struct iova_magazine *mag, unsigned long pfn) in iova_magazine_push() argument
670 mag->pfns[mag->size++] = pfn; in iova_magazine_push()
675 struct iova_magazine *mag = rcache->depot; in iova_depot_pop() local
678 * As the mag->next pointer is moved to rcache->depot and reset via in iova_depot_pop()
679 * the mag->size assignment, mark it as a transient false positive. in iova_depot_pop()
681 kmemleak_transient_leak(mag->next); in iova_depot_pop()
682 rcache->depot = mag->next; in iova_depot_pop()
683 mag->size = IOVA_MAG_SIZE; in iova_depot_pop()
685 return mag; in iova_depot_pop()
688 static void iova_depot_push(struct iova_rcache *rcache, struct iova_magazine *mag) in iova_depot_push() argument
690 mag->next = rcache->depot; in iova_depot_push()
691 rcache->depot = mag; in iova_depot_push()
698 struct iova_magazine *mag = NULL; in iova_depot_work_func() local
703 mag = iova_depot_pop(rcache); in iova_depot_work_func()
706 if (mag) { in iova_depot_work_func()
707 iova_magazine_free_pfns(mag, rcache->iovad); in iova_depot_work_func()
708 iova_magazine_free(mag); in iova_depot_work_func()
934 struct iova_magazine *mag = iova_depot_pop(rcache); in free_global_cached_iovas() local
936 iova_magazine_free_pfns(mag, iovad); in free_global_cached_iovas()
937 iova_magazine_free(mag); in free_global_cached_iovas()