netdev
[Top] [All Lists]

Re: Network device driver probe issues

To: Anton Blanchard <anton@xxxxxxxxx>
Subject: Re: Network device driver probe issues
From: Jeff Garzik <jgarzik@xxxxxxxxx>
Date: Thu, 15 Jul 2004 19:34:15 -0400
Cc: netdev@xxxxxxxxxxx, cramerj@xxxxxxxxx, john.ronciak@xxxxxxxxx, ganesh.venkatesan@xxxxxxxxx, jonmason@xxxxxxxxxx, jkenisto@xxxxxxxxxx
In-reply-to: <20040715135244.GD27715@krispykreme>
References: <20040715135244.GD27715@krispykreme>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040510
Anton Blanchard wrote:
The e1000 gets around this by replicating register_netdev:

        rtnl_lock();
        /* we need to set the name early since the DPRINTK macro needs it set */
        if (dev_alloc_name(netdev, netdev->name) < 0)
                goto err_free_unlock;

...

        /* since we are holding the rtnl lock already, call the no-lock version 
*/
        if((err = register_netdevice(netdev)))
                goto err_register;

        cards_found++;
        rtnl_unlock();

The problem I have with this method has to do with how failures appear
to the user. If you have two network cards and the first one fails
during probe you will see:

Agreed, this is a hack and strongly discouraged.

Hopefully Intel will hear this and send me a patch to fix... :)


We should instead use something stable to attach to printks during
probe. pci_name() is the obvious choice, perhaps using dev_printk().
The failure then becomes:

0000:01:01.0 Intel(R) PRO/1000 Network Connection
0000:01:01.0 The EEPROM Checksum Is Not Valid
0000:02:01.0 Intel(R) PRO/1000 Network Connection

pci_name() or a simple counter of devices found. I prefer pci_name()

        Jeff



<Prev in Thread] Current Thread [Next in Thread>