1. 27 Dec, 2009 3 commits
    • Anton Vorontsov's avatar
      ucc_geth: Don't needlessly change MAC settings in adjust_link() · 08fafd84
      Anton Vorontsov authored
      If PHY doesn't have an IRQ, phylib would poll for link changes, and
      would call adjust_link() every second. In that case we disable and
      enable the controller every second.
      
      Let's better check if there is actually anything changed, and, if so,
      change the MAC settings.
      Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      08fafd84
    • Anton Vorontsov's avatar
      ucc_geth: Fix netdev watchdog triggering on link changes · 08b5e1c9
      Anton Vorontsov authored
      Since commit 864fdf88 ("ucc_geth:
      Fix hangs after switching from full to half duplex") ucc_geth driver
      disables the controller during MAC configuration changes. Though,
      disabling the controller might take quite awhile, and so the netdev
      watchdog might get upset:
      
       NETDEV WATCHDOG: eth2 (ucc_geth): transmit queue 0 timed out
       ------------[ cut here ]------------
       Badness at c02729a8 [verbose debug info unavailable]
       NIP: c02729a8 LR: c02729a8 CTR: c01b6088
       REGS: c0451c40 TRAP: 0700   Not tainted  (2.6.32-trunk-8360e)
       [...]
       NIP [c02729a8] dev_watchdog+0x280/0x290
       LR [c02729a8] dev_watchdog+0x280/0x290
       Call Trace:
       [c0451cf0] [c02729a8] dev_watchdog+0x280/0x290 (unreliable)
       [c0451d50] [c00377c4] run_timer_softirq+0x164/0x224
       [c0451da0] [c0032a38] __do_softirq+0xb8/0x13c
       [c0451df0] [c00065cc] do_softirq+0xa0/0xac
       [c0451e00] [c003280c] irq_exit+0x7c/0x9c
       [c0451e10] [c00640c4] __ipipe_sync_stage+0x248/0x24c
       [...]
      
      This patch fixes the issue by detaching the netdev during the
      time we change the configuration.
      Reported-by: default avatarLennart Sorensen <lsorense@csclub.uwaterloo.ca>
      Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
      Tested-by: default avatarLennart Sorensen <lsorense@csclub.uwaterloo.ca>
      Cc: Stable <stable@vger.kernel.org> [2.6.32]
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      08b5e1c9
    • Anton Vorontsov's avatar
      ucc_geth: Fix empty TX queue processing · 7583605b
      Anton Vorontsov authored
      Following oops was seen with the ucc_geth driver:
      
       Unable to handle kernel paging request for data at address 0x00000058
       Faulting instruction address: 0xc024f2fc
       Oops: Kernel access of bad area, sig: 11 [#1]
       [...]
       NIP [c024f2fc] skb_recycle_check+0x14/0x100
       LR [e30aa0a4] ucc_geth_poll+0xd8/0x4e0 [ucc_geth_driver]
       Call Trace:
       [df857d50] [c000b03c] __ipipe_grab_irq+0x3c/0xa4 (unreliable)
       [df857d60] [e30aa0a4] ucc_geth_poll+0xd8/0x4e0 [ucc_geth_driver]
       [df857dd0] [c0258cf8] net_rx_action+0xf8/0x1b8
       [df857e10] [c0032a38] __do_softirq+0xb8/0x13c
       [df857e60] [c00065cc] do_softirq+0xa0/0xac
       [...]
      
      This is because ucc_geth_tx() tries to process an empty queue when
      queues are logically stopped. Stopping the queues doesn't disable
      polling, and since nowadays ucc_geth_tx() is actually called from
      the polling routine, the oops above might pop up.
      
      Fix this by removing 'netif_queue_stopped() == 0' check.
      Reported-by: default avatarLennart Sorensen <lsorense@csclub.uwaterloo.ca>
      Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
      Tested-by: default avatarLennart Sorensen <lsorense@csclub.uwaterloo.ca>
      Cc: Stable <stable@vger.kernel.org> [2.6.32]
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7583605b
  2. 26 Dec, 2009 3 commits
  3. 24 Dec, 2009 19 commits
  4. 21 Dec, 2009 15 commits
    • David S. Miller's avatar
    • Benjamin Herrenschmidt's avatar
      ps3_gelic_wireless: Fix build failure due to missing WEXT_PRIV · 92c6f8d8
      Benjamin Herrenschmidt authored
      The option to support the old style PSK interface in the PS3
      GELIC wireless drivers requires CONFIG_WEXT_PRIV to be set
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarGeoff Levand <geoffrey.levand@am.sony.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      92c6f8d8
    • Johannes Berg's avatar
      mac80211: fix WMM AP settings application · 0183826b
      Johannes Berg authored
      My
        commit 77fdaa12
        Author: Johannes Berg <johannes@sipsolutions.net>
        Date:   Tue Jul 7 03:45:17 2009 +0200
      
            mac80211: rework MLME for multiple authentications
      
      inadvertedly broke WMM because it removed, along with
      a bunch of other now useless initialisations, the line
      initialising sdata->u.mgd.wmm_last_param_set to -1
      which would make it adopt any WMM parameter set. If,
      as is usually the case, the AP uses WMM parameter set
      sequence number zero, we'd never update it until the
      AP changes the sequence number.
      
      Add the missing initialisation back to get the WMM
      settings from the AP applied locally.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Cc: stable@kernel.org [2.6.31+]
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      0183826b
    • Johannes Berg's avatar
      mac80211: fix peer HT capabilities · 9a418af5
      Johannes Berg authored
      I noticed yesterday, because Jeff had noticed
      a speed regression, cf. bug
      http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2138
      that the SM PS settings for peers were wrong.
      Instead of overwriting the SM PS settings with
      the local bits, we need to keep the remote bits.
      
      The bug was part of the original HT code from
      over two years ago, but unfortunately nobody
      noticed that it makes no sense -- we shouldn't
      be overwriting the peer's setting with our own
      but rather keep it intact when masking the peer
      capabilities with our own.
      
      While fixing that, I noticed that the masking of
      capabilities is completely useless for most of
      the bits, so also fix those other bits.
      
      Finally, I also noticed that PSMP_SUPPORT no
      longer exists in the final 802.11n version, so
      also remove that.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      9a418af5
    • Roel Kluin's avatar
      iwmc3200wifi: Fix test of unsigned in iwm_ntf_stop_resume_tx() · 8585c2b8
      Roel Kluin authored
      `queue' was unsigned so the test did not work.
      Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
      Reviewed-by: default avatarPavel Roskin <proski@gnu.org>
      Acked-by: default avatarZhu Yi <yi.zhu@intel.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      8585c2b8
    • Daniel Mack's avatar
      Libertas: fix buffer overflow in lbs_get_essid() · 45b24168
      Daniel Mack authored
      The libertas driver copies the SSID buffer back to the wireless core and
      appends a trailing NULL character for termination. This is
      
      a) unnecessary because the buffer is allocated with kzalloc and is hence
         already NULLed when this function is called, and
      
      b) for priv->curbssparams.ssid_len == 32, it writes back one byte too
         much which causes memory corruptions.
      
      Fix this by removing the extra write.
      Signed-off-by: default avatarDaniel Mack <daniel@caiaq.de>
      Cc: Stephen Hemminger <shemminger@vyatta.com>
      Cc: Maithili Hinge <maithili@marvell.com>
      Cc: Kiran Divekar <dkiran@marvell.com>
      Cc: Michael Hirsch <m.hirsch@raumfeld.com>
      Cc: netdev@vger.kernel.org
      Cc: libertas-dev@lists.infradead.org
      Cc: linux-wireless@lists.infradead.org
      Cc: stable@kernel.org
      Acked-by: default avatarHolger Schurig <holgerschurig@gmail.com>
      Acked-by: default avatarDan Williams <dcbw@redhat.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      45b24168
    • akpm@linux-foundation.org's avatar
      drivers/net/wireless/iwlwifi/iwl-tx.c: fix gcc-3.4.5 warning · 77ca7d9e
      akpm@linux-foundation.org authored
      drivers/net/wireless/iwlwifi/iwl-tx.c: In function `iwl_hw_txq_ctx_free':
      drivers/net/wireless/iwlwifi/iwl-tx.c:410: warning: suggest explicit braces to avoid ambiguous `else'
      
      Cc: Zhu Yi <yi.zhu@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      77ca7d9e
    • Sujith's avatar
      ath9k: Stop ANI when doing a reset · 2ab81d4a
      Sujith authored
      The MIB counters are disabled when doing a chip reset.
      Since ANI depends on the MIB registers for its operation, relying
      on the contents of said registers during HW reset results in sub-optimal
      performance.
      
      Cc: stable@kernel.org
      Signed-off-by: default avatarSujith <Sujith.Manoharan@atheros.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      2ab81d4a
    • Sujith's avatar
      ath9k: Fix TX queue draining · e8009e98
      Sujith authored
      When TX DMA termination has failed, the HW has to be reset
      completely. Doing a fast channel change in this case is insufficient.
      Also, change the debug level of a couple of messages to FATAL.
      
      Cc: stable@kernel.org
      Signed-off-by: default avatarSujith <Sujith.Manoharan@atheros.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      e8009e98
    • Sujith's avatar
      ath9k: Fix bug in assigning sequence number · 17b182e3
      Sujith authored
      The internal, driver-specific maintenance of sequence
      numbers is applicable only for HT frames.
      
      Also, remove comments that are not relevant anymore.
      Signed-off-by: default avatarSujith <Sujith.Manoharan@atheros.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      17b182e3
    • Gertjan van Wingerde's avatar
      rt2x00: Fix calculation of rt2800 iveiv entry offset. · 7988436c
      Gertjan van Wingerde authored
      Fix typo. The index should be multiplied by the entry size, not 'and'-ed.
      
      Found via code-inspection.
      Signed-off-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
      Acked-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      7988436c
    • Reinette Chatre's avatar
      iwlwifi: fix 40MHz operation setting on cards that do not allow it · 6c3069b1
      Reinette Chatre authored
      Some devices have 40MHz operation disabled entirely. Ensure that driver do
      not enable 40MHz operation if a channel does not allow this.
      
      This fixes http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2135Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      CC: stable@kernel.org
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      6c3069b1
    • Zhu Yi's avatar
      iwl3945: fix panic in iwl3945 driver · dc57a303
      Zhu Yi authored
      3945 updated write_ptr without regard to read_ptr on the Tx path.
      This messes up our TFD on high load and result in the following:
      
      <1>[ 7290.414172] IP: [<ffffffffa0dd53a1>] iwl3945_rx_reply_tx+0xc1/0x450 [iwl3945]
      <4>[ 7290.414205] PGD 0
      <1>[ 7290.414214] Thread overran stack, or stack corrupted
      <0>[ 7290.414229] Oops: 0002 [#1] PREEMPT SMP
      <0>[ 7290.414246] last sysfs file: /sys/devices/platform/coretemp.1/temp1_input
      <4>[ 7290.414265] CPU 0
      <4>[ 7290.414274] Modules linked in: af_packet nfsd usb_storage usb_libusual cpufreq_powersave exportfs cpufreq_conservative iwl3945 nfs cpufreq_userspace snd_hda_codec_realtek acpi_cpufreq uvcvideo lockd iwlcore snd_hda_intel joydev coretemp nfs_acl videodev snd_hda_codec mac80211 v4l1_compat snd_hwdep sbp2 v4l2_compat_ioctl32 uhci_hcd psmouse auth_rpcgss ohci1394 cfg80211 ehci_hcd video ieee1394 snd_pcm serio_raw battery ac nvidia(P) usbcore output sunrpc evdev lirc_ene0100 snd_page_alloc rfkill tg3 libphy fuse lzo lzo_decompress lzo_compress
      <6>[ 7290.414486] Pid: 0, comm: swapper Tainted: P           2.6.32-rc8-wl #213 Aspire 5720
      <6>[ 7290.414507] RIP: 0010:[<ffffffffa0dd53a1>]  [<ffffffffa0dd53a1>] iwl3945_rx_reply_tx+0xc1/0x450 [iwl3945]
      <6>[ 7290.414541] RSP: 0018:ffff880002203d60  EFLAGS: 00010246
      <6>[ 7290.414557] RAX: 000000000000004f RBX: ffff880064c11600 RCX: 0000000000000013
      <6>[ 7290.414576] RDX: ffffffffa0ddcf20 RSI: ffff8800512b7008 RDI: 0000000000000038
      <6>[ 7290.414596] RBP: ffff880002203dd0 R08: 0000000000000000 R09: 0000000000000100
      <6>[ 7290.414616] R10: 0000000000000001 R11: 0000000000000000 R12: 00000000000000a0
      <6>[ 7290.414635] R13: 0000000000000002 R14: 0000000000000013 R15: 0000000000020201
      <6>[ 7290.414655] FS:  0000000000000000(0000) GS:ffff880002200000(0000) knlGS:0000000000000000
      <6>[ 7290.414677] CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
      <6>[ 7290.414693] CR2: 0000000000000041 CR3: 0000000001001000 CR4: 00000000000006f0
      <6>[ 7290.414712] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      <6>[ 7290.414732] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      <4>[ 7290.414752] Process swapper (pid: 0, threadinfo ffffffff81524000, task ffffffff81528b60)
      <0>[ 7290.414772] Stack:
      <4>[ 7290.414780]  ffff880002203da0 0000000000000046 0000000000000000 0000000000000046
      <4>[ 7290.414804] <0> 0000000000000282 0000000000000282 0000000000000282 ffff880064c12010
      <4>[ 7290.414830] <0> ffff880002203db0 ffff880064c11600 ffff880064c12e50 ffff8800512b7000
      <0>[ 7290.414858] Call Trace:
      <0>[ 7290.414867]  <IRQ>
      <4>[ 7290.414884]  [<ffffffffa0dc8c47>] iwl3945_irq_tasklet+0x657/0x1740 [iwl3945]
      <4>[ 7290.414910]  [<ffffffff8138fc60>] ? _spin_unlock+0x30/0x60
      <4>[ 7290.414931]  [<ffffffff81049a21>] tasklet_action+0x101/0x110
      <4>[ 7290.414950]  [<ffffffff8104a3d0>] __do_softirq+0xc0/0x160
      <4>[ 7290.414968]  [<ffffffff8100d01c>] call_softirq+0x1c/0x30
      <4>[ 7290.414986]  [<ffffffff8100eff5>] do_softirq+0x75/0xb0
      <4>[ 7290.415003]  [<ffffffff81049ee5>] irq_exit+0x95/0xa0
      <4>[ 7290.415020]  [<ffffffff8100e547>] do_IRQ+0x77/0xf0
      <4>[ 7290.415038]  [<ffffffff8100c7d3>] ret_from_intr+0x0/0xf
      <0>[ 7290.415052]  <EOI>
      <4>[ 7290.415067]  [<ffffffff81234efa>] ? acpi_idle_enter_bm+0x270/0x2a5
      <4>[ 7290.415087]  [<ffffffff81234f04>] ? acpi_idle_enter_bm+0x27a/0x2a5
      <4>[ 7290.415107]  [<ffffffff81234efa>] ? acpi_idle_enter_bm+0x270/0x2a5
      <4>[ 7290.415130]  [<ffffffff812c11f3>] ? cpuidle_idle_call+0x93/0xf0
      <4>[ 7290.415149]  [<ffffffff8100b0d7>] ? cpu_idle+0xa7/0x110
      <4>[ 7290.415168]  [<ffffffff8137b3d5>] ? rest_init+0x75/0x80
      <4>[ 7290.415187]  [<ffffffff8158cd0a>] ? start_kernel+0x3a7/0x3b3
      <4>[ 7290.415206]  [<ffffffff8158c315>] ? x86_64_start_reservations+0x125/0x129
      <4>[ 7290.415227]  [<ffffffff8158c3fd>] ? x86_64_start_kernel+0xe4/0xeb
      <0>[ 7290.415243] Code: 00 41 39 ce 0f 8d e8 01 00 00 48 8b 47 40 48 63 d2 48 69 d2 98 00 00 00 4c 8b 04 02 48 c7 c2 20 cf dd a0 49 8d 78 38 49 8d 40 4f <c6> 47 09 00 c6 47 0c 00 c6 47 0f 00 c6 47 12 00 c6 47 15 00 49
      <1>[ 7290.415382] RIP  [<ffffffffa0dd53a1>] iwl3945_rx_reply_tx+0xc1/0x450 [iwl3945]
      <4>[ 7290.415410]  RSP <ffff880002203d60>
      <0>[ 7290.415421] CR2: 0000000000000041
      <4>[ 7290.415436] ---[ end trace ec46807277caa515 ]---
      <0>[ 7290.415450] Kernel panic - not syncing: Fatal exception in interrupt
      <4>[ 7290.415468] Pid: 0, comm: swapper Tainted: P      D    2.6.32-rc8-wl #213
      <4>[ 7290.415486] Call Trace:
      <4>[ 7290.415495]  <IRQ>  [<ffffffff8138c040>] panic+0x7d/0x13a
      <4>[ 7290.415519]  [<ffffffff8101071a>] oops_end+0xda/0xe0
      <4>[ 7290.415538]  [<ffffffff8102e1ea>] no_context+0xea/0x250
      <4>[ 7290.415557]  [<ffffffff81038991>] ? select_task_rq_fair+0x511/0x780
      <4>[ 7290.415578]  [<ffffffff8102e475>] __bad_area_nosemaphore+0x125/0x1e0
      <4>[ 7290.415597]  [<ffffffff81038d0c>] ? __enqueue_entity+0x7c/0x80
      <4>[ 7290.415616]  [<ffffffff81039201>] ? enqueue_task_fair+0x111/0x150
      <4>[ 7290.415636]  [<ffffffff8102e53e>] bad_area_nosemaphore+0xe/0x10
      <4>[ 7290.415656]  [<ffffffff8102e8fa>] do_page_fault+0x26a/0x320
      <4>[ 7290.415674]  [<ffffffff813905df>] page_fault+0x1f/0x30
      <4>[ 7290.415697]  [<ffffffffa0dd53a1>] ? iwl3945_rx_reply_tx+0xc1/0x450 [iwl3945]
      <4>[ 7290.415723]  [<ffffffffa0dc8c47>] iwl3945_irq_tasklet+0x657/0x1740 [iwl3945]
      <4>[ 7290.415746]  [<ffffffff8138fc60>] ? _spin_unlock+0x30/0x60
      <4>[ 7290.415764]  [<ffffffff81049a21>] tasklet_action+0x101/0x110
      <4>[ 7290.415783]  [<ffffffff8104a3d0>] __do_softirq+0xc0/0x160
      <4>[ 7290.415801]  [<ffffffff8100d01c>] call_softirq+0x1c/0x30
      <4>[ 7290.415818]  [<ffffffff8100eff5>] do_softirq+0x75/0xb0
      <4>[ 7290.415835]  [<ffffffff81049ee5>] irq_exit+0x95/0xa0
      <4>[ 7290.415852]  [<ffffffff8100e547>] do_IRQ+0x77/0xf0
      <4>[ 7290.415869]  [<ffffffff8100c7d3>] ret_from_intr+0x0/0xf
      <4>[ 7290.415883]  <EOI>  [<ffffffff81234efa>] ? acpi_idle_enter_bm+0x270/0x2a5
      <4>[ 7290.415911]  [<ffffffff81234f04>] ? acpi_idle_enter_bm+0x27a/0x2a5
      <4>[ 7290.415931]  [<ffffffff81234efa>] ? acpi_idle_enter_bm+0x270/0x2a5
      <4>[ 7290.415952]  [<ffffffff812c11f3>] ? cpuidle_idle_call+0x93/0xf0
      <4>[ 7290.415971]  [<ffffffff8100b0d7>] ? cpu_idle+0xa7/0x110
      <4>[ 7290.415989]  [<ffffffff8137b3d5>] ? rest_init+0x75/0x80
      <4>[ 7290.416007]  [<ffffffff8158cd0a>] ? start_kernel+0x3a7/0x3b3
      <4>[ 7290.416026]  [<ffffffff8158c315>] ? x86_64_start_reservations+0x125/0x129
      <4>[ 7290.416047]  [<ffffffff8158c3fd>] ? x86_64_start_kernel+0xe4/0xeb
      Reported-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
      Tested-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
      Signed-off-by: default avatarZhu Yi <yi.zhu@intel.com>
      Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      CC: stable@kernel.org
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      dc57a303
    • Reinette Chatre's avatar
      iwlwifi: initialize spinlock before use · 731a29b7
      Reinette Chatre authored
      Recent powersaving work resulted in power management ops being called
      during EEPROM initialization. The lock used by these functions is not
      initialized at this time. Ensure lock is initialized before it is used.
      Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      731a29b7
    • Reinette Chatre's avatar
      iwl3945: disable power save · bc45a670
      Reinette Chatre authored
      we see from http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2125
      that power saving does not work well on 3945. Since then power saving has
      also been connected with association problems where an AP deathenticates a
      3945 after it is unable to transmit data to it - this happens when 3945
      enters power savings mode.
      
      Disable power save support until issues are resolved.
      Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      CC: stable@kernel.org
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      bc45a670