Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2683f7dd authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Kalle Valo
Browse files

wl3501_cs: avoid bogus gcc-6 warning



gcc-6 on x86 started warning about wl3501_get_encode when building
with -O2:

drivers/net/wireless/wl3501_cs.c: In function ‘wl3501_get_encode’:
drivers/net/wireless/wl3501_cs.c:1769:5: warning: ‘implemented’ may be used uninitialized in this function
drivers/net/wireless/wl3501_cs.c:1686:19: warning: ‘threshold’ may be used uninitialized in this function
drivers/net/wireless/wl3501_cs.c:1702:20: warning: ‘threshold’ may be used uninitialized in this function
drivers/net/wireless/wl3501_cs.c:1719:23: warning: ‘txpow’ may be used uninitialized in this function
drivers/net/wireless/wl3501_cs.c:1752:20: warning: ‘retry’ may be used uninitialized in this function
drivers/net/wireless/wl3501_cs.c:1806:25: warning: ‘pwr_state’ may be used uninitialized in this function
drivers/net/wireless/wl3501_cs.c:1383:24: warning: ‘value’ may be used uninitialized in this function

I could not figure out what exactly confuses gcc here, but splitting the
wl3501_get_mib_value function into two helps the compiler to figure out
that the variables are not actually used uninitialized, and makes it
slightly clearer to a human reader what the function actually does and
which parts of it are under the spinlock.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 5e94913f
Loading
Loading
Loading
Loading
+21 −10
Original line number Original line Diff line number Diff line
@@ -378,8 +378,7 @@ static int wl3501_esbq_exec(struct wl3501_card *this, void *sig, int sig_size)
	return rc;
	return rc;
}
}


static int wl3501_get_mib_value(struct wl3501_card *this, u8 index,
static int wl3501_request_mib(struct wl3501_card *this, u8 index, void *bf)
				void *bf, int size)
{
{
	struct wl3501_get_req sig = {
	struct wl3501_get_req sig = {
		.sig_id	    = WL3501_SIG_GET_REQ,
		.sig_id	    = WL3501_SIG_GET_REQ,
@@ -395,20 +394,32 @@ static int wl3501_get_mib_value(struct wl3501_card *this, u8 index,
			wl3501_set_to_wla(this, ptr, &sig, sizeof(sig));
			wl3501_set_to_wla(this, ptr, &sig, sizeof(sig));
			wl3501_esbq_req(this, &ptr);
			wl3501_esbq_req(this, &ptr);
			this->sig_get_confirm.mib_status = 255;
			this->sig_get_confirm.mib_status = 255;
			spin_unlock_irqrestore(&this->lock, flags);
			rc = 0;
			rc = wait_event_interruptible(this->wait,
				this->sig_get_confirm.mib_status != 255);
			if (!rc)
				memcpy(bf, this->sig_get_confirm.mib_value,
				       size);
			goto out;
		}
		}
	}
	}
	spin_unlock_irqrestore(&this->lock, flags);
	spin_unlock_irqrestore(&this->lock, flags);
out:

	return rc;
	return rc;
}
}


static int wl3501_get_mib_value(struct wl3501_card *this, u8 index,
				void *bf, int size)
{
	int rc;

	rc = wl3501_request_mib(this, index, bf);
	if (rc)
		return rc;

	rc = wait_event_interruptible(this->wait,
		this->sig_get_confirm.mib_status != 255);
	if (rc)
		return rc;

	memcpy(bf, this->sig_get_confirm.mib_value, size);
	return 0;
}

static int wl3501_pwr_mgmt(struct wl3501_card *this, int suspend)
static int wl3501_pwr_mgmt(struct wl3501_card *this, int suspend)
{
{
	struct wl3501_pwr_mgmt_req sig = {
	struct wl3501_pwr_mgmt_req sig = {