1. 22 5月, 2015 1 次提交
  2. 05 5月, 2015 7 次提交
  3. 29 4月, 2015 5 次提交
  4. 20 3月, 2015 7 次提交
  5. 13 3月, 2015 3 次提交
  6. 03 3月, 2015 2 次提交
  7. 27 2月, 2015 8 次提交
  8. 03 2月, 2015 6 次提交
  9. 29 1月, 2015 1 次提交
    • V
      wil6210: move Rx reorder buffer allocation out of spinlock · 382afc3d
      Vladimir Kondratiev 提交于
      This fixes issue reported by Dan Carpenter:
      The patch 3277213f: "wil6210: ADDBA/DELBA flows" from Dec 23,
      2014, leads to the following static checker warning:
      
              drivers/net/wireless/ath/wil6210/rx_reorder.c:205 wil_tid_ampdu_rx_alloc()
              error: scheduling with locks held: 'spin_lock:tid_rx_lock'
      
      drivers/net/wireless/ath/wil6210/rx_reorder.c
         202  struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
         203                                                  int size, u16 ssn)
         204  {
         205          struct wil_tid_ampdu_rx *r = kzalloc(sizeof(*r), GFP_KERNEL);
                                                                       ^^^^^^^^^^
         206
         207          if (!r)
         208                  return NULL;
         209
         210          r->reorder_buf =
         211                  kcalloc(size, sizeof(struct sk_buff *), GFP_KERNEL);
                                                                      ^^^^^^^^^^^
         212          r->reorder_time =
         213                  kcalloc(size, sizeof(unsigned long), GFP_KERNEL);
                                                                   ^^^^^^^^^^^
         214          if (!r->reorder_buf || !r->reorder_time) {
         215                  kfree(r->reorder_buf);
         216                  kfree(r->reorder_time);
         217                  kfree(r);
         218                  return NULL;
         219          }
         220
      
      [ snip ]
      
         331          spin_lock_bh(&sta->tid_rx_lock);
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      spin lock held.
      
         332
         333          wil_tid_ampdu_rx_free(wil, sta->tid_rx[tid]);
         334          sta->tid_rx[tid] = wil_tid_ampdu_rx_alloc(wil, agg_wsize, ssn);
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      function called with the lock held.
      
         335
         336          spin_unlock_bh(&sta->tid_rx_lock);
      Reported-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      382afc3d