Merge tag 'drm-msm-fixes-2023-10-07' of https://gitlab.freedesktop.org/drm/msm into...
[platform/kernel/linux-starfive.git] / mm / page_alloc.c
index 0c5be12..95546f3 100644 (file)
@@ -2400,7 +2400,7 @@ void free_unref_page(struct page *page, unsigned int order)
        struct per_cpu_pages *pcp;
        struct zone *zone;
        unsigned long pfn = page_to_pfn(page);
-       int migratetype;
+       int migratetype, pcpmigratetype;
 
        if (!free_unref_page_prepare(page, pfn, order))
                return;
@@ -2408,24 +2408,24 @@ void free_unref_page(struct page *page, unsigned int order)
        /*
         * We only track unmovable, reclaimable and movable on pcp lists.
         * Place ISOLATE pages on the isolated list because they are being
-        * offlined but treat HIGHATOMIC as movable pages so we can get those
-        * areas back if necessary. Otherwise, we may have to free
+        * offlined but treat HIGHATOMIC and CMA as movable pages so we can
+        * get those areas back if necessary. Otherwise, we may have to free
         * excessively into the page allocator
         */
-       migratetype = get_pcppage_migratetype(page);
+       migratetype = pcpmigratetype = get_pcppage_migratetype(page);
        if (unlikely(migratetype >= MIGRATE_PCPTYPES)) {
                if (unlikely(is_migrate_isolate(migratetype))) {
                        free_one_page(page_zone(page), page, pfn, order, migratetype, FPI_NONE);
                        return;
                }
-               migratetype = MIGRATE_MOVABLE;
+               pcpmigratetype = MIGRATE_MOVABLE;
        }
 
        zone = page_zone(page);
        pcp_trylock_prepare(UP_flags);
        pcp = pcp_spin_trylock(zone->per_cpu_pageset);
        if (pcp) {
-               free_unref_page_commit(zone, pcp, page, migratetype, order);
+               free_unref_page_commit(zone, pcp, page, pcpmigratetype, order);
                pcp_spin_unlock(pcp);
        } else {
                free_one_page(zone, page, pfn, order, migratetype, FPI_NONE);