From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
"Theodore Ts'o" <tytso@mit.edu>,
Randy Dunlap <rdunlap@xenotime.net>,
Dave Jones <davej@redhat.com>,
Chuck Wolber <chuckw@quantumlinux.com>,
Chris Wedgwood <reviews@ml.cw.f00f.org>,
Michael Krufky <mkrufky@linuxtv.org>,
Chuck Ebbert <cebbert@redhat.com>,
Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, Zhu Yi <yi.zhu@intel.com>,
Tomas Winkler <tomas.winkler@intel.com>,
"John W. Linville" <linville@tuxdriver.com>
Subject: [patch 08/85] iwlwifi: use GFP_KERNEL to allocate Rx SKB memory
Date: Thu, 15 Jan 2009 13:59:09 -0800 [thread overview]
Message-ID: <20090115215909.GI17227@kroah.com> (raw)
In-Reply-To: <20090115215812.GA17227@kroah.com>
[-- Attachment #1: iwlwifi-use-gfp_kernel-to-allocate-rx-skb-memory.patch --]
[-- Type: text/plain, Size: 3941 bytes --]
2.6.27-stable review patch. If anyone has any objections, please let us know.
------------------
From: Zhu Yi <yi.zhu@intel.com>
commit f1bc4ac61f2c08515afd80c6dc3962aa6d0b138b upstream.
Previously we allocate Rx SKB with GFP_ATOMIC flag. This is because we need
to hold a spinlock to protect the two rx_used and rx_free lists operation
in the rxq.
spin_lock();
...
element = rxq->rx_used.next;
element->skb = alloc_skb(..., GFP_ATOMIC);
list_del(element);
list_add_tail(&element->list, &rxq->rx_free);
...
spin_unlock();
After spliting the rx_used delete and rx_free insert into two operations,
we don't require the skb allocation in an atomic context any more (the
function itself is scheduled in a workqueue).
spin_lock();
...
element = rxq->rx_used.next;
list_del(element);
...
spin_unlock();
...
element->skb = alloc_skb(..., GFP_KERNEL);
...
spin_lock()
...
list_add_tail(&element->list, &rxq->rx_free);
...
spin_unlock();
This patch should fix the "iwlagn: Can not allocate SKB buffers" warning
we see recently.
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Acked-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/wireless/iwlwifi/iwl-agn.c | 12 +-----------
drivers/net/wireless/iwlwifi/iwl-rx.c | 29 +++++++++++++++++++----------
2 files changed, 20 insertions(+), 21 deletions(-)
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1334,16 +1334,6 @@ static void iwl_setup_rx_handlers(struct
priv->cfg->ops->lib->rx_handler_setup(priv);
}
-/*
- * this should be called while priv->lock is locked
-*/
-static void __iwl_rx_replenish(struct iwl_priv *priv)
-{
- iwl_rx_allocate(priv);
- iwl_rx_queue_restock(priv);
-}
-
-
/**
* iwl_rx_handle - Main entry function for receiving responses from uCode
*
@@ -1449,7 +1439,7 @@ void iwl_rx_handle(struct iwl_priv *priv
count++;
if (count >= 8) {
priv->rxq.read = i;
- __iwl_rx_replenish(priv);
+ iwl_rx_queue_restock(priv);
count = 0;
}
}
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -245,25 +245,31 @@ void iwl_rx_allocate(struct iwl_priv *pr
struct list_head *element;
struct iwl_rx_mem_buffer *rxb;
unsigned long flags;
- spin_lock_irqsave(&rxq->lock, flags);
- while (!list_empty(&rxq->rx_used)) {
+
+ while (1) {
+ spin_lock_irqsave(&rxq->lock, flags);
+
+ if (list_empty(&rxq->rx_used)) {
+ spin_unlock_irqrestore(&rxq->lock, flags);
+ return;
+ }
element = rxq->rx_used.next;
rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
+ list_del(element);
+
+ spin_unlock_irqrestore(&rxq->lock, flags);
/* Alloc a new receive buffer */
rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256,
- __GFP_NOWARN | GFP_ATOMIC);
+ GFP_KERNEL);
if (!rxb->skb) {
- if (net_ratelimit())
- printk(KERN_CRIT DRV_NAME
- ": Can not allocate SKB buffers\n");
+ printk(KERN_CRIT DRV_NAME
+ "Can not allocate SKB buffers\n");
/* We don't reschedule replenish work here -- we will
* call the restock method and if it still needs
* more buffers it will schedule replenish */
break;
}
- priv->alloc_rxb_skb++;
- list_del(element);
/* Get physical address of RB/SKB */
rxb->real_dma_addr = pci_map_single(
@@ -277,12 +283,15 @@ void iwl_rx_allocate(struct iwl_priv *pr
rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256);
skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr);
+ spin_lock_irqsave(&rxq->lock, flags);
+
list_add_tail(&rxb->list, &rxq->rx_free);
rxq->free_count++;
+ priv->alloc_rxb_skb++;
+
+ spin_unlock_irqrestore(&rxq->lock, flags);
}
- spin_unlock_irqrestore(&rxq->lock, flags);
}
-EXPORT_SYMBOL(iwl_rx_allocate);
void iwl_rx_replenish(struct iwl_priv *priv)
{
next prev parent reply other threads:[~2009-01-15 22:06 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20090115215237.906089480@mini.kroah.org>
2009-01-15 21:58 ` [patch 00/85] 2.6.27.12-stable review Greg KH
2009-01-15 21:58 ` [patch 01/85] ALSA: caiaq - Fix Oops with MIDI Greg KH
2009-01-15 21:58 ` [patch 02/85] ALSA: hda - Add quirk for HP6730B laptop Greg KH
2009-01-15 21:58 ` [patch 03/85] cgroups: fix a race between cgroup_clone and umount Greg KH
2009-01-15 21:58 ` [patch 04/85] devices cgroup: allow mkfifo Greg KH
2009-01-15 21:59 ` [patch 05/85] dm log: fix dm_io_client leak on error paths Greg KH
2009-01-15 21:59 ` [patch 06/85] dm raid1: fix error count Greg KH
2009-01-15 21:59 ` [patch 07/85] ioat: fix self test for multi-channel case Greg KH
2009-01-15 21:59 ` Greg KH [this message]
2009-01-15 21:59 ` [patch 09/85] md: fix bitmap-on-external-file bug Greg KH
2009-01-15 21:59 ` [patch 10/85] minix: fix add links wrong position calculation Greg KH
2009-01-15 21:59 ` [patch 11/85] sched_clock: prevent scd->clock from moving backwards, take #2 Greg KH
2009-01-15 21:59 ` [patch 12/85] SCSI: aha152x_cs: Fix regression that keeps driver from using shared interrupts Greg KH
2009-01-15 21:59 ` [patch 13/85] SCSI: eata: fix the data buffer accessors conversion regression Greg KH
2009-01-15 21:59 ` [patch 14/85] USB: emi26: fix oops on load Greg KH
2009-01-15 21:59 ` [patch 15/85] USB: isp1760: use a specific PLX bridge instead of any bdridge Greg KH
2009-01-15 21:59 ` [patch 16/85] USB: unusual_devs.h additions for Pentax K10D Greg KH
2009-01-15 21:59 ` [patch 17/85] x86: default to SWIOTLB=y on x86_64 Greg KH
2009-01-15 21:59 ` [patch 18/85] x86: fix incorrect __read_mostly on _boot_cpu_pda Greg KH
2009-01-15 21:59 ` [patch 19/85] x86, UV: remove erroneous BAU initialization Greg KH
2009-01-15 21:59 ` [patch 20/85] inotify: fix type errors in interfaces Greg KH
2009-01-15 21:59 ` [patch 21/85] [PATCH 01/44] [CVE-2009-0029] Move compat system call declarations to compat header file Greg KH
2009-01-15 21:59 ` [patch 22/85] [PATCH 02/44] [CVE-2009-0029] Convert all system calls to return a long Greg KH
2009-01-18 22:17 ` Christoph Hellwig
2009-01-18 23:50 ` Greg KH
2009-01-19 10:09 ` Heiko Carstens
2009-01-15 21:59 ` [patch 23/85] [PATCH 03/44] [CVE-2009-0029] Rename old_readdir to sys_old_readdir Greg KH
2009-01-15 21:59 ` [patch 24/85] [PATCH 04/44] [CVE-2009-0029] Remove __attribute__((weak)) from sys_pipe/sys_pipe2 Greg KH
2009-01-15 21:59 ` [patch 25/85] [PATCH 05/44] [CVE-2009-0029] Make sys_pselect7 static Greg KH
2009-01-15 21:59 ` [patch 26/85] [PATCH 06/44] [CVE-2009-0029] Make sys_syslog a conditional system call Greg KH
2009-01-15 21:59 ` [patch 27/85] [PATCH 07/44] [CVE-2009-0029] System call wrapper infrastructure Greg KH
2009-01-15 22:46 ` Jiri Slaby
2009-01-15 23:42 ` [stable] " Greg KH
2009-01-16 8:37 ` Heiko Carstens
2009-01-16 8:44 ` Jiri Slaby
2009-01-16 8:44 ` Christian Borntraeger
2009-01-16 9:57 ` Heiko Carstens
2009-01-16 10:09 ` Christian Borntraeger
2009-01-15 21:59 ` [patch 28/85] [PATCH 08/44] [CVE-2009-0029] powerpc: Enable syscall wrappers for 64-bit Greg KH
2009-01-15 21:59 ` [patch 29/85] [PATCH 09/44] [CVE-2009-0029] s390: enable system call wrappers Greg KH
2009-01-15 21:59 ` [patch 30/85] [PATCH 10/44] [CVE-2009-0029] System call wrapper special cases Greg KH
2009-01-15 21:59 ` [patch 31/85] [PATCH 11/44] [CVE-2009-0029] System call wrappers part 01 Greg KH
2009-01-15 21:59 ` [patch 32/85] [PATCH 12/44] [CVE-2009-0029] System call wrappers part 02 Greg KH
2009-01-15 22:00 ` [patch 33/85] [PATCH 13/44] [CVE-2009-0029] System call wrappers part 03 Greg KH
2009-01-15 22:00 ` [patch 34/85] [PATCH 14/44] [CVE-2009-0029] System call wrappers part 04 Greg KH
2009-01-15 22:00 ` [patch 35/85] [PATCH 15/44] [CVE-2009-0029] System call wrappers part 05 Greg KH
2009-01-15 22:00 ` [patch 36/85] [PATCH 16/44] [CVE-2009-0029] System call wrappers part 06 Greg KH
2009-01-15 22:00 ` [patch 37/85] [PATCH 17/44] [CVE-2009-0029] System call wrappers part 07 Greg KH
2009-01-15 22:00 ` [patch 38/85] [PATCH 18/44] [CVE-2009-0029] System call wrappers part 08 Greg KH
2009-01-15 22:00 ` [patch 39/85] [PATCH 19/44] [CVE-2009-0029] System call wrappers part 09 Greg KH
2009-01-15 22:00 ` [patch 40/85] [PATCH 20/44] [CVE-2009-0029] System call wrappers part 10 Greg KH
2009-01-15 22:00 ` [patch 41/85] [PATCH 21/44] [CVE-2009-0029] System call wrappers part 11 Greg KH
2009-01-15 22:00 ` [patch 42/85] [PATCH 22/44] [CVE-2009-0029] System call wrappers part 12 Greg KH
2009-01-15 22:00 ` [patch 43/85] [PATCH 23/44] [CVE-2009-0029] System call wrappers part 13 Greg KH
2009-01-15 22:00 ` [patch 44/85] [PATCH 24/44] [CVE-2009-0029] System call wrappers part 14 Greg KH
2009-01-15 22:00 ` [patch 45/85] [PATCH 25/44] [CVE-2009-0029] System call wrappers part 15 Greg KH
2009-01-15 22:00 ` [patch 46/85] [PATCH 26/44] [CVE-2009-0029] System call wrappers part 16 Greg KH
2009-01-15 22:00 ` [patch 47/85] [PATCH 27/44] [CVE-2009-0029] System call wrappers part 17 Greg KH
2009-01-15 22:00 ` [patch 48/85] [PATCH 28/44] [CVE-2009-0029] System call wrappers part 18 Greg KH
2009-01-15 22:00 ` [patch 49/85] [PATCH 29/44] [CVE-2009-0029] System call wrappers part 19 Greg KH
2009-01-15 22:00 ` [patch 50/85] [PATCH 30/44] [CVE-2009-0029] System call wrappers part 20 Greg KH
2009-01-15 22:00 ` [patch 51/85] [PATCH 31/44] [CVE-2009-0029] System call wrappers part 21 Greg KH
2009-01-15 22:00 ` [patch 52/85] [PATCH 32/44] [CVE-2009-0029] System call wrappers part 22 Greg KH
2009-01-15 22:00 ` [patch 53/85] [PATCH 33/44] [CVE-2009-0029] System call wrappers part 23 Greg KH
2009-01-15 22:00 ` [patch 54/85] [PATCH 34/44] [CVE-2009-0029] System call wrappers part 24 Greg KH
2009-01-15 22:01 ` [patch 55/85] [PATCH 35/44] [CVE-2009-0029] System call wrappers part 25 Greg KH
2009-01-15 22:01 ` [patch 56/85] [PATCH 36/44] [CVE-2009-0029] System call wrappers part 26 Greg KH
2009-01-15 22:01 ` [patch 57/85] [PATCH 37/44] [CVE-2009-0029] System call wrappers part 27 Greg KH
2009-01-15 22:01 ` [patch 58/85] [PATCH 38/44] [CVE-2009-0029] System call wrappers part 28 Greg KH
2009-01-15 22:01 ` [patch 59/85] [PATCH 39/44] [CVE-2009-0029] System call wrappers part 29 Greg KH
2009-01-15 22:01 ` [patch 60/85] [PATCH 40/44] [CVE-2009-0029] System call wrappers part 30 Greg KH
2009-01-15 22:01 ` [patch 61/85] [PATCH 41/44] [CVE-2009-0029] System call wrappers part 31 Greg KH
2009-01-15 22:01 ` [patch 62/85] [PATCH 42/44] [CVE-2009-0029] System call wrappers part 32 Greg KH
2009-01-15 22:01 ` [patch 63/85] [PATCH 43/44] [CVE-2009-0029] System call wrappers Greg KH
2009-01-15 22:01 ` [patch 64/85] [PATCH 44/44] [CVE-2009-0029] s390 specific system " Greg KH
2009-01-15 22:01 ` [patch 65/85] e1000e: fix IPMI traffic Greg KH
2009-01-15 22:01 ` [patch 66/85] eCryptfs: check readlink result was not an error before using it Greg KH
2009-01-15 22:01 ` [patch 67/85] fix switch_names() breakage in short-to-short case Greg KH
2009-01-15 22:01 ` [patch 68/85] fs: symlink write_begin allocation context fix Greg KH
2009-01-15 22:31 ` Greg KH
2009-01-16 2:53 ` Nick Piggin
2009-01-16 22:48 ` Greg KH
2009-01-15 22:01 ` [patch 69/85] [SCSI] ibmvfc: Delay NPIV login retry and add retries Greg KH
2009-01-15 22:01 ` [patch 70/85] [SCSI] ibmvfc: Improve async event handling Greg KH
2009-01-15 22:01 ` [patch 71/85] mm: fix assertion Greg KH
2009-01-15 22:01 ` [patch 72/85] mm lockless pagecache barrier fix Greg KH
2009-01-15 22:01 ` [patch 73/85] [SCSI] mvsas: increase port type detection delay to suit Seagates 10k6 drive ST3450856SS 0003 Greg KH
2009-01-15 22:01 ` [patch 74/85] nfs: remove redundant tests on reading new pages Greg KH
2009-01-15 22:01 ` [patch 75/85] powerpc: Disable Collaborative Memory Manager for kdump Greg KH
2009-01-15 22:01 ` [patch 76/85] USB: another unusual_devs entry for another bad Argosy storage device Greg KH
2009-01-15 22:01 ` [patch 77/85] USB: storage: extend unusual range for 067b:3507 Greg KH
2009-01-15 22:01 ` [patch 78/85] USB: storage: recognizing and enabling Nokia 5200 cell phoes Greg KH
2009-01-15 22:01 ` [patch 79/85] x86: avoid theoretical vmalloc fault loop Greg KH
2009-01-15 22:02 ` [patch 80/85] x86, cpa: dont use large pages for kernel identity mapping with DEBUG_PAGEALLOC Greg KH
2009-01-15 22:02 ` [patch 81/85] x86: fix RIP printout in early_idt_handler Greg KH
2009-01-16 3:27 ` Jike Song
2009-01-16 4:13 ` Greg KH
2009-01-16 8:47 ` Jiri Slaby
2009-01-15 22:02 ` [patch 82/85] PCI: Rework default handling of suspend and resume Greg KH
2009-01-15 22:02 ` [patch 83/85] PCI: Suspend and resume PCI Express ports with interrupts disabled Greg KH
2009-01-15 22:02 ` [patch 84/85] PCI: handle PCI state saving " Greg KH
2009-01-15 22:02 ` [patch 85/85] PCI PM: Split PCI Express port suspend-resume Greg KH
2009-01-15 22:54 ` [patch 00/85] 2.6.27.12-stable review Grant Coady
2009-01-15 23:05 ` Greg KH
2009-01-16 23:20 ` Greg KH
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=20090115215909.GI17227@kroah.com \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cavokz@gmail.com \
--cc=cebbert@redhat.com \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=eteo@redhat.com \
--cc=jake@lwn.net \
--cc=jmforbes@linuxtx.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=mkrufky@linuxtv.org \
--cc=rbranco@la.checkpoint.com \
--cc=rdunlap@xenotime.net \
--cc=reviews@ml.cw.f00f.org \
--cc=stable@kernel.org \
--cc=tomas.winkler@intel.com \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=w@1wt.eu \
--cc=yi.zhu@intel.com \
--cc=zwane@arm.linux.org.uk \
/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 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.