All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] Bluetooth/btmrvl_sdio: Adjustments for three function implementations
@ 2018-03-12 11:30 ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:30 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 12:10:24 +0100

A few update suggestions were taken into account
from static source code analysis.

Markus Elfring (5):
  Use common error handling code in btmrvl_sdio_register_dev()
  Delete an unnecessary variable initialisation in btmrvl_sdio_register_dev()
  One check less in btmrvl_sdio_card_to_host() after error detection
  Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_host()
  Use common error handling code in btmrvl_sdio_download_fw_w_helper()

 drivers/bluetooth/btmrvl_sdio.c | 102 ++++++++++++++++++----------------------
 1 file changed, 46 insertions(+), 56 deletions(-)

-- 
2.16.2

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH 0/5] Bluetooth/btmrvl_sdio: Adjustments for three function implementations
@ 2018-03-12 11:30 ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:30 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 12:10:24 +0100

A few update suggestions were taken into account
from static source code analysis.

Markus Elfring (5):
  Use common error handling code in btmrvl_sdio_register_dev()
  Delete an unnecessary variable initialisation in btmrvl_sdio_register_dev()
  One check less in btmrvl_sdio_card_to_host() after error detection
  Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_host()
  Use common error handling code in btmrvl_sdio_download_fw_w_helper()

 drivers/bluetooth/btmrvl_sdio.c | 102 ++++++++++++++++++----------------------
 1 file changed, 46 insertions(+), 56 deletions(-)

-- 
2.16.2


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH 1/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_register_dev()
  2018-03-12 11:30 ` SF Markus Elfring
@ 2018-03-12 11:31   ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:31 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 10:15:17 +0100

Adjust a jump target so that a bit of exception handling can be better
reused at the end of this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 50 ++++++++++++++++-------------------------
 1 file changed, 19 insertions(+), 31 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 0f020254fd39..df2a04bd8428 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -949,31 +949,24 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 	ret = sdio_set_block_size(card->func, SDIO_BLOCK_SIZE);
 	if (ret) {
 		BT_ERR("cannot set SDIO block size");
-		ret = -EIO;
-		goto release_irq;
+		goto release_with_eio;
 	}
 
 	reg = sdio_readb(func, card->reg->io_port_0, &ret);
-	if (ret < 0) {
-		ret = -EIO;
-		goto release_irq;
-	}
+	if (ret < 0)
+		goto release_with_eio;
 
 	card->ioport = reg;
 
 	reg = sdio_readb(func, card->reg->io_port_1, &ret);
-	if (ret < 0) {
-		ret = -EIO;
-		goto release_irq;
-	}
+	if (ret < 0)
+		goto release_with_eio;
 
 	card->ioport |= (reg << 8);
 
 	reg = sdio_readb(func, card->reg->io_port_2, &ret);
-	if (ret < 0) {
-		ret = -EIO;
-		goto release_irq;
-	}
+	if (ret < 0)
+		goto release_with_eio;
 
 	card->ioport |= (reg << 16);
 
@@ -981,26 +974,20 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 
 	if (card->reg->int_read_to_clear) {
 		reg = sdio_readb(func, card->reg->host_int_rsr, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
+
 		sdio_writeb(func, reg | 0x3f, card->reg->host_int_rsr, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
 
 		reg = sdio_readb(func, card->reg->card_misc_cfg, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
+
 		sdio_writeb(func, reg | 0x10, card->reg->card_misc_cfg, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
 	}
 
 	sdio_set_drvdata(func, card);
@@ -1009,7 +996,8 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 
 	return 0;
 
-release_irq:
+release_with_eio:
+	ret = -EIO;
 	sdio_release_irq(func);
 
 disable_func:
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 1/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_register_dev()
@ 2018-03-12 11:31   ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:31 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 10:15:17 +0100

Adjust a jump target so that a bit of exception handling can be better
reused at the end of this function.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 50 ++++++++++++++++-------------------------
 1 file changed, 19 insertions(+), 31 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 0f020254fd39..df2a04bd8428 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -949,31 +949,24 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 	ret = sdio_set_block_size(card->func, SDIO_BLOCK_SIZE);
 	if (ret) {
 		BT_ERR("cannot set SDIO block size");
-		ret = -EIO;
-		goto release_irq;
+		goto release_with_eio;
 	}
 
 	reg = sdio_readb(func, card->reg->io_port_0, &ret);
-	if (ret < 0) {
-		ret = -EIO;
-		goto release_irq;
-	}
+	if (ret < 0)
+		goto release_with_eio;
 
 	card->ioport = reg;
 
 	reg = sdio_readb(func, card->reg->io_port_1, &ret);
-	if (ret < 0) {
-		ret = -EIO;
-		goto release_irq;
-	}
+	if (ret < 0)
+		goto release_with_eio;
 
 	card->ioport |= (reg << 8);
 
 	reg = sdio_readb(func, card->reg->io_port_2, &ret);
-	if (ret < 0) {
-		ret = -EIO;
-		goto release_irq;
-	}
+	if (ret < 0)
+		goto release_with_eio;
 
 	card->ioport |= (reg << 16);
 
@@ -981,26 +974,20 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 
 	if (card->reg->int_read_to_clear) {
 		reg = sdio_readb(func, card->reg->host_int_rsr, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
+
 		sdio_writeb(func, reg | 0x3f, card->reg->host_int_rsr, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
 
 		reg = sdio_readb(func, card->reg->card_misc_cfg, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
+
 		sdio_writeb(func, reg | 0x10, card->reg->card_misc_cfg, &ret);
-		if (ret < 0) {
-			ret = -EIO;
-			goto release_irq;
-		}
+		if (ret < 0)
+			goto release_with_eio;
 	}
 
 	sdio_set_drvdata(func, card);
@@ -1009,7 +996,8 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 
 	return 0;
 
-release_irq:
+release_with_eio:
+	ret = -EIO;
 	sdio_release_irq(func);
 
 disable_func:
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_register_dev()
  2018-03-12 11:30 ` SF Markus Elfring
