• Dan Williams's avatar
    libnvdimm/namespace: Enforce memremap_compat_align() · 6acd7d5e
    Dan Williams authored
    The pmem driver on PowerPC crashes with the following signature when
    instantiating misaligned namespaces that map their capacity via
    memremap_pages().
    
        BUG: Unable to handle kernel data access at 0xc001000406000000
        Faulting instruction address: 0xc000000000090790
        NIP [c000000000090790] arch_add_memory+0xc0/0x130
        LR [c000000000090744] arch_add_memory+0x74/0x130
        Call Trace:
         arch_add_memory+0x74/0x130 (unreliable)
         memremap_pages+0x74c/0xa30
         devm_memremap_pages+0x3c/0xa0
         pmem_attach_disk+0x188/0x770
         nvdimm_bus_probe+0xd8/0x470
    
    With the assumption that only memremap_pages() has alignment
    constraints, enforce memremap_compat_align() for
    pmem_should_map_pages(), nd_pfn, and nd_dax cases. This includes
    preventing the creation of namespaces where the base address is
    misaligned and cases there infoblock padding parameters are invalid.
    Reported-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Jeff Moyer <jmoyer@redhat.com>
    Fixes: a3619190 ("libnvdimm/pfn: stop padding pmem namespaces to section alignment")
    Reviewed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    6acd7d5e
pfn_devs.c 21.8 KB