From: Greg Kroah-Hartman Date: Mon, 29 Jun 2009 23:11:02 +0000 (-0700) Subject: .29 patches X-Git-Tag: v2.6.27.26~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=52a5493d44b9bfc480369db7c85e462a686db92a;p=thirdparty%2Fkernel%2Fstable-queue.git .29 patches --- diff --git a/queue-2.6.29/alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch b/queue-2.6.29/alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch new file mode 100644 index 00000000000..c1b04ceba60 --- /dev/null +++ b/queue-2.6.29/alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch @@ -0,0 +1,42 @@ +From 601e1cc5df940b59e71c947726640811897d30df Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 2 Jun 2009 11:37:01 +0200 +Subject: ALSA: ca0106 - Add missing registrations of vmaster controls + +From: Takashi Iwai + +commit 601e1cc5df940b59e71c947726640811897d30df upstream. + +Although the vmaster controls are created, they aren't registered thus +they don't appear in the real world. Added the missing snd_ctl_add() +calls. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/ca0106/ca0106_mixer.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/sound/pci/ca0106/ca0106_mixer.c ++++ b/sound/pci/ca0106/ca0106_mixer.c +@@ -841,6 +841,9 @@ int __devinit snd_ca0106_mixer(struct sn + snd_ca0106_master_db_scale); + if (!vmaster) + return -ENOMEM; ++ err = snd_ctl_add(card, vmaster); ++ if (err < 0) ++ return err; + add_slaves(card, vmaster, slave_vols); + + if (emu->details->spi_dac == 1) { +@@ -848,6 +851,9 @@ int __devinit snd_ca0106_mixer(struct sn + NULL); + if (!vmaster) + return -ENOMEM; ++ err = snd_ctl_add(card, vmaster); ++ if (err < 0) ++ return err; + add_slaves(card, vmaster, slave_sws); + } + return 0; diff --git a/queue-2.6.29/floppy-provide-a-pnp-device-table-in-the-module.patch b/queue-2.6.29/floppy-provide-a-pnp-device-table-in-the-module.patch new file mode 100644 index 00000000000..1e7391d48f4 --- /dev/null +++ b/queue-2.6.29/floppy-provide-a-pnp-device-table-in-the-module.patch @@ -0,0 +1,53 @@ +From 83f9ef463bcb4ba7b4fee1d6212fac7d277010d3 Mon Sep 17 00:00:00 2001 +From: Scott James Remnant +Date: Thu, 2 Apr 2009 16:56:47 -0700 +Subject: floppy: provide a PNP device table in the module. + +From: Scott James Remnant + +commit 83f9ef463bcb4ba7b4fee1d6212fac7d277010d3 upstream. + +The missing device table means that the floppy module is not auto-loaded, +even when the appropriate PNP device (0700) is found. + +We don't actually use the table in the module, since the device doesn't +have a struct pnp_driver, but it's sufficient to cause an alias in the +module that udev/modprobe will use. + +Signed-off-by: Scott James Remnant +Signed-off-by: Tim Gardner +Cc: Bjorn Helgaas +Cc: Philippe De Muyter +Acked-by: Kay Sievers +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/block/floppy.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/block/floppy.c ++++ b/drivers/block/floppy.c +@@ -177,6 +177,7 @@ static int print_unex = 1; + #include + #include + #include ++#include + #include /* for invalidate_buffers() */ + #include + +@@ -4598,6 +4599,13 @@ MODULE_AUTHOR("Alain L. Knaff"); + MODULE_SUPPORTED_DEVICE("fd"); + MODULE_LICENSE("GPL"); + ++/* This doesn't actually get used other than for module information */ ++static const struct pnp_device_id floppy_pnpids[] = { ++ { "PNP0700", 0 }, ++ { } ++}; ++MODULE_DEVICE_TABLE(pnp, floppy_pnpids); ++ + #else + + __setup("floppy=", floppy_setup); diff --git a/queue-2.6.29/ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch b/queue-2.6.29/ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch new file mode 100644 index 00000000000..3304190f820 --- /dev/null +++ b/queue-2.6.29/ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch @@ -0,0 +1,58 @@ +From 2ac6bf4ddc87c3b6b609f8fa82f6ebbffeac12f4 Mon Sep 17 00:00:00 2001 +From: Jack Morgenstein +Date: Fri, 5 Jun 2009 10:36:24 -0700 +Subject: IB/mlx4: Add strong ordering to local inval and fast reg work requests + +From: Jack Morgenstein + +commit 2ac6bf4ddc87c3b6b609f8fa82f6ebbffeac12f4 upstream. + +The ConnectX Programmer's Reference Manual states that the "SO" bit +must be set when posting Fast Register and Local Invalidate send work +requests. When this bit is set, the work request will be executed +only after all previous work requests on the send queue have been +executed. (If the bit is not set, Fast Register and Local Invalidate +WQEs may begin execution too early, which violates the defined +semantics for these operations) + +This fixes the issue with NFS/RDMA reported in + + +Signed-off-by: Jack Morgenstein +Signed-off-by: Roland Dreier +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/infiniband/hw/mlx4/qp.c | 4 ++++ + include/linux/mlx4/qp.h | 1 + + 2 files changed, 5 insertions(+) + +--- a/drivers/infiniband/hw/mlx4/qp.c ++++ b/drivers/infiniband/hw/mlx4/qp.c +@@ -1585,12 +1585,16 @@ int mlx4_ib_post_send(struct ib_qp *ibqp + break; + + case IB_WR_LOCAL_INV: ++ ctrl->srcrb_flags |= ++ cpu_to_be32(MLX4_WQE_CTRL_STRONG_ORDER); + set_local_inv_seg(wqe, wr->ex.invalidate_rkey); + wqe += sizeof (struct mlx4_wqe_local_inval_seg); + size += sizeof (struct mlx4_wqe_local_inval_seg) / 16; + break; + + case IB_WR_FAST_REG_MR: ++ ctrl->srcrb_flags |= ++ cpu_to_be32(MLX4_WQE_CTRL_STRONG_ORDER); + set_fmr_seg(wqe, wr); + wqe += sizeof (struct mlx4_wqe_fmr_seg); + size += sizeof (struct mlx4_wqe_fmr_seg) / 16; +--- a/include/linux/mlx4/qp.h ++++ b/include/linux/mlx4/qp.h +@@ -165,6 +165,7 @@ enum { + MLX4_WQE_CTRL_IP_CSUM = 1 << 4, + MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, + MLX4_WQE_CTRL_INS_VLAN = 1 << 6, ++ MLX4_WQE_CTRL_STRONG_ORDER = 1 << 7, + }; + + struct mlx4_wqe_ctrl_seg { diff --git a/queue-2.6.29/series b/queue-2.6.29/series index 5e02fd93c6d..57ac975d608 100644 --- a/queue-2.6.29/series +++ b/queue-2.6.29/series @@ -13,3 +13,7 @@ char-moxa-prevent-opening-unavailable-ports.patch isdn-fix-dma-alloc-for-hfcpci.patch usb-usbtmc-fix-switch-statment.patch x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch +alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch +floppy-provide-a-pnp-device-table-in-the-module.patch +ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch +x86-handle-initrd-that-extends-into-unusable-memory.patch diff --git a/queue-2.6.29/x86-handle-initrd-that-extends-into-unusable-memory.patch b/queue-2.6.29/x86-handle-initrd-that-extends-into-unusable-memory.patch new file mode 100644 index 00000000000..b0ef86247e8 --- /dev/null +++ b/queue-2.6.29/x86-handle-initrd-that-extends-into-unusable-memory.patch @@ -0,0 +1,76 @@ +From 8c5dd8f43367f4f266dd616f11658005bc2d20ef Mon Sep 17 00:00:00 2001 +From: Yinghai Lu +Date: Thu, 4 Jun 2009 19:14:22 -0700 +Subject: x86: handle initrd that extends into unusable memory + +From: Yinghai Lu + +commit 8c5dd8f43367f4f266dd616f11658005bc2d20ef upstream. + +On a system where system memory (according e820) is not covered by +mtrr, mtrr_trim_memory converts a portion of memory to reserved, but +bootloader has already put the initrd in that range. + +Thus, we need to have 64bit to use relocate_initrd too. + +[ Impact: fix using initrd when mtrr_trim_memory happen ] + +Signed-off-by: Yinghai Lu +Signed-off-by: H. Peter Anvin +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/setup.c | 15 +++------------ + 1 file changed, 3 insertions(+), 12 deletions(-) + +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -255,15 +255,13 @@ static inline void copy_edd(void) + + #ifdef CONFIG_BLK_DEV_INITRD + +-#ifdef CONFIG_X86_32 +- + #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT) + static void __init relocate_initrd(void) + { + + u64 ramdisk_image = boot_params.hdr.ramdisk_image; + u64 ramdisk_size = boot_params.hdr.ramdisk_size; +- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT; ++ u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT; + u64 ramdisk_here; + unsigned long slop, clen, mapaddr; + char *p, *q; +@@ -319,14 +317,13 @@ static void __init relocate_initrd(void) + ramdisk_image, ramdisk_image + ramdisk_size - 1, + ramdisk_here, ramdisk_here + ramdisk_size - 1); + } +-#endif + + static void __init reserve_initrd(void) + { + u64 ramdisk_image = boot_params.hdr.ramdisk_image; + u64 ramdisk_size = boot_params.hdr.ramdisk_size; + u64 ramdisk_end = ramdisk_image + ramdisk_size; +- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT; ++ u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT; + + if (!boot_params.hdr.type_of_loader || + !ramdisk_image || !ramdisk_size) +@@ -356,14 +353,8 @@ static void __init reserve_initrd(void) + return; + } + +-#ifdef CONFIG_X86_32 + relocate_initrd(); +-#else +- printk(KERN_ERR "initrd extends beyond end of memory " +- "(0x%08llx > 0x%08llx)\ndisabling initrd\n", +- ramdisk_end, end_of_lowmem); +- initrd_start = 0; +-#endif ++ + free_early(ramdisk_image, ramdisk_end); + } + #else