linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Buesch <mb@bu3sch.de>
To: Albert Herranz <albert_herranz@yahoo.es>
Cc: bcm43xx-dev@lists.berlios.de, linux-wireless@vger.kernel.org
Subject: Re: [PATCH] b43: do not stack-allocate pio rx/tx header buffers
Date: Tue, 6 Oct 2009 22:52:15 +0200	[thread overview]
Message-ID: <200910062252.17565.mb@bu3sch.de> (raw)
In-Reply-To: <1254846043-7121-1-git-send-email-albert_herranz@yahoo.es>

On Tuesday 06 October 2009 18:20:43 Albert Herranz wrote:
> The DMA-API debugging facility complains about b43 mapping memory from
> stack for SDIO-based cards, as can be seen in the following two
> stack traces.
> 
>   Call Trace:
>   [d2ef7c60] [c01c55f0] check_for_stack+0xf4/0x10c (unreliable)
>   [d2ef7c80] [c01c6d10] debug_dma_map_sg+0xc4/0x134
>   [d2ef7cb0] [c0281e10] sdhci_prepare_data+0x200/0x590
>   [d2ef7ce0] [c0282288] sdhci_send_command+0xe8/0x320
>   [d2ef7d00] [c02825e0] sdhci_request+0x120/0x1b4
>   [d2ef7d20] [c0277ad4] mmc_wait_for_req+0x124/0x140
>   [d2ef7d50] [c027c2f0] mmc_io_rw_extended+0x188/0x214
>   [d2ef7e10] [c027d7c4] sdio_io_rw_ext_helper+0x104/0x224
>   [d2ef7e40] [c0296000] ssb_sdio_block_read+0xac/0x110
>   [d2ef7e60] [c0237f98] pio_rx_frame+0x1d0/0x43c
>   [d2ef7eb0] [c0238244] b43_pio_rx+0x40/0x90
>   [d2ef7ed0] [c0226124] b43_do_interrupt_thread+0x108/0x444
>   [d2ef7f30] [c0226504] b43_sdio_interrupt_handler+0x58/0x74
>   [d2ef7f40] [c0239110] b43_sdio_interrupt_dispatcher+0x4c/0x68
>   [d2ef7f60] [c027e1ac] sdio_irq_thread+0xf8/0x284
>   [d2ef7fb0] [c0054538] kthread+0x78/0x7c
>   [d2ef7ff0] [c00124ec] kernel_thread+0x4c/0x68
> 
>   Call Trace:
>   [d3335c20] [c01c55f0] check_for_stack+0xf4/0x10c (unreliable)
>   [d3335c40] [c01c6d10] debug_dma_map_sg+0xc4/0x134
>   [d3335c70] [c0281e14] sdhci_prepare_data+0x200/0x590
>   [d3335ca0] [c028228c] sdhci_send_command+0xe8/0x320
>   [d3335cc0] [c02825e4] sdhci_request+0x120/0x1b4
>   [d3335ce0] [c0277ad8] mmc_wait_for_req+0x124/0x140
>   [d3335d10] [c027c2f4] mmc_io_rw_extended+0x188/0x214
>   [d3335dd0] [c027d86c] sdio_io_rw_ext_helper+0x1a8/0x224
>   [d3335e00] [c0295ef4] ssb_sdio_block_write+0xac/0x110
>   [d3335e20] [c0237a18] tx_write_4byte_queue+0x6c/0x138
>   [d3335e40] [c0238610] pio_tx_frame+0x1c4/0x224
>   [d3335ee0] [c0238718] b43_pio_tx+0xa8/0x1f4
>   [d3335f00] [c0220380] b43_tx_work+0x4c/0xe0
>   [d3335f20] [c004fa74] run_workqueue+0x120/0x1a4
>   [d3335f70] [c004fb44] worker_thread+0x4c/0xb0
>   [d3335fb0] [c0054538] kthread+0x78/0x7c
>   [d3335ff0] [c00124ec] kernel_thread+0x4c/0x68
> 
> Indeed, b43 currently allocates the PIO RX and TX header buffers
> from stack. The solution here is to use heap-allocated buffers instead.
> 
> Signed-off-by: Albert Herranz <albert_herranz@yahoo.es>
> ---
>  drivers/net/wireless/b43/b43.h |    9 ++++++++
>  drivers/net/wireless/b43/pio.c |   42 +++++++++++++++++++++++++++------------
>  2 files changed, 38 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
> index fa1549a..b09dda1 100644
> --- a/drivers/net/wireless/b43/b43.h
> +++ b/drivers/net/wireless/b43/b43.h
> @@ -550,6 +550,9 @@ struct b43_dma {
>  struct b43_pio_txqueue;
>  struct b43_pio_rxqueue;
>  
> +struct b43_rxhdr_fw4;
> +struct b43_txhdr;
> +
>  /* Data structures for PIO transmission, per 80211 core. */
>  struct b43_pio {
>  	struct b43_pio_txqueue *tx_queue_AC_BK; /* Background */
> @@ -559,6 +562,12 @@ struct b43_pio {
>  	struct b43_pio_txqueue *tx_queue_mcast; /* Multicast */
>  
>  	struct b43_pio_rxqueue *rx_queue;
> +
> +	/*
> +	 * RX/TX header buffers used by the frame transmit functions.
> +	 */
> +	struct b43_rxhdr_fw4 *rxhdr;
> +	struct b43_txhdr *txhdr;
>  };

Just embed it into struct b43_wl (surround it by #ifdef CONFIG_B43_PIO). No need
to kzalloc then and it saves some memory.
You also need to alloc 4 bytes for the tail buffer (that currently is on the stack, too).

-- 
Greetings, Michael.

  reply	other threads:[~2009-10-06 20:52 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-06 16:20 [PATCH] b43: do not stack-allocate pio rx/tx header buffers Albert Herranz
2009-10-06 20:52 ` Michael Buesch [this message]
2009-10-06 21:13   ` John W. Linville
2009-10-06 22:07   ` [PATCH v2] b43: do not stack-allocate pio rx/tx header and tail buffers Albert Herranz
2009-10-07 16:43     ` Larry Finger
2009-10-07 16:57       ` Albert Herranz
2009-10-07 18:01         ` Larry Finger
2009-10-09 17:46           ` b43: do not stack-allocate pio rx/tx header and tail buffers (was: pull request: wireless-2.6 2009-10-08) Albert Herranz
2009-10-09 18:05             ` Michael Buesch
2009-10-09 18:52               ` b43: do not stack-allocate pio rx/tx header and tail buffers Albert Herranz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200910062252.17565.mb@bu3sch.de \
    --to=mb@bu3sch.de \
    --cc=albert_herranz@yahoo.es \
    --cc=bcm43xx-dev@lists.berlios.de \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).