Merge branch 'mv88e6xxx-module-reloading'
Andrew Lunn says: ==================== Fixes to allow mv88e6xxx module to be reloaded As reported by Uwe Kleine-König, the interrupt trigger is first configured by DT and then reconfigured to edge. This results in a failure on EPROBE_DEFER, or if the module is unloaded and reloaded. A second crash happens on module reload due to a missing call to the common IRQ free code when using polled interrupts. With these fixes in place, it becomes possible to load and unload the kernel modules a few times without it crashing. v2: Fix the ü in Künig a couple of times v3: But the ü should be an ö! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
9259f134a7
|
@ -425,7 +425,7 @@ static int mv88e6xxx_g1_irq_setup(struct mv88e6xxx_chip *chip)
|
|||
|
||||
err = request_threaded_irq(chip->irq, NULL,
|
||||
mv88e6xxx_g1_irq_thread_fn,
|
||||
IRQF_ONESHOT | IRQF_TRIGGER_FALLING,
|
||||
IRQF_ONESHOT,
|
||||
dev_name(chip->dev), chip);
|
||||
if (err)
|
||||
mv88e6xxx_g1_irq_free_common(chip);
|
||||
|
@ -467,6 +467,8 @@ static int mv88e6xxx_irq_poll_setup(struct mv88e6xxx_chip *chip)
|
|||
|
||||
static void mv88e6xxx_irq_poll_free(struct mv88e6xxx_chip *chip)
|
||||
{
|
||||
mv88e6xxx_g1_irq_free_common(chip);
|
||||
|
||||
kthread_cancel_delayed_work_sync(&chip->irq_poll_work);
|
||||
kthread_destroy_worker(chip->kworker);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue