Re: [PATCH v2] dax: Kill DEV_DAX_PMEM_COMPAT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/15/2021 1:20 PM, Dan Williams wrote:
> The /sys/class/dax compatibility option has shipped in the kernel for 4
> years now which should be sufficient time for tools to abandon the old
> ABI in favor of the /sys/bus/dax device-model. Delete it now and see if
> anyone screams.
> 
> Since this compatibility option shipped there has been more reports of
> users being surprised by the compat ABI than surprised by the "new", so
> the compat infrastructure has outlived its usefulness. Recall that
> /sys/bus/dax device-model is required for the dax kmem driver which
> allows PMEM to be used as "System RAM".
> 
> The following projects were known to have a dependency on /sys/class/dax
> and have dropped their dependency as of the listed version:
> 
> - ndctl (including libndctl, daxctl, and libdaxctl): v64+
> - fio: v3.13+
> - pmdk: v1.5.2+
> 
> As further evidence this option is no longer needed some distributions
> have already stopped enabling CONFIG_DEV_DAX_PMEM_COMPAT.

Looks good.
You may add Reviewed-by: Jane Chu <jane.chu@xxxxxxxxxx>

thanks,
-jane

> 
> Cc: Ira Weiny <ira.weiny@xxxxxxxxx>
> Cc: Dave Jiang <dave.jiang@xxxxxxxxx>
> Cc: Jane Chu <jane.chu@xxxxxxxxxx>
> Reported-by: Vishal Verma <vishal.l.verma@xxxxxxxxx>
> Acked-by: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
> Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx>
> ---
> Changes in v2:
> 
> - Update the changelog to list userspace packages that have dropped
>    their dependency and note that some distributions have already dropped
>    this option.
> 
> - Delete the sysfs-class-dax ABI entry.
> 
>   Documentation/ABI/obsolete/sysfs-class-dax  |   22 --------
>   drivers/dax/Kconfig                         |    9 ---
>   drivers/dax/Makefile                        |    3 +
>   drivers/dax/bus.c                           |   21 +-------
>   drivers/dax/bus.h                           |   13 -----
>   drivers/dax/device.c                        |    6 --
>   drivers/dax/pmem.c                          |   36 +++++++++++---
>   drivers/dax/pmem/Makefile                   |    1
>   drivers/dax/pmem/compat.c                   |   72 ---------------------------
>   drivers/dax/pmem/pmem.c                     |   30 -----------
>   tools/testing/nvdimm/Kbuild                 |    8 ---
>   tools/testing/nvdimm/dax_pmem_compat_test.c |    8 ---
>   tools/testing/nvdimm/dax_pmem_core_test.c   |    8 ---
>   tools/testing/nvdimm/test/ndtest.c          |    4 --
>   tools/testing/nvdimm/test/nfit.c            |    4 --
>   15 files changed, 36 insertions(+), 209 deletions(-)
>   delete mode 100644 Documentation/ABI/obsolete/sysfs-class-dax
>   rename drivers/dax/{pmem/core.c => pmem.c} (75%)
>   delete mode 100644 drivers/dax/pmem/compat.c
>   delete mode 100644 tools/testing/nvdimm/dax_pmem_compat_test.c
>   delete mode 100644 tools/testing/nvdimm/dax_pmem_core_test.c
> 
> diff --git a/Documentation/ABI/obsolete/sysfs-class-dax b/Documentation/ABI/obsolete/sysfs-class-dax
> deleted file mode 100644
> index 5bcce27458e3..000000000000
> --- a/Documentation/ABI/obsolete/sysfs-class-dax
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -What:           /sys/class/dax/
> -Date:           May, 2016
> -KernelVersion:  v4.7
> -Contact:        nvdimm@xxxxxxxxxxxxxxx
> -Description:	Device DAX is the device-centric analogue of Filesystem
> -		DAX (CONFIG_FS_DAX).  It allows memory ranges to be
> -		allocated and mapped without need of an intervening file
> -		system.  Device DAX is strict, precise and predictable.
> -		Specifically this interface:
> -
> -		1. Guarantees fault granularity with respect to a given
> -		   page size (pte, pmd, or pud) set at configuration time.
> -
> -		2. Enforces deterministic behavior by being strict about
> -		   what fault scenarios are supported.
> -
> -		The /sys/class/dax/ interface enumerates all the
> -		device-dax instances in the system. The ABI is
> -		deprecated and will be removed after 2020. It is
> -		replaced with the DAX bus interface /sys/bus/dax/ where
> -		device-dax instances can be found under
> -		/sys/bus/dax/devices/
> diff --git a/drivers/dax/Kconfig b/drivers/dax/Kconfig
> index d2834c2cfa10..15b442ef7b93 100644
> --- a/drivers/dax/Kconfig
> +++ b/drivers/dax/Kconfig
> @@ -70,13 +70,4 @@ config DEV_DAX_KMEM
>   
>   	  Say N if unsure.
>   
> -config DEV_DAX_PMEM_COMPAT
> -	tristate "PMEM DAX: support the deprecated /sys/class/dax interface"
> -	depends on m && DEV_DAX_PMEM=m
> -	default DEV_DAX_PMEM
> -	help
> -	  Older versions of the libdaxctl library expect to find all
> -	  device-dax instances under /sys/class/dax. If libdaxctl in
> -	  your distribution is older than v58 say M, otherwise say N.
> -
>   endif
> diff --git a/drivers/dax/Makefile b/drivers/dax/Makefile
> index 9d4ba672d305..90a56ca3b345 100644
> --- a/drivers/dax/Makefile
> +++ b/drivers/dax/Makefile
> @@ -2,10 +2,11 @@
>   obj-$(CONFIG_DAX) += dax.o
>   obj-$(CONFIG_DEV_DAX) += device_dax.o
>   obj-$(CONFIG_DEV_DAX_KMEM) += kmem.o
> +obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem.o
>   
>   dax-y := super.o
>   dax-y += bus.o
>   device_dax-y := device.o
> +dax_pmem-y := pmem.o
>   
> -obj-y += pmem/
>   obj-y += hmem/
> diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
> index 6cc4da4c713d..452cf7860926 100644
> --- a/drivers/dax/bus.c
> +++ b/drivers/dax/bus.c
> @@ -10,8 +10,6 @@
>   #include "dax-private.h"
>   #include "bus.h"
>   
> -static struct class *dax_class;
> -
>   static DEFINE_MUTEX(dax_bus_lock);
>   
>   #define DAX_NAME_LEN 30
> @@ -1343,10 +1341,7 @@ struct dev_dax *devm_create_dev_dax(struct dev_dax_data *data)
>   
>   	inode = dax_inode(dax_dev);
>   	dev->devt = inode->i_rdev;
> -	if (data->subsys == DEV_DAX_BUS)
> -		dev->bus = &dax_bus_type;
> -	else
> -		dev->class = dax_class;
> +	dev->bus = &dax_bus_type;
>   	dev->parent = parent;
>   	dev->type = &dev_dax_type;
>   
> @@ -1445,22 +1440,10 @@ EXPORT_SYMBOL_GPL(dax_driver_unregister);
>   
>   int __init dax_bus_init(void)
>   {
> -	int rc;
> -
> -	if (IS_ENABLED(CONFIG_DEV_DAX_PMEM_COMPAT)) {
> -		dax_class = class_create(THIS_MODULE, "dax");
> -		if (IS_ERR(dax_class))
> -			return PTR_ERR(dax_class);
> -	}
> -
> -	rc = bus_register(&dax_bus_type);
> -	if (rc)
> -		class_destroy(dax_class);
> -	return rc;
> +	return bus_register(&dax_bus_type);
>   }
>   
>   void __exit dax_bus_exit(void)
>   {
>   	bus_unregister(&dax_bus_type);
> -	class_destroy(dax_class);
>   }
> diff --git a/drivers/dax/bus.h b/drivers/dax/bus.h
> index 1e946ad7780a..381cec9ff05c 100644
> --- a/drivers/dax/bus.h
> +++ b/drivers/dax/bus.h
> @@ -16,24 +16,15 @@ struct dax_region *alloc_dax_region(struct device *parent, int region_id,
>   		struct range *range, int target_node, unsigned int align,
>   		unsigned long flags);
>   
> -enum dev_dax_subsys {
> -	DEV_DAX_BUS = 0, /* zeroed dev_dax_data picks this by default */
> -	DEV_DAX_CLASS,
> -};
> -
>   struct dev_dax_data {
>   	struct dax_region *dax_region;
>   	struct dev_pagemap *pgmap;
> -	enum dev_dax_subsys subsys;
>   	resource_size_t size;
>   	int id;
>   };
>   
>   struct dev_dax *devm_create_dev_dax(struct dev_dax_data *data);
>   
> -/* to be deleted when DEV_DAX_CLASS is removed */
> -struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys);
> -
>   struct dax_device_driver {
>   	struct device_driver drv;
>   	struct list_head ids;
> @@ -49,10 +40,6 @@ int __dax_driver_register(struct dax_device_driver *dax_drv,
>   void dax_driver_unregister(struct dax_device_driver *dax_drv);
>   void kill_dev_dax(struct dev_dax *dev_dax);
>   
> -#if IS_ENABLED(CONFIG_DEV_DAX_PMEM_COMPAT)
> -int dev_dax_probe(struct dev_dax *dev_dax);
> -#endif
> -
>   /*
>    * While run_dax() is potentially a generic operation that could be
>    * defined in include/linux/dax.h we don't want to grow any users
> diff --git a/drivers/dax/device.c b/drivers/dax/device.c
> index dd8222a42808..e58d597f0415 100644
> --- a/drivers/dax/device.c
> +++ b/drivers/dax/device.c
> @@ -433,11 +433,7 @@ int dev_dax_probe(struct dev_dax *dev_dax)
>   	inode = dax_inode(dax_dev);
>   	cdev = inode->i_cdev;
>   	cdev_init(cdev, &dax_fops);
> -	if (dev->class) {
> -		/* for the CONFIG_DEV_DAX_PMEM_COMPAT case */
> -		cdev->owner = dev->parent->driver->owner;
> -	} else
> -		cdev->owner = dev->driver->owner;
> +	cdev->owner = dev->driver->owner;
>   	cdev_set_parent(cdev, &dev->kobj);
>   	rc = cdev_add(cdev, dev->devt, 1);
>   	if (rc)
> diff --git a/drivers/dax/pmem/core.c b/drivers/dax/pmem.c
> similarity index 75%
> rename from drivers/dax/pmem/core.c
> rename to drivers/dax/pmem.c
> index 062e8bc14223..f050ea78bb83 100644
> --- a/drivers/dax/pmem/core.c
> +++ b/drivers/dax/pmem.c
> @@ -3,11 +3,11 @@
>   #include <linux/memremap.h>
>   #include <linux/module.h>
>   #include <linux/pfn_t.h>
> -#include "../../nvdimm/pfn.h"
> -#include "../../nvdimm/nd.h"
> -#include "../bus.h"
> +#include "../nvdimm/pfn.h"
> +#include "../nvdimm/nd.h"
> +#include "bus.h"
>   
> -struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
> +static struct dev_dax *__dax_pmem_probe(struct device *dev)
>   {
>   	struct range range;
>   	int rc, id, region_id;
> @@ -63,7 +63,6 @@ struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
>   		.dax_region = dax_region,
>   		.id = id,
>   		.pgmap = &pgmap,
> -		.subsys = subsys,
>   		.size = range_len(&range),
>   	};
>   	dev_dax = devm_create_dev_dax(&data);
> @@ -73,7 +72,32 @@ struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
>   
>   	return dev_dax;
>   }
> -EXPORT_SYMBOL_GPL(__dax_pmem_probe);
> +
> +static int dax_pmem_probe(struct device *dev)
> +{
> +	return PTR_ERR_OR_ZERO(__dax_pmem_probe(dev));
> +}
> +
> +static struct nd_device_driver dax_pmem_driver = {
> +	.probe = dax_pmem_probe,
> +	.drv = {
> +		.name = "dax_pmem",
> +	},
> +	.type = ND_DRIVER_DAX_PMEM,
> +};
> +
> +static int __init dax_pmem_init(void)
> +{
> +	return nd_driver_register(&dax_pmem_driver);
> +}
> +module_init(dax_pmem_init);
> +
> +static void __exit dax_pmem_exit(void)
> +{
> +	driver_unregister(&dax_pmem_driver.drv);
> +}
> +module_exit(dax_pmem_exit);
>   
>   MODULE_LICENSE("GPL v2");
>   MODULE_AUTHOR("Intel Corporation");
> +MODULE_ALIAS_ND_DEVICE(ND_DEVICE_DAX_PMEM);
> diff --git a/drivers/dax/pmem/Makefile b/drivers/dax/pmem/Makefile
> index 010269f61d41..191c31f0d4f0 100644
> --- a/drivers/dax/pmem/Makefile
> +++ b/drivers/dax/pmem/Makefile
> @@ -1,7 +1,6 @@
>   # SPDX-License-Identifier: GPL-2.0-only
>   obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem.o
>   obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem_core.o
> -obj-$(CONFIG_DEV_DAX_PMEM_COMPAT) += dax_pmem_compat.o
>   
>   dax_pmem-y := pmem.o
>   dax_pmem_core-y := core.o
> diff --git a/drivers/dax/pmem/compat.c b/drivers/dax/pmem/compat.c
> deleted file mode 100644
> index d81dc35fd65d..000000000000
> --- a/drivers/dax/pmem/compat.c
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -/* Copyright(c) 2016 - 2018 Intel Corporation. All rights reserved. */
> -#include <linux/percpu-refcount.h>
> -#include <linux/memremap.h>
> -#include <linux/module.h>
> -#include <linux/pfn_t.h>
> -#include <linux/nd.h>
> -#include "../bus.h"
> -
> -/* we need the private definitions to implement compat suport */
> -#include "../dax-private.h"
> -
> -static int dax_pmem_compat_probe(struct device *dev)
> -{
> -	struct dev_dax *dev_dax = __dax_pmem_probe(dev, DEV_DAX_CLASS);
> -	int rc;
> -
> -	if (IS_ERR(dev_dax))
> -		return PTR_ERR(dev_dax);
> -
> -        if (!devres_open_group(&dev_dax->dev, dev_dax, GFP_KERNEL))
> -		return -ENOMEM;
> -
> -	device_lock(&dev_dax->dev);
> -	rc = dev_dax_probe(dev_dax);
> -	device_unlock(&dev_dax->dev);
> -
> -	devres_close_group(&dev_dax->dev, dev_dax);
> -	if (rc)
> -		devres_release_group(&dev_dax->dev, dev_dax);
> -
> -	return rc;
> -}
> -
> -static int dax_pmem_compat_release(struct device *dev, void *data)
> -{
> -	device_lock(dev);
> -	devres_release_group(dev, to_dev_dax(dev));
> -	device_unlock(dev);
> -
> -	return 0;
> -}
> -
> -static void dax_pmem_compat_remove(struct device *dev)
> -{
> -	device_for_each_child(dev, NULL, dax_pmem_compat_release);
> -}
> -
> -static struct nd_device_driver dax_pmem_compat_driver = {
> -	.probe = dax_pmem_compat_probe,
> -	.remove = dax_pmem_compat_remove,
> -	.drv = {
> -		.name = "dax_pmem_compat",
> -	},
> -	.type = ND_DRIVER_DAX_PMEM,
> -};
> -
> -static int __init dax_pmem_compat_init(void)
> -{
> -	return nd_driver_register(&dax_pmem_compat_driver);
> -}
> -module_init(dax_pmem_compat_init);
> -
> -static void __exit dax_pmem_compat_exit(void)
> -{
> -	driver_unregister(&dax_pmem_compat_driver.drv);
> -}
> -module_exit(dax_pmem_compat_exit);
> -
> -MODULE_LICENSE("GPL v2");
> -MODULE_AUTHOR("Intel Corporation");
> -MODULE_ALIAS_ND_DEVICE(ND_DEVICE_DAX_PMEM);
> diff --git a/drivers/dax/pmem/pmem.c b/drivers/dax/pmem/pmem.c
> index 0ae4238a0ef8..dfe91a2990fe 100644
> --- a/drivers/dax/pmem/pmem.c
> +++ b/drivers/dax/pmem/pmem.c
> @@ -7,34 +7,4 @@
>   #include <linux/nd.h>
>   #include "../bus.h"
>   
> -static int dax_pmem_probe(struct device *dev)
> -{
> -	return PTR_ERR_OR_ZERO(__dax_pmem_probe(dev, DEV_DAX_BUS));
> -}
>   
> -static struct nd_device_driver dax_pmem_driver = {
> -	.probe = dax_pmem_probe,
> -	.drv = {
> -		.name = "dax_pmem",
> -	},
> -	.type = ND_DRIVER_DAX_PMEM,
> -};
> -
> -static int __init dax_pmem_init(void)
> -{
> -	return nd_driver_register(&dax_pmem_driver);
> -}
> -module_init(dax_pmem_init);
> -
> -static void __exit dax_pmem_exit(void)
> -{
> -	driver_unregister(&dax_pmem_driver.drv);
> -}
> -module_exit(dax_pmem_exit);
> -
> -MODULE_LICENSE("GPL v2");
> -MODULE_AUTHOR("Intel Corporation");
> -#if !IS_ENABLED(CONFIG_DEV_DAX_PMEM_COMPAT)
> -/* For compat builds, don't load this module by default */
> -MODULE_ALIAS_ND_DEVICE(ND_DEVICE_DAX_PMEM);
> -#endif
> diff --git a/tools/testing/nvdimm/Kbuild b/tools/testing/nvdimm/Kbuild
> index 47f9cc9dcd94..c57d9e9d4480 100644
> --- a/tools/testing/nvdimm/Kbuild
> +++ b/tools/testing/nvdimm/Kbuild
> @@ -35,8 +35,6 @@ obj-$(CONFIG_DAX) += dax.o
>   endif
>   obj-$(CONFIG_DEV_DAX) += device_dax.o
>   obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem.o
> -obj-$(CONFIG_DEV_DAX_PMEM) += dax_pmem_core.o
> -obj-$(CONFIG_DEV_DAX_PMEM_COMPAT) += dax_pmem_compat.o
>   
>   nfit-y := $(ACPI_SRC)/core.o
>   nfit-y += $(ACPI_SRC)/intel.o
> @@ -67,12 +65,8 @@ device_dax-y += dax-dev.o
>   device_dax-y += device_dax_test.o
>   device_dax-y += config_check.o
>   
> -dax_pmem-y := $(DAX_SRC)/pmem/pmem.o
> +dax_pmem-y := $(DAX_SRC)/pmem.o
>   dax_pmem-y += dax_pmem_test.o
> -dax_pmem_core-y := $(DAX_SRC)/pmem/core.o
> -dax_pmem_core-y += dax_pmem_core_test.o
> -dax_pmem_compat-y := $(DAX_SRC)/pmem/compat.o
> -dax_pmem_compat-y += dax_pmem_compat_test.o
>   dax_pmem-y += config_check.o
>   
>   libnvdimm-y := $(NVDIMM_SRC)/core.o
> diff --git a/tools/testing/nvdimm/dax_pmem_compat_test.c b/tools/testing/nvdimm/dax_pmem_compat_test.c
> deleted file mode 100644
> index 7cd1877f3765..000000000000
> --- a/tools/testing/nvdimm/dax_pmem_compat_test.c
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -// Copyright(c) 2019 Intel Corporation. All rights reserved.
> -
> -#include <linux/module.h>
> -#include <linux/printk.h>
> -#include "watermark.h"
> -
> -nfit_test_watermark(dax_pmem_compat);
> diff --git a/tools/testing/nvdimm/dax_pmem_core_test.c b/tools/testing/nvdimm/dax_pmem_core_test.c
> deleted file mode 100644
> index a4249cdbeec1..000000000000
> --- a/tools/testing/nvdimm/dax_pmem_core_test.c
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -// Copyright(c) 2019 Intel Corporation. All rights reserved.
> -
> -#include <linux/module.h>
> -#include <linux/printk.h>
> -#include "watermark.h"
> -
> -nfit_test_watermark(dax_pmem_core);
> diff --git a/tools/testing/nvdimm/test/ndtest.c b/tools/testing/nvdimm/test/ndtest.c
> index 6862915f1fb0..3ca7c32e9362 100644
> --- a/tools/testing/nvdimm/test/ndtest.c
> +++ b/tools/testing/nvdimm/test/ndtest.c
> @@ -1054,10 +1054,6 @@ static __init int ndtest_init(void)
>   	libnvdimm_test();
>   	device_dax_test();
>   	dax_pmem_test();
> -	dax_pmem_core_test();
> -#ifdef CONFIG_DEV_DAX_PMEM_COMPAT
> -	dax_pmem_compat_test();
> -#endif
>   
>   	nfit_test_setup(ndtest_resource_lookup, NULL);
>   
> diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c
> index b1bff5fb0f65..0bc91ffee257 100644
> --- a/tools/testing/nvdimm/test/nfit.c
> +++ b/tools/testing/nvdimm/test/nfit.c
> @@ -3300,10 +3300,6 @@ static __init int nfit_test_init(void)
>   	acpi_nfit_test();
>   	device_dax_test();
>   	dax_pmem_test();
> -	dax_pmem_core_test();
> -#ifdef CONFIG_DEV_DAX_PMEM_COMPAT
> -	dax_pmem_compat_test();
> -#endif
>   
>   	nfit_test_setup(nfit_test_lookup, nfit_test_evaluate_dsm);
>   
> 





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux