1. 02 12月, 2006 1 次提交
  2. 08 11月, 2006 2 次提交
  3. 01 11月, 2006 2 次提交
    • L
      [PATCH] bcm43xx: fix unexpected LED control values in BCM4303 sprom · df6d7c94
      Larry Finger 提交于
      The bcm43xx driver uses 4 locations in the devices sprom to determine
      the behavior of the leds. Certain defaults are assigned if all bits are
      set in those locations. On at least one BCM4303 chip, the sprom contains
      values other than the default, which executes an assertion placed in the
      default case of a following switch statement. This patch makes the leds
      on the above mentioned interface behave correctly. In addition, it limits
      the number of logged messages to 20 for the case of unexpected values in
      the sprom locations.
      Signed-off-by: NLarry Finger <Larry.Finger@lwfinger.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      df6d7c94
    • M
      [PATCH] bcm43xx: Fix low-traffic netdev watchdog TX timeouts · 81e171b9
      Michael Buesch 提交于
      This fixes a netdev watchdog timeout problem.
      The software needs to call netif_tx_disable before running the
      hardware calibration code. The problem condition can be shown by the
      following timegraph.
      
      |---5secs - ~10 jiffies time---|---|OOPS
      ^                              ^
      last real TX                   periodic work stops netif
      
      At OOPS, the following happens:
      The watchdog timer triggers, because the timeout of 5secs
      is over. The watchdog first checks for stopped TX.
      _Usually_ TX is only stopped from the TX handler to indicate
      a full TX queue. But this is different. We need to stop TX here,
      regardless of the TX queue state. So the watchdog recognizes
      the stopped device and assumes it is stopped due to full
      TX queues (Which is a _wrong_ assumption in this case). It then
      tests how far the last TX has been in the past. If it's more than
      5secs (which is the case for low or no traffic), it will fire
      a TX timeout.
      Signed-off-by: NMichael Buesch <mb@bu3sch.de>
      Signed-off-by: NLarry Finger <Larry.Finger@lwfinger.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      81e171b9
  4. 25 10月, 2006 1 次提交
  5. 17 10月, 2006 4 次提交
  6. 05 10月, 2006 1 次提交
    • D
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells 提交于
      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: NDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780
  7. 27 9月, 2006 1 次提交
    • T
      [PATCH] inode_diet: Replace inode.u.generic_ip with inode.i_private · 8e18e294
      Theodore Ts'o 提交于
      The following patches reduce the size of the VFS inode structure by 28 bytes
      on a UP x86.  (It would be more on an x86_64 system).  This is a 10% reduction
      in the inode size on a UP kernel that is configured in a production mode
      (i.e., with no spinlock or other debugging functions enabled; if you want to
      save memory taken up by in-core inodes, the first thing you should do is
      disable the debugging options; they are responsible for a huge amount of bloat
      in the VFS inode structure).
      
      This patch:
      
      The filesystem or device-specific pointer in the inode is inside a union,
      which is pretty pointless given that all 30+ users of this field have been
      using the void pointer.  Get rid of the union and rename it to i_private, with
      a comment to explain who is allowed to use the void pointer.  This is just a
      cleanup, but it allows us to reuse the union 'u' for something something where
      the union will actually be used.
      
      [judith@osdl.org: powerpc build fix]
      Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: NJudith Lebzelter <judith@osdl.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      8e18e294
  8. 26 9月, 2006 5 次提交
  9. 14 9月, 2006 1 次提交
  10. 12 9月, 2006 6 次提交
  11. 30 8月, 2006 6 次提交
  12. 01 8月, 2006 2 次提交
  13. 28 7月, 2006 7 次提交
  14. 11 7月, 2006 1 次提交
    • L
      [PATCH] bcm43xx: improved statistics · 4221f980
      Larry Finger 提交于
      This patch improves the statistics returned from
      bcm43xx_get_wireless_stats. The signal level comes from smoothing the
      "rssi" value returned by the firmware after it is converted into a
      dBm value by the driver. The quality value is a hack derived from the
      smoothed level and an assumed RX_POWER_MAX of -10 dBM. The noise value
      is still the one calculated from the clean-room formula. On my system,
      this is roughly -65 dBm, which seems too high.
      
      The revised version uses the ieee80211 spinlock to protect traversing
      of the network list.
      Signed-Off-By: NLarry Finger <Larry.Finger@lwfinger.net>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      4221f980