]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - mm/memremap.c
mm/swapfile.c: tmp is always smaller than max
[thirdparty/linux.git] / mm / memremap.c
index bbf457c4f166bb4ebe4c540b402a616731a5aa51..03e38b7a38f1a434d5f63294c6675672d9eed227 100644 (file)
@@ -184,13 +184,13 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid)
 {
        struct resource *res = &pgmap->res;
        struct dev_pagemap *conflict_pgmap;
-       struct mhp_restrictions restrictions = {
+       struct mhp_params params = {
                /*
                 * We do not want any optional features only our own memmap
                 */
                .altmap = pgmap_altmap(pgmap),
+               .pgprot = PAGE_KERNEL,
        };
-       pgprot_t pgprot = PAGE_KERNEL;
        int error, is_ram;
        bool need_devmap_managed = true;
 
@@ -217,7 +217,10 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid)
                }
                break;
        case MEMORY_DEVICE_DEVDAX:
+               need_devmap_managed = false;
+               break;
        case MEMORY_DEVICE_PCI_P2PDMA:
+               params.pgprot = pgprot_noncached(params.pgprot);
                need_devmap_managed = false;
                break;
        default:
@@ -282,8 +285,8 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid)
        if (nid < 0)
                nid = numa_mem_id();
 
-       error = track_pfn_remap(NULL, &pgprot, PHYS_PFN(res->start), 0,
-                       resource_size(res));
+       error = track_pfn_remap(NULL, &params.pgprot, PHYS_PFN(res->start),
+                               0, resource_size(res));
        if (error)
                goto err_pfn_remap;
 
@@ -302,7 +305,7 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid)
         */
        if (pgmap->type == MEMORY_DEVICE_PRIVATE) {
                error = add_pages(nid, PHYS_PFN(res->start),
-                               PHYS_PFN(resource_size(res)), &restrictions);
+                               PHYS_PFN(resource_size(res)), &params);
        } else {
                error = kasan_add_zero_shadow(__va(res->start), resource_size(res));
                if (error) {
@@ -311,7 +314,7 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid)
                }
 
                error = arch_add_memory(nid, res->start, resource_size(res),
-                                       &restrictions);
+                                       &params);
        }
 
        if (!error) {
@@ -319,7 +322,7 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid)
 
                zone = &NODE_DATA(nid)->node_zones[ZONE_DEVICE];
                move_pfn_range_to_zone(zone, PHYS_PFN(res->start),
-                               PHYS_PFN(resource_size(res)), restrictions.altmap);
+                               PHYS_PFN(resource_size(res)), params.altmap);
        }
 
        mem_hotplug_done();