--- /dev/null
+From efedf51c866130945b5db755cb58670e60205d83 Mon Sep 17 00:00:00 2001
+Message-ID: <20080604151842.GA30484@wotan.suse.de>
+From: Nick Piggin <npiggin@suse.de>
+Date: Wed, 4 Jun 2008 17:18:42 +0200
+Subject: Add 'rd' alias to new brd ramdisk driver
+
+From: Nick Piggin <npiggin@suse.de>
+
+upstream commit: efedf51c866130945b5db755cb58670e60205d83
+
+Alias brd to rd in the hope of helping legacy users. Suggested by Jan.
+
+Signed-off-by: Nick Piggin <npiggin@suse.de>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/block/brd.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/block/brd.c
++++ b/drivers/block/brd.c
+@@ -392,6 +392,7 @@ module_param(rd_size, int, 0);
+ MODULE_PARM_DESC(rd_size, "Size of each RAM disk in kbytes.");
+ MODULE_LICENSE("GPL");
+ MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR);
++MODULE_ALIAS("rd");
+
+ #ifndef MODULE
+ /* Legacy boot options - nonmodular */
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:33:12 2008
+Date: Sun, 08 Jun 2008 09:26:09 +0200
+Message-ID: <s5hve0k2xri.wl%tiwai@suse.de>
+From: Takashi Iwai <tiwai@suse.de>
+To: stable@kernel.org
+Subject: ALSA: hda - Fix resume of auto-config mode with Realtek codecs
+
+From: Takashi Iwai <tiwai@suse.de>
+
+upstream commit: 07bc76dfa19b10017b518dd9aa1b2719e8c863de
+
+The auto-config mode of Realtek ALC codecs has a bug since 2.6.25
+that it cannot resume properly. The problem was the wrong assignment
+of init_hook that overrides the whole initialization.
+
+Relevant bug reports:
+ http://bugzilla.kernel.org/show_bug.cgi?id=10662
+ https://bugzilla.novell.com/show_bug.cgi?id=385473
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ sound/pci/hda/patch_realtek.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -940,7 +940,6 @@ do_sku:
+ AC_VERB_SET_UNSOLICITED_ENABLE,
+ AC_USRSP_EN | ALC880_HP_EVENT);
+ spec->unsol_event = alc_sku_unsol_event;
+- spec->init_hook = alc_sku_automute;
+ }
+
+ /*
--- /dev/null
+From 3bf0a32e22fedc0b46443699db2d61ac2a883ac4 Mon Sep 17 00:00:00 2001
+Message-Id: <200806061558.42998.mb@bu3sch.de>
+From: Michael Buesch <mb@bu3sch.de>
+Date: Thu, 22 May 2008 16:32:16 +0200
+Subject: b43: Fix controller restart crash
+
+From: Michael Buesch <mb@bu3sch.de>
+
+upstream commit: 3bf0a32e22fedc0b46443699db2d61ac2a883ac4
+
+This fixes a kernel crash on rmmod, in the case where the controller
+was restarted before doing the rmmod.
+
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/net/wireless/b43/main.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -3818,7 +3818,9 @@ static void b43_chip_reset(struct work_s
+ goto out;
+ }
+ }
+- out:
++out:
++ if (err)
++ wl->current_dev = NULL; /* Failed to init the dev. */
+ mutex_unlock(&wl->mutex);
+ if (err)
+ b43err(wl, "Controller restart FAILED\n");
+@@ -3967,9 +3969,11 @@ static void b43_one_core_detach(struct s
+ struct b43_wldev *wldev;
+ struct b43_wl *wl;
+
++ /* Do not cancel ieee80211-workqueue based work here.
++ * See comment in b43_remove(). */
++
+ wldev = ssb_get_drvdata(dev);
+ wl = wldev->wl;
+- cancel_work_sync(&wldev->restart_work);
+ b43_debugfs_remove_device(wldev);
+ b43_wireless_core_detach(wldev);
+ list_del(&wldev->list);
+@@ -4152,6 +4156,10 @@ static void b43_remove(struct ssb_device
+ struct b43_wl *wl = ssb_get_devtypedata(dev);
+ struct b43_wldev *wldev = ssb_get_drvdata(dev);
+
++ /* We must cancel any work here before unregistering from ieee80211,
++ * as the ieee80211 unreg will destroy the workqueue. */
++ cancel_work_sync(&wldev->restart_work);
++
+ B43_WARN_ON(!wl);
+ if (wl->current_dev == wldev)
+ ieee80211_unregister_hw(wl->hw);
--- /dev/null
+From ed1524371716466e9c762808b02601d0d0276a92 Mon Sep 17 00:00:00 2001
+Message-ID: <20080607172910.GD17481@vipunen.hut.fi>
+From: Al Viro <viro@zeniv.linux.org.uk>
+Cc: Sami Liedes <sliedes@cc.hut.fi>
+Date: Tue, 22 Apr 2008 19:51:27 -0400
+Subject: double-free of inode on alloc_file() failure exit in create_write_pipe()
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+upstream commit: ed1524371716466e9c762808b02601d0d0276a92
+
+Duh... Fortunately, the bug is quite recent (post-2.6.25) and, embarrassingly,
+mine ;-/
+
+http://bugzilla.kernel.org/show_bug.cgi?id=10878
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/pipe.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/pipe.c
++++ b/fs/pipe.c
+@@ -988,7 +988,10 @@ struct file *create_write_pipe(void)
+ return f;
+
+ err_dentry:
++ free_pipe_info(inode);
+ dput(dentry);
++ return ERR_PTR(err);
++
+ err_inode:
+ free_pipe_info(inode);
+ iput(inode);
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:44:01 2008
+Date: Sun, 8 Jun 2008 10:56:53 +0200
+From: Willy Tarreau <w@1wt.eu>
+To: stable@kernel.org
+Message-ID: <20080608085653.GA6439@1wt.eu>
+Cc: mszeredi@suse.cz, linux-kernel@vger.kernel.org, mhalcrow@us.ibm.com
+Subject: ecryptfs: add missing lock around notify_change
+
+From: Miklos Szeredi <mszeredi@suse.cz>
+
+upstream commit: 9c3580aa52195699065bc2d7242b1c7e3e6903fa
+
+Callers of notify_change() need to hold i_mutex.
+
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Cc: Michael Halcrow <mhalcrow@us.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/ecryptfs/inode.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -908,7 +908,9 @@ static int ecryptfs_setattr(struct dentr
+ if (ia->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
+ ia->ia_valid &= ~ATTR_MODE;
+
++ mutex_lock(&lower_dentry->d_inode->i_mutex);
+ rc = notify_change(lower_dentry, ia);
++ mutex_unlock(&lower_dentry->d_inode->i_mutex);
+ out:
+ fsstack_copy_attr_all(inode, lower_inode, NULL);
+ return rc;
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:46:08 2008
+Date: Sun, 8 Jun 2008 10:59:23 +0200
+From: Willy Tarreau <w@1wt.eu>
+To: stable@kernel.org
+Message-ID: <20080608085923.GC6439@1wt.eu>
+Content-Disposition: inline
+Cc: hch@infradead.org, mszeredi@suse.cz, linux-kernel@vger.kernel.org, mhalcrow@us.ibm.com
+Subject: ecryptfs: clean up (un)lock_parent
+
+From: Miklos Szeredi <mszeredi@suse.cz>
+
+upstream commit: 8dc4e37362a5dc910d704d52ac6542bfd49ddc2f
+
+dget(dentry->d_parent) --> dget_parent(dentry)
+
+unlock_parent() is racy and unnecessary. Replace single caller with
+unlock_dir().
+
+There are several other suspect uses of ->d_parent in ecryptfs...
+
+Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
+Cc: Michael Halcrow <mhalcrow@us.ibm.com>
+Cc: Christoph Hellwig <hch@infradead.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/ecryptfs/inode.c | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -37,17 +37,11 @@ static struct dentry *lock_parent(struct
+ {
+ struct dentry *dir;
+
+- dir = dget(dentry->d_parent);
++ dir = dget_parent(dentry);
+ mutex_lock_nested(&(dir->d_inode->i_mutex), I_MUTEX_PARENT);
+ return dir;
+ }
+
+-static void unlock_parent(struct dentry *dentry)
+-{
+- mutex_unlock(&(dentry->d_parent->d_inode->i_mutex));
+- dput(dentry->d_parent);
+-}
+-
+ static void unlock_dir(struct dentry *dir)
+ {
+ mutex_unlock(&dir->d_inode->i_mutex);
+@@ -426,8 +420,9 @@ static int ecryptfs_unlink(struct inode
+ int rc = 0;
+ struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
+ struct inode *lower_dir_inode = ecryptfs_inode_to_lower(dir);
++ struct dentry *lower_dir_dentry;
+
+- lock_parent(lower_dentry);
++ lower_dir_dentry = lock_parent(lower_dentry);
+ rc = vfs_unlink(lower_dir_inode, lower_dentry);
+ if (rc) {
+ printk(KERN_ERR "Error in vfs_unlink; rc = [%d]\n", rc);
+@@ -439,7 +434,7 @@ static int ecryptfs_unlink(struct inode
+ dentry->d_inode->i_ctime = dir->i_ctime;
+ d_drop(dentry);
+ out_unlock:
+- unlock_parent(lower_dentry);
++ unlock_dir(lower_dir_dentry);
+ return rc;
+ }
+
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:47:01 2008
+Date: Sun, 8 Jun 2008 11:00:36 +0200
+From: Willy Tarreau <w@1wt.eu>
+To: stable@kernel.org
+Message-ID: <20080608090036.GD6439@1wt.eu>
+Content-Disposition: inline
+Cc: gorcunov@gmail.com, linux-kernel@vger.kernel.org, mhalcrow@us.ibm.com
+Subject: ecryptfs: fix missed mutex_unlock
+
+From: Cyrill Gorcunov <gorcunov@gmail.com>
+
+upstream commit: 71fd5179e8d1d4d503b517e0c5374f7c49540bfc
+
+Cc: Michael Halcrow <mhalcrow@us.ibm.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/ecryptfs/crypto.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/ecryptfs/crypto.c
++++ b/fs/ecryptfs/crypto.c
+@@ -1907,9 +1907,9 @@ int ecryptfs_get_tfm_and_mutex_for_ciphe
+ goto out;
+ }
+ }
+- mutex_unlock(&key_tfm_list_mutex);
+ (*tfm) = key_tfm->key_tfm;
+ (*tfm_mutex) = &key_tfm->key_tfm_mutex;
+ out:
++ mutex_unlock(&key_tfm_list_mutex);
+ return rc;
+ }
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:45:12 2008
+Date: Sun, 8 Jun 2008 10:58:02 +0200
+From: Willy Tarreau <w@1wt.eu>
+To: stable@kernel.org
+Message-ID: <20080608085802.GB6439@1wt.eu>
+Content-Disposition: inline
+Cc: linux-kernel@vger.kernel.org, mhalcrow@us.ibm.com, <iro@ZenIV.linux.org.uk
+Subject: eCryptfs: protect crypt_stat->flags in ecryptfs_open()
+
+From: Michael Halcrow <mhalcrow@us.ibm.com>
+
+upstream commit: 2f9b12a31fcb738ea8c9eb0d4ddf906c6f1d696c
+
+Make sure crypt_stat->flags is protected with a lock in ecryptfs_open().
+
+Signed-off-by: Michael Halcrow <mhalcrow@us.ibm.com>
+Cc: Al Viro <viro@ZenIV.linux.org.uk>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/ecryptfs/file.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/ecryptfs/file.c
++++ b/fs/ecryptfs/file.c
+@@ -195,7 +195,9 @@ static int ecryptfs_open(struct inode *i
+ file, ecryptfs_inode_to_private(inode)->lower_file);
+ if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) {
+ ecryptfs_printk(KERN_DEBUG, "This is a directory\n");
++ mutex_lock(&crypt_stat->cs_mutex);
+ crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
++ mutex_unlock(&crypt_stat->cs_mutex);
+ rc = 0;
+ goto out;
+ }
--- /dev/null
+From eb4e545d4ac82d9018487edb4419b33b9930c857 Mon Sep 17 00:00:00 2001
+Message-ID: <20080606093225.GA15735@ds.suse.cz>
+From: David Sterba <dsterba@suse.cz>
+Date: Fri, 6 Jun 2008 10:56:35 +0200
+Subject: ipwireless: Fix blocked sending
+
+From: David Sterba <dsterba@suse.cz>
+
+upstream commit: eb4e545d4ac82d9018487edb4419b33b9930c857
+
+Packet sending is driven by two flags, tx_ready and tx_queued.
+It was possible, that there were queued data for sending and
+hardware was flagged as blocked but in fact it was not.
+
+The tx_queued was indicator but should be really a counter else
+first fragmented packet resets tx_queued flag, but there may be
+pending packets which do not get sent.
+
+New semantics:
+tx_ready - set, if hw is ready to send packet, no packet is being
+ transferred right now
+ set the flag right at the place where data are copied
+ into hw memory and not earlier without checking if it
+ was succesful
+tx_queued - count of enqueued packets, including fragments
+
+Tested-by: Michal Rokos <michal.rokos@gmail.com>
+Signed-off-by: David Sterba <dsterba@suse.cz>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/char/pcmcia/ipwireless/hardware.c | 20 ++++++++++++--------
+ 1 file changed, 12 insertions(+), 8 deletions(-)
+
+--- a/drivers/char/pcmcia/ipwireless/hardware.c
++++ b/drivers/char/pcmcia/ipwireless/hardware.c
+@@ -251,10 +251,11 @@ struct ipw_hardware {
+ int init_loops;
+ struct timer_list setup_timer;
+
++ /* Flag if hw is ready to send next packet */
+ int tx_ready;
+- struct list_head tx_queue[NL_NUM_OF_PRIORITIES];
+- /* True if any packets are queued for transmission */
++ /* Count of pending packets to be sent */
+ int tx_queued;
++ struct list_head tx_queue[NL_NUM_OF_PRIORITIES];
+
+ int rx_bytes_queued;
+ struct list_head rx_queue;
+@@ -430,6 +431,8 @@ static int do_send_fragment(struct ipw_h
+
+ spin_lock_irqsave(&hw->spinlock, flags);
+
++ hw->tx_ready = 0;
++
+ if (hw->hw_version == HW_VERSION_1) {
+ outw((unsigned short) length, hw->base_port + IODWR);
+
+@@ -518,6 +521,7 @@ static int do_send_packet(struct ipw_har
+
+ spin_lock_irqsave(&hw->spinlock, flags);
+ list_add(&packet->queue, &hw->tx_queue[0]);
++ hw->tx_queued++;
+ spin_unlock_irqrestore(&hw->spinlock, flags);
+ } else {
+ if (packet->packet_callback)
+@@ -975,12 +979,10 @@ static int send_pending_packet(struct ip
+ unsigned long flags;
+
+ spin_lock_irqsave(&hw->spinlock, flags);
+- if (hw->tx_queued && hw->tx_ready != 0) {
++ if (hw->tx_queued && hw->tx_ready) {
+ int priority;
+ struct ipw_tx_packet *packet = NULL;
+
+- hw->tx_ready--;
+-
+ /* Pick a packet */
+ for (priority = 0; priority < priority_limit; priority++) {
+ if (!list_empty(&hw->tx_queue[priority])) {
+@@ -989,6 +991,7 @@ static int send_pending_packet(struct ip
+ struct ipw_tx_packet,
+ queue);
+
++ hw->tx_queued--;
+ list_del(&packet->queue);
+
+ break;
+@@ -999,6 +1002,7 @@ static int send_pending_packet(struct ip
+ spin_unlock_irqrestore(&hw->spinlock, flags);
+ return 0;
+ }
++
+ spin_unlock_irqrestore(&hw->spinlock, flags);
+
+ /* Send */
+@@ -1089,7 +1093,7 @@ static irqreturn_t ipwireless_handle_v1_
+ if (irqn & IR_TXINTR) {
+ ack |= IR_TXINTR;
+ spin_lock_irqsave(&hw->spinlock, flags);
+- hw->tx_ready++;
++ hw->tx_ready = 1;
+ spin_unlock_irqrestore(&hw->spinlock, flags);
+ }
+ /* Received data */
+@@ -1196,7 +1200,7 @@ static irqreturn_t ipwireless_handle_v2_
+ if (memrxdone & MEMRX_RX_DONE) {
+ writew(0, &hw->memory_info_regs->memreg_rx_done);
+ spin_lock_irqsave(&hw->spinlock, flags);
+- hw->tx_ready++;
++ hw->tx_ready = 1;
+ spin_unlock_irqrestore(&hw->spinlock, flags);
+ tx = 1;
+ }
+@@ -1260,7 +1264,7 @@ static void send_packet(struct ipw_hardw
+
+ spin_lock_irqsave(&hw->spinlock, flags);
+ list_add_tail(&packet->queue, &hw->tx_queue[priority]);
+- hw->tx_queued = 1;
++ hw->tx_queued++;
+ spin_unlock_irqrestore(&hw->spinlock, flags);
+
+ flush_packets_to_hw(hw);
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:53:35 2008
+Message-ID: <484AD2DA.50704@am.sony.com>
+Date: Sat, 7 Jun 2008 11:26:34 -0700
+From: Geoff Levand <geoffrey.levand@am.sony.com>
+To: stable@kernel.org
+Cc: Chris Wright <chrisw@sous-sol.org>, Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
+Subject: fbdev: export symbol fb_mode_option
+
+From: Geoff Levand <geoffrey.levand@am.sony.com>
+
+upstream commit: 659179b28f15ab1b1db5f8767090f5e728f115a1
+
+Frame buffer and mode setting drivers can be built as modules,
+so fb_mode_option needs to be exported to support these.
+
+Prevents this error:
+
+ ERROR: "fb_mode_option" [drivers/ps3/ps3av_mod.ko] undefined!
+
+Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
+Acked-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
+Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>SC
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/video/modedb.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/video/modedb.c
++++ b/drivers/video/modedb.c
+@@ -28,6 +28,7 @@
+ #endif
+
+ const char *fb_mode_option;
++EXPORT_SYMBOL_GPL(fb_mode_option);
+
+ /*
+ * Standard video mode definitions (taken from XFree86)
--- /dev/null
+b43-fix-controller-restart-crash.patch
+ipwireless-fix-blocked-sending.patch
+add-rd-alias-to-new-brd-ramdisk-driver.patch
+ssb-fix-context-assertion-in-ssb_pcicore_dev_irqvecs_enable.patch
+double-free-of-inode-on-alloc_file-failure-exit-in-create_write_pipe.patch
+alsa-hda-fix-resume-of-auto-config-mode-with-realtek-codecs.patch
+sound-emu10k1-fix-system-hang-with-audigy2-zs-notebook-pcmcia-card.patch
+ecryptfs-add-missing-lock-around-notify_change.patch
+ecryptfs-protect-crypt_stat-flags-in-ecryptfs_open.patch
+ecryptfs-clean-up-lock_parent.patch
+ecryptfs-fix-missed-mutex_unlock.patch
+ps3-fix-frame-buffer-build-error.patch
+sunhv-fix-locking-in-non-paged-i-o-case.patch
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:34:21 2008
+Date: Sun, 08 Jun 2008 09:27:26 +0200
+Message-ID: <s5htzg42xpd.wl%tiwai@suse.de>
+From: Takashi Iwai <tiwai@suse.de>
+To: stable@kernel.org
+Subject: sound: emu10k1 - fix system hang with Audigy2 ZS Notebook PCMCIA card
+
+From: Jaroslav Franek <jarin.franek@post.cz>
+
+upstream commit: 868e15dbd2940f9453b4399117686f408dc77299
+
+When the Linux kernel is compiled with CONFIG_DEBUG_SHIRQ=y,
+the Soundblaster Audigy2 ZS Notebook PCMCIA card causes the
+system hang during boot (udev stage) or when the card is hot-plug.
+The CONFIG_DEBUG_SHIRQ flag is by default 'y' with all Fedora
+kernels since 2.6.23. The problem was reported as
+https://bugzilla.redhat.com/show_bug.cgi?id=326411
+
+The issue was hunted down to the snd_emu10k1_create() routine:
+
+/* pseudo-code */
+snd_emu10k1_create(...) {
+ ...
+ request_irq(... IRQF_SHARED ...) {
+ register the irq handler
+ #ifdef CONFIG_DEBUG_SHIRQ
+ call the irq handler: snd_emu10k1_interrupt() {
+ poll I/O port // <---- !! system hangs
+ ...
+ }
+ #endif
+ }
+ ...
+ snd_emu10k1_cardbus_init(...) {
+ initialize I/O ports
+ }
+ ...
+}
+
+The early access to I/O port in the interrupt handler causes
+the freeze. Obviously it is necessary to init the I/O ports
+before accessing them. This patch moves the registration of
+the irq handler after the initialization of the I/O ports.
+
+Signed-off-by: Jaroslav Franek <jarin.franek@post.cz>
+Acked-by: James Courtier-Dutton <James@superbug.co.uk>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ sound/pci/emu10k1/emu10k1_main.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- a/sound/pci/emu10k1/emu10k1_main.c
++++ b/sound/pci/emu10k1/emu10k1_main.c
+@@ -1817,13 +1817,6 @@ int __devinit snd_emu10k1_create(struct
+ }
+ emu->port = pci_resource_start(pci, 0);
+
+- if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED,
+- "EMU10K1", emu)) {
+- err = -EBUSY;
+- goto error;
+- }
+- emu->irq = pci->irq;
+-
+ emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
+ if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+ 32 * 1024, &emu->ptb_pages) < 0) {
+@@ -1886,6 +1879,14 @@ int __devinit snd_emu10k1_create(struct
+ emu->fx8010.etram_pages.area = NULL;
+ emu->fx8010.etram_pages.bytes = 0;
+
++ /* irq handler must be registered after I/O ports are activated */
++ if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED,
++ "EMU10K1", emu)) {
++ err = -EBUSY;
++ goto error;
++ }
++ emu->irq = pci->irq;
++
+ /*
+ * Init to 0x02109204 :
+ * Clock accuracy = 0 (1000ppm)
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:26:37 2008
+From: Michael Buesch <mb@bu3sch.de>
+To: stable@kernel.org
+Date: Sat, 7 Jun 2008 17:57:37 +0200
+Content-Disposition: inline
+Message-Id: <200806071757.38139.mb@bu3sch.de>
+Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org
+Subject: ssb: Fix context assertion in ssb_pcicore_dev_irqvecs_enable
+
+From: Michael Buesch <mb@bu3sch.de>
+
+upstream commit: a3bafeedfff2ac5fa0a316bea4570e27900b6fcc
+
+This fixes a context assertion in ssb that makes b44 print
+out warnings on resume.
+
+This fixes the following kernel oops:
+http://www.kerneloops.org/oops.php?number=12732
+http://www.kerneloops.org/oops.php?number=11410
+
+Signed-off-by: Michael Buesch <mb@bu3sch.de>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+
+---
+ drivers/ssb/driver_pcicore.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/ssb/driver_pcicore.c
++++ b/drivers/ssb/driver_pcicore.c
+@@ -519,12 +519,12 @@ int ssb_pcicore_dev_irqvecs_enable(struc
+ int err = 0;
+ u32 tmp;
+
+- might_sleep();
+-
+ if (!pdev)
+ goto out;
+ bus = pdev->bus;
+
++ might_sleep_if(pdev->id.coreid != SSB_DEV_PCI);
++
+ /* Enable interrupts for this device. */
+ if (bus->host_pci &&
+ ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) {
--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 9 13:54:47 2008
+Date: Mon, 09 Jun 2008 13:49:22 -0700 (PDT)
+Message-Id: <20080609.134922.94280325.davem@davemloft.net>
+To: stable@kernel.org
+From: David Miller <davem@davemloft.net>
+Subject: sunhv: Fix locking in non-paged I/O case.
+
+From: David S. Miller <davem@davemloft.net>
+
+[ upstream commit: 3651751fff44ede58f65cbb1e39242139ead251b ]
+
+This causes the lock to be taken twice, thus resulting in
+a deadlock.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/serial/sunhv.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/drivers/serial/sunhv.c
++++ b/drivers/serial/sunhv.c
+@@ -499,7 +499,6 @@ static void sunhv_console_write_bychar(s
+ } else
+ spin_lock(&port->lock);
+
+- spin_lock_irqsave(&port->lock, flags);
+ for (i = 0; i < n; i++) {
+ if (*s == '\n')
+ sunhv_console_putchar(port, '\r');