rpmsg: add THIS_MODULE to rpmsg_driver in rpmsg core
Subsystems (2)
PATCH v2 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 | 6 +++++- 2 files changed, 10 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 +5 -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,10 @@ 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 v2 2/4 rpmsg: drop owner assignment from rpmsg_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
PATCH v2 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 | 12 ++++++++++++ 1 file changed, 12 insertions(+)
include/linux/rpmsg.h +12 -0
@@ -182,6 +182,18 @@ rpmsg_send_offchannel_raw(struct rpmsg_channel *, u32, u32, void *, int, bool);__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
PATCH v2 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 | 13 +------------ samples/rpmsg/rpmsg_client_sample.c | 13 +------------ 2 files changed, 2 insertions(+), 24 deletions(-)
Documentation/rpmsg.txt +1 -12
@@ -254,18 +254,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 7 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]>Acked-by Suman Anna <[email protected]>---
Thanks Andrew, the patches looks good now.
I picked all four patches.
Regards,
Bjorn