Commit 2bedc2e6 authored by David S. Miller's avatar David S. Miller

Merge branch 'wireless'

John W. Linville says:

====================
This is a batch of fixes intended for the 3.9 stream...

Avinash Patil gives us a mwifiex fix to prevent a system freeze when
that driver is unloaded.

Daniel Drake brings a patch to avoid dropping the carrier flag across a
suspend.  This prevents improper packet drops.

Wei Yongjun delivers a brcmfmac for a lock leak on an error path.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents ea5cdccc 6d6436fb
...@@ -4615,8 +4615,10 @@ static s32 brcmf_notify_vif_event(struct brcmf_if *ifp, ...@@ -4615,8 +4615,10 @@ static s32 brcmf_notify_vif_event(struct brcmf_if *ifp,
switch (ifevent->action) { switch (ifevent->action) {
case BRCMF_E_IF_ADD: case BRCMF_E_IF_ADD:
/* waiting process may have timed out */ /* waiting process may have timed out */
if (!cfg->vif_event.vif) if (!cfg->vif_event.vif) {
mutex_unlock(&event->vif_event_lock);
return -EBADF; return -EBADF;
}
ifp->vif = vif; ifp->vif = vif;
vif->ifp = ifp; vif->ifp = ifp;
......
...@@ -171,7 +171,7 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -171,7 +171,7 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state)
{ {
struct mwifiex_adapter *adapter; struct mwifiex_adapter *adapter;
struct pcie_service_card *card; struct pcie_service_card *card;
int hs_actived, i; int hs_actived;
if (pdev) { if (pdev) {
card = (struct pcie_service_card *) pci_get_drvdata(pdev); card = (struct pcie_service_card *) pci_get_drvdata(pdev);
...@@ -191,9 +191,6 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -191,9 +191,6 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state)
/* Indicate device suspended */ /* Indicate device suspended */
adapter->is_suspended = true; adapter->is_suspended = true;
for (i = 0; i < adapter->priv_num; i++)
netif_carrier_off(adapter->priv[i]->netdev);
return 0; return 0;
} }
...@@ -209,7 +206,6 @@ static int mwifiex_pcie_resume(struct pci_dev *pdev) ...@@ -209,7 +206,6 @@ static int mwifiex_pcie_resume(struct pci_dev *pdev)
{ {
struct mwifiex_adapter *adapter; struct mwifiex_adapter *adapter;
struct pcie_service_card *card; struct pcie_service_card *card;
int i;
if (pdev) { if (pdev) {
card = (struct pcie_service_card *) pci_get_drvdata(pdev); card = (struct pcie_service_card *) pci_get_drvdata(pdev);
...@@ -231,10 +227,6 @@ static int mwifiex_pcie_resume(struct pci_dev *pdev) ...@@ -231,10 +227,6 @@ static int mwifiex_pcie_resume(struct pci_dev *pdev)
adapter->is_suspended = false; adapter->is_suspended = false;
for (i = 0; i < adapter->priv_num; i++)
if (adapter->priv[i]->media_connected)
netif_carrier_on(adapter->priv[i]->netdev);
mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA), mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
MWIFIEX_ASYNC_CMD); MWIFIEX_ASYNC_CMD);
...@@ -916,17 +908,8 @@ static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter *adapter) ...@@ -916,17 +908,8 @@ static int mwifiex_pcie_delete_sleep_cookie_buf(struct mwifiex_adapter *adapter)
static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter) static int mwifiex_clean_pcie_ring_buf(struct mwifiex_adapter *adapter)
{ {
struct pcie_service_card *card = adapter->card; struct pcie_service_card *card = adapter->card;
const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
u32 rdptr;
/* Read the TX ring read pointer set by firmware */
if (mwifiex_read_reg(adapter, reg->tx_rdptr, &rdptr)) {
dev_err(adapter->dev,
"Flush TXBD: failed to read reg->tx_rdptr\n");
return -1;
}
if (!mwifiex_pcie_txbd_empty(card, rdptr)) { if (!mwifiex_pcie_txbd_empty(card, card->txbd_rdptr)) {
card->txbd_flush = 1; card->txbd_flush = 1;
/* write pointer already set at last send /* write pointer already set at last send
* send dnld-rdy intr again, wait for completion. * send dnld-rdy intr again, wait for completion.
......
...@@ -161,7 +161,6 @@ static int mwifiex_sdio_suspend(struct device *dev) ...@@ -161,7 +161,6 @@ static int mwifiex_sdio_suspend(struct device *dev)
struct sdio_mmc_card *card; struct sdio_mmc_card *card;
struct mwifiex_adapter *adapter; struct mwifiex_adapter *adapter;
mmc_pm_flag_t pm_flag = 0; mmc_pm_flag_t pm_flag = 0;
int i;
int ret = 0; int ret = 0;
if (func) { if (func) {
...@@ -198,9 +197,6 @@ static int mwifiex_sdio_suspend(struct device *dev) ...@@ -198,9 +197,6 @@ static int mwifiex_sdio_suspend(struct device *dev)
/* Indicate device suspended */ /* Indicate device suspended */
adapter->is_suspended = true; adapter->is_suspended = true;
for (i = 0; i < adapter->priv_num; i++)
netif_carrier_off(adapter->priv[i]->netdev);
return ret; return ret;
} }
...@@ -220,7 +216,6 @@ static int mwifiex_sdio_resume(struct device *dev) ...@@ -220,7 +216,6 @@ static int mwifiex_sdio_resume(struct device *dev)
struct sdio_mmc_card *card; struct sdio_mmc_card *card;
struct mwifiex_adapter *adapter; struct mwifiex_adapter *adapter;
mmc_pm_flag_t pm_flag = 0; mmc_pm_flag_t pm_flag = 0;
int i;
if (func) { if (func) {
pm_flag = sdio_get_host_pm_caps(func); pm_flag = sdio_get_host_pm_caps(func);
...@@ -243,10 +238,6 @@ static int mwifiex_sdio_resume(struct device *dev) ...@@ -243,10 +238,6 @@ static int mwifiex_sdio_resume(struct device *dev)
adapter->is_suspended = false; adapter->is_suspended = false;
for (i = 0; i < adapter->priv_num; i++)
if (adapter->priv[i]->media_connected)
netif_carrier_on(adapter->priv[i]->netdev);
/* Disable Host Sleep */ /* Disable Host Sleep */
mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA), mwifiex_cancel_hs(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA),
MWIFIEX_ASYNC_CMD); MWIFIEX_ASYNC_CMD);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment