From c7880ca6c71e0c800758d16767df3f5ebe067b4d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 12 Feb 2010 15:31:59 -0800 Subject: [PATCH] more .32 patches --- ...add-acer-g725-to-broken-suspend-list.patch | 54 +++++ ...improved-macbook-pro-5-1-5-2-support.patch | 79 +++++++ queue-2.6.32/befs-fix-leak.patch | 26 +++ ...r-pio-data-transfers-in-libata-sff.c.patch | 35 +++ ...dst-call-cond_resched-in-dst_gc_task.patch | 44 ++++ .../pktgen-fix-freezing-problem.patch | 33 +++ .../rtc-fm3130-add-missing-braces.patch | 45 ++++ queue-2.6.32/series | 12 ++ ...7se-compilation-errors-with-mac80211.patch | 204 ++++++++++++++++++ .../tg3-fix-5906-transmit-hangs.patch | 123 +++++++++++ ...nment-of-a-device-from-the-pt_domain.patch | 39 ++++ ...ommu-api-initialization-for-iommu-pt.patch | 73 +++++++ ...-cfg_new-in-case-reuse-move-irq_desc.patch | 30 +++ 13 files changed, 797 insertions(+) create mode 100644 queue-2.6.32/ahci-add-acer-g725-to-broken-suspend-list.patch create mode 100644 queue-2.6.32/alsa-hda-improved-macbook-pro-5-1-5-2-support.patch create mode 100644 queue-2.6.32/befs-fix-leak.patch create mode 100644 queue-2.6.32/call-flush_dcache_page-after-pio-data-transfers-in-libata-sff.c.patch create mode 100644 queue-2.6.32/dst-call-cond_resched-in-dst_gc_task.patch create mode 100644 queue-2.6.32/pktgen-fix-freezing-problem.patch create mode 100644 queue-2.6.32/rtc-fm3130-add-missing-braces.patch create mode 100644 queue-2.6.32/staging-fix-rtl8187se-compilation-errors-with-mac80211.patch create mode 100644 queue-2.6.32/tg3-fix-5906-transmit-hangs.patch create mode 100644 queue-2.6.32/x86-amd-iommu-fix-deassignment-of-a-device-from-the-pt_domain.patch create mode 100644 queue-2.6.32/x86-amd-iommu-fix-iommu-api-initialization-for-iommu-pt.patch create mode 100644 queue-2.6.32/x86-re-get-cfg_new-in-case-reuse-move-irq_desc.patch 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 index 00000000000..694cbfbf097 --- /dev/null +++ b/queue-2.6.32/ahci-add-acer-g725-to-broken-suspend-list.patch @@ -0,0 +1,54 @@ +From cedc9bf906dae044443d403371c887affdb44168 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +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 + +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 +Reported-by: Jani-Matti Hätinen +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..b0b3ac51955 --- /dev/null +++ b/queue-2.6.32/alsa-hda-improved-macbook-pro-5-1-5-2-support.patch @@ -0,0 +1,79 @@ +From a76221d47ef2b73ff16c0fef00a784026308ea02 Mon Sep 17 00:00:00 2001 +From: Alex Murray +Date: Wed, 13 Jan 2010 23:15:03 +1030 +Subject: ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support + +From: Alex Murray + +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 +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..219a2ecb536 --- /dev/null +++ b/queue-2.6.32/befs-fix-leak.patch @@ -0,0 +1,26 @@ +From 8dd5ca532c2d2c2b85f16bc038ebfff05b8853e1 Mon Sep 17 00:00:00 2001 +From: Al Viro +Date: Thu, 28 Jan 2010 22:11:38 -0500 +Subject: befs: fix leak + +From: Al Viro + +commit 8dd5ca532c2d2c2b85f16bc038ebfff05b8853e1 upstream. + +Signed-off-by: Al Viro +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..1649e1fb3ca --- /dev/null +++ b/queue-2.6.32/call-flush_dcache_page-after-pio-data-transfers-in-libata-sff.c.patch @@ -0,0 +1,35 @@ +From 2d68b7fe55d9e19a8a868224ed0dfd6526568521 Mon Sep 17 00:00:00 2001 +From: Catalin Marinas +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 + +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 +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..b0c1a4bae39 --- /dev/null +++ b/queue-2.6.32/dst-call-cond_resched-in-dst_gc_task.patch @@ -0,0 +1,44 @@ +From 2fc1b5dd99f66d93ffc23fd8df82d384c1a354c8 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Mon, 8 Feb 2010 15:00:39 -0800 +Subject: dst: call cond_resched() in dst_gc_task() + +From: Eric Dumazet + +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 +Tested-by: Pawel Staszewski +Signed-off-by: Eric Dumazet +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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 + #include + #include ++#include + + #include + +@@ -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 index 00000000000..03e2760e726 --- /dev/null +++ b/queue-2.6.32/pktgen-fix-freezing-problem.patch @@ -0,0 +1,33 @@ +From 1b3f720bf033fde1fbb6231f9b156b918c5f68d8 Mon Sep 17 00:00:00 2001 +From: Rafael J. Wysocki +Date: Thu, 4 Feb 2010 14:00:41 -0800 +Subject: pktgen: Fix freezing problem + +From: Rafael J. Wysocki + +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 +Reported-and-tested-by: Ciprian Dorin Craciun +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..660b67a9762 --- /dev/null +++ b/queue-2.6.32/rtc-fm3130-add-missing-braces.patch @@ -0,0 +1,45 @@ +From f4b5162820de60204afa5c8639335f4931b7fb0c Mon Sep 17 00:00:00 2001 +From: Sergey Matyukevich +Date: Tue, 2 Feb 2010 13:43:59 -0800 +Subject: rtc-fm3130: add missing braces + +From: Sergey Matyukevich + +commit f4b5162820de60204afa5c8639335f4931b7fb0c upstream. + +Add missing braces for multiline 'if' statements in fm3130_probe. + +Signed-off-by: Sergey Matyukevich +Signed-off-by: Alessandro Zummo +Cc: Sergey Lapin +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- 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) diff --git a/queue-2.6.32/series b/queue-2.6.32/series index 048bdd51c3a..be26f0d334f 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -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 index 00000000000..93f403d12bb --- /dev/null +++ b/queue-2.6.32/staging-fix-rtl8187se-compilation-errors-with-mac80211.patch @@ -0,0 +1,204 @@ +From df574b8ecfb3a84af96229f336a6be88ca4a7055 Mon Sep 17 00:00:00 2001 +From: George Kadianakis +Date: Thu, 17 Dec 2009 01:16:00 +0200 +Subject: Staging: fix rtl8187se compilation errors with mac80211 + +From: George Kadianakis + +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 +Cc: maximilian attems +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..1fb1103609d --- /dev/null +++ b/queue-2.6.32/tg3-fix-5906-transmit-hangs.patch @@ -0,0 +1,123 @@ +From mike@mpagano.com Fri Feb 12 15:17:42 2010 +From: Mike Pagano +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 + +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 +Cc: Matt Carlson +Cc: Michael Chan +Cc: David S. Miller +Signed-off-by: Greg Kroah-Hartman + + +--- + 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 index 00000000000..7e3702d5bc2 --- /dev/null +++ b/queue-2.6.32/x86-amd-iommu-fix-deassignment-of-a-device-from-the-pt_domain.patch @@ -0,0 +1,39 @@ +From joerg.roedel@amd.com Fri Feb 12 15:12:57 2010 +From: Joerg Roedel +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 +Cc: stable@kernel.org +Message-ID: <20100203151341.GP16236@amd.com> + + +From: Joerg Roedel + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..451c4580a35 --- /dev/null +++ b/queue-2.6.32/x86-amd-iommu-fix-iommu-api-initialization-for-iommu-pt.patch @@ -0,0 +1,73 @@ +From joerg.roedel@amd.com Fri Feb 12 15:13:50 2010 +From: Joerg Roedel +Date: Wed, 3 Feb 2010 16:13:08 +0100 +Subject: x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt +To: Greg KH +Cc: stable@kernel.org +Message-ID: <20100203151308.GO16236@amd.com> + +From: Joerg Roedel + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..7a46cae9b24 --- /dev/null +++ b/queue-2.6.32/x86-re-get-cfg_new-in-case-reuse-move-irq_desc.patch @@ -0,0 +1,30 @@ +From 37ef2a3029fde884808ff1b369677abc7dd9a79a Mon Sep 17 00:00:00 2001 +From: Yinghai Lu +Date: Sat, 21 Nov 2009 00:23:37 -0800 +Subject: x86: Re-get cfg_new in case reuse/move irq_desc + +From: Yinghai Lu + +commit 37ef2a3029fde884808ff1b369677abc7dd9a79a upstream. + +When irq_desc is moved, we need to make sure to use the right cfg_new. + +Signed-off-by: Yinghai Lu +LKML-Reference: <4B07A739.3030104@kernel.org> +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + 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; -- 2.47.3