]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Fri, 12 Feb 2010 23:31:59 +0000 (15:31 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 12 Feb 2010 23:31:59 +0000 (15:31 -0800)
13 files changed:
queue-2.6.32/ahci-add-acer-g725-to-broken-suspend-list.patch [new file with mode: 0644]
queue-2.6.32/alsa-hda-improved-macbook-pro-5-1-5-2-support.patch [new file with mode: 0644]
queue-2.6.32/befs-fix-leak.patch [new file with mode: 0644]
queue-2.6.32/call-flush_dcache_page-after-pio-data-transfers-in-libata-sff.c.patch [new file with mode: 0644]
queue-2.6.32/dst-call-cond_resched-in-dst_gc_task.patch [new file with mode: 0644]
queue-2.6.32/pktgen-fix-freezing-problem.patch [new file with mode: 0644]
queue-2.6.32/rtc-fm3130-add-missing-braces.patch [new file with mode: 0644]
queue-2.6.32/series
queue-2.6.32/staging-fix-rtl8187se-compilation-errors-with-mac80211.patch [new file with mode: 0644]
queue-2.6.32/tg3-fix-5906-transmit-hangs.patch [new file with mode: 0644]
queue-2.6.32/x86-amd-iommu-fix-deassignment-of-a-device-from-the-pt_domain.patch [new file with mode: 0644]
queue-2.6.32/x86-amd-iommu-fix-iommu-api-initialization-for-iommu-pt.patch [new file with mode: 0644]
queue-2.6.32/x86-re-get-cfg_new-in-case-reuse-move-irq_desc.patch [new file with mode: 0644]

diff --git a/queue-2.6.32/ahci-add-acer-g725-to-broken-suspend-list.patch b/queue-2.6.32/ahci-add-acer-g725-to-broken-suspend-list.patch
new file mode 100644 (file)
index 0000000..694cbfb
--- /dev/null
@@ -0,0 +1,54 @@
+From cedc9bf906dae044443d403371c887affdb44168 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Thu, 28 Jan 2010 16:04:15 +0900
+Subject: ahci: add Acer G725 to broken suspend list
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Tejun Heo <tj@kernel.org>
+
+commit cedc9bf906dae044443d403371c887affdb44168 upstream.
+
+Acer G725 shares the same suspend problem with the HP laptops which
+lose ATA devices on resume.  New firmware which fixes the problem is
+already available.  Add G725 with old firmwares to the broken suspend
+list.
+
+This problem has been reported in bko#15104.
+
+  http://bugzilla.kernel.org/show_bug.cgi?id=15104
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: Jani-Matti Hätinen <jani-matti.hatinen@iki.fi>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/ahci.c |   15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -2868,6 +2868,21 @@ static bool ahci_broken_suspend(struct p
+                       },
+                       .driver_data = "F.23",  /* cutoff BIOS version */
+               },
++              /*
++               * Acer eMachines G725 has the same problem.  BIOS
++               * V1.03 is known to be broken.  V3.04 is known to
++               * work.  Inbetween, there are V1.06, V2.06 and V3.03
++               * that we don't have much idea about.  For now,
++               * blacklist anything older than V3.04.
++               */
++              {
++                      .ident = "G725",
++                      .matches = {
++                              DMI_MATCH(DMI_SYS_VENDOR, "eMachines"),
++                              DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"),
++                      },
++                      .driver_data = "V3.04", /* cutoff BIOS version */
++              },
+               { }     /* terminate list */
+       };
+       const struct dmi_system_id *dmi = dmi_first_match(sysids);
diff --git a/queue-2.6.32/alsa-hda-improved-macbook-pro-5-1-5-2-support.patch b/queue-2.6.32/alsa-hda-improved-macbook-pro-5-1-5-2-support.patch
new file mode 100644 (file)
index 0000000..b0b3ac5
--- /dev/null
@@ -0,0 +1,79 @@
+From a76221d47ef2b73ff16c0fef00a784026308ea02 Mon Sep 17 00:00:00 2001
+From: Alex Murray <murray.alex@gmail.com>
+Date: Wed, 13 Jan 2010 23:15:03 +1030
+Subject: ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support
+
+From: Alex Murray <murray.alex@gmail.com>
+
+commit a76221d47ef2b73ff16c0fef00a784026308ea02 upstream.
+
+This patch adds support for automatically muting the speakers when headphones
+are inserted, as well as relabelling the headphone widgets from the
+non-standard "HP" to the standard "Headphone" for the mb5 model.
+
+Signed-off-by: Alex Murray <murray.alex@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/patch_realtek.c |   28 ++++++++++++++++++++++++++--
+ 1 file changed, 26 insertions(+), 2 deletions(-)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -7042,8 +7042,8 @@ static struct snd_kcontrol_new alc885_mb
+       HDA_BIND_MUTE   ("Surround Playback Switch", 0x0d, 0x02, HDA_INPUT),
+       HDA_CODEC_VOLUME("LFE Playback Volume", 0x0e, 0x00, HDA_OUTPUT),
+       HDA_BIND_MUTE   ("LFE Playback Switch", 0x0e, 0x02, HDA_INPUT),
+-      HDA_CODEC_VOLUME("HP Playback Volume", 0x0f, 0x00, HDA_OUTPUT),
+-      HDA_BIND_MUTE   ("HP Playback Switch", 0x0f, 0x02, HDA_INPUT),
++      HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0f, 0x00, HDA_OUTPUT),
++      HDA_BIND_MUTE   ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT),
+       HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
+       HDA_CODEC_MUTE  ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
+       HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT),
+@@ -7430,6 +7430,7 @@ static struct hda_verb alc885_mb5_init_v
+       {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
+       {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
+       {0x14, AC_VERB_SET_CONNECT_SEL, 0x03},
++      {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
+       /* Front Mic pin: input vref at 80% */
+       {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
+       {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
+@@ -7554,6 +7555,27 @@ static void alc885_mbp3_setup(struct hda
+       spec->autocfg.speaker_pins[0] = 0x14;
+ }
++static void alc885_mb5_automute(struct hda_codec *codec)
++{
++      unsigned int present;
++
++      present = snd_hda_codec_read(codec, 0x14, 0,
++                                   AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
++      snd_hda_codec_amp_stereo(codec, 0x18, HDA_OUTPUT, 0,
++                               HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
++      snd_hda_codec_amp_stereo(codec, 0x1a, HDA_OUTPUT, 0,
++                               HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
++
++}
++
++static void alc885_mb5_unsol_event(struct hda_codec *codec,
++                                  unsigned int res)
++{
++      /* Headphone insertion or removal. */
++      if ((res >> 26) == ALC880_HP_EVENT)
++              alc885_mb5_automute(codec);
++}
++
+ static struct hda_verb alc882_targa_verbs[] = {
+       {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
+@@ -8996,6 +9018,8 @@ static struct alc_config_preset alc882_p
+               .input_mux = &mb5_capture_source,
+               .dig_out_nid = ALC882_DIGOUT_NID,
+               .dig_in_nid = ALC882_DIGIN_NID,
++              .unsol_event = alc885_mb5_unsol_event,
++              .init_hook = alc885_mb5_automute,
+       },
+       [ALC885_MACPRO] = {
+               .mixers = { alc882_macpro_mixer },
diff --git a/queue-2.6.32/befs-fix-leak.patch b/queue-2.6.32/befs-fix-leak.patch
new file mode 100644 (file)
index 0000000..219a2ec
--- /dev/null
@@ -0,0 +1,26 @@
+From 8dd5ca532c2d2c2b85f16bc038ebfff05b8853e1 Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Thu, 28 Jan 2010 22:11:38 -0500
+Subject: befs: fix leak
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 8dd5ca532c2d2c2b85f16bc038ebfff05b8853e1 upstream.
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/befs/linuxvfs.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/fs/befs/linuxvfs.c
++++ b/fs/befs/linuxvfs.c
+@@ -873,6 +873,7 @@ befs_fill_super(struct super_block *sb,
+       brelse(bh);
+       unacquire_priv_sbp:
++      kfree(befs_sb->mount_opts.iocharset);
+       kfree(sb->s_fs_info);
+       unacquire_none:
diff --git a/queue-2.6.32/call-flush_dcache_page-after-pio-data-transfers-in-libata-sff.c.patch b/queue-2.6.32/call-flush_dcache_page-after-pio-data-transfers-in-libata-sff.c.patch
new file mode 100644 (file)
index 0000000..1649e1f
--- /dev/null
@@ -0,0 +1,35 @@
+From 2d68b7fe55d9e19a8a868224ed0dfd6526568521 Mon Sep 17 00:00:00 2001
+From: Catalin Marinas <catalin.marinas@arm.com>
+Date: Thu, 4 Feb 2010 01:04:50 -0500
+Subject: [libata] Call flush_dcache_page after PIO data transfers in libata-sff.c
+
+From: Catalin Marinas <catalin.marinas@arm.com>
+
+commit 2d68b7fe55d9e19a8a868224ed0dfd6526568521 upstream.
+
+flush_dcache_page() must be called after (!ATA_TFLAG_WRITE) the
+data copying to avoid D-cache aliasing with user space or I-D cache
+coherency issues (when reading data from an ATA device using PIO,
+the kernel dirties the D-cache but there is no flush_dcache_page()
+required on Harvard architectures).
+
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/libata-sff.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/ata/libata-sff.c
++++ b/drivers/ata/libata-sff.c
+@@ -893,6 +893,9 @@ static void ata_pio_sector(struct ata_qu
+                                      do_write);
+       }
++      if (!do_write)
++              flush_dcache_page(page);
++
+       qc->curbytes += qc->sect_size;
+       qc->cursg_ofs += qc->sect_size;
diff --git a/queue-2.6.32/dst-call-cond_resched-in-dst_gc_task.patch b/queue-2.6.32/dst-call-cond_resched-in-dst_gc_task.patch
new file mode 100644 (file)
index 0000000..b0c1a4b
--- /dev/null
@@ -0,0 +1,44 @@
+From 2fc1b5dd99f66d93ffc23fd8df82d384c1a354c8 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <eric.dumazet@gmail.com>
+Date: Mon, 8 Feb 2010 15:00:39 -0800
+Subject: dst: call cond_resched() in dst_gc_task()
+
+From: Eric Dumazet <eric.dumazet@gmail.com>
+
+commit 2fc1b5dd99f66d93ffc23fd8df82d384c1a354c8 upstream.
+
+Kernel bugzilla #15239
+
+On some workloads, it is quite possible to get a huge dst list to
+process in dst_gc_task(), and trigger soft lockup detection.
+
+Fix is to call cond_resched(), as we run in process context.
+
+Reported-by: Pawel Staszewski <pstaszewski@itcare.pl>
+Tested-by: Pawel Staszewski <pstaszewski@itcare.pl>
+Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/core/dst.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/net/core/dst.c
++++ b/net/core/dst.c
+@@ -17,6 +17,7 @@
+ #include <linux/string.h>
+ #include <linux/types.h>
+ #include <net/net_namespace.h>
++#include <linux/sched.h>
+ #include <net/dst.h>
+@@ -79,6 +80,7 @@ loop:
+       while ((dst = next) != NULL) {
+               next = dst->next;
+               prefetch(&next->next);
++              cond_resched();
+               if (likely(atomic_read(&dst->__refcnt))) {
+                       last->next = dst;
+                       last = dst;
diff --git a/queue-2.6.32/pktgen-fix-freezing-problem.patch b/queue-2.6.32/pktgen-fix-freezing-problem.patch
new file mode 100644 (file)
index 0000000..03e2760
--- /dev/null
@@ -0,0 +1,33 @@
+From 1b3f720bf033fde1fbb6231f9b156b918c5f68d8 Mon Sep 17 00:00:00 2001
+From: Rafael J. Wysocki <rjw@sisk.pl>
+Date: Thu, 4 Feb 2010 14:00:41 -0800
+Subject: pktgen: Fix freezing problem
+
+From: Rafael J. Wysocki <rjw@sisk.pl>
+
+commit 1b3f720bf033fde1fbb6231f9b156b918c5f68d8 upstream.
+
+Add missing try_to_freeze() to one of the pktgen_thread_worker() code
+paths so that it doesn't block suspend/hibernation.
+
+Fixes http://bugzilla.kernel.org/show_bug.cgi?id=15006
+
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Reported-and-tested-by: Ciprian Dorin Craciun <ciprian.craciun@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/core/pktgen.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/core/pktgen.c
++++ b/net/core/pktgen.c
+@@ -3516,6 +3516,7 @@ static int pktgen_thread_worker(void *ar
+                       wait_event_interruptible_timeout(t->queue,
+                                                        t->control != 0,
+                                                        HZ/10);
++                      try_to_freeze();
+                       continue;
+               }
diff --git a/queue-2.6.32/rtc-fm3130-add-missing-braces.patch b/queue-2.6.32/rtc-fm3130-add-missing-braces.patch
new file mode 100644 (file)
index 0000000..660b67a
--- /dev/null
@@ -0,0 +1,45 @@
+From f4b5162820de60204afa5c8639335f4931b7fb0c Mon Sep 17 00:00:00 2001
+From: Sergey Matyukevich <geomatsi@gmail.com>
+Date: Tue, 2 Feb 2010 13:43:59 -0800
+Subject: rtc-fm3130: add missing braces
+
+From: Sergey Matyukevich <geomatsi@gmail.com>
+
+commit f4b5162820de60204afa5c8639335f4931b7fb0c upstream.
+
+Add missing braces for multiline 'if' statements in fm3130_probe.
+
+Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
+Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
+Cc: Sergey Lapin <slapin@ossfans.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+--- a/drivers/rtc/rtc-fm3130.c
++++ b/drivers/rtc/rtc-fm3130.c
+@@ -376,20 +376,22 @@ static int __devinit fm3130_probe(struct i2c_client *client,
+       }
+       /* Disabling calibration mode */
+-      if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL)
++      if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) {
+               i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,
+                       fm3130->regs[FM3130_RTC_CONTROL] &
+                               ~(FM3130_RTC_CONTROL_BIT_CAL));
+               dev_warn(&client->dev, "Disabling calibration mode!\n");
++      }
+       /* Disabling read and write modes */
+       if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE ||
+-          fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ)
++          fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) {
+               i2c_smbus_write_byte_data(client, FM3130_RTC_CONTROL,
+                       fm3130->regs[FM3130_RTC_CONTROL] &
+                               ~(FM3130_RTC_CONTROL_BIT_READ |
+                                       FM3130_RTC_CONTROL_BIT_WRITE));
+               dev_warn(&client->dev, "Disabling READ or WRITE mode!\n");
++      }
+       /* oscillator off?  turn it on, so clock can tick. */
+       if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN)
index 048bdd51c3a095e9dd2d89b6d41bfe85c1a627df..be26f0d334f50c1ce32898a22bd722f645a27472 100644 (file)
@@ -62,3 +62,15 @@ devmem-fix-kmem-write-bug-on-memory-holes.patch
 scsi-mptfusion-mptscsih_abort-return-value-should-be-success-instead-of-value-0.patch
 sh-couple-kernel-and-user-write-page-perm-bits-for-config_x2tlb.patch
 alsa-hda-use-warn_on_once-for-zero-division-detection.patch
+dst-call-cond_resched-in-dst_gc_task.patch
+alsa-hda-improved-macbook-pro-5-1-5-2-support.patch
+befs-fix-leak.patch
+rtc-fm3130-add-missing-braces.patch
+call-flush_dcache_page-after-pio-data-transfers-in-libata-sff.c.patch
+ahci-add-acer-g725-to-broken-suspend-list.patch
+pktgen-fix-freezing-problem.patch
+x86-amd-iommu-fix-iommu-api-initialization-for-iommu-pt.patch
+x86-amd-iommu-fix-deassignment-of-a-device-from-the-pt_domain.patch
+x86-re-get-cfg_new-in-case-reuse-move-irq_desc.patch
+tg3-fix-5906-transmit-hangs.patch
+staging-fix-rtl8187se-compilation-errors-with-mac80211.patch
diff --git a/queue-2.6.32/staging-fix-rtl8187se-compilation-errors-with-mac80211.patch b/queue-2.6.32/staging-fix-rtl8187se-compilation-errors-with-mac80211.patch
new file mode 100644 (file)
index 0000000..93f403d
--- /dev/null
@@ -0,0 +1,204 @@
+From df574b8ecfb3a84af96229f336a6be88ca4a7055 Mon Sep 17 00:00:00 2001
+From: George Kadianakis <desnacked@gmail.com>
+Date: Thu, 17 Dec 2009 01:16:00 +0200
+Subject: Staging: fix rtl8187se compilation errors with mac80211
+
+From: George Kadianakis <desnacked@gmail.com>
+
+commit df574b8ecfb3a84af96229f336a6be88ca4a7055 upstream.
+
+This patch fixes compilation problems that were caused by function
+naming conflicts between the rtl8187se driver and the mac80211 stack.
+
+Signed-off-by: George Kadianakis <desnacked at gmail.com>
+Cc: maximilian attems <max@stro.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rtl8187se/ieee80211/ieee80211.h         |   10 +++++-----
+ drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c      |    2 +-
+ drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c |   14 +++++++-------
+ drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c      |    2 +-
+ drivers/staging/rtl8187se/r8180_core.c                  |   10 +++++-----
+ drivers/staging/rtl8187se/r8180_wx.c                    |    2 +-
+ 6 files changed, 20 insertions(+), 20 deletions(-)
+
+--- a/drivers/staging/rtl8187se/ieee80211/ieee80211.h
++++ b/drivers/staging/rtl8187se/ieee80211/ieee80211.h
+@@ -1318,13 +1318,13 @@ extern int ieee80211_encrypt_fragment(
+       struct sk_buff *frag,
+       int hdr_len);
+-extern int ieee80211_xmit(struct sk_buff *skb,
++extern int ieee80211_rtl_xmit(struct sk_buff *skb,
+                         struct net_device *dev);
+ extern void ieee80211_txb_free(struct ieee80211_txb *);
+ /* ieee80211_rx.c */
+-extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
++extern int ieee80211_rtl_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
+                       struct ieee80211_rx_stats *rx_stats);
+ extern void ieee80211_rx_mgt(struct ieee80211_device *ieee,
+                            struct ieee80211_hdr_4addr *header,
+@@ -1376,8 +1376,8 @@ extern void ieee80211_stop_protocol(stru
+ extern void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee);
+ extern void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee);
+ extern void ieee80211_reset_queue(struct ieee80211_device *ieee);
+-extern void ieee80211_wake_queue(struct ieee80211_device *ieee);
+-extern void ieee80211_stop_queue(struct ieee80211_device *ieee);
++extern void ieee80211_rtl_wake_queue(struct ieee80211_device *ieee);
++extern void ieee80211_rtl_stop_queue(struct ieee80211_device *ieee);
+ extern struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee);
+ extern void ieee80211_start_send_beacons(struct ieee80211_device *ieee);
+ extern void ieee80211_stop_send_beacons(struct ieee80211_device *ieee);
+@@ -1385,7 +1385,7 @@ extern int ieee80211_wpa_supplicant_ioct
+ extern void notify_wx_assoc_event(struct ieee80211_device *ieee);
+ extern void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success);
+ extern void SendDisassociation(struct ieee80211_device *ieee,u8* asSta,u8 asRsn);
+-extern void ieee80211_start_scan(struct ieee80211_device *ieee);
++extern void ieee80211_rtl_start_scan(struct ieee80211_device *ieee);
+ //Add for RF power on power off by lizhaoming 080512
+ extern void SendDisassociation(struct ieee80211_device *ieee,
+--- a/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c
++++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c
+@@ -470,7 +470,7 @@ drop:
+ /* All received frames are sent to this function. @skb contains the frame in
+  * IEEE 802.11 format, i.e., in the format it was sent over air.
+  * This function is called only as a tasklet (software IRQ). */
+-int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
++int ieee80211_rtl_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
+                struct ieee80211_rx_stats *rx_stats)
+ {
+       struct net_device *dev = ieee->dev;
+--- a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c
++++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c
+@@ -689,7 +689,7 @@ void ieee80211_stop_scan(struct ieee8021
+ }
+ /* called with ieee->lock held */
+-void ieee80211_start_scan(struct ieee80211_device *ieee)
++void ieee80211_rtl_start_scan(struct ieee80211_device *ieee)
+ {
+       if(IS_DOT11D_ENABLE(ieee) )
+       {
+@@ -1196,7 +1196,7 @@ void ieee80211_associate_step1(struct ie
+       }
+ }
+-void ieee80211_auth_challenge(struct ieee80211_device *ieee, u8 *challenge, int chlen)
++void ieee80211_rtl_auth_challenge(struct ieee80211_device *ieee, u8 *challenge, int chlen)
+ {
+       u8 *c;
+       struct sk_buff *skb;
+@@ -1898,7 +1898,7 @@ associate_complete:
+                                                               ieee80211_associate_step2(ieee);
+                                                       }else{
+-                                                              ieee80211_auth_challenge(ieee, challenge, chlen);
++                                                              ieee80211_rtl_auth_challenge(ieee, challenge, chlen);
+                                                       }
+                                               }else{
+                                                       ieee->softmac_stats.rx_auth_rs_err++;
+@@ -2047,7 +2047,7 @@ void ieee80211_reset_queue(struct ieee80
+ }
+-void ieee80211_wake_queue(struct ieee80211_device *ieee)
++void ieee80211_rtl_wake_queue(struct ieee80211_device *ieee)
+ {
+       unsigned long flags;
+@@ -2089,7 +2089,7 @@ exit :
+ }
+-void ieee80211_stop_queue(struct ieee80211_device *ieee)
++void ieee80211_rtl_stop_queue(struct ieee80211_device *ieee)
+ {
+       //unsigned long flags;
+       //spin_lock_irqsave(&ieee->lock,flags);
+@@ -2301,7 +2301,7 @@ void ieee80211_start_bss(struct ieee8021
+ //#else
+       if (ieee->state == IEEE80211_NOLINK){
+               ieee->actscanning = true;
+-              ieee80211_start_scan(ieee);
++              ieee80211_rtl_start_scan(ieee);
+       }
+ //#endif
+       spin_unlock_irqrestore(&ieee->lock, flags);
+@@ -2357,7 +2357,7 @@ void ieee80211_associate_retry_wq(struct
+       if(ieee->state == IEEE80211_NOLINK){
+               ieee->beinretry = false;
+               ieee->actscanning = true;
+-              ieee80211_start_scan(ieee);
++              ieee80211_rtl_start_scan(ieee);
+       }
+       //YJ,add,080828, notify os here
+       if(ieee->state == IEEE80211_NOLINK)
+--- a/drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c
++++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c
+@@ -305,7 +305,7 @@ ieee80211_classify(struct sk_buff *skb,
+ }
+ /* SKBs are added to the ieee->tx_queue. */
+-int ieee80211_xmit(struct sk_buff *skb,
++int ieee80211_rtl_xmit(struct sk_buff *skb,
+                  struct net_device *dev)
+ {
+       struct ieee80211_device *ieee = netdev_priv(dev);
+--- a/drivers/staging/rtl8187se/r8180_core.c
++++ b/drivers/staging/rtl8187se/r8180_core.c
+@@ -1830,7 +1830,7 @@ void rtl8180_rx(struct net_device *dev)
+                       if(priv->rx_skb->len > 4)
+                               skb_trim(priv->rx_skb,priv->rx_skb->len-4);
+ #ifndef RX_DONT_PASS_UL
+-                      if(!ieee80211_rx(priv->ieee80211,
++                      if(!ieee80211_rtl_rx(priv->ieee80211,
+                                        priv->rx_skb, &stats)){
+ #endif // RX_DONT_PASS_UL
+@@ -1936,11 +1936,11 @@ rate)
+       if (!check_nic_enought_desc(dev, priority)){
+               DMESGW("Error: no descriptor left by previous TX (avail %d) ",
+                       get_curr_tx_free_desc(dev, priority));
+-              ieee80211_stop_queue(priv->ieee80211);
++              ieee80211_rtl_stop_queue(priv->ieee80211);
+       }
+       rtl8180_tx(dev, skb->data, skb->len, priority, morefrag,0,rate);
+       if (!check_nic_enought_desc(dev, priority))
+-              ieee80211_stop_queue(priv->ieee80211);
++              ieee80211_rtl_stop_queue(priv->ieee80211);
+       spin_unlock_irqrestore(&priv->tx_lock,flags);
+ }
+@@ -3846,7 +3846,7 @@ static const struct net_device_ops rtl81
+       .ndo_set_mac_address    = r8180_set_mac_adr,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_change_mtu         = eth_change_mtu,
+-      .ndo_start_xmit         = ieee80211_xmit,
++      .ndo_start_xmit         = ieee80211_rtl_xmit,
+ };
+ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev,
+@@ -4066,7 +4066,7 @@ void rtl8180_try_wake_queue(struct net_d
+       spin_unlock_irqrestore(&priv->tx_lock,flags);
+       if(enough_desc)
+-              ieee80211_wake_queue(priv->ieee80211);
++              ieee80211_rtl_wake_queue(priv->ieee80211);
+ }
+ void rtl8180_tx_isr(struct net_device *dev, int pri,short error)
+--- a/drivers/staging/rtl8187se/r8180_wx.c
++++ b/drivers/staging/rtl8187se/r8180_wx.c
+@@ -377,7 +377,7 @@ static int r8180_wx_set_scan(struct net_
+       //      queue_work(priv->ieee80211->wq, &priv->ieee80211->wx_sync_scan_wq);
+               //printk("start scan============================>\n");
+               ieee80211_softmac_ips_scan_syncro(priv->ieee80211);
+-//ieee80211_start_scan(priv->ieee80211);
++//ieee80211_rtl_start_scan(priv->ieee80211);
+               /* intentionally forget to up sem */
+ //                    up(&priv->ieee80211->wx_sem);
+                       ret = 0;
diff --git a/queue-2.6.32/tg3-fix-5906-transmit-hangs.patch b/queue-2.6.32/tg3-fix-5906-transmit-hangs.patch
new file mode 100644 (file)
index 0000000..1fb1103
--- /dev/null
@@ -0,0 +1,123 @@
+From mike@mpagano.com  Fri Feb 12 15:17:42 2010
+From: Mike Pagano <mike@mpagano.com>
+Date: Tue, 2 Feb 2010 19:49:21 -0500
+Subject: tg3: Fix 5906 transmit hangs
+To: stable@kernel.org, mcarlson@broadcom.com
+Message-ID: <201002021949.21183.mike@mpagano.com>
+
+From: Mike Pagano <mike@mpagano.com>
+
+This is a backport of commit 92c6b8d16a36df3f28b2537bed2a56491fb08f11 to
+kernel version 2.6.32. The gentoo bug report can be found at
+https://bugs.gentoo.org/show_bug.cgi?id=301091. Thanks to Matt Carlson
+for his assistance.  The original description is as follows:
+
+The 5906 has trouble with fragments that are less than 8 bytes in size.
+This patch works around the problem by pivoting the 5906's transmit
+routine to tg3_start_xmit_dma_bug() and introducing a new SHORT_DMA_BUG
+flag that enables code to detect and react to the problematic condition.
+
+Signed-off-by: Mike Pagano <mpagano@gentoo.org>
+Cc: Matt Carlson <mcarlson@broadcom.com>
+Cc: Michael Chan <mchan@broadcom.com>
+Cc: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/tg3.c |   35 +++++++++++++++++++----------------
+ drivers/net/tg3.h |    3 +++
+ 2 files changed, 22 insertions(+), 16 deletions(-)
+
+--- a/drivers/net/tg3.c
++++ b/drivers/net/tg3.c
+@@ -5392,7 +5392,7 @@ static netdev_tx_t tg3_start_xmit_dma_bu
+       mss = 0;
+       if ((mss = skb_shinfo(skb)->gso_size) != 0) {
+               struct iphdr *iph;
+-              int tcp_opt_len, ip_tcp_len, hdr_len;
++              u32 tcp_opt_len, ip_tcp_len, hdr_len;
+               if (skb_header_cloned(skb) &&
+                   pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
+@@ -5423,8 +5423,10 @@ static netdev_tx_t tg3_start_xmit_dma_bu
+                                                                IPPROTO_TCP,
+                                                                0);
+-              if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) ||
+-                  (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
++              if (tp->tg3_flags2 & TG3_FLG2_HW_TSO_2)
++                      mss |= hdr_len << 9;
++              else if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_1) ||
++                      GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
+                       if (tcp_opt_len || iph->ihl > 5) {
+                               int tsflags;
+@@ -5459,6 +5461,9 @@ static netdev_tx_t tg3_start_xmit_dma_bu
+       would_hit_hwbug = 0;
++      if ((tp->tg3_flags3 & TG3_FLG3_SHORT_DMA_BUG) && len <= 8)
++              would_hit_hwbug = 1;
++
+       if (tp->tg3_flags3 & TG3_FLG3_5701_DMA_BUG)
+               would_hit_hwbug = 1;
+       else if (tg3_4g_overflow_test(mapping, len))
+@@ -5482,6 +5487,10 @@ static netdev_tx_t tg3_start_xmit_dma_bu
+                       tnapi->tx_buffers[entry].skb = NULL;
++                      if ((tp->tg3_flags3 & TG3_FLG3_SHORT_DMA_BUG) &&
++                              len <= 8)
++                                      would_hit_hwbug = 1;
++
+                       if (tg3_4g_overflow_test(mapping, len))
+                               would_hit_hwbug = 1;
+@@ -12594,18 +12603,13 @@ static int __devinit tg3_get_invariants(
+                    tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
+                    tp->pdev_peer == tp->pdev))
+                       tp->tg3_flags &= ~TG3_FLAG_SUPPORT_MSI;
++      }
+-              if ((tp->tg3_flags3 & TG3_FLG3_5755_PLUS) ||
+-                  GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
+-                      tp->tg3_flags2 |= TG3_FLG2_HW_TSO_2;
+-                      tp->tg3_flags2 |= TG3_FLG2_1SHOT_MSI;
+-              } else {
+-                      tp->tg3_flags2 |= TG3_FLG2_HW_TSO_1 | TG3_FLG2_TSO_BUG;
+-                      if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
+-                              ASIC_REV_5750 &&
+-                          tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
+-                              tp->tg3_flags2 &= ~TG3_FLG2_TSO_BUG;
+-              }
++      if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
++              tp->tg3_flags3 |= TG3_FLG3_SHORT_DMA_BUG;
++      else if (!(tp->tg3_flags3 & TG3_FLG3_5755_PLUS)) {
++              tp->tg3_flags3 |= TG3_FLG3_4G_DMA_BNDRY_BUG;
++              tp->tg3_flags3 |= TG3_FLG3_40BIT_DMA_LIMIT_BUG;
+       }
+       tp->irq_max = 1;
+@@ -13975,8 +13979,7 @@ static int __devinit tg3_init_one(struct
+               goto err_out_iounmap;
+       }
+-      if ((tp->tg3_flags3 & TG3_FLG3_5755_PLUS) ||
+-          GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
++      if (tp->tg3_flags3 & TG3_FLG3_5755_PLUS)
+               dev->netdev_ops = &tg3_netdev_ops;
+       else
+               dev->netdev_ops = &tg3_netdev_ops_dma_bug;
+--- a/drivers/net/tg3.h
++++ b/drivers/net/tg3.h
+@@ -2759,6 +2759,9 @@ struct tg3 {
+ #define TG3_FLG3_TOGGLE_10_100_L1PLLPD        0x00008000
+ #define TG3_FLG3_PHY_IS_FET           0x00010000
+ #define TG3_FLG3_ENABLE_RSS           0x00020000
++#define TG3_FLG3_4G_DMA_BNDRY_BUG      0x00080000
++#define TG3_FLG3_40BIT_DMA_LIMIT_BUG   0x00100000
++#define TG3_FLG3_SHORT_DMA_BUG  0x00200000
+       struct timer_list               timer;
+       u16                             timer_counter;
diff --git a/queue-2.6.32/x86-amd-iommu-fix-deassignment-of-a-device-from-the-pt_domain.patch b/queue-2.6.32/x86-amd-iommu-fix-deassignment-of-a-device-from-the-pt_domain.patch
new file mode 100644 (file)
index 0000000..7e3702d
--- /dev/null
@@ -0,0 +1,39 @@
+From joerg.roedel@amd.com  Fri Feb 12 15:12:57 2010
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Wed, 3 Feb 2010 16:13:41 +0100
+Subject: x86/amd-iommu: Fix deassignment of a device from the pt_domain
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20100203151341.GP16236@amd.com>
+
+
+From: Joerg Roedel <joerg.roedel@amd.com>
+
+commit d3ad9373b7c29b63d5e8460a69453718d200cc3b upstream.
+
+Deassigning a device from the passthrough domain does not
+work and breaks device assignment to kvm guests. This patch
+fixes the issue.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/amd_iommu.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/kernel/amd_iommu.c
++++ b/arch/x86/kernel/amd_iommu.c
+@@ -1230,9 +1230,10 @@ static void __detach_device(struct prote
+       /*
+        * If we run in passthrough mode the device must be assigned to the
+-       * passthrough domain if it is detached from any other domain
++       * passthrough domain if it is detached from any other domain.
++       * Make sure we can deassign from the pt_domain itself.
+        */
+-      if (iommu_pass_through) {
++      if (iommu_pass_through && domain != pt_domain) {
+               struct amd_iommu *iommu = amd_iommu_rlookup_table[devid];
+               __attach_device(iommu, pt_domain, devid);
+       }
diff --git a/queue-2.6.32/x86-amd-iommu-fix-iommu-api-initialization-for-iommu-pt.patch b/queue-2.6.32/x86-amd-iommu-fix-iommu-api-initialization-for-iommu-pt.patch
new file mode 100644 (file)
index 0000000..451c458
--- /dev/null
@@ -0,0 +1,73 @@
+From joerg.roedel@amd.com  Fri Feb 12 15:13:50 2010
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Wed, 3 Feb 2010 16:13:08 +0100
+Subject: x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt
+To: Greg KH <greg@kroah.com>
+Cc: stable@kernel.org
+Message-ID: <20100203151308.GO16236@amd.com>
+
+From: Joerg Roedel <joerg.roedel@amd.com>
+
+commit f5325094379158e6b876ea0010c807bf7890ec8f upstream
+
+This patch moves the initialization of the iommu-api out of
+the dma-ops initialization code. This ensures that the
+iommu-api is initialized even with iommu=pt.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/include/asm/amd_iommu.h |    1 +
+ arch/x86/kernel/amd_iommu.c      |    7 +++++--
+ arch/x86/kernel/amd_iommu_init.c |    3 +++
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/include/asm/amd_iommu.h
++++ b/arch/x86/include/asm/amd_iommu.h
+@@ -32,6 +32,7 @@ extern void amd_iommu_flush_all_domains(
+ extern void amd_iommu_flush_all_devices(void);
+ extern void amd_iommu_shutdown(void);
+ extern void amd_iommu_apply_erratum_63(u16 devid);
++extern void amd_iommu_init_api(void);
+ #else
+ static inline int amd_iommu_init(void) { return -ENODEV; }
+ static inline void amd_iommu_detect(void) { }
+--- a/arch/x86/kernel/amd_iommu.c
++++ b/arch/x86/kernel/amd_iommu.c
+@@ -2083,6 +2083,11 @@ static struct dma_map_ops amd_iommu_dma_
+       .dma_supported = amd_iommu_dma_supported,
+ };
++void __init amd_iommu_init_api(void)
++{
++      register_iommu(&amd_iommu_ops);
++}
++
+ /*
+  * The function which clues the AMD IOMMU driver into dma_ops.
+  */
+@@ -2124,8 +2129,6 @@ int __init amd_iommu_init_dma_ops(void)
+       /* Make the driver finally visible to the drivers */
+       dma_ops = &amd_iommu_dma_ops;
+-      register_iommu(&amd_iommu_ops);
+-
+       bus_register_notifier(&pci_bus_type, &device_nb);
+       amd_iommu_stats_init();
+--- a/arch/x86/kernel/amd_iommu_init.c
++++ b/arch/x86/kernel/amd_iommu_init.c
+@@ -1288,9 +1288,12 @@ int __init amd_iommu_init(void)
+               ret = amd_iommu_init_passthrough();
+       else
+               ret = amd_iommu_init_dma_ops();
++
+       if (ret)
+               goto free;
++      amd_iommu_init_api();
++
+       enable_iommus();
+       if (iommu_pass_through)
diff --git a/queue-2.6.32/x86-re-get-cfg_new-in-case-reuse-move-irq_desc.patch b/queue-2.6.32/x86-re-get-cfg_new-in-case-reuse-move-irq_desc.patch
new file mode 100644 (file)
index 0000000..7a46cae
--- /dev/null
@@ -0,0 +1,30 @@
+From 37ef2a3029fde884808ff1b369677abc7dd9a79a Mon Sep 17 00:00:00 2001
+From: Yinghai Lu <yinghai@kernel.org>
+Date: Sat, 21 Nov 2009 00:23:37 -0800
+Subject: x86: Re-get cfg_new in case reuse/move irq_desc
+
+From: Yinghai Lu <yinghai@kernel.org>
+
+commit 37ef2a3029fde884808ff1b369677abc7dd9a79a upstream.
+
+When irq_desc is moved, we need to make sure to use the right cfg_new.
+
+Signed-off-by: Yinghai Lu <yinghai@kernel.org>
+LKML-Reference: <4B07A739.3030104@kernel.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/apic/io_apic.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/x86/kernel/apic/io_apic.c
++++ b/arch/x86/kernel/apic/io_apic.c
+@@ -3157,6 +3157,7 @@ unsigned int create_irq_nr(unsigned int
+                       continue;
+               desc_new = move_irq_desc(desc_new, node);
++              cfg_new = desc_new->chip_data;
+               if (__assign_irq_vector(new, cfg_new, apic->target_cpus()) == 0)
+                       irq = new;