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.

Attachment: 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

Reply via email to