• M
    skge: use unique IRQ name · 415e69e6
    Michal Schmidt 提交于
    Most network drivers request their IRQ when the interface is activated.
    skge does it in ->probe() instead, because it can work with two-port
    cards where the two net_devices use the same IRQ. This works fine most
    of the time, except in some situations when the interface gets renamed.
    Consider this example:
    
    1. modprobe skge
       The card is detected as eth0 and requests IRQ 17. Directory
       /proc/irq/17/eth0 is created.
    2. There is an udev rule which says this interface should be called
       eth1, so udev renames eth0 -> eth1.
    3. modprobe 8139too
       The Realtek card is detected as eth0. It will be using IRQ 17 too.
    4. ip link set eth0 up
       Now 8139too requests IRQ 17.
    
    The result is:
    WARNING: at fs/proc/generic.c:590 proc_register ...
    proc_dir_entry '17/eth0' already registered
    ...
    And "ls /proc/irq/17" shows two subdirectories, both called eth0.
    
    Fix it by using a unique name for skge's IRQ, based on the PCI address.
    The naming from the example then looks like this:
    $ grep skge /proc/interrupts
     17:        169   IO-APIC-fasteoi   skge@pci:0000:00:0a.0, eth0
    
    irqbalance daemon will have to be taught to recognize "skge@" as an
    Ethernet interrupt. This will be a one-liner addition in classify.c. I
    will send a patch to irqbalance if this change is accepted.
    Signed-off-by: NMichal Schmidt <mschmidt@redhat.com>
    Acked-by: NStephen Hemminger <shemminger@vyatta.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    415e69e6
skge.c 106.2 KB