It was described by Arend as: > This series is intended for 4.17 and includes following: > > * rework bus layer attach code. > * remove duplicate variable declaration. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 4b5adc736828dc25ca33e263ad8c0b9dcd3bf325 Mon Sep 17 00:00:00 2001
 | 
						|
From: Arend Van Spriel <arend.vanspriel@broadcom.com>
 | 
						|
Date: Tue, 20 Feb 2018 00:14:19 +0100
 | 
						|
Subject: [PATCH] brcmfmac: move allocation of control rx buffer to
 | 
						|
 brcmf_sdio_bus_preinit()
 | 
						|
 | 
						|
Allocate the control rx buffer needed for firmware control interface
 | 
						|
during brcmf_sdio_bus_preinit(). This relies on common layer setting
 | 
						|
struct brcmf_bus::maxctl during brcmf_attach(). By moving the allocation
 | 
						|
we can move brcmf_attach() in subsequent change.
 | 
						|
 | 
						|
Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
 | 
						|
Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
 | 
						|
Reviewed-by: Franky Lin <franky.lin@broadcom.com>
 | 
						|
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
 | 
						|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
 | 
						|
---
 | 
						|
 .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 26 ++++++++++------------
 | 
						|
 1 file changed, 12 insertions(+), 14 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
 | 
						|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
 | 
						|
@@ -1707,7 +1707,6 @@ brcmf_sdio_read_control(struct brcmf_sdi
 | 
						|
 	int sdret;
 | 
						|
 
 | 
						|
 	brcmf_dbg(TRACE, "Enter\n");
 | 
						|
-
 | 
						|
 	if (bus->rxblen)
 | 
						|
 		buf = vzalloc(bus->rxblen);
 | 
						|
 	if (!buf)
 | 
						|
@@ -3411,6 +3410,18 @@ static int brcmf_sdio_bus_preinit(struct
 | 
						|
 	u32 value;
 | 
						|
 	int err;
 | 
						|
 
 | 
						|
+	/* maxctl provided by common layer */
 | 
						|
+	if (WARN_ON(!bus_if->maxctl))
 | 
						|
+		return -EINVAL;
 | 
						|
+
 | 
						|
+	/* Allocate control receive buffer */
 | 
						|
+	bus_if->maxctl += bus->roundup;
 | 
						|
+	value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
 | 
						|
+	value += bus->head_align;
 | 
						|
+	bus->rxbuf = kmalloc(value, GFP_ATOMIC);
 | 
						|
+	if (bus->rxbuf)
 | 
						|
+		bus->rxblen = value;
 | 
						|
+
 | 
						|
 	/* the commands below use the terms tx and rx from
 | 
						|
 	 * a device perspective, ie. bus:txglom affects the
 | 
						|
 	 * bus transfers from device to host.
 | 
						|
@@ -4209,19 +4220,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
 | 
						|
 	bus->blocksize = bus->sdiodev->func2->cur_blksize;
 | 
						|
 	bus->roundup = min(max_roundup, bus->blocksize);
 | 
						|
 
 | 
						|
-	/* Allocate buffers */
 | 
						|
-	if (bus->sdiodev->bus_if->maxctl) {
 | 
						|
-		bus->sdiodev->bus_if->maxctl += bus->roundup;
 | 
						|
-		bus->rxblen =
 | 
						|
-		    roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN),
 | 
						|
-			    ALIGNMENT) + bus->head_align;
 | 
						|
-		bus->rxbuf = kmalloc(bus->rxblen, GFP_ATOMIC);
 | 
						|
-		if (!(bus->rxbuf)) {
 | 
						|
-			brcmf_err("rxbuf allocation failed\n");
 | 
						|
-			goto fail;
 | 
						|
-		}
 | 
						|
-	}
 | 
						|
-
 | 
						|
 	sdio_claim_host(bus->sdiodev->func1);
 | 
						|
 
 | 
						|
 	/* Disable F2 to clear any intermediate frame state on the dongle */
 |