@ 2018-03-12 11:32   ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:32 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 10:20:04 +0100

The local variable "ret" will be set to an appropriate value a bit later.
Thus omit the explicit initialisation at the beginning.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index df2a04bd8428..84c222abf0f7 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -920,7 +920,7 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 {
 	struct sdio_func *func;
 	u8 reg;
-	int ret = 0;
+	int ret;
 
 	if (!card || !card->func) {
 		BT_ERR("Error: card or function is NULL!");
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_register
@ 2018-03-12 11:32   ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:32 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 10:20:04 +0100

The local variable "ret" will be set to an appropriate value a bit later.
Thus omit the explicit initialisation at the beginning.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index df2a04bd8428..84c222abf0f7 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -920,7 +920,7 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
 {
 	struct sdio_func *func;
 	u8 reg;
-	int ret = 0;
+	int ret;
 
 	if (!card || !card->func) {
 		BT_ERR("Error: card or function is NULL!");
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detection
  2018-03-12 11:30 ` SF Markus Elfring
@ 2018-03-12 11:33   ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:33 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 11:13:00 +0100

One check could be repeated by the btmrvl_sdio_card_to_host() function
during error handling even if the relevant properties can be determined
for the involved variables before by source code analysis.

* Adjust jump targets so that an extra check can be omitted at the end.

* Reuse a bit of exception handling better.

* Delete an initialisation for the local variable "skb"
  which became unnecessary with this refactoring.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 84c222abf0f7..9854addc8e96 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -687,5 +687,5 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 {
 	u16 buf_len = 0;
 	int ret, num_blocks, blksz;
-	struct sk_buff *skb = NULL;
+	struct sk_buff *skb;
 	u32 type;
@@ -695,16 +695,14 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 
 	if (!card || !card->func) {
 		BT_ERR("card or function is NULL!");
-		ret = -EINVAL;
-		goto exit;
+		goto e_inval;
 	}
 
 	/* Read the length of data to be transferred */
 	ret = btmrvl_sdio_read_rx_len(card, &buf_len);
 	if (ret < 0) {
 		BT_ERR("read rx_len failed");
-		ret = -EIO;
-		goto exit;
+		goto e_io;
 	}
 
 	blksz = SDIO_BLOCK_SIZE;
@@ -713,8 +711,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	if (buf_len <= SDIO_HEADER_LEN
 	    || (num_blocks * blksz) > ALLOC_BUF_SIZE) {
 		BT_ERR("invalid packet length: %d", buf_len);
-		ret = -EINVAL;
-		goto exit;
+		goto e_inval;
 	}
 
 	/* Allocate buffer */
@@ -722,7 +719,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	if (!skb) {
 		BT_ERR("No free skb");
 		ret = -ENOMEM;
-		goto exit;
+		goto increment_counter;
 	}
 
 	if ((unsigned long) skb->data & (BTSDIO_DMA_ALIGN - 1)) {
@@ -738,8 +735,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 			  num_blocks * blksz);
 	if (ret < 0) {
 		BT_ERR("readsb failed: %d", ret);
-		ret = -EIO;
-		goto exit;
+		goto free_skb;
 	}
 
 	/* This is SDIO specific header length: byte[2][1][0], type: byte[3]
@@ -753,8 +749,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	if (buf_len > blksz * num_blocks) {
 		BT_ERR("Skip incorrect packet: hdrlen %d buffer %d",
 		       buf_len, blksz * num_blocks);
-		ret = -EIO;
-		goto exit;
+		goto free_skb;
 	}
 
 	type = payload[3];
@@ -797,12 +792,18 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 		break;
 	}
 
-exit:
-	if (ret) {
-		hdev->stat.err_rx++;
-		kfree_skb(skb);
-	}
+	return 0;
+
+free_skb:
+	kfree_skb(skb);
+e_io:
+	ret = -EIO;
+	goto increment_counter;
 
+e_inval:
+	ret = -EINVAL;
+increment_counter:
+	hdev->stat.err_rx++;
 	return ret;
 }
 
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detection
@ 2018-03-12 11:33   ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:33 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 11:13:00 +0100

One check could be repeated by the btmrvl_sdio_card_to_host() function
during error handling even if the relevant properties can be determined
for the involved variables before by source code analysis.

* Adjust jump targets so that an extra check can be omitted at the end.

* Reuse a bit of exception handling better.

* Delete an initialisation for the local variable "skb"
  which became unnecessary with this refactoring.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 84c222abf0f7..9854addc8e96 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -687,5 +687,5 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 {
 	u16 buf_len = 0;
 	int ret, num_blocks, blksz;
-	struct sk_buff *skb = NULL;
+	struct sk_buff *skb;
 	u32 type;
@@ -695,16 +695,14 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 
 	if (!card || !card->func) {
 		BT_ERR("card or function is NULL!");
-		ret = -EINVAL;
-		goto exit;
+		goto e_inval;
 	}
 
 	/* Read the length of data to be transferred */
 	ret = btmrvl_sdio_read_rx_len(card, &buf_len);
 	if (ret < 0) {
 		BT_ERR("read rx_len failed");
-		ret = -EIO;
-		goto exit;
+		goto e_io;
 	}
 
 	blksz = SDIO_BLOCK_SIZE;
@@ -713,8 +711,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	if (buf_len <= SDIO_HEADER_LEN
 	    || (num_blocks * blksz) > ALLOC_BUF_SIZE) {
 		BT_ERR("invalid packet length: %d", buf_len);
-		ret = -EINVAL;
-		goto exit;
+		goto e_inval;
 	}
 
 	/* Allocate buffer */
@@ -722,7 +719,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	if (!skb) {
 		BT_ERR("No free skb");
 		ret = -ENOMEM;
-		goto exit;
+		goto increment_counter;
 	}
 
 	if ((unsigned long) skb->data & (BTSDIO_DMA_ALIGN - 1)) {
@@ -738,8 +735,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 			  num_blocks * blksz);
 	if (ret < 0) {
 		BT_ERR("readsb failed: %d", ret);
-		ret = -EIO;
-		goto exit;
+		goto free_skb;
 	}
 
 	/* This is SDIO specific header length: byte[2][1][0], type: byte[3]
@@ -753,8 +749,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	if (buf_len > blksz * num_blocks) {
 		BT_ERR("Skip incorrect packet: hdrlen %d buffer %d",
 		       buf_len, blksz * num_blocks);
-		ret = -EIO;
-		goto exit;
+		goto free_skb;
 	}
 
 	type = payload[3];
@@ -797,12 +792,18 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 		break;
 	}
 
-exit:
-	if (ret) {
-		hdev->stat.err_rx++;
-		kfree_skb(skb);
-	}
+	return 0;
+
+free_skb:
+	kfree_skb(skb);
+e_io:
+	ret = -EIO;
+	goto increment_counter;
 
+e_inval:
+	ret = -EINVAL;
+increment_counter:
+	hdev->stat.err_rx++;
 	return ret;
 }
 
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_host()
  2018-03-12 11:30 ` SF Markus Elfring
@ 2018-03-12 11:34   ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:34 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 11:15:59 +0100

The variable "payload" will eventually be set to an appropriate pointer
a bit later. Thus omit the explicit initialisation at the beginning.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 9854addc8e96..05c78fcc13ff 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -691,5 +691,5 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	u32 type;
-	u8 *payload = NULL;
+	u8 *payload;
 	struct hci_dev *hdev = priv->btmrvl_dev.hcidev;
 	struct btmrvl_sdio_card *card = priv->btmrvl_dev.card;
 
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_
@ 2018-03-12 11:34   ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:34 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 11:15:59 +0100

The variable "payload" will eventually be set to an appropriate pointer
a bit later. Thus omit the explicit initialisation at the beginning.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 9854addc8e96..05c78fcc13ff 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -691,5 +691,5 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
 	u32 type;
-	u8 *payload = NULL;
+	u8 *payload;
 	struct hci_dev *hdev = priv->btmrvl_dev.hcidev;
 	struct btmrvl_sdio_card *card = priv->btmrvl_dev.card;
 
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helper()
  2018-03-12 11:30 ` SF Markus Elfring
@ 2018-03-12 11:35   ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:35 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 11:30:28 +0100

Add a jump target so that the setting of a specific error code is stored
only once at the end of this function.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 05c78fcc13ff..24ed62fe2aeb 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -601,8 +601,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 					" base0 = 0x%04X(%d)."
 					" Terminating download",
 					base0, base0);
-				ret = -EIO;
-				goto done;
+				goto e_io;
 			}
 			base1 = sdio_readb(card->func,
 					card->reg->sq_read_base_addr_a1, &ret);
@@ -611,8 +610,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 					" base1 = 0x%04X(%d)."
 					" Terminating download",
 					base1, base1);
-				ret = -EIO;
-				goto done;
+				goto e_io;
 			}
 
 			len = (((u16) base1) << 8) | base0;
@@ -638,8 +636,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 			if (count > MAX_WRITE_IOMEM_RETRY) {
 				BT_ERR("FW download failure @%d, "
 					"over max retry count", offset);
-				ret = -EIO;
-				goto done;
+				goto e_io;
 			}
 			BT_ERR("FW CRC error indicated by the helper: "
 				"len = 0x%04X, txlen = %d", len, txlen);
@@ -681,6 +678,10 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 	kfree(tmpfwbuf);
 	release_firmware(fw_firmware);
 	return ret;
+
+e_io:
+	ret = -EIO;
+	goto done;
 }
 
 static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helper()
@ 2018-03-12 11:35   ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-12 11:35 UTC (permalink / raw)
  To: linux-bluetooth, Johan Hedberg, Marcel Holtmann; +Cc: LKML, kernel-janitors

From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 12 Mar 2018 11:30:28 +0100

Add a jump target so that the setting of a specific error code is stored
only once at the end of this function.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/bluetooth/btmrvl_sdio.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index 05c78fcc13ff..24ed62fe2aeb 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -601,8 +601,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 					" base0 = 0x%04X(%d)."
 					" Terminating download",
 					base0, base0);
-				ret = -EIO;
-				goto done;
+				goto e_io;
 			}
 			base1 = sdio_readb(card->func,
 					card->reg->sq_read_base_addr_a1, &ret);
@@ -611,8 +610,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 					" base1 = 0x%04X(%d)."
 					" Terminating download",
 					base1, base1);
-				ret = -EIO;
-				goto done;
+				goto e_io;
 			}
 
 			len = (((u16) base1) << 8) | base0;
@@ -638,8 +636,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 			if (count > MAX_WRITE_IOMEM_RETRY) {
 				BT_ERR("FW download failure @%d, "
 					"over max retry count", offset);
-				ret = -EIO;
-				goto done;
+				goto e_io;
 			}
 			BT_ERR("FW CRC error indicated by the helper: "
 				"len = 0x%04X, txlen = %d", len, txlen);
@@ -681,6 +678,10 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
 	kfree(tmpfwbuf);
 	release_firmware(fw_firmware);
 	return ret;
+
+e_io:
+	ret = -EIO;
+	goto done;
 }
 
 static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helper()
  2018-03-12 11:35   ` SF Markus Elfring
@ 2018-03-12 16:06     ` Marcel Holtmann
  -1 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:06 UTC (permalink / raw)
  To: SF Markus Elfring
  Cc: Linux Bluetooth mailing list, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> From: Markus Elfring <elfring@users.sourceforge.net>
> Date: Mon, 12 Mar 2018 11:30:28 +0100
> 
> Add a jump target so that the setting of a specific error code is stored
> only once at the end of this function.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
> index 05c78fcc13ff..24ed62fe2aeb 100644
> --- a/drivers/bluetooth/btmrvl_sdio.c
> +++ b/drivers/bluetooth/btmrvl_sdio.c
> @@ -601,8 +601,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 					" base0 = 0x%04X(%d)."
> 					" Terminating download",
> 					base0, base0);
> -				ret = -EIO;
> -				goto done;
> +				goto e_io;
> 			}
> 			base1 = sdio_readb(card->func,
> 					card->reg->sq_read_base_addr_a1, &ret);
> @@ -611,8 +610,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 					" base1 = 0x%04X(%d)."
> 					" Terminating download",
> 					base1, base1);
> -				ret = -EIO;
> -				goto done;
> +				goto e_io;
> 			}
> 
> 			len = (((u16) base1) << 8) | base0;
> @@ -638,8 +636,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 			if (count > MAX_WRITE_IOMEM_RETRY) {
> 				BT_ERR("FW download failure @%d, "
> 					"over max retry count", offset);
> -				ret = -EIO;
> -				goto done;
> +				goto e_io;
> 			}
> 			BT_ERR("FW CRC error indicated by the helper: "
> 				"len = 0x%04X, txlen = %d", len, txlen);
> @@ -681,6 +678,10 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 	kfree(tmpfwbuf);
> 	release_firmware(fw_firmware);
> 	return ret;
> +
> +e_io:
> +	ret = -EIO;
> +	goto done;
> }

I am not applying this one. I see zero benefit in this change. It is not even saving a single line since it actually is more code.

Regards

Marcel

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helpe
@ 2018-03-12 16:06     ` Marcel Holtmann
  0 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:06 UTC (permalink / raw)
  To: SF Markus Elfring
  Cc: Linux Bluetooth mailing list, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> From: Markus Elfring <elfring@users.sourceforge.net>
> Date: Mon, 12 Mar 2018 11:30:28 +0100
> 
> Add a jump target so that the setting of a specific error code is stored
> only once at the end of this function.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
> index 05c78fcc13ff..24ed62fe2aeb 100644
> --- a/drivers/bluetooth/btmrvl_sdio.c
> +++ b/drivers/bluetooth/btmrvl_sdio.c
> @@ -601,8 +601,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 					" base0 = 0x%04X(%d)."
> 					" Terminating download",
> 					base0, base0);
> -				ret = -EIO;
> -				goto done;
> +				goto e_io;
> 			}
> 			base1 = sdio_readb(card->func,
> 					card->reg->sq_read_base_addr_a1, &ret);
> @@ -611,8 +610,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 					" base1 = 0x%04X(%d)."
> 					" Terminating download",
> 					base1, base1);
> -				ret = -EIO;
> -				goto done;
> +				goto e_io;
> 			}
> 
> 			len = (((u16) base1) << 8) | base0;
> @@ -638,8 +636,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 			if (count > MAX_WRITE_IOMEM_RETRY) {
> 				BT_ERR("FW download failure @%d, "
> 					"over max retry count", offset);
> -				ret = -EIO;
> -				goto done;
> +				goto e_io;
> 			}
> 			BT_ERR("FW CRC error indicated by the helper: "
> 				"len = 0x%04X, txlen = %d", len, txlen);
> @@ -681,6 +678,10 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
> 	kfree(tmpfwbuf);
> 	release_firmware(fw_firmware);
> 	return ret;
> +
> +e_io:
> +	ret = -EIO;
> +	goto done;
> }

