Re: [PATCH] [2.4] forcedeth network driver
From: Jeff Garzik (jgarzik_at_pobox.com)
Date: 01/25/04
- Previous message: Davide Libenzi: "Re: Request: I/O request recording"
- In reply to: Carl-Daniel Hailfinger: "Re: [PATCH] [2.4] forcedeth network driver"
- Next in thread: Vojtech Pavlik: "Re: [PATCH] [2.4] forcedeth network driver"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sat, 24 Jan 2004 18:57:08 -0500 To: Carl-Daniel Hailfinger <c-d.hailfinger.kernel.2004@gmx.net>
Carl-Daniel Hailfinger wrote:
> Jeff Garzik wrote:
>
>>Manfred Spraul wrote:
>>
>>
>>>Jeff wrote:
>>>
>>>
>>>>* Interrupt handler is SCARY. You can potentially take and release
>>>>the spinlock -many times- during a single interrupt.
>>>>
>>>
>>>I think that can happen only in theory: A new packet is completed
>>>while the driver processes rx packets. I all normal cases there should
>>>be one spinlock operation per tx irq, and 0 per rx irq.
>>>And error handling IMHO doesn't count: it should be rare.
>>>Or do I overlook a common case?
>>
>>
>>Any amount of load at all will lead to multiple interations of the
>>master loop in the interrupt handler.
>
>
> +static int max_interrupt_work = 5;
> [...]
> + for (i=0; ; i++) {
> + if (i > max_interrupt_work) {
> + spin_lock(&np->lock);
> + /* disable interrupts on the nic */
> + writel(0, base + NvRegIrqMask);
> + pci_push(base);
> +
> + if (!np->in_shutdown)
> + mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
> + printk(KERN_DEBUG "%s: too many iterations (%d) in
> nic_irq.\n", dev->name, i);
> + spin_unlock(&np->lock);
> + break;
> + }
>
> So actually it should not happen that often since we exit the master loop
> after 5 iterations.
<shrug> Well, it's not a must-change item IMO
>>>>>+#define NV_MIIPHY_DELAY 10
>>>>>+#define NV_MIIPHY_DELAYMAX 10000
>>>>
>>>>
>>>>
>>>>Style: it's fairly silly to mix enums and constants.
>>>>
>>>>
>>>
>>>Right now: enum for the nic registers, #define for the rest. If you
>>>don't like it I can change it.
>>
>>
>>enums are definitely preferred... communicates more type/symbol
>>information to the compiler and more symbol info to the debugger.
>
>
> The current order has the benefit that the values which might be written
> to a register (most of which are constants) are located next to the enum
> for the register.
You can do this with enums, too :)
>>Fair enough. You may wish to (after testing!) increase DEFAULT_MTU by 4
>>bytes, to support VLAN.
>
>
> Already tried. If we increase the length of the packet the nic has to send
> beyond 1500 bytes, we simply get an TX error/timeout. So far, I have not
> seen any hints that the nic might do VLAN tagging internally.
The current limit sounds correct, then.
> Jeff, there is another bug in some hardware revisions: For every received
> packet it reports 1500 bytes length regardless of the real length. We take
> this len as correct and hope for the best. At best, it ruins our RX
> statistics. At worst, it might leak kernel memory to userspace since the
> unused remainder of the 1500 bytes is not initialized with anything, yet
> passed up with netif_rx(skb). Does the networking core provide any
> built-in function to address this problem?
>
> + prd = &np->rx_ring[i];
> [...]
> + len = le16_to_cpu(prd->Length);
> [...]
> + skb_put(skb, len);
> [...]
> + netif_rx(skb);
>
> The above code would be correct if the hardware actually gave us the right
> values. I know that at least some nForce2 systems suffer from this.
Peek at the ethernet frame header and see what it thinks the payload
length is? If less than 1500...
Jeff
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
- Previous message: Davide Libenzi: "Re: Request: I/O request recording"
- In reply to: Carl-Daniel Hailfinger: "Re: [PATCH] [2.4] forcedeth network driver"
- Next in thread: Vojtech Pavlik: "Re: [PATCH] [2.4] forcedeth network driver"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]