From 3ee96303a9124d21992bfdd64ddcaee7fed00a70 Mon Sep 17 00:00:00 2001 From: "Prasanna S. Panchamukhi" Date: Thu, 8 Apr 2010 16:24:28 -0700 Subject: [PATCH] --- yaml --- r: 195112 b: refs/heads/master c: a40242f2cde38ccb04d4c35cad66aab3c047fa6a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/wimax/i2400m/tx.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index bbd91fca2f64..ffe5e02ae3dc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e6dd789af1823908ed3ccda26bf07faf5970bce1 +refs/heads/master: a40242f2cde38ccb04d4c35cad66aab3c047fa6a diff --git a/trunk/drivers/net/wimax/i2400m/tx.c b/trunk/drivers/net/wimax/i2400m/tx.c index b10c3b77c27e..a5002c8467c2 100644 --- a/trunk/drivers/net/wimax/i2400m/tx.c +++ b/trunk/drivers/net/wimax/i2400m/tx.c @@ -282,6 +282,11 @@ enum { I2400M_TX_PLD_SIZE = sizeof(struct i2400m_msg_hdr) + I2400M_TX_PLD_MAX * sizeof(struct i2400m_pld), I2400M_TX_SKIP = 0x80000000, + /* + * According to Intel Wimax i3200, i5x50 and i6x50 specification + * documents, the maximum size of each message can be up to 16KiB. + */ + I2400M_TX_MSG_SIZE = 16384, /* * 16 byte aligned MAX_MTU + 4 byte payload prefix. */ @@ -682,7 +687,13 @@ int i2400m_tx(struct i2400m *i2400m, const void *buf, size_t buf_len, } if (i2400m->tx_msg == NULL) goto error_tx_new; - if (i2400m->tx_msg->size + padded_len > I2400M_TX_BUF_SIZE / 2) { + /* + * Check if this skb will fit in the TX queue's current active + * TX message. The total message size must not exceed the maximum + * size of each message I2400M_TX_MSG_SIZE. If it exceeds, + * close the current message and push this skb into the new message. + */ + if (i2400m->tx_msg->size + padded_len > I2400M_TX_MSG_SIZE) { d_printf(2, dev, "TX: message too big, going new\n"); i2400m_tx_close(i2400m); i2400m_tx_new(i2400m);