Input: psmouse - disable "palm detection" in the focaltech driver
[firefly-linux-kernel-4.4.55.git] / mm / slub.c
index ae7b9f1ad394ca9c65350dac175efa8cab199771..fe376fe1f4fe3ce5526997ef700da9eee5c714a5 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -849,12 +849,12 @@ static int check_slab(struct kmem_cache *s, struct page *page)
        maxobj = order_objects(compound_order(page), s->size, s->reserved);
        if (page->objects > maxobj) {
                slab_err(s, page, "objects %u > max %u",
-                       s->name, page->objects, maxobj);
+                       page->objects, maxobj);
                return 0;
        }
        if (page->inuse > page->objects) {
                slab_err(s, page, "inuse %u > max %u",
-                       s->name, page->inuse, page->objects);
+                       page->inuse, page->objects);
                return 0;
        }
        /* Slab_pad_check fixes things up after itself */
@@ -871,7 +871,7 @@ static int on_freelist(struct kmem_cache *s, struct page *page, void *search)
        int nr = 0;
        void *fp;
        void *object = NULL;
-       unsigned long max_objects;
+       int max_objects;
 
        fp = page->freelist;
        while (fp && nr <= page->objects) {
@@ -1233,13 +1233,17 @@ static inline void kfree_hook(const void *x)
        kmemleak_free(x);
 }
 
-static inline int slab_pre_alloc_hook(struct kmem_cache *s, gfp_t flags)
+static inline struct kmem_cache *slab_pre_alloc_hook(struct kmem_cache *s,
+                                                    gfp_t flags)
 {
        flags &= gfp_allowed_mask;
        lockdep_trace_alloc(flags);
        might_sleep_if(flags & __GFP_WAIT);
 
-       return should_failslab(s->object_size, flags, s->flags);
+       if (should_failslab(s->object_size, flags, s->flags))
+               return NULL;
+
+       return memcg_kmem_get_cache(s, flags);
 }
 
 static inline void slab_post_alloc_hook(struct kmem_cache *s,
@@ -1248,6 +1252,7 @@ static inline void slab_post_alloc_hook(struct kmem_cache *s,
        flags &= gfp_allowed_mask;
        kmemcheck_slab_alloc(s, flags, object, slab_ksize(s));
        kmemleak_alloc_recursive(object, s->object_size, 1, s->flags, flags);
+       memcg_kmem_put_cache(s);
 }
 
 static inline void slab_free_hook(struct kmem_cache *s, void *x)
@@ -1377,7 +1382,10 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node)
        int order;
        int idx;
 
-       BUG_ON(flags & GFP_SLAB_BUG_MASK);
+       if (unlikely(flags & GFP_SLAB_BUG_MASK)) {
+               pr_emerg("gfp: %u\n", flags & GFP_SLAB_BUG_MASK);
+               BUG();
+       }
 
        page = allocate_slab(s,
                flags & (GFP_RECLAIM_MASK | GFP_CONSTRAINT_MASK), node);
@@ -1662,7 +1670,7 @@ static void *get_any_partial(struct kmem_cache *s, gfp_t flags,
 
                        n = get_node(s, zone_to_nid(zone));
 
-                       if (n && cpuset_zone_allowed_hardwall(zone, flags) &&
+                       if (n && cpuset_zone_allowed(zone, flags) &&
                                        n->nr_partial > s->min_partial) {
                                object = get_partial_node(s, n, c, flags);
                                if (object) {
@@ -2380,10 +2388,9 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
        struct page *page;
        unsigned long tid;
 
-       if (slab_pre_alloc_hook(s, gfpflags))
+       s = slab_pre_alloc_hook(s, gfpflags);
+       if (!s)
                return NULL;
-
-       s = memcg_kmem_get_cache(s, gfpflags);
 redo:
        /*
         * Must read kmem_cache cpu data via this cpu ptr. Preemption is
@@ -2554,7 +2561,7 @@ static void __slab_free(struct kmem_cache *s, struct page *page,
 
                        } else { /* Needs to be taken off a list */
 
-                               n = get_node(s, page_to_nid(page));
+                               n = get_node(s, page_to_nid(page));
                                /*
                                 * Speculatively acquire the list_lock.
                                 * If the cmpxchg does not succeed then we may
@@ -2587,10 +2594,10 @@ static void __slab_free(struct kmem_cache *s, struct page *page,
                 * The list lock was not taken therefore no list
                 * activity can be necessary.
                 */
-                if (was_frozen)
-                        stat(s, FREE_FROZEN);
-                return;
-        }
+               if (was_frozen)
+                       stat(s, FREE_FROZEN);
+               return;
+       }
 
        if (unlikely(!new.inuse && n->nr_partial >= s->min_partial))
                goto slab_empty;