libnvdimm, e820: skip module loading when no type-12
authorDan Williams <[email protected]>
Mon, 30 Nov 2015 17:10:33 +0000 (09:10 -0800)
committerDan Williams <[email protected]>
Mon, 30 Nov 2015 17:10:33 +0000 (09:10 -0800)
If there are no persistent memory ranges present then don't bother
creating the platform device.  Otherwise, it loads the full libnvdimm
sub-system only to discover no resources present.

Reported-by: Andy Lutomirski <[email protected]>
Acked-by: Andy Lutomirski <[email protected]>
Signed-off-by: Dan Williams <[email protected]>
arch/x86/kernel/pmem.c

index 4f00b63d7ff33bea8f0016eaa8393d8cb6972fad..14415aff18136524cfa3d4c9b07bdde6ee0d6f54 100644 (file)
@@ -4,10 +4,22 @@
  */
 #include <linux/platform_device.h>
 #include <linux/module.h>
+#include <linux/ioport.h>
+
+static int found(u64 start, u64 end, void *data)
+{
+       return 1;
+}
 
 static __init int register_e820_pmem(void)
 {
+       char *pmem = "Persistent Memory (legacy)";
        struct platform_device *pdev;
+       int rc;
+
+       rc = walk_iomem_res(pmem, IORESOURCE_MEM, 0, -1, NULL, found);
+       if (rc <= 0)
+               return 0;
 
        /*
         * See drivers/nvdimm/e820.c for the implementation, this is