This adds a proper RTDM interface for realtime_core_enabled and also converts existing users to a slightly less invasive - because correctly failing - usage pattern.
Still, this remains fragile: Drivers need to be reviewed and patched to avoid requesting core services that can crash when not available. And there can be many. RTnet was easy to enhance because there is a central module-only point that, if it fails, automatically prevents the rest to do anything. With CAN and its ability to be built-in, the situation is different, and mscan was not covered so far. Philippe, what are the use cases of starting with a disabled core? What I'm aware of are startup failures, though only in virtual environments when the TSC calibration failed. But that is quite a corner case. Jan CC: Philippe Gerum <[email protected]> Jan Kiszka (12): rtdm: Harden key services against invocations with disabled core rtdm: Introduce rtdm_available() drivers: Remove unneeded realtime_core_enabled checks drivers/udd: Consolidate over ENOSYS on disabled core drivers/rtipc: Convert to rtdm_available and clean up drivers/analogy: Convert to rtdm_available and clean up drivers/serial: Convert to rtdm_available() and clean up drivers/net: Do not load when the core is not available drivers/net: udp: Roll back if rtdm_dev_register fails drivers/gpio: Convert to rtdm_available() and clean up drivers/can: Convert to rtdm_available() and clean up drivers/can: Convert to module_pci_driver include/cobalt/kernel/rtdm/driver.h | 17 ++++----- kernel/cobalt/rtdm/device.c | 2 +- kernel/cobalt/rtdm/drvlib.c | 52 ++++++++++++++++++++++---- kernel/drivers/analogy/driver.c | 7 +--- kernel/drivers/analogy/rtdm_interface.c | 7 +--- kernel/drivers/autotune/autotune.c | 6 --- kernel/drivers/can/mscan/rtcan_mscan_mpc5xxx.c | 3 ++ kernel/drivers/can/rtcan_module.c | 7 +--- kernel/drivers/can/rtcan_virt.c | 7 +--- kernel/drivers/can/sja1000/rtcan_adv_pci.c | 20 ++-------- kernel/drivers/can/sja1000/rtcan_ems_pci.c | 20 ++-------- kernel/drivers/can/sja1000/rtcan_esd_pci.c | 20 ++-------- kernel/drivers/can/sja1000/rtcan_isa.c | 7 +--- kernel/drivers/can/sja1000/rtcan_ixxat_pci.c | 21 ++--------- kernel/drivers/can/sja1000/rtcan_mem.c | 7 +--- kernel/drivers/can/sja1000/rtcan_peak_dng.c | 7 +--- kernel/drivers/can/sja1000/rtcan_peak_pci.c | 21 ++--------- kernel/drivers/can/sja1000/rtcan_plx_pci.c | 20 ++-------- kernel/drivers/can/sja1000/rtcan_sja1000.c | 10 ++--- kernel/drivers/gpio/gpio-core.c | 7 +--- kernel/drivers/gpiopwm/gpiopwm.c | 3 -- kernel/drivers/ipc/rtipc.c | 7 +--- kernel/drivers/net/stack/ipv4/udp/udp.c | 8 +++- kernel/drivers/net/stack/rtnet_module.c | 3 ++ kernel/drivers/serial/16550A.c | 7 +--- kernel/drivers/serial/mpc52xx_uart.c | 7 ++-- kernel/drivers/serial/rt_imx_uart.c | 7 ++-- kernel/drivers/testing/heapcheck.c | 3 -- kernel/drivers/testing/rtdmtest.c | 3 -- kernel/drivers/testing/switchtest.c | 6 --- kernel/drivers/testing/timerbench.c | 6 --- kernel/drivers/udd/udd.c | 9 +---- 32 files changed, 120 insertions(+), 217 deletions(-) -- 2.16.4
