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
     

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


14 Sep, 2006

1 commit


12 Sep, 2006

2 commits


20 Aug, 2006

4 commits


06 Jul, 2006

2 commits

  • - fealnx: convert #define to enum
    - fealnx, sundance: mark chip info table __devinitdata
    - fealnx: use dev_printk() during probe
    - fealnx: formatting cleanups
    - starfire: remove obsolete comment
    - sundance, via-rhine: add some whitespace where useful, in tables
    - sundance: prefer "{ }" table terminator
    - via-rhine: mark PCI probe table const

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • When in-kernel net drivers branched from Donald Becker's vanilla driver
    set, in the days before BitKeeper and git, a driver changelog was
    maintained in the driver source code. These days, the kernel's
    changelog is far superior and much more accurate, so the in-driver
    changelogs are removed.

    Another relic of the Becker/kernel split was version numbering, using
    "foo-LKx.y.z" notation, resulting in weird version numbers like
    "1.17b-LK1.1.9". These drivers are for older hardware, and see few
    changes these days, so the version numbers were all bumped to something
    more simple.

    Finally, in xircom_tulip_cb specifically, an additional cleanup removes
    the always-enabled CARDBUS cpp macro.

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     

03 Jul, 2006

1 commit


23 Jun, 2006

1 commit

  • First of all it is unnecessary to allocate a new skb in skb_pad since
    the existing one is not shared. More importantly, our hard_start_xmit
    interface does not allow a new skb to be allocated since that breaks
    requeueing.

    This patch uses pskb_expand_head to expand the existing skb and linearize
    it if needed. Actually, someone should sift through every instance of
    skb_pad on a non-linear skb as they do not fit the reasons why this was
    originally created.

    Incidentally, this fixes a minor bug when the skb is cloned (tcpdump,
    TCP, etc.). As it is skb_pad will simply write over a cloned skb. Because
    of the position of the write it is unlikely to cause problems but still
    it's best if we don't do it.

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

    Herbert Xu
     

20 May, 2006

1 commit

  • Revert previous patch with subject "change mdelay to msleep and remove
    from ISR path". This patch seems to have caused bigger problems than
    it solved, and it didn't solve much of a problem to begin with...

    Discussion about backing-out this patch can be found here:

    http://marc.theaimsgroup.com/?l=linux-netdev&m=114321570402396&w=2

    The git commit associated w/ the original patch is:

    6ba98d311d0a4ff7dc36d8f435ce60174f4c30ec

    Signed-off-by: John W. Linville

    John W. Linville
     

03 May, 2006

1 commit

  • Fixes Rhine I cards disclosing fragments of previously transmitted frames
    in new transmissions.

    Before transmission, any socket buffer (skb) shorter than the ethernet
    minimum length of 60 bytes was zero-padded. On Rhine I cards the data can
    later be copied into an aligned transmission buffer without copying this
    padding. This resulted in the transmission of the frame with the extra
    bytes beyond the provided content leaking the previous contents of this
    buffer on to the network.

    Now zero-padding is repeated in the local aligned buffer if one is used.

    Following a suggestion from the via-rhine maintainer, no attempt is made
    here to avoid the duplicated effort of padding the skb if it is known that
    an aligned buffer will definitely be used. This is to make the change
    "obviously correct" and allow it to be applied to a stable kernel if
    necessary. There is no change to the flow of control and the changes are
    only to the Rhine I code path.

    The patch has run on an in-service Rhine-I host without incident. Frames
    shorter than 60 bytes are now correctly zero-padded when captured on a
    separate host. I see no unusual stats reported by ifconfig, and no unusual
    log messages.

    Signed-off-by: Craig Brind
    Signed-off-by: Roger Luethi
    Cc: Jeff Garzik
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    Craig Brind
     

13 Apr, 2006

2 commits


30 Mar, 2006

1 commit

  • Problems with link state detection have been reported several times in the
    past months.

    Denis Vlasenko did all the work tracking it down. Jeff Garzik suggested the
    proper place for the fix.

    When using the mii library, the driver needs to check mii->force_media
    and set dev->state accordingly.

    Signed-off-by: Roger Luethi
    Signed-off-by: Jeff Garzik

    Roger Luethi
     

19 Oct, 2005

1 commit

  • Get rid of the mdelay call in rhine_disable_linkmon. The function
    is called from the via-rhine versions of mdio_read and mdio_write.
    Those functions are indirectly called from rhine_check_media and
    rhine_tx_timeout, both of which can be called in interrupt context.

    So, create tx_timeout_task and check_media_task as instances of struct
    work_struct inside of rhine_private. Then, change rhine_tx_timeout to
    invoke schedule_work for tx_timeout_task (i.e. rhine_tx_timeout_task),
    moving the work to process context. Also, change rhine_error (invoked
    from rhine_interrupt) to invoke schedule_work for check_media_task
    (i.e. rhine_check_media_task), which simply calls rhine_check media
    in process context. Finally, add a call to flush_scheduled_work in
    rhine_close to avoid any resource conflicts with pending work items.

    Signed-off-by: John W. Linville
    Signed-off-by: Jeff Garzik

    John W. Linville
     

14 Sep, 2005

1 commit


29 Jun, 2005

2 commits

  • Linus Torvalds
     
  • Many drivers use skb->tail unnecessarily.

    In these situations, the code roughly looks like:

    dev = dev_alloc_skb(...);

    [optional] skb_reserve(skb, ...);

    ... skb->tail ...

    But even if the skb_reserve() happens, skb->data equals
    skb->tail. So it doesn't make any sense to use anything
    other than skb->data in these cases.

    Another case was the s2io.c driver directly mucking with
    the skb->data and skb->tail pointers. It really just wanted
    to do an skb_reserve(), so that's what the code was changed
    to do instead.

    Another reason I'm making this change as it allows some SKB
    cleanups I have planned simpler to merge. In those cleanups,
    skb->head, skb->tail, and skb->end pointers are removed, and
    replaced with skb->head_room and skb->tail_room integers.

    Signed-off-by: David S. Miller
    Acked-by: Jeff Garzik

    David S. Miller
     

28 Jun, 2005

2 commits


27 Jun, 2005

2 commits

  • --Boundary-00=_F5lsC5eH1wGW5o9
    Content-Type: text/plain;
    charset="koi8-r"
    Content-Transfer-Encoding: 7bit
    Content-Disposition: inline

    Hi Jeff,

    In some messages in via-rhine.c there is a leading space
    for no apparent reason. This patch removes it.
    --
    vda

    --Boundary-00=_F5lsC5eH1wGW5o9
    Content-Type: text/x-diff;
    charset="koi8-r";
    name="via-rhine.c.diff"
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment;
    filename="via-rhine.c.diff"

    Denis Vlasenko
     
  • Use the DMA_{64,32}BIT_MASK constants from dma-mapping.h when calling
    pci_set_dma_mask() or pci_set_consistent_dma_mask()

    This patch includes dma-mapping.h explicitly because it caused errors
    on some architectures otherwise.

    See http://marc.theaimsgroup.com/?t=108001993000001&r=1&w=2 for details

    Signed-off-by: Tobias Klauser
    Signed-off-by: Domen Puncer

    Domen Puncer
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds