|
@@ -1035,6 +1035,7 @@ static int mwifiex_pcie_delete_cmdrsp_buf(struct mwifiex_adapter *adapter)
|
|
|
if (card && card->cmd_buf) {
|
|
|
mwifiex_unmap_pci_memory(adapter, card->cmd_buf,
|
|
|
PCI_DMA_TODEVICE);
|
|
|
+ dev_kfree_skb_any(card->cmd_buf);
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -1601,6 +1602,11 @@ mwifiex_pcie_send_cmd(struct mwifiex_adapter *adapter, struct sk_buff *skb)
|
|
|
return -1;
|
|
|
|
|
|
card->cmd_buf = skb;
|
|
|
+ /*
|
|
|
+ * Need to keep a reference, since core driver might free up this
|
|
|
+ * buffer before we've unmapped it.
|
|
|
+ */
|
|
|
+ skb_get(skb);
|
|
|
|
|
|
/* To send a command, the driver will:
|
|
|
1. Write the 64bit physical address of the data buffer to
|
|
@@ -1703,6 +1709,7 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
|
|
|
if (card->cmd_buf) {
|
|
|
mwifiex_unmap_pci_memory(adapter, card->cmd_buf,
|
|
|
PCI_DMA_TODEVICE);
|
|
|
+ dev_kfree_skb_any(card->cmd_buf);
|
|
|
card->cmd_buf = NULL;
|
|
|
}
|
|
|
|