Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem

+37 -36
+10 -15
drivers/net/wireless/iwlwifi/iwl-pci.c
··· 478 478 return err; 479 479 } 480 480 481 - static void iwl_pci_down(struct iwl_bus *bus) 482 - { 483 - struct iwl_pci_bus *pci_bus = (struct iwl_pci_bus *) bus->bus_specific; 484 - 485 - pci_disable_msi(pci_bus->pci_dev); 486 - pci_iounmap(pci_bus->pci_dev, pci_bus->hw_base); 487 - pci_release_regions(pci_bus->pci_dev); 488 - pci_disable_device(pci_bus->pci_dev); 489 - pci_set_drvdata(pci_bus->pci_dev, NULL); 490 - 491 - kfree(bus); 492 - } 493 - 494 481 static void __devexit iwl_pci_remove(struct pci_dev *pdev) 495 482 { 496 483 struct iwl_priv *priv = pci_get_drvdata(pdev); 497 - void *bus_specific = priv->bus->bus_specific; 484 + struct iwl_bus *bus = priv->bus; 485 + struct iwl_pci_bus *pci_bus = IWL_BUS_GET_PCI_BUS(bus); 486 + struct pci_dev *pci_dev = IWL_BUS_GET_PCI_DEV(bus); 498 487 499 488 iwl_remove(priv); 500 489 501 - iwl_pci_down(bus_specific); 490 + pci_disable_msi(pci_dev); 491 + pci_iounmap(pci_dev, pci_bus->hw_base); 492 + pci_release_regions(pci_dev); 493 + pci_disable_device(pci_dev); 494 + pci_set_drvdata(pci_dev, NULL); 495 + 496 + kfree(bus); 502 497 } 503 498 504 499 #ifdef CONFIG_PM
+15 -5
drivers/net/wireless/rt2x00/rt2800usb.c
··· 464 464 int wcid, ack, pid; 465 465 int tx_wcid, tx_ack, tx_pid; 466 466 467 + if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || 468 + !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) { 469 + WARNING(entry->queue->rt2x00dev, 470 + "Data pending for entry %u in queue %u\n", 471 + entry->entry_idx, entry->queue->qid); 472 + cond_resched(); 473 + return false; 474 + } 475 + 467 476 wcid = rt2x00_get_field32(reg, TX_STA_FIFO_WCID); 468 477 ack = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED); 469 478 pid = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE); ··· 538 529 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); 539 530 if (rt2800usb_txdone_entry_check(entry, reg)) 540 531 break; 532 + entry = NULL; 541 533 } 542 534 543 - if (!entry || rt2x00queue_empty(queue)) 544 - break; 545 - 546 - rt2800_txdone_entry(entry, reg); 535 + if (entry) 536 + rt2800_txdone_entry(entry, reg); 547 537 } 548 538 } 549 539 ··· 566 558 while (!rt2x00queue_empty(queue)) { 567 559 entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE); 568 560 569 - if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) 561 + if (test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || 562 + !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) 570 563 break; 564 + 571 565 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags)) 572 566 rt2x00lib_txdone_noinfo(entry, TXDONE_FAILURE); 573 567 else if (rt2x00queue_status_timeout(entry))
+7 -10
drivers/net/wireless/rt2x00/rt2x00usb.c
··· 262 262 struct queue_entry *entry = (struct queue_entry *)urb->context; 263 263 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; 264 264 265 - if (!test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) 265 + if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) 266 266 return; 267 - 268 - if (rt2x00dev->ops->lib->tx_dma_done) 269 - rt2x00dev->ops->lib->tx_dma_done(entry); 270 - 271 - /* 272 - * Report the frame as DMA done 273 - */ 274 - rt2x00lib_dmadone(entry); 275 - 276 267 /* 277 268 * Check if the frame was correctly uploaded 278 269 */ 279 270 if (urb->status) 280 271 set_bit(ENTRY_DATA_IO_FAILED, &entry->flags); 272 + /* 273 + * Report the frame as DMA done 274 + */ 275 + rt2x00lib_dmadone(entry); 281 276 277 + if (rt2x00dev->ops->lib->tx_dma_done) 278 + rt2x00dev->ops->lib->tx_dma_done(entry); 282 279 /* 283 280 * Schedule the delayed work for reading the TX status 284 281 * from the device.
+1 -5
drivers/net/wireless/wl12xx/acx.c
··· 77 77 auth->sleep_auth = sleep_auth; 78 78 79 79 ret = wl1271_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); 80 - if (ret < 0) 81 - return ret; 82 80 83 81 out: 84 82 kfree(auth); ··· 622 624 623 625 ret = wl1271_cmd_configure(wl, ACX_CCA_THRESHOLD, 624 626 detection, sizeof(*detection)); 625 - if (ret < 0) { 627 + if (ret < 0) 626 628 wl1271_warning("failed to set cca threshold: %d", ret); 627 - return ret; 628 - } 629 629 630 630 out: 631 631 kfree(detection);
+4 -1
drivers/net/wireless/wl12xx/testmode.c
··· 139 139 140 140 if (ret < 0) { 141 141 wl1271_warning("testmode cmd interrogate failed: %d", ret); 142 + kfree(cmd); 142 143 return ret; 143 144 } 144 145 145 146 skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd)); 146 - if (!skb) 147 + if (!skb) { 148 + kfree(cmd); 147 149 return -ENOMEM; 150 + } 148 151 149 152 NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd); 150 153