summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2011-10-08 23:59:00 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2011-10-08 23:59:00 -0400
commit26b30f36264abca9fbf837af02d7b08754340537 (patch)
treed6d0e9646d3708ef2af18d685f2cb09ddcafc40e
parentff0e8d862b0d0314de63bebd99f45c4e51964f55 (diff)
downloadlongterm-queue-2.6.34-26b30f36264abca9fbf837af02d7b08754340537.tar.gz
Raw import of commits based on v2.6.32.40 selections
There was a delete ancient/unused DMA API commit in the 32 selections that didn't apply cleanly, and since I didn't see the point of it, I didn't labour over it for the time being and instead skipped it. Note that some of the .40 selections were added previously. Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--queue/ALSA-emux-Add-trivial-compat-ioctl-handler.patch29
-rw-r--r--queue/ALSA-hda-Add-model-mbp55-entry-for-MacBookPro-7-1.patch28
-rw-r--r--queue/ALSA-hda-MacBookAir3-1-3-2-alsa-support.patch29
-rw-r--r--queue/ALSA-hda-MacBookPro-5-3-line-in-support.patch94
-rw-r--r--queue/ALSA-powermac-Lineout-detection-on-G4-DA.patch40
-rw-r--r--queue/ALSA-powermac-Reverse-HP-detection-on-G4-DA.patch46
-rw-r--r--queue/ARM-6891-1-prevent-heap-corruption-in-OABI-semtimedo.patch33
-rw-r--r--queue/ASoC-Fix-output-PGA-enabling-in-wm_hubs-CODECs.patch48
-rw-r--r--queue/Bluetooth-Add-MacBookAir3-1-2-support.patch101
-rw-r--r--queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo-2.patch45
-rw-r--r--queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo.patch44
-rw-r--r--queue/FLEXCOP-PCI-fix-__xlate_proc_name-warning-for-flexco.patch32
-rw-r--r--queue/Fix-corrupted-OSF-partition-table-parsing.patch73
-rw-r--r--queue/Fix-gcc-4.5.1-miscompiling-drivers-char-i8k.c-again.patch71
-rw-r--r--queue/GFS2-BUG-in-gfs2_adjust_quota.patch46
-rw-r--r--queue/GFS2-Fix-writing-to-non-page-aligned-gfs2_quota-stru.patch164
-rw-r--r--queue/HID-add-MacBookAir-3-1-and-3-2-support.patch135
-rw-r--r--queue/Increase-OSF-partition-limit-from-8-to-18.patch37
-rw-r--r--queue/Input-elantech-discard-the-first-2-positions-on-some.patch101
-rw-r--r--queue/Input-elantech-relax-signature-checks.patch57
-rw-r--r--queue/NFS-nfs_wcc_update_inode-should-set-nfsi-attr_gencou.patch82
-rw-r--r--queue/NFSv4.1-Ensure-state-manager-thread-dies-on-last-umo.patch38
-rw-r--r--queue/Open-with-O_CREAT-flag-set-fails-to-open-existing-fi.patch55
-rw-r--r--queue/Remove-extra-struct-page-member-from-the-buffer-info.patch31
-rw-r--r--queue/SUNRPC-fix-NFS-client-over-TCP-hangs-due-to-packet-l.patch67
-rw-r--r--queue/Staging-rtl8192su-Clean-up-in-case-of-an-error-in-mo.patch104
-rw-r--r--queue/Staging-rtl8192su-Fix-procfs-code-for-interfaces-not.patch107
-rw-r--r--queue/Staging-rtl8192su-add-device-ids.patch62
-rw-r--r--queue/Staging-rtl8192su-check-for-skb-NULL.patch238
-rw-r--r--queue/Staging-rtl8192su-remove-device-ids.patch54
-rw-r--r--queue/UBIFS-fix-master-node-recovery.patch77
-rw-r--r--queue/USB-teach-devices-file-about-Wireless-and-SuperSpeed.patch152
-rw-r--r--queue/V4L-DVB-Add-Elgato-EyeTV-Diversity-to-dibcom-driver.patch117
-rw-r--r--queue/af_unix-Only-allow-recv-on-connected-seqpacket-socke.patch85
-rw-r--r--queue/ath-add-missing-regdomain-pair-0x5c-mapping.patch40
-rw-r--r--queue/b43-Fix-warning-at-drivers-mmc-core-core.c-237-in-mm.patch68
-rw-r--r--queue/backlight-MacBookAir3-1-3-2-mbp-nvidia-bl-support.patch48
-rw-r--r--queue/block-blk-sysfs-Fix-an-err-return-path-in-blk_regist.patch34
-rw-r--r--queue/bonding-Ensure-that-we-unshare-skbs-prior-to-calling.patch134
-rw-r--r--queue/btrfs-Require-CAP_SYS_ADMIN-for-filesystem-rebalance.patch41
-rw-r--r--queue/cifs-fix-another-memleak-in-cifs_root_iget.patch55
-rw-r--r--queue/dasd-correct-device-table.patch31
-rw-r--r--queue/dell-laptop-Add-another-Dell-laptop-family-to-the-DM.patch40
-rw-r--r--queue/drm-radeon-kms-fix-bad-shift-in-atom-iio-table-parse.patch47
-rw-r--r--queue/e1000-fix-Tx-hangs-by-disabling-64-bit-DMA.patch255
-rw-r--r--queue/e1000e-Reset-82577-82578-PHY-before-first-PHY-regist.patch40
-rw-r--r--queue/fix-oops-in-scsi_run_queue.patch48
-rw-r--r--queue/hwmon-applesmc-Add-MacBookAir3-1-3-2-support.patch53
-rw-r--r--queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-6.patch55
-rw-r--r--queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-7.patch51
-rw-r--r--queue/hwmon-applesmc-Add-support-for-MacBook-Pro-5-3-and-5.patch61
-rw-r--r--queue/i8k-Tell-gcc-that-regs-gets-clobbered.patch49
-rw-r--r--queue/init-sched-Fix-race-between-init-and-kthreadd.patch68
-rw-r--r--queue/intel-iommu-Fix-get_domain_for_dev-error-path.patch34
-rw-r--r--queue/intel-iommu-Force-disable-IOMMU-for-iGFX-on-broken-C.patch50
-rw-r--r--queue/intel-iommu-Unlink-domain-from-iommu.patch54
-rw-r--r--queue/ipv6-Silence-privacy-extensions-initialization.patch41
-rw-r--r--queue/iwlagn-Support-new-5000-microcode.patch29
-rw-r--r--queue/iwlwifi-fix-skb-usage-after-free.patch54
-rw-r--r--queue/kconfig-Avoid-buffer-underrun-in-choice-input.patch37
-rw-r--r--queue/libata-set-queue-DMA-alignment-to-sector-size-for-AT.patch78
-rw-r--r--queue/m68k-mm-Set-all-online-nodes-in-N_NORMAL_MEMORY.patch42
-rw-r--r--queue/mmc-build-fix-mmc_pm_notify-is-only-available-with-C.patch42
-rw-r--r--queue/mmc-fix-all-hangs-related-to-mmc-sd-card-insert-remo.patch219
-rw-r--r--queue/mmc-sdhci-Check-mrq-NULL-in-sdhci_tasklet_finish.patch38
-rw-r--r--queue/mmc-sdhci-Check-mrq-cmd-in-sdhci_tasklet_finish.patch38
-rw-r--r--queue/mmc-sdhci-pci-Fix-error-case-in-sdhci_pci_probe_slot.patch34
-rw-r--r--queue/mpt2sas-fix-the-incorrect-scsi_dma_map-error-checkin.patch48
-rw-r--r--queue/nfs-don-t-lose-MS_SYNCHRONOUS-on-remount-of-noac-mou.patch43
-rw-r--r--queue/nfs-fix-compilation-warning.patch30
-rw-r--r--queue/p54-Initialize-extra_len-in-p54_tx_80211.patch42
-rw-r--r--queue/perf-symbols-allow-forcing-use-of-cplus_demangle.patch37
-rw-r--r--queue/pmcraid-reject-negative-request-size.patch52
-rw-r--r--queue/powerpc-boot-dts-Install-dts-from-the-right-director.patch34
-rw-r--r--queue/put-stricter-guards-on-queue-dead-checks.patch60
-rw-r--r--queue/rt2500usb-fallback-to-SW-encryption-for-TKIP-AES.patch59
-rw-r--r--queue/scsi_dh_emc-request-flag-cleanup.patch36
-rw-r--r--queue/serial-imx-read-cts-state-only-after-acking-cts-chan.patch48
-rw-r--r--queue/series85
-rw-r--r--queue/set-memory-ranges-in-N_NORMAL_MEMORY-when-onlined.patch59
-rw-r--r--queue/slub-fix-panic-with-DISCONTIGMEM.patch37
-rw-r--r--queue/tehuti-Firmware-filename-is-tehuti-bdx.bin.patch38
-rw-r--r--queue/virtio_net-Add-schedule-check-to-napi_enable-call.patch77
-rw-r--r--queue/wireless-b43-fix-error-path-in-SDIO.patch29
-rw-r--r--queue/x86-AMD-Fix-APIC-timer-erratum-400-affecting-K8-Rev..patch44
-rw-r--r--queue/x86-pvclock-Move-scale_delta-into-common-header.patch79
86 files changed, 5467 insertions, 0 deletions
diff --git a/queue/ALSA-emux-Add-trivial-compat-ioctl-handler.patch b/queue/ALSA-emux-Add-trivial-compat-ioctl-handler.patch
new file mode 100644
index 0000000..03b26e1
--- /dev/null
+++ b/queue/ALSA-emux-Add-trivial-compat-ioctl-handler.patch
@@ -0,0 +1,29 @@
+From 9ad8c96319851b73ddfca8a69ddd319442b7a8d0 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 12 Sep 2010 02:41:47 +0100
+Subject: [PATCH] ALSA: emux: Add trivial compat ioctl handler
+
+commit a254dba37c5a372fc8b44ba29509ba052d4e859d upstream.
+
+Reported-by: Carmen Cru <carmen.cru@belgacom.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/synth/emux/emux_hwdep.c b/sound/synth/emux/emux_hwdep.c
+index ff0b2a8..5ae1eae 100644
+--- a/sound/synth/emux/emux_hwdep.c
++++ b/sound/synth/emux/emux_hwdep.c
+@@ -128,6 +128,9 @@ snd_emux_init_hwdep(struct snd_emux *emu)
+ strcpy(hw->name, SNDRV_EMUX_HWDEP_NAME);
+ hw->iface = SNDRV_HWDEP_IFACE_EMUX_WAVETABLE;
+ hw->ops.ioctl = snd_emux_hwdep_ioctl;
++ /* The ioctl parameter types are compatible between 32- and
++ * 64-bit architectures, so use the same function. */
++ hw->ops.ioctl_compat = snd_emux_hwdep_ioctl;
+ hw->exclusive = 1;
+ hw->private_data = emu;
+ if ((err = snd_card_register(emu->card)) < 0)
+--
+1.7.7
+
diff --git a/queue/ALSA-hda-Add-model-mbp55-entry-for-MacBookPro-7-1.patch b/queue/ALSA-hda-Add-model-mbp55-entry-for-MacBookPro-7-1.patch
new file mode 100644
index 0000000..e370b7c
--- /dev/null
+++ b/queue/ALSA-hda-Add-model-mbp55-entry-for-MacBookPro-7-1.patch
@@ -0,0 +1,28 @@
+From fa5270b8a90f5e299e4b8536982fbb746b054c87 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Mon, 11 Oct 2010 14:46:35 +0200
+Subject: [PATCH] ALSA: hda - Add model=mbp55 entry for MacBookPro 7,1
+
+commit f46119b73425df9d1e05c5d5e909a993d95b0218 upstream.
+
+Reference: Novell bnc#645066
+ https://bugzilla.novell.com/show_bug.cgi?id=645066
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
+index 1c6d1c3..6ba2557 100644
+--- a/sound/pci/hda/patch_cirrus.c
++++ b/sound/pci/hda/patch_cirrus.c
+@@ -1092,6 +1092,7 @@ static const char *cs420x_models[CS420X_MODELS] = {
+ static struct snd_pci_quirk cs420x_cfg_tbl[] = {
+ SND_PCI_QUIRK(0x10de, 0x0ac0, "MacBookPro 5,3", CS420X_MBP53),
+ SND_PCI_QUIRK(0x10de, 0xcb79, "MacBookPro 5,5", CS420X_MBP55),
++ SND_PCI_QUIRK(0x10de, 0xcb89, "MacBookPro 7,1", CS420X_MBP55),
+ SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),
+ {} /* terminator */
+ };
+--
+1.7.7
+
diff --git a/queue/ALSA-hda-MacBookAir3-1-3-2-alsa-support.patch b/queue/ALSA-hda-MacBookAir3-1-3-2-alsa-support.patch
new file mode 100644
index 0000000..b05e2c5
--- /dev/null
+++ b/queue/ALSA-hda-MacBookAir3-1-3-2-alsa-support.patch
@@ -0,0 +1,29 @@
+From 23bed9edacb265461ef5d47105ec508f95e5fa36 Mon Sep 17 00:00:00 2001
+From: "Edgar (gimli) Hucek" <gimli@dark-green.com>
+Date: Wed, 3 Nov 2010 08:14:10 +0100
+Subject: [PATCH] ALSA: hda - MacBookAir3,1(3,2) alsa support
+
+commit 87232dd49aeb6b7d1af291edca8bd129a82ef4b5 upstream.
+
+This patch add support for the MacBookAir3,1 and MacBookAir3,2 to the alsa
+sound system.
+
+Signed-off-by: Edgar (gimli) Hucek <gimli@dark-green.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
+index 6ba2557..5f08464 100644
+--- a/sound/pci/hda/patch_cirrus.c
++++ b/sound/pci/hda/patch_cirrus.c
+@@ -1091,6 +1091,7 @@ static const char *cs420x_models[CS420X_MODELS] = {
+
+ static struct snd_pci_quirk cs420x_cfg_tbl[] = {
+ SND_PCI_QUIRK(0x10de, 0x0ac0, "MacBookPro 5,3", CS420X_MBP53),
++ SND_PCI_QUIRK(0x10de, 0x0d94, "MacBookAir 3,1(2)", CS420X_MBP55),
+ SND_PCI_QUIRK(0x10de, 0xcb79, "MacBookPro 5,5", CS420X_MBP55),
+ SND_PCI_QUIRK(0x10de, 0xcb89, "MacBookPro 7,1", CS420X_MBP55),
+ SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),
+--
+1.7.7
+
diff --git a/queue/ALSA-hda-MacBookPro-5-3-line-in-support.patch b/queue/ALSA-hda-MacBookPro-5-3-line-in-support.patch
new file mode 100644
index 0000000..049ae12
--- /dev/null
+++ b/queue/ALSA-hda-MacBookPro-5-3-line-in-support.patch
@@ -0,0 +1,94 @@
+From 237ffc8311d6d1022961c882324e737571d08798 Mon Sep 17 00:00:00 2001
+From: Vince Weaver <vweaver1@eecs.utk.edu>
+Date: Wed, 22 Sep 2010 17:31:37 -0400
+Subject: [PATCH] ALSA: hda - MacBookPro 5,3 line-in support
+
+commit 4e7d7c6018567fa03f387d06602d4145c75ebbe0 upstream.
+
+I've found the following patch is necessary to enable line-in on
+my MacBookPro 5,3 machine. With the patch applied I've successfully
+recorded audio from the line-in jack. This is based on the existing
+5,5 support.
+
+Signed-off-by: Vince Weaver <vweaver1@eecs.utk.edu>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
+index 350ee8a..1c6d1c3 100644
+--- a/sound/pci/hda/patch_cirrus.c
++++ b/sound/pci/hda/patch_cirrus.c
+@@ -65,6 +65,7 @@ struct cs_spec {
+
+ /* available models */
+ enum {
++ CS420X_MBP53,
+ CS420X_MBP55,
+ CS420X_IMAC27,
+ CS420X_AUTO,
+@@ -838,7 +839,8 @@ static void cs_automute(struct hda_codec *codec)
+ AC_VERB_SET_PIN_WIDGET_CONTROL,
+ hp_present ? 0 : PIN_OUT);
+ }
+- if (spec->board_config == CS420X_MBP55 ||
++ if (spec->board_config == CS420X_MBP53 ||
++ spec->board_config == CS420X_MBP55 ||
+ spec->board_config == CS420X_IMAC27) {
+ unsigned int gpio = hp_present ? 0x02 : 0x08;
+ snd_hda_codec_write(codec, 0x01, 0,
+@@ -1080,6 +1082,7 @@ static int cs_parse_auto_config(struct hda_codec *codec)
+ }
+
+ static const char *cs420x_models[CS420X_MODELS] = {
++ [CS420X_MBP53] = "mbp53",
+ [CS420X_MBP55] = "mbp55",
+ [CS420X_IMAC27] = "imac27",
+ [CS420X_AUTO] = "auto",
+@@ -1087,6 +1090,7 @@ static const char *cs420x_models[CS420X_MODELS] = {
+
+
+ static struct snd_pci_quirk cs420x_cfg_tbl[] = {
++ SND_PCI_QUIRK(0x10de, 0x0ac0, "MacBookPro 5,3", CS420X_MBP53),
+ SND_PCI_QUIRK(0x10de, 0xcb79, "MacBookPro 5,5", CS420X_MBP55),
+ SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),
+ {} /* terminator */
+@@ -1097,6 +1101,20 @@ struct cs_pincfg {
+ u32 val;
+ };
+
++static struct cs_pincfg mbp53_pincfgs[] = {
++ { 0x09, 0x012b4050 },
++ { 0x0a, 0x90100141 },
++ { 0x0b, 0x90100140 },
++ { 0x0c, 0x018b3020 },
++ { 0x0d, 0x90a00110 },
++ { 0x0e, 0x400000f0 },
++ { 0x0f, 0x01cbe030 },
++ { 0x10, 0x014be060 },
++ { 0x12, 0x400000f0 },
++ { 0x15, 0x400000f0 },
++ {} /* terminator */
++};
++
+ static struct cs_pincfg mbp55_pincfgs[] = {
+ { 0x09, 0x012b4030 },
+ { 0x0a, 0x90100121 },
+@@ -1126,6 +1144,7 @@ static struct cs_pincfg imac27_pincfgs[] = {
+ };
+
+ static struct cs_pincfg *cs_pincfgs[CS420X_MODELS] = {
++ [CS420X_MBP53] = mbp53_pincfgs,
+ [CS420X_MBP55] = mbp55_pincfgs,
+ [CS420X_IMAC27] = imac27_pincfgs,
+ };
+@@ -1158,6 +1177,7 @@ static int patch_cs420x(struct hda_codec *codec)
+
+ switch (spec->board_config) {
+ case CS420X_IMAC27:
++ case CS420X_MBP53:
+ case CS420X_MBP55:
+ /* GPIO1 = headphones */
+ /* GPIO3 = speakers */
+--
+1.7.7
+
diff --git a/queue/ALSA-powermac-Lineout-detection-on-G4-DA.patch b/queue/ALSA-powermac-Lineout-detection-on-G4-DA.patch
new file mode 100644
index 0000000..8c73ad1
--- /dev/null
+++ b/queue/ALSA-powermac-Lineout-detection-on-G4-DA.patch
@@ -0,0 +1,40 @@
+From 88011c65172718b731c7fe44b960dbd17320a496 Mon Sep 17 00:00:00 2001
+From: Risto Suominen <Risto.Suominen@gmail.com>
+Date: Sun, 4 Apr 2010 08:00:00 +0300
+Subject: [PATCH] ALSA: powermac - Lineout detection on G4 DA
+
+commit b6d7335001f331f2d295ff15d67e385615ceff81 upstream.
+
+Lineout (Pro Speaker) detection on PowerMac G4 Digital Audio (Tumbler).
+
+Signed-off-by: Risto Suominen <Risto.Suominen@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
+index 3b7471c..696280c 100644
+--- a/sound/ppc/tumbler.c
++++ b/sound/ppc/tumbler.c
+@@ -1137,7 +1137,8 @@ static long tumbler_find_device(const char *device, const char *platform,
+ gp->inactive_val = (*base) ? 0x4 : 0x5;
+ } else {
+ const u32 *prop = NULL;
+- gp->active_state = IS_G4DA && !strcmp(device, "keywest-gpio15");
++ gp->active_state = IS_G4DA
++ && !strncmp(device, "keywest-gpio1", 13);
+ gp->active_val = 0x4;
+ gp->inactive_val = 0x5;
+ /* Here are some crude hacks to extract the GPIO polarity and
+@@ -1315,6 +1316,9 @@ static int __devinit tumbler_init(struct snd_pmac *chip)
+ if (irq <= NO_IRQ)
+ irq = tumbler_find_device("line-output-detect",
+ NULL, &mix->line_detect, 1);
++ if (IS_G4DA && irq <= NO_IRQ)
++ irq = tumbler_find_device("keywest-gpio16",
++ NULL, &mix->line_detect, 1);
+ mix->lineout_irq = irq;
+
+ tumbler_reset_audio(chip);
+--
+1.7.7
+
diff --git a/queue/ALSA-powermac-Reverse-HP-detection-on-G4-DA.patch b/queue/ALSA-powermac-Reverse-HP-detection-on-G4-DA.patch
new file mode 100644
index 0000000..b8b6bb6
--- /dev/null
+++ b/queue/ALSA-powermac-Reverse-HP-detection-on-G4-DA.patch
@@ -0,0 +1,46 @@
+From c0c3cf14eb5ef8dcee1475ce222f50ed5a542516 Mon Sep 17 00:00:00 2001
+From: Risto Suominen <Risto.Suominen@gmail.com>
+Date: Sun, 4 Apr 2010 07:59:30 +0300
+Subject: [PATCH] ALSA: powermac - Reverse HP detection on G4 DA
+
+commit 819ef70b135ba66cd1659c913255686bf931e3d4 upstream.
+
+Reverse headphone detection bit on PowerMac G4 Digital Audio (Tumbler).
+
+Signed-off-by: Risto Suominen <Risto.Suominen@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
+index 789f44f..3b7471c 100644
+--- a/sound/ppc/tumbler.c
++++ b/sound/ppc/tumbler.c
+@@ -30,6 +30,7 @@
+ #include <linux/kmod.h>
+ #include <linux/slab.h>
+ #include <linux/interrupt.h>
++#include <linux/string.h>
+ #include <sound/core.h>
+ #include <asm/io.h>
+ #include <asm/irq.h>
+@@ -46,6 +47,8 @@
+ #define DBG(fmt...)
+ #endif
+
++#define IS_G4DA (machine_is_compatible("PowerMac3,4"))
++
+ /* i2c address for tumbler */
+ #define TAS_I2C_ADDR 0x34
+
+@@ -1134,7 +1137,7 @@ static long tumbler_find_device(const char *device, const char *platform,
+ gp->inactive_val = (*base) ? 0x4 : 0x5;
+ } else {
+ const u32 *prop = NULL;
+- gp->active_state = 0;
++ gp->active_state = IS_G4DA && !strcmp(device, "keywest-gpio15");
+ gp->active_val = 0x4;
+ gp->inactive_val = 0x5;
+ /* Here are some crude hacks to extract the GPIO polarity and
+--
+1.7.7
+
diff --git a/queue/ARM-6891-1-prevent-heap-corruption-in-OABI-semtimedo.patch b/queue/ARM-6891-1-prevent-heap-corruption-in-OABI-semtimedo.patch
new file mode 100644
index 0000000..16b0743
--- /dev/null
+++ b/queue/ARM-6891-1-prevent-heap-corruption-in-OABI-semtimedo.patch
@@ -0,0 +1,33 @@
+From f9a600423a922237ac48be4f6774e21ccc0b923a Mon Sep 17 00:00:00 2001
+From: Dan Rosenberg <drosenberg@vsecurity.com>
+Date: Fri, 29 Apr 2011 15:48:07 +0100
+Subject: [PATCH] ARM: 6891/1: prevent heap corruption in OABI semtimedop
+
+commit 0f22072ab50cac7983f9660d33974b45184da4f9 upstream.
+
+When CONFIG_OABI_COMPAT is set, the wrapper for semtimedop does not
+bound the nsops argument. A sufficiently large value will cause an
+integer overflow in allocation size, followed by copying too much data
+into the allocated buffer. Fix this by restricting nsops to SEMOPM.
+Untested.
+
+Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c
+index 33ff678..73bb15c 100644
+--- a/arch/arm/kernel/sys_oabi-compat.c
++++ b/arch/arm/kernel/sys_oabi-compat.c
+@@ -311,7 +311,7 @@ asmlinkage long sys_oabi_semtimedop(int semid,
+ long err;
+ int i;
+
+- if (nsops < 1)
++ if (nsops < 1 || nsops > SEMOPM)
+ return -EINVAL;
+ sops = kmalloc(sizeof(*sops) * nsops, GFP_KERNEL);
+ if (!sops)
+--
+1.7.7
+
diff --git a/queue/ASoC-Fix-output-PGA-enabling-in-wm_hubs-CODECs.patch b/queue/ASoC-Fix-output-PGA-enabling-in-wm_hubs-CODECs.patch
new file mode 100644
index 0000000..675b58e
--- /dev/null
+++ b/queue/ASoC-Fix-output-PGA-enabling-in-wm_hubs-CODECs.patch
@@ -0,0 +1,48 @@
+From ca19ab211c0992be58b5c56a985de3c6d2c76f28 Mon Sep 17 00:00:00 2001
+From: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Date: Fri, 8 Apr 2011 16:32:16 +0900
+Subject: [PATCH] ASoC: Fix output PGA enabling in wm_hubs CODECs
+
+commit 39cca168bdfaef9d0c496ec27f292445d6184946 upstream.
+
+The output PGA was not being powered up in headphone and speaker paths,
+removing the ability to offer volume control and mute with the output
+PGA.
+
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c
+index e1f225a..db6122f 100644
+--- a/sound/soc/codecs/wm_hubs.c
++++ b/sound/soc/codecs/wm_hubs.c
+@@ -701,12 +701,12 @@ static const struct snd_soc_dapm_route analogue_routes[] = {
+
+ { "SPKL", "Input Switch", "MIXINL" },
+ { "SPKL", "IN1LP Switch", "IN1LP" },
+- { "SPKL", "Output Switch", "Left Output Mixer" },
++ { "SPKL", "Output Switch", "Left Output PGA" },
+ { "SPKL", NULL, "TOCLK" },
+
+ { "SPKR", "Input Switch", "MIXINR" },
+ { "SPKR", "IN1RP Switch", "IN1RP" },
+- { "SPKR", "Output Switch", "Right Output Mixer" },
++ { "SPKR", "Output Switch", "Right Output PGA" },
+ { "SPKR", NULL, "TOCLK" },
+
+ { "SPKL Boost", "Direct Voice Switch", "Direct Voice" },
+@@ -728,8 +728,8 @@ static const struct snd_soc_dapm_route analogue_routes[] = {
+ { "SPKOUTRP", NULL, "SPKR Driver" },
+ { "SPKOUTRN", NULL, "SPKR Driver" },
+
+- { "Left Headphone Mux", "Mixer", "Left Output Mixer" },
+- { "Right Headphone Mux", "Mixer", "Right Output Mixer" },
++ { "Left Headphone Mux", "Mixer", "Left Output PGA" },
++ { "Right Headphone Mux", "Mixer", "Right Output PGA" },
+
+ { "Headphone PGA", NULL, "Left Headphone Mux" },
+ { "Headphone PGA", NULL, "Right Headphone Mux" },
+--
+1.7.7
+
diff --git a/queue/Bluetooth-Add-MacBookAir3-1-2-support.patch b/queue/Bluetooth-Add-MacBookAir3-1-2-support.patch
new file mode 100644
index 0000000..5cf6f26
--- /dev/null
+++ b/queue/Bluetooth-Add-MacBookAir3-1-2-support.patch
@@ -0,0 +1,101 @@
+From 445746b3faf61adde0bd11e489725bf9a2d81bfc Mon Sep 17 00:00:00 2001
+From: "Edgar (gimli) Hucek" <gimli@dark-green.com>
+Date: Thu, 4 Nov 2010 08:04:33 +0100
+Subject: [PATCH] Bluetooth: Add MacBookAir3,1(2) support
+
+commit 3e3ede7dda2d77d2cbec608e663b6a6ace501bfc upstream.
+
+Adding the new MacBookAir3,1(2) to btusb.
+
+Output without the patch and btusb loaded :
+
+T: Bus=03 Lev=02 Prnt=03 Port=02 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=05ac ProdID=821b Rev= 0.34
+S: Manufacturer=Apple Inc.
+S: Product=Bluetooth USB Host Controller
+C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
+E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
+E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
+I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
+I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
+I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E: Ad=83(I) Atr=01(Isoc) MxPS= 32 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 32 Ivl=1ms
+I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E: Ad=83(I) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+E: Ad=83(I) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
+E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
+I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Output with the patch and btusb loaded :
+
+T: Bus=03 Lev=02 Prnt=03 Port=02 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=05ac ProdID=821b Rev= 0.34
+S: Manufacturer=Apple Inc.
+S: Product=Bluetooth USB Host Controller
+C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr= 0mA
+I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
+E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
+E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
+E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
+I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
+I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
+I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E: Ad=83(I) Atr=01(Isoc) MxPS= 32 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 32 Ivl=1ms
+I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E: Ad=83(I) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+E: Ad=83(I) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+E: Ad=03(O) Atr=01(Isoc) MxPS= 64 Ivl=1ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=84(I) Atr=02(Bulk) MxPS= 32 Ivl=0ms
+E: Ad=04(O) Atr=02(Bulk) MxPS= 32 Ivl=0ms
+I:* If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Signed-off-by: Edgar (gimli) Hucek <gimli@dark-green.com>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 7225e11..0eb6d1b 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -71,6 +71,9 @@ static struct usb_device_id btusb_table[] = {
+ /* Apple MacBookPro6,2 */
+ { USB_DEVICE(0x05ac, 0x8218) },
+
++ /* Apple MacBookAir3,1, MacBookAir3,2 */
++ { USB_DEVICE(0x05ac, 0x821b) },
++
+ /* AVM BlueFRITZ! USB v2.0 */
+ { USB_DEVICE(0x057c, 0x3800) },
+
+--
+1.7.7
+
diff --git a/queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo-2.patch b/queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo-2.patch
new file mode 100644
index 0000000..e1250d9
--- /dev/null
+++ b/queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo-2.patch
@@ -0,0 +1,45 @@
+From 6f7086f3be57b33bacd45731b9e9bf7105b4b078 Mon Sep 17 00:00:00 2001
+From: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date: Fri, 20 Aug 2010 16:24:07 +0900
+Subject: [PATCH] Bluetooth: Add support Bluetooth controller of MacbookPro
+ 7,1
+
+commit 3cd01976e702ccaffb907727caff4f8789353599 upstream.
+
+Bluetooth controller of MacbookPro 7,1 does not work.
+Because Device Class of these controllers was set 255 (Vendor Sepecific Class).
+
+T: Bus=04 Lev=02 Prnt=04 Port=00 Cnt=01 Dev#= 5 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=05ac ProdID=8213 Rev=01.86
+S: Manufacturer=Apple Inc.
+S: Product=Bluetooth USB Host Controller
+S: SerialNumber=5C5948C81B99
+C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
+I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
+I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=00 Driver=(none)
+
+Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index f55332d..7225e11 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -59,6 +59,9 @@ static struct usb_device_id btusb_table[] = {
+ /* Generic Bluetooth USB device */
+ { USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
+
++ /* Apple MacBookPro 7,1 */
++ { USB_DEVICE(0x05ac, 0x8213) },
++
+ /* Apple iMac11,1 */
+ { USB_DEVICE(0x05ac, 0x8215) },
+
+--
+1.7.7
+
diff --git a/queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo.patch b/queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo.patch
new file mode 100644
index 0000000..16d8857
--- /dev/null
+++ b/queue/Bluetooth-Add-support-Bluetooth-controller-of-Macboo.patch
@@ -0,0 +1,44 @@
+From 09cbe4fcb7c4fedca90ecf91eef1373fa80cb036 Mon Sep 17 00:00:00 2001
+From: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date: Fri, 20 Aug 2010 16:24:06 +0900
+Subject: [PATCH] Bluetooth: Add support Bluetooth controller of MacbookPro
+ 6,2
+
+commit 9c047157a20521cd525527947b13b950d168d2e6 upstream.
+
+Bluetooth controller of MacbookPro 6,2 does not work.
+Because Device Class of these controllers was set 255 (Vendor Sepecific Class).
+
+T: Bus=01 Lev=03 Prnt=03 Port=02 Cnt=03 Dev#= 8 Spd=12 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=05ac ProdID=8218 Rev=00.22
+S: Manufacturer=Apple Inc.
+S: Product=Bluetooth USB Host Controller
+C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
+I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
+I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
+I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
+
+Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Acked-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index c9e2dc8..f55332d 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -65,6 +65,9 @@ static struct usb_device_id btusb_table[] = {
+ /* Apple MacBookPro8,2 */
+ { USB_DEVICE(0x05ac, 0x821a) },
+
++ /* Apple MacBookPro6,2 */
++ { USB_DEVICE(0x05ac, 0x8218) },
++
+ /* AVM BlueFRITZ! USB v2.0 */
+ { USB_DEVICE(0x057c, 0x3800) },
+
+--
+1.7.7
+
diff --git a/queue/FLEXCOP-PCI-fix-__xlate_proc_name-warning-for-flexco.patch b/queue/FLEXCOP-PCI-fix-__xlate_proc_name-warning-for-flexco.patch
new file mode 100644
index 0000000..35b34c2
--- /dev/null
+++ b/queue/FLEXCOP-PCI-fix-__xlate_proc_name-warning-for-flexco.patch
@@ -0,0 +1,32 @@
+From c779da07bf49de72304e5074ee3b0ce4dfbd2c83 Mon Sep 17 00:00:00 2001
+From: Patrick Boettcher <pboettcher@kernellabs.com>
+Date: Sun, 3 Apr 2011 12:40:24 -0300
+Subject: [PATCH] FLEXCOP-PCI: fix __xlate_proc_name-warning for flexcop-pci
+
+commit b934c20de1398d4a82d2ecfeb588a214a910f13f upstream.
+
+This patch fixes the warning about bad names for sys-fs and other kernel-things. The flexcop-pci driver was using '/'-characters in it, which is not good.
+This has been fixed in several attempts by several people, but obviously never made it into the kernel.
+
+Signed-off-by: Patrick Boettcher <pboettcher@kernellabs.com>
+Cc: Steffen Barszus <steffenbpunkt@googlemail.com>
+Cc: Boris Cuber <me@boris64.net>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/media/dvb/b2c2/flexcop-pci.c b/drivers/media/dvb/b2c2/flexcop-pci.c
+index 227c020..4f3e3ce 100644
+--- a/drivers/media/dvb/b2c2/flexcop-pci.c
++++ b/drivers/media/dvb/b2c2/flexcop-pci.c
+@@ -38,7 +38,7 @@ MODULE_PARM_DESC(debug,
+ DEBSTATUS);
+
+ #define DRIVER_VERSION "0.1"
+-#define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver"
++#define DRIVER_NAME "flexcop-pci"
+ #define DRIVER_AUTHOR "Patrick Boettcher <patrick.boettcher@desy.de>"
+
+ struct flexcop_pci {
+--
+1.7.7
+
diff --git a/queue/Fix-corrupted-OSF-partition-table-parsing.patch b/queue/Fix-corrupted-OSF-partition-table-parsing.patch
new file mode 100644
index 0000000..7e5953f
--- /dev/null
+++ b/queue/Fix-corrupted-OSF-partition-table-parsing.patch
@@ -0,0 +1,73 @@
+From 336a0809e583bf31353800b9c9221627302025b2 Mon Sep 17 00:00:00 2001
+From: Timo Warns <Warns@pre-sense.de>
+Date: Mon, 14 Mar 2011 14:59:33 +0100
+Subject: [PATCH] Fix corrupted OSF partition table parsing
+
+commit 1eafbfeb7bdf59cfe173304c76188f3fd5f1fd05 upstream.
+
+The kernel automatically evaluates partition tables of storage devices.
+The code for evaluating OSF partitions contains a bug that leaks data
+from kernel heap memory to userspace for certain corrupted OSF
+partitions.
+
+In more detail:
+
+ for (i = 0 ; i < le16_to_cpu(label->d_npartitions); i++, partition++) {
+
+iterates from 0 to d_npartitions - 1, where d_npartitions is read from
+the partition table without validation and partition is a pointer to an
+array of at most 8 d_partitions.
+
+Add the proper and obvious validation.
+
+Signed-off-by: Timo Warns <warns@pre-sense.de>
+[ Changed the patch trivially to not repeat the whole le16_to_cpu()
+ thing, and to use an explicit constant for the magic value '8' ]
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/partitions/osf.c b/fs/partitions/osf.c
+index c05c17bc..6e0825e 100644
+--- a/fs/partitions/osf.c
++++ b/fs/partitions/osf.c
+@@ -10,10 +10,13 @@
+ #include "check.h"
+ #include "osf.h"
+
++#define MAX_OSF_PARTITIONS 8
++
+ int osf_partition(struct parsed_partitions *state, struct block_device *bdev)
+ {
+ int i;
+ int slot = 1;
++ unsigned int npartitions;
+ Sector sect;
+ unsigned char *data;
+ struct disklabel {
+@@ -45,7 +48,7 @@ int osf_partition(struct parsed_partitions *state, struct block_device *bdev)
+ u8 p_fstype;
+ u8 p_frag;
+ __le16 p_cpg;
+- } d_partitions[8];
++ } d_partitions[MAX_OSF_PARTITIONS];
+ } * label;
+ struct d_partition * partition;
+
+@@ -63,7 +66,12 @@ int osf_partition(struct parsed_partitions *state, struct block_device *bdev)
+ put_dev_sector(sect);
+ return 0;
+ }
+- for (i = 0 ; i < le16_to_cpu(label->d_npartitions); i++, partition++) {
++ npartitions = le16_to_cpu(label->d_npartitions);
++ if (npartitions > MAX_OSF_PARTITIONS) {
++ put_dev_sector(sect);
++ return 0;
++ }
++ for (i = 0 ; i < npartitions; i++, partition++) {
+ if (slot == state->limit)
+ break;
+ if (le32_to_cpu(partition->p_size))
+--
+1.7.7
+
diff --git a/queue/Fix-gcc-4.5.1-miscompiling-drivers-char-i8k.c-again.patch b/queue/Fix-gcc-4.5.1-miscompiling-drivers-char-i8k.c-again.patch
new file mode 100644
index 0000000..a0b5b55
--- /dev/null
+++ b/queue/Fix-gcc-4.5.1-miscompiling-drivers-char-i8k.c-again.patch
@@ -0,0 +1,71 @@
+From d919b8b86ef0bde9fa4f3dc8fd53766f06dc0010 Mon Sep 17 00:00:00 2001
+From: Jim Bos <jim876@xs4all.nl>
+Date: Mon, 15 Nov 2010 21:22:37 +0100
+Subject: [PATCH] Fix gcc 4.5.1 miscompiling drivers/char/i8k.c (again)
+
+commit 22d3243de86bc92d874abb7c5b185d5c47aba323 upstream.
+
+The fix in commit 6b4e81db2552 ("i8k: Tell gcc that *regs gets
+clobbered") to work around the gcc miscompiling i8k.c to add "+m
+(*regs)" caused register pressure problems and a build failure.
+
+Changing the 'asm' statement to 'asm volatile' instead should prevent
+that and works around the gcc bug as well, so we can remove the "+m".
+
+[ Background on the gcc bug: a memory clobber fails to mark the function
+ the asm resides in as non-pure (aka "__attribute__((const))"), so if
+ the function does nothing else that triggers the non-pure logic, gcc
+ will think that that function has no side effects at all. As a result,
+ callers will be mis-compiled.
+
+ Adding the "+m" made gcc see that it's not a pure function, and so
+ does "asm volatile". The problem was never really the need to mark
+ "*regs" as changed, since the memory clobber did that part - the
+ problem was just a bug in the gcc "pure" function analysis - Linus ]
+
+Signed-off-by: Jim Bos <jim876@xs4all.nl>
+Acked-by: Jakub Jelinek <jakub@redhat.com>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Andreas Schwab <schwab@linux-m68k.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
+index 828fd24..4365717 100644
+--- a/drivers/char/i8k.c
++++ b/drivers/char/i8k.c
+@@ -119,7 +119,7 @@ static int i8k_smm(struct smm_regs *regs)
+ int eax = regs->eax;
+
+ #if defined(CONFIG_X86_64)
+- asm("pushq %%rax\n\t"
++ asm volatile("pushq %%rax\n\t"
+ "movl 0(%%rax),%%edx\n\t"
+ "pushq %%rdx\n\t"
+ "movl 4(%%rax),%%ebx\n\t"
+@@ -141,11 +141,11 @@ static int i8k_smm(struct smm_regs *regs)
+ "lahf\n\t"
+ "shrl $8,%%eax\n\t"
+ "andl $1,%%eax\n"
+- :"=a"(rc), "+m" (*regs)
++ :"=a"(rc)
+ : "a"(regs)
+ : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
+ #else
+- asm("pushl %%eax\n\t"
++ asm volatile("pushl %%eax\n\t"
+ "movl 0(%%eax),%%edx\n\t"
+ "push %%edx\n\t"
+ "movl 4(%%eax),%%ebx\n\t"
+@@ -167,7 +167,7 @@ static int i8k_smm(struct smm_regs *regs)
+ "lahf\n\t"
+ "shrl $8,%%eax\n\t"
+ "andl $1,%%eax\n"
+- :"=a"(rc), "+m" (*regs)
++ :"=a"(rc)
+ : "a"(regs)
+ : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
+ #endif
+--
+1.7.7
+
diff --git a/queue/GFS2-BUG-in-gfs2_adjust_quota.patch b/queue/GFS2-BUG-in-gfs2_adjust_quota.patch
new file mode 100644
index 0000000..a6bc625
--- /dev/null
+++ b/queue/GFS2-BUG-in-gfs2_adjust_quota.patch
@@ -0,0 +1,46 @@
+From bd61524d4c5eefcc5243298748a3376365360a54 Mon Sep 17 00:00:00 2001
+From: Abhijith Das <adas@redhat.com>
+Date: Sun, 4 Jul 2010 01:33:24 -0400
+Subject: [PATCH] GFS2: BUG in gfs2_adjust_quota
+
+commit 8b4216018bdbfbb1b76150d202b15ee68c38e991 upstream.
+
+HighMem pages on i686 do not get mapped to the buffer_heads and this was
+causing a NULL pointer dereference when we were trying to memset page buffers
+to zero.
+We now use zero_user() that kmaps the page and directly manipulates page data.
+This patch also fixes a boundary condition that was incorrect.
+
+Signed-off-by: Abhi Das <adas@redhat.com>
+Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
+index fcd76f9..083e85c 100644
+--- a/fs/gfs2/quota.c
++++ b/fs/gfs2/quota.c
+@@ -694,10 +694,8 @@ get_a_page:
+ if (!buffer_mapped(bh))
+ goto unlock_out;
+ /* If it's a newly allocated disk block for quota, zero it */
+- if (buffer_new(bh)) {
+- memset(bh->b_data, 0, bh->b_size);
+- set_buffer_uptodate(bh);
+- }
++ if (buffer_new(bh))
++ zero_user(page, pos - blocksize, bh->b_size);
+ }
+
+ if (PageUptodate(page))
+@@ -723,7 +721,7 @@ get_a_page:
+
+ /* If quota straddles page boundary, we need to update the rest of the
+ * quota at the beginning of the next page */
+- if (offset != 0) { /* first page, offset is closer to PAGE_CACHE_SIZE */
++ if ((offset + sizeof(struct gfs2_quota)) > PAGE_CACHE_SIZE) {
+ ptr = ptr + nbytes;
+ nbytes = sizeof(struct gfs2_quota) - nbytes;
+ offset = 0;
+--
+1.7.7
+
diff --git a/queue/GFS2-Fix-writing-to-non-page-aligned-gfs2_quota-stru.patch b/queue/GFS2-Fix-writing-to-non-page-aligned-gfs2_quota-stru.patch
new file mode 100644
index 0000000..6558eef
--- /dev/null
+++ b/queue/GFS2-Fix-writing-to-non-page-aligned-gfs2_quota-stru.patch
@@ -0,0 +1,164 @@
+From 556f0dbe6791d2bae34ea9bb99fcde554565a2b6 Mon Sep 17 00:00:00 2001
+From: Abhijith Das <adas@redhat.com>
+Date: Fri, 7 May 2010 17:50:18 -0400
+Subject: [PATCH] GFS2: Fix writing to non-page aligned gfs2_quota structures
+
+commit 7e619bc3e6252dc746f64ac3b486e784822e9533 upstream.
+
+This is the upstream fix for this bug. This patch differs
+from the RHEL5 fix (Red Hat bz #555754) which simply writes to the 8-byte
+value field of the quota. In upstream quota code, we're
+required to write the entire quota (88 bytes) which can be split
+across a page boundary. We check for such quotas, and read/write
+the two parts from/to the corresponding pages holding these parts.
+
+With this patch, I don't see the bug anymore using the reproducer
+in Red Hat bz 555754. I successfully ran a couple of simple tests/mounts/
+umounts and it doesn't seem like this patch breaks anything else.
+
+Signed-off-by: Abhi Das <adas@redhat.com>
+Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
+index 6dbcbad..fcd76f9 100644
+--- a/fs/gfs2/quota.c
++++ b/fs/gfs2/quota.c
+@@ -637,15 +637,40 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
+ unsigned blocksize, iblock, pos;
+ struct buffer_head *bh, *dibh;
+ struct page *page;
+- void *kaddr;
+- struct gfs2_quota *qp;
+- s64 value;
+- int err = -EIO;
++ void *kaddr, *ptr;
++ struct gfs2_quota q, *qp;
++ int err, nbytes;
+ u64 size;
+
+ if (gfs2_is_stuffed(ip))
+ gfs2_unstuff_dinode(ip, NULL);
+-
++
++ memset(&q, 0, sizeof(struct gfs2_quota));
++ err = gfs2_internal_read(ip, NULL, (char *)&q, &loc, sizeof(q));
++ if (err < 0)
++ return err;
++
++ err = -EIO;
++ qp = &q;
++ qp->qu_value = be64_to_cpu(qp->qu_value);
++ qp->qu_value += change;
++ qp->qu_value = cpu_to_be64(qp->qu_value);
++ qd->qd_qb.qb_value = qp->qu_value;
++ if (fdq) {
++ if (fdq->d_fieldmask & FS_DQ_BSOFT) {
++ qp->qu_warn = cpu_to_be64(fdq->d_blk_softlimit);
++ qd->qd_qb.qb_warn = qp->qu_warn;
++ }
++ if (fdq->d_fieldmask & FS_DQ_BHARD) {
++ qp->qu_limit = cpu_to_be64(fdq->d_blk_hardlimit);
++ qd->qd_qb.qb_limit = qp->qu_limit;
++ }
++ }
++
++ /* Write the quota into the quota file on disk */
++ ptr = qp;
++ nbytes = sizeof(struct gfs2_quota);
++get_a_page:
+ page = grab_cache_page(mapping, index);
+ if (!page)
+ return -ENOMEM;
+@@ -667,7 +692,12 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
+ if (!buffer_mapped(bh)) {
+ gfs2_block_map(inode, iblock, bh, 1);
+ if (!buffer_mapped(bh))
+- goto unlock;
++ goto unlock_out;
++ /* If it's a newly allocated disk block for quota, zero it */
++ if (buffer_new(bh)) {
++ memset(bh->b_data, 0, bh->b_size);
++ set_buffer_uptodate(bh);
++ }
+ }
+
+ if (PageUptodate(page))
+@@ -677,32 +707,34 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
+ ll_rw_block(READ_META, 1, &bh);
+ wait_on_buffer(bh);
+ if (!buffer_uptodate(bh))
+- goto unlock;
++ goto unlock_out;
+ }
+
+ gfs2_trans_add_bh(ip->i_gl, bh, 0);
+
+ kaddr = kmap_atomic(page, KM_USER0);
+- qp = kaddr + offset;
+- value = (s64)be64_to_cpu(qp->qu_value) + change;
+- qp->qu_value = cpu_to_be64(value);
+- qd->qd_qb.qb_value = qp->qu_value;
+- if (fdq) {
+- if (fdq->d_fieldmask & FS_DQ_BSOFT) {
+- qp->qu_warn = cpu_to_be64(fdq->d_blk_softlimit);
+- qd->qd_qb.qb_warn = qp->qu_warn;
+- }
+- if (fdq->d_fieldmask & FS_DQ_BHARD) {
+- qp->qu_limit = cpu_to_be64(fdq->d_blk_hardlimit);
+- qd->qd_qb.qb_limit = qp->qu_limit;
+- }
+- }
++ if (offset + sizeof(struct gfs2_quota) > PAGE_CACHE_SIZE)
++ nbytes = PAGE_CACHE_SIZE - offset;
++ memcpy(kaddr + offset, ptr, nbytes);
+ flush_dcache_page(page);
+ kunmap_atomic(kaddr, KM_USER0);
++ unlock_page(page);
++ page_cache_release(page);
++
++ /* If quota straddles page boundary, we need to update the rest of the
++ * quota at the beginning of the next page */
++ if (offset != 0) { /* first page, offset is closer to PAGE_CACHE_SIZE */
++ ptr = ptr + nbytes;
++ nbytes = sizeof(struct gfs2_quota) - nbytes;
++ offset = 0;
++ index++;
++ goto get_a_page;
++ }
+
++ /* Update the disk inode timestamp and size (if extended) */
+ err = gfs2_meta_inode_buffer(ip, &dibh);
+ if (err)
+- goto unlock;
++ goto out;
+
+ size = loc + sizeof(struct gfs2_quota);
+ if (size > inode->i_size) {
+@@ -715,7 +747,9 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
+ brelse(dibh);
+ mark_inode_dirty(inode);
+
+-unlock:
++out:
++ return err;
++unlock_out:
+ unlock_page(page);
+ page_cache_release(page);
+ return err;
+@@ -779,8 +813,10 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
+ * rgrp since it won't be allocated during the transaction
+ */
+ al->al_requested = 1;
+- /* +1 in the end for block requested above for unstuffing */
+- blocks = num_qd * data_blocks + RES_DINODE + num_qd + 1;
++ /* +3 in the end for unstuffing block, inode size update block
++ * and another block in case quota straddles page boundary and
++ * two blocks need to be updated instead of 1 */
++ blocks = num_qd * data_blocks + RES_DINODE + num_qd + 3;
+
+ if (nalloc)
+ al->al_requested += nalloc * (data_blocks + ind_blocks);
+--
+1.7.7
+
diff --git a/queue/HID-add-MacBookAir-3-1-and-3-2-support.patch b/queue/HID-add-MacBookAir-3-1-and-3-2-support.patch
new file mode 100644
index 0000000..824c1c5
--- /dev/null
+++ b/queue/HID-add-MacBookAir-3-1-and-3-2-support.patch
@@ -0,0 +1,135 @@
+From 9c6732da9ece920e288bd41ca62edcaa5c01b538 Mon Sep 17 00:00:00 2001
+From: "Edgar (gimli) Hucek" <gimli@dark-green.com>
+Date: Wed, 3 Nov 2010 10:36:18 -0400
+Subject: [PATCH] HID: add MacBookAir 3,1 and 3,2 support
+
+commit 99b9f758bbc904f22faffcf4d83205f4a5e7bc0c upstream.
+
+This patch add support for the MacBookAir3,1 and MacBookAir3,2 to the hid
+driver.
+
+Signed-off-by: Edgar (gimli) Hucek <gimli@dark-green.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
+index bba05d0..1a2bb2a 100644
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -59,6 +59,27 @@ struct apple_key_translation {
+ u8 flags;
+ };
+
++static const struct apple_key_translation macbookair_fn_keys[] = {
++ { KEY_BACKSPACE, KEY_DELETE },
++ { KEY_ENTER, KEY_INSERT },
++ { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
++ { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY },
++ { KEY_F3, KEY_SCALE, APPLE_FLAG_FKEY },
++ { KEY_F4, KEY_DASHBOARD, APPLE_FLAG_FKEY },
++ { KEY_F6, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY },
++ { KEY_F7, KEY_PLAYPAUSE, APPLE_FLAG_FKEY },
++ { KEY_F8, KEY_NEXTSONG, APPLE_FLAG_FKEY },
++ { KEY_F9, KEY_MUTE, APPLE_FLAG_FKEY },
++ { KEY_F10, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY },
++ { KEY_F11, KEY_VOLUMEUP, APPLE_FLAG_FKEY },
++ { KEY_F12, KEY_EJECTCD, APPLE_FLAG_FKEY },
++ { KEY_UP, KEY_PAGEUP },
++ { KEY_DOWN, KEY_PAGEDOWN },
++ { KEY_LEFT, KEY_HOME },
++ { KEY_RIGHT, KEY_END },
++ { }
++};
++
+ static const struct apple_key_translation apple_fn_keys[] = {
+ { KEY_BACKSPACE, KEY_DELETE },
+ { KEY_ENTER, KEY_INSERT },
+@@ -157,10 +178,15 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
+ if (fnmode) {
+ int do_translate;
+
+- trans = apple_find_translation((hid->product < 0x21d ||
+- hid->product >= 0x300) ?
+- powerbook_fn_keys : apple_fn_keys,
+- usage->code);
++ if(hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI &&
++ hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) {
++ trans = apple_find_translation(macbookair_fn_keys, usage->code);
++ } else if (hid->product < 0x21d || hid->product >= 0x300) {
++ trans = apple_find_translation(powerbook_fn_keys, usage->code);
++ } else {
++ trans = apple_find_translation(apple_fn_keys, usage->code);
++ }
++
+ if (trans) {
+ if (test_bit(usage->code, asc->pressed_fn))
+ do_translate = 1;
+@@ -439,6 +465,18 @@ static const struct hid_device_id apple_devices[] = {
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
+ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI),
++ .driver_data = APPLE_HAS_FN },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO),
++ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS),
++ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI),
++ .driver_data = APPLE_HAS_FN },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO),
++ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS),
++ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
+ .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index 0010efa..07ddda5 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1284,6 +1284,12 @@ static const struct hid_device_id hid_blacklist[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
+@@ -1715,6 +1721,12 @@ static const struct hid_device_id hid_mouse_ignore_list[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
+ { }
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index b681cbf..fe054d6 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -92,6 +92,12 @@
+ #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
+ #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
+ #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
++#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f
++#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240
++#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241
++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242
++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243
++#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
+--
+1.7.7
+
diff --git a/queue/Increase-OSF-partition-limit-from-8-to-18.patch b/queue/Increase-OSF-partition-limit-from-8-to-18.patch
new file mode 100644
index 0000000..0fbbfc6
--- /dev/null
+++ b/queue/Increase-OSF-partition-limit-from-8-to-18.patch
@@ -0,0 +1,37 @@
+From 96d07dd2989cedbebef5db7b454b1bde40a5d58c Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Wed, 16 Mar 2011 08:04:07 -0700
+Subject: [PATCH] Increase OSF partition limit from 8 to 18
+
+commit 34d211a2d5df4984a35b18d8ccacbe1d10abb067 upstream.
+
+It turns out that while a maximum of 8 partitions may be what people
+"should" have had, you can actually fit up to 18 entries(*) in a sector.
+
+And some people clearly were taking advantage of that, like Michael
+Cree, who had ten partitions on one of his OSF disks.
+
+(*) The OSF partition data starts at byte offset 64 in the first sector,
+ and the array of 16-byte partition entries start at offset 148 in
+ the on-disk partition structure.
+
+Reported-by: Michael Cree <mcree@orcon.net.nz>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/partitions/osf.c b/fs/partitions/osf.c
+index 6e0825e..9ddca58 100644
+--- a/fs/partitions/osf.c
++++ b/fs/partitions/osf.c
+@@ -10,7 +10,7 @@
+ #include "check.h"
+ #include "osf.h"
+
+-#define MAX_OSF_PARTITIONS 8
++#define MAX_OSF_PARTITIONS 18
+
+ int osf_partition(struct parsed_partitions *state, struct block_device *bdev)
+ {
+--
+1.7.7
+
diff --git a/queue/Input-elantech-discard-the-first-2-positions-on-some.patch b/queue/Input-elantech-discard-the-first-2-positions-on-some.patch
new file mode 100644
index 0000000..d07dee0
--- /dev/null
+++ b/queue/Input-elantech-discard-the-first-2-positions-on-some.patch
@@ -0,0 +1,101 @@
+From 8775e47da2b6270c97dd0b951a608b1375391005 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C3=89ric=20Piel?= <E.A.B.Piel@tudelft.nl>
+Date: Thu, 5 Aug 2010 23:51:49 -0700
+Subject: [PATCH] Input: elantech - discard the first 2 positions on some
+ firmwares
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 7f29f17b57255b6395046805a98bc663ded63fb8 upstream.
+
+According to the Dell/Ubuntu driver, what was previously observed as
+"jumpy cursor" corresponds to the hardware sending incorrect data for
+the first two reports of a one touch finger. So let's use the same
+workaround as in the other driver. Also, detect another firmware
+version with the same behaviour, as in the other driver.
+
+Signed-off-by: Éric Piel <eric.piel@tremplin-utc.net>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
+index 4400369..a0c19c2 100644
+--- a/drivers/input/mouse/elantech.c
++++ b/drivers/input/mouse/elantech.c
+@@ -183,7 +183,6 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
+ struct elantech_data *etd = psmouse->private;
+ unsigned char *packet = psmouse->packet;
+ int fingers;
+- static int old_fingers;
+
+ if (etd->fw_version < 0x020000) {
+ /*
+@@ -201,10 +200,13 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
+ }
+
+ if (etd->jumpy_cursor) {
+- /* Discard packets that are likely to have bogus coordinates */
+- if (fingers > old_fingers) {
++ if (fingers != 1) {
++ etd->single_finger_reports = 0;
++ } else if (etd->single_finger_reports < 2) {
++ /* Discard first 2 reports of one finger, bogus */
++ etd->single_finger_reports++;
+ elantech_debug("elantech.c: discarding packet\n");
+- goto discard_packet_v1;
++ return;
+ }
+ }
+
+@@ -236,9 +238,6 @@ static void elantech_report_absolute_v1(struct psmouse *psmouse)
+ }
+
+ input_sync(dev);
+-
+- discard_packet_v1:
+- old_fingers = fingers;
+ }
+
+ /*
+@@ -734,14 +733,14 @@ int elantech_init(struct psmouse *psmouse)
+ etd->capabilities = param[0];
+
+ /*
+- * This firmware seems to suffer from misreporting coordinates when
++ * This firmware suffers from misreporting coordinates when
+ * a touch action starts causing the mouse cursor or scrolled page
+ * to jump. Enable a workaround.
+ */
+- if (etd->fw_version == 0x020022) {
+- pr_info("elantech.c: firmware version 2.0.34 detected, "
++ if (etd->fw_version == 0x020022 || etd->fw_version == 0x020600) {
++ pr_info("elantech.c: firmware version 2.0.34/2.6.0 detected, "
+ "enabling jumpy cursor workaround\n");
+- etd->jumpy_cursor = 1;
++ etd->jumpy_cursor = true;
+ }
+
+ if (elantech_set_absolute_mode(psmouse)) {
+diff --git a/drivers/input/mouse/elantech.h b/drivers/input/mouse/elantech.h
+index ac57bde..aa4aac5 100644
+--- a/drivers/input/mouse/elantech.h
++++ b/drivers/input/mouse/elantech.h
+@@ -100,10 +100,11 @@ struct elantech_data {
+ unsigned char reg_26;
+ unsigned char debug;
+ unsigned char capabilities;
+- unsigned char paritycheck;
+- unsigned char jumpy_cursor;
++ bool paritycheck;
++ bool jumpy_cursor;
+ unsigned char hw_version;
+- unsigned int fw_version;
++ unsigned int fw_version;
++ unsigned int single_finger_reports;
+ unsigned char parity[256];
+ };
+
+--
+1.7.7
+
diff --git a/queue/Input-elantech-relax-signature-checks.patch b/queue/Input-elantech-relax-signature-checks.patch
new file mode 100644
index 0000000..8223e87
--- /dev/null
+++ b/queue/Input-elantech-relax-signature-checks.patch
@@ -0,0 +1,57 @@
+From 6def2d4ffd0118f59a4ed06986df71cef9ba7f72 Mon Sep 17 00:00:00 2001
+From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Date: Wed, 19 May 2010 10:11:13 -0700
+Subject: [PATCH] Input: elantech - relax signature checks
+
+commit a083632eaf6231162b33e40561cfec6a9c156945 upstream.
+
+Apparently there are Elantech touchpads that report non-zero in the 2nd byte
+of their signature. Adjust the detection routine so that if 2nd byte is
+zero and 3rd byte contains value that is not a valid report rate, we still
+assume that signature is valid.
+
+Tested-by: Eric Piel <eric.piel@tremplin-utc.net>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
+index 112b4ee..4400369 100644
+--- a/drivers/input/mouse/elantech.c
++++ b/drivers/input/mouse/elantech.c
+@@ -575,6 +575,24 @@ static struct attribute_group elantech_attr_group = {
+ .attrs = elantech_attrs,
+ };
+
++static bool elantech_is_signature_valid(const unsigned char *param)
++{
++ static const unsigned char rates[] = { 200, 100, 80, 60, 40, 20, 10 };
++ int i;
++
++ if (param[0] == 0)
++ return false;
++
++ if (param[1] == 0)
++ return true;
++
++ for (i = 0; i < ARRAY_SIZE(rates); i++)
++ if (param[2] == rates[i])
++ return false;
++
++ return true;
++}
++
+ /*
+ * Use magic knock to detect Elantech touchpad
+ */
+@@ -618,7 +636,7 @@ int elantech_detect(struct psmouse *psmouse, bool set_properties)
+ pr_debug("elantech.c: Elantech version query result 0x%02x, 0x%02x, 0x%02x.\n",
+ param[0], param[1], param[2]);
+
+- if (param[0] == 0 || param[1] != 0) {
++ if (!elantech_is_signature_valid(param)) {
+ if (!force_elantech) {
+ pr_debug("elantech.c: Probably not a real Elantech touchpad. Aborting.\n");
+ return -1;
+--
+1.7.7
+
diff --git a/queue/NFS-nfs_wcc_update_inode-should-set-nfsi-attr_gencou.patch b/queue/NFS-nfs_wcc_update_inode-should-set-nfsi-attr_gencou.patch
new file mode 100644
index 0000000..9bfe0cf
--- /dev/null
+++ b/queue/NFS-nfs_wcc_update_inode-should-set-nfsi-attr_gencou.patch
@@ -0,0 +1,82 @@
+From 3aed5e2c21667fcb2d647390e2fc43f169fc98d8 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Tue, 25 Jan 2011 15:28:21 -0500
+Subject: [PATCH] NFS: nfs_wcc_update_inode() should set nfsi->attr_gencount
+
+commit 27dc1cd3ad9300f81e1219e5fc305d91d85353f8 upstream.
+
+If the call to nfs_wcc_update_inode() results in an attribute update, we
+need to ensure that the inode's attr_gencount gets bumped too, otherwise
+we are not protected against races with other GETATTR calls.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
+index 50a56ed..b0299c0 100644
+--- a/fs/nfs/inode.c
++++ b/fs/nfs/inode.c
+@@ -793,9 +793,10 @@ out:
+ return ret;
+ }
+
+-static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
++static unsigned long nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
+ {
+ struct nfs_inode *nfsi = NFS_I(inode);
++ unsigned long ret = 0;
+
+ if ((fattr->valid & NFS_ATTR_FATTR_PRECHANGE)
+ && (fattr->valid & NFS_ATTR_FATTR_CHANGE)
+@@ -803,25 +804,32 @@ static void nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr *fattr)
+ nfsi->change_attr = fattr->change_attr;
+ if (S_ISDIR(inode->i_mode))
+ nfsi->cache_validity |= NFS_INO_INVALID_DATA;
++ ret |= NFS_INO_INVALID_ATTR;
+ }
+ /* If we have atomic WCC data, we may update some attributes */
+ if ((fattr->valid & NFS_ATTR_FATTR_PRECTIME)
+ && (fattr->valid & NFS_ATTR_FATTR_CTIME)
+- && timespec_equal(&inode->i_ctime, &fattr->pre_ctime))
+- memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
++ && timespec_equal(&inode->i_ctime, &fattr->pre_ctime)) {
++ memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
++ ret |= NFS_INO_INVALID_ATTR;
++ }
+
+ if ((fattr->valid & NFS_ATTR_FATTR_PREMTIME)
+ && (fattr->valid & NFS_ATTR_FATTR_MTIME)
+ && timespec_equal(&inode->i_mtime, &fattr->pre_mtime)) {
+- memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
+- if (S_ISDIR(inode->i_mode))
+- nfsi->cache_validity |= NFS_INO_INVALID_DATA;
++ memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
++ if (S_ISDIR(inode->i_mode))
++ nfsi->cache_validity |= NFS_INO_INVALID_DATA;
++ ret |= NFS_INO_INVALID_ATTR;
+ }
+ if ((fattr->valid & NFS_ATTR_FATTR_PRESIZE)
+ && (fattr->valid & NFS_ATTR_FATTR_SIZE)
+ && i_size_read(inode) == nfs_size_to_loff_t(fattr->pre_size)
+- && nfsi->npages == 0)
+- i_size_write(inode, nfs_size_to_loff_t(fattr->size));
++ && nfsi->npages == 0) {
++ i_size_write(inode, nfs_size_to_loff_t(fattr->size));
++ ret |= NFS_INO_INVALID_ATTR;
++ }
++ return ret;
+ }
+
+ /**
+@@ -1115,7 +1123,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
+ | NFS_INO_REVAL_PAGECACHE);
+
+ /* Do atomic weak cache consistency updates */
+- nfs_wcc_update_inode(inode, fattr);
++ invalid |= nfs_wcc_update_inode(inode, fattr);
+
+ /* More cache consistency checks */
+ if (fattr->valid & NFS_ATTR_FATTR_CHANGE) {
+--
+1.7.7
+
diff --git a/queue/NFSv4.1-Ensure-state-manager-thread-dies-on-last-umo.patch b/queue/NFSv4.1-Ensure-state-manager-thread-dies-on-last-umo.patch
new file mode 100644
index 0000000..63242ae
--- /dev/null
+++ b/queue/NFSv4.1-Ensure-state-manager-thread-dies-on-last-umo.patch
@@ -0,0 +1,38 @@
+From 704acf920b270d2649fdf822d9cf5836a852f597 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Fri, 15 Apr 2011 17:34:18 -0400
+Subject: [PATCH] NFSv4.1: Ensure state manager thread dies on last umount
+
+commit 47c2199b6eb5fbe38ddb844db7cdbd914d304f9c upstream.
+
+Currently, the state manager may continue to try recovering state forever
+even after the last filesystem to reference that nfs_client has umounted.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
+index 6c5ed51..c03bdcc 100644
+--- a/fs/nfs/nfs4state.c
++++ b/fs/nfs/nfs4state.c
+@@ -1399,7 +1399,7 @@ static void nfs4_state_manager(struct nfs_client *clp)
+ int status = 0;
+
+ /* Ensure exclusive access to NFSv4 state */
+- for(;;) {
++ do {
+ if (test_and_clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) {
+ /* We're going to have to re-establish a clientid */
+ status = nfs4_reclaim_lease(clp);
+@@ -1482,7 +1482,7 @@ static void nfs4_state_manager(struct nfs_client *clp)
+ break;
+ if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
+ break;
+- }
++ } while (atomic_read(&clp->cl_count) > 1);
+ return;
+ out_error:
+ printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s"
+--
+1.7.7
+
diff --git a/queue/Open-with-O_CREAT-flag-set-fails-to-open-existing-fi.patch b/queue/Open-with-O_CREAT-flag-set-fails-to-open-existing-fi.patch
new file mode 100644
index 0000000..8bde0c8
--- /dev/null
+++ b/queue/Open-with-O_CREAT-flag-set-fails-to-open-existing-fi.patch
@@ -0,0 +1,55 @@
+From 44f91c3ff3bd1b2234eb382a5348e3f6d1fdd57e Mon Sep 17 00:00:00 2001
+From: Sachin Prabhu <sprabhu@redhat.com>
+Date: Wed, 20 Apr 2011 13:09:35 +0100
+Subject: [PATCH] Open with O_CREAT flag set fails to open existing files on
+ non writable directories
+
+commit 1574dff8996ab1ed92c09012f8038b5566fce313 upstream.
+
+An open on a NFS4 share using the O_CREAT flag on an existing file for
+which we have permissions to open but contained in a directory with no
+write permissions will fail with EACCES.
+
+A tcpdump shows that the client had set the open mode to UNCHECKED which
+indicates that the file should be created if it doesn't exist and
+encountering an existing flag is not an error. Since in this case the
+file exists and can be opened by the user, the NFS server is wrong in
+attempting to check create permissions on the parent directory.
+
+The patch adds a conditional statement to check for create permissions
+only if the file doesn't exist.
+
+Signed-off-by: Sachin S. Prabhu <sprabhu@redhat.com>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
+index 054b50b..7de2873 100644
+--- a/fs/nfsd/vfs.c
++++ b/fs/nfsd/vfs.c
+@@ -1387,7 +1387,7 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp,
+ goto out;
+ if (!(iap->ia_valid & ATTR_MODE))
+ iap->ia_mode = 0;
+- err = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_CREATE);
++ err = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_EXEC);
+ if (err)
+ goto out;
+
+@@ -1409,6 +1409,13 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp,
+ if (IS_ERR(dchild))
+ goto out_nfserr;
+
++ /* If file doesn't exist, check for permissions to create one */
++ if (!dchild->d_inode) {
++ err = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_CREATE);
++ if (err)
++ goto out;
++ }
++
+ err = fh_compose(resfhp, fhp->fh_export, dchild, fhp);
+ if (err)
+ goto out;
+--
+1.7.7
+
diff --git a/queue/Remove-extra-struct-page-member-from-the-buffer-info.patch b/queue/Remove-extra-struct-page-member-from-the-buffer-info.patch
new file mode 100644
index 0000000..e9ab8ad
--- /dev/null
+++ b/queue/Remove-extra-struct-page-member-from-the-buffer-info.patch
@@ -0,0 +1,31 @@
+From a214f9ddf5213a79078c93280aacee33d6675956 Mon Sep 17 00:00:00 2001
+From: Greg Rose <gregory.v.rose@intel.com>
+Date: Tue, 16 Nov 2010 19:41:36 -0800
+Subject: [PATCH] Remove extra struct page member from the buffer info
+ structure
+
+commit b1d670f10e8078485884f0cf7e384d890909aeaa upstream.
+
+declaration.
+
+Reported-by: Andi Kleen <andi@firstfloor.org>
+Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
+Tested-by: Emil Tantilov <emil.s.tantilov@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/igbvf/igbvf.h b/drivers/net/igbvf/igbvf.h
+index debeee2..f7ae284 100644
+--- a/drivers/net/igbvf/igbvf.h
++++ b/drivers/net/igbvf/igbvf.h
+@@ -126,7 +126,6 @@ struct igbvf_buffer {
+ unsigned int page_offset;
+ };
+ };
+- struct page *page;
+ };
+
+ union igbvf_desc {
+--
+1.7.7
+
diff --git a/queue/SUNRPC-fix-NFS-client-over-TCP-hangs-due-to-packet-l.patch b/queue/SUNRPC-fix-NFS-client-over-TCP-hangs-due-to-packet-l.patch
new file mode 100644
index 0000000..deabb2d
--- /dev/null
+++ b/queue/SUNRPC-fix-NFS-client-over-TCP-hangs-due-to-packet-l.patch
@@ -0,0 +1,67 @@
+From 78e4ee0eb3280bbd319b86c41ad90e0d63ec3aa6 Mon Sep 17 00:00:00 2001
+From: Andy Chittenden <andyc.bluearc@gmail.com>
+Date: Tue, 10 Aug 2010 10:19:53 -0400
+Subject: [PATCH] SUNRPC: fix NFS client over TCP hangs due to packet loss
+ (Bug 16494)
+
+commit 669502ff31d7dba1849aec7ee2450a3c61f57d39 upstream.
+
+When reusing a TCP connection, ensure that it's aborted if a previous
+shutdown attempt has been made on that connection so that the RPC over
+TCP recovery mechanism succeeds.
+
+Signed-off-by: Andy Chittenden <andyc.bluearc@gmail.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
+index b613cb7..9bfb685 100644
+--- a/net/sunrpc/xprtsock.c
++++ b/net/sunrpc/xprtsock.c
+@@ -1324,10 +1324,11 @@ static void xs_tcp_state_change(struct sock *sk)
+ if (!(xprt = xprt_from_sock(sk)))
+ goto out;
+ dprintk("RPC: xs_tcp_state_change client %p...\n", xprt);
+- dprintk("RPC: state %x conn %d dead %d zapped %d\n",
++ dprintk("RPC: state %x conn %d dead %d zapped %d sk_shutdown %d\n",
+ sk->sk_state, xprt_connected(xprt),
+ sock_flag(sk, SOCK_DEAD),
+- sock_flag(sk, SOCK_ZAPPED));
++ sock_flag(sk, SOCK_ZAPPED),
++ sk->sk_shutdown);
+
+ switch (sk->sk_state) {
+ case TCP_ESTABLISHED:
+@@ -1798,10 +1799,25 @@ static void xs_tcp_reuse_connection(struct rpc_xprt *xprt, struct sock_xprt *tra
+ {
+ unsigned int state = transport->inet->sk_state;
+
+- if (state == TCP_CLOSE && transport->sock->state == SS_UNCONNECTED)
+- return;
+- if ((1 << state) & (TCPF_ESTABLISHED|TCPF_SYN_SENT))
+- return;
++ if (state == TCP_CLOSE && transport->sock->state == SS_UNCONNECTED) {
++ /* we don't need to abort the connection if the socket
++ * hasn't undergone a shutdown
++ */
++ if (transport->inet->sk_shutdown == 0)
++ return;
++ dprintk("RPC: %s: TCP_CLOSEd and sk_shutdown set to %d\n",
++ __func__, transport->inet->sk_shutdown);
++ }
++ if ((1 << state) & (TCPF_ESTABLISHED|TCPF_SYN_SENT)) {
++ /* we don't need to abort the connection if the socket
++ * hasn't undergone a shutdown
++ */
++ if (transport->inet->sk_shutdown == 0)
++ return;
++ dprintk("RPC: %s: ESTABLISHED/SYN_SENT "
++ "sk_shutdown set to %d\n",
++ __func__, transport->inet->sk_shutdown);
++ }
+ xs_abort_connection(xprt, transport);
+ }
+
+--
+1.7.7
+
diff --git a/queue/Staging-rtl8192su-Clean-up-in-case-of-an-error-in-mo.patch b/queue/Staging-rtl8192su-Clean-up-in-case-of-an-error-in-mo.patch
new file mode 100644
index 0000000..e319688
--- /dev/null
+++ b/queue/Staging-rtl8192su-Clean-up-in-case-of-an-error-in-mo.patch
@@ -0,0 +1,104 @@
+From df75c69688944dc69bd04e3fba596ca469f38fc7 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 25 May 2010 04:20:30 +0100
+Subject: [PATCH] Staging: rtl8192su: Clean up in case of an error in module
+ initialisation
+
+commit 9a3dfa0555130952517b9a9c3918729495aa709a upstream.
+
+Currently various resources may be leaked in case of an error.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
+index 04f8516..9848d08 100644
+--- a/drivers/staging/rtl8192su/r8192U_core.c
++++ b/drivers/staging/rtl8192su/r8192U_core.c
+@@ -960,10 +960,11 @@ static int proc_get_stats_rx(char *page, char **start,
+ return len;
+ }
+
+-void rtl8192_proc_module_init(void)
++int rtl8192_proc_module_init(void)
+ {
+ RT_TRACE(COMP_INIT, "Initializing proc filesystem");
+ rtl8192_proc=create_proc_entry(RTL819xU_MODULE_NAME, S_IFDIR, init_net.proc_net);
++ return rtl8192_proc ? 0 : -ENOMEM;
+ }
+
+
+@@ -7526,35 +7527,63 @@ static int __init rtl8192_usb_module_init(void)
+ ret = ieee80211_crypto_init();
+ if (ret) {
+ printk(KERN_ERR "ieee80211_crypto_init() failed %d\n", ret);
+- return ret;
++ goto fail_crypto;
+ }
+
+ ret = ieee80211_crypto_tkip_init();
+ if (ret) {
+ printk(KERN_ERR "ieee80211_crypto_tkip_init() failed %d\n",
+ ret);
+- return ret;
++ goto fail_crypto_tkip;
+ }
+
+ ret = ieee80211_crypto_ccmp_init();
+ if (ret) {
+ printk(KERN_ERR "ieee80211_crypto_ccmp_init() failed %d\n",
+ ret);
+- return ret;
++ goto fail_crypto_ccmp;
+ }
+
+ ret = ieee80211_crypto_wep_init();
+ if (ret) {
+ printk(KERN_ERR "ieee80211_crypto_wep_init() failed %d\n", ret);
+- return ret;
++ goto fail_crypto_wep;
+ }
+
+ printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n");
+ printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan\n");
+ RT_TRACE(COMP_INIT, "Initializing module");
+ RT_TRACE(COMP_INIT, "Wireless extensions version %d", WIRELESS_EXT);
+- rtl8192_proc_module_init();
+- return usb_register(&rtl8192_usb_driver);
++
++ ret = rtl8192_proc_module_init();
++ if (ret) {
++ pr_err("rtl8192_proc_module_init() failed %d\n", ret);
++ goto fail_proc;
++ }
++
++ ret = usb_register(&rtl8192_usb_driver);
++ if (ret) {
++ pr_err("usb_register() failed %d\n", ret);
++ goto fail_usb;
++ }
++
++ return 0;
++
++fail_usb:
++ rtl8192_proc_module_remove();
++fail_proc:
++ ieee80211_crypto_wep_exit();
++fail_crypto_wep:
++ ieee80211_crypto_ccmp_exit();
++fail_crypto_ccmp:
++ ieee80211_crypto_tkip_exit();
++fail_crypto_tkip:
++ ieee80211_crypto_deinit();
++fail_crypto:
++#ifdef CONFIG_IEEE80211_DEBUG
++ ieee80211_debug_exit();
++#endif
++ return ret;
+ }
+
+
+--
+1.7.7
+
diff --git a/queue/Staging-rtl8192su-Fix-procfs-code-for-interfaces-not.patch b/queue/Staging-rtl8192su-Fix-procfs-code-for-interfaces-not.patch
new file mode 100644
index 0000000..51e4826
--- /dev/null
+++ b/queue/Staging-rtl8192su-Fix-procfs-code-for-interfaces-not.patch
@@ -0,0 +1,107 @@
+From ac9cdb2fe70723f22f27bf0f61dc1f3688d1c564 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Tue, 25 May 2010 04:25:57 +0100
+Subject: [PATCH] Staging: rtl8192su: Fix procfs code for interfaces not named
+ wlan0
+
+commit 41a38d9e632f7c9ec5ad8fc627567d97f4302c4a upstream.
+
+The current code creates directories in procfs named after interfaces,
+but doesn't handle renaming. This can result in name collisions and
+consequent WARNINGs. It also means that the interface name cannot
+reliably be used to remove the directory - in fact the current code
+doesn't even try, and always uses "wlan0"!
+
+Since the name of a proc_dir_entry is embedded in it, use that when
+removing it.
+
+Add a netdev notifier to catch interface renaming, and remove and
+re-add the directory at this point.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
+index 9848d08..7946cf6 100644
+--- a/drivers/staging/rtl8192su/r8192U_core.c
++++ b/drivers/staging/rtl8192su/r8192U_core.c
+@@ -26,6 +26,7 @@
+
+ #include <linux/vmalloc.h>
+ #include <linux/slab.h>
++#include <linux/notifier.h>
+
+ #undef LOOP_TEST
+ #undef DUMP_RX
+@@ -161,6 +162,8 @@ MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI");
+ static int __devinit rtl8192_usb_probe(struct usb_interface *intf,
+ const struct usb_device_id *id);
+ static void __devexit rtl8192_usb_disconnect(struct usb_interface *intf);
++static const struct net_device_ops rtl8192_netdev_ops;
++static struct notifier_block proc_netdev_notifier;
+
+ static struct usb_driver rtl8192_usb_driver = {
+ .name = RTL819xU_MODULE_NAME, /* Driver name */
+@@ -962,14 +965,22 @@ static int proc_get_stats_rx(char *page, char **start,
+
+ int rtl8192_proc_module_init(void)
+ {
++ int ret;
++
+ RT_TRACE(COMP_INIT, "Initializing proc filesystem");
+ rtl8192_proc=create_proc_entry(RTL819xU_MODULE_NAME, S_IFDIR, init_net.proc_net);
+- return rtl8192_proc ? 0 : -ENOMEM;
++ if (!rtl8192_proc)
++ return -ENOMEM;
++ ret = register_netdevice_notifier(&proc_netdev_notifier);
++ if (ret)
++ remove_proc_entry(RTL819xU_MODULE_NAME, init_net.proc_net);
++ return ret;
+ }
+
+
+ void rtl8192_proc_module_remove(void)
+ {
++ unregister_netdevice_notifier(&proc_netdev_notifier);
+ remove_proc_entry(RTL819xU_MODULE_NAME, init_net.proc_net);
+ }
+
+@@ -997,8 +1008,7 @@ void rtl8192_proc_remove_one(struct net_device *dev)
+ remove_proc_entry("registers-e", priv->dir_dev);
+ // remove_proc_entry("cck-registers",priv->dir_dev);
+ // remove_proc_entry("ofdm-registers",priv->dir_dev);
+- //remove_proc_entry(dev->name, rtl8192_proc);
+- remove_proc_entry("wlan0", rtl8192_proc);
++ remove_proc_entry(priv->dir_dev->name, rtl8192_proc);
+ priv->dir_dev = NULL;
+ }
+ }
+@@ -1115,6 +1125,25 @@ void rtl8192_proc_init_one(struct net_device *dev)
+ dev->name);
+ }
+ }
++
++static int proc_netdev_event(struct notifier_block *this,
++ unsigned long event, void *ptr)
++{
++ struct net_device *net_dev = ptr;
++
++ if (net_dev->netdev_ops == &rtl8192_netdev_ops &&
++ event == NETDEV_CHANGENAME) {
++ rtl8192_proc_remove_one(net_dev);
++ rtl8192_proc_init_one(net_dev);
++ }
++
++ return NOTIFY_DONE;
++}
++
++static struct notifier_block proc_netdev_notifier = {
++ .notifier_call = proc_netdev_event,
++};
++
+ /****************************************************************************
+ -----------------------------MISC STUFF-------------------------
+ *****************************************************************************/
+--
+1.7.7
+
diff --git a/queue/Staging-rtl8192su-add-device-ids.patch b/queue/Staging-rtl8192su-add-device-ids.patch
new file mode 100644
index 0000000..8ad3154
--- /dev/null
+++ b/queue/Staging-rtl8192su-add-device-ids.patch
@@ -0,0 +1,62 @@
+From b7d7dcd072f3404e8e3d44b0247a1ad703d934fa Mon Sep 17 00:00:00 2001
+From: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
+Date: Tue, 8 Jun 2010 03:47:13 +0200
+Subject: [PATCH] Staging: rtl8192su: add device ids
+
+commit 15d93ed070125d51693f102a0f94045dcaf30d9b upstream.
+
+This patch adds some device ids.
+The list of supported devices was extracted from realteks driver package.
+(0x050d, 0x815F) and (0x0df6, 0x004b) are not in the official list of
+supported devices and may not work correctly.
+In case of problems with these, they should probably be removed from the list.
+
+Signed-off-by: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
+index f4cc5f0..a813a7b 100644
+--- a/drivers/staging/rtl8192su/r8192U_core.c
++++ b/drivers/staging/rtl8192su/r8192U_core.c
+@@ -113,14 +113,30 @@ u32 rt_global_debug_component = \
+ #define CAM_CONTENT_COUNT 8
+
+ static const struct usb_device_id rtl8192_usb_id_tbl[] = {
+- /* Realtek */
+- {USB_DEVICE(0x0bda, 0x8171)},
+- {USB_DEVICE(0x050d, 0x815F)}, /* Belkin F5D8053 v6 */
+- {USB_DEVICE(0x0df6, 0x004b)}, /* WL-349 */
+- /* Guillemot */
+- {USB_DEVICE(0x06f8, 0xe031)},
+- //92SU
++ {USB_DEVICE(0x0bda, 0x8171)}, /* Realtek */
+ {USB_DEVICE(0x0bda, 0x8172)},
++ {USB_DEVICE(0x0bda, 0x8173)},
++ {USB_DEVICE(0x0bda, 0x8174)},
++ {USB_DEVICE(0x0bda, 0x8712)},
++ {USB_DEVICE(0x0bda, 0x8713)},
++ {USB_DEVICE(0x07aa, 0x0047)},
++ {USB_DEVICE(0x07d1, 0x3303)},
++ {USB_DEVICE(0x07d1, 0x3302)},
++ {USB_DEVICE(0x07d1, 0x3300)},
++ {USB_DEVICE(0x1740, 0x9603)},
++ {USB_DEVICE(0x1740, 0x9605)},
++ {USB_DEVICE(0x050d, 0x815F)},
++ {USB_DEVICE(0x06f8, 0xe031)},
++ {USB_DEVICE(0x7392, 0x7611)},
++ {USB_DEVICE(0x7392, 0x7612)},
++ {USB_DEVICE(0x7392, 0x7622)},
++ {USB_DEVICE(0x0DF6, 0x0045)},
++ {USB_DEVICE(0x0E66, 0x0015)},
++ {USB_DEVICE(0x0E66, 0x0016)},
++ {USB_DEVICE(0x0b05, 0x1786)},
++ /* these are not in the official list */
++ {USB_DEVICE(0x050d, 0x815F)}, /* Belkin F5D8053 v6 */
++ {USB_DEVICE(0x0df6, 0x004b)}, /* WL-349 */
+ {}
+ };
+
+--
+1.7.7
+
diff --git a/queue/Staging-rtl8192su-check-for-skb-NULL.patch b/queue/Staging-rtl8192su-check-for-skb-NULL.patch
new file mode 100644
index 0000000..b03e3b2
--- /dev/null
+++ b/queue/Staging-rtl8192su-check-for-skb-NULL.patch
@@ -0,0 +1,238 @@
+From b57e88de77b82d3667719c31c07447bfe278c0d9 Mon Sep 17 00:00:00 2001
+From: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
+Date: Tue, 4 May 2010 14:23:43 +0200
+Subject: [PATCH] Staging: rtl8192su: check for skb == NULL
+
+commit 199ef62a287b429a8fa3b7dc5ae6b69f607bf324 upstream.
+
+added 2 checks for skb == NULL.
+plus cosmetics
+
+Signed-off-by: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/staging/rtl8192su/r8192S_firmware.c b/drivers/staging/rtl8192su/r8192S_firmware.c
+index 752a3f1..f7dd7e7 100644
+--- a/drivers/staging/rtl8192su/r8192S_firmware.c
++++ b/drivers/staging/rtl8192su/r8192S_firmware.c
+@@ -31,44 +31,46 @@
+ // Code size
+ // Created by Roger, 2008.04.10.
+ //
+-bool FirmwareDownloadCode(struct net_device *dev, u8 * code_virtual_address,u32 buffer_len)
++bool FirmwareDownloadCode(struct net_device *dev,
++ u8 *code_virtual_address,
++ u32 buffer_len)
+ {
+- struct r8192_priv *priv = ieee80211_priv(dev);
+- bool rt_status = true;
+- u16 frag_threshold = MAX_FIRMWARE_CODE_SIZE; //Fragmentation might be required in 90/92 but not in 92S
+- u16 frag_length, frag_offset = 0;
+- struct sk_buff *skb;
+- unsigned char *seg_ptr;
+- cb_desc *tcb_desc;
+- u8 bLastIniPkt = 0;
+- u16 ExtraDescOffset = 0;
++ struct r8192_priv *priv = ieee80211_priv(dev);
++ bool rt_status = true;
++ /* Fragmentation might be required in 90/92 but not in 92S */
++ u16 frag_threshold = MAX_FIRMWARE_CODE_SIZE;
++ u16 frag_length, frag_offset = 0;
++ struct sk_buff *skb;
++ unsigned char *seg_ptr;
++ cb_desc *tcb_desc;
++ u8 bLastIniPkt = 0;
++ u16 ExtraDescOffset = 0;
+
+-
+- RT_TRACE(COMP_FIRMWARE, "--->FirmwareDownloadCode()\n" );
+-
+- //MAX_TRANSMIT_BUFFER_SIZE
+- if(buffer_len >= MAX_FIRMWARE_CODE_SIZE-USB_HWDESC_HEADER_LEN)
+- {
+- RT_TRACE(COMP_ERR, "Size over MAX_FIRMWARE_CODE_SIZE! \n");
++ if (buffer_len >= MAX_FIRMWARE_CODE_SIZE - USB_HWDESC_HEADER_LEN) {
++ RT_TRACE(COMP_ERR, "(%s): Firmware exceeds"
++ " MAX_FIRMWARE_CODE_SIZE\n", __func__);
+ goto cmdsend_downloadcode_fail;
+ }
+-
+ ExtraDescOffset = USB_HWDESC_HEADER_LEN;
+-
+ do {
+ if((buffer_len-frag_offset) > frag_threshold)
+- {
+ frag_length = frag_threshold + ExtraDescOffset;
++ else {
++ frag_length = (u16)(buffer_len -
++ frag_offset + ExtraDescOffset);
++ bLastIniPkt = 1;
+ }
+- else
+- {
+- frag_length = (u16)(buffer_len - frag_offset + ExtraDescOffset);
+- bLastIniPkt = 1;
+- }
+-
+- /* Allocate skb buffer to contain firmware info and tx descriptor info. */
++ /*
++ * Allocate skb buffer to contain firmware info
++ * and tx descriptor info.
++ */
+ skb = dev_alloc_skb(frag_length);
+- memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
++ if (skb == NULL) {
++ RT_TRACE(COMP_ERR, "(%s): unable to alloc skb buffer\n",
++ __func__);
++ goto cmdsend_downloadcode_fail;
++ }
++ memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev));
+
+ tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE);
+ tcb_desc->queue_index = TXCMD_QUEUE;
+@@ -76,73 +78,60 @@ bool FirmwareDownloadCode(struct net_device *dev, u8 * code_virtual_address,u32
+ tcb_desc->bLastIniPkt = bLastIniPkt;
+
+ skb_reserve(skb, ExtraDescOffset);
+- seg_ptr = (u8 *)skb_put(skb, (u32)(frag_length-ExtraDescOffset));
+- memcpy(seg_ptr, code_virtual_address+frag_offset, (u32)(frag_length-ExtraDescOffset));
+
+- tcb_desc->txbuf_size= frag_length;
++ seg_ptr = (u8 *)skb_put(skb,
++ (u32)(frag_length - ExtraDescOffset));
+
+- if(!priv->ieee80211->check_nic_enough_desc(dev,tcb_desc->queue_index)||
+- (!skb_queue_empty(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index]))||\
+- (priv->ieee80211->queue_stop) )
+- {
++ memcpy(seg_ptr, code_virtual_address + frag_offset,
++ (u32)(frag_length-ExtraDescOffset));
++
++ tcb_desc->txbuf_size = frag_length;
++
++ if (!priv->ieee80211->check_nic_enough_desc(dev, tcb_desc->queue_index) ||
++ (!skb_queue_empty(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index])) ||
++ (priv->ieee80211->queue_stop)) {
+ RT_TRACE(COMP_FIRMWARE,"=====================================================> tx full!\n");
+ skb_queue_tail(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index], skb);
+- }
+- else
+- {
+- priv->ieee80211->softmac_hard_start_xmit(skb,dev);
+- }
++ } else
++ priv->ieee80211->softmac_hard_start_xmit(skb, dev);
+
+ frag_offset += (frag_length - ExtraDescOffset);
+
+- }while(frag_offset < buffer_len);
+-
++ } while (frag_offset < buffer_len);
+ return rt_status ;
+
+-
+ cmdsend_downloadcode_fail:
+ rt_status = false;
+- RT_TRACE(COMP_ERR, "CmdSendDownloadCode fail !!\n");
++ RT_TRACE(COMP_ERR, "(%s): failed\n", __func__);
+ return rt_status;
+-
+ }
+
+
+-RT_STATUS
+-FirmwareEnableCPU(struct net_device *dev)
++RT_STATUS FirmwareEnableCPU(struct net_device *dev)
+ {
++ RT_STATUS rtStatus = RT_STATUS_SUCCESS;
++ u8 tmpU1b, CPUStatus = 0;
++ u16 tmpU2b;
++ u32 iCheckTime = 200;
+
+- RT_STATUS rtStatus = RT_STATUS_SUCCESS;
+- u8 tmpU1b, CPUStatus = 0;
+- u16 tmpU2b;
+- u32 iCheckTime = 200;
+-
+- RT_TRACE(COMP_FIRMWARE, "-->FirmwareEnableCPU()\n" );
+- // Enable CPU.
++ /* Enable CPU. */
+ tmpU1b = read_nic_byte(dev, SYS_CLKR);
+- write_nic_byte(dev, SYS_CLKR, (tmpU1b|SYS_CPU_CLKSEL)); //AFE source
+-
++ /* AFE source */
++ write_nic_byte(dev, SYS_CLKR, (tmpU1b|SYS_CPU_CLKSEL));
+ tmpU2b = read_nic_word(dev, SYS_FUNC_EN);
+ write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|FEN_CPUEN));
+-
+- //Polling IMEM Ready after CPU has refilled.
+- do
+- {
++ /* Poll IMEM Ready after CPU has refilled. */
++ do {
+ CPUStatus = read_nic_byte(dev, TCR);
+- if(CPUStatus& IMEM_RDY)
+- {
+- RT_TRACE(COMP_FIRMWARE, "IMEM Ready after CPU has refilled.\n");
++ if (CPUStatus & IMEM_RDY)
++ /* success */
+ break;
+- }
+-
+- //usleep(100);
+ udelay(100);
+- }while(iCheckTime--);
+-
+- if(!(CPUStatus & IMEM_RDY))
+- return RT_STATUS_FAILURE;
+-
+- RT_TRACE(COMP_FIRMWARE, "<--FirmwareEnableCPU(): rtStatus(%#x)\n", rtStatus);
++ } while (iCheckTime--);
++ if (!(CPUStatus & IMEM_RDY)) {
++ RT_TRACE(COMP_ERR, "(%s): failed to enable CPU\n", __func__);
++ rtStatus = RT_STATUS_FAILURE;
++ }
+ return rtStatus;
+ }
+
+diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
+index 04d9b85..04f8516 100644
+--- a/drivers/staging/rtl8192su/r8192U_core.c
++++ b/drivers/staging/rtl8192su/r8192U_core.c
+@@ -1278,7 +1278,6 @@ static int rtl8192_rx_initiate(struct net_device*dev)
+ kfree_skb(skb);
+ break;
+ }
+-// printk("nomal packet IN request!\n");
+ usb_fill_bulk_urb(entry, priv->udev,
+ usb_rcvbulkpipe(priv->udev, 3), skb_tail_pointer(skb),
+ RX_URB_SIZE, rtl8192_rx_isr, skb);
+@@ -1292,7 +1291,6 @@ static int rtl8192_rx_initiate(struct net_device*dev)
+
+ /* command packet rx procedure */
+ while (skb_queue_len(&priv->rx_queue) < MAX_RX_URB + 3) {
+-// printk("command packet IN request!\n");
+ skb = __dev_alloc_skb(RX_URB_SIZE ,GFP_KERNEL);
+ if (!skb)
+ break;
+diff --git a/drivers/staging/rtl8192su/r819xU_cmdpkt.c b/drivers/staging/rtl8192su/r819xU_cmdpkt.c
+index 3ebfe79..e69c3b4 100644
+--- a/drivers/staging/rtl8192su/r819xU_cmdpkt.c
++++ b/drivers/staging/rtl8192su/r819xU_cmdpkt.c
+@@ -56,6 +56,12 @@ SendTxCommandPacket(
+
+ //Get TCB and local buffer from common pool. (It is shared by CmdQ, MgntQ, and USB coalesce DataQ)
+ skb = dev_alloc_skb(USB_HWDESC_HEADER_LEN + DataLen + 4);
++ if (skb == NULL) {
++ RT_TRACE(COMP_ERR, "(%s): unable to alloc skb buffer\n",
++ __func__);
++ rtStatus = false;
++ return rtStatus;
++ }
+ memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev));
+ tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE);
+ tcb_desc->queue_index = TXCMD_QUEUE;
+--
+1.7.7
+
diff --git a/queue/Staging-rtl8192su-remove-device-ids.patch b/queue/Staging-rtl8192su-remove-device-ids.patch
new file mode 100644
index 0000000..3feadbf
--- /dev/null
+++ b/queue/Staging-rtl8192su-remove-device-ids.patch
@@ -0,0 +1,54 @@
+From 77a4e5f31bc741354bf43db2be7cdb219d48fa46 Mon Sep 17 00:00:00 2001
+From: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
+Date: Tue, 8 Jun 2010 03:46:26 +0200
+Subject: [PATCH] Staging: rtl8192su: remove device ids
+
+commit 60b42de30ad6fb131dc8e9dbd11a8a9ea0ab394c upstream.
+
+This patch removes some device-ids.
+The list of unsupported devices was extracted from realteks driver package.
+removed IDs are:
+(0x0bda, 0x8192)
+(0x0bda, 0x8709)
+(0x07aa, 0x0043)
+(0x050d, 0x805E)
+(0x0df6, 0x0031)
+(0x1740, 0x9201)
+(0x2001, 0x3301)
+(0x5a57, 0x0290)
+These devices are _not_ rtl819su based.
+
+Signed-off-by: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
+index 7946cf6..f4cc5f0 100644
+--- a/drivers/staging/rtl8192su/r8192U_core.c
++++ b/drivers/staging/rtl8192su/r8192U_core.c
+@@ -115,22 +115,8 @@ u32 rt_global_debug_component = \
+ static const struct usb_device_id rtl8192_usb_id_tbl[] = {
+ /* Realtek */
+ {USB_DEVICE(0x0bda, 0x8171)},
+- {USB_DEVICE(0x0bda, 0x8192)},
+- {USB_DEVICE(0x0bda, 0x8709)},
+- /* Corega */
+- {USB_DEVICE(0x07aa, 0x0043)},
+- /* Belkin */
+- {USB_DEVICE(0x050d, 0x805E)},
+ {USB_DEVICE(0x050d, 0x815F)}, /* Belkin F5D8053 v6 */
+- /* Sitecom */
+- {USB_DEVICE(0x0df6, 0x0031)},
+ {USB_DEVICE(0x0df6, 0x004b)}, /* WL-349 */
+- /* EnGenius */
+- {USB_DEVICE(0x1740, 0x9201)},
+- /* Dlink */
+- {USB_DEVICE(0x2001, 0x3301)},
+- /* Zinwell */
+- {USB_DEVICE(0x5a57, 0x0290)},
+ /* Guillemot */
+ {USB_DEVICE(0x06f8, 0xe031)},
+ //92SU
+--
+1.7.7
+
diff --git a/queue/UBIFS-fix-master-node-recovery.patch b/queue/UBIFS-fix-master-node-recovery.patch
new file mode 100644
index 0000000..5b8ab2a
--- /dev/null
+++ b/queue/UBIFS-fix-master-node-recovery.patch
@@ -0,0 +1,77 @@
+From 1fe8534ffe14df426be8f1c0a8a4f52e97d929de Mon Sep 17 00:00:00 2001
+From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
+Date: Thu, 21 Apr 2011 14:49:55 +0300
+Subject: [PATCH] UBIFS: fix master node recovery
+
+commit 6e0d9fd38b750d678bf9fd07db23582f52fafa55 upstream.
+
+This patch fixes the following symptoms:
+1. Unmount UBIFS cleanly.
+2. Start mounting UBIFS R/W and have a power cut immediately
+3. Start mounting UBIFS R/O, this succeeds
+4. Try to re-mount UBIFS R/W - this fails immediately or later on,
+ because UBIFS will write the master node to the flash area
+ which has been written before.
+
+The analysis of the problem:
+
+1. UBIFS is unmounted cleanly, both copies of the master node are clean.
+2. UBIFS is being mounter R/W, starts changing master node copy 1, and
+ a power cut happens. The copy N1 becomes corrupted.
+3. UBIFS is being mounted R/O. It notices the copy N1 is corrupted and
+ reads copy N2. Copy N2 is clean.
+4. Because of R/O mode, UBIFS cannot recover copy 1.
+5. The mount code (ubifs_mount()) sees that the master node is clean,
+ so it decides that no recovery is needed.
+6. We are re-mounting R/W. UBIFS believes no recovery is needed and
+ starts updating the master node, but copy N1 is still corrupted
+ and was not recovered!
+
+Fix this problem by marking the master node as dirty every time we
+recover it and we are in R/O mode. This forces further recovery and
+the UBIFS cleans-up the corruptions and recovers the copy N1 when
+re-mounting R/W later.
+
+Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c
+index 109c6ea..b712ed6 100644
+--- a/fs/ubifs/recovery.c
++++ b/fs/ubifs/recovery.c
+@@ -300,6 +300,32 @@ int ubifs_recover_master_node(struct ubifs_info *c)
+ goto out_free;
+ }
+ memcpy(c->rcvrd_mst_node, c->mst_node, UBIFS_MST_NODE_SZ);
++
++ /*
++ * We had to recover the master node, which means there was an
++ * unclean reboot. However, it is possible that the master node
++ * is clean at this point, i.e., %UBIFS_MST_DIRTY is not set.
++ * E.g., consider the following chain of events:
++ *
++ * 1. UBIFS was cleanly unmounted, so the master node is clean
++ * 2. UBIFS is being mounted R/W and starts changing the master
++ * node in the first (%UBIFS_MST_LNUM). A power cut happens,
++ * so this LEB ends up with some amount of garbage at the
++ * end.
++ * 3. UBIFS is being mounted R/O. We reach this place and
++ * recover the master node from the second LEB
++ * (%UBIFS_MST_LNUM + 1). But we cannot update the media
++ * because we are being mounted R/O. We have to defer the
++ * operation.
++ * 4. However, this master node (@c->mst_node) is marked as
++ * clean (since the step 1). And if we just return, the
++ * mount code will be confused and won't recover the master
++ * node when it is re-mounter R/W later.
++ *
++ * Thus, to force the recovery by marking the master node as
++ * dirty.
++ */
++ c->mst_node->flags |= cpu_to_le32(UBIFS_MST_DIRTY);
+ } else {
+ /* Write the recovered master node */
+ c->max_sqnum = le64_to_cpu(mst->ch.sqnum) - 1;
+--
+1.7.7
+
diff --git a/queue/USB-teach-devices-file-about-Wireless-and-SuperSpeed.patch b/queue/USB-teach-devices-file-about-Wireless-and-SuperSpeed.patch
new file mode 100644
index 0000000..71b9ff7
--- /dev/null
+++ b/queue/USB-teach-devices-file-about-Wireless-and-SuperSpeed.patch
@@ -0,0 +1,152 @@
+From 322aa64e1c07bb83171e2a2dd173943a8b1e116d Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 13 Sep 2010 10:43:25 -0400
+Subject: [PATCH] USB: teach "devices" file about Wireless and SuperSpeed USB
+
+commit 834e2312e7a384877a876b0d34dffc3046c96bcb upstream.
+
+The /sys/kernel/debug/usb/devices file doesn't know about Wireless or
+SuperSpeed USB. This patch (as1416b) teaches it, and updates the
+Documentation/usb/proc_sub_info.txt file accordingly.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+CC: David Vrabel <david.vrabel@csr.com>
+CC: Sarah Sharp <sarah.a.sharp@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/Documentation/usb/proc_usb_info.txt b/Documentation/usb/proc_usb_info.txt
+index fafcd47..afe596d 100644
+--- a/Documentation/usb/proc_usb_info.txt
++++ b/Documentation/usb/proc_usb_info.txt
+@@ -1,12 +1,17 @@
+ /proc/bus/usb filesystem output
+ ===============================
+-(version 2003.05.30)
++(version 2010.09.13)
+
+
+ The usbfs filesystem for USB devices is traditionally mounted at
+ /proc/bus/usb. It provides the /proc/bus/usb/devices file, as well as
+ the /proc/bus/usb/BBB/DDD files.
+
++In many modern systems the usbfs filsystem isn't used at all. Instead
++USB device nodes are created under /dev/usb/ or someplace similar. The
++"devices" file is available in debugfs, typically as
++/sys/kernel/debug/usb/devices.
++
+
+ **NOTE**: If /proc/bus/usb appears empty, and a host controller
+ driver has been linked, then you need to mount the
+@@ -106,8 +111,8 @@ Legend:
+
+ Topology info:
+
+-T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd
+-| | | | | | | | |__MaxChildren
++T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd
++| | | | | | | | |__MaxChildren
+ | | | | | | | |__Device Speed in Mbps
+ | | | | | | |__DeviceNumber
+ | | | | | |__Count of devices at this level
+@@ -120,8 +125,13 @@ T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd
+ Speed may be:
+ 1.5 Mbit/s for low speed USB
+ 12 Mbit/s for full speed USB
+- 480 Mbit/s for high speed USB (added for USB 2.0)
++ 480 Mbit/s for high speed USB (added for USB 2.0);
++ also used for Wireless USB, which has no fixed speed
++ 5000 Mbit/s for SuperSpeed USB (added for USB 3.0)
+
++ For reasons lost in the mists of time, the Port number is always
++ too low by 1. For example, a device plugged into port 4 will
++ show up with "Port=03".
+
+ Bandwidth info:
+ B: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd
+@@ -291,7 +301,7 @@ Here's an example, from a system which has a UHCI root hub,
+ an external hub connected to the root hub, and a mouse and
+ a serial converter connected to the external hub.
+
+-T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
++T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
+ B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0
+ D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
+ P: Vendor=0000 ProdID=0000 Rev= 0.00
+@@ -301,21 +311,21 @@ C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA
+ I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
+ E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms
+
+-T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4
++T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4
+ D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
+ P: Vendor=0451 ProdID=1446 Rev= 1.00
+ C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
+ I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
+ E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms
+
+-T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
++T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
+ D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
+ P: Vendor=04b4 ProdID=0001 Rev= 0.00
+ C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
+ I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse
+ E: Ad=81(I) Atr=03(Int.) MxPS= 3 Ivl= 10ms
+
+-T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
++T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
+ D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
+ P: Vendor=0565 ProdID=0001 Rev= 1.08
+ S: Manufacturer=Peracom Networks, Inc.
+@@ -330,12 +340,12 @@ E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl= 8ms
+ Selecting only the "T:" and "I:" lines from this (for example, by using
+ "procusb ti"), we have:
+
+-T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
+-T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4
++T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
++T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4
+ I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
+-T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
++T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
+ I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse
+-T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
++T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
+ I: If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial
+
+
+diff --git a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
+index 7013296..0ce4230 100644
+--- a/drivers/usb/core/devices.c
++++ b/drivers/usb/core/devices.c
+@@ -65,8 +65,8 @@
+ #define ALLOW_SERIAL_NUMBER
+
+ static const char *format_topo =
+-/* T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd */
+-"\nT: Bus=%2.2d Lev=%2.2d Prnt=%2.2d Port=%2.2d Cnt=%2.2d Dev#=%3d Spd=%3s MxCh=%2d\n";
++/* T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd */
++"\nT: Bus=%2.2d Lev=%2.2d Prnt=%2.2d Port=%2.2d Cnt=%2.2d Dev#=%3d Spd=%-4s MxCh=%2d\n";
+
+ static const char *format_string_manufacturer =
+ /* S: Manufacturer=xxxx */
+@@ -518,11 +518,14 @@ static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes,
+ speed = "1.5"; break;
+ case USB_SPEED_UNKNOWN: /* usb 1.1 root hub code */
+ case USB_SPEED_FULL:
+- speed = "12 "; break;
++ speed = "12"; break;
++ case USB_SPEED_WIRELESS: /* Wireless has no real fixed speed */
+ case USB_SPEED_HIGH:
+ speed = "480"; break;
++ case USB_SPEED_SUPER:
++ speed = "5000"; break;
+ default:
+- speed = "?? ";
++ speed = "??";
+ }
+ data_end = pages_start + sprintf(pages_start, format_topo,
+ bus->busnum, level, parent_devnum,
+--
+1.7.7
+
diff --git a/queue/V4L-DVB-Add-Elgato-EyeTV-Diversity-to-dibcom-driver.patch b/queue/V4L-DVB-Add-Elgato-EyeTV-Diversity-to-dibcom-driver.patch
new file mode 100644
index 0000000..a5a22f2
--- /dev/null
+++ b/queue/V4L-DVB-Add-Elgato-EyeTV-Diversity-to-dibcom-driver.patch
@@ -0,0 +1,117 @@
+From 3910ff4c5fcbe78929736ae286f76f975f35fe06 Mon Sep 17 00:00:00 2001
+From: "michael@alice-dsl.net" <michael@alice-dsl.net>
+Date: Mon, 26 Apr 2010 22:18:57 -0300
+Subject: [PATCH] V4L/DVB: Add Elgato EyeTV Diversity to dibcom driver
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 84e2f037ce9672d0fb118e3e82cecfe6122ace3f upstream.
+
+This patch introduces support for DVB-T for the following dibcom
+based card: Elgato EyeTV Diversity (USB-ID: 0fd9:0011)
+
+Support for the Elgato silver IR remote is added too (set parameter
+dvb_usb_dib0700_ir_proto=0)
+
+[w.sang@pengutronix.de: rebased to current linuxtv-master]
+Signed-off-by: Michael Müller <mueller_michael@alice-dsl.net>
+Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
+Signed-off-by: Patrick Boettcher <pboettcher@kernellabs.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c
+index 34eab05..f9052be 100644
+--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
++++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
+@@ -794,6 +794,43 @@ static struct dvb_usb_rc_key dib0700_rc_keys[] = {
+ { 0x7a13, KEY_VOLUMEDOWN },
+ { 0x7a40, KEY_POWER },
+ { 0x7a41, KEY_MUTE },
++
++ /* Key codes for the Elgato EyeTV Diversity silver remote,
++ set dvb_usb_dib0700_ir_proto=0 */
++ { 0x4501, KEY_POWER },
++ { 0x4502, KEY_MUTE },
++ { 0x4503, KEY_1 },
++ { 0x4504, KEY_2 },
++ { 0x4505, KEY_3 },
++ { 0x4506, KEY_4 },
++ { 0x4507, KEY_5 },
++ { 0x4508, KEY_6 },
++ { 0x4509, KEY_7 },
++ { 0x450a, KEY_8 },
++ { 0x450b, KEY_9 },
++ { 0x450c, KEY_LAST },
++ { 0x450d, KEY_0 },
++ { 0x450e, KEY_ENTER },
++ { 0x450f, KEY_RED },
++ { 0x4510, KEY_CHANNELUP },
++ { 0x4511, KEY_GREEN },
++ { 0x4512, KEY_VOLUMEDOWN },
++ { 0x4513, KEY_OK },
++ { 0x4514, KEY_VOLUMEUP },
++ { 0x4515, KEY_YELLOW },
++ { 0x4516, KEY_CHANNELDOWN },
++ { 0x4517, KEY_BLUE },
++ { 0x4518, KEY_LEFT }, /* Skip backwards */
++ { 0x4519, KEY_PLAYPAUSE },
++ { 0x451a, KEY_RIGHT }, /* Skip forward */
++ { 0x451b, KEY_REWIND },
++ { 0x451c, KEY_L }, /* Live */
++ { 0x451d, KEY_FASTFORWARD },
++ { 0x451e, KEY_STOP }, /* 'Reveal' for Teletext */
++ { 0x451f, KEY_MENU }, /* KEY_TEXT for Teletext */
++ { 0x4540, KEY_RECORD }, /* Font 'Size' for Teletext */
++ { 0x4541, KEY_SCREEN }, /* Full screen toggle, 'Hold' for Teletext */
++ { 0x4542, KEY_SELECT }, /* Select video input, 'Select' for Teletext */
+ };
+
+ /* STK7700P: Hauppauge Nova-T Stick, AVerMedia Volar */
+@@ -2049,6 +2086,7 @@ struct usb_device_id dib0700_usb_id_table[] = {
+ /* 65 */{ USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV73ESE) },
+ { USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV282E) },
+ { USB_DEVICE(USB_VID_DIBCOM, USB_PID_DIBCOM_STK8096GP) },
++ { USB_DEVICE(USB_VID_ELGATO, USB_PID_ELGATO_EYETV_DIVERSITY) },
+ { 0 } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
+@@ -2393,7 +2431,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
+ }
+ },
+
+- .num_device_descs = 6,
++ .num_device_descs = 7,
+ .devices = {
+ { "DiBcom STK7070PD reference design",
+ { &dib0700_usb_id_table[17], NULL },
+@@ -2419,7 +2457,11 @@ struct dvb_usb_device_properties dib0700_devices[] = {
+ { "Sony PlayTV",
+ { &dib0700_usb_id_table[44], NULL },
+ { NULL },
+- }
++ },
++ { "Elgato EyeTV Diversity",
++ { &dib0700_usb_id_table[68], NULL },
++ { NULL },
++ },
+ },
+ .rc_interval = DEFAULT_RC_INTERVAL,
+ .rc_key_map = dib0700_rc_keys,
+diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+index ae8b57a..71dfc7c 100644
+--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
++++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+@@ -288,6 +288,7 @@
+ #define USB_PID_MSI_DIGI_VOX_MINI_III 0x8807
+ #define USB_PID_SONY_PLAYTV 0x0003
+ #define USB_PID_MYGICA_D689 0xd811
++#define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011
+ #define USB_PID_ELGATO_EYETV_DTT 0x0021
+ #define USB_PID_ELGATO_EYETV_DTT_Dlx 0x0020
+ #define USB_PID_DVB_T_USB_STICK_HIGH_SPEED_COLD 0x5000
+--
+1.7.7
+
diff --git a/queue/af_unix-Only-allow-recv-on-connected-seqpacket-socke.patch b/queue/af_unix-Only-allow-recv-on-connected-seqpacket-socke.patch
new file mode 100644
index 0000000..d9b2903
--- /dev/null
+++ b/queue/af_unix-Only-allow-recv-on-connected-seqpacket-socke.patch
@@ -0,0 +1,85 @@
+From bd9382d3d471ce28343159e55b1c9b2c208a22f4 Mon Sep 17 00:00:00 2001
+From: "Eric W. Biederman" <ebiederm@xmission.com>
+Date: Sun, 24 Apr 2011 01:54:57 +0000
+Subject: [PATCH] af_unix: Only allow recv on connected seqpacket sockets.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit a05d2ad1c1f391c7f514a1d1e09b5417968a7d07 upstream.
+
+This fixes the following oops discovered by Dan Aloni:
+
+> Anyway, the following is the output of the Oops that I got on the
+> Ubuntu kernel on which I first detected the problem
+> (2.6.37-12-generic). The Oops that followed will be more useful, I
+> guess.
+
+>[ 5594.669852] BUG: unable to handle kernel NULL pointer dereference
+> at           (null)
+> [ 5594.681606] IP: [<ffffffff81550b7b>] unix_dgram_recvmsg+0x1fb/0x420
+> [ 5594.687576] PGD 2a05d067 PUD 2b951067 PMD 0
+> [ 5594.693720] Oops: 0002 [#1] SMP
+> [ 5594.699888] last sysfs file:
+
+The bug was that unix domain sockets use a pseduo packet for
+connecting and accept uses that psudo packet to get the socket.
+In the buggy seqpacket case we were allowing unconnected
+sockets to call recvmsg and try to receive the pseudo packet.
+
+That is always wrong and as of commit 7361c36c5 the pseudo
+packet had become enough different from a normal packet
+that the kernel started oopsing.
+
+Do for seqpacket_recv what was done for seqpacket_send in 2.5
+and only allow it on connected seqpacket sockets.
+
+Tested-by: Dan Aloni <dan@aloni.org>
+Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
+index 207a119..0b7148b 100644
+--- a/net/unix/af_unix.c
++++ b/net/unix/af_unix.c
+@@ -503,6 +503,8 @@ static int unix_dgram_connect(struct socket *, struct sockaddr *,
+ int, int);
+ static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *,
+ struct msghdr *, size_t);
++static int unix_seqpacket_recvmsg(struct kiocb *, struct socket *,
++ struct msghdr *, size_t, int);
+
+ static const struct proto_ops unix_stream_ops = {
+ .family = PF_UNIX,
+@@ -562,7 +564,7 @@ static const struct proto_ops unix_seqpacket_ops = {
+ .setsockopt = sock_no_setsockopt,
+ .getsockopt = sock_no_getsockopt,
+ .sendmsg = unix_seqpacket_sendmsg,
+- .recvmsg = unix_dgram_recvmsg,
++ .recvmsg = unix_seqpacket_recvmsg,
+ .mmap = sock_no_mmap,
+ .sendpage = sock_no_sendpage,
+ };
+@@ -1666,6 +1668,18 @@ static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock,
+ return unix_dgram_sendmsg(kiocb, sock, msg, len);
+ }
+
++static int unix_seqpacket_recvmsg(struct kiocb *iocb, struct socket *sock,
++ struct msghdr *msg, size_t size,
++ int flags)
++{
++ struct sock *sk = sock->sk;
++
++ if (sk->sk_state != TCP_ESTABLISHED)
++ return -ENOTCONN;
++
++ return unix_dgram_recvmsg(iocb, sock, msg, size, flags);
++}
++
+ static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
+ {
+ struct unix_sock *u = unix_sk(sk);
+--
+1.7.7
+
diff --git a/queue/ath-add-missing-regdomain-pair-0x5c-mapping.patch b/queue/ath-add-missing-regdomain-pair-0x5c-mapping.patch
new file mode 100644
index 0000000..fb258ca
--- /dev/null
+++ b/queue/ath-add-missing-regdomain-pair-0x5c-mapping.patch
@@ -0,0 +1,40 @@
+From c5a50ad18f9b2cdf80a5bd582918edf671c69f91 Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Wed, 6 Apr 2011 20:40:31 +0200
+Subject: [PATCH] ath: add missing regdomain pair 0x5c mapping
+
+commit bd39a274fb7b43374c797bafdb7f506598f36f77 upstream.
+
+Joe Culler reported a problem with his AR9170 device:
+
+> ath: EEPROM regdomain: 0x5c
+> ath: EEPROM indicates we should expect a direct regpair map
+> ath: invalid regulatory domain/country code 0x5c
+> ath: Invalid EEPROM contents
+
+It turned out that the regdomain 'APL7_FCCA' was not mapped yet.
+According to Luis R. Rodriguez [Atheros' engineer] APL7 maps to
+FCC_CTL and FCCA maps to FCC_CTL as well, so the attached patch
+should be correct.
+
+Reported-by: Joe Culler <joe.culler@gmail.com>
+Acked-by: Luis R. Rodriguez <lrodriguez@atheros.com>
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/ath/regd_common.h b/drivers/net/wireless/ath/regd_common.h
+index 248c670..5c2cfe6 100644
+--- a/drivers/net/wireless/ath/regd_common.h
++++ b/drivers/net/wireless/ath/regd_common.h
+@@ -195,6 +195,7 @@ static struct reg_dmn_pair_mapping regDomainPairs[] = {
+ {APL9_WORLD, CTL_ETSI, CTL_ETSI},
+
+ {APL3_FCCA, CTL_FCC, CTL_FCC},
++ {APL7_FCCA, CTL_FCC, CTL_FCC},
+ {APL1_ETSIC, CTL_FCC, CTL_ETSI},
+ {APL2_ETSIC, CTL_FCC, CTL_ETSI},
+ {APL2_APLD, CTL_FCC, NO_CTL},
+--
+1.7.7
+
diff --git a/queue/b43-Fix-warning-at-drivers-mmc-core-core.c-237-in-mm.patch b/queue/b43-Fix-warning-at-drivers-mmc-core-core.c-237-in-mm.patch
new file mode 100644
index 0000000..d1dbfca
--- /dev/null
+++ b/queue/b43-Fix-warning-at-drivers-mmc-core-core.c-237-in-mm.patch
@@ -0,0 +1,68 @@
+From 13fe1014a0462fafc0a5fb8d3bc2f5b3105db60a Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Thu, 28 Oct 2010 10:43:26 -0500
+Subject: [PATCH] b43: Fix warning at drivers/mmc/core/core.c:237 in
+ mmc_wait_for_cmd
+
+commit 9f2a0fac625bcef9c579bcf0b0c904ab1a56e7c4 upstream.
+
+On module removal, the sdio version of b43 generates the following warning:
+
+[ 851.560519] ------------[ cut here ]------------
+[ 851.560531] WARNING: at drivers/mmc/core/core.c:237 mmc_wait_for_cmd+0x88/0x90()
+[ 851.560534] Hardware name: 20552PG
+[ 851.560536] Modules linked in: b43(-) ssb mmc_block binfmt_misc rfcomm sco bnep ppdev l2cap ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack ipt_REJECT xt_tcpudp iptable_filter ip_tables x_tables bridge stp kvm_intel kvm arc4 iwlagn snd_hda_codec_conexant snd_hda_intel snd_hda_codec iwlcore snd_hwdep snd_pcm thinkpad_acpi mac80211 snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq r852 joydev snd_timer sm_common pcmcia nand snd_seq_device cfg80211 sdhci_pci btusb psmouse tpm_tis yenta_socket nand_ids lp snd pcmcia_rsrc nand_ecc bluetooth sdhci tpm pcmcia_core parport mtd snd_page_alloc serio_raw tpm_bios soundcore nvram led_class sha256_generic aes_i586 aes_generic dm_crypt i915 drm_kms_helper drm ahci intel_agp i2c_algo_bit intel_gtt e1000e libahci video agpgart output
+[ 851.560620] Pid: 2504, comm: rmmod Not tainted 2.6.36-titan0+ #1
+[ 851.560622] Call Trace:
+[ 851.560631] [<c014a102>] warn_slowpath_common+0x72/0xa0
+[ 851.560636] [<c04d94c8>] ? mmc_wait_for_cmd+0x88/0x90
+[ 851.560641] [<c04d94c8>] ? mmc_wait_for_cmd+0x88/0x90
+[ 851.560645] [<c014a152>] warn_slowpath_null+0x22/0x30
+[ 851.560649] [<c04d94c8>] mmc_wait_for_cmd+0x88/0x90
+[ 851.560655] [<c0401585>] ? device_release+0x25/0x80
+[ 851.560660] [<c04df210>] mmc_io_rw_direct_host+0xa0/0x150
+[ 851.560665] [<c04df370>] mmc_io_rw_direct+0x30/0x40
+[ 851.560669] [<c04e06e7>] sdio_disable_func+0x37/0xa0
+[ 851.560683] [<f8dfcb80>] b43_sdio_remove+0x30/0x50 [b43]
+[ 851.560687] [<c04df8cc>] sdio_bus_remove+0x1c/0x60
+[ 851.560692] [<c016d39f>] ? blocking_notifier_call_chain+0x1f/0x30
+[ 851.560697] [<c0404991>] __device_release_driver+0x51/0xb0
+[ 851.560701] [<c0404a7f>] driver_detach+0x8f/0xa0
+[ 851.560705] [<c0403c83>] bus_remove_driver+0x63/0xa0
+[ 851.560709] [<c0405039>] driver_unregister+0x49/0x80
+[ 851.560713] [<c0405039>] ? driver_unregister+0x49/0x80
+[ 851.560718] [<c04dfad7>] sdio_unregister_driver+0x17/0x20
+[ 851.560727] [<f8dfcb42>] b43_sdio_exit+0x12/0x20 [b43]
+[ 851.560734] [<f8dfe76f>] b43_exit+0x17/0x3c [b43]
+[ 851.560740] [<c017fb8d>] sys_delete_module+0x13d/0x200
+[ 851.560747] [<c01fd7d2>] ? do_munmap+0x212/0x300
+[ 851.560752] [<c010311f>] sysenter_do_call+0x12/0x28
+[ 851.560757] ---[ end trace 31e14488072d2f7d ]---
+[ 851.560759] ------------[ cut here ]------------
+
+The warning is caused by b43 not claiming the device before calling
+sdio_disable_func().
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Reported-by: Arnd Hannemann <arnd@arndnet.de>
+Tested-by: Arnd Hannemann <arnd@arndnet.de>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/b43/sdio.c b/drivers/net/wireless/b43/sdio.c
+index 4e56b7b..8b18314 100644
+--- a/drivers/net/wireless/b43/sdio.c
++++ b/drivers/net/wireless/b43/sdio.c
+@@ -175,7 +175,9 @@ static void b43_sdio_remove(struct sdio_func *func)
+ struct b43_sdio *sdio = sdio_get_drvdata(func);
+
+ ssb_bus_unregister(&sdio->ssb);
++ sdio_claim_host(func);
+ sdio_disable_func(func);
++ sdio_release_host(func);
+ kfree(sdio);
+ sdio_set_drvdata(func, NULL);
+ }
+--
+1.7.7
+
diff --git a/queue/backlight-MacBookAir3-1-3-2-mbp-nvidia-bl-support.patch b/queue/backlight-MacBookAir3-1-3-2-mbp-nvidia-bl-support.patch
new file mode 100644
index 0000000..9f470ef
--- /dev/null
+++ b/queue/backlight-MacBookAir3-1-3-2-mbp-nvidia-bl-support.patch
@@ -0,0 +1,48 @@
+From 0206ce037d8d5f739859dbc4b3deb0ac9a80bbbe Mon Sep 17 00:00:00 2001
+From: "Edgar (gimli) Hucek" <gimli@dark-green.com>
+Date: Thu, 11 Nov 2010 14:05:30 -0800
+Subject: [PATCH] backlight: MacBookAir3,1(3,2) mbp-nvidia-bl support
+
+commit bd760e1e5b34351e0705705e5163cb89c1316d71 upstream.
+
+Add support for the MacBookAir3,1 and MacBookAir3,2 to the mbp-nvidia-bl
+driver.
+
+Signed-off-by: Edgar (gimli) Hucek <gimli@dark-green.com>
+Acked-by: Richard Purdie <rpurdie@linux.intel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c
+index 1b5d3fe..0f5268e 100644
+--- a/drivers/video/backlight/mbp_nvidia_bl.c
++++ b/drivers/video/backlight/mbp_nvidia_bl.c
+@@ -290,6 +290,24 @@ static const struct dmi_system_id __initdata mbp_device_table[] = {
+ },
+ .driver_data = (void *)&nvidia_chipset_data,
+ },
++ {
++ .callback = mbp_dmi_match,
++ .ident = "MacBookAir 3,1",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3,1"),
++ },
++ .driver_data = (void *)&nvidia_chipset_data,
++ },
++ {
++ .callback = mbp_dmi_match,
++ .ident = "MacBookAir 3,2",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3,2"),
++ },
++ .driver_data = (void *)&nvidia_chipset_data,
++ },
+ { }
+ };
+
+--
+1.7.7
+
diff --git a/queue/block-blk-sysfs-Fix-an-err-return-path-in-blk_regist.patch b/queue/block-blk-sysfs-Fix-an-err-return-path-in-blk_regist.patch
new file mode 100644
index 0000000..1629a32
--- /dev/null
+++ b/queue/block-blk-sysfs-Fix-an-err-return-path-in-blk_regist.patch
@@ -0,0 +1,34 @@
+From 8055656ff11fa3a03b6c53b6a0b50b0ab057d54c Mon Sep 17 00:00:00 2001
+From: Liu Yuan <tailai.ly@taobao.com>
+Date: Tue, 19 Apr 2011 13:47:58 +0200
+Subject: [PATCH] block, blk-sysfs: Fix an err return path in
+ blk_register_queue()
+
+commit ed5302d3c25006a9edc7a7fbea97a30483f89ef7 upstream.
+
+We do not call blk_trace_remove_sysfs() in err return path
+if kobject_add() fails. This path fixes it.
+
+Signed-off-by: Liu Yuan <tailai.ly@taobao.com>
+Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
+index d246654..3eede79 100644
+--- a/block/blk-sysfs.c
++++ b/block/blk-sysfs.c
+@@ -502,8 +502,10 @@ int blk_register_queue(struct gendisk *disk)
+ return ret;
+
+ ret = kobject_add(&q->kobj, kobject_get(&dev->kobj), "%s", "queue");
+- if (ret < 0)
++ if (ret < 0) {
++ blk_trace_remove_sysfs(dev);
+ return ret;
++ }
+
+ kobject_uevent(&q->kobj, KOBJ_ADD);
+
+--
+1.7.7
+
diff --git a/queue/bonding-Ensure-that-we-unshare-skbs-prior-to-calling.patch b/queue/bonding-Ensure-that-we-unshare-skbs-prior-to-calling.patch
new file mode 100644
index 0000000..7f1f3d1
--- /dev/null
+++ b/queue/bonding-Ensure-that-we-unshare-skbs-prior-to-calling.patch
@@ -0,0 +1,134 @@
+From f90f50c9cc9d92456ace2b0533971ac4c09592a8 Mon Sep 17 00:00:00 2001
+From: Neil Horman <nhorman@tuxdriver.com>
+Date: Thu, 20 Jan 2011 09:02:31 +0000
+Subject: [PATCH] bonding: Ensure that we unshare skbs prior to calling
+ pskb_may_pull
+
+commit b30532515f0a62bfe17207ab00883dd262497006 upstream.
+
+Recently reported oops:
+
+kernel BUG at net/core/skbuff.c:813!
+invalid opcode: 0000 [#1] SMP
+last sysfs file: /sys/devices/virtual/net/bond0/broadcast
+CPU 8
+Modules linked in: sit tunnel4 cpufreq_ondemand acpi_cpufreq freq_table bonding
+ipv6 dm_mirror dm_region_hash dm_log cdc_ether usbnet mii serio_raw i2c_i801
+i2c_core iTCO_wdt iTCO_vendor_support shpchp ioatdma i7core_edac edac_core bnx2
+ixgbe dca mdio sg ext4 mbcache jbd2 sd_mod crc_t10dif mptsas mptscsih mptbase
+scsi_transport_sas dm_mod [last unloaded: microcode]
+
+Modules linked in: sit tunnel4 cpufreq_ondemand acpi_cpufreq freq_table bonding
+ipv6 dm_mirror dm_region_hash dm_log cdc_ether usbnet mii serio_raw i2c_i801
+i2c_core iTCO_wdt iTCO_vendor_support shpchp ioatdma i7core_edac edac_core bnx2
+ixgbe dca mdio sg ext4 mbcache jbd2 sd_mod crc_t10dif mptsas mptscsih mptbase
+scsi_transport_sas dm_mod [last unloaded: microcode]
+Pid: 0, comm: swapper Not tainted 2.6.32-71.el6.x86_64 #1 BladeCenter HS22
+-[7870AC1]-
+RIP: 0010:[<ffffffff81405b16>] [<ffffffff81405b16>]
+pskb_expand_head+0x36/0x1e0
+RSP: 0018:ffff880028303b70 EFLAGS: 00010202
+RAX: 0000000000000002 RBX: ffff880c6458ec80 RCX: 0000000000000020
+RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff880c6458ec80
+RBP: ffff880028303bc0 R08: ffffffff818a6180 R09: ffff880c6458ed64
+R10: ffff880c622b36c0 R11: 0000000000000400 R12: 0000000000000000
+R13: 0000000000000180 R14: ffff880c622b3000 R15: 0000000000000000
+FS: 0000000000000000(0000) GS:ffff880028300000(0000) knlGS:0000000000000000
+CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
+CR2: 00000038653452a4 CR3: 0000000001001000 CR4: 00000000000006e0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
+Process swapper (pid: 0, threadinfo ffff8806649c2000, task ffff880c64f16ab0)
+Stack:
+ ffff880028303bc0 ffffffff8104fff9 000000000000001c 0000000100000000
+<0> ffff880000047d80 ffff880c6458ec80 000000000000001c ffff880c6223da00
+<0> ffff880c622b3000 0000000000000000 ffff880028303c10 ffffffff81407f7a
+Call Trace:
+<IRQ>
+ [<ffffffff8104fff9>] ? __wake_up_common+0x59/0x90
+ [<ffffffff81407f7a>] __pskb_pull_tail+0x2aa/0x360
+ [<ffffffffa0244530>] bond_arp_rcv+0x2c0/0x2e0 [bonding]
+ [<ffffffff814a0857>] ? packet_rcv+0x377/0x440
+ [<ffffffff8140f21b>] netif_receive_skb+0x2db/0x670
+ [<ffffffff8140f788>] napi_skb_finish+0x58/0x70
+ [<ffffffff8140fc89>] napi_gro_receive+0x39/0x50
+ [<ffffffffa01286eb>] ixgbe_clean_rx_irq+0x35b/0x900 [ixgbe]
+ [<ffffffffa01290f6>] ixgbe_clean_rxtx_many+0x136/0x240 [ixgbe]
+ [<ffffffff8140fe53>] net_rx_action+0x103/0x210
+ [<ffffffff81073bd7>] __do_softirq+0xb7/0x1e0
+ [<ffffffff810d8740>] ? handle_IRQ_event+0x60/0x170
+ [<ffffffff810142cc>] call_softirq+0x1c/0x30
+ [<ffffffff81015f35>] do_softirq+0x65/0xa0
+ [<ffffffff810739d5>] irq_exit+0x85/0x90
+ [<ffffffff814cf915>] do_IRQ+0x75/0xf0
+ [<ffffffff81013ad3>] ret_from_intr+0x0/0x11
+ <EOI>
+ [<ffffffff8101bc01>] ? mwait_idle+0x71/0xd0
+ [<ffffffff814cd80a>] ? atomic_notifier_call_chain+0x1a/0x20
+ [<ffffffff81011e96>] cpu_idle+0xb6/0x110
+ [<ffffffff814c17c8>] start_secondary+0x1fc/0x23f
+
+Resulted from bonding driver registering packet handlers via dev_add_pack and
+then trying to call pskb_may_pull. If another packet handler (like for AF_PACKET
+sockets) gets called first, the delivered skb will have a user count > 1, which
+causes pskb_may_pull to BUG halt when it does its skb_shared check. Fix this by
+calling skb_share_check prior to the may_pull call sites in the bonding driver
+to clone the skb when needed. Tested by myself and the reported successfully.
+
+Signed-off-by: Neil Horman
+CC: Andy Gospodarek <andy@greyhouse.net>
+CC: Jay Vosburgh <fubar@us.ibm.com>
+CC: "David S. Miller" <davem@davemloft.net>
+Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
+Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
+index 0ddf4c6..9a002f1 100644
+--- a/drivers/net/bonding/bond_3ad.c
++++ b/drivers/net/bonding/bond_3ad.c
+@@ -2466,6 +2466,10 @@ int bond_3ad_lacpdu_recv(struct sk_buff *skb, struct net_device *dev, struct pac
+ if (!(dev->flags & IFF_MASTER))
+ goto out;
+
++ skb = skb_share_check(skb, GFP_ATOMIC);
++ if (!skb)
++ goto out;
++
+ if (!pskb_may_pull(skb, sizeof(struct lacpdu)))
+ goto out;
+
+diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
+index 0d42b38..e9154ab 100644
+--- a/drivers/net/bonding/bond_alb.c
++++ b/drivers/net/bonding/bond_alb.c
+@@ -368,6 +368,10 @@ static int rlb_arp_recv(struct sk_buff *skb, struct net_device *bond_dev, struct
+ goto out;
+ }
+
++ skb = skb_share_check(skb, GFP_ATOMIC);
++ if (!skb)
++ goto out;
++
+ if (!pskb_may_pull(skb, arp_hdr_len(bond_dev)))
+ goto out;
+
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index 0075514..af8eec1 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -2645,6 +2645,10 @@ static int bond_arp_rcv(struct sk_buff *skb, struct net_device *dev, struct pack
+ if (!slave || !slave_do_arp_validate(bond, slave))
+ goto out_unlock;
+
++ skb = skb_share_check(skb, GFP_ATOMIC);
++ if (!skb)
++ goto out_unlock;
++
+ if (!pskb_may_pull(skb, arp_hdr_len(dev)))
+ goto out_unlock;
+
+--
+1.7.7
+
diff --git a/queue/btrfs-Require-CAP_SYS_ADMIN-for-filesystem-rebalance.patch b/queue/btrfs-Require-CAP_SYS_ADMIN-for-filesystem-rebalance.patch
new file mode 100644
index 0000000..b67477f
--- /dev/null
+++ b/queue/btrfs-Require-CAP_SYS_ADMIN-for-filesystem-rebalance.patch
@@ -0,0 +1,41 @@
+From c7114c219833c13277eeb18e3926bae49ec85602 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Wed, 29 Dec 2010 14:55:03 +0000
+Subject: [PATCH] btrfs: Require CAP_SYS_ADMIN for filesystem rebalance
+
+commit 6f88a4403def422bd8e276ddf6863d6ac71435d2 upstream.
+
+Filesystem rebalancing (BTRFS_IOC_BALANCE) affects the entire
+filesystem and may run uninterruptibly for a long time. This does not
+seem to be something that an unprivileged user should be able to do.
+
+Reported-by: Aron Xu <happyaron.xu@gmail.com>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Chris Mason <chris.mason@oracle.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
+index 8db7b14..c04ebb1 100644
+--- a/fs/btrfs/volumes.c
++++ b/fs/btrfs/volumes.c
+@@ -22,6 +22,7 @@
+ #include <linux/blkdev.h>
+ #include <linux/random.h>
+ #include <linux/iocontext.h>
++#include <linux/capability.h>
+ #include <asm/div64.h>
+ #include "compat.h"
+ #include "ctree.h"
+@@ -1908,6 +1909,9 @@ int btrfs_balance(struct btrfs_root *dev_root)
+ if (dev_root->fs_info->sb->s_flags & MS_RDONLY)
+ return -EROFS;
+
++ if (!capable(CAP_SYS_ADMIN))
++ return -EPERM;
++
+ mutex_lock(&dev_root->fs_info->volume_mutex);
+ dev_root = dev_root->fs_info->dev_root;
+
+--
+1.7.7
+
diff --git a/queue/cifs-fix-another-memleak-in-cifs_root_iget.patch b/queue/cifs-fix-another-memleak-in-cifs_root_iget.patch
new file mode 100644
index 0000000..02eb272
--- /dev/null
+++ b/queue/cifs-fix-another-memleak-in-cifs_root_iget.patch
@@ -0,0 +1,55 @@
+From 8b198c72bdec68d657d39cd0c8d71ee64bbf775e Mon Sep 17 00:00:00 2001
+From: Oskar Schirmer <oskar@scara.com>
+Date: Wed, 10 Nov 2010 21:06:13 +0000
+Subject: [PATCH] cifs: fix another memleak, in cifs_root_iget
+
+commit a7851ce73b9fdef53f251420e6883cf4f3766534 upstream.
+
+cifs_root_iget allocates full_path through
+cifs_build_path_to_root, but fails to kfree it upon
+cifs_get_inode_info* failure.
+
+Make all failure exit paths traverse clean up
+handling at the end of the function.
+
+Signed-off-by: Oskar Schirmer <oskar@scara.com>
+Reviewed-by: Jesper Juhl <jj@chaosbits.net>
+Signed-off-by: Steve French <sfrench@us.ibm.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
+index 49b47c3..da3e83f 100644
+--- a/fs/cifs/inode.c
++++ b/fs/cifs/inode.c
+@@ -793,8 +793,10 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino)
+ rc = cifs_get_inode_info(&inode, full_path, NULL, sb,
+ xid, NULL);
+
+- if (!inode)
+- return ERR_PTR(-ENOMEM);
++ if (!inode) {
++ inode = ERR_PTR(-ENOMEM);
++ goto out;
++ }
+
+ if (rc && cifs_sb->tcon->ipc) {
+ cFYI(1, ("ipc connection - fake read inode"));
+@@ -805,13 +807,11 @@ struct inode *cifs_root_iget(struct super_block *sb, unsigned long ino)
+ inode->i_uid = cifs_sb->mnt_uid;
+ inode->i_gid = cifs_sb->mnt_gid;
+ } else if (rc) {
+- kfree(full_path);
+- _FreeXid(xid);
+ iget_failed(inode);
+- return ERR_PTR(rc);
++ inode = ERR_PTR(rc);
+ }
+
+-
++out:
+ kfree(full_path);
+ /* can not call macro FreeXid here since in a void func
+ * TODO: This is no longer true
+--
+1.7.7
+
diff --git a/queue/dasd-correct-device-table.patch b/queue/dasd-correct-device-table.patch
new file mode 100644
index 0000000..2ee3f38
--- /dev/null
+++ b/queue/dasd-correct-device-table.patch
@@ -0,0 +1,31 @@
+From ddc44ac3195678adb90d3faf78b152cd99015061 Mon Sep 17 00:00:00 2001
+From: Stefan Haberland <stefan.haberland@de.ibm.com>
+Date: Thu, 17 Feb 2011 13:13:55 +0100
+Subject: [PATCH] dasd: correct device table
+
+commit 5da24b7627ff821e154a3aaecd5d60e1d8e228a5 upstream.
+
+The 3880 storage control unit supports a 3380 device
+type, but not a 3390 device type.
+
+Reported-by: Stephen Powell <zlinuxman@wowway.com>
+Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
+index 0cb2331..7d05fe5 100644
+--- a/drivers/s390/block/dasd_eckd.c
++++ b/drivers/s390/block/dasd_eckd.c
+@@ -63,7 +63,7 @@ static struct dasd_discipline dasd_eckd_discipline;
+ static struct ccw_device_id dasd_eckd_ids[] = {
+ { CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3390, 0), .driver_info = 0x1},
+ { CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3390, 0), .driver_info = 0x2},
+- { CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3390, 0), .driver_info = 0x3},
++ { CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3380, 0), .driver_info = 0x3},
+ { CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3380, 0), .driver_info = 0x4},
+ { CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3380, 0), .driver_info = 0x5},
+ { CCW_DEVICE_DEVTYPE (0x9343, 0, 0x9345, 0), .driver_info = 0x6},
+--
+1.7.7
+
diff --git a/queue/dell-laptop-Add-another-Dell-laptop-family-to-the-DM.patch b/queue/dell-laptop-Add-another-Dell-laptop-family-to-the-DM.patch
new file mode 100644
index 0000000..e5e112e
--- /dev/null
+++ b/queue/dell-laptop-Add-another-Dell-laptop-family-to-the-DM.patch
@@ -0,0 +1,40 @@
+From e24b8b1756d6033c7e8f9a9ccff2be73513adf9c Mon Sep 17 00:00:00 2001
+From: Rezwanul Kabir <Rezwanul_Kabir@dell.com>
+Date: Wed, 23 Jun 2010 12:02:43 -0500
+Subject: [PATCH] dell-laptop: Add another Dell laptop family to the DMI
+ whitelist
+
+commit 410d44c74cf9942e3055d5b7d73953fac8efbacb upstream.
+
+This is to support Precision M4500 and others.
+
+Signed-off-by: Rezwanul Kabir <Rezwanul_Kabir@dell.com>
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
+index 6110601..0fb56e0 100644
+--- a/drivers/platform/x86/dell-laptop.c
++++ b/drivers/platform/x86/dell-laptop.c
+@@ -83,6 +83,12 @@ static const struct dmi_system_id __initdata dell_device_table[] = {
+ },
+ },
+ {
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
++ DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /*Laptop*/
++ },
++ },
++ {
+ .ident = "Dell Computer Corporation",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
+@@ -628,4 +634,5 @@ MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>");
+ MODULE_DESCRIPTION("Dell laptop driver");
+ MODULE_LICENSE("GPL");
+ MODULE_ALIAS("dmi:*svnDellInc.:*:ct8:*");
++MODULE_ALIAS("dmi:*svnDellInc.:*:ct9:*");
+ MODULE_ALIAS("dmi:*svnDellComputerCorporation.:*:ct8:*");
+--
+1.7.7
+
diff --git a/queue/drm-radeon-kms-fix-bad-shift-in-atom-iio-table-parse.patch b/queue/drm-radeon-kms-fix-bad-shift-in-atom-iio-table-parse.patch
new file mode 100644
index 0000000..ed0bf88
--- /dev/null
+++ b/queue/drm-radeon-kms-fix-bad-shift-in-atom-iio-table-parse.patch
@@ -0,0 +1,47 @@
+From d814830772badf6ebb4aa8ffe5fc3354023de59e Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Thu, 14 Apr 2011 11:19:50 -0400
+Subject: [PATCH] drm/radeon/kms: fix bad shift in atom iio table parser
+
+commit 8e461123f28e6b17456225e70eb834b3b30d28bb upstream.
+
+Noticed by Patrick Lowry.
+
+Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
+index 1d56983..b913bf1 100644
+--- a/drivers/gpu/drm/radeon/atom.c
++++ b/drivers/gpu/drm/radeon/atom.c
+@@ -131,7 +131,7 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
+ case ATOM_IIO_MOVE_INDEX:
+ temp &=
+ ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
+- CU8(base + 2));
++ CU8(base + 3));
+ temp |=
+ ((index >> CU8(base + 2)) &
+ (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
+@@ -141,7 +141,7 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
+ case ATOM_IIO_MOVE_DATA:
+ temp &=
+ ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
+- CU8(base + 2));
++ CU8(base + 3));
+ temp |=
+ ((data >> CU8(base + 2)) &
+ (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
+@@ -151,7 +151,7 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
+ case ATOM_IIO_MOVE_ATTR:
+ temp &=
+ ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
+- CU8(base + 2));
++ CU8(base + 3));
+ temp |=
+ ((ctx->
+ io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
+--
+1.7.7
+
diff --git a/queue/e1000-fix-Tx-hangs-by-disabling-64-bit-DMA.patch b/queue/e1000-fix-Tx-hangs-by-disabling-64-bit-DMA.patch
new file mode 100644
index 0000000..bf083ec
--- /dev/null
+++ b/queue/e1000-fix-Tx-hangs-by-disabling-64-bit-DMA.patch
@@ -0,0 +1,255 @@
+From 4dd66afa256095e392afc914c2103237b5523cef Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Date: Tue, 7 Sep 2010 21:01:12 +0000
+Subject: [PATCH] e1000: fix Tx hangs by disabling 64-bit DMA
+
+commit e508be174ad36b0cf9b324cd04978c2b13c21502 upstream.
+
+Several users report issues with 32-bit adapters when plugged
+into PCI slots in machines with >= 4GB ram. In particular AMD
+systems with HyperTransport to PCI bridges seem to trigger the
+issue, but it isn't limited to only them.
+
+This issue is not easily reproducible here, yet still continues
+to occur in the field. For e1000 on PCI devices, just disable DMA
+addresses over the 4GB boundary when in PCI (not PCI-X) mode, to
+prevent the issue from continuing to pop up. The performance
+impact for this is negligible.
+
+The code was refactored to move the init of the hw struct to its
+own function. This allows the init to be called very early in
+probe, which then allows using hw-> members for this fix.
+
+A slight refactor to the DMA mask code was done for minor
+correctness based on the instructions in DMA-API-HOWTO.
+
+[PG: 34 has pci prefix, e.g pci_set_dma_mask vs. dma_set_mask]
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
+index 13e34d2..6039d7f 100644
+--- a/drivers/net/e1000/e1000_main.c
++++ b/drivers/net/e1000/e1000_main.c
+@@ -787,6 +787,70 @@ static const struct net_device_ops e1000_netdev_ops = {
+ };
+
+ /**
++ * e1000_init_hw_struct - initialize members of hw struct
++ * @adapter: board private struct
++ * @hw: structure used by e1000_hw.c
++ *
++ * Factors out initialization of the e1000_hw struct to its own function
++ * that can be called very early at init (just after struct allocation).
++ * Fields are initialized based on PCI device information and
++ * OS network device settings (MTU size).
++ * Returns negative error codes if MAC type setup fails.
++ */
++static int e1000_init_hw_struct(struct e1000_adapter *adapter,
++ struct e1000_hw *hw)
++{
++ struct pci_dev *pdev = adapter->pdev;
++
++ /* PCI config space info */
++ hw->vendor_id = pdev->vendor;
++ hw->device_id = pdev->device;
++ hw->subsystem_vendor_id = pdev->subsystem_vendor;
++ hw->subsystem_id = pdev->subsystem_device;
++ hw->revision_id = pdev->revision;
++
++ pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
++
++ hw->max_frame_size = adapter->netdev->mtu +
++ ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
++ hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
++
++ /* identify the MAC */
++ if (e1000_set_mac_type(hw)) {
++ e_err(probe, "Unknown MAC Type\n");
++ return -EIO;
++ }
++
++ switch (hw->mac_type) {
++ default:
++ break;
++ case e1000_82541:
++ case e1000_82547:
++ case e1000_82541_rev_2:
++ case e1000_82547_rev_2:
++ hw->phy_init_script = 1;
++ break;
++ }
++
++ e1000_set_media_type(hw);
++ e1000_get_bus_info(hw);
++
++ hw->wait_autoneg_complete = false;
++ hw->tbi_compatibility_en = true;
++ hw->adaptive_ifs = true;
++
++ /* Copper options */
++
++ if (hw->media_type == e1000_media_type_copper) {
++ hw->mdix = AUTO_ALL_MODES;
++ hw->disable_polarity_correction = false;
++ hw->master_slave = E1000_MASTER_SLAVE;
++ }
++
++ return 0;
++}
++
++/**
+ * e1000_probe - Device Initialization Routine
+ * @pdev: PCI device information struct
+ * @ent: entry in e1000_pci_tbl
+@@ -823,22 +887,6 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
+ if (err)
+ return err;
+
+- if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
+- !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
+- pci_using_dac = 1;
+- } else {
+- err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
+- if (err) {
+- err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
+- if (err) {
+- E1000_ERR("No usable DMA configuration, "
+- "aborting\n");
+- goto err_dma;
+- }
+- }
+- pci_using_dac = 0;
+- }
+-
+ err = pci_request_selected_regions(pdev, bars, e1000_driver_name);
+ if (err)
+ goto err_pci_reg;
+@@ -882,6 +930,32 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
+ }
+ }
+
++ /* make ready for any if (hw->...) below */
++ err = e1000_init_hw_struct(adapter, hw);
++ if (err)
++ goto err_sw_init;
++
++ /*
++ * there is a workaround being applied below that limits
++ * 64-bit DMA addresses to 64-bit hardware. There are some
++ * 32-bit adapters that Tx hang when given 64-bit DMA addresses
++ */
++ pci_using_dac = 0;
++ if ((hw->bus_type == e1000_bus_type_pcix) &&
++ !dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
++ /*
++ * according to DMA-API-HOWTO, coherent calls will always
++ * succeed if the set call did
++ */
++ dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
++ pci_using_dac = 1;
++ } else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
++ dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
++ } else {
++ pr_err("No usable DMA config, aborting\n");
++ goto err_dma;
++ }
++
+ netdev->netdev_ops = &e1000_netdev_ops;
+ e1000_set_ethtool_ops(netdev);
+ netdev->watchdog_timeo = 5 * HZ;
+@@ -956,8 +1030,6 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
+ if (!is_valid_ether_addr(netdev->perm_addr))
+ DPRINTK(PROBE, ERR, "Invalid MAC Address\n");
+
+- e1000_get_bus_info(hw);
+-
+ init_timer(&adapter->tx_fifo_stall_timer);
+ adapter->tx_fifo_stall_timer.function = &e1000_82547_tx_fifo_stall;
+ adapter->tx_fifo_stall_timer.data = (unsigned long)adapter;
+@@ -1070,6 +1142,7 @@ err_eeprom:
+ iounmap(hw->flash_address);
+ kfree(adapter->tx_ring);
+ kfree(adapter->rx_ring);
++err_dma:
+ err_sw_init:
+ iounmap(hw->hw_addr);
+ err_ioremap:
+@@ -1077,7 +1150,6 @@ err_ioremap:
+ err_alloc_etherdev:
+ pci_release_selected_regions(pdev, bars);
+ err_pci_reg:
+-err_dma:
+ pci_disable_device(pdev);
+ return err;
+ }
+@@ -1129,62 +1201,12 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
+ * @adapter: board private structure to initialize
+ *
+ * e1000_sw_init initializes the Adapter private data structure.
+- * Fields are initialized based on PCI device information and
+- * OS network device settings (MTU size).
++ * e1000_init_hw_struct MUST be called before this function
+ **/
+
+ static int __devinit e1000_sw_init(struct e1000_adapter *adapter)
+ {
+- struct e1000_hw *hw = &adapter->hw;
+- struct net_device *netdev = adapter->netdev;
+- struct pci_dev *pdev = adapter->pdev;
+-
+- /* PCI config space info */
+-
+- hw->vendor_id = pdev->vendor;
+- hw->device_id = pdev->device;
+- hw->subsystem_vendor_id = pdev->subsystem_vendor;
+- hw->subsystem_id = pdev->subsystem_device;
+- hw->revision_id = pdev->revision;
+-
+- pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
+-
+ adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE;
+- hw->max_frame_size = netdev->mtu +
+- ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
+- hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
+-
+- /* identify the MAC */
+-
+- if (e1000_set_mac_type(hw)) {
+- DPRINTK(PROBE, ERR, "Unknown MAC Type\n");
+- return -EIO;
+- }
+-
+- switch (hw->mac_type) {
+- default:
+- break;
+- case e1000_82541:
+- case e1000_82547:
+- case e1000_82541_rev_2:
+- case e1000_82547_rev_2:
+- hw->phy_init_script = 1;
+- break;
+- }
+-
+- e1000_set_media_type(hw);
+-
+- hw->wait_autoneg_complete = false;
+- hw->tbi_compatibility_en = true;
+- hw->adaptive_ifs = true;
+-
+- /* Copper options */
+-
+- if (hw->media_type == e1000_media_type_copper) {
+- hw->mdix = AUTO_ALL_MODES;
+- hw->disable_polarity_correction = false;
+- hw->master_slave = E1000_MASTER_SLAVE;
+- }
+
+ adapter->num_tx_queues = 1;
+ adapter->num_rx_queues = 1;
+--
+1.7.7
+
diff --git a/queue/e1000e-Reset-82577-82578-PHY-before-first-PHY-regist.patch b/queue/e1000e-Reset-82577-82578-PHY-before-first-PHY-regist.patch
new file mode 100644
index 0000000..dfac7af
--- /dev/null
+++ b/queue/e1000e-Reset-82577-82578-PHY-before-first-PHY-regist.patch
@@ -0,0 +1,40 @@
+From 51b7c3f472acf7f15b58c44bb912ec658d54721a Mon Sep 17 00:00:00 2001
+From: Bruce Allan <bruce.w.allan@intel.com>
+Date: Wed, 5 May 2010 22:00:27 +0000
+Subject: [PATCH] e1000e: Reset 82577/82578 PHY before first PHY register read
+
+commit 627c8a041f7aaaea93c766f69bd61d952a277586 upstream.
+
+Reset the PHY before first accessing it. Doing so, ensure that the PHY is
+in a known good state before we read/write PHY registers. This fixes a
+driver probe failure.
+
+Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
+index 8b5e157..a626012 100644
+--- a/drivers/net/e1000e/ich8lan.c
++++ b/drivers/net/e1000e/ich8lan.c
+@@ -274,6 +274,16 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
+ phy->ops.power_down = e1000_power_down_phy_copper_ich8lan;
+ phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
+
++ /*
++ * Reset the PHY before any acccess to it. Doing so, ensures that
++ * the PHY is in a known good state before we read/write PHY registers.
++ * The generic reset is sufficient here, because we haven't determined
++ * the PHY type yet.
++ */
++ ret_val = e1000e_phy_hw_reset_generic(hw);
++ if (ret_val)
++ goto out;
++
+ phy->id = e1000_phy_unknown;
+ ret_val = e1000e_get_phy_id(hw);
+ if (ret_val)
+--
+1.7.7
+
diff --git a/queue/fix-oops-in-scsi_run_queue.patch b/queue/fix-oops-in-scsi_run_queue.patch
new file mode 100644
index 0000000..73f2811
--- /dev/null
+++ b/queue/fix-oops-in-scsi_run_queue.patch
@@ -0,0 +1,48 @@
+From 5f73c337d88fc4a7071464a87b23cbb01f16c5d4 Mon Sep 17 00:00:00 2001
+From: James Bottomley <James.Bottomley@suse.de>
+Date: Sun, 1 May 2011 09:42:07 -0500
+Subject: [PATCH] fix oops in scsi_run_queue()
+
+commit c055f5b2614b4f758ae6cc86733f31fa4c2c5844 upstream.
+
+The recent commit closing the race window in device teardown:
+
+commit 86cbfb5607d4b81b1a993ff689bbd2addd5d3a9b
+Author: James Bottomley <James.Bottomley@suse.de>
+Date: Fri Apr 22 10:39:59 2011 -0500
+
+ [SCSI] put stricter guards on queue dead checks
+
+is causing a potential NULL deref in scsi_run_queue() because the
+q->queuedata may already be NULL by the time this function is called.
+Since we shouldn't be running a queue that is being torn down, simply
+add a NULL check in scsi_run_queue() to forestall this.
+
+Tested-by: Jim Schutt <jaschut@sandia.gov>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
+index c2a9e12..725f3cd 100644
+--- a/drivers/scsi/scsi_lib.c
++++ b/drivers/scsi/scsi_lib.c
+@@ -400,10 +400,15 @@ static inline int scsi_host_is_busy(struct Scsi_Host *shost)
+ static void scsi_run_queue(struct request_queue *q)
+ {
+ struct scsi_device *sdev = q->queuedata;
+- struct Scsi_Host *shost = sdev->host;
++ struct Scsi_Host *shost;
+ LIST_HEAD(starved_list);
+ unsigned long flags;
+
++ /* if the device is dead, sdev will be NULL, so no queue to run */
++ if (!sdev)
++ return;
++
++ shost = sdev->host;
+ if (scsi_target(sdev)->single_lun)
+ scsi_single_lun_run(sdev);
+
+--
+1.7.7
+
diff --git a/queue/hwmon-applesmc-Add-MacBookAir3-1-3-2-support.patch b/queue/hwmon-applesmc-Add-MacBookAir3-1-3-2-support.patch
new file mode 100644
index 0000000..4ce171b
--- /dev/null
+++ b/queue/hwmon-applesmc-Add-MacBookAir3-1-3-2-support.patch
@@ -0,0 +1,53 @@
+From 89031374986e654546e61bac7567a308154432f2 Mon Sep 17 00:00:00 2001
+From: Edgar Hucek <gimli@dark-green.com>
+Date: Tue, 9 Nov 2010 15:15:01 +0000
+Subject: [PATCH] hwmon: (applesmc) Add MacBookAir3,1(3,2) support
+
+commit 132af03233b493101a53010383b5abb5b9ff1e51 upstream.
+
+This patch add support for the MacBookAir3,1 and MacBookAir3,2 to the
+applesmc driver.
+
+[rydberg@euromail.se: minor cleanup]
+Signed-off-by: Edgar Hucek <gimli@dark-green.com>
+Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
+Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index 57c0331..7765a6b 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -162,6 +162,10 @@ static const char *temperature_sensors_sets[][41] = {
+ /* Set 22: MacBook Pro 7,1 */
+ { "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", "TN0D", "TN0P", "TN0S",
+ "TN1D", "TN1F", "TN1G", "TN1S", "Th1H", "Ts0P", "Ts0S", NULL },
++/* Set 23: MacBook Air 3,1 */
++ { "TB0T", "TB1T", "TB2T", "TC0D", "TC0E", "TC0P", "TC1E", "TCZ3",
++ "TCZ4", "TCZ5", "TG0E", "TG1E", "TG2E", "TGZ3", "TGZ4", "TGZ5",
++ "TH0F", "TH0O", "TM0P" },
+ };
+
+ /* List of keys used to read/write fan speeds */
+@@ -1385,11 +1389,17 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {
+ { .accelerometer = 1, .light = 1, .temperature_set = 21 },
+ /* MacBook Pro 7,1: accelerometer, backlight and temperature set 22 */
+ { .accelerometer = 1, .light = 1, .temperature_set = 22 },
++/* MacBook Air 3,1: accelerometer, backlight and temperature set 23 */
++ { .accelerometer = 0, .light = 0, .temperature_set = 23 },
+ };
+
+ /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
+ * So we need to put "Apple MacBook Pro" before "Apple MacBook". */
+ static __initdata struct dmi_system_id applesmc_whitelist[] = {
++ { applesmc_dmi_match, "Apple MacBook Air 3", {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3") },
++ &applesmc_dmi_data[23]},
+ { applesmc_dmi_match, "Apple MacBook Air 2", {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2") },
+--
+1.7.7
+
diff --git a/queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-6.patch b/queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-6.patch
new file mode 100644
index 0000000..2e42733
--- /dev/null
+++ b/queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-6.patch
@@ -0,0 +1,55 @@
+From 062bd7f05662efc3c65cf13abbf6650bfe07b4e9 Mon Sep 17 00:00:00 2001
+From: Bernhard Froemel <froemel@vmars.tuwien.ac.at>
+Date: Thu, 27 May 2010 19:58:52 +0200
+Subject: [PATCH] hwmon: (applesmc) Add generic support for MacBook Pro 6
+
+commit 872bad55e2d3fcc13e1e8770a3b200f0c6ca5126 upstream.
+
+This patch adds generic support for the MacBook Pro 6 family
+based on the 6,2 model.
+
+[rydberg@euromail.se: patch cleanup]
+Signed-off-by: Bernhard Froemel <froemel@vmars.tuwien.ac.at>
+Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index be33094..ce41a43 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -155,6 +155,10 @@ static const char *temperature_sensors_sets[][41] = {
+ /* Set 20: MacBook Pro 5,4 */
+ { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0F", "TC0P", "TN0D",
+ "TN0P", "TTF0", "Th2H", "Ts0P", "Ts0S", NULL },
++/* Set 21: MacBook Pro 6,2 */
++ { "TB0T", "TB1T", "TB2T", "TC0C", "TC0D", "TC0P", "TC1C", "TG0D",
++ "TG0P", "TG0T", "TMCD", "TP0P", "TPCD", "Th1H", "Th2H", "Tm0P",
++ "Ts0P", "Ts0S", NULL },
+ };
+
+ /* List of keys used to read/write fan speeds */
+@@ -1374,6 +1378,8 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {
+ { .accelerometer = 1, .light = 1, .temperature_set = 19 },
+ /* MacBook Pro 5,4: accelerometer, backlight and temperature set 20 */
+ { .accelerometer = 1, .light = 1, .temperature_set = 20 },
++/* MacBook Pro 6,2: accelerometer, backlight and temperature set 21 */
++ { .accelerometer = 1, .light = 1, .temperature_set = 21 },
+ };
+
+ /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
+@@ -1395,6 +1401,10 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,3") },
+ &applesmc_dmi_data[19]},
++ { applesmc_dmi_match, "Apple MacBook Pro 6", {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6") },
++ &applesmc_dmi_data[21]},
+ { applesmc_dmi_match, "Apple MacBook Pro 5", {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5") },
+--
+1.7.7
+
diff --git a/queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-7.patch b/queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-7.patch
new file mode 100644
index 0000000..49c72af
--- /dev/null
+++ b/queue/hwmon-applesmc-Add-generic-support-for-MacBook-Pro-7.patch
@@ -0,0 +1,51 @@
+From ded8d8d8b603eeadc831e29c3ed16b24c49dc66e Mon Sep 17 00:00:00 2001
+From: Henrik Rydberg <rydberg@euromail.se>
+Date: Thu, 27 May 2010 19:58:53 +0200
+Subject: [PATCH] hwmon: (applesmc) Add generic support for MacBook Pro 7
+
+commit 405eaa1c1d045cdd872802fc515f638573984880 upstream.
+
+This patch adds generic support for the MacBook Pro 7 family
+based on the 7,1 model.
+
+Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index ce41a43..57c0331 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -159,6 +159,9 @@ static const char *temperature_sensors_sets[][41] = {
+ { "TB0T", "TB1T", "TB2T", "TC0C", "TC0D", "TC0P", "TC1C", "TG0D",
+ "TG0P", "TG0T", "TMCD", "TP0P", "TPCD", "Th1H", "Th2H", "Tm0P",
+ "Ts0P", "Ts0S", NULL },
++/* Set 22: MacBook Pro 7,1 */
++ { "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", "TN0D", "TN0P", "TN0S",
++ "TN1D", "TN1F", "TN1G", "TN1S", "Th1H", "Ts0P", "Ts0S", NULL },
+ };
+
+ /* List of keys used to read/write fan speeds */
+@@ -1380,6 +1383,8 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {
+ { .accelerometer = 1, .light = 1, .temperature_set = 20 },
+ /* MacBook Pro 6,2: accelerometer, backlight and temperature set 21 */
+ { .accelerometer = 1, .light = 1, .temperature_set = 21 },
++/* MacBook Pro 7,1: accelerometer, backlight and temperature set 22 */
++ { .accelerometer = 1, .light = 1, .temperature_set = 22 },
+ };
+
+ /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
+@@ -1393,6 +1398,10 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir") },
+ &applesmc_dmi_data[7]},
++ { applesmc_dmi_match, "Apple MacBook Pro 7", {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro7") },
++ &applesmc_dmi_data[22]},
+ { applesmc_dmi_match, "Apple MacBook Pro 5,4", {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,4") },
+--
+1.7.7
+
diff --git a/queue/hwmon-applesmc-Add-support-for-MacBook-Pro-5-3-and-5.patch b/queue/hwmon-applesmc-Add-support-for-MacBook-Pro-5-3-and-5.patch
new file mode 100644
index 0000000..20cb1eb
--- /dev/null
+++ b/queue/hwmon-applesmc-Add-support-for-MacBook-Pro-5-3-and-5.patch
@@ -0,0 +1,61 @@
+From c0993d79661b3e6a409b47bd621951b5ba306c77 Mon Sep 17 00:00:00 2001
+From: Henrik Rydberg <rydberg@euromail.se>
+Date: Thu, 27 May 2010 19:58:50 +0200
+Subject: [PATCH] hwmon: (applesmc) Add support for MacBook Pro 5,3 and 5,4
+
+commit 4e4a99d32721800c061191027f18f780dcbd9e0b upstream.
+
+The MacBookPro 5,3 model has two fans, whereas the 5,4 model has
+only one. This patch adds explicit support for the 5,3 and 5,4 models.
+
+Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
+Signed-off-by: Jean Delvare <khali@linux-fr.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index f085c18..be33094 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -148,6 +148,13 @@ static const char *temperature_sensors_sets[][41] = {
+ /* Set 18: MacBook Pro 2,2 */
+ { "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "TM0P", "TTF0",
+ "Th0H", "Th1H", "Tm0P", "Ts0P", NULL },
++/* Set 19: Macbook Pro 5,3 */
++ { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0F", "TC0P", "TG0D",
++ "TG0F", "TG0H", "TG0P", "TG0T", "TN0D", "TN0P", "TTF0", "Th2H",
++ "Tm0P", "Ts0P", "Ts0S", NULL },
++/* Set 20: MacBook Pro 5,4 */
++ { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0F", "TC0P", "TN0D",
++ "TN0P", "TTF0", "Th2H", "Ts0P", "Ts0S", NULL },
+ };
+
+ /* List of keys used to read/write fan speeds */
+@@ -1363,6 +1370,10 @@ static __initdata struct dmi_match_data applesmc_dmi_data[] = {
+ { .accelerometer = 0, .light = 0, .temperature_set = 17 },
+ /* MacBook Pro 2,2: accelerometer, backlight and temperature set 18 */
+ { .accelerometer = 1, .light = 1, .temperature_set = 18 },
++/* MacBook Pro 5,3: accelerometer, backlight and temperature set 19 */
++ { .accelerometer = 1, .light = 1, .temperature_set = 19 },
++/* MacBook Pro 5,4: accelerometer, backlight and temperature set 20 */
++ { .accelerometer = 1, .light = 1, .temperature_set = 20 },
+ };
+
+ /* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
+@@ -1376,6 +1387,14 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir") },
+ &applesmc_dmi_data[7]},
++ { applesmc_dmi_match, "Apple MacBook Pro 5,4", {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,4") },
++ &applesmc_dmi_data[20]},
++ { applesmc_dmi_match, "Apple MacBook Pro 5,3", {
++ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,3") },
++ &applesmc_dmi_data[19]},
+ { applesmc_dmi_match, "Apple MacBook Pro 5", {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5") },
+--
+1.7.7
+
diff --git a/queue/i8k-Tell-gcc-that-regs-gets-clobbered.patch b/queue/i8k-Tell-gcc-that-regs-gets-clobbered.patch
new file mode 100644
index 0000000..46da277
--- /dev/null
+++ b/queue/i8k-Tell-gcc-that-regs-gets-clobbered.patch
@@ -0,0 +1,49 @@
+From 7337772995aa0014c918ba7721f4b7509c0d9c47 Mon Sep 17 00:00:00 2001
+From: Jim Bos <jim876@xs4all.nl>
+Date: Sat, 13 Nov 2010 12:13:53 +0100
+Subject: [PATCH] i8k: Tell gcc that *regs gets clobbered
+
+commit 6b4e81db2552bad04100e7d5ddeed7e848f53b48 upstream.
+
+More recent GCC caused the i8k driver to stop working, on Slackware
+compiler was upgraded from gcc-4.4.4 to gcc-4.5.1 after which it didn't
+work anymore, meaning the driver didn't load or gave total nonsensical
+output.
+
+As it turned out the asm(..) statement forgot to mention it modifies the
+*regs variable.
+
+Credits to Andi Kleen and Andreas Schwab for providing the fix.
+
+Signed-off-by: Jim Bos <jim876@xs4all.nl>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Andreas Schwab <schwab@linux-m68k.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
+index fc8cf7a..828fd24 100644
+--- a/drivers/char/i8k.c
++++ b/drivers/char/i8k.c
+@@ -141,7 +141,7 @@ static int i8k_smm(struct smm_regs *regs)
+ "lahf\n\t"
+ "shrl $8,%%eax\n\t"
+ "andl $1,%%eax\n"
+- :"=a"(rc)
++ :"=a"(rc), "+m" (*regs)
+ : "a"(regs)
+ : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
+ #else
+@@ -166,7 +166,8 @@ static int i8k_smm(struct smm_regs *regs)
+ "movl %%edx,0(%%eax)\n\t"
+ "lahf\n\t"
+ "shrl $8,%%eax\n\t"
+- "andl $1,%%eax\n":"=a"(rc)
++ "andl $1,%%eax\n"
++ :"=a"(rc), "+m" (*regs)
+ : "a"(regs)
+ : "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
+ #endif
+--
+1.7.7
+
diff --git a/queue/init-sched-Fix-race-between-init-and-kthreadd.patch b/queue/init-sched-Fix-race-between-init-and-kthreadd.patch
new file mode 100644
index 0000000..53adfd7
--- /dev/null
+++ b/queue/init-sched-Fix-race-between-init-and-kthreadd.patch
@@ -0,0 +1,68 @@
+From 8b72ec6671d9b4a1a878e4d22ed4c2050d2480cd Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Mon, 28 Jun 2010 16:51:01 +0200
+Subject: [PATCH] init, sched: Fix race between init and kthreadd
+
+commit b433c3d4549ae74935b585115f076c6fb7bc48fe upstream.
+
+Ilya reported that on a very slow machine he could reliably
+reproduce a race between forking init and kthreadd. We first
+fork init so that it obtains pid-1, however since the scheduler
+is already fully running at this point it can preempt and run
+the init thread before we spawn and set kthreadd_task.
+
+The init thread can then attempt spawning kthreads without
+kthreadd being present which results in an OOPS.
+
+Reported-by: Ilya Loginov <isloginov@gmail.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
+LKML-Reference: <1277736661.3561.110.camel@laptop>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/init/main.c b/init/main.c
+index 5c85402..df0e20b 100644
+--- a/init/main.c
++++ b/init/main.c
+@@ -421,18 +421,26 @@ static void __init setup_command_line(char *command_line)
+ * gcc-3.4 accidentally inlines this function, so use noinline.
+ */
+
++static __initdata DECLARE_COMPLETION(kthreadd_done);
++
+ static noinline void __init_refok rest_init(void)
+ __releases(kernel_lock)
+ {
+ int pid;
+
+ rcu_scheduler_starting();
++ /*
++ * We need to spawn init first so that it obtains pid-1, however
++ * the init task will end up wanting to create kthreads, which, if
++ * we schedule it before we create kthreadd, will OOPS.
++ */
+ kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
+ numa_default_policy();
+ pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
+ rcu_read_lock();
+ kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
+ rcu_read_unlock();
++ complete(&kthreadd_done);
+ unlock_kernel();
+
+ /*
+@@ -853,6 +861,10 @@ static noinline int init_post(void)
+
+ static int __init kernel_init(void * unused)
+ {
++ /*
++ * Wait until kthreadd is all set-up.
++ */
++ wait_for_completion(&kthreadd_done);
+ lock_kernel();
+
+ /*
+--
+1.7.7
+
diff --git a/queue/intel-iommu-Fix-get_domain_for_dev-error-path.patch b/queue/intel-iommu-Fix-get_domain_for_dev-error-path.patch
new file mode 100644
index 0000000..8d3d5da
--- /dev/null
+++ b/queue/intel-iommu-Fix-get_domain_for_dev-error-path.patch
@@ -0,0 +1,34 @@
+From 8bffb6316d83dd3bd028dcf51bae0bcd9e60dcf9 Mon Sep 17 00:00:00 2001
+From: Alex Williamson <alex.williamson@redhat.com>
+Date: Fri, 4 Mar 2011 14:52:30 -0700
+Subject: [PATCH] intel-iommu: Fix get_domain_for_dev() error path
+
+commit 2fe9723df8e45fd247782adea244a5e653c30bf4 upstream.
+
+If we run out of domain_ids and fail iommu_attach_domain(), we
+fall into domain_exit() without having setup enough of the
+domain structure for this to do anything useful. In fact, it
+typically runs off into the weeds walking the bogus domain->devices
+list. Just free the domain.
+
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Acked-by: Donald Dutile <ddutile@redhat.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
+index 62e92e5..2b985b9 100644
+--- a/drivers/pci/intel-iommu.c
++++ b/drivers/pci/intel-iommu.c
+@@ -1848,7 +1848,7 @@ static struct dmar_domain *get_domain_for_dev(struct pci_dev *pdev, int gaw)
+
+ ret = iommu_attach_domain(domain, iommu);
+ if (ret) {
+- domain_exit(domain);
++ free_domain_mem(domain);
+ goto error;
+ }
+
+--
+1.7.7
+
diff --git a/queue/intel-iommu-Force-disable-IOMMU-for-iGFX-on-broken-C.patch b/queue/intel-iommu-Force-disable-IOMMU-for-iGFX-on-broken-C.patch
new file mode 100644
index 0000000..230254c
--- /dev/null
+++ b/queue/intel-iommu-Force-disable-IOMMU-for-iGFX-on-broken-C.patch
@@ -0,0 +1,50 @@
+From d5071df118b5f491f45ddd834db94a9261afa6bd Mon Sep 17 00:00:00 2001
+From: David Woodhouse <David.Woodhouse@intel.com>
+Date: Tue, 15 Jun 2010 10:57:57 +0100
+Subject: [PATCH] intel-iommu: Force-disable IOMMU for iGFX on broken Cantiga
+ revisions.
+
+commit 2d9e667efdfb4e986074d98e7d9a424003c7c43b upstream.
+
+Certain revisions of this chipset appear to be broken. There is a shadow
+GTT which mirrors the real GTT but contains pre-translated physical
+addresses, for performance reasons. When a GTT update happens, the
+translations are done once and the resulting physical addresses written
+back to the shadow GTT.
+
+Except sometimes, the physical address is actually written back to the
+_real_ GTT, not the shadow GTT. Thus we start to see faults when that
+physical address is fed through translation again.
+
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
+index 2b985b9..67e2f60 100644
+--- a/drivers/pci/intel-iommu.c
++++ b/drivers/pci/intel-iommu.c
+@@ -383,7 +383,7 @@ int dmar_disabled = 0;
+ int dmar_disabled = 1;
+ #endif /*CONFIG_DMAR_DEFAULT_ON*/
+
+-static int __initdata dmar_map_gfx = 1;
++static int dmar_map_gfx = 1;
+ static int dmar_forcedac;
+ static int intel_iommu_strict;
+
+@@ -3762,6 +3762,12 @@ static void __devinit quirk_iommu_rwbf(struct pci_dev *dev)
+ */
+ printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n");
+ rwbf_quirk = 1;
++
++ /* https://bugzilla.redhat.com/show_bug.cgi?id=538163 */
++ if (dev->revision == 0x07) {
++ printk(KERN_INFO "DMAR: Disabling IOMMU for graphics on this chipset\n");
++ dmar_map_gfx = 0;
++ }
+ }
+
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf);
+--
+1.7.7
+
diff --git a/queue/intel-iommu-Unlink-domain-from-iommu.patch b/queue/intel-iommu-Unlink-domain-from-iommu.patch
new file mode 100644
index 0000000..5f9f456
--- /dev/null
+++ b/queue/intel-iommu-Unlink-domain-from-iommu.patch
@@ -0,0 +1,54 @@
+From 3800138beb61d288323eeae291cf2133a25aeb83 Mon Sep 17 00:00:00 2001
+From: Alex Williamson <alex.williamson@redhat.com>
+Date: Fri, 4 Mar 2011 14:52:16 -0700
+Subject: [PATCH] intel-iommu: Unlink domain from iommu
+
+commit a97590e56d0d58e1dd262353f7cbd84e81d8e600 upstream.
+
+When we remove a device, we unlink the iommu from the domain, but
+we never do the reverse unlinking of the domain from the iommu.
+This means that we never clear iommu->domain_ids, eventually leading
+to resource exhaustion if we repeatedly bind and unbind a device
+to a driver. Also free empty domains to avoid a resource leak.
+
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Acked-by: Donald Dutile <ddutile@redhat.com>
+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
+index 3507692..62e92e5 100644
+--- a/drivers/pci/intel-iommu.c
++++ b/drivers/pci/intel-iommu.c
+@@ -3261,9 +3261,15 @@ static int device_notifier(struct notifier_block *nb,
+ if (!domain)
+ return 0;
+
+- if (action == BUS_NOTIFY_UNBOUND_DRIVER && !iommu_pass_through)
++ if (action == BUS_NOTIFY_UNBOUND_DRIVER && !iommu_pass_through) {
+ domain_remove_one_dev_info(domain, pdev);
+
++ if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) &&
++ !(domain->flags & DOMAIN_FLAG_STATIC_IDENTITY) &&
++ list_empty(&domain->devices))
++ domain_exit(domain);
++ }
++
+ return 0;
+ }
+
+@@ -3412,6 +3418,11 @@ static void domain_remove_one_dev_info(struct dmar_domain *domain,
+ domain->iommu_count--;
+ domain_update_iommu_cap(domain);
+ spin_unlock_irqrestore(&domain->iommu_lock, tmp_flags);
++
++ spin_lock_irqsave(&iommu->lock, tmp_flags);
++ clear_bit(domain->id, iommu->domain_ids);
++ iommu->domains[domain->id] = NULL;
++ spin_unlock_irqrestore(&iommu->lock, tmp_flags);
+ }
+
+ spin_unlock_irqrestore(&device_domain_lock, flags);
+--
+1.7.7
+
diff --git a/queue/ipv6-Silence-privacy-extensions-initialization.patch b/queue/ipv6-Silence-privacy-extensions-initialization.patch
new file mode 100644
index 0000000..3cca68e
--- /dev/null
+++ b/queue/ipv6-Silence-privacy-extensions-initialization.patch
@@ -0,0 +1,41 @@
+From bc0b40b266731be60d95214c11e8cb25ff72fa5d Mon Sep 17 00:00:00 2001
+From: Romain Francoise <romain@orebokech.com>
+Date: Mon, 17 Jan 2011 07:59:18 +0000
+Subject: [PATCH] ipv6: Silence privacy extensions initialization
+
+commit 2fdc1c8093255f9da877d7b9ce3f46c2098377dc upstream.
+
+When a network namespace is created (via CLONE_NEWNET), the loopback
+interface is automatically added to the new namespace, triggering a
+printk in ipv6_add_dev() if CONFIG_IPV6_PRIVACY is set.
+
+This is problematic for applications which use CLONE_NEWNET as
+part of a sandbox, like Chromium's suid sandbox or recent versions of
+vsftpd. On a busy machine, it can lead to thousands of useless
+"lo: Disabled Privacy Extensions" messages appearing in dmesg.
+
+It's easy enough to check the status of privacy extensions via the
+use_tempaddr sysctl, so just removing the printk seems like the most
+sensible solution.
+
+Signed-off-by: Romain Francoise <romain@orebokech.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
+index 844ffc5..34ad669 100644
+--- a/net/ipv6/addrconf.c
++++ b/net/ipv6/addrconf.c
+@@ -408,9 +408,6 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
+ dev->type == ARPHRD_TUNNEL6 ||
+ dev->type == ARPHRD_SIT ||
+ dev->type == ARPHRD_NONE) {
+- printk(KERN_INFO
+- "%s: Disabled Privacy Extensions\n",
+- dev->name);
+ ndev->cnf.use_tempaddr = -1;
+ } else {
+ in6_dev_hold(ndev);
+--
+1.7.7
+
diff --git a/queue/iwlagn-Support-new-5000-microcode.patch b/queue/iwlagn-Support-new-5000-microcode.patch
new file mode 100644
index 0000000..9b8ad35
--- /dev/null
+++ b/queue/iwlagn-Support-new-5000-microcode.patch
@@ -0,0 +1,29 @@
+From a6e79c3b118a82d489b16487feedb58d6251db1c Mon Sep 17 00:00:00 2001
+From: "Fry, Donald H" <donald.h.fry@intel.com>
+Date: Wed, 16 Feb 2011 11:49:34 -0800
+Subject: [PATCH] iwlagn: Support new 5000 microcode.
+
+commit 41504cce240f791f1e16561db95728c5537fbad9 upstream.
+
+New iwlwifi-5000 microcode requires driver support for API version 5.
+
+Signed-off-by: Don Fry <donald.h.fry@intel.com>
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
+index d05fad4..dc191b8 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
++++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
+@@ -48,7 +48,7 @@
+ #include "iwl-6000-hw.h"
+
+ /* Highest firmware API version supported */
+-#define IWL5000_UCODE_API_MAX 2
++#define IWL5000_UCODE_API_MAX 5
+ #define IWL5150_UCODE_API_MAX 2
+
+ /* Lowest firmware API version supported */
+--
+1.7.7
+
diff --git a/queue/iwlwifi-fix-skb-usage-after-free.patch b/queue/iwlwifi-fix-skb-usage-after-free.patch
new file mode 100644
index 0000000..077f0f8
--- /dev/null
+++ b/queue/iwlwifi-fix-skb-usage-after-free.patch
@@ -0,0 +1,54 @@
+From 07d9d992b9b3016dfa08fc55de2255fcd5d74d64 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Wed, 20 Apr 2011 15:57:14 +0200
+Subject: [PATCH] iwlwifi: fix skb usage after free
+
+commit b25026981aecde3685dd0e45ad980fff9f528daa upstream.
+
+Since
+
+commit a120e912eb51e347f36c71b60a1d13af74d30e83
+Author: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Fri Feb 19 15:47:33 2010 -0800
+
+ iwlwifi: sanity check before counting number of tfds can be free
+
+we use skb->data after calling ieee80211_tx_status_irqsafe(), which
+could free skb instantly.
+
+On current kernels I do not observe practical problems related with
+bug, but on 2.6.35.y it cause random system hangs when stressing
+wireless link.
+
+[PG: since 34, file renamed, + iwlagn_tx_status --> iwl_tx_status]
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
+index e950153..92a5f9e 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
+@@ -1234,11 +1234,15 @@ int iwl_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index)
+ q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd)) {
+
+ tx_info = &txq->txb[txq->q.read_ptr];
+- iwl_tx_status(priv, tx_info->skb[0]);
++
++ if (WARN_ON_ONCE(tx_info->skb == NULL))
++ continue;
+
+ hdr = (struct ieee80211_hdr *)tx_info->skb[0]->data;
+- if (hdr && ieee80211_is_data_qos(hdr->frame_control))
++ if (ieee80211_is_data_qos(hdr->frame_control))
+ nfreed++;
++
++ iwl_tx_status(priv, tx_info->skb[0]);
+ tx_info->skb[0] = NULL;
+
+ if (priv->cfg->ops->lib->txq_inval_byte_cnt_tbl)
+--
+1.7.7
+
diff --git a/queue/kconfig-Avoid-buffer-underrun-in-choice-input.patch b/queue/kconfig-Avoid-buffer-underrun-in-choice-input.patch
new file mode 100644
index 0000000..eadfa93
--- /dev/null
+++ b/queue/kconfig-Avoid-buffer-underrun-in-choice-input.patch
@@ -0,0 +1,37 @@
+From 2164b24b2b0ab606f1518fc89c4731b0bf5819bc Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 23 Apr 2011 18:42:56 +0100
+Subject: [PATCH] kconfig: Avoid buffer underrun in choice input
+
+commit 3ba41621156681afcdbcd624e3191cbc65eb94f4 upstream.
+
+Commit 40aee729b350 ('kconfig: fix default value for choice input')
+fixed some cases where kconfig would select the wrong option from a
+choice with a single valid option and thus enter an infinite loop.
+
+However, this broke the test for user input of the form 'N?', because
+when kconfig selects the single valid option the input is zero-length
+and the test will read the byte before the input buffer. If this
+happens to contain '?' (as it will in a mips build on Debian unstable
+today) then kconfig again enters an infinite loop.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
+index 9960d1c..7f97e3f 100644
+--- a/scripts/kconfig/conf.c
++++ b/scripts/kconfig/conf.c
+@@ -330,7 +330,7 @@ static int conf_choice(struct menu *menu)
+ }
+ if (!child)
+ continue;
+- if (line[strlen(line) - 1] == '?') {
++ if (line[0] && line[strlen(line) - 1] == '?') {
+ print_help(child);
+ continue;
+ }
+--
+1.7.7
+
diff --git a/queue/libata-set-queue-DMA-alignment-to-sector-size-for-AT.patch b/queue/libata-set-queue-DMA-alignment-to-sector-size-for-AT.patch
new file mode 100644
index 0000000..6e4b2d4
--- /dev/null
+++ b/queue/libata-set-queue-DMA-alignment-to-sector-size-for-AT.patch
@@ -0,0 +1,78 @@
+From 93972f790de561d0d9a021a2b57f8da0d7f8e887 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <htejun@gmail.com>
+Date: Thu, 20 Jan 2011 13:59:06 +0100
+Subject: [PATCH] libata: set queue DMA alignment to sector size for ATAPI too
+
+commit 729a6a300e628a48cf12bac93a964a535e83cd1d upstream.
+
+ata_pio_sectors() expects buffer for each sector to be contained in a
+single page; otherwise, it ends up overrunning the first page. This
+is achieved by setting queue DMA alignment. If sector_size is smaller
+than PAGE_SIZE and all buffers are sector_size aligned, buffer for
+each sector is always contained in a single page.
+
+This wasn't applied to ATAPI devices but IDENTIFY_PACKET is executed
+as ATA_PROT_PIO and thus uses ata_pio_sectors(). Newer versions of
+udev issue IDENTIFY_PACKET with unaligned buffer triggering the
+problem and causing oops.
+
+This patch fixes the problem by setting sdev->sector_size to
+ATA_SECT_SIZE on ATATPI devices and always setting DMA alignment to
+sector_size. While at it, add a warning for the unlikely but still
+possible scenario where sector_size is larger than PAGE_SIZE, in which
+case the alignment wouldn't be enough.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: John Stanley <jpsinthemix@verizon.net>
+Tested-by: John Stanley <jpsinthemix@verizon.net>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
+index 1d266e2..0dfa468 100644
+--- a/drivers/ata/libata-scsi.c
++++ b/drivers/ata/libata-scsi.c
+@@ -1104,9 +1104,9 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
+ struct request_queue *q = sdev->request_queue;
+ void *buf;
+
+- /* set the min alignment and padding */
+- blk_queue_update_dma_alignment(sdev->request_queue,
+- ATA_DMA_PAD_SZ - 1);
++ sdev->sector_size = ATA_SECT_SIZE;
++
++ /* set DMA padding */
+ blk_queue_update_dma_pad(sdev->request_queue,
+ ATA_DMA_PAD_SZ - 1);
+
+@@ -1120,12 +1120,24 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
+
+ blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
+ } else {
+- /* ATA devices must be sector aligned */
+- blk_queue_update_dma_alignment(sdev->request_queue,
+- ATA_SECT_SIZE - 1);
+ sdev->manage_start_stop = 1;
+ }
+
++ /*
++ * ata_pio_sectors() expects buffer for each sector to not cross
++ * page boundary. Enforce it by requiring buffers to be sector
++ * aligned, which works iff sector_size is not larger than
++ * PAGE_SIZE. ATAPI devices also need the alignment as
++ * IDENTIFY_PACKET is executed as ATA_PROT_PIO.
++ */
++ if (sdev->sector_size > PAGE_SIZE)
++ ata_dev_printk(dev, KERN_WARNING,
++ "sector_size=%u > PAGE_SIZE, PIO may malfunction\n",
++ sdev->sector_size);
++
++ blk_queue_update_dma_alignment(sdev->request_queue,
++ ATA_SECT_SIZE - 1);
++
+ if (dev->flags & ATA_DFLAG_AN)
+ set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
+
+--
+1.7.7
+
diff --git a/queue/m68k-mm-Set-all-online-nodes-in-N_NORMAL_MEMORY.patch b/queue/m68k-mm-Set-all-online-nodes-in-N_NORMAL_MEMORY.patch
new file mode 100644
index 0000000..49c3f85
--- /dev/null
+++ b/queue/m68k-mm-Set-all-online-nodes-in-N_NORMAL_MEMORY.patch
@@ -0,0 +1,42 @@
+From 5de8068af49d717d994fd5995c63ca4b47b6e19a Mon Sep 17 00:00:00 2001
+From: Michael Schmitz <schmitzmic@googlemail.com>
+Date: Tue, 26 Apr 2011 14:51:53 +1200
+Subject: [PATCH] m68k/mm: Set all online nodes in N_NORMAL_MEMORY
+
+commit 4aac0b4815ba592052758f4b468f253d383dc9d6 upstream.
+
+For m68k, N_NORMAL_MEMORY represents all nodes that have present memory
+since it does not support HIGHMEM. This patch sets the bit at the time
+node_present_pages has been set by free_area_init_node.
+At the time the node is brought online, the node state would have to be
+done unconditionally since information about present memory has not yet
+been recorded.
+
+If N_NORMAL_MEMORY is not accurate, slub may encounter errors since it
+uses this nodemask to setup per-cache kmem_cache_node data structures.
+
+This pach is an alternative to the one proposed by David Rientjes
+<rientjes@google.com> attempting to set node state immediately when
+bringing the node online.
+
+Signed-off-by: Michael Schmitz <schmitz@debian.org>
+Tested-by: Thorsten Glaser <tg@debian.org>
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
+index 02b7a03..8b3db1c 100644
+--- a/arch/m68k/mm/motorola.c
++++ b/arch/m68k/mm/motorola.c
+@@ -300,6 +300,8 @@ void __init paging_init(void)
+ zones_size[ZONE_DMA] = m68k_memory[i].size >> PAGE_SHIFT;
+ free_area_init_node(i, zones_size,
+ m68k_memory[i].addr >> PAGE_SHIFT, NULL);
++ if (node_present_pages(i))
++ node_set_state(i, N_NORMAL_MEMORY);
+ }
+ }
+
+--
+1.7.7
+
diff --git a/queue/mmc-build-fix-mmc_pm_notify-is-only-available-with-C.patch b/queue/mmc-build-fix-mmc_pm_notify-is-only-available-with-C.patch
new file mode 100644
index 0000000..08a130f
--- /dev/null
+++ b/queue/mmc-build-fix-mmc_pm_notify-is-only-available-with-C.patch
@@ -0,0 +1,42 @@
+From babc8bedb7e498d72210b0a71a88e5babc5ebdba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
+Date: Wed, 18 Aug 2010 09:25:38 -0700
+Subject: [PATCH] mmc: build fix: mmc_pm_notify is only available with
+ CONFIG_PM=y
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 81ca03a0e2ea0207b2df80e0edcf4c775c07a505 upstream.
+
+This fixes a build breakage introduced by commit 4c2ef25fe0b8 ("mmc: fix
+all hangs related to mmc/sd card insert/removal during suspend/resume")
+
+Cc: David Brownell <david-b@pacbell.net>
+Cc: Alan Stern <stern@rowland.harvard.edu>
+Cc: linux-mmc@vger.kernel.org
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Acked-by: Kukjin Kim <kgene.kim@samsung.com>
+Acked-by: Maxim Levitsky <maximlevitsky@gmail.com>
+Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
+index 0efe631..d80cfdc 100644
+--- a/drivers/mmc/core/host.c
++++ b/drivers/mmc/core/host.c
+@@ -86,7 +86,9 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
+ init_waitqueue_head(&host->wq);
+ INIT_DELAYED_WORK(&host->detect, mmc_rescan);
+ INIT_DELAYED_WORK_DEFERRABLE(&host->disable, mmc_host_deeper_disable);
++#ifdef CONFIG_PM
+ host->pm_notify.notifier_call = mmc_pm_notify;
++#endif
+
+ /*
+ * By default, hosts do not support SGIO or large requests.
+--
+1.7.7
+
diff --git a/queue/mmc-fix-all-hangs-related-to-mmc-sd-card-insert-remo.patch b/queue/mmc-fix-all-hangs-related-to-mmc-sd-card-insert-remo.patch
new file mode 100644
index 0000000..265fb37
--- /dev/null
+++ b/queue/mmc-fix-all-hangs-related-to-mmc-sd-card-insert-remo.patch
@@ -0,0 +1,219 @@
+From 45aea6d934c78d6ff0515e4a8972f65b805ca660 Mon Sep 17 00:00:00 2001
+From: Maxim Levitsky <maximlevitsky@gmail.com>
+Date: Tue, 10 Aug 2010 18:01:41 -0700
+Subject: [PATCH] mmc: fix all hangs related to mmc/sd card insert/removal
+ during suspend/resume
+
+commit 4c2ef25fe0b847d2ae818f74758ddb0be1c27d8e upstream.
+
+If you don't use CONFIG_MMC_UNSAFE_RESUME, as soon as you attempt to
+suspend, the card will be removed, therefore this patch doesn't change the
+behavior of this option.
+
+However the removal will be done by pm notifier, which runs while
+userspace is still not frozen and thus can freely use del_gendisk, without
+the risk of deadlock which would happen otherwise.
+
+Card detect workqueue is now disabled while userspace is frozen, Therefore
+if you do use CONFIG_MMC_UNSAFE_RESUME, and remove the card during
+suspend, the removal will be detected as soon as userspace is unfrozen,
+again at the moment it is safe to call del_gendisk.
+
+Tested with and without CONFIG_MMC_UNSAFE_RESUME with suspend and hibernate.
+
+[akpm@linux-foundation.org: clean up function prototype]
+[akpm@linux-foundation.org: fix CONFIG_PM-n linkage, small cleanups]
+[akpm@linux-foundation.org: coding-style fixes]
+Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
+Cc: David Brownell <david-b@pacbell.net>
+Cc: Alan Stern <stern@rowland.harvard.edu>
+Cc: <linux-mmc@vger.kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
+index 3168ebd..3e22f98 100644
+--- a/drivers/mmc/core/core.c
++++ b/drivers/mmc/core/core.c
+@@ -1057,6 +1057,17 @@ void mmc_rescan(struct work_struct *work)
+ container_of(work, struct mmc_host, detect.work);
+ u32 ocr;
+ int err;
++ unsigned long flags;
++
++ spin_lock_irqsave(&host->lock, flags);
++
++ if (host->rescan_disable) {
++ spin_unlock_irqrestore(&host->lock, flags);
++ return;
++ }
++
++ spin_unlock_irqrestore(&host->lock, flags);
++
+
+ mmc_bus_get(host);
+
+@@ -1267,19 +1278,6 @@ int mmc_suspend_host(struct mmc_host *host, pm_message_t state)
+ if (host->bus_ops && !host->bus_dead) {
+ if (host->bus_ops->suspend)
+ err = host->bus_ops->suspend(host);
+- if (err == -ENOSYS || !host->bus_ops->resume) {
+- /*
+- * We simply "remove" the card in this case.
+- * It will be redetected on resume.
+- */
+- if (host->bus_ops->remove)
+- host->bus_ops->remove(host);
+- mmc_claim_host(host);
+- mmc_detach_bus(host);
+- mmc_release_host(host);
+- host->pm_flags = 0;
+- err = 0;
+- }
+ }
+ mmc_bus_put(host);
+
+@@ -1311,28 +1309,61 @@ int mmc_resume_host(struct mmc_host *host)
+ printk(KERN_WARNING "%s: error %d during resume "
+ "(card was removed?)\n",
+ mmc_hostname(host), err);
+- if (host->bus_ops->remove)
+- host->bus_ops->remove(host);
+- mmc_claim_host(host);
+- mmc_detach_bus(host);
+- mmc_release_host(host);
+- /* no need to bother upper layers */
+ err = 0;
+ }
+ }
+ mmc_bus_put(host);
+
+- /*
+- * We add a slight delay here so that resume can progress
+- * in parallel.
+- */
+- mmc_detect_change(host, 1);
+-
+ return err;
+ }
+-
+ EXPORT_SYMBOL(mmc_resume_host);
+
++/* Do the card removal on suspend if card is assumed removeable
++ * Do that in pm notifier while userspace isn't yet frozen, so we will be able
++ to sync the card.
++*/
++int mmc_pm_notify(struct notifier_block *notify_block,
++ unsigned long mode, void *unused)
++{
++ struct mmc_host *host = container_of(
++ notify_block, struct mmc_host, pm_notify);
++ unsigned long flags;
++
++
++ switch (mode) {
++ case PM_HIBERNATION_PREPARE:
++ case PM_SUSPEND_PREPARE:
++
++ spin_lock_irqsave(&host->lock, flags);
++ host->rescan_disable = 1;
++ spin_unlock_irqrestore(&host->lock, flags);
++ cancel_delayed_work_sync(&host->detect);
++
++ if (!host->bus_ops || host->bus_ops->suspend)
++ break;
++
++ mmc_claim_host(host);
++
++ if (host->bus_ops->remove)
++ host->bus_ops->remove(host);
++
++ mmc_detach_bus(host);
++ mmc_release_host(host);
++ host->pm_flags = 0;
++ break;
++
++ case PM_POST_SUSPEND:
++ case PM_POST_HIBERNATION:
++
++ spin_lock_irqsave(&host->lock, flags);
++ host->rescan_disable = 0;
++ spin_unlock_irqrestore(&host->lock, flags);
++ mmc_detect_change(host, 0);
++
++ }
++
++ return 0;
++}
+ #endif
+
+ static int __init mmc_init(void)
+diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
+index 4735390..0efe631 100644
+--- a/drivers/mmc/core/host.c
++++ b/drivers/mmc/core/host.c
+@@ -17,6 +17,7 @@
+ #include <linux/pagemap.h>
+ #include <linux/leds.h>
+ #include <linux/slab.h>
++#include <linux/suspend.h>
+
+ #include <linux/mmc/host.h>
+
+@@ -85,6 +86,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
+ init_waitqueue_head(&host->wq);
+ INIT_DELAYED_WORK(&host->detect, mmc_rescan);
+ INIT_DELAYED_WORK_DEFERRABLE(&host->disable, mmc_host_deeper_disable);
++ host->pm_notify.notifier_call = mmc_pm_notify;
+
+ /*
+ * By default, hosts do not support SGIO or large requests.
+@@ -133,6 +135,7 @@ int mmc_add_host(struct mmc_host *host)
+ #endif
+
+ mmc_start_host(host);
++ register_pm_notifier(&host->pm_notify);
+
+ return 0;
+ }
+@@ -149,6 +152,7 @@ EXPORT_SYMBOL(mmc_add_host);
+ */
+ void mmc_remove_host(struct mmc_host *host)
+ {
++ unregister_pm_notifier(&host->pm_notify);
+ mmc_stop_host(host);
+
+ #ifdef CONFIG_DEBUG_FS
+diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
+index 43eaf5c..18d9eb3 100644
+--- a/include/linux/mmc/host.h
++++ b/include/linux/mmc/host.h
+@@ -121,6 +121,7 @@ struct mmc_host {
+ unsigned int f_min;
+ unsigned int f_max;
+ u32 ocr_avail;
++ struct notifier_block pm_notify;
+
+ #define MMC_VDD_165_195 0x00000080 /* VDD voltage 1.65 - 1.95 */
+ #define MMC_VDD_20_21 0x00000100 /* VDD voltage 2.0 ~ 2.1 */
+@@ -180,6 +181,7 @@ struct mmc_host {
+
+ /* Only used with MMC_CAP_DISABLE */
+ int enabled; /* host is enabled */
++ int rescan_disable; /* disable card detection */
+ int nesting_cnt; /* "enable" nesting count */
+ int en_dis_recurs; /* detect recursion */
+ unsigned int disable_delay; /* disable delay in msecs */
+@@ -254,6 +256,7 @@ int mmc_card_can_sleep(struct mmc_host *host);
+ int mmc_host_enable(struct mmc_host *host);
+ int mmc_host_disable(struct mmc_host *host);
+ int mmc_host_lazy_disable(struct mmc_host *host);
++int mmc_pm_notify(struct notifier_block *notify_block, unsigned long, void *);
+
+ static inline void mmc_set_disable_delay(struct mmc_host *host,
+ unsigned int disable_delay)
+--
+1.7.7
+
diff --git a/queue/mmc-sdhci-Check-mrq-NULL-in-sdhci_tasklet_finish.patch b/queue/mmc-sdhci-Check-mrq-NULL-in-sdhci_tasklet_finish.patch
new file mode 100644
index 0000000..0d14933
--- /dev/null
+++ b/queue/mmc-sdhci-Check-mrq-NULL-in-sdhci_tasklet_finish.patch
@@ -0,0 +1,38 @@
+From 1d48585baaf6bce48194d0a6176c4e57770067d1 Mon Sep 17 00:00:00 2001
+From: Chris Ball <cjb@laptop.org>
+Date: Wed, 27 Apr 2011 17:35:31 -0400
+Subject: [PATCH] mmc: sdhci: Check mrq != NULL in sdhci_tasklet_finish
+
+commit 0c9c99a765321104cc5f9c97f949382a9ba4927e upstream.
+
+It seems that under certain circumstances the sdhci_tasklet_finish()
+call can be entered with mrq set to NULL, causing the system to crash
+with a NULL pointer de-reference.
+
+Seen on S3C6410 system. Based on a patch by Dimitris Papastamos.
+
+Reported-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
+Signed-off-by: Chris Ball <cjb@laptop.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
+index 6441e22..be410d7 100644
+--- a/drivers/mmc/host/sdhci.c
++++ b/drivers/mmc/host/sdhci.c
+@@ -1268,6 +1268,13 @@ static void sdhci_tasklet_finish(unsigned long param)
+
+ host = (struct sdhci_host*)param;
+
++ /*
++ * If this tasklet gets rescheduled while running, it will
++ * be run again afterwards but without any active request.
++ */
++ if (!host->mrq)
++ return;
++
+ spin_lock_irqsave(&host->lock, flags);
+
+ del_timer(&host->timer);
+--
+1.7.7
+
diff --git a/queue/mmc-sdhci-Check-mrq-cmd-in-sdhci_tasklet_finish.patch b/queue/mmc-sdhci-Check-mrq-cmd-in-sdhci_tasklet_finish.patch
new file mode 100644
index 0000000..52cb1ae
--- /dev/null
+++ b/queue/mmc-sdhci-Check-mrq-cmd-in-sdhci_tasklet_finish.patch
@@ -0,0 +1,38 @@
+From ae609603f6e27d48050baff078d07a5254317ac1 Mon Sep 17 00:00:00 2001
+From: Ben Dooks <ben-linux@fluff.org>
+Date: Wed, 27 Apr 2011 14:24:19 +0100
+Subject: [PATCH] mmc: sdhci: Check mrq->cmd in sdhci_tasklet_finish
+
+commit b7b4d3426d2b5ecab21578eb20d8e456a1aace8f upstream.
+
+It seems that under certain circumstances that the sdhci_tasklet_finish()
+call can be entered with mrq->cmd set to NULL, causing the system to crash
+with a NULL pointer de-reference.
+
+Unable to handle kernel NULL pointer dereference at virtual address 00000000
+PC is at sdhci_tasklet_finish+0x34/0xe8
+LR is at sdhci_tasklet_finish+0x24/0xe8
+
+Seen on S3C6410 system.
+
+Signed-off-by: Ben Dooks <ben-linux@fluff.org>
+Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
+Signed-off-by: Chris Ball <cjb@laptop.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
+index 9d4fdfa..6441e22 100644
+--- a/drivers/mmc/host/sdhci.c
++++ b/drivers/mmc/host/sdhci.c
+@@ -1279,7 +1279,7 @@ static void sdhci_tasklet_finish(unsigned long param)
+ * upon error conditions.
+ */
+ if (!(host->flags & SDHCI_DEVICE_DEAD) &&
+- (mrq->cmd->error ||
++ ((mrq->cmd && mrq->cmd->error) ||
+ (mrq->data && (mrq->data->error ||
+ (mrq->data->stop && mrq->data->stop->error))) ||
+ (host->quirks & SDHCI_QUIRK_RESET_AFTER_REQUEST))) {
+--
+1.7.7
+
diff --git a/queue/mmc-sdhci-pci-Fix-error-case-in-sdhci_pci_probe_slot.patch b/queue/mmc-sdhci-pci-Fix-error-case-in-sdhci_pci_probe_slot.patch
new file mode 100644
index 0000000..5b4a9cd
--- /dev/null
+++ b/queue/mmc-sdhci-pci-Fix-error-case-in-sdhci_pci_probe_slot.patch
@@ -0,0 +1,34 @@
+From f4b7c21edbc0b350425c8d1a99c7d6c372e3b29c Mon Sep 17 00:00:00 2001
+From: Chris Ball <cjb@laptop.org>
+Date: Tue, 29 Mar 2011 00:46:12 -0400
+Subject: [PATCH] mmc: sdhci-pci: Fix error case in sdhci_pci_probe_slot()
+
+commit 9fdcdbb0d84922e7ccda2f717a04ea62629f7e18 upstream.
+
+If pci_ioremap_bar() fails during probe, we "goto release;" and free the
+host, but then we return 0 -- which tells sdhci_pci_probe() that the probe
+succeeded. Since we think the probe succeeded, when we unload sdhci we'll
+go to sdhci_pci_remove_slot() and it will try to dereference slot->host,
+which is now NULL because we freed it in the error path earlier.
+
+The patch simply sets ret appropriately, so that sdhci_pci_probe() will
+detect the failure immediately and bail out.
+
+Signed-off-by: Chris Ball <cjb@laptop.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
+index 6701af6..e907447 100644
+--- a/drivers/mmc/host/sdhci-pci.c
++++ b/drivers/mmc/host/sdhci-pci.c
+@@ -653,6 +653,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
+ host->ioaddr = pci_ioremap_bar(pdev, bar);
+ if (!host->ioaddr) {
+ dev_err(&pdev->dev, "failed to remap registers\n");
++ ret = -ENOMEM;
+ goto release;
+ }
+
+--
+1.7.7
+
diff --git a/queue/mpt2sas-fix-the-incorrect-scsi_dma_map-error-checkin.patch b/queue/mpt2sas-fix-the-incorrect-scsi_dma_map-error-checkin.patch
new file mode 100644
index 0000000..c130943
--- /dev/null
+++ b/queue/mpt2sas-fix-the-incorrect-scsi_dma_map-error-checkin.patch
@@ -0,0 +1,48 @@
+From 60d35f72578854c321cca1250e89d37710ff401f Mon Sep 17 00:00:00 2001
+From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Date: Tue, 9 Mar 2010 11:09:50 +0900
+Subject: [PATCH] mpt2sas: fix the incorrect scsi_dma_map error checking
+
+commit bb789d01620e5d36081b22edb6fb71cf55ff043c upstream.
+
+scsi_dma_map() returns -1 if an error occurred (zero means that the
+command has no data). So the following current code can't catch an
+error:
+
+sges_left = scsi_dma_map(scmd);
+if (!sges_left) {
+ sdev_printk(KERN_ERR, scmd->device, "pci_map_sg"
+ " failed: request for %d bytes!\n", scsi_bufflen(scmd));
+ return -ENOMEM;
+}
+
+Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Acked-by: "Desai, Kashyap" <Kashyap.Desai@lsi.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+index 87cf0d2..8d98f09 100644
+--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
++++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+@@ -988,7 +988,7 @@ _scsih_build_scatter_gather(struct MPT2SAS_ADAPTER *ioc,
+ u32 chain_offset;
+ u32 chain_length;
+ u32 chain_flags;
+- u32 sges_left;
++ int sges_left;
+ u32 sges_in_segment;
+ u32 sgl_flags;
+ u32 sgl_flags_last_element;
+@@ -1009,7 +1009,7 @@ _scsih_build_scatter_gather(struct MPT2SAS_ADAPTER *ioc,
+
+ sg_scmd = scsi_sglist(scmd);
+ sges_left = scsi_dma_map(scmd);
+- if (!sges_left) {
++ if (sges_left < 0) {
+ sdev_printk(KERN_ERR, scmd->device, "pci_map_sg"
+ " failed: request for %d bytes!\n", scsi_bufflen(scmd));
+ return -ENOMEM;
+--
+1.7.7
+
diff --git a/queue/nfs-don-t-lose-MS_SYNCHRONOUS-on-remount-of-noac-mou.patch b/queue/nfs-don-t-lose-MS_SYNCHRONOUS-on-remount-of-noac-mou.patch
new file mode 100644
index 0000000..053f03f
--- /dev/null
+++ b/queue/nfs-don-t-lose-MS_SYNCHRONOUS-on-remount-of-noac-mou.patch
@@ -0,0 +1,43 @@
+From 5f6dbc1c4a33622faebdda9e9f320046c476b8e2 Mon Sep 17 00:00:00 2001
+From: Jeff Layton <jlayton@redhat.com>
+Date: Wed, 27 Apr 2011 11:49:09 -0400
+Subject: [PATCH] nfs: don't lose MS_SYNCHRONOUS on remount of noac mount
+
+commit 26c4c170731f00008f4317a2888a0a07ac99d90d upstream.
+
+On a remount, the VFS layer will clear the MS_SYNCHRONOUS bit on the
+assumption that the flags on the mount syscall will have it set if the
+remounted fs is supposed to keep it.
+
+In the case of "noac" though, MS_SYNCHRONOUS is implied. A remount of
+such a mount will lose the MS_SYNCHRONOUS flag since "sync" isn't part
+of the mount options.
+
+Reported-by: Max Matveev <makc@redhat.com>
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/nfs/super.c b/fs/nfs/super.c
+index ae570b0..85958a1 100644
+--- a/fs/nfs/super.c
++++ b/fs/nfs/super.c
+@@ -1989,6 +1989,15 @@ nfs_remount(struct super_block *sb, int *flags, char *raw_data)
+ if (error < 0)
+ goto out;
+
++ /*
++ * noac is a special case. It implies -o sync, but that's not
++ * necessarily reflected in the mtab options. do_remount_sb
++ * will clear MS_SYNCHRONOUS if -o sync wasn't specified in the
++ * remount options, so we have to explicitly reset it.
++ */
++ if (data->flags & NFS_MOUNT_NOAC)
++ *flags |= MS_SYNCHRONOUS;
++
+ /* compare new mount options with old ones */
+ error = nfs_compare_remount_data(nfss, data);
+ out:
+--
+1.7.7
+
diff --git a/queue/nfs-fix-compilation-warning.patch b/queue/nfs-fix-compilation-warning.patch
new file mode 100644
index 0000000..629d9cc
--- /dev/null
+++ b/queue/nfs-fix-compilation-warning.patch
@@ -0,0 +1,30 @@
+From 32b491c0102feeebcf55fc4022d78060d4aa7041 Mon Sep 17 00:00:00 2001
+From: Jovi Zhang <bookjovi@gmail.com>
+Date: Wed, 2 Mar 2011 23:19:37 +0000
+Subject: [PATCH] nfs: fix compilation warning
+
+commit 43b7c3f051dea504afccc39bcb56d8e26c2e0b77 upstream.
+
+this commit fix compilation warning as following:
+linux-2.6/fs/nfs/nfs4proc.c:3265: warning: comparison of distinct pointer types lacks a cast
+
+Signed-off-by: Jovi Zhang <bookjovi@gmail.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
+index 5b33856..8dd3309 100644
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -3251,7 +3251,7 @@ static int buf_to_pages_noslab(const void *buf, size_t buflen,
+ spages = pages;
+
+ do {
+- len = min(PAGE_CACHE_SIZE, buflen);
++ len = min_t(size_t, PAGE_CACHE_SIZE, buflen);
+ newpage = alloc_page(GFP_KERNEL);
+
+ if (newpage == NULL)
+--
+1.7.7
+
diff --git a/queue/p54-Initialize-extra_len-in-p54_tx_80211.patch b/queue/p54-Initialize-extra_len-in-p54_tx_80211.patch
new file mode 100644
index 0000000..41b7113
--- /dev/null
+++ b/queue/p54-Initialize-extra_len-in-p54_tx_80211.patch
@@ -0,0 +1,42 @@
+From 2c2ce60117990b1fcb7d77f35d9c3d822d972994 Mon Sep 17 00:00:00 2001
+From: Jason Conti <jason.conti@gmail.com>
+Date: Thu, 7 Apr 2011 21:09:57 +0200
+Subject: [PATCH] p54: Initialize extra_len in p54_tx_80211
+
+commit a6756da9eace8b4af73e9dea43f1fc2889224c94 upstream.
+
+This patch fixes a very serious off-by-one bug in
+the driver, which could leave the device in an
+unresponsive state.
+
+The problem was that the extra_len variable [used to
+reserve extra scratch buffer space for the firmware]
+was left uninitialized. Because p54_assign_address
+later needs the value to reserve additional space,
+the resulting frame could be to big for the small
+device's memory window and everything would
+immediately come to a grinding halt.
+
+Reference: https://bugs.launchpad.net/bugs/722185
+
+Acked-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: Jason Conti <jason.conti@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c
+index db89d65..8db2132 100644
+--- a/drivers/net/wireless/p54/txrx.c
++++ b/drivers/net/wireless/p54/txrx.c
+@@ -703,7 +703,7 @@ int p54_tx_80211(struct ieee80211_hw *dev, struct sk_buff *skb)
+ struct p54_tx_info *p54info;
+ struct p54_hdr *hdr;
+ struct p54_tx_data *txhdr;
+- unsigned int padding, len, extra_len;
++ unsigned int padding, len, extra_len = 0;
+ int i, j, ridx;
+ u16 hdr_flags = 0, aid = 0;
+ u8 rate, queue = 0, crypt_offset = 0;
+--
+1.7.7
+
diff --git a/queue/perf-symbols-allow-forcing-use-of-cplus_demangle.patch b/queue/perf-symbols-allow-forcing-use-of-cplus_demangle.patch
new file mode 100644
index 0000000..e6aabe7
--- /dev/null
+++ b/queue/perf-symbols-allow-forcing-use-of-cplus_demangle.patch
@@ -0,0 +1,37 @@
+From e0a06eb2629cd91d9b6b28d40dede5394cce497b Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle@mcmartin.ca>
+Date: Mon, 10 May 2010 16:43:35 -0400
+Subject: [PATCH] perf symbols: allow forcing use of cplus_demangle
+
+commit d11c7addfe0fa501cb54c824c0fac3481d527433 upstream.
+
+For Fedora, I want to force perf to link against libiberty.a for
+cplus_demangle, rather than libbfd.a for bfd_demangle due to licensing insanity
+on binutils. (libiberty is LGPL2, libbfd is GPL3.)
+
+If we just rely on autodetection, we'll end up with libbfd linked against us,
+since they're both in binutils-static in the buildroot.
+
+Cc: Ingo Molnar <mingo@elte.hu>
+LKML-Reference: <20100510204335.GA7565@bombadil.infradead.org>
+Signed-off-by: Kyle McMartin <kyle@redhat.com>
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/tools/perf/Makefile b/tools/perf/Makefile
+index bc0f670..429bace 100644
+--- a/tools/perf/Makefile
++++ b/tools/perf/Makefile
+@@ -541,6 +541,9 @@ endif
+
+ ifdef NO_DEMANGLE
+ BASIC_CFLAGS += -DNO_DEMANGLE
++else ifdef HAVE_CPLUS_DEMANGLE
++ EXTLIBS += -liberty
++ BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
+ else
+ has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd "$(QUIET_STDERR)" && echo y")
+
+--
+1.7.7
+
diff --git a/queue/pmcraid-reject-negative-request-size.patch b/queue/pmcraid-reject-negative-request-size.patch
new file mode 100644
index 0000000..91c9830
--- /dev/null
+++ b/queue/pmcraid-reject-negative-request-size.patch
@@ -0,0 +1,52 @@
+From 850a2cc6eda2e966234e39a250485dd452ccd294 Mon Sep 17 00:00:00 2001
+From: Dan Rosenberg <drosenberg@vsecurity.com>
+Date: Tue, 5 Apr 2011 13:27:31 -0400
+Subject: [PATCH] pmcraid: reject negative request size
+
+commit 5f6279da3760ce48f478f2856aacebe0c59a39f3 upstream.
+
+There's a code path in pmcraid that can be reached via device ioctl that
+causes all sorts of ugliness, including heap corruption or triggering
+the OOM killer due to consecutive allocation of large numbers of pages.
+Not especially relevant from a security perspective, since users must
+have CAP_SYS_ADMIN to open the character device.
+
+First, the user can call pmcraid_chr_ioctl() with a type
+PMCRAID_PASSTHROUGH_IOCTL. A pmcraid_passthrough_ioctl_buffer
+is copied in, and the request_size variable is set to
+buffer->ioarcb.data_transfer_length, which is an arbitrary 32-bit signed
+value provided by the user.
+
+If a negative value is provided here, bad things can happen. For
+example, pmcraid_build_passthrough_ioadls() is called with this
+request_size, which immediately calls pmcraid_alloc_sglist() with a
+negative size. The resulting math on allocating a scatter list can
+result in an overflow in the kzalloc() call (if num_elem is 0, the
+sglist will be smaller than expected), or if num_elem is unexpectedly
+large the subsequent loop will call alloc_pages() repeatedly, a high
+number of pages will be allocated and the OOM killer might be invoked.
+
+Prevent this value from being negative in pmcraid_ioctl_passthrough().
+
+Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com>
+Cc: Anil Ravindranath <anil_ravindranath@pmc-sierra.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
+index 53aefff..bdb7259 100644
+--- a/drivers/scsi/pmcraid.c
++++ b/drivers/scsi/pmcraid.c
+@@ -3528,6 +3528,9 @@ static long pmcraid_ioctl_passthrough(
+ rc = -EFAULT;
+ goto out_free_buffer;
+ }
++ } else if (request_size < 0) {
++ rc = -EINVAL;
++ goto out_free_buffer;
+ }
+
+ /* check if we have any additional command parameters */
+--
+1.7.7
+
diff --git a/queue/powerpc-boot-dts-Install-dts-from-the-right-director.patch b/queue/powerpc-boot-dts-Install-dts-from-the-right-director.patch
new file mode 100644
index 0000000..bf40b36
--- /dev/null
+++ b/queue/powerpc-boot-dts-Install-dts-from-the-right-director.patch
@@ -0,0 +1,34 @@
+From b32a8ea9de7b59709d73ca4720eb38855814c5cc Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 8 Jan 2011 14:24:01 +0000
+Subject: [PATCH] powerpc/boot/dts: Install dts from the right directory
+
+commit 4d9ef89dee13e964ea8b064d82ff55cf36209237 upstream.
+
+The dts-installed variable is initialised using a wildcard path that
+will be expanded relative to the build directory. Use the existing
+variable dtstree to generate an absolute wildcard path that will work
+when building in a separate directory.
+
+Reported-by: Gerhard Pircher <gerhard_pircher@gmx.net>
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Tested-by: Gerhard Pircher <gerhard_pircher@gmx.net> [against 2.6.32]
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
+index bb2465b..22b527b 100644
+--- a/arch/powerpc/boot/Makefile
++++ b/arch/powerpc/boot/Makefile
+@@ -367,7 +367,7 @@ INSTALL := install
+ extra-installed := $(patsubst $(obj)/%, $(DESTDIR)$(WRAPPER_OBJDIR)/%, $(extra-y))
+ hostprogs-installed := $(patsubst %, $(DESTDIR)$(WRAPPER_BINDIR)/%, $(hostprogs-y))
+ wrapper-installed := $(DESTDIR)$(WRAPPER_BINDIR)/wrapper
+-dts-installed := $(patsubst $(obj)/dts/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(obj)/dts/*.dts))
++dts-installed := $(patsubst $(dtstree)/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(dtstree)/*.dts))
+
+ all-installed := $(extra-installed) $(hostprogs-installed) $(wrapper-installed) $(dts-installed)
+
+--
+1.7.7
+
diff --git a/queue/put-stricter-guards-on-queue-dead-checks.patch b/queue/put-stricter-guards-on-queue-dead-checks.patch
new file mode 100644
index 0000000..1a73d2c
--- /dev/null
+++ b/queue/put-stricter-guards-on-queue-dead-checks.patch
@@ -0,0 +1,60 @@
+From 3cd23d4e0fd15142697c69074060df76734d861d Mon Sep 17 00:00:00 2001
+From: James Bottomley <James.Bottomley@suse.de>
+Date: Fri, 22 Apr 2011 10:39:59 -0500
+Subject: [PATCH] put stricter guards on queue dead checks
+
+commit 86cbfb5607d4b81b1a993ff689bbd2addd5d3a9b upstream.
+
+SCSI uses request_queue->queuedata == NULL as a signal that the queue
+is dying. We set this state in the sdev release function. However,
+this allows a small window where we release the last reference but
+haven't quite got to this stage yet and so something will try to take
+a reference in scsi_request_fn and oops. It's very rare, but we had a
+report here, so we're pushing this as a bug fix
+
+The actual fix is to set request_queue->queuedata to NULL in
+scsi_remove_device() before we drop the reference. This causes
+correct automatic rejects from scsi_request_fn as people who hold
+additional references try to submit work and prevents anything from
+getting a new reference to the sdev that way.
+
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
+index 02be251..ed3b52f 100644
+--- a/drivers/scsi/scsi_sysfs.c
++++ b/drivers/scsi/scsi_sysfs.c
+@@ -319,14 +319,8 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
+ kfree(evt);
+ }
+
+- if (sdev->request_queue) {
+- sdev->request_queue->queuedata = NULL;
+- /* user context needed to free queue */
+- scsi_free_queue(sdev->request_queue);
+- /* temporary expedient, try to catch use of queue lock
+- * after free of sdev */
+- sdev->request_queue = NULL;
+- }
++ /* NULL queue means the device can't be used */
++ sdev->request_queue = NULL;
+
+ scsi_target_reap(scsi_target(sdev));
+
+@@ -964,6 +958,12 @@ void __scsi_remove_device(struct scsi_device *sdev)
+ if (sdev->host->hostt->slave_destroy)
+ sdev->host->hostt->slave_destroy(sdev);
+ transport_destroy_device(dev);
++
++ /* cause the request function to reject all I/O requests */
++ sdev->request_queue->queuedata = NULL;
++
++ /* Freeing the queue signals to block that we're done */
++ scsi_free_queue(sdev->request_queue);
+ put_device(dev);
+ }
+
+--
+1.7.7
+
diff --git a/queue/rt2500usb-fallback-to-SW-encryption-for-TKIP-AES.patch b/queue/rt2500usb-fallback-to-SW-encryption-for-TKIP-AES.patch
new file mode 100644
index 0000000..28061ec
--- /dev/null
+++ b/queue/rt2500usb-fallback-to-SW-encryption-for-TKIP-AES.patch
@@ -0,0 +1,59 @@
+From c9b6ff02aa1d641ff607363a222b656787695d6c Mon Sep 17 00:00:00 2001
+From: Ondrej Zary <linux@rainbow-software.org>
+Date: Wed, 23 Jun 2010 12:57:15 +0200
+Subject: [PATCH] rt2500usb: fallback to SW encryption for TKIP+AES
+
+commit 75f64dd54a185150ebfc45e99351c890d4a2252f upstream.
+
+HW crypto in rt2500usb does not seem to support keys with different ciphers,
+which breaks TKIP+AES mode. Fall back to software encryption to fix it.
+
+This should fix long-standing problems with rt2500usb and WPA, such as:
+http://rt2x00.serialmonkey.com/phpBB/viewtopic.php?f=4&t=4834
+https://bugzilla.redhat.com/show_bug.cgi?id=484888
+
+Also tested that it does not break WEP, TKIP-only and AES-only modes.
+
+Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
+Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
+index 8ebb705..2961228 100644
+--- a/drivers/net/wireless/rt2x00/rt2500usb.c
++++ b/drivers/net/wireless/rt2x00/rt2500usb.c
+@@ -348,6 +348,7 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev,
+ int timeout;
+ u32 mask;
+ u16 reg;
++ enum cipher curr_cipher;
+
+ if (crypto->cmd == SET_KEY) {
+ /*
+@@ -358,6 +359,7 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev,
+ mask = TXRX_CSR0_KEY_ID.bit_mask;
+
+ rt2500usb_register_read(rt2x00dev, TXRX_CSR0, &reg);
++ curr_cipher = rt2x00_get_field16(reg, TXRX_CSR0_ALGORITHM);
+ reg &= mask;
+
+ if (reg && reg == mask)
+@@ -366,6 +368,14 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev,
+ reg = rt2x00_get_field16(reg, TXRX_CSR0_KEY_ID);
+
+ key->hw_key_idx += reg ? ffz(reg) : 0;
++ /*
++ * Hardware requires that all keys use the same cipher
++ * (e.g. TKIP-only, AES-only, but not TKIP+AES).
++ * If this is not the first key, compare the cipher with the
++ * first one and fall back to SW crypto if not the same.
++ */
++ if (key->hw_key_idx > 0 && crypto->cipher != curr_cipher)
++ return -EOPNOTSUPP;
+
+ /*
+ * The encryption key doesn't fit within the CSR cache,
+--
+1.7.7
+
diff --git a/queue/scsi_dh_emc-request-flag-cleanup.patch b/queue/scsi_dh_emc-request-flag-cleanup.patch
new file mode 100644
index 0000000..4491a38
--- /dev/null
+++ b/queue/scsi_dh_emc-request-flag-cleanup.patch
@@ -0,0 +1,36 @@
+From fd3d47386e9dc6e5207c1cfe9a4d8b9a7381958a Mon Sep 17 00:00:00 2001
+From: Mike Christie <michaelc@cs.wisc.edu>
+Date: Fri, 9 Apr 2010 22:07:37 -0500
+Subject: [PATCH] scsi_dh_emc: request flag cleanup
+
+commit 5738d4449c1baf05e8345684d12371f76296473d upstream.
+
+blk_get_request sets the cmd_flags, so we should not and do not
+need to set them. If we did set them to a different value then
+it can cause a oops in the elevator code.
+
+Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
+index e8a0bc3..6faf472 100644
+--- a/drivers/scsi/device_handler/scsi_dh_emc.c
++++ b/drivers/scsi/device_handler/scsi_dh_emc.c
+@@ -285,13 +285,11 @@ static struct request *get_req(struct scsi_device *sdev, int cmd,
+ switch (cmd) {
+ case MODE_SELECT:
+ len = sizeof(short_trespass);
+- rq->cmd_flags |= REQ_RW;
+ rq->cmd[1] = 0x10;
+ rq->cmd[4] = len;
+ break;
+ case MODE_SELECT_10:
+ len = sizeof(long_trespass);
+- rq->cmd_flags |= REQ_RW;
+ rq->cmd[1] = 0x10;
+ rq->cmd[8] = len;
+ break;
+--
+1.7.7
+
diff --git a/queue/serial-imx-read-cts-state-only-after-acking-cts-chan.patch b/queue/serial-imx-read-cts-state-only-after-acking-cts-chan.patch
new file mode 100644
index 0000000..62564c8
--- /dev/null
+++ b/queue/serial-imx-read-cts-state-only-after-acking-cts-chan.patch
@@ -0,0 +1,48 @@
+From df7dc8aaa5188f63b1c3e3a0368226c5330a7772 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
+Date: Mon, 11 Apr 2011 10:59:09 +0200
+Subject: [PATCH] serial/imx: read cts state only after acking cts change irq
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+commit 5680e94148a86e8c31fdc5cb0ea0d5c6810c05b0 upstream.
+
+If cts changes between reading the level at the cts input (USR1_RTSS)
+and acking the irq (USR1_RTSD) the last edge doesn't generate an irq and
+uart_handle_cts_change is called with a outdated value for cts.
+
+The race was introduced by commit
+
+ ceca629 ([ARM] 2971/1: i.MX uart handle rts irq)
+
+[PG: file in drivers/serial not drivers/tty/serial in .34]
+
+Reported-by: Arwed Springer <Arwed.Springer@de.trumpf.com>
+Tested-by: Arwed Springer <Arwed.Springer@de.trumpf.com>
+Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c
+index eacb588..6d2028e 100644
+--- a/drivers/serial/imx.c
++++ b/drivers/serial/imx.c
+@@ -383,12 +383,13 @@ static void imx_start_tx(struct uart_port *port)
+ static irqreturn_t imx_rtsint(int irq, void *dev_id)
+ {
+ struct imx_port *sport = dev_id;
+- unsigned int val = readl(sport->port.membase + USR1) & USR1_RTSS;
++ unsigned int val;
+ unsigned long flags;
+
+ spin_lock_irqsave(&sport->port.lock, flags);
+
+ writel(USR1_RTSD, sport->port.membase + USR1);
++ val = readl(sport->port.membase + USR1) & USR1_RTSS;
+ uart_handle_cts_change(&sport->port, !!val);
+ wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
+
+--
+1.7.7
+
diff --git a/queue/series b/queue/series
index 4c3069b..ef1caab 100644
--- a/queue/series
+++ b/queue/series
@@ -91,6 +91,91 @@ proc-do-proper-range-check-on-readdir-offset.patch
can-Add-missing-socket-check-in-can-bcm-release.patch
can-add-missing-socket-check-in-can-raw-release.patch
nfs4-Ensure-that-ACL-pages-sent-over-NFS-were-not-al.patch
+ath-add-missing-regdomain-pair-0x5c-mapping.patch
+block-blk-sysfs-Fix-an-err-return-path-in-blk_regist.patch
+p54-Initialize-extra_len-in-p54_tx_80211.patch
+intel-iommu-Unlink-domain-from-iommu.patch
+intel-iommu-Fix-get_domain_for_dev-error-path.patch
+drm-radeon-kms-fix-bad-shift-in-atom-iio-table-parse.patch
+NFS-nfs_wcc_update_inode-should-set-nfsi-attr_gencou.patch
+serial-imx-read-cts-state-only-after-acking-cts-chan.patch
+ASoC-Fix-output-PGA-enabling-in-wm_hubs-CODECs.patch
+kconfig-Avoid-buffer-underrun-in-choice-input.patch
+UBIFS-fix-master-node-recovery.patch
+Remove-extra-struct-page-member-from-the-buffer-info.patch
+dasd-correct-device-table.patch
+iwlagn-Support-new-5000-microcode.patch
+slub-fix-panic-with-DISCONTIGMEM.patch
+set-memory-ranges-in-N_NORMAL_MEMORY-when-onlined.patch
+FLEXCOP-PCI-fix-__xlate_proc_name-warning-for-flexco.patch
+m68k-mm-Set-all-online-nodes-in-N_NORMAL_MEMORY.patch
+nfs-don-t-lose-MS_SYNCHRONOUS-on-remount-of-noac-mou.patch
+NFSv4.1-Ensure-state-manager-thread-dies-on-last-umo.patch
+pmcraid-reject-negative-request-size.patch
+put-stricter-guards-on-queue-dead-checks.patch
+mmc-sdhci-pci-Fix-error-case-in-sdhci_pci_probe_slot.patch
+mmc-sdhci-Check-mrq-cmd-in-sdhci_tasklet_finish.patch
+mmc-sdhci-Check-mrq-NULL-in-sdhci_tasklet_finish.patch
+x86-AMD-Fix-APIC-timer-erratum-400-affecting-K8-Rev..patch
+af_unix-Only-allow-recv-on-connected-seqpacket-socke.patch
+ARM-6891-1-prevent-heap-corruption-in-OABI-semtimedo.patch
+i8k-Tell-gcc-that-regs-gets-clobbered.patch
+Fix-gcc-4.5.1-miscompiling-drivers-char-i8k.c-again.patch
+Open-with-O_CREAT-flag-set-fails-to-open-existing-fi.patch
+Input-elantech-relax-signature-checks.patch
+Input-elantech-discard-the-first-2-positions-on-some.patch
+Staging-rtl8192su-check-for-skb-NULL.patch
+Staging-rtl8192su-Clean-up-in-case-of-an-error-in-mo.patch
+Staging-rtl8192su-Fix-procfs-code-for-interfaces-not.patch
+Staging-rtl8192su-remove-device-ids.patch
+Staging-rtl8192su-add-device-ids.patch
+USB-teach-devices-file-about-Wireless-and-SuperSpeed.patch
+GFS2-Fix-writing-to-non-page-aligned-gfs2_quota-stru.patch
+GFS2-BUG-in-gfs2_adjust_quota.patch
+SUNRPC-fix-NFS-client-over-TCP-hangs-due-to-packet-l.patch
+nfs-fix-compilation-warning.patch
+Fix-corrupted-OSF-partition-table-parsing.patch
+Increase-OSF-partition-limit-from-8-to-18.patch
+hwmon-applesmc-Add-support-for-MacBook-Pro-5-3-and-5.patch
+hwmon-applesmc-Add-generic-support-for-MacBook-Pro-6.patch
+hwmon-applesmc-Add-generic-support-for-MacBook-Pro-7.patch
+hwmon-applesmc-Add-MacBookAir3-1-3-2-support.patch
+ALSA-emux-Add-trivial-compat-ioctl-handler.patch
+ALSA-powermac-Reverse-HP-detection-on-G4-DA.patch
+ALSA-powermac-Lineout-detection-on-G4-DA.patch
+ALSA-hda-MacBookPro-5-3-line-in-support.patch
+ALSA-hda-Add-model-mbp55-entry-for-MacBookPro-7-1.patch
+ALSA-hda-MacBookAir3-1-3-2-alsa-support.patch
+virtio_net-Add-schedule-check-to-napi_enable-call.patch
+Bluetooth-Add-support-Bluetooth-controller-of-Macboo.patch
+Bluetooth-Add-support-Bluetooth-controller-of-Macboo-2.patch
+Bluetooth-Add-MacBookAir3-1-2-support.patch
+perf-symbols-allow-forcing-use-of-cplus_demangle.patch
+V4L-DVB-Add-Elgato-EyeTV-Diversity-to-dibcom-driver.patch
+mmc-fix-all-hangs-related-to-mmc-sd-card-insert-remo.patch
+mmc-build-fix-mmc_pm_notify-is-only-available-with-C.patch
+b43-Fix-warning-at-drivers-mmc-core-core.c-237-in-mm.patch
+dell-laptop-Add-another-Dell-laptop-family-to-the-DM.patch
+scsi_dh_emc-request-flag-cleanup.patch
+cifs-fix-another-memleak-in-cifs_root_iget.patch
+e1000e-Reset-82577-82578-PHY-before-first-PHY-regist.patch
+e1000-fix-Tx-hangs-by-disabling-64-bit-DMA.patch
+btrfs-Require-CAP_SYS_ADMIN-for-filesystem-rebalance.patch
+init-sched-Fix-race-between-init-and-kthreadd.patch
+backlight-MacBookAir3-1-3-2-mbp-nvidia-bl-support.patch
+bonding-Ensure-that-we-unshare-skbs-prior-to-calling.patch
+HID-add-MacBookAir-3-1-and-3-2-support.patch
+intel-iommu-Force-disable-IOMMU-for-iGFX-on-broken-C.patch
+ipv6-Silence-privacy-extensions-initialization.patch
+mpt2sas-fix-the-incorrect-scsi_dma_map-error-checkin.patch
+powerpc-boot-dts-Install-dts-from-the-right-director.patch
+rt2500usb-fallback-to-SW-encryption-for-TKIP-AES.patch
+tehuti-Firmware-filename-is-tehuti-bdx.bin.patch
+wireless-b43-fix-error-path-in-SDIO.patch
+libata-set-queue-DMA-alignment-to-sector-size-for-AT.patch
+iwlwifi-fix-skb-usage-after-free.patch
+x86-pvclock-Move-scale_delta-into-common-header.patch
+fix-oops-in-scsi_run_queue.patch
# Content taken from v2.6.32.41
dccp-handle-invalid-feature-options-length.patch
diff --git a/queue/set-memory-ranges-in-N_NORMAL_MEMORY-when-onlined.patch b/queue/set-memory-ranges-in-N_NORMAL_MEMORY-when-onlined.patch
new file mode 100644
index 0000000..3d41690
--- /dev/null
+++ b/queue/set-memory-ranges-in-N_NORMAL_MEMORY-when-onlined.patch
@@ -0,0 +1,59 @@
+From abff89847954ef1217dc91b0f8e4f8d5cdb81352 Mon Sep 17 00:00:00 2001
+From: David Rientjes <rientjes@google.com>
+Date: Wed, 20 Apr 2011 19:27:13 -0700
+Subject: [PATCH] set memory ranges in N_NORMAL_MEMORY when onlined
+
+commit d9b41e0b54fd7e164daf1e9c539c1070398aa02e upstream.
+
+When a DISCONTIGMEM memory range is brought online as a NUMA node, it
+also needs to have its bet set in N_NORMAL_MEMORY. This is necessary for
+generic kernel code that utilizes N_NORMAL_MEMORY as a subset of N_ONLINE
+for memory savings.
+
+These types of hacks can hopefully be removed once DISCONTIGMEM is either
+removed or abstracted away from CONFIG_NUMA.
+
+Fixes a panic in the slub code which only initializes structures for
+N_NORMAL_MEMORY to save memory:
+
+ Backtrace:
+ [<000000004021c938>] add_partial+0x28/0x98
+ [<000000004021faa0>] __slab_free+0x1d0/0x1d8
+ [<000000004021fd04>] kmem_cache_free+0xc4/0x128
+ [<000000004033bf9c>] ida_get_new_above+0x21c/0x2c0
+ [<00000000402a8980>] sysfs_new_dirent+0xd0/0x238
+ [<00000000402a974c>] create_dir+0x5c/0x168
+ [<00000000402a9ab0>] sysfs_create_dir+0x98/0x128
+ [<000000004033d6c4>] kobject_add_internal+0x114/0x258
+ [<000000004033d9ac>] kobject_add_varg+0x7c/0xa0
+ [<000000004033df20>] kobject_add+0x50/0x90
+ [<000000004033dfb4>] kobject_create_and_add+0x54/0xc8
+ [<00000000407862a0>] cgroup_init+0x138/0x1f0
+ [<000000004077ce50>] start_kernel+0x5a0/0x840
+ [<000000004011fa3c>] start_parisc+0xa4/0xb8
+ [<00000000404bb034>] packet_ioctl+0x16c/0x208
+ [<000000004049ac30>] ip_mroute_setsockopt+0x260/0xf20
+
+Signed-off-by: David Rientjes <rientjes@google.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
+index f4f4d70..7fd8aad 100644
+--- a/arch/parisc/mm/init.c
++++ b/arch/parisc/mm/init.c
+@@ -266,8 +266,10 @@ static void __init setup_bootmem(void)
+ }
+ memset(pfnnid_map, 0xff, sizeof(pfnnid_map));
+
+- for (i = 0; i < npmem_ranges; i++)
++ for (i = 0; i < npmem_ranges; i++) {
++ node_set_state(i, N_NORMAL_MEMORY);
+ node_set_online(i);
++ }
+ #endif
+
+ /*
+--
+1.7.7
+
diff --git a/queue/slub-fix-panic-with-DISCONTIGMEM.patch b/queue/slub-fix-panic-with-DISCONTIGMEM.patch
new file mode 100644
index 0000000..c27668c
--- /dev/null
+++ b/queue/slub-fix-panic-with-DISCONTIGMEM.patch
@@ -0,0 +1,37 @@
+From bd2b373130b34445f797f4cd39cd302a9f00c2a3 Mon Sep 17 00:00:00 2001
+From: James Bottomley <James.Bottomley@HansenPartnership.com>
+Date: Tue, 19 Apr 2011 16:29:36 -0500
+Subject: [PATCH] slub: fix panic with DISCONTIGMEM
+
+commit 4a5fa3590f09999f6db41bc386bce40848fa9f63 upstream.
+
+Slub makes assumptions about page_to_nid() which are violated by
+DISCONTIGMEM and !NUMA. This violation results in a panic because
+page_to_nid() can be non-zero for pages in the discontiguous ranges and
+this leads to a null return by get_node(). The assertion by the
+maintainer is that DISCONTIGMEM should only be allowed when NUMA is also
+defined. However, at least six architectures: alpha, ia64, m32r, m68k,
+mips, parisc violate this. The panic is a regression against slab, so
+just mark slub broken in the problem configuration to prevent users
+reporting these panics.
+
+Acked-by: David Rientjes <rientjes@google.com>
+Acked-by: Pekka Enberg <penberg@kernel.org>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/init/Kconfig b/init/Kconfig
+index 5fe94b8..04e486cf 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -1052,6 +1052,7 @@ config SLAB
+ per cpu and per node queues.
+
+ config SLUB
++ depends on BROKEN || NUMA || !DISCONTIGMEM
+ bool "SLUB (Unqueued Allocator)"
+ help
+ SLUB is a slab allocator that minimizes cache line usage
+--
+1.7.7
+
diff --git a/queue/tehuti-Firmware-filename-is-tehuti-bdx.bin.patch b/queue/tehuti-Firmware-filename-is-tehuti-bdx.bin.patch
new file mode 100644
index 0000000..1af7c5a
--- /dev/null
+++ b/queue/tehuti-Firmware-filename-is-tehuti-bdx.bin.patch
@@ -0,0 +1,38 @@
+From f83d4d2d8cfd6b43fd0488b76a0fff13c599eb31 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Fri, 17 Dec 2010 10:16:23 -0800
+Subject: [PATCH] tehuti: Firmware filename is tehuti/bdx.bin
+
+commit 46814e08d80f87449b5adb3d549a3cae6f9f8148 upstream.
+
+My conversion of tehuti to use request_firmware() was confused about
+the filename of the firmware blob. Change the driver to match the
+blob.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c
+index f549309..cf4529c 100644
+--- a/drivers/net/tehuti.c
++++ b/drivers/net/tehuti.c
+@@ -324,7 +324,7 @@ static int bdx_fw_load(struct bdx_priv *priv)
+ ENTER;
+ master = READ_REG(priv, regINIT_SEMAPHORE);
+ if (!READ_REG(priv, regINIT_STATUS) && master) {
+- rc = request_firmware(&fw, "tehuti/firmware.bin", &priv->pdev->dev);
++ rc = request_firmware(&fw, "tehuti/bdx.bin", &priv->pdev->dev);
+ if (rc)
+ goto out;
+ bdx_tx_push_desc_safe(priv, (char *)fw->data, fw->size);
+@@ -2518,4 +2518,4 @@ module_exit(bdx_module_exit);
+ MODULE_LICENSE("GPL");
+ MODULE_AUTHOR(DRIVER_AUTHOR);
+ MODULE_DESCRIPTION(BDX_DRV_DESC);
+-MODULE_FIRMWARE("tehuti/firmware.bin");
++MODULE_FIRMWARE("tehuti/bdx.bin");
+--
+1.7.7
+
diff --git a/queue/virtio_net-Add-schedule-check-to-napi_enable-call.patch b/queue/virtio_net-Add-schedule-check-to-napi_enable-call.patch
new file mode 100644
index 0000000..f4fed25
--- /dev/null
+++ b/queue/virtio_net-Add-schedule-check-to-napi_enable-call.patch
@@ -0,0 +1,77 @@
+From e9ced70620a211573fabfb35df15c75dfb7b5951 Mon Sep 17 00:00:00 2001
+From: Bruce Rogers <brogers@novell.com>
+Date: Thu, 10 Feb 2011 11:03:31 -0800
+Subject: [PATCH] virtio_net: Add schedule check to napi_enable call
+
+commit 3e9d08ec0a68f6faf718d5a7e050fe5ca0ba004f upstream.
+
+Under harsh testing conditions, including low memory, the guest would
+stop receiving packets. With this patch applied we no longer see any
+problems in the driver while performing these tests for extended periods
+of time.
+
+Make sure napi is scheduled subsequent to each napi_enable.
+
+[PG: in 34, virtqueue_disable_cb is vi->rvq->vq_ops->disable_cb]
+
+Signed-off-by: Bruce Rogers <brogers@novell.com>
+Signed-off-by: Olaf Kirch <okir@suse.de>
+Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
+index f5b5d74..195104d 100644
+--- a/drivers/net/virtio_net.c
++++ b/drivers/net/virtio_net.c
+@@ -448,6 +448,20 @@ static void skb_recv_done(struct virtqueue *rvq)
+ }
+ }
+
++static void virtnet_napi_enable(struct virtnet_info *vi)
++{
++ napi_enable(&vi->napi);
++
++ /* If all buffers were filled by other side before we napi_enabled, we
++ * won't get another interrupt, so process any outstanding packets
++ * now. virtnet_poll wants re-enable the queue, so we disable here.
++ * We synchronize against interrupts via NAPI_STATE_SCHED */
++ if (napi_schedule_prep(&vi->napi)) {
++ virtqueue_disable_cb(vi->rvq);
++ __napi_schedule(&vi->napi);
++ }
++}
++
+ static void refill_work(struct work_struct *work)
+ {
+ struct virtnet_info *vi;
+@@ -456,7 +470,7 @@ static void refill_work(struct work_struct *work)
+ vi = container_of(work, struct virtnet_info, refill.work);
+ napi_disable(&vi->napi);
+ still_empty = !try_fill_recv(vi, GFP_KERNEL);
+- napi_enable(&vi->napi);
++ virtnet_napi_enable(vi);
+
+ /* In theory, this can happen: if we don't get any buffers in
+ * we will *never* try to fill again. */
+@@ -642,16 +656,7 @@ static int virtnet_open(struct net_device *dev)
+ {
+ struct virtnet_info *vi = netdev_priv(dev);
+
+- napi_enable(&vi->napi);
+-
+- /* If all buffers were filled by other side before we napi_enabled, we
+- * won't get another interrupt, so process any outstanding packets
+- * now. virtnet_poll wants re-enable the queue, so we disable here.
+- * We synchronize against interrupts via NAPI_STATE_SCHED */
+- if (napi_schedule_prep(&vi->napi)) {
+- vi->rvq->vq_ops->disable_cb(vi->rvq);
+- __napi_schedule(&vi->napi);
+- }
++ virtnet_napi_enable(vi);
+ return 0;
+ }
+
+--
+1.7.7
+
diff --git a/queue/wireless-b43-fix-error-path-in-SDIO.patch b/queue/wireless-b43-fix-error-path-in-SDIO.patch
new file mode 100644
index 0000000..693e1e6
--- /dev/null
+++ b/queue/wireless-b43-fix-error-path-in-SDIO.patch
@@ -0,0 +1,29 @@
+From a154c3726fb036b7791e43db05649ac54088a30a Mon Sep 17 00:00:00 2001
+From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Date: Tue, 23 Nov 2010 17:10:24 +0100
+Subject: [PATCH] wireless: b43: fix error path in SDIO
+
+commit e476a5a41ad67d0e2b4a652820c49a3923eb936b upstream.
+
+Fix unbalanced call to sdio_release_host() on the error path.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/drivers/net/wireless/b43/sdio.c b/drivers/net/wireless/b43/sdio.c
+index 8b18314..4808dc7 100644
+--- a/drivers/net/wireless/b43/sdio.c
++++ b/drivers/net/wireless/b43/sdio.c
+@@ -163,6 +163,7 @@ static int b43_sdio_probe(struct sdio_func *func,
+ err_free_ssb:
+ kfree(sdio);
+ err_disable_func:
++ sdio_claim_host(func);
+ sdio_disable_func(func);
+ err_release_host:
+ sdio_release_host(func);
+--
+1.7.7
+
diff --git a/queue/x86-AMD-Fix-APIC-timer-erratum-400-affecting-K8-Rev..patch b/queue/x86-AMD-Fix-APIC-timer-erratum-400-affecting-K8-Rev..patch
new file mode 100644
index 0000000..372d85e
--- /dev/null
+++ b/queue/x86-AMD-Fix-APIC-timer-erratum-400-affecting-K8-Rev..patch
@@ -0,0 +1,44 @@
+From a12d98a363169cfd35675946afa4a9a428215e77 Mon Sep 17 00:00:00 2001
+From: Boris Ostrovsky <ostr@amd64.org>
+Date: Fri, 29 Apr 2011 17:47:43 -0400
+Subject: [PATCH] x86, AMD: Fix APIC timer erratum 400 affecting K8 Rev.A-E
+ processors
+
+commit e20a2d205c05cef6b5783df339a7d54adeb50962 upstream.
+
+Older AMD K8 processors (Revisions A-E) are affected by erratum
+400 (APIC timer interrupts don't occur in C states greater than
+C1). This, for example, means that X86_FEATURE_ARAT flag should
+not be set for these parts.
+
+This addresses regression introduced by commit
+b87cf80af3ba4b4c008b4face3c68d604e1715c6 ("x86, AMD: Set ARAT
+feature on AMD processors") where the system may become
+unresponsive until external interrupt (such as keyboard input)
+occurs. This results, for example, in time not being reported
+correctly, lack of progress on the system and other lockups.
+
+Reported-by: Joerg-Volker Peetz <jvpeetz@web.de>
+Tested-by: Joerg-Volker Peetz <jvpeetz@web.de>
+Acked-by: Borislav Petkov <borislav.petkov@amd.com>
+Signed-off-by: Boris Ostrovsky <Boris.Ostrovsky@amd.com>
+Link: http://lkml.kernel.org/r/1304113663-6586-1-git-send-email-ostr@amd64.org
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
+index d618dc1..89e2071 100644
+--- a/arch/x86/kernel/cpu/amd.c
++++ b/arch/x86/kernel/cpu/amd.c
+@@ -652,7 +652,7 @@ cpu_dev_register(amd_cpu_dev);
+ */
+
+ const int amd_erratum_400[] =
+- AMD_OSVW_ERRATUM(1, AMD_MODEL_RANGE(0xf, 0x41, 0x2, 0xff, 0xf),
++ AMD_OSVW_ERRATUM(1, AMD_MODEL_RANGE(0x0f, 0x4, 0x2, 0xff, 0xf),
+ AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0xff, 0xf));
+
+
+--
+1.7.7
+
diff --git a/queue/x86-pvclock-Move-scale_delta-into-common-header.patch b/queue/x86-pvclock-Move-scale_delta-into-common-header.patch
new file mode 100644
index 0000000..e3608c9
--- /dev/null
+++ b/queue/x86-pvclock-Move-scale_delta-into-common-header.patch
@@ -0,0 +1,79 @@
+From e9deb7c6c912d5c58532bc4a57d4223963eab9ec Mon Sep 17 00:00:00 2001
+From: Zachary Amsden <zamsden@redhat.com>
+Date: Thu, 19 Aug 2010 22:07:29 -1000
+Subject: [PATCH] x86: pvclock: Move scale_delta into common header
+
+commit 347bb4448c2155eb2310923ccaa4be5677649003 upstream.
+
+The scale_delta function for shift / multiply with 31-bit
+precision moves to a common header so it can be used by both
+kernel and kvm module.
+
+Signed-off-by: Zachary Amsden <zamsden@redhat.com>
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
+index daaacab..982aa32 100644
+--- a/arch/x86/include/asm/pvclock.h
++++ b/arch/x86/include/asm/pvclock.h
+@@ -12,4 +12,42 @@ void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
+ struct timespec *ts);
+ void pvclock_resume(void);
+
++/*
++ * Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
++ * yielding a 64-bit result.
++ */
++static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift)
++{
++ u64 product;
++#ifdef __i386__
++ u32 tmp1, tmp2;
++#endif
++
++ if (shift < 0)
++ delta >>= -shift;
++ else
++ delta <<= shift;
++
++#ifdef __i386__
++ __asm__ (
++ "mul %5 ; "
++ "mov %4,%%eax ; "
++ "mov %%edx,%4 ; "
++ "mul %5 ; "
++ "xor %5,%5 ; "
++ "add %4,%%eax ; "
++ "adc %5,%%edx ; "
++ : "=A" (product), "=r" (tmp1), "=r" (tmp2)
++ : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) );
++#elif defined(__x86_64__)
++ __asm__ (
++ "mul %%rdx ; shrd $32,%%rdx,%%rax"
++ : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) );
++#else
++#error implement me!
++#endif
++
++ return product;
++}
++
+ #endif /* _ASM_X86_PVCLOCK_H */
+diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
+index b12fe8d..929047c 100644
+--- a/arch/x86/kernel/pvclock.c
++++ b/arch/x86/kernel/pvclock.c
+@@ -74,7 +74,8 @@ static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift)
+ static u64 pvclock_get_nsec_offset(struct pvclock_shadow_time *shadow)
+ {
+ u64 delta = native_read_tsc() - shadow->tsc_timestamp;
+- return scale_delta(delta, shadow->tsc_to_nsec_mul, shadow->tsc_shift);
++ return pvclock_scale_delta(delta, shadow->tsc_to_nsec_mul,
++ shadow->tsc_shift);
+ }
+
+ /*
+--
+1.7.7
+