skbuff errors with new tulip driver under linuxppc

Raj Taneja
Wed Sep 15 16:41:40 1999

Donald Becker wrote:

> > eth0: Internal fault: The skbuff addresses do not match in tulip_rx:
> > d0986401 vs. c1649800 / c1649810.
> Thanks for the report.
> The work-around is to compile the driver with -Dfinal_version=1 to disable
> the checking code.
> The fix is make the following change
> #ifndef final_version
> -       if (cpu_to_virt(tp->rx_ring[entry].buffer1) != temp)
> +       if (le32desc_to_virt(tp->rx_ring[entry].buffer1) != temp)
>                 printk(KERN_ERR "%s: Internal fault: The skbuff addresses "
>                 "do not match in tulip_rx: %p vs. %p / %p.\n",
>                 dev->name, bus_to_virt(tp->rx_ring[entry].buffer1),
>                 skb->head, temp);
> #endif
> This change is in v0.91m, along with
>    Turning on 21143 interrupt mitigation mode if a packet overload ("too
>    much work at interrupt") occurs.
>    Refilling the Rx buffer list during more events, to recover more quickly
>    from running out of Rx buffers.
> Please send a second report if this fix or new version corrects the problem.
> It it does I should remove the check above, since it now involves additional
> instructions instead of only an almost-free comparison.

I implemented the fix in the code (btw, in 0.91j++, the original string is
bus_to_virt, not cpu_to_virt), recompiled and now it works just fine. Thanks.