Module: xenomai-forge Branch: next Commit: 66a3410a911333100ff325925fa898e6a2d70625 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=66a3410a911333100ff325925fa898e6a2d70625
Author: Philippe Gerum <r...@xenomai.org> Date: Thu Feb 20 11:09:19 2014 +0100 drivers: skip init/exit work if core is disabled --- kernel/drivers/analogy/driver.c | 6 ++++++ kernel/drivers/analogy/rtdm_interface.c | 6 ++++++ kernel/drivers/can/rtcan_flexcan.c | 11 +++++++++-- kernel/drivers/can/rtcan_module.c | 5 +++++ kernel/drivers/can/rtcan_virt.c | 6 ++++++ kernel/drivers/can/sja1000/rtcan_adv_pci.c | 6 +++++- kernel/drivers/can/sja1000/rtcan_ems_pci.c | 6 +++++- kernel/drivers/can/sja1000/rtcan_esd_pci.c | 6 +++++- kernel/drivers/can/sja1000/rtcan_isa.c | 6 ++++++ kernel/drivers/can/sja1000/rtcan_ixxat_pci.c | 6 +++++- kernel/drivers/can/sja1000/rtcan_mem.c | 6 ++++++ kernel/drivers/can/sja1000/rtcan_peak_dng.c | 6 ++++++ kernel/drivers/can/sja1000/rtcan_peak_pci.c | 8 ++++++-- kernel/drivers/can/sja1000/rtcan_plx_pci.c | 6 +++++- kernel/drivers/can/sja1000/rtcan_sja1000.c | 7 +++++-- kernel/drivers/ipc/rtipc.c | 6 ++++++ kernel/drivers/serial/16550A.c | 6 ++++++ kernel/drivers/serial/mpc52xx_uart.c | 6 +++++- kernel/drivers/serial/rt_imx_uart.c | 6 +++++- kernel/drivers/testing/rtdmtest.c | 3 +++ kernel/drivers/testing/switchtest.c | 6 +++++- kernel/drivers/testing/timerbench.c | 6 +++++- 22 files changed, 121 insertions(+), 15 deletions(-) diff --git a/kernel/drivers/analogy/driver.c b/kernel/drivers/analogy/driver.c index 362ee49..6449b8d 100644 --- a/kernel/drivers/analogy/driver.c +++ b/kernel/drivers/analogy/driver.c @@ -62,6 +62,9 @@ int a4l_lct_drv(char *pin, a4l_drv_t ** pio) int a4l_register_drv(a4l_drv_t * drv) { + if (!realtime_core_enabled()) + return 0; + __a4l_dbg(1, core_dbg, "a4l_add_drv: name=%s\n", drv->board_name); if (a4l_lct_drv(drv->board_name, NULL) != 0) { @@ -73,6 +76,9 @@ int a4l_register_drv(a4l_drv_t * drv) int a4l_unregister_drv(a4l_drv_t * drv) { + if (!realtime_core_enabled()) + return 0; + __a4l_dbg(1, core_dbg, "a4l_rm_drv: name=%s\n", drv->board_name); if (a4l_lct_drv(drv->board_name, NULL) == 0) { diff --git a/kernel/drivers/analogy/rtdm_interface.c b/kernel/drivers/analogy/rtdm_interface.c index 6b69f09..f74d7a2 100644 --- a/kernel/drivers/analogy/rtdm_interface.c +++ b/kernel/drivers/analogy/rtdm_interface.c @@ -304,6 +304,9 @@ static int __init a4l_init(void) { int ret; + if (!realtime_core_enabled()) + return 0; + /* Initializes the devices */ a4l_init_devs(); @@ -326,6 +329,9 @@ out_a4l_init: static void __exit a4l_cleanup(void) { + if (!realtime_core_enabled()) + return; + /* Removes Analogy proc files */ a4l_cleanup_proc(); diff --git a/kernel/drivers/can/rtcan_flexcan.c b/kernel/drivers/can/rtcan_flexcan.c index 192f21f..6f744bd 100644 --- a/kernel/drivers/can/rtcan_flexcan.c +++ b/kernel/drivers/can/rtcan_flexcan.c @@ -975,6 +975,9 @@ static int flexcan_probe(struct platform_device *pdev) int err, irq; u32 clock_freq = 0; + if (!realtime_core_enabled()) + return -ENODEV; + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) @@ -1113,14 +1116,18 @@ static struct platform_driver flexcan_driver = { #if LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0) static int __init flexcan_init(void) { + if (!realtime_core_enabled()) + return 0; pr_info("%s netdevice driver\n", DRV_NAME); return platform_driver_register(&flexcan_driver); } static void __exit flexcan_exit(void) { - platform_driver_unregister(&flexcan_driver); - pr_info("%s: driver removed\n", DRV_NAME); + if (realtime_core_enabled()) { + platform_driver_unregister(&flexcan_driver); + pr_info("%s: driver removed\n", DRV_NAME); + } } module_init(flexcan_init); module_exit(flexcan_exit); diff --git a/kernel/drivers/can/rtcan_module.c b/kernel/drivers/can/rtcan_module.c index a837fa1..18abc3e 100644 --- a/kernel/drivers/can/rtcan_module.c +++ b/kernel/drivers/can/rtcan_module.c @@ -419,6 +419,8 @@ int __init rtcan_init(void) { int err = 0; + if (!realtime_core_enabled()) + return 0; printk("RT-Socket-CAN %d.%d.%d - %s\n", RTCAN_MAJOR_VER, RTCAN_MINOR_VER, RTCAN_BUGFIX_VER, @@ -439,6 +441,9 @@ int __init rtcan_init(void) void __exit rtcan_exit(void) { + if (!realtime_core_enabled()) + return; + rtcan_raw_proto_unregister(); #ifdef CONFIG_PROC_FS rtcan_proc_unregister(); diff --git a/kernel/drivers/can/rtcan_virt.c b/kernel/drivers/can/rtcan_virt.c index d8b4ee2..698c31a 100644 --- a/kernel/drivers/can/rtcan_virt.c +++ b/kernel/drivers/can/rtcan_virt.c @@ -157,6 +157,9 @@ static int __init rtcan_virt_init(void) { int i, err = 0; + if (!realtime_core_enabled()) + return 0; + for (i = 0; i < devices; i++) { err = rtcan_virt_init_one(i); if (err) { @@ -180,6 +183,9 @@ static void __exit rtcan_virt_exit(void) int i; struct rtcan_device *dev; + if (!realtime_core_enabled()) + return; + for (i = 0; i < devices; i++) { dev = rtcan_virt_devs[i]; diff --git a/kernel/drivers/can/sja1000/rtcan_adv_pci.c b/kernel/drivers/can/sja1000/rtcan_adv_pci.c index d257928..864ec44 100644 --- a/kernel/drivers/can/sja1000/rtcan_adv_pci.c +++ b/kernel/drivers/can/sja1000/rtcan_adv_pci.c @@ -356,12 +356,16 @@ static struct pci_driver rtcan_adv_pci_driver = { static int __init rtcan_adv_pci_init(void) { + if (!realtime_core_enabled()) + return 0; + return pci_register_driver(&rtcan_adv_pci_driver); } static void __exit rtcan_adv_pci_exit(void) { - pci_unregister_driver(&rtcan_adv_pci_driver); + if (realtime_core_enabled()) + pci_unregister_driver(&rtcan_adv_pci_driver); } module_init(rtcan_adv_pci_init); diff --git a/kernel/drivers/can/sja1000/rtcan_ems_pci.c b/kernel/drivers/can/sja1000/rtcan_ems_pci.c index 535c3e0..be4b704 100644 --- a/kernel/drivers/can/sja1000/rtcan_ems_pci.c +++ b/kernel/drivers/can/sja1000/rtcan_ems_pci.c @@ -317,12 +317,16 @@ static struct pci_driver rtcan_ems_pci_driver = { static int __init rtcan_ems_pci_init(void) { + if (!realtime_core_enabled()) + return 0; + return pci_register_driver(&rtcan_ems_pci_driver); } static void __exit rtcan_ems_pci_exit(void) { - pci_unregister_driver(&rtcan_ems_pci_driver); + if (realtime_core_enabled()) + pci_unregister_driver(&rtcan_ems_pci_driver); } module_init(rtcan_ems_pci_init); diff --git a/kernel/drivers/can/sja1000/rtcan_esd_pci.c b/kernel/drivers/can/sja1000/rtcan_esd_pci.c index 97163a2..924c7d0 100644 --- a/kernel/drivers/can/sja1000/rtcan_esd_pci.c +++ b/kernel/drivers/can/sja1000/rtcan_esd_pci.c @@ -342,12 +342,16 @@ static struct pci_driver rtcan_esd_pci_driver = { static int __init rtcan_esd_pci_init(void) { + if (!realtime_core_enabled()) + return 0; + return pci_register_driver(&rtcan_esd_pci_driver); } static void __exit rtcan_esd_pci_exit(void) { - pci_unregister_driver(&rtcan_esd_pci_driver); + if (realtime_core_enabled()) + pci_unregister_driver(&rtcan_esd_pci_driver); } module_init(rtcan_esd_pci_init); diff --git a/kernel/drivers/can/sja1000/rtcan_isa.c b/kernel/drivers/can/sja1000/rtcan_isa.c index 10f4429..c506081 100644 --- a/kernel/drivers/can/sja1000/rtcan_isa.c +++ b/kernel/drivers/can/sja1000/rtcan_isa.c @@ -161,6 +161,9 @@ static int __init rtcan_isa_init(void) int i, err; int devices = 0; + if (!realtime_core_enabled()) + return 0; + for (i = 0; i < RTCAN_ISA_MAX_DEV && io[i] != 0; i++) { err = rtcan_isa_init_one(i); if (err) { @@ -184,6 +187,9 @@ static void rtcan_isa_exit(void) int i; struct rtcan_device *dev; + if (!realtime_core_enabled()) + return; + for (i = 0; i < RTCAN_ISA_MAX_DEV; i++) { dev = rtcan_isa_devs[i]; if (!dev) diff --git a/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c b/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c index f00422b..eaabe1a 100644 --- a/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c +++ b/kernel/drivers/can/sja1000/rtcan_ixxat_pci.c @@ -296,13 +296,17 @@ static struct pci_driver rtcan_ixxat_pci_driver = { static int __init rtcan_ixxat_pci_init(void) { + if (!realtime_core_enabled()) + return 0; + return pci_register_driver(&rtcan_ixxat_pci_driver); } static void __exit rtcan_ixxat_pci_exit(void) { - pci_unregister_driver(&rtcan_ixxat_pci_driver); + if (realtime_core_enabled()) + pci_unregister_driver(&rtcan_ixxat_pci_driver); } module_init(rtcan_ixxat_pci_init); diff --git a/kernel/drivers/can/sja1000/rtcan_mem.c b/kernel/drivers/can/sja1000/rtcan_mem.c index ff7d2d6..c668f8f 100644 --- a/kernel/drivers/can/sja1000/rtcan_mem.c +++ b/kernel/drivers/can/sja1000/rtcan_mem.c @@ -173,6 +173,9 @@ static int __init rtcan_mem_init(void) int i, err; int devices = 0; + if (!realtime_core_enabled()) + return 0; + for (i = 0; i < RTCAN_MEM_MAX_DEV && mem[i] != 0; i++) { err = rtcan_mem_init_one(i); if (err) { @@ -197,6 +200,9 @@ static void rtcan_mem_exit(void) struct rtcan_device *dev; volatile void __iomem *vmem; + if (!realtime_core_enabled()) + return; + for (i = 0; i < RTCAN_MEM_MAX_DEV; i++) { dev = rtcan_mem_devs[i]; if (!dev) diff --git a/kernel/drivers/can/sja1000/rtcan_peak_dng.c b/kernel/drivers/can/sja1000/rtcan_peak_dng.c index 29e920a..b174625 100644 --- a/kernel/drivers/can/sja1000/rtcan_peak_dng.c +++ b/kernel/drivers/can/sja1000/rtcan_peak_dng.c @@ -345,6 +345,9 @@ static void rtcan_peak_dng_exit(void) int i; struct rtcan_device *dev; + if (!realtime_core_enabled()) + return; + for (i = 0, dev = rtcan_peak_dng_devs[i]; i < RTCAN_PEAK_DNG_MAX_DEV && dev != NULL; i++) @@ -359,6 +362,9 @@ static int __init rtcan_peak_dng_init(void) { int i, ret = -EINVAL, done = 0; + if (!realtime_core_enabled()) + return 0; + if (pnp_register_driver(&rtcan_peak_dng_pnp_driver) == 0) pnp_registered = 1; diff --git a/kernel/drivers/can/sja1000/rtcan_peak_pci.c b/kernel/drivers/can/sja1000/rtcan_peak_pci.c index 7301779..3da1657 100644 --- a/kernel/drivers/can/sja1000/rtcan_peak_pci.c +++ b/kernel/drivers/can/sja1000/rtcan_peak_pci.c @@ -351,13 +351,17 @@ static struct pci_driver rtcan_peak_pci_driver = { static int __init rtcan_peak_pci_init(void) { - return pci_register_driver(&rtcan_peak_pci_driver); + if (!realtime_core_enabled()) + return 0; + + return pci_register_driver(&rtcan_peak_pci_driver); } static void __exit rtcan_peak_pci_exit(void) { - pci_unregister_driver(&rtcan_peak_pci_driver); + if (realtime_core_enabled()) + pci_unregister_driver(&rtcan_peak_pci_driver); } module_init(rtcan_peak_pci_init); diff --git a/kernel/drivers/can/sja1000/rtcan_plx_pci.c b/kernel/drivers/can/sja1000/rtcan_plx_pci.c index da06a37..614b779 100644 --- a/kernel/drivers/can/sja1000/rtcan_plx_pci.c +++ b/kernel/drivers/can/sja1000/rtcan_plx_pci.c @@ -596,12 +596,16 @@ static struct pci_driver plx_pci_driver = { static int __init plx_pci_init(void) { + if (!realtime_core_enabled()) + return 0; + return pci_register_driver(&plx_pci_driver); } static void __exit plx_pci_exit(void) { - pci_unregister_driver(&plx_pci_driver); + if (realtime_core_enabled()) + pci_unregister_driver(&plx_pci_driver); } module_init(plx_pci_init); diff --git a/kernel/drivers/can/sja1000/rtcan_sja1000.c b/kernel/drivers/can/sja1000/rtcan_sja1000.c index 35249ef..c7712ab 100644 --- a/kernel/drivers/can/sja1000/rtcan_sja1000.c +++ b/kernel/drivers/can/sja1000/rtcan_sja1000.c @@ -822,14 +822,17 @@ void rtcan_sja1000_unregister(struct rtcan_device *dev) int __init rtcan_sja_init(void) { - printk("RTCAN SJA1000 driver initialized\n"); + if (realtime_core_enabled()) + printk("RTCAN SJA1000 driver initialized\n"); + return 0; } void __exit rtcan_sja_exit(void) { - printk("%s removed\n", sja_ctrl_name); + if (realtime_core_enabled()) + printk("%s removed\n", sja_ctrl_name); } module_init(rtcan_sja_init); diff --git a/kernel/drivers/ipc/rtipc.c b/kernel/drivers/ipc/rtipc.c index 9120994..20c2a74 100644 --- a/kernel/drivers/ipc/rtipc.c +++ b/kernel/drivers/ipc/rtipc.c @@ -251,6 +251,9 @@ int __init __rtipc_init(void) { int ret, n; + if (!realtime_core_enabled()) + return 0; + for (n = 0; n < IPCPROTO_MAX; n++) { if (protocols[n] && protocols[n]->proto_init) { ret = protocols[n]->proto_init(); @@ -266,6 +269,9 @@ void __exit __rtipc_exit(void) { int n; + if (!realtime_core_enabled()) + return; + rtdm_dev_unregister(&device, 1000); for (n = 0; n < IPCPROTO_MAX; n++) { diff --git a/kernel/drivers/serial/16550A.c b/kernel/drivers/serial/16550A.c index 3216ae0..ca92c4d 100644 --- a/kernel/drivers/serial/16550A.c +++ b/kernel/drivers/serial/16550A.c @@ -1117,6 +1117,9 @@ int __init rt_16550_init(void) int err; int i; + if (!realtime_core_enabled()) + return 0; + rt_16550_pnp_init(); rt_16550_pci_init(); @@ -1185,6 +1188,9 @@ void rt_16550_exit(void) { int i; + if (!realtime_core_enabled()) + return; + for (i = 0; i < MAX_DEVICES; i++) if (device[i]) { rtdm_dev_unregister(device[i], 1000); diff --git a/kernel/drivers/serial/mpc52xx_uart.c b/kernel/drivers/serial/mpc52xx_uart.c index d31e972..cb1950d 100644 --- a/kernel/drivers/serial/mpc52xx_uart.c +++ b/kernel/drivers/serial/mpc52xx_uart.c @@ -1435,6 +1435,9 @@ static int __init rt_mpc52xx_uart_init(void) { int ret; + if (!realtime_core_enabled()) + return 0; + printk(KERN_INFO "RTserial: MPC52xx PSC UART driver\n"); rt_mpc52xx_uart_of_enumerate(); @@ -1452,7 +1455,8 @@ static int __init rt_mpc52xx_uart_init(void) static void __exit rt_mpc52xx_uart_exit(void) { - of_unregister_platform_driver(&rt_mpc52xx_uart_of_driver); + if (realtime_core_enabled()) + of_unregister_platform_driver(&rt_mpc52xx_uart_of_driver); } module_init(rt_mpc52xx_uart_init); diff --git a/kernel/drivers/serial/rt_imx_uart.c b/kernel/drivers/serial/rt_imx_uart.c index 0ce1f1a..3831225 100644 --- a/kernel/drivers/serial/rt_imx_uart.c +++ b/kernel/drivers/serial/rt_imx_uart.c @@ -1540,12 +1540,16 @@ static struct platform_driver rt_imx_uart_driver = { static int __init rt_imx_uart_init(void) { + if (!realtime_core_enabled()) + return 0; + return platform_driver_register(&rt_imx_uart_driver); } static void __exit rt_imx_uart_exit(void) { - platform_driver_unregister(&rt_imx_uart_driver); + if (realtime_core_enabled()) + platform_driver_unregister(&rt_imx_uart_driver); } module_init(rt_imx_uart_init); diff --git a/kernel/drivers/testing/rtdmtest.c b/kernel/drivers/testing/rtdmtest.c index 692faa8..c107d07 100644 --- a/kernel/drivers/testing/rtdmtest.c +++ b/kernel/drivers/testing/rtdmtest.c @@ -155,6 +155,9 @@ static int __init __rtdm_test_init(void) int dev = 0; int err; + if (!realtime_core_enabled()) + return -ENODEV; + while (1) { device[dev].proc_name = device[dev].device_name; diff --git a/kernel/drivers/testing/switchtest.c b/kernel/drivers/testing/switchtest.c index 4523917..f48c4e2 100644 --- a/kernel/drivers/testing/switchtest.c +++ b/kernel/drivers/testing/switchtest.c @@ -758,6 +758,9 @@ int __init __switchtest_init(void) { int err; + if (!realtime_core_enabled()) + return 0; + fp_features = fp_detect(); do { @@ -774,7 +777,8 @@ int __init __switchtest_init(void) void __switchtest_exit(void) { - rtdm_dev_unregister(&device, 1000); + if (realtime_core_enabled()) + rtdm_dev_unregister(&device, 1000); } module_init(__switchtest_init); diff --git a/kernel/drivers/testing/timerbench.c b/kernel/drivers/testing/timerbench.c index 6563fd5..efb5ca2 100644 --- a/kernel/drivers/testing/timerbench.c +++ b/kernel/drivers/testing/timerbench.c @@ -506,6 +506,9 @@ static int __init __timerbench_init(void) { int err; + if (!realtime_core_enabled()) + return 0; + do { snprintf(device.device_name, RTDM_MAX_DEVNAME_LEN, "rttest-timerbench%d", @@ -520,7 +523,8 @@ static int __init __timerbench_init(void) static void __timerbench_exit(void) { - rtdm_dev_unregister(&device, 1000); + if (realtime_core_enabled()) + rtdm_dev_unregister(&device, 1000); } module_init(__timerbench_init); _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git