diff mbox series

[v1] device-dax: Adding match parameter to select which driver to match dax devices

Message ID 20220228094938.32153-1-yaozhenguo1@gmail.com (mailing list archive)
State Superseded
Headers show
Series [v1] device-dax: Adding match parameter to select which driver to match dax devices | expand

Commit Message

Zhenguo Yao Feb. 28, 2022, 9:49 a.m. UTC
device_dax driver always match dax devices by default. The other
drivers only match devices by dax_id. There are situations which
need kmem drvier match all the dax device at boot time. So
adding a parameter to support this function.

Signed-off-by: Zhenguo Yao <yaozhenguo1@gmail.com>
---
 drivers/dax/device.c | 3 +++
 drivers/dax/kmem.c   | 4 ++++
 2 files changed, 7 insertions(+)

Comments

kernel test robot Feb. 28, 2022, 5:36 p.m. UTC | #1
Hi Zhenguo,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.17-rc6 next-20220225]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Zhenguo-Yao/device-dax-Adding-match-parameter-to-select-which-driver-to-match-dax-devices/20220228-175040
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7e57714cd0ad2d5bb90e50b5096a0e671dec1ef3
config: arm64-randconfig-r006-20220227 (https://download.01.org/0day-ci/archive/20220301/202203010043.CdGByjRQ-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/5be3350fe78893555785550e6fdf382715c2dca9
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Zhenguo-Yao/device-dax-Adding-match-parameter-to-select-which-driver-to-match-dax-devices/20220228-175040
        git checkout 5be3350fe78893555785550e6fdf382715c2dca9
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> aarch64-linux-ld: drivers/dax/kmem.o:(.bss+0x10): multiple definition of `match'; drivers/dax/device.o:(.data+0xb8): first defined here

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Dan Williams March 23, 2022, 2:01 a.m. UTC | #2
On Mon, Feb 28, 2022 at 1:50 AM Zhenguo Yao <yaozhenguo1@gmail.com> wrote:
>
> device_dax driver always match dax devices by default. The other
> drivers only match devices by dax_id. There are situations which
> need kmem drvier match all the dax device at boot time. So
> adding a parameter to support this function.

What are the situations that happen at boot time that can't wait for
initramfs or userspace to move the device assignment?
Zhenguo Yao March 23, 2022, 2:44 a.m. UTC | #3
I thought about it carefully. Indeed, in my scenario(virtual machine which use
optane as DRAM), device assignment can be performed in userspace at very
early time after the system is started. This patch is not needed in my
scenario. Thank you for your reply.

Dan Williams <dan.j.williams@intel.com> 于2022年3月23日周三 10:01写道:
>
> On Mon, Feb 28, 2022 at 1:50 AM Zhenguo Yao <yaozhenguo1@gmail.com> wrote:
> >
> > device_dax driver always match dax devices by default. The other
> > drivers only match devices by dax_id. There are situations which
> > need kmem drvier match all the dax device at boot time. So
> > adding a parameter to support this function.
>
> What are the situations that happen at boot time that can't wait for
> initramfs or userspace to move the device assignment?
diff mbox series

Patch

diff --git a/drivers/dax/device.c b/drivers/dax/device.c
index dd8222a..a974cc1 100644
--- a/drivers/dax/device.c
+++ b/drivers/dax/device.c
@@ -452,6 +452,7 @@  int dev_dax_probe(struct dev_dax *dev_dax)
 }
 EXPORT_SYMBOL_GPL(dev_dax_probe);
 
+unsigned int match = 1;
 static struct dax_device_driver device_dax_driver = {
 	.probe = dev_dax_probe,
 	/* all probe actions are unwound by devm, so .remove isn't necessary */
@@ -460,6 +461,7 @@  int dev_dax_probe(struct dev_dax *dev_dax)
 
 static int __init dax_init(void)
 {
+	device_dax_driver.match_always = match;
 	return dax_driver_register(&device_dax_driver);
 }
 
@@ -468,6 +470,7 @@  static void __exit dax_exit(void)
 	dax_driver_unregister(&device_dax_driver);
 }
 
+module_param(match, uint, 0644);
 MODULE_AUTHOR("Intel Corporation");
 MODULE_LICENSE("GPL v2");
 module_init(dax_init);
diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c
index a376220..41ba713 100644
--- a/drivers/dax/kmem.c
+++ b/drivers/dax/kmem.c
@@ -214,9 +214,11 @@  static void dev_dax_kmem_remove(struct dev_dax *dev_dax)
 }
 #endif /* CONFIG_MEMORY_HOTREMOVE */
 
+unsigned int match;
 static struct dax_device_driver device_dax_kmem_driver = {
 	.probe = dev_dax_kmem_probe,
 	.remove = dev_dax_kmem_remove,
+	.match_always = 0,
 };
 
 static int __init dax_kmem_init(void)
@@ -228,6 +230,7 @@  static int __init dax_kmem_init(void)
 	if (!kmem_name)
 		return -ENOMEM;
 
+	device_dax_kmem_driver.match_always = match;
 	rc = dax_driver_register(&device_dax_kmem_driver);
 	if (rc)
 		kfree_const(kmem_name);
@@ -241,6 +244,7 @@  static void __exit dax_kmem_exit(void)
 		kfree_const(kmem_name);
 }
 
+module_param(match, uint, 0644);
 MODULE_AUTHOR("Intel Corporation");
 MODULE_LICENSE("GPL v2");
 module_init(dax_kmem_init);