Looks unrelated at the first glance but happens each time after I unload mt7630e, which is suspicious.
By the way, if I try to load mt7630e again then, the system hangs completely (no virt. console, no SSH access, even no reaction to SysRq key that worked before).
I'd guess, the driver does not cleanup something properly and the first suspect is its IRQ line.
From what I see in the code, rt2x00lib_start() calls request_irq(). Should not rt2x00lib_stop() call free_irq() then? Or free_irq() in rt2x00mmio_uninitialize() is supposed to do the trick somehow?
It looks strange that the call to request_irq() in rt2x00mmio_initialize() is disabled by #if 0 but rt2x00mmio_uninitialize() still calls free_irq().
Besides, it looks like, the error handling in rt2x00lib_start() has enough room for improvement. For example, if request_irq() succeeds but rt2x00lib_load_firmware() (or other operations that may fail) returns error after that, free_irq() should be called but it is not.
OS: ROSA R6 Linux, x64. Kernel 4.1.3. The PCI IDs of the device are 14c3-7630-103c-197c.
The problem shows up when I try to unload mt7630e (modprobe -r mt7630e).
As described in https://github.com/kuba-moo/mt7630e/issues/15, I have commented out the call to
Set_BtDump_Proc()
as a workaround.The system no longer crashes here but complains as follows right after I unload mt7630e module:
Looks unrelated at the first glance but happens each time after I unload mt7630e, which is suspicious.
By the way, if I try to load mt7630e again then, the system hangs completely (no virt. console, no SSH access, even no reaction to SysRq key that worked before).
I'd guess, the driver does not cleanup something properly and the first suspect is its IRQ line. From what I see in the code,
rt2x00lib_start()
callsrequest_irq()
. Should notrt2x00lib_stop()
callfree_irq()
then? Orfree_irq()
inrt2x00mmio_uninitialize()
is supposed to do the trick somehow?It looks strange that the call to
request_irq()
inrt2x00mmio_initialize()
is disabled by#if 0
butrt2x00mmio_uninitialize()
still callsfree_irq()
.Besides, it looks like, the error handling in
rt2x00lib_start()
has enough room for improvement. For example, ifrequest_irq()
succeeds butrt2x00lib_load_firmware()
(or other operations that may fail) returns error after that,free_irq()
should be called but it is not.