diff -ru linux-2.6.29.1-orig/drivers/net/via-velocity.c linux-2.6.29.1/drivers/net/via-velocity.c --- linux-2.6.29.1-orig/drivers/net/via-velocity.c 2009-04-02 22:55:27.000000000 +0200 +++ linux-2.6.29.1/drivers/net/via-velocity.c 2009-04-24 13:09:45.945318255 +0200 @@ -2226,8 +2226,8 @@ spin_lock(&vptr->lock); isr_status = mac_read_isr(vptr->mac_regs); - /* Not us ? */ - if (isr_status == 0) { + /* Not us or garbage ? */ + if (isr_status == 0 || isr_status == 0xffffffff) { spin_unlock(&vptr->lock); return IRQ_NONE; } @@ -2236,10 +2236,11 @@ /* * Keep processing the ISR until we have completed - * processing and the isr_status becomes zero + * processing and the isr_status becomes zero or + * we read out some garbage */ - while (isr_status != 0) { + while (isr_status != 0 && isr_status != 0xffffffff) { mac_write_isr(vptr->mac_regs, isr_status); if (isr_status & (~(ISR_PRXI | ISR_PPRXI | ISR_PTXI | ISR_PPTXI))) velocity_error(vptr, isr_status);