I am not applying this one. I see zero benefit in this change. It is not even saving a single line since it actually is more code.

Regards

Marcel


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_register_dev()
  2018-03-12 11:32   ` [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_register SF Markus Elfring
@ 2018-03-12 16:11     ` Marcel Holtmann
  -1 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:11 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> The local variable "ret" will be set to an appropriate value a bit later.
> Thus omit the explicit initialisation at the beginning.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_regi
@ 2018-03-12 16:11     ` Marcel Holtmann
  0 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:11 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> The local variable "ret" will be set to an appropriate value a bit later.
> Thus omit the explicit initialisation at the beginning.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_host()
  2018-03-12 11:34   ` [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_ SF Markus Elfring
@ 2018-03-12 16:11     ` Marcel Holtmann
  -1 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:11 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> The variable "payload" will eventually be set to an appropriate pointer
> a bit later. Thus omit the explicit initialisation at the beginning.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card
@ 2018-03-12 16:11     ` Marcel Holtmann
  0 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:11 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> The variable "payload" will eventually be set to an appropriate pointer
> a bit later. Thus omit the explicit initialisation at the beginning.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detection
  2018-03-12 11:33   ` SF Markus Elfring
@ 2018-03-12 16:12     ` Marcel Holtmann
  -1 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:12 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> One check could be repeated by the btmrvl_sdio_card_to_host() function
> during error handling even if the relevant properties can be determined
> for the involved variables before by source code analysis.
> 
> * Adjust jump targets so that an extra check can be omitted at the end.
> 
> * Reuse a bit of exception handling better.
> 
> * Delete an initialisation for the local variable "skb"
>  which became unnecessary with this refactoring.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 35 ++++++++++++++++++-----------------
> 1 file changed, 18 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
> index 84c222abf0f7..9854addc8e96 100644
> --- a/drivers/bluetooth/btmrvl_sdio.c
> +++ b/drivers/bluetooth/btmrvl_sdio.c
> @@ -687,5 +687,5 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> {
> 	u16 buf_len = 0;
> 	int ret, num_blocks, blksz;
> -	struct sk_buff *skb = NULL;
> +	struct sk_buff *skb;
> 	u32 type;
> @@ -695,16 +695,14 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 
> 	if (!card || !card->func) {
> 		BT_ERR("card or function is NULL!");
> -		ret = -EINVAL;
> -		goto exit;
> +		goto e_inval;
> 	}
> 
> 	/* Read the length of data to be transferred */
> 	ret = btmrvl_sdio_read_rx_len(card, &buf_len);
> 	if (ret < 0) {
> 		BT_ERR("read rx_len failed");
> -		ret = -EIO;
> -		goto exit;
> +		goto e_io;
> 	}
> 
> 	blksz = SDIO_BLOCK_SIZE;
> @@ -713,8 +711,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 	if (buf_len <= SDIO_HEADER_LEN
> 	    || (num_blocks * blksz) > ALLOC_BUF_SIZE) {
> 		BT_ERR("invalid packet length: %d", buf_len);
> -		ret = -EINVAL;
> -		goto exit;
> +		goto e_inval;
> 	}
> 
> 	/* Allocate buffer */
> @@ -722,7 +719,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 	if (!skb) {
> 		BT_ERR("No free skb");
> 		ret = -ENOMEM;
> -		goto exit;
> +		goto increment_counter;
> 	}
> 
> 	if ((unsigned long) skb->data & (BTSDIO_DMA_ALIGN - 1)) {
> @@ -738,8 +735,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 			  num_blocks * blksz);
> 	if (ret < 0) {
> 		BT_ERR("readsb failed: %d", ret);
> -		ret = -EIO;
> -		goto exit;
> +		goto free_skb;
> 	}
> 
> 	/* This is SDIO specific header length: byte[2][1][0], type: byte[3]
> @@ -753,8 +749,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 	if (buf_len > blksz * num_blocks) {
> 		BT_ERR("Skip incorrect packet: hdrlen %d buffer %d",
> 		       buf_len, blksz * num_blocks);
> -		ret = -EIO;
> -		goto exit;
> +		goto free_skb;
> 	}
> 
> 	type = payload[3];
> @@ -797,12 +792,18 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 		break;
> 	}
> 
> -exit:
> -	if (ret) {
> -		hdev->stat.err_rx++;
> -		kfree_skb(skb);
> -	}
> +	return 0;
> +
> +free_skb:
> +	kfree_skb(skb);
> +e_io:
> +	ret = -EIO;
> +	goto increment_counter;
> 
> +e_inval:
> +	ret = -EINVAL;
> +increment_counter:
> +	hdev->stat.err_rx++;
> 	return ret;

Nope!

This is not easier to read for me. This goto exit jumping and I hate that. Actually to be honest this kind of goto jumping makes my brain hurt and I want to avoid it.

Regards

Marcel

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detectio
@ 2018-03-12 16:12     ` Marcel Holtmann
  0 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:12 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> One check could be repeated by the btmrvl_sdio_card_to_host() function
> during error handling even if the relevant properties can be determined
> for the involved variables before by source code analysis.
> 
> * Adjust jump targets so that an extra check can be omitted at the end.
> 
> * Reuse a bit of exception handling better.
> 
> * Delete an initialisation for the local variable "skb"
>  which became unnecessary with this refactoring.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 35 ++++++++++++++++++-----------------
> 1 file changed, 18 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
> index 84c222abf0f7..9854addc8e96 100644
> --- a/drivers/bluetooth/btmrvl_sdio.c
> +++ b/drivers/bluetooth/btmrvl_sdio.c
> @@ -687,5 +687,5 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> {
> 	u16 buf_len = 0;
> 	int ret, num_blocks, blksz;
> -	struct sk_buff *skb = NULL;
> +	struct sk_buff *skb;
> 	u32 type;
> @@ -695,16 +695,14 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 
> 	if (!card || !card->func) {
> 		BT_ERR("card or function is NULL!");
> -		ret = -EINVAL;
> -		goto exit;
> +		goto e_inval;
> 	}
> 
> 	/* Read the length of data to be transferred */
> 	ret = btmrvl_sdio_read_rx_len(card, &buf_len);
> 	if (ret < 0) {
> 		BT_ERR("read rx_len failed");
> -		ret = -EIO;
> -		goto exit;
> +		goto e_io;
> 	}
> 
> 	blksz = SDIO_BLOCK_SIZE;
> @@ -713,8 +711,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 	if (buf_len <= SDIO_HEADER_LEN
> 	    || (num_blocks * blksz) > ALLOC_BUF_SIZE) {
> 		BT_ERR("invalid packet length: %d", buf_len);
> -		ret = -EINVAL;
> -		goto exit;
> +		goto e_inval;
> 	}
> 
> 	/* Allocate buffer */
> @@ -722,7 +719,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 	if (!skb) {
> 		BT_ERR("No free skb");
> 		ret = -ENOMEM;
> -		goto exit;
> +		goto increment_counter;
> 	}
> 
> 	if ((unsigned long) skb->data & (BTSDIO_DMA_ALIGN - 1)) {
> @@ -738,8 +735,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 			  num_blocks * blksz);
> 	if (ret < 0) {
> 		BT_ERR("readsb failed: %d", ret);
> -		ret = -EIO;
> -		goto exit;
> +		goto free_skb;
> 	}
> 
> 	/* This is SDIO specific header length: byte[2][1][0], type: byte[3]
> @@ -753,8 +749,7 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 	if (buf_len > blksz * num_blocks) {
> 		BT_ERR("Skip incorrect packet: hdrlen %d buffer %d",
> 		       buf_len, blksz * num_blocks);
> -		ret = -EIO;
> -		goto exit;
> +		goto free_skb;
> 	}
> 
> 	type = payload[3];
> @@ -797,12 +792,18 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
> 		break;
> 	}
> 
> -exit:
> -	if (ret) {
> -		hdev->stat.err_rx++;
> -		kfree_skb(skb);
> -	}
> +	return 0;
> +
> +free_skb:
> +	kfree_skb(skb);
> +e_io:
> +	ret = -EIO;
> +	goto increment_counter;
> 
> +e_inval:
> +	ret = -EINVAL;
> +increment_counter:
> +	hdev->stat.err_rx++;
> 	return ret;

Nope!

This is not easier to read for me. This goto exit jumping and I hate that. Actually to be honest this kind of goto jumping makes my brain hurt and I want to avoid it.

Regards

Marcel


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_register_dev()
  2018-03-12 11:31   ` SF Markus Elfring
@ 2018-03-12 16:18     ` Marcel Holtmann
  -1 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:18 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> Adjust a jump target so that a bit of exception handling can be better
> reused at the end of this function.
> 
> This issue was detected by using the Coccinelle software.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 50 ++++++++++++++++-------------------------
> 1 file changed, 19 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
> index 0f020254fd39..df2a04bd8428 100644
> --- a/drivers/bluetooth/btmrvl_sdio.c
> +++ b/drivers/bluetooth/btmrvl_sdio.c
> @@ -949,31 +949,24 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
> 	ret = sdio_set_block_size(card->func, SDIO_BLOCK_SIZE);
> 	if (ret) {
> 		BT_ERR("cannot set SDIO block size");
> -		ret = -EIO;
> -		goto release_irq;
> +		goto release_with_eio;
> 	}
> 
> 	reg = sdio_readb(func, card->reg->io_port_0, &ret);
> -	if (ret < 0) {
> -		ret = -EIO;
> -		goto release_irq;
> -	}
> +	if (ret < 0)
> +		goto release_with_eio;
> 
> 	card->ioport = reg;
> 
> 	reg = sdio_readb(func, card->reg->io_port_1, &ret);
> -	if (ret < 0) {
> -		ret = -EIO;
> -		goto release_irq;
> -	}
> +	if (ret < 0)
> +		goto release_with_eio;
> 
> 	card->ioport |= (reg << 8);
> 
> 	reg = sdio_readb(func, card->reg->io_port_2, &ret);
> -	if (ret < 0) {
> -		ret = -EIO;
> -		goto release_irq;
> -	}
> +	if (ret < 0)
> +		goto release_with_eio;
> 
> 	card->ioport |= (reg << 16);
> 
> @@ -981,26 +974,20 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
> 
> 	if (card->reg->int_read_to_clear) {
> 		reg = sdio_readb(func, card->reg->host_int_rsr, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> +
> 		sdio_writeb(func, reg | 0x3f, card->reg->host_int_rsr, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> 
> 		reg = sdio_readb(func, card->reg->card_misc_cfg, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> +
> 		sdio_writeb(func, reg | 0x10, card->reg->card_misc_cfg, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> 	}
> 
> 	sdio_set_drvdata(func, card);
> @@ -1009,7 +996,8 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
> 
> 	return 0;
> 
> -release_irq:
> +release_with_eio:
> +	ret = -EIO;
> 	sdio_release_irq(func);
> 
> disable_func:

please do not send me any patches with renaming goto labels. I dislike long goto labels anyway and it doesn’t make it any better in mind.

In addition, this patch is half baked. If you want to do something, then you replace all err = -EIO and use this.

release_irq:
        sdio_release_irq(func);

disable_func:
        sdio_disable_func(func);

release_host:
        sdio_release_host(func);

	return -EIO;

And replace goto failed with return -EINVAL;

Regards

Marcel

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_register_dev()
@ 2018-03-12 16:18     ` Marcel Holtmann
  0 siblings, 0 replies; 26+ messages in thread
From: Marcel Holtmann @ 2018-03-12 16:18 UTC (permalink / raw)
  To: SF Markus Elfring; +Cc: linux-bluetooth, Johan Hedberg, LKML, kernel-janitors

Hi Markus,

> Adjust a jump target so that a bit of exception handling can be better
> reused at the end of this function.
> 
> This issue was detected by using the Coccinelle software.
> 
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
> drivers/bluetooth/btmrvl_sdio.c | 50 ++++++++++++++++-------------------------
> 1 file changed, 19 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
> index 0f020254fd39..df2a04bd8428 100644
> --- a/drivers/bluetooth/btmrvl_sdio.c
> +++ b/drivers/bluetooth/btmrvl_sdio.c
> @@ -949,31 +949,24 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
> 	ret = sdio_set_block_size(card->func, SDIO_BLOCK_SIZE);
> 	if (ret) {
> 		BT_ERR("cannot set SDIO block size");
> -		ret = -EIO;
> -		goto release_irq;
> +		goto release_with_eio;
> 	}
> 
> 	reg = sdio_readb(func, card->reg->io_port_0, &ret);
> -	if (ret < 0) {
> -		ret = -EIO;
> -		goto release_irq;
> -	}
> +	if (ret < 0)
> +		goto release_with_eio;
> 
> 	card->ioport = reg;
> 
> 	reg = sdio_readb(func, card->reg->io_port_1, &ret);
> -	if (ret < 0) {
> -		ret = -EIO;
> -		goto release_irq;
> -	}
> +	if (ret < 0)
> +		goto release_with_eio;
> 
> 	card->ioport |= (reg << 8);
> 
> 	reg = sdio_readb(func, card->reg->io_port_2, &ret);
> -	if (ret < 0) {
> -		ret = -EIO;
> -		goto release_irq;
> -	}
> +	if (ret < 0)
> +		goto release_with_eio;
> 
> 	card->ioport |= (reg << 16);
> 
> @@ -981,26 +974,20 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
> 
> 	if (card->reg->int_read_to_clear) {
> 		reg = sdio_readb(func, card->reg->host_int_rsr, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> +
> 		sdio_writeb(func, reg | 0x3f, card->reg->host_int_rsr, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> 
> 		reg = sdio_readb(func, card->reg->card_misc_cfg, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> +
> 		sdio_writeb(func, reg | 0x10, card->reg->card_misc_cfg, &ret);
> -		if (ret < 0) {
> -			ret = -EIO;
> -			goto release_irq;
> -		}
> +		if (ret < 0)
> +			goto release_with_eio;
> 	}
> 
> 	sdio_set_drvdata(func, card);
> @@ -1009,7 +996,8 @@ static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
> 
> 	return 0;
> 
> -release_irq:
> +release_with_eio:
> +	ret = -EIO;
> 	sdio_release_irq(func);
> 
> disable_func:

please do not send me any patches with renaming goto labels. I dislike long goto labels anyway and it doesn’t make it any better in mind.

In addition, this patch is half baked. If you want to do something, then you replace all err = -EIO and use this.

release_irq:
        sdio_release_irq(func);

disable_func:
        sdio_disable_func(func);

release_host:
        sdio_release_host(func);

	return -EIO;

And replace goto failed with return -EINVAL;

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host()
  2018-03-12 16:12     ` [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detectio Marcel Holtmann
@ 2018-03-13  7:46       ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-13  7:46 UTC (permalink / raw)
  To: Marcel Holtmann, linux-bluetooth; +Cc: Johan Hedberg, LKML, kernel-janitors

>> @@ -797,12 +792,18 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
>> 		break;
>> 	}
>>
>> -exit:
>> -	if (ret) {
>> -		hdev->stat.err_rx++;
>> -		kfree_skb(skb);
>> -	}
>> +	return 0;
>> +
>> +free_skb:
>> +	kfree_skb(skb);
>> +e_io:
>> +	ret = -EIO;
>> +	goto increment_counter;
>>
>> +e_inval:
>> +	ret = -EINVAL;
>> +increment_counter:
>> +	hdev->stat.err_rx++;
>> 	return ret;
> 
> Nope!
> 
> This is not easier to read for me. This goto exit jumping and I hate that.

Can the software design direction become feasible to omit the repeated check
for the variable “ret” (and further initialisations)?

Regards,
Markus

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host()
@ 2018-03-13  7:46       ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-13  7:46 UTC (permalink / raw)
  To: Marcel Holtmann, linux-bluetooth; +Cc: Johan Hedberg, LKML, kernel-janitors

>> @@ -797,12 +792,18 @@ static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
>> 		break;
>> 	}
>>
>> -exit:
>> -	if (ret) {
>> -		hdev->stat.err_rx++;
>> -		kfree_skb(skb);
>> -	}
>> +	return 0;
>> +
>> +free_skb:
>> +	kfree_skb(skb);
>> +e_io:
>> +	ret = -EIO;
>> +	goto increment_counter;
>>
>> +e_inval:
>> +	ret = -EINVAL;
>> +increment_counter:
>> +	hdev->stat.err_rx++;
>> 	return ret;
> 
> Nope!
> 
> This is not easier to read for me. This goto exit jumping and I hate that.

Can the software design direction become feasible to omit the repeated check
for the variable “ret” (and further initialisations)?

Regards,
Markus

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helper()
  2018-03-12 16:06     ` [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helpe Marcel Holtmann
@ 2018-03-13  7:55       ` SF Markus Elfring
  -1 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-13  7:55 UTC (permalink / raw)
  To: Marcel Holtmann, linux-bluetooth; +Cc: Johan Hedberg, LKML, kernel-janitors

>> Add a jump target so that the setting of a specific error code is stored
>> only once at the end of this function.
>>
>> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
>> ---
>> drivers/bluetooth/btmrvl_sdio.c | 13 +++++++------
>> 1 file changed, 7 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
>> index 05c78fcc13ff..24ed62fe2aeb 100644
>> --- a/drivers/bluetooth/btmrvl_sdio.c
>> +++ b/drivers/bluetooth/btmrvl_sdio.c
>> @@ -601,8 +601,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 					" base0 = 0x%04X(%d)."
>> 					" Terminating download",
>> 					base0, base0);
>> -				ret = -EIO;
>> -				goto done;
>> +				goto e_io;
>> 			}
>> 			base1 = sdio_readb(card->func,
>> 					card->reg->sq_read_base_addr_a1, &ret);
>> @@ -611,8 +610,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 					" base1 = 0x%04X(%d)."
>> 					" Terminating download",
>> 					base1, base1);
>> -				ret = -EIO;
>> -				goto done;
>> +				goto e_io;
>> 			}
>>
>> 			len = (((u16) base1) << 8) | base0;
>> @@ -638,8 +636,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 			if (count > MAX_WRITE_IOMEM_RETRY) {
>> 				BT_ERR("FW download failure @%d, "
>> 					"over max retry count", offset);
>> -				ret = -EIO;
>> -				goto done;
>> +				goto e_io;
>> 			}
>> 			BT_ERR("FW CRC error indicated by the helper: "
>> 				"len = 0x%04X, txlen = %d", len, txlen);
>> @@ -681,6 +678,10 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 	kfree(tmpfwbuf);
>> 	release_firmware(fw_firmware);
>> 	return ret;
>> +
>> +e_io:
>> +	ret = -EIO;
>> +	goto done;
>> }
> 
> I am not applying this one. I see zero benefit in this change.

Would you care for a bit of object code reduction in this function implementation.


> It is not even saving a single line since it actually is more code.

Should I fiddle with any other source code layout?

Do you find an extra blank line inappropriate before the added jump target
in this use case?

Regards,
Markus

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helpe
@ 2018-03-13  7:55       ` SF Markus Elfring
  0 siblings, 0 replies; 26+ messages in thread
From: SF Markus Elfring @ 2018-03-13  7:55 UTC (permalink / raw)
  To: Marcel Holtmann, linux-bluetooth; +Cc: Johan Hedberg, LKML, kernel-janitors

>> Add a jump target so that the setting of a specific error code is stored
>> only once at the end of this function.
>>
>> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
>> ---
>> drivers/bluetooth/btmrvl_sdio.c | 13 +++++++------
>> 1 file changed, 7 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
>> index 05c78fcc13ff..24ed62fe2aeb 100644
>> --- a/drivers/bluetooth/btmrvl_sdio.c
>> +++ b/drivers/bluetooth/btmrvl_sdio.c
>> @@ -601,8 +601,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 					" base0 = 0x%04X(%d)."
>> 					" Terminating download",
>> 					base0, base0);
>> -				ret = -EIO;
>> -				goto done;
>> +				goto e_io;
>> 			}
>> 			base1 = sdio_readb(card->func,
>> 					card->reg->sq_read_base_addr_a1, &ret);
>> @@ -611,8 +610,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 					" base1 = 0x%04X(%d)."
>> 					" Terminating download",
>> 					base1, base1);
>> -				ret = -EIO;
>> -				goto done;
>> +				goto e_io;
>> 			}
>>
>> 			len = (((u16) base1) << 8) | base0;
>> @@ -638,8 +636,7 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 			if (count > MAX_WRITE_IOMEM_RETRY) {
>> 				BT_ERR("FW download failure @%d, "
>> 					"over max retry count", offset);
>> -				ret = -EIO;
>> -				goto done;
>> +				goto e_io;
>> 			}
>> 			BT_ERR("FW CRC error indicated by the helper: "
>> 				"len = 0x%04X, txlen = %d", len, txlen);
>> @@ -681,6 +678,10 @@ static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
>> 	kfree(tmpfwbuf);
>> 	release_firmware(fw_firmware);
>> 	return ret;
>> +
>> +e_io:
>> +	ret = -EIO;
>> +	goto done;
>> }
> 
> I am not applying this one. I see zero benefit in this change.

Would you care for a bit of object code reduction in this function implementation.


> It is not even saving a single line since it actually is more code.

Should I fiddle with any other source code layout?

Do you find an extra blank line inappropriate before the added jump target
in this use case?

Regards,
Markus

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2018-03-13  7:56 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-12 11:30 [PATCH 0/5] Bluetooth/btmrvl_sdio: Adjustments for three function implementations SF Markus Elfring
2018-03-12 11:30 ` SF Markus Elfring
2018-03-12 11:31 ` [PATCH 1/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_register_dev() SF Markus Elfring
2018-03-12 11:31   ` SF Markus Elfring
2018-03-12 16:18   ` Marcel Holtmann
2018-03-12 16:18     ` Marcel Holtmann
2018-03-12 11:32 ` [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation " SF Markus Elfring
2018-03-12 11:32   ` [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_register SF Markus Elfring
2018-03-12 16:11   ` [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_register_dev() Marcel Holtmann
2018-03-12 16:11     ` [PATCH 2/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_regi Marcel Holtmann
2018-03-12 11:33 ` [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detection SF Markus Elfring
2018-03-12 11:33   ` SF Markus Elfring
2018-03-12 16:12   ` Marcel Holtmann
2018-03-12 16:12     ` [PATCH 3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() after error detectio Marcel Holtmann
2018-03-13  7:46     ` [3/5] Bluetooth: btmrvl: One check less in btmrvl_sdio_card_to_host() SF Markus Elfring
2018-03-13  7:46       ` SF Markus Elfring
2018-03-12 11:34 ` [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation " SF Markus Elfring
2018-03-12 11:34   ` [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_ SF Markus Elfring
2018-03-12 16:11   ` [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card_to_host() Marcel Holtmann
2018-03-12 16:11     ` [PATCH 4/5] Bluetooth: btmrvl: Delete an unnecessary variable initialisation in btmrvl_sdio_card Marcel Holtmann
2018-03-12 11:35 ` [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helper() SF Markus Elfring
2018-03-12 11:35   ` SF Markus Elfring
2018-03-12 16:06   ` Marcel Holtmann
2018-03-12 16:06     ` [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helpe Marcel Holtmann
2018-03-13  7:55     ` [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helper() SF Markus Elfring
2018-03-13  7:55       ` [PATCH 5/5] Bluetooth: btmrvl: Use common error handling code in btmrvl_sdio_download_fw_w_helpe SF Markus Elfring

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.