8390 drivers (was: Re: Debian kernel 2.6.38-5)

Geert Uytterhoeven
2011-05-09T20:38:18Z

On Mon, May 9, 2011 at 22:25, Christian T. Steigies <cts@debian.org> wrote:
> On Mon, May 09, 2011 at 09:16:16AM +0200, Geert Uytterhoeven wrote:
>> On Mon, May 9, 2011 at 01:14, Finn Thain <fthain@telegraphics.com.au> wrote:
>> > On Sun, 8 May 2011, Christian T. Steigies wrote:
>> >> PS 2.6.28 did not boot: kernel too old. When was TLS introduced? I'll try to
>> >> apply the patch you mentioned in your other message.
>> >
>> > I sometimes test network cards with busybox. It can be built without
>> > linking in glibc and doesn't need TLS.
>> >
>> >
>> >> [  130.870000] eth0: trigger_send() called with the transmitter busy.
>> >> [  132.240000] ------------[ cut here ]------------
>> >> [  132.240000] WARNING: at net/sched/sch_generic.c:256 dev_watchdog+0x1ac/0x1cc()
>> >> [  132.250000] NETDEV WATCHDOG: eth0 (): transmit queue 0 timed out
>> >
>> > Looks a lot like this problem:
>> >
>> > http://patchwork.ozlabs.org/patch/27774/
>>
>> Yeah, that's a very likely culprit. Thx!
>
> I applied the following patch and it works! apt-get update that is, there is
> no sshd on this freshly installed system yet...
>
> I also changed this line to have 4 underscores at the beginning:
>
>        { 0xec940559, "____alloc_ei_netdev" },

In which file is that?

> it does not show up in git diff, so I am not sure if this is a leftover from
> a previous checkout, or if it is also needed. And if it is needed, if it
> should be two underscores or four or none, and if so why or why not...
> Looking at the other drivers, there does not seem to be a lot of consistency?

From this, I guess hydra and ne-h8300 are also affected, as they
include lib8390.c
theirselves and are linked with 8390.o?

> diff --git a/drivers/net/zorro8390.c b/drivers/net/zorro8390.c
> index b78a38d9..8c7c522 100644
> --- a/drivers/net/zorro8390.c
> +++ b/drivers/net/zorro8390.c
> @@ -126,7 +126,7 @@ static int __devinit zorro8390_init_one(struct zorro_dev *z,
>
>     board = z->resource.start;
>     ioaddr = board+cards[i].offset;
> -    dev = alloc_ei_netdev();
> +    dev = ____alloc_ei_netdev(0);
>     if (!dev)
>        return -ENOMEM;
>     if (!request_mem_region(ioaddr, NE_IO_EXTENT*2, DRV_NAME)) {
> @@ -146,15 +146,15 @@ static int __devinit zorro8390_init_one(struct zorro_dev *z,
>  static const struct net_device_ops zorro8390_netdev_ops = {
>        .ndo_open               = zorro8390_open,
>        .ndo_stop               = zorro8390_close,
> -       .ndo_start_xmit         = ei_start_xmit,
> -       .ndo_tx_timeout         = ei_tx_timeout,
> -       .ndo_get_stats          = ei_get_stats,
> -       .ndo_set_multicast_list = ei_set_multicast_list,
> +       .ndo_start_xmit         = __ei_start_xmit,
> +       .ndo_tx_timeout         = __ei_tx_timeout,
> +       .ndo_get_stats          = __ei_get_stats,
> +       .ndo_set_multicast_list = __ei_set_multicast_list,
>        .ndo_validate_addr      = eth_validate_addr,
>        .ndo_set_mac_address    = eth_mac_addr,
>        .ndo_change_mtu         = eth_change_mtu,
>  #ifdef CONFIG_NET_POLL_CONTROLLER
> -       .ndo_poll_controller    = ei_poll,
> +       .ndo_poll_controller    = __ei_poll,
>  #endif
>  };

And 8390.o can be removed from drivers/net/Makefile?

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds