On Wed, 2008-11-12 at 13:57 +0100, Michael Buesch wrote:
>
> Yeah, wrong.
> Do it later _after_ checking for shared IRQ and after the masking.
>
> 1892 static irqreturn_t b43_interrupt_handler(int irq, void *dev_id)
> 1893 {
> 1894 irqreturn_t ret = IRQ_NONE;
> 1895 struct b43_wldev *dev = dev_id;
> 1896 u32 reason;
> 1897
> 1898 if (!dev)
> 1899 return IRQ_NONE;
> 1900
> 1901 spin_lock(&dev->wl->irq_lock);
> 1902
> 1903 if (b43_status(dev) < B43_STAT_STARTED)
> 1904 goto out;
> 1905 reason = b43_read32(dev, B43_MMIO_GEN_IRQ_REASON);
> 1906 if (reason == 0xffffffff) /* shared IRQ */
> 1907 goto out;
> 1908 ret = IRQ_HANDLED;
> 1909 reason &= b43_read32(dev, B43_MMIO_GEN_IRQ_MASK);
> 1910 if (!reason)
> 1911 goto out;
>
> <<< Insert printk code here >>>OK. So doing it here, while link is "idle" I see many: 0x8000 (B43_IRQ_DMA) and 0x4 (B43_IRQ_TBTT_INDI) intermixed. When I start cranking traffic through, the last series of prints before the link dies are: b43-phy8 debug: Updated beacon template at 0x468 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8000 b43-phy8 debug: Updated beacon template at 0x68 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x468 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x68 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x468 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x68 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x468 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x68 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x468 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x68 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43-phy8 debug: Updated beacon template at 0x468 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8044 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x8040 b43_interrupt_handler: 0x4 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x40 b43_interrupt_handler: 0x8000 b43_interrupt_handler: 0x8000 b43-phy8 debug: Updated beacon template at 0x68 So, lots of the same 0x8000, although many of them with the addition of 0x40 (B43_IRQ_PMQ) and lots of the 0x4 still. Quite a number of beacon template updates too and as per usual, one at the end of the output where the wireless traffic fails. I can see in the bottom-half where all of those are handled except B43_IRQ_DMA. I don't see anywhere in the whole driver where that is handled in fact. Maybe it doesn't need to be. Shows what I know about driver programming. :-) b.
signature.asc
Description: This is a digitally signed message part
_______________________________________________ openwrt-devel mailing list [email protected] http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
