1. 11 8月, 2011 1 次提交
    • J
      cassini/niu/sun*: Move the Sun drivers · e689cf4a
      Jeff Kirsher 提交于
      Moves the Sun drivers into drivers/net/ethernet/sun/ and make
      the necessary Kconfig and Makefile changes.
      
      Oliver Hartkopp <socketcan@hartkopp.net> suggested removing the
      sun* prefix on the driver names.  This type of change I will
      leave up to the driver maintainers.
      
      CC: Sam Creasey <sammy@sammy.net>
      CC: Adrian Sun <asun@darksunrising.com>
      CC: Benjamin Herrenscmidt <benh@kernel.crashing.org>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      e689cf4a
  2. 16 4月, 2011 1 次提交
  3. 17 4月, 2008 2 次提交
  4. 17 10月, 2007 1 次提交
  5. 11 10月, 2007 2 次提交
    • J
      [NET] drivers/net: statistics cleanup #1 -- save memory and shrink code · 09f75cd7
      Jeff Garzik 提交于
      We now have struct net_device_stats embedded in struct net_device,
      and the default ->get_stats() hook does the obvious thing for us.
      
      Run through drivers/net/* and remove the driver-local storage of
      statistics, and driver-local ->get_stats() hook where applicable.
      
      This was just the low-hanging fruit in drivers/net; plenty more drivers
      remain to be updated.
      
      [ Resolved conflicts with napi_struct changes and fix sunqe build
        regression... -DaveM ]
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      09f75cd7
    • S
      [NET]: Make NAPI polling independent of struct net_device objects. · bea3348e
      Stephen Hemminger 提交于
      Several devices have multiple independant RX queues per net
      device, and some have a single interrupt doorbell for several
      queues.
      
      In either case, it's easier to support layouts like that if the
      structure representing the poll is independant from the net
      device itself.
      
      The signature of the ->poll() call back goes from:
      
      	int foo_poll(struct net_device *dev, int *budget)
      
      to
      
      	int foo_poll(struct napi_struct *napi, int budget)
      
      The caller is returned the number of RX packets processed (or
      the number of "NAPI credits" consumed if you want to get
      abstract).  The callee no longer messes around bumping
      dev->quota, *budget, etc. because that is all handled in the
      caller upon return.
      
      The napi_struct is to be embedded in the device driver private data
      structures.
      
      Furthermore, it is the driver's responsibility to disable all NAPI
      instances in it's ->stop() device close handler.  Since the
      napi_struct is privatized into the driver's private data structures,
      only the driver knows how to get at all of the napi_struct instances
      it may have per-device.
      
      With lots of help and suggestions from Rusty Russell, Roland Dreier,
      Michael Chan, Jeff Garzik, and Jamal Hadi Salim.
      
      Bug fixes from Thomas Graf, Roland Dreier, Peter Zijlstra,
      Joseph Fannin, Scott Wood, Hans J. Koch, and Michael Chan.
      
      [ Ported to current tree and all drivers converted.  Integrated
        Stephen's follow-on kerneldoc additions, and restored poll_list
        handling to the old style to fix mutual exclusion issues.  -DaveM ]
      Signed-off-by: NStephen Hemminger <shemminger@linux-foundation.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bea3348e
  6. 09 7月, 2007 2 次提交
  7. 21 6月, 2007 3 次提交
    • L
      spidernet: turn off descriptor chain end interrupt. · 128c6e2e
      Linas Vepstas 提交于
      At some point, the transmit descriptor chain end interrupt (TXDCEINT)
      was turned on. This is a mistake; and it damages small packet
      transmit performance, as it results in a huge storm of interrupts.
      Turn it off.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      128c6e2e
    • L
      spidernet: silence the ramfull messages · c3d1182a
      Linas Vepstas 提交于
      Although the previous patch resolved issues with hangs when the
      RX ram full interrupt is encountered, there are still situations
      where lots of RX ramfull interrupts arrive, resulting in a noisy
      log in syslog. There is no need for this.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      c3d1182a
    • L
      spidernet: Cure RX ram full bug · 4c4bd5a9
      Linas Vepstas 提交于
      This patch fixes a rare deadlock that can occur when the kernel
      is not able to empty out the RX ring quickly enough. Below follows
      a detailed description of the bug and the fix.
      
      As long as the OS can empty out the RX buffers at a rate faster than
      the hardware can fill them, there is no problem. If, for some reason,
      the OS fails to empty the RX ring fast enough, the hardware GDACTDPA
      pointer will catch up to the head, notice the not-empty condition,
      ad stop. However, RX packets may still continue arriving on the wire.
      The spidernet chip can save some limited number of these in local RAM.
      When this local ram fills up, the spider chip will issue an interrupt
      indicating this (GHIINT0STS will show ERRINT, and the GRMFLLINT bit
      will be set in GHIINT1STS).  When te RX ram full condition occurs,
      a certain bug/feature is triggered that has to be specially handled.
      This section describes the special handling for this condition.
      
      When the OS finally has a chance to run, it will empty out the RX ring.
      In particular, it will clear the descriptor on which the hardware had
      stopped. However, once the hardware has decided that a certain
      descriptor is invalid, it will not restart at that descriptor; instead
      it will restart at the next descr. This potentially will lead to a
      deadlock condition, as the tail pointer will be pointing at this descr,
      which, from the OS point of view, is empty; the OS will be waiting for
      this descr to be filled. However, the hardware has skipped this descr,
      and is filling the next descrs. Since the OS doesn't see this, there
      is a potential deadlock, with the OS waiting for one descr to fill,
      while the hardware is waiting for a differen set of descrs to become
      empty.
      
      A call to show_rx_chain() at this point indicates the nature of the
      problem. A typical print when the network is hung shows the following:
      
      net eth1: Spider RX RAM full, incoming packets might be discarded!
      net eth1: Total number of descrs=256
      net eth1: Chain tail located at descr=255
      net eth1: Chain head is at 255
      net eth1: HW curr desc (GDACTDPA) is at 0
      net eth1: Have 1 descrs with stat=xa0800000
      net eth1: HW next desc (GDACNEXTDA) is at 1
      net eth1: Have 127 descrs with stat=x40800101
      net eth1: Have 1 descrs with stat=x40800001
      net eth1: Have 126 descrs with stat=x40800101
      net eth1: Last 1 descrs with stat=xa0800000
      
      Both the tail and head pointers are pointing at descr 255, which is
      marked xa... which is "empty". Thus, from the OS point of view, there
      is nothing to be done. In particular, there is the implicit assumption
      that everything in front of the "empty" descr must surely also be empty,
      as explained in the last section. The OS is waiting for descr 255 to
      become non-empty, which, in this case, will never happen.
      
      The HW pointer is at descr 0. This descr is marked 0x4.. or "full".
      Since its already full, the hardware can do nothing more, and thus has
      halted processing. Notice that descrs 0 through 254 are all marked
      "full", while descr 254 and 255 are empty. (The "Last 1 descrs" is
      descr 254, since tail was at 255.) Thus, the system is deadlocked,
      and there can be no forward progress; the OS thinks there's nothing
      to do, and the hardware has nowhere to put incoming data.
      
      This bug/feature is worked around with the spider_net_resync_head_ptr()
      routine. When the driver receives RX interrupts, but an examination
      of the RX chain seems to show it is empty, then it is probable that
      the hardware has skipped a descr or two (sometimes dozens under heavy
      network conditions). The spider_net_resync_head_ptr() subroutine will
      search the ring for the next full descr, and the driver will resume
      operations there.  Since this will leave "holes" in the ring, there
      is also a spider_net_resync_tail_ptr() that will skip over such holes.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      4c4bd5a9
  8. 27 2月, 2007 5 次提交
  9. 06 2月, 2007 3 次提交
  10. 30 11月, 2006 2 次提交
  11. 11 10月, 2006 6 次提交
  12. 23 9月, 2006 1 次提交
  13. 14 9月, 2006 1 次提交
  14. 20 8月, 2006 1 次提交
  15. 18 7月, 2006 1 次提交
  16. 09 5月, 2006 1 次提交
  17. 17 1月, 2006 2 次提交
  18. 07 9月, 2005 1 次提交