Loading mm/vmalloc.c +8 −9 Original line number Diff line number Diff line Loading @@ -651,7 +651,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, LIST_HEAD(valist); struct vmap_area *va; struct vmap_area *n_va; bool do_free = false; int nr = 0; /* * If sync is 0 but force_flush is 1, we'll go sync anyway but callers Loading @@ -674,7 +674,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, *start = va->va_start; if (va->va_end > *end) *end = va->va_end; do_free = true; nr += (va->va_end - va->va_start) >> PAGE_SHIFT; list_add_tail(&va->purge_list, &valist); va->flags |= VM_LAZY_FREEING; va->flags &= ~VM_LAZY_FREE; Loading @@ -682,17 +682,16 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, } rcu_read_unlock(); if (do_free || force_flush) if (nr) atomic_sub(nr, &vmap_lazy_nr); if (nr || force_flush) flush_tlb_kernel_range(*start, *end); if (do_free) { if (nr) { spin_lock(&vmap_area_lock); list_for_each_entry_safe(va, n_va, &valist, purge_list) { int nr = (va->va_end - va->va_start) >> PAGE_SHIFT; list_for_each_entry_safe(va, n_va, &valist, purge_list) __free_vmap_area(va); atomic_sub(nr, &vmap_lazy_nr); cond_resched_lock(&vmap_area_lock); } spin_unlock(&vmap_area_lock); } spin_unlock(&purge_lock); Loading Loading
mm/vmalloc.c +8 −9 Original line number Diff line number Diff line Loading @@ -651,7 +651,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, LIST_HEAD(valist); struct vmap_area *va; struct vmap_area *n_va; bool do_free = false; int nr = 0; /* * If sync is 0 but force_flush is 1, we'll go sync anyway but callers Loading @@ -674,7 +674,7 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, *start = va->va_start; if (va->va_end > *end) *end = va->va_end; do_free = true; nr += (va->va_end - va->va_start) >> PAGE_SHIFT; list_add_tail(&va->purge_list, &valist); va->flags |= VM_LAZY_FREEING; va->flags &= ~VM_LAZY_FREE; Loading @@ -682,17 +682,16 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, } rcu_read_unlock(); if (do_free || force_flush) if (nr) atomic_sub(nr, &vmap_lazy_nr); if (nr || force_flush) flush_tlb_kernel_range(*start, *end); if (do_free) { if (nr) { spin_lock(&vmap_area_lock); list_for_each_entry_safe(va, n_va, &valist, purge_list) { int nr = (va->va_end - va->va_start) >> PAGE_SHIFT; list_for_each_entry_safe(va, n_va, &valist, purge_list) __free_vmap_area(va); atomic_sub(nr, &vmap_lazy_nr); cond_resched_lock(&vmap_area_lock); } spin_unlock(&vmap_area_lock); } spin_unlock(&purge_lock); Loading