-bool mhp_supports_memmap_on_memory(unsigned long size)
+static bool mhp_supports_memmap_on_memory(unsigned long size)
  {
        unsigned long nr_vmemmap_pages = size / PAGE_SIZE;
        unsigned long vmemmap_size = nr_vmemmap_pages * sizeof(struct page);
@@ -1339,13 +1339,12 @@ int __ref add_memory_resource(int nid, struct resource 
*res, mhp_t mhp_flags)
         * Self hosted memmap array
         */
        if (mhp_flags & MHP_MEMMAP_ON_MEMORY) {
-               if (!mhp_supports_memmap_on_memory(size)) {
-                       ret = -EINVAL;
-                       goto error;
+               if (mhp_supports_memmap_on_memory(size)) {
+                       mhp_altmap.free = PHYS_PFN(size);
+                       mhp_altmap.base_pfn = PHYS_PFN(start);
+                       params.altmap = &mhp_altmap;
                }
-               mhp_altmap.free = PHYS_PFN(size);
-               mhp_altmap.base_pfn = PHYS_PFN(start);
-               params.altmap = &mhp_altmap;
+               /* fallback to not using altmap  */
        }
/* call arch's memory hotadd */

In general, LGTM, but please extend the documentation of the parameter in memory_hotplug.h, stating that this is just a hint and that the core can decide to no do that.

--
Cheers,

David / dhildenb

Reply via email to