Date: | 2011-07-06 23:43:07 (12 years 8 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | 64e0322abad52f9ca6566603e5df0f8e49c6a27d |
Message: | atusb: added interrupt URB removal on cleanup This adds the cleanup but leaves some races open. Signed-off-by: Werner Almesberger <werner@almesberger.net> |
Files: |
drivers/spi/atusb.c (2 diffs) |
Change Details
drivers/spi/atusb.c | ||
---|---|---|
608 | 608 | return 0; |
609 | 609 | |
610 | 610 | err_master: |
611 | /* @@@ kill interrupt URB */ | |
611 | /* | |
612 | * If we come here from a partially successful driver initialization, | |
613 | * we don't really know how much it has done. In particular, it may | |
614 | * have triggered an interrupt and thus removed the interrupt URB and | |
615 | * maybe scheduled the tasklet. | |
616 | */ | |
617 | tasklet_disable(&atusb->task); | |
618 | if (atusb->irq_urb) | |
619 | usb_kill_urb(atusb->irq_urb); | |
612 | 620 | spi_master_put(atusb->master); |
613 | 621 | err_slave_irq: |
614 | 622 | set_irq_chained_handler(atusb->slave_irq, NULL); |
... | ... | |
623 | 631 | struct atusb_local *atusb = usb_get_intfdata(interface); |
624 | 632 | struct spi_master *master = atusb->master; |
625 | 633 | |
626 | /* @@@ kill interrupt URB */ | |
634 | tasklet_disable(&atusb->task); | |
635 | /* @@@ this needs some extra protecion - wa */ | |
636 | if (atusb->irq_urb) | |
637 | usb_kill_urb(atusb->irq_urb); | |
638 | ||
627 | 639 | usb_set_intfdata(interface, NULL); |
628 | 640 | usb_put_dev(atusb->udev); |
629 | 641 |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9