* Re: [PATCH] p54spi: Remove FIXME in op_stop
[not found] <20111116235120.4c60c066@milhouse>
@ 2011-11-16 23:12 ` Christian Lamparter
2011-11-16 23:15 ` Michael Büsch
0 siblings, 1 reply; 8+ messages in thread
From: Christian Lamparter @ 2011-11-16 23:12 UTC (permalink / raw)
To: Michael Büsch; +Cc: John W. Linville, linux-wireless
On Wednesday, November 16, 2011 11:51:20 PM Michael Büsch wrote:
> Don't use the interruptible variant of mutex_lock(). It doesn't really
> need to be interruptible. This avoids nasty error handling.
>
> Signed-off-by: Michael Buesch <m@bues.ch>
Acked-by: Christian Lamparter <chunkeey@googlemail.com>
BTW: I always wondered if it would make sense to have a
cached rx skb ready in p54spi_rx(). This way we don't
have to do DMA onto the stack [which is really ugly and
possibly illegal] and might even get a better rx
performance. I could write the code but as you know I don't
have the hardware to test it.
Regards,
Christian
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] p54spi: Remove FIXME in op_stop
2011-11-16 23:12 ` [PATCH] p54spi: Remove FIXME in op_stop Christian Lamparter
@ 2011-11-16 23:15 ` Michael Büsch
2011-11-19 17:59 ` [RFC] p54spi: don't DMA onto the stack Christian Lamparter
0 siblings, 1 reply; 8+ messages in thread
From: Michael Büsch @ 2011-11-16 23:15 UTC (permalink / raw)
To: Christian Lamparter; +Cc: linux-wireless
On Thu, 17 Nov 2011 00:12:03 +0100
Christian Lamparter <chunkeey@googlemail.com> wrote:
> BTW: I always wondered if it would make sense to have a
> cached rx skb ready in p54spi_rx(). This way we don't
> have to do DMA onto the stack [which is really ugly and
> possibly illegal] and might even get a better rx
> performance. I could write the code but as you know I don't
> have the hardware to test it.
I'll test it, if you can come up with a patch.
--
Greetings, Michael.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [RFC] p54spi: don't DMA onto the stack
2011-11-16 23:15 ` Michael Büsch
@ 2011-11-19 17:59 ` Christian Lamparter
2011-11-19 22:15 ` Max Filippov
0 siblings, 1 reply; 8+ messages in thread
From: Christian Lamparter @ 2011-11-19 17:59 UTC (permalink / raw)
To: linux-wireless, Michael Büsch; +Cc: Max Filippov
On Thursday 17 November 2011 00:15:42 Michael Büsch wrote:
> On Thu, 17 Nov 2011 00:12:03 +0100
> Christian Lamparter <chunkeey@googlemail.com> wrote:
> > BTW: I always wondered if it would make sense to have a
> > cached rx skb ready in p54spi_rx(). This way we don't
> > have to do DMA onto the stack [which is really ugly and
> > possibly illegal] and might even get a better rx
> > performance. I could write the code but as you know I don't
> > have the hardware to test it.
>
> I'll test it, if you can come up with a patch.
---
[RFC] p54spi: don't DMA onto the stack
DMA transfers should not be done onto the kernel stack.
---
diff --git a/drivers/net/wireless/p54/p54spi.c b/drivers/net/wireless/p54/p54spi.c
index 2d5cf5b..b3b1ff7 100644
--- a/drivers/net/wireless/p54/p54spi.c
+++ b/drivers/net/wireless/p54/p54spi.c
@@ -339,22 +339,55 @@ static void p54spi_int_ready(struct p54s_priv *priv)
}
}
+static int p54spi_alloc_rx_skb(struct p54s_priv *priv)
+{
+ if (priv->rx_cache != NULL)
+ return 0;
+
+ /*
+ * Add extra space for spi rx header and reserve some space since the
+ * firmware may insert up to 4 padding bytes after the lmac header,
+ * but it does not amend the size of SPI data transfer. Such packets
+ * has correct data size in header, thus referencing past the end of
+ * allocated skb. Reserve extra 4 bytes for this case.
+ */
+#define RX_EXTRA_SPACE (sizeof(__le16) + sizeof(struct p54_rx_data) + 4)
+
+ priv->rx_cache = dev_alloc_skb(priv->common.rx_mtu + RX_EXTRA_SPACE);
+ if (!priv->rx_cache)
+ return -ENOMEM;
+
+ /* reserve head space for spi transfer length. */
+ skb_reserve(priv->rx_cache, 2);
+ return 0;
+}
+
static int p54spi_rx(struct p54s_priv *priv)
{
struct sk_buff *skb;
+ __le16 *rx_head;
+ int err;
u16 len;
- u16 rx_head[2];
-#define READAHEAD_SZ (sizeof(rx_head)-sizeof(u16))
+
+#define READAHEAD (sizeof(__le16))
if (p54spi_wakeup(priv) < 0)
return -EBUSY;
- /* Read data size and first data word in one SPI transaction
+ err = p54spi_alloc_rx_skb(priv);
+ if (err)
+ return err;
+
+ /*
+ * Read data size and first data word in one SPI transaction
* This is workaround for firmware/DMA bug,
* when first data word gets lost under high load.
*/
- p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, rx_head, sizeof(rx_head));
- len = rx_head[0];
+ skb = priv->rx_cache;
+ rx_head = (__le16 *)(unsigned long)(priv->rx_cache->data -
+ sizeof(__le16));
+ p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, rx_head, 4);
+ len = le16_to_cpu(rx_head[0]);
if (len == 0) {
p54spi_sleep(priv);
@@ -362,36 +395,41 @@ static int p54spi_rx(struct p54s_priv *priv)
return 0;
}
- /* Firmware may insert up to 4 padding bytes after the lmac header,
- * but it does not amend the size of SPI data transfer.
- * Such packets has correct data size in header, thus referencing
- * past the end of allocated skb. Reserve extra 4 bytes for this case */
- skb = dev_alloc_skb(len + 4);
- if (!skb) {
+ if (len >= (RX_EXTRA_SPACE + priv->common.rx_mtu)) {
p54spi_sleep(priv);
- dev_err(&priv->spi->dev, "could not alloc skb");
- return -ENOMEM;
+ dev_err(&priv->spi->dev, "rx request larger than max rx mtu\n");
+ return 0;
}
- if (len <= READAHEAD_SZ) {
- memcpy(skb_put(skb, len), rx_head + 1, len);
+ if (len <= READAHEAD) {
+ skb_put(skb, len);
} else {
- memcpy(skb_put(skb, READAHEAD_SZ), rx_head + 1, READAHEAD_SZ);
+ skb_put(skb, READAHEAD);
p54spi_spi_read(priv, SPI_ADRS_DMA_DATA,
- skb_put(skb, len - READAHEAD_SZ),
- len - READAHEAD_SZ);
+ skb_put(skb, len - READAHEAD),
+ len - READAHEAD);
}
p54spi_sleep(priv);
- /* Put additional bytes to compensate for the possible
- * alignment-caused truncation */
+ /*
+ * Put additional bytes to compensate for the possible
+ * alignment-caused truncation
+ */
skb_put(skb, 4);
- if (p54_rx(priv->hw, skb) == 0)
- dev_kfree_skb(skb);
+ if (p54_rx(priv->hw, skb) == 0) {
+ /* skb was not used up, can be recycled */
+ skb_reset_tail_pointer(skb);
+ skb_trim(skb, 0);
+ } else {
+ /* get next skb ready */
+ priv->rx_cache = NULL;
+ return p54spi_alloc_rx_skb(priv);
+ }
return 0;
}
-
+#undef RX_EXTRA_SPACE
+#undef READAHEAD
static irqreturn_t p54spi_interrupt(int irq, void *config)
{
@@ -666,6 +704,8 @@ static int __devinit p54spi_probe(struct spi_device *spi)
if (ret)
goto err_free_common;
+ p54spi_alloc_rx_skb(priv);
+
ret = p54_register_common(hw, &priv->spi->dev);
if (ret)
goto err_free_common;
@@ -691,6 +731,7 @@ static int __devexit p54spi_remove(struct spi_device *spi)
mutex_destroy(&priv->mutex);
+ kfree_skb(priv->rx_cache);
p54_free_common(priv->hw);
return 0;
diff --git a/drivers/net/wireless/p54/p54spi.h b/drivers/net/wireless/p54/p54spi.h
index dfaa62a..3e19d26 100644
--- a/drivers/net/wireless/p54/p54spi.h
+++ b/drivers/net/wireless/p54/p54spi.h
@@ -25,7 +25,7 @@
#include <linux/mutex.h>
#include <linux/list.h>
#include <net/mac80211.h>
-
+#include <linux/skbuff.h>
#include "p54.h"
/* Bit 15 is read/write bit; ON = READ, OFF = WRITE */
@@ -118,6 +118,8 @@ struct p54s_priv {
/* protected by tx_lock */
struct list_head tx_pending;
+ struct sk_buff *rx_cache;
+
enum fw_state fw_state;
const struct firmware *firmware;
};
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC] p54spi: don't DMA onto the stack
2011-11-19 17:59 ` [RFC] p54spi: don't DMA onto the stack Christian Lamparter
@ 2011-11-19 22:15 ` Max Filippov
2011-11-19 22:56 ` Christian Lamparter
0 siblings, 1 reply; 8+ messages in thread
From: Max Filippov @ 2011-11-19 22:15 UTC (permalink / raw)
To: Christian Lamparter; +Cc: linux-wireless, Michael Büsch
> On Thursday 17 November 2011 00:15:42 Michael Büsch wrote:
> > On Thu, 17 Nov 2011 00:12:03 +0100
> > Christian Lamparter <chunkeey@googlemail.com> wrote:
> > > BTW: I always wondered if it would make sense to have a
> > > cached rx skb ready in p54spi_rx(). This way we don't
> > > have to do DMA onto the stack [which is really ugly and
> > > possibly illegal] and might even get a better rx
> > > performance. I could write the code but as you know I don't
> > > have the hardware to test it.
> >
> > I'll test it, if you can come up with a patch.
> ---
> [RFC] p54spi: don't DMA onto the stack
>
> DMA transfers should not be done onto the kernel stack.
What about p54spi_read32, it does the same thing?
I have tested this patch, it works, no measurable rx speed boost though
(~6.1Mbit/sec in iperf as either server or client).
[...snip...]
> - if (len <= READAHEAD_SZ) {
> - memcpy(skb_put(skb, len), rx_head + 1, len);
> + if (len <= READAHEAD) {
> + skb_put(skb, len);
> } else {
> - memcpy(skb_put(skb, READAHEAD_SZ), rx_head + 1, READAHEAD_SZ);
> + skb_put(skb, READAHEAD);
> p54spi_spi_read(priv, SPI_ADRS_DMA_DATA,
> - skb_put(skb, len - READAHEAD_SZ),
> - len - READAHEAD_SZ);
> + skb_put(skb, len - READAHEAD),
> + len - READAHEAD);
> }
I have also tested this patch without this (READAHEAD_SZ) kludge.
It appears to work now.
Thanks.
-- Max
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] p54spi: don't DMA onto the stack
2011-11-19 22:15 ` Max Filippov
@ 2011-11-19 22:56 ` Christian Lamparter
2011-11-20 0:48 ` Max Filippov
0 siblings, 1 reply; 8+ messages in thread
From: Christian Lamparter @ 2011-11-19 22:56 UTC (permalink / raw)
To: Max Filippov; +Cc: linux-wireless, Michael Büsch
On Saturday 19 November 2011 23:15:34 Max Filippov wrote:
> > On Thursday 17 November 2011 00:15:42 Michael Büsch wrote:
> > > On Thu, 17 Nov 2011 00:12:03 +0100
> > > Christian Lamparter <chunkeey@googlemail.com> wrote:
> > > > BTW: I always wondered if it would make sense to have a
> > > > cached rx skb ready in p54spi_rx(). This way we don't
> > > > have to do DMA onto the stack [which is really ugly and
> > > > possibly illegal] and might even get a better rx
> > > > performance. I could write the code but as you know I don't
> > > > have the hardware to test it.
> > >
> > > I'll test it, if you can come up with a patch.
> > ---
> > [RFC] p54spi: don't DMA onto the stack
> >
> > DMA transfers should not be done onto the kernel stack.
>
> What about p54spi_read32, it does the same thing?
AFAIK no, p54spi_read32 and p54spi_write16/32 uses PIO.
Of course, I don't know 100% just the docs from johannes' says so :-D.
> I have tested this patch, it works, no measurable rx speed boost though
> (~6.1Mbit/sec in iperf as either server or client).
I guess that number comes from unicast plain udp testing, right. Do you
know if the performance can be improved by setting the mtu to 2274
[ifconfig wlanX mtu 2274] on both client and AP/server?
> > - if (len <= READAHEAD_SZ) {
> > - memcpy(skb_put(skb, len), rx_head + 1, len);
> > + if (len <= READAHEAD) {
> > + skb_put(skb, len);
> > } else {
> > - memcpy(skb_put(skb, READAHEAD_SZ), rx_head + 1, READAHEAD_SZ);
> > + skb_put(skb, READAHEAD);
> > p54spi_spi_read(priv, SPI_ADRS_DMA_DATA,
> > - skb_put(skb, len - READAHEAD_SZ),
> > - len - READAHEAD_SZ);
> > + skb_put(skb, len - READAHEAD),
> > + len - READAHEAD);
> > }
>
> I have also tested this patch without this (READAHEAD_SZ) kludge.
> It appears to work now.
well, there's one more thing: what happens when there's just
a single read. .e.g.:
---
diff --git a/drivers/net/wireless/p54/p54spi.c b/drivers/net/wireless/p54/p54spi.c
index 2d5cf5b..bdbae3d 100644
--- a/drivers/net/wireless/p54/p54spi.c
+++ b/drivers/net/wireless/p54/p54spi.c
@@ -339,22 +339,56 @@ static void p54spi_int_ready(struct p54s_priv *priv)
}
}
+static int p54spi_alloc_rx_skb(struct p54s_priv *priv)
+{
+ if (priv->rx_cache != NULL)
+ return 0;
+
+ /*
+ * Add extra space for spi rx header and reserve some space since the
+ * firmware may insert up to 4 padding bytes after the lmac header,
+ * but it does not amend the size of SPI data transfer. Such packets
+ * has correct data size in header, thus referencing past the end of
+ * allocated skb. Reserve extra 4 bytes for this case
+ */
+#define RX_EXTRA_SPACE (sizeof(__le16) + sizeof(struct p54_rx_data) + 4)
+
+ priv->rx_cache = dev_alloc_skb(priv->common.rx_mtu + RX_EXTRA_SPACE);
+ if (!priv->rx_cache)
+ return -ENOMEM;
+
+ /* reserve space for spi transfer size */
+ skb_reserve(priv->rx_cache, 2);
+ return 0;
+}
+
static int p54spi_rx(struct p54s_priv *priv)
{
struct sk_buff *skb;
+ __le16 *rx_head;
+ int err;
u16 len;
- u16 rx_head[2];
-#define READAHEAD_SZ (sizeof(rx_head)-sizeof(u16))
+
+#define READAHEAD (sizeof(__le16))
if (p54spi_wakeup(priv) < 0)
return -EBUSY;
- /* Read data size and first data word in one SPI transaction
+ err = p54spi_alloc_rx_skb(priv);
+ if (err)
+ return err;
+
+ /*
+ * Read data size and first data word in one SPI transaction
* This is workaround for firmware/DMA bug,
* when first data word gets lost under high load.
*/
- p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, rx_head, sizeof(rx_head));
- len = rx_head[0];
+ skb = priv->rx_cache;
+ rx_head = (__le16 *)(unsigned long)(priv->rx_cache->data -
+ sizeof(__le16));
+ p54spi_spi_read(priv, SPI_ADRS_DMA_DATA, rx_head, RX_EXTRA_SPACE +
+ priv->common.rx_mtu);
+ len = le16_to_cpu(rx_head[0]);
if (len == 0) {
p54spi_sleep(priv);
@@ -362,36 +396,33 @@ static int p54spi_rx(struct p54s_priv *priv)
return 0;
}
- /* Firmware may insert up to 4 padding bytes after the lmac header,
- * but it does not amend the size of SPI data transfer.
- * Such packets has correct data size in header, thus referencing
- * past the end of allocated skb. Reserve extra 4 bytes for this case */
- skb = dev_alloc_skb(len + 4);
- if (!skb) {
+ if (len >= (RX_EXTRA_SPACE + priv->common.rx_mtu - 4)) {
p54spi_sleep(priv);
- dev_err(&priv->spi->dev, "could not alloc skb");
- return -ENOMEM;
+ dev_err(&priv->spi->dev, "rx request larger than max rx mtu\n");
+ return 0;
}
- if (len <= READAHEAD_SZ) {
- memcpy(skb_put(skb, len), rx_head + 1, len);
- } else {
- memcpy(skb_put(skb, READAHEAD_SZ), rx_head + 1, READAHEAD_SZ);
- p54spi_spi_read(priv, SPI_ADRS_DMA_DATA,
- skb_put(skb, len - READAHEAD_SZ),
- len - READAHEAD_SZ);
- }
+ /*
+ * Put additional bytes to compensate for the possible
+ * alignment-caused truncation.
+ */
+ skb_put(skb, len + 4);
p54spi_sleep(priv);
- /* Put additional bytes to compensate for the possible
- * alignment-caused truncation */
- skb_put(skb, 4);
- if (p54_rx(priv->hw, skb) == 0)
- dev_kfree_skb(skb);
+ if (p54_rx(priv->hw, skb) == 0) {
+ /* skb was not used up, can be recycled */
+ skb_reset_tail_pointer(skb);
+ skb_trim(skb, 0);
+ } else {
+ /* get next skb ready */
+ priv->rx_cache = NULL;
+ return p54spi_alloc_rx_skb(priv);
+ }
return 0;
}
-
+#undef RX_EXTRA_SPACE
+#undef READAHEAD
static irqreturn_t p54spi_interrupt(int irq, void *config)
{
@@ -666,6 +697,8 @@ static int __devinit p54spi_probe(struct spi_device *spi)
if (ret)
goto err_free_common;
+ p54spi_alloc_rx_skb(priv);
+
ret = p54_register_common(hw, &priv->spi->dev);
if (ret)
goto err_free_common;
@@ -691,6 +724,7 @@ static int __devexit p54spi_remove(struct spi_device *spi)
mutex_destroy(&priv->mutex);
+ kfree_skb(priv->rx_cache);
p54_free_common(priv->hw);
return 0;
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC] p54spi: don't DMA onto the stack
2011-11-19 22:56 ` Christian Lamparter
@ 2011-11-20 0:48 ` Max Filippov
2011-11-20 13:24 ` Christian Lamparter
0 siblings, 1 reply; 8+ messages in thread
From: Max Filippov @ 2011-11-20 0:48 UTC (permalink / raw)
To: Christian Lamparter; +Cc: linux-wireless, Michael Büsch
> On Saturday 19 November 2011 23:15:34 Max Filippov wrote:
> > > On Thursday 17 November 2011 00:15:42 Michael Büsch wrote:
> > > > On Thu, 17 Nov 2011 00:12:03 +0100
> > > > Christian Lamparter <chunkeey@googlemail.com> wrote:
> > > > > BTW: I always wondered if it would make sense to have a
> > > > > cached rx skb ready in p54spi_rx(). This way we don't
> > > > > have to do DMA onto the stack [which is really ugly and
> > > > > possibly illegal] and might even get a better rx
> > > > > performance. I could write the code but as you know I don't
> > > > > have the hardware to test it.
> > > >
> > > > I'll test it, if you can come up with a patch.
> > > ---
> > > [RFC] p54spi: don't DMA onto the stack
> > >
> > > DMA transfers should not be done onto the kernel stack.
> >
> > What about p54spi_read32, it does the same thing?
> AFAIK no, p54spi_read32 and p54spi_write16/32 uses PIO.
Initial p54spi_rx transfer with the kludge in place is 4 bytes long as well.
> Of course, I don't know 100% just the docs from johannes' says so :-D.
That's right, drivers/spi/omap2_mcspi.c says that:
/* use PIO for small transfers, avoiding DMA setup/teardown overhead and
* cache operations; better heuristics consider wordsize and bitrate.
*/
#define DMA_MIN_BYTES 160
> > I have tested this patch, it works, no measurable rx speed boost though
> > (~6.1Mbit/sec in iperf as either server or client).
> I guess that number comes from unicast plain udp testing, right. Do you
> know if the performance can be improved by setting the mtu to 2274
> [ifconfig wlanX mtu 2274] on both client and AP/server?
~6.7Mbit/sec
> > > - if (len <= READAHEAD_SZ) {
> > > - memcpy(skb_put(skb, len), rx_head + 1, len);
> > > + if (len <= READAHEAD) {
> > > + skb_put(skb, len);
> > > } else {
> > > - memcpy(skb_put(skb, READAHEAD_SZ), rx_head + 1, READAHEAD_SZ);
> > > + skb_put(skb, READAHEAD);
> > > p54spi_spi_read(priv, SPI_ADRS_DMA_DATA,
> > > - skb_put(skb, len - READAHEAD_SZ),
> > > - len - READAHEAD_SZ);
> > > + skb_put(skb, len - READAHEAD),
> > > + len - READAHEAD);
> > > }
> >
> > I have also tested this patch without this (READAHEAD_SZ) kludge.
> > It appears to work now.
> well, there's one more thing: what happens when there's just
> a single read. .e.g.:
[...snip...]
Highly unstable link and lots of "rx request of zero bytes" in the dmesg log.
Thanks.
-- Max
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] p54spi: don't DMA onto the stack
2011-11-20 0:48 ` Max Filippov
@ 2011-11-20 13:24 ` Christian Lamparter
2011-11-20 14:36 ` Max Filippov
0 siblings, 1 reply; 8+ messages in thread
From: Christian Lamparter @ 2011-11-20 13:24 UTC (permalink / raw)
To: Max Filippov; +Cc: linux-wireless, Michael Büsch
On Sunday 20 November 2011 01:48:55 Max Filippov wrote:
> > > > [RFC] p54spi: don't DMA onto the stack
> > > >
> > > > DMA transfers should not be done onto the kernel stack.
> > >
> > > What about p54spi_read32, it does the same thing?
> > AFAIK no, p54spi_read32 and p54spi_write16/32 uses PIO.
>
> Initial p54spi_rx transfer with the kludge in place is 4 bytes long as well.
>
> > Of course, I don't know 100% just the docs from johannes' says so :-D.
>
> That's right, drivers/spi/omap2_mcspi.c says that:
>
> /* use PIO for small transfers, avoiding DMA setup/teardown overhead and
> * cache operations; better heuristics consider wordsize and bitrate.
> */
> #define DMA_MIN_BYTES 160
so omap2_mcspi.c might paper of a bug right here and nobody never noticed
it. Of course, if we had bothered to read Documentation/spi/spi-summary in
the first place then we might not need a paper bag now...
qoute: "
- I/O buffers use the usual Linux rules, and must be DMA-safe.
You'd normally allocate them from the heap or free page pool.
Don't use the stack, or anything that's declared "static".
- The spi_message and spi_transfer metadata used to glue those
I/O buffers into a group of protocol transactions. These can
be allocated anywhere it's convenient, including as part of
other allocate-once driver data structures. Zero-init these.
"
> > > > - if (len <= READAHEAD_SZ) {
> > > > - memcpy(skb_put(skb, len), rx_head + 1, len);
> > > > + if (len <= READAHEAD) {
> > > > + skb_put(skb, len);
> > > > } else {
> > > > - memcpy(skb_put(skb, READAHEAD_SZ), rx_head + 1, READAHEAD_SZ);
> > > > + skb_put(skb, READAHEAD);
> > > > p54spi_spi_read(priv, SPI_ADRS_DMA_DATA,
> > > > - skb_put(skb, len - READAHEAD_SZ),
> > > > - len - READAHEAD_SZ);
> > > > + skb_put(skb, len - READAHEAD),
> > > > + len - READAHEAD);
> > > > }
> > >
> > > I have also tested this patch without this (READAHEAD_SZ) kludge.
> > > It appears to work now.
> > well, there's one more thing: what happens when there's just
> > a single read. .e.g.:
>
> [...snip...]
>
> Highly unstable link and lots of "rx request of zero bytes" in the dmesg log.
Ok, that's a dead end then. BTW, what's your opinion on the subject. Should
we alloc a bufffer on demand or have one which is "big enough" always
around?
Regards,
Christian
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] p54spi: don't DMA onto the stack
2011-11-20 13:24 ` Christian Lamparter
@ 2011-11-20 14:36 ` Max Filippov
0 siblings, 0 replies; 8+ messages in thread
From: Max Filippov @ 2011-11-20 14:36 UTC (permalink / raw)
To: Christian Lamparter; +Cc: linux-wireless, Michael Büsch
> Ok, that's a dead end then. BTW, what's your opinion on the subject. Should
> we alloc a bufffer on demand or have one which is "big enough" always
> around?
The latter seems to me a bit better w.r.t. amount of work on the fast path (:
Thanks.
-- Max
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-11-20 14:36 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20111116235120.4c60c066@milhouse>
2011-11-16 23:12 ` [PATCH] p54spi: Remove FIXME in op_stop Christian Lamparter
2011-11-16 23:15 ` Michael Büsch
2011-11-19 17:59 ` [RFC] p54spi: don't DMA onto the stack Christian Lamparter
2011-11-19 22:15 ` Max Filippov
2011-11-19 22:56 ` Christian Lamparter
2011-11-20 0:48 ` Max Filippov
2011-11-20 13:24 ` Christian Lamparter
2011-11-20 14:36 ` Max Filippov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).