05 Dec, 2006

1 commit


03 Dec, 2006

1 commit


22 Nov, 2006

1 commit


05 Oct, 2006

1 commit

  • Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
    of passing regs around manually through all ~1800 interrupt handlers in the
    Linux kernel.

    The regs pointer is used in few places, but it potentially costs both stack
    space and code to pass it around. On the FRV arch, removing the regs parameter
    from all the genirq function results in a 20% speed up of the IRQ exit path
    (ie: from leaving timer_interrupt() to leaving do_IRQ()).

    Where appropriate, an arch may override the generic storage facility and do
    something different with the variable. On FRV, for instance, the address is
    maintained in GR28 at all times inside the kernel as part of general exception
    handling.

    Having looked over the code, it appears that the parameter may be handed down
    through up to twenty or so layers of functions. Consider a USB character
    device attached to a USB hub, attached to a USB controller that posts its
    interrupts through a cascaded auxiliary interrupt controller. A character
    device driver may want to pass regs to the sysrq handler through the input
    layer which adds another few layers of parameter passing.

    I've build this code with allyesconfig for x86_64 and i386. I've runtested the
    main part of the code on FRV and i386, though I can't test most of the drivers.
    I've also done partial conversion for powerpc and MIPS - these at least compile
    with minimal configurations.

    This will affect all archs. Mostly the changes should be relatively easy.
    Take do_IRQ(), store the regs pointer at the beginning, saving the old one:

    struct pt_regs *old_regs = set_irq_regs(regs);

    And put the old one back at the end:

    set_irq_regs(old_regs);

    Don't pass regs through to generic_handle_irq() or __do_IRQ().

    In timer_interrupt(), this sort of change will be necessary:

    - update_process_times(user_mode(regs));
    - profile_tick(CPU_PROFILING, regs);
    + update_process_times(user_mode(get_irq_regs()));
    + profile_tick(CPU_PROFILING);

    I'd like to move update_process_times()'s use of get_irq_regs() into itself,
    except that i386, alone of the archs, uses something other than user_mode().

    Some notes on the interrupt handling in the drivers:

    (*) input_dev() is now gone entirely. The regs pointer is no longer stored in
    the input_dev struct.

    (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does
    something different depending on whether it's been supplied with a regs
    pointer or not.

    (*) Various IRQ handler function pointers have been moved to type
    irq_handler_t.

    Signed-Off-By: David Howells
    (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)

    David Howells
     

28 Sep, 2006

5 commits


25 Sep, 2006

1 commit

  • * 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: (217 commits)
    net/ieee80211: fix more crypto-related build breakage
    [PATCH] Spidernet: add ethtool -S (show statistics)
    [NET] GT96100: Delete bitrotting ethernet driver
    [PATCH] mv643xx_eth: restrict to 32-bit PPC_MULTIPLATFORM
    [PATCH] Cirrus Logic ep93xx ethernet driver
    r8169: the MMIO region of the 8167 stands behin BAR#1
    e1000, ixgb: Remove pointless wrappers
    [PATCH] Remove powerpc specific parts of 3c509 driver
    [PATCH] s2io: Switch to pci_get_device
    [PATCH] gt96100: move to pci_get_device API
    [PATCH] ehea: bugfix for register access functions
    [PATCH] e1000 disable device on PCI error
    drivers/net/phy/fixed: #if 0 some incomplete code
    drivers/net: const-ify ethtool_ops declarations
    [PATCH] ethtool: allow const ethtool_ops
    [PATCH] sky2: big endian
    [PATCH] sky2: fiber support
    [PATCH] sky2: tx pause bug fix
    drivers/net: Trim trailing whitespace
    [PATCH] ehea: IBM eHEA Ethernet Device Driver
    ...

    Manually resolved conflicts in drivers/net/ixgb/ixgb_main.c and
    drivers/net/sky2.c related to CHECKSUM_HW/CHECKSUM_PARTIAL changes by
    commit 84fa7933a33f806bbbaae6775e87459b1ec584c0 that just happened to be
    next to unrelated changes in this update.

    Linus Torvalds
     

23 Sep, 2006

1 commit


20 Sep, 2006

1 commit


14 Sep, 2006

1 commit


01 Sep, 2006

9 commits


24 Aug, 2006

1 commit


20 Aug, 2006

1 commit


17 Aug, 2006

3 commits


13 Jul, 2006

1 commit

  • There were some tso bugs that only showed up with heavy load and 16kB
    pages that this patch fixes by making the driver's internal use count
    of descriptors match the count that it was estimating it needed using
    the DESC_NEEDED macro. This bug caused NETDEV_WATCHDOG resets aka
    tx timeouts.

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: Jeff Garzik

    Auke Kok
     

09 Jul, 2006

1 commit

  • This patch adds the wrapper function skb_is_gso which can be used instead
    of directly testing skb_shinfo(skb)->gso_size. This makes things a little
    nicer and allows us to change the primary key for indicating whether an skb
    is GSO (if we ever want to do that).

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

03 Jul, 2006

1 commit


01 Jul, 2006

1 commit


23 Jun, 2006

1 commit

  • Having separate fields in sk_buff for TSO/UFO (tso_size/ufo_size) is not
    going to scale if we add any more segmentation methods (e.g., DCCP). So
    let's merge them.

    They were used to tell the protocol of a packet. This function has been
    subsumed by the new gso_type field. This is essentially a set of netdev
    feature bits (shifted by 16 bits) that are required to process a specific
    skb. As such it's easy to tell whether a given device can process a GSO
    skb: you just have to and the gso_type field and the netdev's features
    field.

    I've made gso_type a conjunction. The idea is that you have a base type
    (e.g., SKB_GSO_TCPV4) that can be modified further to support new features.
    For example, if we add a hardware TSO type that supports ECN, they would
    declare NETIF_F_TSO | NETIF_F_TSO_ECN. All TSO packets with CWR set would
    have a gso_type of SKB_GSO_TCPV4 | SKB_GSO_TCPV4_ECN while all other TSO
    packets would be SKB_GSO_TCPV4. This means that only the CWR packets need
    to be emulated in software.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

27 May, 2006

8 commits

  • increase the year dates to 2006 and bump the version to 1.0.109-k2

    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok
     
  • same as e1000 - remove the changelog from the driver code itself.

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok
     
  • fix netdev->priv ==> netdev_priv(netdev)

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok
     
  • deinline a few large functions as to allow the compiler to pick.

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok
     
  • This mimics a change made in the e1000 driver that imitates a slick
    tg3 way of avoiding grabbing the lock around restarting the tx queue.

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok
     
  • In order to help correct window size growth, use the MFS register
    to limit the packet sizes received and allocate only the buffer
    size necessary

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    index 0905a82..84a8064 100644
    --- a/drivers/net/ixgb/ixgb_main.c
    +++ b/drivers/net/ixgb/ixgb_main.c
    @@ -574,9 +574,8 @@ ixgb_sw_init(struct ixgb_adapter *adapte
    hw->subsystem_vendor_id = pdev->subsystem_vendor;
    hw->subsystem_id = pdev->subsystem_device;

    - adapter->rx_buffer_len = IXGB_RXBUFFER_2048;
    -
    hw->max_frame_size = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
    + adapter->rx_buffer_len = hw->max_frame_size;

    if((hw->device_id == IXGB_DEVICE_ID_82597EX)
    || (hw->device_id == IXGB_DEVICE_ID_82597EX_CX4)
    @@ -820,21 +819,14 @@ ixgb_setup_rctl(struct ixgb_adapter *ada

    rctl |= IXGB_RCTL_SECRC;

    - switch (adapter->rx_buffer_len) {
    - case IXGB_RXBUFFER_2048:
    - default:
    + if (adapter->rx_buffer_len rx_buffer_len rx_buffer_len rx_buffer_len hw, RCTL, rctl);
    }
    @@ -1551,25 +1543,12 @@ ixgb_change_mtu(struct net_device *netde
    DPRINTK(PROBE, ERR, "Invalid MTU setting %d\n", new_mtu);
    return -EINVAL;
    }
    -
    - if((max_frame rx_buffer_len = IXGB_RXBUFFER_2048;
    -
    - } else if(max_frame rx_buffer_len = IXGB_RXBUFFER_4096;

    - } else if(max_frame rx_buffer_len = IXGB_RXBUFFER_8192;
    + adapter->rx_buffer_len = max_frame;

    - } else {
    - adapter->rx_buffer_len = IXGB_RXBUFFER_16384;
    - }
    -
    netdev->mtu = new_mtu;
    -
    - if(old_max_frame != max_frame && netif_running(netdev)) {

    + if ((old_max_frame != max_frame) && netif_running(netdev)) {
    ixgb_down(adapter, TRUE);
    ixgb_up(adapter);
    }

    Auke Kok
     
  • There seemed to be another bug introduced as well as a performance hit
    with the addtion of the sentinel descriptor workaround. Removal of
    this workaround appears to prevent the hang. We'll take a risk
    and remove it, as we had never seen the originally reported bug
    under linux.

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok
     
  • user contributed fix for LAA across down/up, from tonychung00@users.sf.net.

    Signed-off-by: Jesse Brandeburg
    Signed-off-by: Auke Kok
    Signed-off-by: John Ronciak

    Auke Kok