• Ross Zwisler's avatar
    /dev/dax: fix Kconfig dependency build breakage · 4e65e938
    Ross Zwisler authored
    The function dax_pmem_probe() in drivers/dax/pmem.c is compiled under the
    CONFIG_DEV_DAX_PMEM tri-state config option.  This config option currently
    only depends on CONFIG_NVDIMM_DAX, a bool, which means that the following
    configuration is possible:
    
    CONFIG_LIBNVDIMM=m
    ...
    CONFIG_NVDIMM_DAX=y
    CONFIG_DEV_DAX=y
    CONFIG_DEV_DAX_PMEM=y
    
    With this config LIBNVDIMM is compiled as a module with NVDIMM_DAX=y just
    meaning that we will compile drivers/nvdimm/dax_devs.c into that module.
    However, dax_pmem_probe() depends on several symbols defined in
    drivers/nvdimm/dax_devs.c, which results in the following build errors:
    
    drivers/built-in.o: In function `dax_pmem_probe':
    linux/drivers/dax/pmem.c:70: undefined reference to `to_nd_dax'
    linux/drivers/dax/pmem.c:74: undefined reference to
    `nvdimm_namespace_common_probe'
    linux/drivers/dax/pmem.c:80: undefined reference to `devm_nsio_enable'
    linux/drivers/dax/pmem.c:81: undefined reference to `nvdimm_setup_pfn'
    linux/drivers/dax/pmem.c:84: undefined reference to `devm_nsio_disable'
    linux/drivers/dax/pmem.c:122: undefined reference to `to_nd_region'
    drivers/built-in.o: In function `dax_pmem_init':
    linux/drivers/dax/pmem.c:147: undefined reference to `__nd_driver_register'
    
    Fix this by making NVDIMM_DAX a tristate.  DEV_DAX_PMEM depends on
    NVDIMM_DAX which depends on LIBNVDIMM.  Since they are all now tristates,
    if LIBNVDIMM is built as a kernel module DEV_DAX_PMEM will be as well.
    This prevents dax_devs.c from being built as a built-in while its
    dependencies are in the libnvdimm.ko module.
    Signed-off-by: default avatarRoss Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    4e65e938
Kconfig 3.4 KB