rpmsg: add THIS_MODULE to rpmsg_driver in rpmsg core
Subsystems (2)
PATCH 1/4 rpmsg: add THIS_MODULE to rpmsg_driver in rpmsg core
Add register_rpmsg_driver helper macro that adds THIS_MODULE to rpmsg_driver for the registering driver. We rename and modify the existing register_rpmsg_driver to enable this.
--- drivers/rpmsg/virtio_rpmsg_bus.c | 8 +++++--- include/linux/rpmsg.h | 8 +++++++- 2 files changed, 12 insertions(+), 4 deletions(-)
drivers/rpmsg/virtio_rpmsg_bus.c +5 -3
@@ -436,17 +436,19 @@ static struct bus_type rpmsg_bus = { };/** -* register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus +* __register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus * @rpdrv: pointer to a struct rpmsg_driver +* @owner: owning module/driver * * Returns 0 on success, and an appropriate error value on failure. */ -int register_rpmsg_driver (struct rpmsg_driver *rpdrv) +int __register_rpmsg_driver (struct rpmsg_driver *rpdrv,struct module *owner) { rpdrv->drv.bus = &rpmsg_bus; + rpdrv->drv.owner = owner;return driver_register (&rpdrv->drv); } -EXPORT_SYMBOL (register_rpmsg_driver); +EXPORT_SYMBOL (__register_rpmsg_driver);/** * unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus
include/linux/rpmsg.h +7 -1
@@ -169,7 +169,7 @@ struct rpmsg_driver {int register_rpmsg_device (struct rpmsg_channel *dev);void unregister_rpmsg_device (struct rpmsg_channel *dev); -int register_rpmsg_driver (struct rpmsg_driver *drv); +int __register_rpmsg_driver (struct rpmsg_driver *drv,struct module *owner);void unregister_rpmsg_driver (struct rpmsg_driver *drv);void rpmsg_destroy_ept (struct rpmsg_endpoint *); struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,
@@ -177,6 +177,12 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,int rpmsg_send_offchannel_raw (struct rpmsg_channel *,u32 ,u32 ,void *,int ,bool ); +/* +* use a macro to avoid include chaining to get THIS_MODULE +*/ +#define register_rpmsg_driver (drv) \ + __register_rpmsg_driver(drv, THIS_MODULE) +/** * rpmsg_send() - send a message across to the remote processor * @rpdev: the rpmsg channel
Signature · 1 line
2.8.2
PATCH 2/4 rpmsg: drop owner assignment from spi_drivers
An rpmsg_driver does not need to set an owner, it will be populated by the driver core.
--- Documentation/rpmsg.txt | 1 - samples/rpmsg/rpmsg_client_sample.c | 1 - 2 files changed, 2 deletions(-)
Documentation/rpmsg.txt +0 -1
@@ -249,7 +249,6 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table); static struct rpmsg_driver rpmsg_sample_client = { .drv.name = KBUILD_MODNAME, - .drv.owner = THIS_MODULE, .id_table = rpmsg_driver_sample_id_table, .probe = rpmsg_sample_probe, .callback = rpmsg_sample_cb,
samples/rpmsg/rpmsg_client_sample.c +0 -1
@@ -77,7 +77,6 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);static struct rpmsg_driver rpmsg_sample_client = { .drv.name =KBUILD_MODNAME , - .drv.owner =THIS_MODULE , .id_table = rpmsg_driver_sample_id_table, .probe = rpmsg_sample_probe, .callback = rpmsg_sample_cb,
Signature · 1 line
2.8.2
Re: [PATCH 2/4] rpmsg: drop owner assignment from spi_drivers
Quoted 2 lines · Andrew F. Davis
An
rpmsg_driverdoes not need to set an owner, it will be populated by the driver core.
spi_drivers in patch subject??
regards
Suman
Quoted 32 lines
Signed-off-by Andrew F. Davis <[email protected]>--- Documentation/rpmsg.txt | 1 - samples/rpmsg/rpmsg_client_sample.c | 1 - 2 files changed, 2 deletions(-)Documentation/rpmsg.txt +0
-1@@ -249,7 +249,6 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table); static struct rpmsg_driver rpmsg_sample_client = { .drv.name = KBUILD_MODNAME, - .drv.owner = THIS_MODULE, .id_table = rpmsg_driver_sample_id_table, .probe = rpmsg_sample_probe, .callback = rpmsg_sample_cb,samples/rpmsg/rpmsg_client_sample.c +0
-1@@ -77,7 +77,6 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);static struct rpmsg_driver rpmsg_sample_client = { .drv.name =KBUILD_MODNAME , - .drv.owner =THIS_MODULE , .id_table = rpmsg_driver_sample_id_table, .probe = rpmsg_sample_probe, .callback = rpmsg_sample_cb,
Re: [PATCH 2/4] rpmsg: drop owner assignment from spi_drivers
Quoted 6 lines · Suman Anna
Quoted 2 lines · Andrew F. Davis
An
rpmsg_driverdoes not need to set an owner, it will be populated by the driver core.
spi_driversin patch subject??
copy/paste error, this is all based on my SPI patches that do this same thing to that subsystem. Will fix.
Thanks,
Andrew
Quoted 36 lines
regards
SumanQuoted 32 lines
Signed-off-by Andrew F. Davis <[email protected]>--- Documentation/rpmsg.txt | 1 - samples/rpmsg/rpmsg_client_sample.c | 1 - 2 files changed, 2 deletions(-)Documentation/rpmsg.txt +0
-1@@ -249,7 +249,6 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table); static struct rpmsg_driver rpmsg_sample_client = { .drv.name = KBUILD_MODNAME, - .drv.owner = THIS_MODULE, .id_table = rpmsg_driver_sample_id_table, .probe = rpmsg_sample_probe, .callback = rpmsg_sample_cb,samples/rpmsg/rpmsg_client_sample.c +0
-1@@ -77,7 +77,6 @@ MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table);static struct rpmsg_driver rpmsg_sample_client = { .drv.name =KBUILD_MODNAME , - .drv.owner =THIS_MODULE , .id_table = rpmsg_driver_sample_id_table, .probe = rpmsg_sample_probe, .callback = rpmsg_sample_cb,
PATCH 3/4 rpmsg: add helper macro module_rpmsg_driver
In reply to Andrew F. DavisThis patch introduces the module_rpmsg_driver macro which is a convenience macro for rpmsg driver modules similar to module_platform_driver. It is intended to be used by drivers which init/exit section does nothing but register/unregister the rpmsg driver. By using this macro it is possible to eliminate a few lines of boilerplate code per rpmsg driver.
--- include/linux/rpmsg.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
include/linux/rpmsg.h +13 -3
@@ -177,13 +177,23 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,int rpmsg_send_offchannel_raw (struct rpmsg_channel *,u32 ,u32 ,void *,int ,bool ); -/* -* use a macro to avoid include chaining to get THIS_MODULE -*/ +/* use a macro to avoid include chaining to get THIS_MODULE */ #define register_rpmsg_driver (drv) \ __register_rpmsg_driver(drv, THIS_MODULE)/** +* module_rpmsg_driver() - Helper macro for registering an rpmsg driver +* @__rpmsg_driver: rpmsg_driver struct +* +* Helper macro for rpmsg drivers which do not do anything special in module +* init/exit. This eliminates a lot of boilerplate. Each module may only +* use this macro once, and calling it replaces module_init() and module_exit() +*/ +#define module_rpmsg_driver (__rpmsg_driver) \ + module_driver(__rpmsg_driver, register_rpmsg_driver, \ + unregister_rpmsg_driver) + +/** * rpmsg_send() - send a message across to the remote processor * @rpdev: the rpmsg channel * @data: payload of message
Signature · 1 line
2.8.2
Re: [PATCH 3/4] rpmsg: add helper macro module_rpmsg_driver
Hi Andrew,
Quoted 17 lines · Andrew F. Davis
This patch introduces the
module_rpmsg_drivermacro which is a convenience macro for rpmsg driver modules similar tomodule_platform_driver. It is intended to be used by drivers which init/exit section does nothing but register/unregister the rpmsg driver. By using this macro it is possible to eliminate a few lines of boilerplate code per rpmsg driver.Signed-off-by Andrew F. Davis <[email protected]>--- include/linux/rpmsg.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)include/linux/rpmsg.h +0
-0
include/linux/rpmsg.h struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *, · line 180
Quoted 7 lines
include/linux/rpmsg.h +1
-3@@ -177,13 +177,23 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,int rpmsg_send_offchannel_raw (struct rpmsg_channel *,u32 ,u32 ,void *,int ,bool ); -/* -* use a macro to avoid include chaining to get THIS_MODULE -*/ +/* use a macro to avoid include chaining to get THIS_MODULE */
This change does not belong to this patch, the modified lines were introduced in patch 1, so please correct it in that patch.
regards
Suman
Quoted 20 lines
include/linux/rpmsg.h +12
-0#define register_rpmsg_driver (drv) \ __register_rpmsg_driver(drv, THIS_MODULE)/** +* module_rpmsg_driver() - Helper macro for registering an rpmsg driver +* @__rpmsg_driver: rpmsg_driver struct +* +* Helper macro for rpmsg drivers which do not do anything special in module +* init/exit. This eliminates a lot of boilerplate. Each module may only +* use this macro once, and calling it replaces module_init() and module_exit() +*/ +#define module_rpmsg_driver (__rpmsg_driver) \ + module_driver(__rpmsg_driver, register_rpmsg_driver, \ + unregister_rpmsg_driver) + +/** * rpmsg_send() - send a message across to the remote processor * @rpdev: the rpmsg channel * @data: payload of message
Re: [PATCH 3/4] rpmsg: add helper macro module_rpmsg_driver
Quoted 23 lines · Suman Anna
Hi Andrew,
Quoted 20 lines · Andrew F. Davis
This patch introduces the
module_rpmsg_drivermacro which is a convenience macro for rpmsg driver modules similar tomodule_platform_driver. It is intended to be used by drivers which init/exit section does nothing but register/unregister the rpmsg driver. By using this macro it is possible to eliminate a few lines of boilerplate code per rpmsg driver.Signed-off-by Andrew F. Davis <[email protected]>--- include/linux/rpmsg.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)include/linux/rpmsg.h +0
-0@@ -177,13 +177,23 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,int rpmsg_send_offchannel_raw (struct rpmsg_channel *,u32 ,u32 ,void *,int ,bool );
Quoted 8 lines
include/linux/rpmsg.h struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *, · line 180
Quoted 4 lines
include/linux/rpmsg.h +1
-3-/* -* use a macro to avoid include chaining to get THIS_MODULE -*/ +/* use a macro to avoid include chaining to get THIS_MODULE */ This change does not belong to this patch, the modified lines were introduced in patch 1, so please correct it in that patch.
Ahh, that's what I get for last minute rebasing before submission, will fix.
Thanks,
Andrew
Quoted 24 lines
regards
SumanQuoted 20 lines
include/linux/rpmsg.h +12
-0#define register_rpmsg_driver (drv) \ __register_rpmsg_driver(drv, THIS_MODULE)/** +* module_rpmsg_driver() - Helper macro for registering an rpmsg driver +* @__rpmsg_driver: rpmsg_driver struct +* +* Helper macro for rpmsg drivers which do not do anything special in module +* init/exit. This eliminates a lot of boilerplate. Each module may only +* use this macro once, and calling it replaces module_init() and module_exit() +*/ +#define module_rpmsg_driver (__rpmsg_driver) \ + module_driver(__rpmsg_driver, register_rpmsg_driver, \ + unregister_rpmsg_driver) + +/** * rpmsg_send() - send a message across to the remote processor * @rpdev: the rpmsg channel * @data: payload of message
PATCH 4/4 rpmsg: use module_rpmsg_driver in existing drivers and examples
In reply to Andrew F. DavisExisting drivers and examples are updated to use the module_rpmsg_driver helper macro.
--- Documentation/rpmsg.txt | 14 +------------- samples/rpmsg/rpmsg_client_sample.c | 13 +------------ 2 files changed, 2 insertions(+), 25 deletions(-)
Documentation/rpmsg.txt +1 -13
@@ -202,7 +202,6 @@ with the payload of the inbound message). a pointer to a previously-registered rpmsg_driver struct. Returns 0 on success, and an appropriate error value on failure. - 3. Typical usage The following is a simple rpmsg driver, that sends an "hello!" message
@@ -254,18 +253,7 @@ static struct rpmsg_driver rpmsg_sample_client = { .callback = rpmsg_sample_cb, .remove = rpmsg_sample_remove, }; - -static int __init init(void) -{ - return register_rpmsg_driver(&rpmsg_sample_client); -} -module_init(init); - -static void __exit fini(void) -{ - unregister_rpmsg_driver(&rpmsg_sample_client); -} -module_exit(fini); +module_rpmsg_driver(rpmsg_sample_client); Note: a similar sample which can be built and loaded can be found in samples/rpmsg/.
samples/rpmsg/rpmsg_client_sample.c +1 -12
@@ -82,18 +82,7 @@ static struct rpmsg_driver rpmsg_sample_client = { .callback = rpmsg_sample_cb, .remove = rpmsg_sample_remove, }; - -static int __init rpmsg_client_sample_init (void ) -{ -return register_rpmsg_driver (&rpmsg_sample_client); -} -module_init (rpmsg_client_sample_init); - -static void __exit rpmsg_client_sample_fini(void) -{ -unregister_rpmsg_driver (&rpmsg_sample_client); -} -module_exit (rpmsg_client_sample_fini); +module_rpmsg_driver (rpmsg_sample_client);MODULE_DESCRIPTION ("Remote processor messaging sample client driver" );MODULE_LICENSE ("GPL v2" );
Signature · 1 line
2.8.2
Quoted 5 lines · Andrew F. Davis
Add
register_rpmsg_driverhelper macro that addsTHIS_MODULEtorpmsg_driverfor the registering driver. We rename and modify the existingregister_rpmsg_driverto enable this.Signed-off-by Andrew F. Davis <[email protected]>
With the multi-trace comment from patch 3 squashed here properly,
Quoted 59 lines
--- drivers/rpmsg/virtio_rpmsg_bus.c | 8 +++++--- include/linux/rpmsg.h | 8 +++++++- 2 files changed, 12 insertions(+), 4 deletions(-)drivers/rpmsg/virtio_rpmsg_bus.c +5
-3@@ -436,17 +436,19 @@ static struct bus_type rpmsg_bus = { };/** -* register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus +* __register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus * @rpdrv: pointer to a struct rpmsg_driver +* @owner: owning module/driver * * Returns 0 on success, and an appropriate error value on failure. */ -int register_rpmsg_driver (struct rpmsg_driver *rpdrv) +int __register_rpmsg_driver (struct rpmsg_driver *rpdrv,struct module *owner) { rpdrv->drv.bus = &rpmsg_bus; + rpdrv->drv.owner = owner;return driver_register (&rpdrv->drv); } -EXPORT_SYMBOL (register_rpmsg_driver); +EXPORT_SYMBOL (__register_rpmsg_driver);/** * unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus include/linux/rpmsg.h +7
-1@@ -169,7 +169,7 @@ struct rpmsg_driver {int register_rpmsg_device (struct rpmsg_channel *dev);void unregister_rpmsg_device (struct rpmsg_channel *dev); -int register_rpmsg_driver (struct rpmsg_driver *drv); +int __register_rpmsg_driver (struct rpmsg_driver *drv,struct module *owner);void unregister_rpmsg_driver (struct rpmsg_driver *drv);void rpmsg_destroy_ept (struct rpmsg_endpoint *); struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,@@ -177,6 +177,12 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *,int rpmsg_send_offchannel_raw (struct rpmsg_channel *,u32 ,u32 ,void *,int ,bool ); +/* +* use a macro to avoid include chaining to get THIS_MODULE +*/ +#define register_rpmsg_driver (drv) \ + __register_rpmsg_driver(drv, THIS_MODULE) +/** * rpmsg_send() - send a message across to the remote processor * @rpdev: the rpmsg channel