1. 16 12月, 2011 6 次提交
    • E
      iwlwifi: tid_data logic move to upper layer - txqid · 76bc10fc
      Emmanuel Grumbach 提交于
      The tid_data is not related to the transport layer, so move
      the logic that depends on it to the upper layer.
      This patch deals with the mapping of RA / TID to HW queues in AGG.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      76bc10fc
    • E
      iwlwifi: tid_data logic move to upper layer - check_empty · 20addec6
      Emmanuel Grumbach 提交于
      The tid_data is not related to the transport layer, so move
      the logic that depends on it to the upper layer.
      This patch deals with the code that checks if there are still
      pending packets for an RA / TID.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      20addec6
    • E
      iwlwifi: tid_data logic move to upper layer - tx AGG stop · bc237730
      Emmanuel Grumbach 提交于
      The tid_data is not related to the transport layer, so move
      the logic that depends on it to the upper layer.
      This patch deals with tx AGG stop.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      bc237730
    • E
      iwlwifi: don't rely on the wr / rd pointers in DELBA flow · 1f40e145
      Emmanuel Grumbach 提交于
      In the same spirit as the previous patch. Eventually this will
      allow us to remove the tid_data knowledge from the transport layer.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      1f40e145
    • E
      iwlwifi: we can wake SW queues even when draining HW queues · 1ba42da4
      Emmanuel Grumbach 提交于
      In the very first implementation of HT, the driver was responsible
      for the queueing: stopping and waking the queues while the HW queues
      where being drained. In this implementation, we had to deal with the
      case where we were draining the AGG queue because we wanted to tear
      down the BA agreement.
      In the normal flow (when we don't drain any HW queue), when packets
      are reclaimed, we wake the SW queue in case the SW queue was stopped
      which can happen when the HW queues are too full.
      While draining a HW queue, we must make sure that we don't wake the
      SW queue, since the whole point of the draining is to empty totally
      the HW queue and not only get below a certain threshold.
      This is why there is condition in the reclaim function:
      
      if (NOT EMPTYING DELBA)
      	wake the SW queue is applicable
      
      Since then, a lot has changed and mac80211 is now able to buffer
      packets that are being sent to a packet list that will be spliced
      after the driver has reported it has drained its HW queues.
      Hence, there is no need for the for aforementioned if, and we can
      safely wake up the queue even if we are draining HW queues.
      Removing this if, also allows us to remove the wake_queue in
      check_empty that was there in order to deal with a corner case
      created by the if.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      1ba42da4
    • E
      iwlwifi: don't count the tfds in HW queue any more · eb9a372a
      Emmanuel Grumbach 提交于
      Since packets sent to an RA / TID in AGG are sent from a
      separate HW Tx queue, we may get into a race:
      the regular queue isn't empty while we already begin to
      send packets from the AGG queue. This would result in sending
      packets out of order.
      
      In order to cope with this, mac80211 waits until the driver
      reports that the legacy queue is drained before it can send
      packets to the AGG queue. During that time, mac80211 buffers
      packets for the driver. These packets will be sent in order
      after the driver reports it is ready.
      
      The way this was implemented in the driver is as follows:
      We held a counter that monitors the number of packets for
      an RA / TID in the HW queues. When this counter reached 0,
      we knew that the HW queues were drained and we reported to
      mac80211 that were ready to proceed.
      
      This patch changes the implementation described above. We
      now remember what is the wifi sequence number of the first
      packet that will be sent in the AGG queue (lets' call it
      ssn). When we reclaim the packet before ssn, we know that
      the queue is drained, and we are ready to proceed.
      
      This will allow us to move this logic in the upper layer and
      eventually remove the tid_data from the shared area.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      eb9a372a
  2. 09 12月, 2011 1 次提交
  3. 29 11月, 2011 1 次提交
  4. 26 11月, 2011 1 次提交
  5. 22 11月, 2011 2 次提交
  6. 18 11月, 2011 2 次提交
  7. 12 11月, 2011 2 次提交
    • E
      iwlwifi: add debug information on queue stop / wake · 81a3de1c
      Emmanuel Grumbach 提交于
      Users complain that the traffic gets stalled sometimes. This will
      allow easier debugging.
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      81a3de1c
    • E
      iwlwifi: avoid a panic when unloading the module with RF Kill · 43e58856
      Emmanuel Grumbach 提交于
      When HW RF kill switch is set to kill the radio, our NIC issues an
      interrupt after we stop the APM module. When we unload the module,
      the driver disables and cleans the interrupts before stopping the
      APM. So we have a real interrupt (inta not zero) pending.
      When this interrupts pops up the tasklet has already been killed
      and we crash.
      
      Here is a logical description of the flow:
      
      disable and clean interrupts
      synchronize interrupts
      kill the tasklet
      
      stop the APM <<== creates an RF kill interrupt
      
      free_irq <<== somehow our ISR is called here and we crash
      
      Here is the panic message:
      
      [  201.313636] BUG: unable to handle kernel paging request at ffff8800911b7150
      [  201.314541] IP: [<ffffffff8106d652>] tasklet_action+0x62/0x130
      [  201.315149] PGD 1c06063 PUD db37f067 PMD db408067 PTE 80000000911b7160
      [  201.316456] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
      [  201.317324] CPU 1
      [  201.317495] Modules linked in: arc4 iwlwifi(-) mac80211 cfg80211 netconsole configfs binfmt_misc i915 drm_kms_helper drm uvcvideo i2c_algo_bit videodev dell_laptop dcdbas intel_agp dell_wmi intel_ips psmouse intel_gtt v4l2_compat_ioctl32 asix usbnet mii serio_raw video sparse_keymap firewire_ohci sdhci_pci sdhci firewire_core e1000e crc_itu_t [last unloaded: configfs]
      [  201.323839]
      [  201.324015] Pid: 2061, comm: modprobe Not tainted 3.1.0-rc9-wl #4 Dell Inc. Latitude E6410/0667CC
      [  201.324736] RIP: 0010:[<ffffffff8106d652>]  [<ffffffff8106d652>] tasklet_action+0x62/0x130
      [  201.325128] RSP: 0018:ffff88011bc43ea0  EFLAGS: 00010286
      [  201.325338] RAX: ffff88008ae70000 RBX: ffff8800911b7150 RCX: ffff88008ae70028
      [  201.325555] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff88008ae70000
      [  201.325775] RBP: ffff88011bc43ec0 R08: 0000000000000000 R09: 0000000000000000
      [  201.325994] R10: 0000000000000002 R11: 0000000000000001 R12: 0000000000000001
      [  201.326212] R13: 0000000000000006 R14: 0000000000000100 R15: ffff88008e259fd8
      [  201.326431] FS:  00007f4b90ea9700(0000) GS:ffff88011bc40000(0000) knlGS:0000000000000000
      [  201.326657] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [  201.326864] CR2: ffff8800911b7150 CR3: 000000008fd6d000 CR4: 00000000000006e0
      [  201.327083] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  201.327302] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [  201.327521] Process modprobe (pid: 2061, threadinfo ffff88008e258000, task ffff88008ae70000)
      [  201.327747] Stack:
      [  201.330494]  0000000000000046 0000000000000030 0000000000000001 0000000000000006
      [  201.333870]  ffff88011bc43f30 ffffffff8106cd8a ffffffff811e1016 ffff88011bc43f08
      [  201.337186]  0000000100000046 ffff88008e259fd8 0000000a10be2160 0000000000000006
      [  201.340458] Call Trace:
      [  201.342994]  <IRQ>
      [  201.345656]  [<ffffffff8106cd8a>] __do_softirq+0xca/0x250
      [  201.348185]  [<ffffffff811e1016>] ? pde_put+0x76/0x90
      [  201.350730]  [<ffffffff8131aeae>] ? do_raw_spin_unlock+0x5e/0xb0
      [  201.353261]  [<ffffffff811e1016>] ? pde_put+0x76/0x90
      [  201.355776]  [<ffffffff8163ccfc>] call_softirq+0x1c/0x30
      [  201.358287]  [<ffffffff8101531d>] do_softirq+0x9d/0xd0
      [  201.360823]  [<ffffffff8106cb05>] irq_exit+0xd5/0xf0
      [  201.363330]  [<ffffffff8163d5d6>] do_IRQ+0x66/0xe0
      [  201.365819]  [<ffffffff81632673>] common_interrupt+0x73/0x73
      [  201.368257]  <EOI>
      
      Cc: <stable@kernel.org> 3.1+
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
      Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
      43e58856
  8. 03 11月, 2011 1 次提交
  9. 15 10月, 2011 5 次提交
  10. 28 9月, 2011 2 次提交
  11. 22 9月, 2011 3 次提交
  12. 20 9月, 2011 7 次提交
  13. 15 9月, 2011 6 次提交
  14. 30 8月, 2011 1 次提交