• Linas Vepstas's avatar
    [PATCH] powerpc/cell spidernet low watermark patch. · 204e5fa1
    Linas Vepstas authored
    Implement basic low-watermark support for the transmit queue.
    Hardware low-watermarks allow a properly configured kernel
    to continously stream data to a device and not have to handle
    any interrupts at all in doing so. Correct zero-interrupt
    operation can be actually observed for this driver, when the
    socket buffer is made large enough.
    
    The basic idea of a low-watermark interrupt is as follows.
    The device driver queues up a bunch of packets for the hardware
    to transmit, and then kicks the hardware to get it started.
    As the hardware drains the queue of pending, untransmitted
    packets, the device driver will want to know when the queue
    is almost empty, so that it can queue some more packets.
    
    If the queue drains down to the low waterark, then an interrupt
    will be generated. However, if the kernel/driver continues
    to add enough packets to keep the queue partially filled,
    no interrupt will actually be generated, and the hardware
    can continue streaming packets indefinitely in this mode.
    
    The impelmentation is done by setting the DESCR_TXDESFLG flag
    in one of the packets. When the hardware sees this flag, it will
    interrupt the device driver. Because this flag is on a fixed
    packet, rather than at  fixed location in the queue, the
    code below needs to move the flag as more packets are
    queued up. This implementation attempts to keep the flag
    at about 1/4 from "empty".
    Signed-off-by: default avatarLinas Vepstas <linas@austin.ibm.com>
    Signed-off-by: default avatarJames K Lewis <jklewis@us.ibm.com>
    Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    204e5fa1
spider_net.c 62.1 KB