On 3/23/20 10:25 AM, Stéphane Grosjean wrote: > When switching in MSI mode, we've noticed that once CAN0 is closed > (i.e., once its own interrupt is freed), all other CANs on the same card no longer receive interrupts (i.e., the handler is never called again). Is it the free_irq() or the other code called on ifdown? Comment out the free_irq() and check what happens. > This issue doesn't exist when any other CANx then CAN0 is closed. > > The reason of this is not clear. What we know is that this issue doesn't > exist under Windows for any of our (CAN 2.0 as well as CAN FD) cards. On the contrary, the issue is the same for all of our CAN 2.0 / CAN FD cards under Linux. > > Up to now, the only workaround we have to run in MSI mode is to > request_irq() when probing the devices (starting from CAN0) *AND* > free_irq() in the opposite order (ending with CAN0) when removing the module. > > Obvioulsy, enabling/disabling hw interrupts is always done when the can interface is put to up/down. > > The "only" side effect is that all MSI interupt levels allocated by the > driver are requested, even if their corresponding interfaces are not UP. Which drivers have this problem? Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung West/Dortmund | Phone: +49-231-2826-924 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |