···464464 int wcid, ack, pid;465465 int tx_wcid, tx_ack, tx_pid;466466467467+ if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||468468+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) {469469+ WARNING(entry->queue->rt2x00dev,470470+ "Data pending for entry %u in queue %u\n",471471+ entry->entry_idx, entry->queue->qid);472472+ cond_resched();473473+ return false;474474+ }475475+467476 wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);468477 ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);469478 pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);···538529 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);539530 if (rt2800usb_txdone_entry_check(entry, reg))540531 break;532532+ entry = NULL;541533 }542534543543- if (!entry || rt2x00queue_empty(queue))544544- break;545545-546546- rt2800_txdone_entry(entry, reg);535535+ if (entry)536536+ rt2800_txdone_entry(entry, reg);547537 }548538}549539···566558 while (!rt2x00queue_empty(queue)) {567559 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);568560569569- if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))561561+ if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||562562+ !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))570563 break;564564+571565 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))572566 rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE);573567 else if (rt2x00queue_status_timeout(entry))
+7-10
drivers/net/wireless/rt2x00/rt2x00usb.c
···262262 struct queue_entry *entry = (struct queue_entry *)urb->context;263263 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;264264265265- if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))265265+ if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))266266 return;267267-268268- if (rt2x00dev->ops->lib->tx_dma_done)269269- rt2x00dev->ops->lib->tx_dma_done(entry);270270-271271- /*272272- * Report the frame as DMA done273273- */274274- rt2x00lib_dmadone(entry);275275-276267 /*277268 * Check if the frame was correctly uploaded278269 */279270 if (urb->status)280271 set_bit(ENTRY_DATA_IO_FAILED, &entry->flags);272272+ /*273273+ * Report the frame as DMA done274274+ */275275+ rt2x00lib_dmadone(entry);281276277277+ if (rt2x00dev->ops->lib->tx_dma_done)278278+ rt2x00dev->ops->lib->tx_dma_done(entry);282279 /*283280 * Schedule the delayed work for reading the TX status284281 * from the device.
+1-5
drivers/net/wireless/wl12xx/acx.c
···7777 auth->sleep_auth = sleep_auth;78787979 ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth));8080- if (ret < 0)8181- return ret;82808381out:8482 kfree(auth);···622624623625 ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD,624626 detection, sizeof(*detection));625625- if (ret < 0) {627627+ if (ret < 0)626628 wl1271_warning("failed to set cca threshold: %d", ret);627627- return ret;628628- }629629630630out:631631 kfree(detection);