linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Add module autoprobing support for vop and cosm driver
@ 2020-09-25  7:31 Sherry Sun
  2020-09-25  7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Sherry Sun @ 2020-09-25  7:31 UTC (permalink / raw)
  To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy,
	michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart
  Cc: linux-kernel, linux-kbuild, linux-imx

Add module autoprobing support for vop and cosm driver, when the vop/cosm device
appears, the driver will be autoloaded.

Sherry Sun (3):
  mic: vop: fix a written error in MODULE_DEVICE_TABLE
  mic: vop: module autoprobing support for vop drivers
  mic: cosm: module autoprobing support for cosm driver

 drivers/misc/mic/bus/cosm_bus.c   |  8 ++++++++
 drivers/misc/mic/bus/vop_bus.h    |  7 +------
 drivers/misc/mic/cosm/cosm_main.c |  7 +++++++
 drivers/misc/mic/vop/vop_main.c   |  2 +-
 include/linux/mod_devicetable.h   | 15 +++++++++++++++
 scripts/mod/devicetable-offsets.c |  7 +++++++
 scripts/mod/file2alias.c          | 27 +++++++++++++++++++++++++++
 7 files changed, 66 insertions(+), 7 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE
  2020-09-25  7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun
@ 2020-09-25  7:31 ` Sherry Sun
  2020-09-27 10:28   ` Greg KH
  2020-09-25  7:31 ` [PATCH 2/3] mic: vop: module autoprobing support for vop drivers Sherry Sun
  2020-09-25  7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun
  2 siblings, 1 reply; 10+ messages in thread
From: Sherry Sun @ 2020-09-25  7:31 UTC (permalink / raw)
  To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy,
	michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart
  Cc: linux-kernel, linux-kbuild, linux-imx

For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE.

Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
---
 drivers/misc/mic/vop/vop_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/misc/mic/vop/vop_main.c b/drivers/misc/mic/vop/vop_main.c
index d609f0dc6124..589425fa78d4 100644
--- a/drivers/misc/mic/vop/vop_main.c
+++ b/drivers/misc/mic/vop/vop_main.c
@@ -796,7 +796,7 @@ static struct vop_driver vop_driver = {
 
 module_vop_driver(vop_driver);
 
-MODULE_DEVICE_TABLE(mbus, id_table);
+MODULE_DEVICE_TABLE(vop, id_table);
 MODULE_AUTHOR("Intel Corporation");
 MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver");
 MODULE_LICENSE("GPL v2");
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/3] mic: vop: module autoprobing support for vop drivers
  2020-09-25  7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun
  2020-09-25  7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun
@ 2020-09-25  7:31 ` Sherry Sun
  2020-09-25  7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun
  2 siblings, 0 replies; 10+ messages in thread
From: Sherry Sun @ 2020-09-25  7:31 UTC (permalink / raw)
  To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy,
	michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart
  Cc: linux-kernel, linux-kbuild, linux-imx

Add vop autoprobing support to MODULE_DEVICE_TABLE() by adding info
about struct vop_device_id in devicetable-offsets.c and add a vop entry
point in file2alias.c.

The type argument for MODULE_DEVICE_TABLE(type, name) is vop.

Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
---
 drivers/misc/mic/bus/vop_bus.h    |  7 +------
 include/linux/mod_devicetable.h   |  7 +++++++
 scripts/mod/devicetable-offsets.c |  4 ++++
 scripts/mod/file2alias.c          | 16 ++++++++++++++++
 4 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/drivers/misc/mic/bus/vop_bus.h b/drivers/misc/mic/bus/vop_bus.h
index d891eacae358..5b4a58757951 100644
--- a/drivers/misc/mic/bus/vop_bus.h
+++ b/drivers/misc/mic/bus/vop_bus.h
@@ -14,16 +14,11 @@
  */
 #include <linux/dmaengine.h>
 #include <linux/interrupt.h>
+#include <linux/mod_devicetable.h>
 
 #include "../common/mic_dev.h"
 
-struct vop_device_id {
-	u32 device;
-	u32 vendor;
-};
-
 #define VOP_DEV_TRNSP 1
-#define VOP_DEV_ANY_ID 0xffffffff
 /*
  * Size of the internal buffer used during DMA's as an intermediate buffer
  * for copy to/from user. Must be an integral number of pages.
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 5b08a473cdba..736cdc236cf9 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -838,4 +838,11 @@ struct mhi_device_id {
 	kernel_ulong_t driver_data;
 };
 
+/* vop */
+struct vop_device_id {
+	__u32 device;
+	__u32 vendor;
+};
+#define VOP_DEV_ANY_ID	0xffffffff
+
 #endif /* LINUX_MOD_DEVICETABLE_H */
diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
index 27007c18e754..393acaa5302a 100644
--- a/scripts/mod/devicetable-offsets.c
+++ b/scripts/mod/devicetable-offsets.c
@@ -243,5 +243,9 @@ int main(void)
 	DEVID(mhi_device_id);
 	DEVID_FIELD(mhi_device_id, chan);
 
+	DEVID(vop_device_id);
+	DEVID_FIELD(vop_device_id, device);
+	DEVID_FIELD(vop_device_id, vendor);
+
 	return 0;
 }
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 2417dd1dee33..8063b778eedf 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -1368,6 +1368,21 @@ static int do_mhi_entry(const char *filename, void *symval, char *alias)
 	return 1;
 }
 
+/* Looks like: vop:dNvN */
+static int do_vop_entry(const char *filename, void *symval,
+			   char *alias)
+{
+	DEF_FIELD(symval, vop_device_id, device);
+	DEF_FIELD(symval, vop_device_id, vendor);
+
+	strcpy(alias, "vop:");
+	ADD(alias, "d", device != VOP_DEV_ANY_ID, device);
+	ADD(alias, "v", vendor != VOP_DEV_ANY_ID, vendor);
+
+	add_wildcard(alias);
+	return 1;
+}
+
 /* Does namelen bytes of name exactly match the symbol? */
 static bool sym_is(const char *name, unsigned namelen, const char *symbol)
 {
@@ -1442,6 +1457,7 @@ static const struct devtable devtable[] = {
 	{"tee", SIZE_tee_client_device_id, do_tee_entry},
 	{"wmi", SIZE_wmi_device_id, do_wmi_entry},
 	{"mhi", SIZE_mhi_device_id, do_mhi_entry},
+	{"vop", SIZE_vop_device_id, do_vop_entry},
 };
 
 /* Create MODULE_ALIAS() statements.
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver
  2020-09-25  7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun
  2020-09-25  7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun
  2020-09-25  7:31 ` [PATCH 2/3] mic: vop: module autoprobing support for vop drivers Sherry Sun
@ 2020-09-25  7:31 ` Sherry Sun
  2020-09-27 10:29   ` Greg KH
  2 siblings, 1 reply; 10+ messages in thread
From: Sherry Sun @ 2020-09-25  7:31 UTC (permalink / raw)
  To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy,
	michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart
  Cc: linux-kernel, linux-kbuild, linux-imx

Add uevent callback for cosm_bus and add cosm_device_id for cosm driver
which is needed for MODULE_DEVICE_TABLE. Also adding struct
cosm_device_id in devicetable-offsets.c and the cosm entry point in
file2alias.c.

Cosm driver will be autoloaded when cosm device appears.

Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
---
 drivers/misc/mic/bus/cosm_bus.c   |  8 ++++++++
 drivers/misc/mic/cosm/cosm_main.c |  7 +++++++
 include/linux/mod_devicetable.h   |  8 ++++++++
 scripts/mod/devicetable-offsets.c |  3 +++
 scripts/mod/file2alias.c          | 11 +++++++++++
 5 files changed, 37 insertions(+)

diff --git a/drivers/misc/mic/bus/cosm_bus.c b/drivers/misc/mic/bus/cosm_bus.c
index 5f2141c71738..736e27bbc9f9 100644
--- a/drivers/misc/mic/bus/cosm_bus.c
+++ b/drivers/misc/mic/bus/cosm_bus.c
@@ -14,6 +14,13 @@
 /* Unique numbering for cosm devices. */
 static DEFINE_IDA(cosm_index_ida);
 
+static int cosm_uevent(struct device *d, struct kobj_uevent_env *env)
+{
+	struct cosm_device *dev = dev_to_cosm(d);
+
+	return add_uevent_var(env, "MODALIAS=cosm:cosm-dev%u", dev->index);
+}
+
 static int cosm_dev_probe(struct device *d)
 {
 	struct cosm_device *dev = dev_to_cosm(d);
@@ -33,6 +40,7 @@ static int cosm_dev_remove(struct device *d)
 
 static struct bus_type cosm_bus = {
 	.name  = "cosm_bus",
+	.uevent = cosm_uevent,
 	.probe = cosm_dev_probe,
 	.remove = cosm_dev_remove,
 };
diff --git a/drivers/misc/mic/cosm/cosm_main.c b/drivers/misc/mic/cosm/cosm_main.c
index ebb0eac43754..627e7d5f3a83 100644
--- a/drivers/misc/mic/cosm/cosm_main.c
+++ b/drivers/misc/mic/cosm/cosm_main.c
@@ -12,6 +12,7 @@
 #include <linux/idr.h>
 #include <linux/slab.h>
 #include <linux/cred.h>
+#include <linux/mod_devicetable.h>
 #include "cosm_main.h"
 
 static const char cosm_driver_name[] = "mic";
@@ -323,6 +324,12 @@ static int cosm_suspend(struct device *dev)
 	return 0;
 }
 
+static struct cosm_device_id __maybe_unused cosm_driver_id_table[] = {
+	{ .name	= "cosm-dev*" },
+	{ },
+};
+MODULE_DEVICE_TABLE(cosm, cosm_driver_id_table);
+
 static const struct dev_pm_ops cosm_pm_ops = {
 	.suspend = cosm_suspend,
 	.freeze = cosm_suspend
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 736cdc236cf9..ea6cdfe1a3a3 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -845,4 +845,12 @@ struct vop_device_id {
 };
 #define VOP_DEV_ANY_ID	0xffffffff
 
+/* cosm */
+#define COSM_NAME_SIZE			32
+#define COSM_MODULE_PREFIX	"cosm:"
+
+struct cosm_device_id {
+	char name[COSM_NAME_SIZE];
+};
+
 #endif /* LINUX_MOD_DEVICETABLE_H */
diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
index 393acaa5302a..499a2832878d 100644
--- a/scripts/mod/devicetable-offsets.c
+++ b/scripts/mod/devicetable-offsets.c
@@ -247,5 +247,8 @@ int main(void)
 	DEVID_FIELD(vop_device_id, device);
 	DEVID_FIELD(vop_device_id, vendor);
 
+	DEVID(cosm_device_id);
+	DEVID_FIELD(cosm_device_id, name);
+
 	return 0;
 }
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index 8063b778eedf..f7c80e4da137 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -1383,6 +1383,16 @@ static int do_vop_entry(const char *filename, void *symval,
 	return 1;
 }
 
+/* Looks like: cosm:S */
+static int do_cosm_entry(const char *filename, void *symval,
+			  char *alias)
+{
+	DEF_FIELD_ADDR(symval, cosm_device_id, name);
+	sprintf(alias, COSM_MODULE_PREFIX "%s", *name);
+
+	return 1;
+}
+
 /* Does namelen bytes of name exactly match the symbol? */
 static bool sym_is(const char *name, unsigned namelen, const char *symbol)
 {
@@ -1458,6 +1468,7 @@ static const struct devtable devtable[] = {
 	{"wmi", SIZE_wmi_device_id, do_wmi_entry},
 	{"mhi", SIZE_mhi_device_id, do_mhi_entry},
 	{"vop", SIZE_vop_device_id, do_vop_entry},
+	{"cosm", SIZE_cosm_device_id, do_cosm_entry},
 };
 
 /* Create MODULE_ALIAS() statements.
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE
  2020-09-25  7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun
@ 2020-09-27 10:28   ` Greg KH
  2020-09-27 12:19     ` Sherry Sun
  0 siblings, 1 reply; 10+ messages in thread
From: Greg KH @ 2020-09-27 10:28 UTC (permalink / raw)
  To: Sherry Sun
  Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml,
	lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart,
	linux-kernel, linux-kbuild, linux-imx

On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote:
> For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE.
> 
> Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
> ---
>  drivers/misc/mic/vop/vop_main.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/misc/mic/vop/vop_main.c b/drivers/misc/mic/vop/vop_main.c
> index d609f0dc6124..589425fa78d4 100644
> --- a/drivers/misc/mic/vop/vop_main.c
> +++ b/drivers/misc/mic/vop/vop_main.c
> @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = {
>  
>  module_vop_driver(vop_driver);
>  
> -MODULE_DEVICE_TABLE(mbus, id_table);
> +MODULE_DEVICE_TABLE(vop, id_table);
>  MODULE_AUTHOR("Intel Corporation");
>  MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver");
>  MODULE_LICENSE("GPL v2");

Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) support,
which you add in patch 2 of this series?

Does this patch here break the build?  If not, how is it working?

And if you only have one vop driver, why do you need autoloading for it?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver
  2020-09-25  7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun
@ 2020-09-27 10:29   ` Greg KH
  2020-09-27 13:04     ` Sherry Sun
  0 siblings, 1 reply; 10+ messages in thread
From: Greg KH @ 2020-09-27 10:29 UTC (permalink / raw)
  To: Sherry Sun
  Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml,
	lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart,
	linux-kernel, linux-kbuild, linux-imx

On Fri, Sep 25, 2020 at 03:31:58PM +0800, Sherry Sun wrote:
> Add uevent callback for cosm_bus and add cosm_device_id for cosm driver
> which is needed for MODULE_DEVICE_TABLE. Also adding struct
> cosm_device_id in devicetable-offsets.c and the cosm entry point in
> file2alias.c.
> 
> Cosm driver will be autoloaded when cosm device appears.
> 
> Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
> ---
>  drivers/misc/mic/bus/cosm_bus.c   |  8 ++++++++
>  drivers/misc/mic/cosm/cosm_main.c |  7 +++++++
>  include/linux/mod_devicetable.h   |  8 ++++++++
>  scripts/mod/devicetable-offsets.c |  3 +++
>  scripts/mod/file2alias.c          | 11 +++++++++++
>  5 files changed, 37 insertions(+)
> 
> diff --git a/drivers/misc/mic/bus/cosm_bus.c b/drivers/misc/mic/bus/cosm_bus.c
> index 5f2141c71738..736e27bbc9f9 100644
> --- a/drivers/misc/mic/bus/cosm_bus.c
> +++ b/drivers/misc/mic/bus/cosm_bus.c
> @@ -14,6 +14,13 @@
>  /* Unique numbering for cosm devices. */
>  static DEFINE_IDA(cosm_index_ida);
>  
> +static int cosm_uevent(struct device *d, struct kobj_uevent_env *env)
> +{
> +	struct cosm_device *dev = dev_to_cosm(d);
> +
> +	return add_uevent_var(env, "MODALIAS=cosm:cosm-dev%u", dev->index);
> +}
> +
>  static int cosm_dev_probe(struct device *d)
>  {
>  	struct cosm_device *dev = dev_to_cosm(d);
> @@ -33,6 +40,7 @@ static int cosm_dev_remove(struct device *d)
>  
>  static struct bus_type cosm_bus = {
>  	.name  = "cosm_bus",
> +	.uevent = cosm_uevent,
>  	.probe = cosm_dev_probe,
>  	.remove = cosm_dev_remove,
>  };
> diff --git a/drivers/misc/mic/cosm/cosm_main.c b/drivers/misc/mic/cosm/cosm_main.c
> index ebb0eac43754..627e7d5f3a83 100644
> --- a/drivers/misc/mic/cosm/cosm_main.c
> +++ b/drivers/misc/mic/cosm/cosm_main.c
> @@ -12,6 +12,7 @@
>  #include <linux/idr.h>
>  #include <linux/slab.h>
>  #include <linux/cred.h>
> +#include <linux/mod_devicetable.h>
>  #include "cosm_main.h"
>  
>  static const char cosm_driver_name[] = "mic";
> @@ -323,6 +324,12 @@ static int cosm_suspend(struct device *dev)
>  	return 0;
>  }
>  
> +static struct cosm_device_id __maybe_unused cosm_driver_id_table[] = {
> +	{ .name	= "cosm-dev*" },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(cosm, cosm_driver_id_table);
> +
>  static const struct dev_pm_ops cosm_pm_ops = {
>  	.suspend = cosm_suspend,
>  	.freeze = cosm_suspend
> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> index 736cdc236cf9..ea6cdfe1a3a3 100644
> --- a/include/linux/mod_devicetable.h
> +++ b/include/linux/mod_devicetable.h
> @@ -845,4 +845,12 @@ struct vop_device_id {
>  };
>  #define VOP_DEV_ANY_ID	0xffffffff
>  
> +/* cosm */
> +#define COSM_NAME_SIZE			32
> +#define COSM_MODULE_PREFIX	"cosm:"
> +
> +struct cosm_device_id {
> +	char name[COSM_NAME_SIZE];
> +};
> +
>  #endif /* LINUX_MOD_DEVICETABLE_H */
> diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
> index 393acaa5302a..499a2832878d 100644
> --- a/scripts/mod/devicetable-offsets.c
> +++ b/scripts/mod/devicetable-offsets.c
> @@ -247,5 +247,8 @@ int main(void)
>  	DEVID_FIELD(vop_device_id, device);
>  	DEVID_FIELD(vop_device_id, vendor);
>  
> +	DEVID(cosm_device_id);
> +	DEVID_FIELD(cosm_device_id, name);
> +
>  	return 0;
>  }
> diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
> index 8063b778eedf..f7c80e4da137 100644
> --- a/scripts/mod/file2alias.c
> +++ b/scripts/mod/file2alias.c
> @@ -1383,6 +1383,16 @@ static int do_vop_entry(const char *filename, void *symval,
>  	return 1;
>  }
>  
> +/* Looks like: cosm:S */
> +static int do_cosm_entry(const char *filename, void *symval,
> +			  char *alias)
> +{
> +	DEF_FIELD_ADDR(symval, cosm_device_id, name);
> +	sprintf(alias, COSM_MODULE_PREFIX "%s", *name);
> +
> +	return 1;
> +}
> +
>  /* Does namelen bytes of name exactly match the symbol? */
>  static bool sym_is(const char *name, unsigned namelen, const char *symbol)
>  {
> @@ -1458,6 +1468,7 @@ static const struct devtable devtable[] = {
>  	{"wmi", SIZE_wmi_device_id, do_wmi_entry},
>  	{"mhi", SIZE_mhi_device_id, do_mhi_entry},
>  	{"vop", SIZE_vop_device_id, do_vop_entry},
> +	{"cosm", SIZE_cosm_device_id, do_cosm_entry},
>  };
>  
>  /* Create MODULE_ALIAS() statements.
> -- 
> 2.17.1
> 

You are adding MODULE_DEVICE_TABLE() support for a class of drivers, but
then never adding that support to those drivers?  Why add this at all
then?  Shouldn't you also be modifying a bunch of drivers to get this to
work properly?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE
  2020-09-27 10:28   ` Greg KH
@ 2020-09-27 12:19     ` Sherry Sun
  2020-09-27 12:31       ` Greg KH
  0 siblings, 1 reply; 10+ messages in thread
From: Sherry Sun @ 2020-09-27 12:19 UTC (permalink / raw)
  To: Greg KH
  Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml,
	lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart,
	linux-kernel, linux-kbuild, dl-linux-imx, Sherry Sun

Hi Greg,

> -----Original Message-----
> From: Greg KH <gregkh@linuxfoundation.org>
> Sent: 2020年9月27日 18:29
> To: Sherry Sun <sherry.sun@nxp.com>
> Cc: sudeep.dutt@intel.com; ashutosh.dixit@intel.com; arnd@arndb.de;
> masahiroy@kernel.org; michal.lkml@markovi.net; lee.jones@linaro.org;
> rikard.falkeborn@gmail.com; mst@redhat.co; bp@suse.de;
> jhugo@codeaurora.org; tglx@linutronix.de;
> manivannan.sadhasivam@linaro.org; mgross@linux.intel.com; pierre-
> louis.bossart@linux.intel.com; linux-kernel@vger.kernel.org; linux-
> kbuild@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> Subject: Re: [PATCH 1/3] mic: vop: fix a written error in
> MODULE_DEVICE_TABLE
> 
> On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote:
> > For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE.
> >
> > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
> > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
> > ---
> >  drivers/misc/mic/vop/vop_main.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/misc/mic/vop/vop_main.c
> > b/drivers/misc/mic/vop/vop_main.c index d609f0dc6124..589425fa78d4
> > 100644
> > --- a/drivers/misc/mic/vop/vop_main.c
> > +++ b/drivers/misc/mic/vop/vop_main.c
> > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = {
> >
> >  module_vop_driver(vop_driver);
> >
> > -MODULE_DEVICE_TABLE(mbus, id_table);
> > +MODULE_DEVICE_TABLE(vop, id_table);
> >  MODULE_AUTHOR("Intel Corporation");
> >  MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver");
> > MODULE_LICENSE("GPL v2");
> 
> Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) support,
> which you add in patch 2 of this series?

Yes, this patch must be used in conjunction with Patch2.
But I think here may be a small bug, in order to distinguish it from the driver
autoloading support, make this a separate patch.

I can put this patch together with Patch2 if you think it might look more reasonable.

> 
> Does this patch here break the build?  If not, how is it working?
> 
> And if you only have one vop driver, why do you need autoloading for it?
> 
No, it doesn't break the build. But actually it won't work(autoloaded) when kernel boot and vop device appears.

Although we may only have one vop driver, but in the mic Kconfig, the intel mic/vop/cosm/scif drivers all
recommended to be built as modules, if we don't add autoloading for them, we may need modprobe them
one by one manually both on EP and RC side.

Obviously, for our use case, driver autoloading is more convenient.

Best regards
Sherry

> thanks,
> 
> greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE
  2020-09-27 12:19     ` Sherry Sun
@ 2020-09-27 12:31       ` Greg KH
  2020-09-27 12:50         ` Sherry Sun
  0 siblings, 1 reply; 10+ messages in thread
From: Greg KH @ 2020-09-27 12:31 UTC (permalink / raw)
  To: Sherry Sun
  Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml,
	lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart,
	linux-kernel, linux-kbuild, dl-linux-imx

On Sun, Sep 27, 2020 at 12:19:50PM +0000, Sherry Sun wrote:
> Hi Greg,
> 
> > -----Original Message-----
> > From: Greg KH <gregkh@linuxfoundation.org>
> > Sent: 2020年9月27日 18:29
> > To: Sherry Sun <sherry.sun@nxp.com>
> > Cc: sudeep.dutt@intel.com; ashutosh.dixit@intel.com; arnd@arndb.de;
> > masahiroy@kernel.org; michal.lkml@markovi.net; lee.jones@linaro.org;
> > rikard.falkeborn@gmail.com; mst@redhat.co; bp@suse.de;
> > jhugo@codeaurora.org; tglx@linutronix.de;
> > manivannan.sadhasivam@linaro.org; mgross@linux.intel.com; pierre-
> > louis.bossart@linux.intel.com; linux-kernel@vger.kernel.org; linux-
> > kbuild@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> > Subject: Re: [PATCH 1/3] mic: vop: fix a written error in
> > MODULE_DEVICE_TABLE
> > 
> > On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote:
> > > For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE.
> > >
> > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
> > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
> > > ---
> > >  drivers/misc/mic/vop/vop_main.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/misc/mic/vop/vop_main.c
> > > b/drivers/misc/mic/vop/vop_main.c index d609f0dc6124..589425fa78d4
> > > 100644
> > > --- a/drivers/misc/mic/vop/vop_main.c
> > > +++ b/drivers/misc/mic/vop/vop_main.c
> > > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = {
> > >
> > >  module_vop_driver(vop_driver);
> > >
> > > -MODULE_DEVICE_TABLE(mbus, id_table);
> > > +MODULE_DEVICE_TABLE(vop, id_table);
> > >  MODULE_AUTHOR("Intel Corporation");
> > >  MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver");
> > > MODULE_LICENSE("GPL v2");
> > 
> > Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) support,
> > which you add in patch 2 of this series?
> 
> Yes, this patch must be used in conjunction with Patch2.
> But I think here may be a small bug, in order to distinguish it from the driver
> autoloading support, make this a separate patch.
> 
> I can put this patch together with Patch2 if you think it might look more reasonable.

How about _after_ patch 2, otherwise this patch will break the build,
right?

> > Does this patch here break the build?  If not, how is it working?
> > 
> > And if you only have one vop driver, why do you need autoloading for it?
> > 
> No, it doesn't break the build. But actually it won't work(autoloaded) when kernel boot and vop device appears.
> 
> Although we may only have one vop driver, but in the mic Kconfig, the intel mic/vop/cosm/scif drivers all
> recommended to be built as modules, if we don't add autoloading for them, we may need modprobe them
> one by one manually both on EP and RC side.
> 
> Obviously, for our use case, driver autoloading is more convenient.

Why are these all not "mic_SUFFIX" type drivers?  Why "vop" and "cosm"
and "scif"?

And if you only have 1 driver, then what would cause autoloading?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE
  2020-09-27 12:31       ` Greg KH
@ 2020-09-27 12:50         ` Sherry Sun
  0 siblings, 0 replies; 10+ messages in thread
From: Sherry Sun @ 2020-09-27 12:50 UTC (permalink / raw)
  To: Greg KH
  Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml,
	lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart,
	linux-kernel, linux-kbuild, dl-linux-imx

Hi Greg,

> On Sun, Sep 27, 2020 at 12:19:50PM +0000, Sherry Sun wrote:
> > Hi Greg,
> >
> > > -----Original Message-----
> > > From: Greg KH <gregkh@linuxfoundation.org>
> > > Sent: 2020年9月27日 18:29
> > > To: Sherry Sun <sherry.sun@nxp.com>
> > > Cc: sudeep.dutt@intel.com; ashutosh.dixit@intel.com; arnd@arndb.de;
> > > masahiroy@kernel.org; michal.lkml@markovi.net; lee.jones@linaro.org;
> > > rikard.falkeborn@gmail.com; mst@redhat.co; bp@suse.de;
> > > jhugo@codeaurora.org; tglx@linutronix.de;
> > > manivannan.sadhasivam@linaro.org; mgross@linux.intel.com; pierre-
> > > louis.bossart@linux.intel.com; linux-kernel@vger.kernel.org; linux-
> > > kbuild@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com>
> > > Subject: Re: [PATCH 1/3] mic: vop: fix a written error in
> > > MODULE_DEVICE_TABLE
> > >
> > > On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote:
> > > > For vop bus, the first parameter should be vop in
> MODULE_DEVICE_TABLE.
> > > >
> > > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
> > > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
> > > > ---
> > > >  drivers/misc/mic/vop/vop_main.c | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/misc/mic/vop/vop_main.c
> > > > b/drivers/misc/mic/vop/vop_main.c index
> d609f0dc6124..589425fa78d4
> > > > 100644
> > > > --- a/drivers/misc/mic/vop/vop_main.c
> > > > +++ b/drivers/misc/mic/vop/vop_main.c
> > > > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = {
> > > >
> > > >  module_vop_driver(vop_driver);
> > > >
> > > > -MODULE_DEVICE_TABLE(mbus, id_table);
> > > > +MODULE_DEVICE_TABLE(vop, id_table);
> > > >  MODULE_AUTHOR("Intel Corporation");
> > > >  MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver");
> > > > MODULE_LICENSE("GPL v2");
> > >
> > > Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...)
> > > support, which you add in patch 2 of this series?
> >
> > Yes, this patch must be used in conjunction with Patch2.
> > But I think here may be a small bug, in order to distinguish it from
> > the driver autoloading support, make this a separate patch.
> >
> > I can put this patch together with Patch2 if you think it might look more
> reasonable.
> 
> How about _after_ patch 2, otherwise this patch will break the build, right?

This change won't break the build, actually no matter what the first parameter
of MODULE_DEVICE_TABLE is, it won’t cause any build errors.

> 
> > > Does this patch here break the build?  If not, how is it working?
> > >
> > > And if you only have one vop driver, why do you need autoloading for it?
> > >
> > No, it doesn't break the build. But actually it won't work(autoloaded) when
> kernel boot and vop device appears.
> >
> > Although we may only have one vop driver, but in the mic Kconfig, the
> > intel mic/vop/cosm/scif drivers all recommended to be built as
> > modules, if we don't add autoloading for them, we may need modprobe
> them one by one manually both on EP and RC side.
> >
> > Obviously, for our use case, driver autoloading is more convenient.
> 
> Why are these all not "mic_SUFFIX" type drivers?  Why "vop" and "cosm"
> and "scif"?
> 

For VOP driver, it is designed to be a hardware independent Virtio Over PCIe (VOP) driver.
This is why we want to reuse it on i.MX platform. In theory, it can be applied to any platform.
With some changes, cosm driver also can be hardware independent.
So the names of them don’t use "mic_SUFFIX".

> And if you only have 1 driver, then what would cause autoloading?

As I understand it, if we add support for the driver autoloading like patch2,
driver will be autoloaded when the matched device appears.
Please correct me if I'm wrong.

Regards
Sherry

> 
> thanks,
> 
> greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver
  2020-09-27 10:29   ` Greg KH
@ 2020-09-27 13:04     ` Sherry Sun
  0 siblings, 0 replies; 10+ messages in thread
From: Sherry Sun @ 2020-09-27 13:04 UTC (permalink / raw)
  To: Greg KH
  Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml,
	lee.jones, rikard.falkeborn, bp, jhugo, tglx,
	manivannan.sadhasivam, mgross, pierre-louis.bossart,
	linux-kernel, linux-kbuild, dl-linux-imx, Sherry Sun

Hi Greg,
> 
> On Fri, Sep 25, 2020 at 03:31:58PM +0800, Sherry Sun wrote:
> > Add uevent callback for cosm_bus and add cosm_device_id for cosm
> > driver which is needed for MODULE_DEVICE_TABLE. Also adding struct
> > cosm_device_id in devicetable-offsets.c and the cosm entry point in
> > file2alias.c.
> >
> > Cosm driver will be autoloaded when cosm device appears.
> >
> > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
> > ---
> >  drivers/misc/mic/bus/cosm_bus.c   |  8 ++++++++
> >  drivers/misc/mic/cosm/cosm_main.c |  7 +++++++
> >  include/linux/mod_devicetable.h   |  8 ++++++++
> >  scripts/mod/devicetable-offsets.c |  3 +++
> >  scripts/mod/file2alias.c          | 11 +++++++++++
> >  5 files changed, 37 insertions(+)
> >
> > diff --git a/drivers/misc/mic/bus/cosm_bus.c
> > b/drivers/misc/mic/bus/cosm_bus.c index 5f2141c71738..736e27bbc9f9
> > 100644
> > --- a/drivers/misc/mic/bus/cosm_bus.c
> > +++ b/drivers/misc/mic/bus/cosm_bus.c
> > @@ -14,6 +14,13 @@
> >  /* Unique numbering for cosm devices. */  static
> > DEFINE_IDA(cosm_index_ida);
> >
> > +static int cosm_uevent(struct device *d, struct kobj_uevent_env *env)
> > +{
> > +	struct cosm_device *dev = dev_to_cosm(d);
> > +
> > +	return add_uevent_var(env, "MODALIAS=cosm:cosm-dev%u", dev-
> >index);
> > +}
> > +
> >  static int cosm_dev_probe(struct device *d)  {
> >  	struct cosm_device *dev = dev_to_cosm(d); @@ -33,6 +40,7 @@
> static
> > int cosm_dev_remove(struct device *d)
> >
> >  static struct bus_type cosm_bus = {
> >  	.name  = "cosm_bus",
> > +	.uevent = cosm_uevent,
> >  	.probe = cosm_dev_probe,
> >  	.remove = cosm_dev_remove,
> >  };
> > diff --git a/drivers/misc/mic/cosm/cosm_main.c
> > b/drivers/misc/mic/cosm/cosm_main.c
> > index ebb0eac43754..627e7d5f3a83 100644
> > --- a/drivers/misc/mic/cosm/cosm_main.c
> > +++ b/drivers/misc/mic/cosm/cosm_main.c
> > @@ -12,6 +12,7 @@
> >  #include <linux/idr.h>
> >  #include <linux/slab.h>
> >  #include <linux/cred.h>
> > +#include <linux/mod_devicetable.h>
> >  #include "cosm_main.h"
> >
> >  static const char cosm_driver_name[] = "mic"; @@ -323,6 +324,12 @@
> > static int cosm_suspend(struct device *dev)
> >  	return 0;
> >  }
> >
> > +static struct cosm_device_id __maybe_unused cosm_driver_id_table[] = {
> > +	{ .name	= "cosm-dev*" },
> > +	{ },
> > +};
> > +MODULE_DEVICE_TABLE(cosm, cosm_driver_id_table);
> > +
> >  static const struct dev_pm_ops cosm_pm_ops = {
> >  	.suspend = cosm_suspend,
> >  	.freeze = cosm_suspend
> > diff --git a/include/linux/mod_devicetable.h
> > b/include/linux/mod_devicetable.h index 736cdc236cf9..ea6cdfe1a3a3
> > 100644
> > --- a/include/linux/mod_devicetable.h
> > +++ b/include/linux/mod_devicetable.h
> > @@ -845,4 +845,12 @@ struct vop_device_id {  };
> >  #define VOP_DEV_ANY_ID	0xffffffff
> >
> > +/* cosm */
> > +#define COSM_NAME_SIZE			32
> > +#define COSM_MODULE_PREFIX	"cosm:"
> > +
> > +struct cosm_device_id {
> > +	char name[COSM_NAME_SIZE];
> > +};
> > +
> >  #endif /* LINUX_MOD_DEVICETABLE_H */
> > diff --git a/scripts/mod/devicetable-offsets.c
> > b/scripts/mod/devicetable-offsets.c
> > index 393acaa5302a..499a2832878d 100644
> > --- a/scripts/mod/devicetable-offsets.c
> > +++ b/scripts/mod/devicetable-offsets.c
> > @@ -247,5 +247,8 @@ int main(void)
> >  	DEVID_FIELD(vop_device_id, device);
> >  	DEVID_FIELD(vop_device_id, vendor);
> >
> > +	DEVID(cosm_device_id);
> > +	DEVID_FIELD(cosm_device_id, name);
> > +
> >  	return 0;
> >  }
> > diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index
> > 8063b778eedf..f7c80e4da137 100644
> > --- a/scripts/mod/file2alias.c
> > +++ b/scripts/mod/file2alias.c
> > @@ -1383,6 +1383,16 @@ static int do_vop_entry(const char *filename,
> void *symval,
> >  	return 1;
> >  }
> >
> > +/* Looks like: cosm:S */
> > +static int do_cosm_entry(const char *filename, void *symval,
> > +			  char *alias)
> > +{
> > +	DEF_FIELD_ADDR(symval, cosm_device_id, name);
> > +	sprintf(alias, COSM_MODULE_PREFIX "%s", *name);
> > +
> > +	return 1;
> > +}
> > +
> >  /* Does namelen bytes of name exactly match the symbol? */  static
> > bool sym_is(const char *name, unsigned namelen, const char *symbol)  {
> > @@ -1458,6 +1468,7 @@ static const struct devtable devtable[] = {
> >  	{"wmi", SIZE_wmi_device_id, do_wmi_entry},
> >  	{"mhi", SIZE_mhi_device_id, do_mhi_entry},
> >  	{"vop", SIZE_vop_device_id, do_vop_entry},
> > +	{"cosm", SIZE_cosm_device_id, do_cosm_entry},
> >  };
> >
> >  /* Create MODULE_ALIAS() statements.
> > --
> > 2.17.1
> >
> 
> You are adding MODULE_DEVICE_TABLE() support for a class of drivers, but
> then never adding that support to those drivers?  Why add this at all
> then?  Shouldn't you also be modifying a bunch of drivers to get this to
> work properly?

I also wonder why Intel didn't add the specific implementation code to support MODULE_DEVICE_TABLE() like here.
The MODULE_DEVICE_TABLE() macro was written here, but it has no effect before.

The changes in this patches is enough to support the drivers autoloading,
there no need to modify other codes to make this function works.

Regards
sherry
> 
> thanks,
> 
> greg k-h

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-09-27 13:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-25  7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun
2020-09-25  7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun
2020-09-27 10:28   ` Greg KH
2020-09-27 12:19     ` Sherry Sun
2020-09-27 12:31       ` Greg KH
2020-09-27 12:50         ` Sherry Sun
2020-09-25  7:31 ` [PATCH 2/3] mic: vop: module autoprobing support for vop drivers Sherry Sun
2020-09-25  7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun
2020-09-27 10:29   ` Greg KH
2020-09-27 13:04     ` Sherry Sun

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).