1. 16 5月, 2005 1 次提交
    • C
      [PATCH] A new 10GB Ethernet Driver by Chelsio Communications · 8199d3a7
      Christoph Lameter 提交于
      A Linux driver for the Chelsio 10Gb Ethernet Network Controller by Chelsio
      (http://www.chelsio.com).  This driver supports the Chelsio N210 NIC and is
      backward compatible with the Chelsio N110 model 10Gb NICs.  It supports
      AMD64, EM64T and x86 systems.
      Signed-off-by: NTina Yang <tinay@chelsio.com>
      Signed-off-by: NScott Bardone <sbardone@chelsio.com>
      Signed-off-by: NChristoph Lameter <christoph@lameter.com>
      
      Adrian said:
      
      - my3126.c is unused (because t1_my3126_ops isn't used anywhere)
      - what are the EXTRA_CFLAGS in drivers/net/chelsio/Makefile for?
      - $(cxgb-y) in drivers/net/chelsio/Makefile seems to be unneeded
      - completely unused global functions:
        - espi.c: t1_espi_get_intr_counts
        - sge.c: t1_sge_get_intr_counts
      - the following functions can be made static:
        - sge.c: t1_espi_workaround
        - sge.c: t1_sge_tx
        - subr.c: __t1_tpi_read
        - subr.c: __t1_tpi_write
        - subr.c: t1_wait_op_done
      
      shemminger said:
      
      The performance recommendations in cxgb.txt are common to all fast devices,
      and should be in one file rather than just for this device. I would rather
      see ip-sysctl.txt updated or a new file on tuning recommendations started.
      Some of them have consequences that aren't documented well.
      For example, turning off TCP timestamps risks data corruption from sequence wrap.
      
      A new driver shouldn't need so may #ifdef's unless you want to putit on older
      vendor versions of 2.4
      
      Some accessor and wrapper functions like:
              t1_pci_read_config_4
              adapter_name
              t1_malloc
      are just annoying noise.
      
      Why have useless dead code like:
      
      /* Interrupt handler */
      +static int pm3393_interrupt_handler(struct cmac *cmac)
      +{
      +       u32 master_intr_status;
      +/*
      +    1. Read master interrupt register.
      +    2. Read BLOCK's interrupt status registers.
      +    3. Handle BLOCK interrupts.
      +*/
      
      Jeff said:
      
      step 1:  kill all the OS wrappers.
      
       And do you really need hooks for multiple MACs, when only one MAC is
       really supported?  Typically these hooks are at a higher level anyway --
       struct net_device.
      
      From: Christoph Lameter <christoph@lameter
      
      Driver modified as suggested by Pekka Enberg, Stephen Hemminger and Andrian
      Bunk.  Reduces the size of the driver to ~260k.
      
      - clean up tabs
      - removed my3126.c
      - removed 85% of suni1x10gexp_regs.h
      - removed 80% of regs.h
      - removed various calls, renamed variables/functions.
      - removed system specific and other wrappers (usleep, msleep)
      - removed dead code
      - dropped redundant casts in osdep.h
      - dropped redundant check of kfree
      - dropped weird code (MODVERSIONS stuff)
      - reduced number of #ifdefs
      - use kcalloc now instead of kmalloc
      - Add information about known issues with the driver
      - Add information about authors
      Signed-off-by: NScott Bardone <sbardone@chelsio.com>
      Signed-off-by: NChristoph Lameter <christoph@lameter.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      
      diff -puN /dev/null Documentation/networking/cxgb.txt
      8199d3a7
  2. 06 5月, 2005 7 次提交
  3. 04 5月, 2005 4 次提交
  4. 01 5月, 2005 3 次提交
  5. 29 4月, 2005 1 次提交
  6. 27 4月, 2005 1 次提交
  7. 26 4月, 2005 3 次提交
    • M
      [TG3]: Fix tg3_restart_ints() · 04237ddd
      Michael Chan 提交于
      tg3_restart_ints() is called to re-enable interrupts after tg3_poll()
      has finished all the work. It calls tg3_cond_int() to force an interrupt
      if the status block updated bit is set. The updated bit will be set if
      there is a new status block update sometime during tg3_poll() and it can
      be very often. The worst part is that even if all the work has been
      processed, the updated bit remains set and an interrupt will be forced
      unnecessarily.
      
      The fix is to call tg3_has_work() instead to determine if new work is
      posted before forcing an interrupt. The way to force an interrupt is
      also changed to use "coalesce_now" instead of "SETINT". The former is
      generally a safer way to force the interrupt.
      
      Also deleted the first parameter to tg3_has_work() which is unused.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      04237ddd
    • M
      [TG3]: Refresh hw index in tg3_rx() · 52f6d697
      Michael Chan 提交于
      This patch refreshes the hw rx producer in tg3_rx() so that additional
      work posted by the hardware can be processed.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      52f6d697
    • M
      [TG3]: Fix bug in tg3_rx() · 483ba50b
      Michael Chan 提交于
      This patch fixes a bug that causes tg3_has_work() to always return 1.
      
      rx work is determined by comparing tp->rx_rcb_ptr with the current hw
      producer index. The hw producer index is modulo the ring size, but tp-
      >rx_rcb_ptr is a free running counter that goes up beyond the ring size.
      After the ring wraps around once, tg3_has_work() will always return 1.
      
      The fix is to always do modulo arithmetic on tp->rx_rcb_ptr.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      483ba50b
  8. 25 4月, 2005 5 次提交
  9. 22 4月, 2005 15 次提交