PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry
Subsystems (2)
PATCH 1/1 PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry
In order to be able to provide correct driver_data for pci_epf device, a separate configfs entry for each pci_epf_device_id table entry in pci_epf_driver is required.
Add support to create configfs entry for each pci_epf_device_id table entry here.
--- drivers/pci/endpoint/pci-epf-core.c | 23 +++++++++++++++++++++-- include/linux/pci-epf.h | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-)
drivers/pci/endpoint/pci-epf-core.c +21 -2
@@ -15,6 +15,8 @@#include <linux/pci-epf.h> #include <linux/pci-ep-cfs.h> +static DEFINE_MUTEX (pci_epf_mutex); +static struct bus_type pci_epf_bus_type;static const struct device_type pci_epf_type;
@@ -139,7 +141,13 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);*/ void pci_epf_unregister_driver (struct pci_epf_driver *driver) { -pci_ep_cfs_remove_epf_group (driver->group); +struct config_group *group; + +mutex_lock (&pci_epf_mutex); +list_for_each_entry (group, &driver->epf_group, group_entry) +pci_ep_cfs_remove_epf_group (group); +list_del (&driver->epf_group); +mutex_unlock (&pci_epf_mutex);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver);
@@ -155,6 +163,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; +struct config_group *group; +const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;
@@ -169,7 +179,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; - driver->group =pci_ep_cfs_add_epf_group (driver->driver.name); +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + }return 0 ; }
include/linux/pci-epf.h +2 -2
@@ -72,7 +72,7 @@ struct pci_epf_ops {* @driver: PCI EPF driver * @ops: set of function pointers for performing EPF operations * @owner: the owner of the module that registers the PCI EPF driver -* @group: configfs group corresponding to the PCI EPF driver +* @epf_group: list of configfs group corresponding to the PCI EPF driver * @id_table: identifies EPF devices for probing */ struct pci_epf_driver {
@@ -82,7 +82,7 @@ struct pci_epf_driver {struct device_driver driver;struct pci_epf_ops *ops;struct module *owner; -struct config_group *group; +struct list_head epf_group;const struct pci_epf_device_id *id_table; };
Signature · 1 line
2.16.2
Hi Kishon,
Quoted 83 lines · Kishon Vijay Abraham I
In order to be able to provide correct
driver_dataforpci_epfdevice, a separate configfs entry for eachpci_epf_device_idtable entry inpci_epf_driveris required.Add support to create configfs entry for each
pci_epf_device_idtable entry here.Signed-off-by Kishon Vijay Abraham I <[email protected]>--- drivers/pci/endpoint/pci-epf-core.c | 23 +++++++++++++++++++++-- include/linux/pci-epf.h | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-)drivers/pci/endpoint/pci-epf-core.c +21
-2@@ -15,6 +15,8 @@#include <linux/pci-epf.h> #include <linux/pci-ep-cfs.h> +static DEFINE_MUTEX (pci_epf_mutex); +static struct bus_type pci_epf_bus_type;static const struct device_type pci_epf_type;@@ -139,7 +141,13 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);*/ void pci_epf_unregister_driver (struct pci_epf_driver *driver) { -pci_ep_cfs_remove_epf_group (driver->group); +struct config_group *group; + +mutex_lock (&pci_epf_mutex); +list_for_each_entry (group, &driver->epf_group, group_entry) +pci_ep_cfs_remove_epf_group (group); +list_del (&driver->epf_group); +mutex_unlock (&pci_epf_mutex);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver);@@ -155,6 +163,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; +struct config_group *group; +const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;@@ -169,7 +179,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; - driver->group =pci_ep_cfs_add_epf_group (driver->driver.name); +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + }return 0 ; }include/linux/pci-epf.h +1
-1@@ -72,7 +72,7 @@ struct pci_epf_ops {* @driver: PCI EPF driver * @ops: set of function pointers for performing EPF operations * @owner: the owner of the module that registers the PCI EPF driver -* @group: configfs group corresponding to the PCI EPF driver +* @epf_group: list of configfs group corresponding to the PCI EPF driver * @id_table: identifies EPF devices for probing */ struct pci_epf_driver {
include/linux/pci-epf.h struct pci_epf_driver { · line 88
Quoted 8 lines
include/linux/pci-epf.h +1
-1@@ -82,7 +82,7 @@ struct pci_epf_driver {struct device_driver driver;struct pci_epf_ops *ops;struct module *owner; -struct config_group *group; +struct list_head epf_group;const struct pci_epf_device_id *id_table; };
Works like a charm. :)
Hi Kishon, Gustavo,
Quoted 4 lines · Kishon Vijay Abraham I
In order to be able to provide correct
driver_dataforpci_epfdevice, a separate configfs entry for eachpci_epf_device_idtable entry inpci_epf_driveris required.
Quoted 8 lines
Add support to create configfs entry for each
pci_epf_device_idtable entry here.Signed-off-by Kishon Vijay Abraham I <[email protected]>--- drivers/pci/endpoint/pci-epf-core.c | 23 +++++++++++++++++++++-- include/linux/pci-epf.h | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-)
Do we still need this patch after the recent discussion on the configfs interface ?
https://patchwork.ozlabs.org/patch/903494/
Lorenzo
Quoted 80 lines
drivers/pci/endpoint/pci-epf-core.c +21
-2@@ -15,6 +15,8 @@#include <linux/pci-epf.h> #include <linux/pci-ep-cfs.h> +static DEFINE_MUTEX (pci_epf_mutex); +static struct bus_type pci_epf_bus_type;static const struct device_type pci_epf_type;@@ -139,7 +141,13 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);*/ void pci_epf_unregister_driver (struct pci_epf_driver *driver) { -pci_ep_cfs_remove_epf_group (driver->group); +struct config_group *group; + +mutex_lock (&pci_epf_mutex); +list_for_each_entry (group, &driver->epf_group, group_entry) +pci_ep_cfs_remove_epf_group (group); +list_del (&driver->epf_group); +mutex_unlock (&pci_epf_mutex);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver);@@ -155,6 +163,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; +struct config_group *group; +const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;@@ -169,7 +179,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; - driver->group =pci_ep_cfs_add_epf_group (driver->driver.name); +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + }return 0 ; }include/linux/pci-epf.h +2
-2@@ -72,7 +72,7 @@ struct pci_epf_ops {* @driver: PCI EPF driver * @ops: set of function pointers for performing EPF operations * @owner: the owner of the module that registers the PCI EPF driver -* @group: configfs group corresponding to the PCI EPF driver +* @epf_group: list of configfs group corresponding to the PCI EPF driver * @id_table: identifies EPF devices for probing */ struct pci_epf_driver {@@ -82,7 +82,7 @@ struct pci_epf_driver {struct device_driver driver;struct pci_epf_ops *ops;struct module *owner; -struct config_group *group; +struct list_head epf_group;const struct pci_epf_device_id *id_table; };Signature · 1 line
2.16.2
Hi Lorenzo,
Quoted 10 lines · Lorenzo Pieralisi
Hi Kishon, Gustavo,
Quoted 7 lines · Kishon Vijay Abraham I
In order to be able to provide correct
driver_dataforpci_epfdevice, a separate configfs entry for eachpci_epf_device_idtable entry inpci_epf_driveris required.Add support to create configfs entry for each
pci_epf_device_idtable entry here.
Quoted 8 lines
Quoted 5 lines
Signed-off-by Kishon Vijay Abraham I <[email protected]>--- drivers/pci/endpoint/pci-epf-core.c | 23 +++++++++++++++++++++-- include/linux/pci-epf.h | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-)Do we still need this patch after the recent discussion on the configfs interface ?
Yeah, Since we allow multiple pci_epf_device_id entries to be created, I think this patch is still valid.
If someone wants to create a new pci_epf_device_id entry (maybe for configuring the driver in a different way), this would be still required.
Thanks
Kishon
Quoted 85 lines
https://patchwork.ozlabs.org/patch/903494/
Lorenzo
Quoted 80 lines
drivers/pci/endpoint/pci-epf-core.c +21
-2@@ -15,6 +15,8 @@#include <linux/pci-epf.h> #include <linux/pci-ep-cfs.h> +static DEFINE_MUTEX (pci_epf_mutex); +static struct bus_type pci_epf_bus_type;static const struct device_type pci_epf_type;@@ -139,7 +141,13 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);*/ void pci_epf_unregister_driver (struct pci_epf_driver *driver) { -pci_ep_cfs_remove_epf_group (driver->group); +struct config_group *group; + +mutex_lock (&pci_epf_mutex); +list_for_each_entry (group, &driver->epf_group, group_entry) +pci_ep_cfs_remove_epf_group (group); +list_del (&driver->epf_group); +mutex_unlock (&pci_epf_mutex);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver);@@ -155,6 +163,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; +struct config_group *group; +const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;@@ -169,7 +179,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; - driver->group =pci_ep_cfs_add_epf_group (driver->driver.name); +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + }return 0 ; }include/linux/pci-epf.h +2
-2@@ -72,7 +72,7 @@ struct pci_epf_ops {* @driver: PCI EPF driver * @ops: set of function pointers for performing EPF operations * @owner: the owner of the module that registers the PCI EPF driver -* @group: configfs group corresponding to the PCI EPF driver +* @epf_group: list of configfs group corresponding to the PCI EPF driver * @id_table: identifies EPF devices for probing */ struct pci_epf_driver {@@ -82,7 +82,7 @@ struct pci_epf_driver {struct device_driver driver;struct pci_epf_ops *ops;struct module *owner; -struct config_group *group; +struct list_head epf_group;const struct pci_epf_device_id *id_table; };Signature · 1 line
2.16.2
Lorenzo Pieralisi
AppliedQuoted 19 lines · Kishon Vijay Abraham I
Hi Lorenzo,
Quoted 16 lines · Lorenzo Pieralisi
Hi Kishon, Gustavo,
Quoted 12 lines · Kishon Vijay Abraham I
In order to be able to provide correct
driver_dataforpci_epfdevice, a separate configfs entry for eachpci_epf_device_idtable entry inpci_epf_driveris required.Add support to create configfs entry for each
pci_epf_device_idtable entry here.Signed-off-by Kishon Vijay Abraham I <[email protected]>--- drivers/pci/endpoint/pci-epf-core.c | 23 +++++++++++++++++++++-- include/linux/pci-epf.h | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-)
Quoted 8 lines
Quoted 2 lines
Do we still need this patch after the recent discussion on the configfs interface ?
Yeah, Since we allow multiple
pci_epf_device_identries to be created, I think this patch is still valid.If someone wants to create a new
pci_epf_device_identry (maybe for configuring the driver in a different way), this would be still required.
Applied to pci/endpoint for v4.18, thanks.
Lorenzo
Quoted 87 lines
Thanks
KishonQuoted 85 lines
https://patchwork.ozlabs.org/patch/903494/
Lorenzo
Quoted 80 lines
drivers/pci/endpoint/pci-epf-core.c +21
-2@@ -15,6 +15,8 @@#include <linux/pci-epf.h> #include <linux/pci-ep-cfs.h> +static DEFINE_MUTEX (pci_epf_mutex); +static struct bus_type pci_epf_bus_type;static const struct device_type pci_epf_type;@@ -139,7 +141,13 @@ EXPORT_SYMBOL_GPL(pci_epf_alloc_space);*/ void pci_epf_unregister_driver (struct pci_epf_driver *driver) { -pci_ep_cfs_remove_epf_group (driver->group); +struct config_group *group; + +mutex_lock (&pci_epf_mutex); +list_for_each_entry (group, &driver->epf_group, group_entry) +pci_ep_cfs_remove_epf_group (group); +list_del (&driver->epf_group); +mutex_unlock (&pci_epf_mutex);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver);@@ -155,6 +163,8 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; +struct config_group *group; +const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;@@ -169,7 +179,16 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; - driver->group =pci_ep_cfs_add_epf_group (driver->driver.name); +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + }return 0 ; }include/linux/pci-epf.h +2
-2@@ -72,7 +72,7 @@ struct pci_epf_ops {* @driver: PCI EPF driver * @ops: set of function pointers for performing EPF operations * @owner: the owner of the module that registers the PCI EPF driver -* @group: configfs group corresponding to the PCI EPF driver +* @epf_group: list of configfs group corresponding to the PCI EPF driver * @id_table: identifies EPF devices for probing */ struct pci_epf_driver {@@ -82,7 +82,7 @@ struct pci_epf_driver {struct device_driver driver;struct pci_epf_ops *ops;struct module *owner; -struct config_group *group; +struct list_head epf_group;const struct pci_epf_device_id *id_table; };Signature · 1 line
2.16.2