vfree() can be used in any atomic context and there is no
vfree_atomic() callers left, so let's remove it.

This reverts commit bf22e37a6413 ("mm: add vfree_atomic()")

Signed-off-by: Andrey Ryabinin <[email protected]>
Acked-by: Michal Hocko <[email protected]>
---
 include/linux/vmalloc.h |  1 -
 mm/vmalloc.c            | 40 +++++-----------------------------------
 2 files changed, 5 insertions(+), 36 deletions(-)

diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index 46991ad..b4f044f 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -83,7 +83,6 @@ extern void *__vmalloc_node_range(unsigned long size, 
unsigned long align,
 extern void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags);
 
 extern void vfree(const void *addr);
-extern void vfree_atomic(const void *addr);
 
 extern void *vmap(struct page **pages, unsigned int count,
                        unsigned long flags, pgprot_t prot);
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 1c74b26..ee62c0a 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1534,38 +1534,6 @@ static void __vunmap(const void *addr, int 
deallocate_pages)
        return;
 }
 
-static inline void __vfree_deferred(const void *addr)
-{
-       /*
-        * Use raw_cpu_ptr() because this can be called from preemptible
-        * context. Preemption is absolutely fine here, because the llist_add()
-        * implementation is lockless, so it works even if we are adding to
-        * nother cpu's list.  schedule_work() should be fine with this too.
-        */
-       struct vfree_deferred *p = raw_cpu_ptr(&vfree_deferred);
-
-       if (llist_add((struct llist_node *)addr, &p->list))
-               schedule_work(&p->wq);
-}
-
-/**
- *     vfree_atomic  -  release memory allocated by vmalloc()
- *     @addr:          memory base address
- *
- *     This one is just like vfree() but can be called in any atomic context
- *     except NMIs.
- */
-void vfree_atomic(const void *addr)
-{
-       BUG_ON(in_nmi());
-
-       kmemleak_free(addr);
-
-       if (!addr)
-               return;
-       __vfree_deferred(addr);
-}
-
 /**
  *     vfree  -  release memory allocated by vmalloc()
  *     @addr:          memory base address
@@ -1588,9 +1556,11 @@ void vfree(const void *addr)
 
        if (!addr)
                return;
-       if (unlikely(in_interrupt()))
-               __vfree_deferred(addr);
-       else
+       if (unlikely(in_interrupt())) {
+               struct vfree_deferred *p = this_cpu_ptr(&vfree_deferred);
+               if (llist_add((struct llist_node *)addr, &p->list))
+                       schedule_work(&p->wq);
+       } else
                __vunmap(addr, 1);
 }
 EXPORT_SYMBOL(vfree);
-- 
2.10.2

Reply via email to