[PATCH 47/99] Revert "cw1200: Performance optimization"

Dmitry Tarnyagin dmitry.tarnyagin at stericsson.com
Wed Feb 29 14:14:54 UTC 2012


From: Bartosz Markowski <bartosz.markowski at tieto.com>

When using a block size of 520, very large
packets can get padded to a SDIO transfer
size that is too large for CW1200.
In CW1200 the buffer size is encoded using 12 bits,
which means that sizes over 8192 bytes will wrap
around.

It was seen in case of A-MSDU a 7822 byte
read was requested and aligned to 8320 bytes.

ST-Ericsson ID: 375600
ST-Ericsson FOSS-OUT ID: NA

This reverts commit a4395503e52d03a5c15d38e46b5e43cd5e69c42c.

Change-Id: I2aef556393db9c4ac45094423fd9e88050d6bcf9
Signed-off-by: Bartosz Markowski <bartosz.markowski at tieto.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/39328
Reviewed-by: Dmitry TARNYAGIN <dmitry.tarnyagin at stericsson.com>
---
 drivers/staging/cw1200/bh.c |    6 ++++++
 drivers/staging/cw1200/bh.h |    2 +-
 2 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/cw1200/bh.c b/drivers/staging/cw1200/bh.c
index c4a880a..a1ecfd2 100644
--- a/drivers/staging/cw1200/bh.c
+++ b/drivers/staging/cw1200/bh.c
@@ -368,6 +368,9 @@ rx:
 				alloc_len += SDIO_BLOCK_SIZE;
 #endif /* CONFIG_CW1200_NON_POWER_OF_TWO_BLOCKSIZES */
 
+			/* Check if not exceeding CW1200 capabilities */
+			WARN_ON(alloc_len > EFFECTIVE_BUF_SIZE);
+
 			skb_rx = cw1200_get_skb(priv, alloc_len);
 			if (WARN_ON(!skb_rx))
 				break;
@@ -494,6 +497,9 @@ tx:
 				}
 #endif /* CONFIG_CW1200_NON_POWER_OF_TWO_BLOCKSIZES */
 
+				/* Check if not exceeding CW1200 capabilities */
+				WARN_ON(tx_len > EFFECTIVE_BUF_SIZE);
+
 				wsm->id &= __cpu_to_le32(
 						~WSM_TX_SEQ(WSM_TX_SEQ_MAX));
 				wsm->id |= cpu_to_le32(
diff --git a/drivers/staging/cw1200/bh.h b/drivers/staging/cw1200/bh.h
index ffdb533..ea4598a 100644
--- a/drivers/staging/cw1200/bh.h
+++ b/drivers/staging/cw1200/bh.h
@@ -14,7 +14,7 @@
 
 /* extern */ struct cw1200_common;
 
-#define SDIO_BLOCK_SIZE (520)
+#define SDIO_BLOCK_SIZE (512)
 
 int cw1200_register_bh(struct cw1200_common *priv);
 void cw1200_unregister_bh(struct cw1200_common *priv);
-- 
1.7.8.3



More information about the kernel mailing list