Search Linux Wireless

Re: [PATCH 3.4 1/2] brcm80211: fmac: fix SDIO function 0 register r/w issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Franky,

Le 04/20/12 23:27, Franky Lin a écrit :
SDIO stack doesn't have a structure for function 0. The structure
pointer stored in card->sdio_func[0] is actually for function 1.
With current implementation the register read/write is applied to
function 1. This pathch fixes the issue.

Reviewed-by: Pieter-Paul Giesberts<pieterpg@xxxxxxxxxxxx>
Reviewed-by: Arend van Spriel<arend@xxxxxxxxxxxx>
Signed-off-by: Franky Lin<frankyl@xxxxxxxxxxxx>
---
  .../net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c |    6 +++++-
  1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
index 4688904..6989916 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
@@ -108,9 +108,13 @@ static inline int brcmf_sdioh_f0_write_byte(struct brcmf_sdio_dev *sdiodev,
  			sdio_release_host(sdfunc);
  		}
  	} else if (regaddr == SDIO_CCCR_ABORT) {
+		sdfunc = kzalloc(sizeof(struct sdio_func), GFP_KERNEL);

You are not catching a kzalloc() possible failure here.

+		memcpy(sdfunc, sdiodev->func[0], sizeof(struct sdio_func));
+		sdfunc->num = 0;
  		sdio_claim_host(sdfunc);
  		sdio_writeb(sdfunc, *byte, regaddr,&err_ret);
  		sdio_release_host(sdfunc);
+		kfree(sdfunc);
  	} else if (regaddr<  0xF0) {
  		brcmf_dbg(ERROR, "F0 Wr:0x%02x: write disallowed\n", regaddr);
  		err_ret = -EPERM;
@@ -486,7 +490,7 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
  			kfree(bus_if);
  			return -ENOMEM;
  		}
-		sdiodev->func[0] = func->card->sdio_func[0];
+		sdiodev->func[0] = func;
  		sdiodev->func[1] = func;
  		sdiodev->bus_if = bus_if;
  		bus_if->bus_priv.sdio = sdiodev;
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux