Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'rpmsg-v4.7' of git://github.com/andersson/remoteproc

Pull rpmsg updates from Bjorn Andersson:
"Refactor rpmsg module registration to follow other subsystems; by
introduction of module_rpmsg_driver and hiding of THIS_MODULE from
clients"

* tag 'rpmsg-v4.7' of git://github.com/andersson/remoteproc:
rpmsg: use module_rpmsg_driver in existing drivers and examples
rpmsg: add helper macro module_rpmsg_driver
rpmsg: drop owner assignment from rpmsg_drivers
rpmsg: add THIS_MODULE to rpmsg_driver in rpmsg core

+24 -30
+1 -13
Documentation/rpmsg.txt
··· 249 249 250 250 static struct rpmsg_driver rpmsg_sample_client = { 251 251 .drv.name = KBUILD_MODNAME, 252 - .drv.owner = THIS_MODULE, 253 252 .id_table = rpmsg_driver_sample_id_table, 254 253 .probe = rpmsg_sample_probe, 255 254 .callback = rpmsg_sample_cb, 256 255 .remove = rpmsg_sample_remove, 257 256 }; 258 - 259 - static int __init init(void) 260 - { 261 - return register_rpmsg_driver(&rpmsg_sample_client); 262 - } 263 - module_init(init); 264 - 265 - static void __exit fini(void) 266 - { 267 - unregister_rpmsg_driver(&rpmsg_sample_client); 268 - } 269 - module_exit(fini); 257 + module_rpmsg_driver(rpmsg_sample_client); 270 258 271 259 Note: a similar sample which can be built and loaded can be found 272 260 in samples/rpmsg/.
+5 -3
drivers/rpmsg/virtio_rpmsg_bus.c
··· 436 436 }; 437 437 438 438 /** 439 - * register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus 439 + * __register_rpmsg_driver() - register an rpmsg driver with the rpmsg bus 440 440 * @rpdrv: pointer to a struct rpmsg_driver 441 + * @owner: owning module/driver 441 442 * 442 443 * Returns 0 on success, and an appropriate error value on failure. 443 444 */ 444 - int register_rpmsg_driver(struct rpmsg_driver *rpdrv) 445 + int __register_rpmsg_driver(struct rpmsg_driver *rpdrv, struct module *owner) 445 446 { 446 447 rpdrv->drv.bus = &rpmsg_bus; 448 + rpdrv->drv.owner = owner; 447 449 return driver_register(&rpdrv->drv); 448 450 } 449 - EXPORT_SYMBOL(register_rpmsg_driver); 451 + EXPORT_SYMBOL(__register_rpmsg_driver); 450 452 451 453 /** 452 454 * unregister_rpmsg_driver() - unregister an rpmsg driver from the rpmsg bus
+17 -1
include/linux/rpmsg.h
··· 169 169 170 170 int register_rpmsg_device(struct rpmsg_channel *dev); 171 171 void unregister_rpmsg_device(struct rpmsg_channel *dev); 172 - int register_rpmsg_driver(struct rpmsg_driver *drv); 172 + int __register_rpmsg_driver(struct rpmsg_driver *drv, struct module *owner); 173 173 void unregister_rpmsg_driver(struct rpmsg_driver *drv); 174 174 void rpmsg_destroy_ept(struct rpmsg_endpoint *); 175 175 struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_channel *, 176 176 rpmsg_rx_cb_t cb, void *priv, u32 addr); 177 177 int 178 178 rpmsg_send_offchannel_raw(struct rpmsg_channel *, u32, u32, void *, int, bool); 179 + 180 + /* use a macro to avoid include chaining to get THIS_MODULE */ 181 + #define register_rpmsg_driver(drv) \ 182 + __register_rpmsg_driver(drv, THIS_MODULE) 183 + 184 + /** 185 + * module_rpmsg_driver() - Helper macro for registering an rpmsg driver 186 + * @__rpmsg_driver: rpmsg_driver struct 187 + * 188 + * Helper macro for rpmsg drivers which do not do anything special in module 189 + * init/exit. This eliminates a lot of boilerplate. Each module may only 190 + * use this macro once, and calling it replaces module_init() and module_exit() 191 + */ 192 + #define module_rpmsg_driver(__rpmsg_driver) \ 193 + module_driver(__rpmsg_driver, register_rpmsg_driver, \ 194 + unregister_rpmsg_driver) 179 195 180 196 /** 181 197 * rpmsg_send() - send a message across to the remote processor
+1 -13
samples/rpmsg/rpmsg_client_sample.c
··· 77 77 78 78 static struct rpmsg_driver rpmsg_sample_client = { 79 79 .drv.name = KBUILD_MODNAME, 80 - .drv.owner = THIS_MODULE, 81 80 .id_table = rpmsg_driver_sample_id_table, 82 81 .probe = rpmsg_sample_probe, 83 82 .callback = rpmsg_sample_cb, 84 83 .remove = rpmsg_sample_remove, 85 84 }; 86 - 87 - static int __init rpmsg_client_sample_init(void) 88 - { 89 - return register_rpmsg_driver(&rpmsg_sample_client); 90 - } 91 - module_init(rpmsg_client_sample_init); 92 - 93 - static void __exit rpmsg_client_sample_fini(void) 94 - { 95 - unregister_rpmsg_driver(&rpmsg_sample_client); 96 - } 97 - module_exit(rpmsg_client_sample_fini); 85 + module_rpmsg_driver(rpmsg_sample_client); 98 86 99 87 MODULE_DESCRIPTION("Remote processor messaging sample client driver"); 100 88 MODULE_LICENSE("GPL v2");