* [gentoo-commits] linux-patches r2015 - genpatches-2.6/trunk/3.1
@ 2011-11-22 0:00 Mike Pagano (mpagano)
0 siblings, 0 replies; only message in thread
From: Mike Pagano (mpagano) @ 2011-11-22 0:00 UTC (permalink / raw
To: gentoo-commits
Author: mpagano
Date: 2011-11-22 00:00:51 +0000 (Tue, 22 Nov 2011)
New Revision: 2015
Added:
genpatches-2.6/trunk/3.1/1001_linux-3.1.2.patch
Modified:
genpatches-2.6/trunk/3.1/0000_README
Log:
Linux patch 3.1.2
Modified: genpatches-2.6/trunk/3.1/0000_README
===================================================================
--- genpatches-2.6/trunk/3.1/0000_README 2011-11-21 23:58:10 UTC (rev 2014)
+++ genpatches-2.6/trunk/3.1/0000_README 2011-11-22 00:00:51 UTC (rev 2015)
@@ -43,6 +43,10 @@
From: http://www.kernel.org
Desc: Linux 3.1.1
+Patch: 1001_linux-3.1.2.patch
+From: http://www.kernel.org
+Desc: Linux 3.1.2
+
Patch: 2400_pci-enable-msi-failure-fix.patch
From: http://bugs.gentoo.org/show_bug.cgi?id=389215
Desc: Continue the init process after pci_enable_msi failure
Added: genpatches-2.6/trunk/3.1/1001_linux-3.1.2.patch
===================================================================
--- genpatches-2.6/trunk/3.1/1001_linux-3.1.2.patch (rev 0)
+++ genpatches-2.6/trunk/3.1/1001_linux-3.1.2.patch 2011-11-22 00:00:51 UTC (rev 2015)
@@ -0,0 +1,921 @@
+diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt
+index d70c93b..f896140 100644
+--- a/Documentation/sound/alsa/HD-Audio-Models.txt
++++ b/Documentation/sound/alsa/HD-Audio-Models.txt
+@@ -408,6 +408,7 @@ STAC92HD83*
+ ref Reference board
+ mic-ref Reference board with power management for ports
+ dell-s14 Dell laptop
++ dell-vostro-3500 Dell Vostro 3500 laptop
+ hp HP laptops with (inverted) mute-LED
+ hp-dv7-4000 HP dv-7 4000
+ auto BIOS setup (default)
+diff --git a/Makefile b/Makefile
+index 7e8e124..c992cca 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 3
+ PATCHLEVEL = 1
+-SUBLEVEL = 1
++SUBLEVEL = 2
+ EXTRAVERSION =
+ NAME = "Divemaster Edition"
+
+diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c
+index dba0d8d..0512baf 100644
+--- a/arch/arm/mach-at91/at91cap9_devices.c
++++ b/arch/arm/mach-at91/at91cap9_devices.c
+@@ -92,7 +92,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
+ * USB HS Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
++#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
+
+ static struct resource usba_udc_resources[] = {
+ [0] = {
+diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
+index 600bffb..371bb0e 100644
+--- a/arch/arm/mach-at91/at91sam9g45_devices.c
++++ b/arch/arm/mach-at91/at91sam9g45_devices.c
+@@ -191,7 +191,7 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {}
+ * USB HS Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
++#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
+ static struct resource usba_udc_resources[] = {
+ [0] = {
+ .start = AT91SAM9G45_UDPHS_FIFO,
+diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
+index aacb19d..c884d59 100644
+--- a/arch/arm/mach-at91/at91sam9rl_devices.c
++++ b/arch/arm/mach-at91/at91sam9rl_devices.c
+@@ -75,7 +75,7 @@ void __init at91_add_device_hdmac(void) {}
+ * USB HS Device (Gadget)
+ * -------------------------------------------------------------------- */
+
+-#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
++#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
+
+ static struct resource usba_udc_resources[] = {
+ [0] = {
+diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h
+index 6fbce72..a0f358d 100644
+--- a/arch/powerpc/include/asm/sections.h
++++ b/arch/powerpc/include/asm/sections.h
+@@ -8,7 +8,7 @@
+
+ #ifdef __powerpc64__
+
+-extern char _end[];
++extern char __end_interrupts[];
+
+ static inline int in_kernel_text(unsigned long addr)
+ {
+diff --git a/arch/powerpc/include/asm/synch.h b/arch/powerpc/include/asm/synch.h
+index d7cab44..87878c6 100644
+--- a/arch/powerpc/include/asm/synch.h
++++ b/arch/powerpc/include/asm/synch.h
+@@ -13,6 +13,7 @@
+ extern unsigned int __start___lwsync_fixup, __stop___lwsync_fixup;
+ extern void do_lwsync_fixups(unsigned long value, void *fixup_start,
+ void *fixup_end);
++extern void do_final_fixups(void);
+
+ static inline void eieio(void)
+ {
+diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
+index b06bdae..ad892f7 100644
+--- a/arch/powerpc/kernel/kvm.c
++++ b/arch/powerpc/kernel/kvm.c
+@@ -131,7 +131,6 @@ static void kvm_patch_ins_b(u32 *inst, int addr)
+ /* On relocatable kernels interrupts handlers and our code
+ can be in different regions, so we don't patch them */
+
+- extern u32 __end_interrupts;
+ if ((ulong)inst < (ulong)&__end_interrupts)
+ return;
+ #endif
+diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
+index 209135a..912c36a 100644
+--- a/arch/powerpc/kernel/setup_32.c
++++ b/arch/powerpc/kernel/setup_32.c
+@@ -107,6 +107,8 @@ notrace unsigned long __init early_init(unsigned long dt_ptr)
+ PTRRELOC(&__start___lwsync_fixup),
+ PTRRELOC(&__stop___lwsync_fixup));
+
++ do_final_fixups();
++
+ return KERNELBASE + offset;
+ }
+
+diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
+index aebef13..e0f2031 100644
+--- a/arch/powerpc/kernel/setup_64.c
++++ b/arch/powerpc/kernel/setup_64.c
+@@ -353,6 +353,7 @@ void __init setup_system(void)
+ &__start___fw_ftr_fixup, &__stop___fw_ftr_fixup);
+ do_lwsync_fixups(cur_cpu_spec->cpu_features,
+ &__start___lwsync_fixup, &__stop___lwsync_fixup);
++ do_final_fixups();
+
+ /*
+ * Unflatten the device-tree passed by prom_init or kexec
+diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
+index cc0d7f1..0e85639 100644
+--- a/arch/powerpc/kvm/book3s_hv.c
++++ b/arch/powerpc/kvm/book3s_hv.c
+@@ -43,6 +43,7 @@
+ #include <asm/processor.h>
+ #include <asm/cputhreads.h>
+ #include <asm/page.h>
++#include <asm/hvcall.h>
+ #include <linux/gfp.h>
+ #include <linux/sched.h>
+ #include <linux/vmalloc.h>
+diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c
+index 0d08d01..7a8a748 100644
+--- a/arch/powerpc/lib/feature-fixups.c
++++ b/arch/powerpc/lib/feature-fixups.c
+@@ -18,6 +18,8 @@
+ #include <linux/init.h>
+ #include <asm/cputable.h>
+ #include <asm/code-patching.h>
++#include <asm/page.h>
++#include <asm/sections.h>
+
+
+ struct fixup_entry {
+@@ -128,6 +130,27 @@ void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
+ }
+ }
+
++void do_final_fixups(void)
++{
++#if defined(CONFIG_PPC64) && defined(CONFIG_RELOCATABLE)
++ int *src, *dest;
++ unsigned long length;
++
++ if (PHYSICAL_START == 0)
++ return;
++
++ src = (int *)(KERNELBASE + PHYSICAL_START);
++ dest = (int *)KERNELBASE;
++ length = (__end_interrupts - _stext) / sizeof(int);
++
++ while (length--) {
++ patch_instruction(dest, *src);
++ src++;
++ dest++;
++ }
++#endif
++}
++
+ #ifdef CONFIG_FTR_FIXUP_SELFTEST
+
+ #define check(x) \
+diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c
+index 600ed2c..1aa478b 100644
+--- a/arch/powerpc/platforms/ps3/interrupt.c
++++ b/arch/powerpc/platforms/ps3/interrupt.c
+@@ -88,6 +88,7 @@ struct ps3_private {
+ struct ps3_bmp bmp __attribute__ ((aligned (PS3_BMP_MINALIGN)));
+ u64 ppe_id;
+ u64 thread_id;
++ unsigned long ipi_mask;
+ };
+
+ static DEFINE_PER_CPU(struct ps3_private, ps3_private);
+@@ -144,7 +145,11 @@ static void ps3_chip_unmask(struct irq_data *d)
+ static void ps3_chip_eoi(struct irq_data *d)
+ {
+ const struct ps3_private *pd = irq_data_get_irq_chip_data(d);
+- lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, d->irq);
++
++ /* non-IPIs are EOIed here. */
++
++ if (!test_bit(63 - d->irq, &pd->ipi_mask))
++ lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, d->irq);
+ }
+
+ /**
+@@ -691,6 +696,16 @@ void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq)
+ cpu, virq, pd->bmp.ipi_debug_brk_mask);
+ }
+
++void __init ps3_register_ipi_irq(unsigned int cpu, unsigned int virq)
++{
++ struct ps3_private *pd = &per_cpu(ps3_private, cpu);
++
++ set_bit(63 - virq, &pd->ipi_mask);
++
++ DBG("%s:%d: cpu %u, virq %u, ipi_mask %lxh\n", __func__, __LINE__,
++ cpu, virq, pd->ipi_mask);
++}
++
+ static unsigned int ps3_get_irq(void)
+ {
+ struct ps3_private *pd = &__get_cpu_var(ps3_private);
+@@ -720,6 +735,12 @@ static unsigned int ps3_get_irq(void)
+ BUG();
+ }
+ #endif
++
++ /* IPIs are EOIed here. */
++
++ if (test_bit(63 - plug, &pd->ipi_mask))
++ lv1_end_of_interrupt_ext(pd->ppe_id, pd->thread_id, plug);
++
+ return plug;
+ }
+
+diff --git a/arch/powerpc/platforms/ps3/platform.h b/arch/powerpc/platforms/ps3/platform.h
+index 9a196a8..1a633ed 100644
+--- a/arch/powerpc/platforms/ps3/platform.h
++++ b/arch/powerpc/platforms/ps3/platform.h
+@@ -43,6 +43,7 @@ void ps3_mm_shutdown(void);
+ void ps3_init_IRQ(void);
+ void ps3_shutdown_IRQ(int cpu);
+ void __init ps3_register_ipi_debug_brk(unsigned int cpu, unsigned int virq);
++void __init ps3_register_ipi_irq(unsigned int cpu, unsigned int virq);
+
+ /* smp */
+
+diff --git a/arch/powerpc/platforms/ps3/smp.c b/arch/powerpc/platforms/ps3/smp.c
+index 4c44794..f609345 100644
+--- a/arch/powerpc/platforms/ps3/smp.c
++++ b/arch/powerpc/platforms/ps3/smp.c
+@@ -94,6 +94,8 @@ static void __init ps3_smp_setup_cpu(int cpu)
+
+ if (result)
+ virqs[i] = NO_IRQ;
++ else
++ ps3_register_ipi_irq(cpu, virqs[i]);
+ }
+
+ ps3_register_ipi_debug_brk(cpu, virqs[PPC_MSG_DEBUGGER_BREAK]);
+diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h
+index 822d608..abcc4dc 100644
+--- a/arch/sh/include/asm/page.h
++++ b/arch/sh/include/asm/page.h
+@@ -141,8 +141,13 @@ typedef struct page *pgtable_t;
+ #endif /* !__ASSEMBLY__ */
+
+ #ifdef CONFIG_UNCACHED_MAPPING
++#if defined(CONFIG_29BIT)
++#define UNCAC_ADDR(addr) P2SEGADDR(addr)
++#define CAC_ADDR(addr) P1SEGADDR(addr)
++#else
+ #define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + uncached_start)
+ #define CAC_ADDR(addr) ((addr) - uncached_start + PAGE_OFFSET)
++#endif
+ #else
+ #define UNCAC_ADDR(addr) ((addr))
+ #define CAC_ADDR(addr) ((addr))
+diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
+index 2d69617..46c8069 100644
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -1355,7 +1355,7 @@ static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self,
+ int cpu = (long)hcpu;
+ switch (action) {
+ case CPU_UP_PREPARE:
+- per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu];
++ xen_vcpu_setup(cpu);
+ if (xen_have_vector_callback)
+ xen_init_lock_cpu(cpu);
+ break;
+@@ -1385,7 +1385,6 @@ static void __init xen_hvm_guest_init(void)
+ xen_hvm_smp_init();
+ register_cpu_notifier(&xen_hvm_cpu_notifier);
+ xen_unplug_emulated_devices();
+- have_vcpu_info_placement = 0;
+ x86_init.irqs.intr_init = xen_init_IRQ;
+ xen_hvm_init_time_ops();
+ xen_hvm_init_mmu_ops();
+diff --git a/block/blk-map.c b/block/blk-map.c
+index e663ac2..164cd00 100644
+--- a/block/blk-map.c
++++ b/block/blk-map.c
+@@ -204,10 +204,11 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
+ if (!iov[i].iov_len)
+ return -EINVAL;
+
+- if (uaddr & queue_dma_alignment(q)) {
++ /*
++ * Keep going so we check length of all segments
++ */
++ if (uaddr & queue_dma_alignment(q))
+ unaligned = 1;
+- break;
+- }
+ }
+
+ if (unaligned || (q->dma_pad_mask & len) || map_data)
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index a546a71..346d557 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -1475,7 +1475,7 @@ i915_gem_mmap_gtt(struct drm_file *file,
+
+ if (obj->base.size > dev_priv->mm.gtt_mappable_end) {
+ ret = -E2BIG;
+- goto unlock;
++ goto out;
+ }
+
+ if (obj->madv != I915_MADV_WILLNEED) {
+diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c
+index b0d753f..0e3241c 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_channel.c
++++ b/drivers/gpu/drm/nouveau/nouveau_channel.c
+@@ -158,6 +158,7 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
+ INIT_LIST_HEAD(&chan->nvsw.vbl_wait);
+ INIT_LIST_HEAD(&chan->nvsw.flip);
+ INIT_LIST_HEAD(&chan->fence.pending);
++ spin_lock_init(&chan->fence.lock);
+
+ /* setup channel's memory and vm */
+ ret = nouveau_gpuobj_channel_init(chan, vram_handle, gart_handle);
+diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
+index c919cfc..ae22dfa 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
++++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
+@@ -539,8 +539,6 @@ nouveau_fence_channel_init(struct nouveau_channel *chan)
+ return ret;
+ }
+
+- INIT_LIST_HEAD(&chan->fence.pending);
+- spin_lock_init(&chan->fence.lock);
+ atomic_set(&chan->fence.last_sequence_irq, 0);
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
+index b5628ce..3b77ad6 100644
+--- a/drivers/gpu/drm/radeon/atombios_dp.c
++++ b/drivers/gpu/drm/radeon/atombios_dp.c
+@@ -283,7 +283,7 @@ int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
+ }
+ }
+
+- DRM_ERROR("aux i2c too many retries, giving up\n");
++ DRM_DEBUG_KMS("aux i2c too many retries, giving up\n");
+ return -EREMOTEIO;
+ }
+
+diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
+index 661b692..6d5628b 100644
+--- a/drivers/leds/led-class.c
++++ b/drivers/leds/led-class.c
+@@ -270,11 +270,8 @@ void led_blink_set(struct led_classdev *led_cdev,
+ del_timer_sync(&led_cdev->blink_timer);
+
+ if (led_cdev->blink_set &&
+- !led_cdev->blink_set(led_cdev, delay_on, delay_off)) {
+- led_cdev->blink_delay_on = *delay_on;
+- led_cdev->blink_delay_off = *delay_off;
++ !led_cdev->blink_set(led_cdev, delay_on, delay_off))
+ return;
+- }
+
+ /* blink with 1 Hz as default if nothing specified */
+ if (!*delay_on && !*delay_off)
+diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
+index 01ecfee..b8eef46 100644
+--- a/drivers/mfd/twl-core.c
++++ b/drivers/mfd/twl-core.c
+@@ -109,7 +109,7 @@
+ #define twl_has_watchdog() false
+ #endif
+
+-#if defined(CONFIG_TWL4030_CODEC) || defined(CONFIG_TWL4030_CODEC_MODULE) ||\
++#if defined(CONFIG_MFD_TWL4030_AUDIO) || defined(CONFIG_MFD_TWL4030_AUDIO_MODULE) ||\
+ defined(CONFIG_TWL6040_CORE) || defined(CONFIG_TWL6040_CORE_MODULE)
+ #define twl_has_codec() true
+ #else
+diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
+index e293a79..fdb4df2 100644
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -2508,6 +2508,13 @@ static int b43_upload_microcode(struct b43_wldev *dev)
+ b43_print_fw_helptext(dev->wl, 1);
+ err = -EOPNOTSUPP;
+ goto error;
++ } else if (fwrev >= 598) {
++ b43err(dev->wl, "YOUR FIRMWARE IS TOO NEW. Support for "
++ "firmware 598 and up requires kernel 3.2 or newer. You "
++ "have to install older firmware or upgrade kernel.\n");
++ b43_print_fw_helptext(dev->wl, 1);
++ err = -EOPNOTSUPP;
++ goto error;
+ }
+ dev->fw.rev = fwrev;
+ dev->fw.patch = fwpatch;
+diff --git a/drivers/staging/brcm80211/brcmsmac/mac80211_if.c b/drivers/staging/brcm80211/brcmsmac/mac80211_if.c
+index d6de44e..3cb92fc 100644
+--- a/drivers/staging/brcm80211/brcmsmac/mac80211_if.c
++++ b/drivers/staging/brcm80211/brcmsmac/mac80211_if.c
+@@ -975,6 +975,10 @@ static struct ieee80211_channel brcms_5ghz_nphy_chantable[] = {
+ .hw_value = (rate100m / 5), \
+ }
+
++/*
++ * The rate table is used for both 2.4G and 5G rates. The
++ * latter being a subset as it does not support CCK rates.
++ */
+ static struct ieee80211_rate legacy_ratetable[] = {
+ RATE(10, 0),
+ RATE(20, IEEE80211_RATE_SHORT_PREAMBLE),
+@@ -1016,8 +1020,9 @@ static struct ieee80211_supported_band brcms_band_5GHz_nphy = {
+ .band = IEEE80211_BAND_5GHZ,
+ .channels = brcms_5ghz_nphy_chantable,
+ .n_channels = ARRAY_SIZE(brcms_5ghz_nphy_chantable),
+- .bitrates = legacy_ratetable + 4,
+- .n_bitrates = ARRAY_SIZE(legacy_ratetable) - 4,
++ .bitrates = legacy_ratetable + BRCMS_LEGACY_5G_RATE_OFFSET,
++ .n_bitrates = ARRAY_SIZE(legacy_ratetable) -
++ BRCMS_LEGACY_5G_RATE_OFFSET,
+ .ht_cap = {
+ /* use IEEE80211_HT_CAP_* from include/linux/ieee80211.h */
+ .cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_40MHZ_INTOLERANT, /* No 40 mhz yet */
+diff --git a/drivers/staging/brcm80211/brcmsmac/mac80211_if.h b/drivers/staging/brcm80211/brcmsmac/mac80211_if.h
+index 40e3d37..3be8655 100644
+--- a/drivers/staging/brcm80211/brcmsmac/mac80211_if.h
++++ b/drivers/staging/brcm80211/brcmsmac/mac80211_if.h
+@@ -20,6 +20,12 @@
+ #include <linux/timer.h>
+ #include <linux/interrupt.h>
+
++/*
++ * Starting index for 5G rates in the
++ * legacy rate table.
++ */
++#define BRCMS_LEGACY_5G_RATE_OFFSET 4
++
+ /* softmac ioctl definitions */
+ #define BRCMS_SET_SHORTSLOT_OVERRIDE 146
+
+diff --git a/drivers/staging/brcm80211/brcmsmac/main.c b/drivers/staging/brcm80211/brcmsmac/main.c
+index 1763c45..9654163 100644
+--- a/drivers/staging/brcm80211/brcmsmac/main.c
++++ b/drivers/staging/brcm80211/brcmsmac/main.c
+@@ -4608,6 +4608,14 @@ prep_mac80211_status(struct brcms_c_info *wlc, struct d11rxhdr *rxh,
+ wiphy_err(wlc->wiphy, "%s: Unknown rate\n", __func__);
+ }
+
++ /*
++ * For 5GHz, we should decrease the index as it is
++ * a subset of the 2.4G rates. See bitrates field
++ * of brcms_band_5GHz_nphy (in mac80211_if.c).
++ */
++ if (rx_status->band == IEEE80211_BAND_5GHZ)
++ rx_status->rate_idx -= BRCMS_LEGACY_5G_RATE_OFFSET;
++
+ /* Determine short preamble and rate_idx */
+ preamble = 0;
+ if (IS_CCK(rspec)) {
+diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
+index 4bcc8b8..ecb9254 100644
+--- a/drivers/virtio/virtio_pci.c
++++ b/drivers/virtio/virtio_pci.c
+@@ -590,11 +590,11 @@ static struct virtio_config_ops virtio_pci_config_ops = {
+
+ static void virtio_pci_release_dev(struct device *_d)
+ {
+- struct virtio_device *dev = container_of(_d, struct virtio_device,
+- dev);
+- struct virtio_pci_device *vp_dev = to_vp_device(dev);
+-
+- kfree(vp_dev);
++ /*
++ * No need for a release method as we allocate/free
++ * all devices together with the pci devices.
++ * Provide an empty one to avoid getting a warning from core.
++ */
+ }
+
+ /* the PCI probing function */
+@@ -682,6 +682,7 @@ static void __devexit virtio_pci_remove(struct pci_dev *pci_dev)
+ pci_iounmap(pci_dev, vp_dev->ioaddr);
+ pci_release_regions(pci_dev);
+ pci_disable_device(pci_dev);
++ kfree(vp_dev);
+ }
+
+ #ifdef CONFIG_PM
+diff --git a/drivers/xen/gntalloc.c b/drivers/xen/gntalloc.c
+index f6832f4..e1c4c6e 100644
+--- a/drivers/xen/gntalloc.c
++++ b/drivers/xen/gntalloc.c
+@@ -135,7 +135,7 @@ static int add_grefs(struct ioctl_gntalloc_alloc_gref *op,
+ /* Grant foreign access to the page. */
+ gref->gref_id = gnttab_grant_foreign_access(op->domid,
+ pfn_to_mfn(page_to_pfn(gref->page)), readonly);
+- if (gref->gref_id < 0) {
++ if ((int)gref->gref_id < 0) {
+ rc = gref->gref_id;
+ goto undo;
+ }
+@@ -280,7 +280,7 @@ static long gntalloc_ioctl_alloc(struct gntalloc_file_private_data *priv,
+ goto out;
+ }
+
+- gref_ids = kzalloc(sizeof(gref_ids[0]) * op.count, GFP_TEMPORARY);
++ gref_ids = kcalloc(op.count, sizeof(gref_ids[0]), GFP_TEMPORARY);
+ if (!gref_ids) {
+ rc = -ENOMEM;
+ goto out;
+diff --git a/fs/hfs/trans.c b/fs/hfs/trans.c
+index e673a88..b1ce4c7 100644
+--- a/fs/hfs/trans.c
++++ b/fs/hfs/trans.c
+@@ -40,6 +40,8 @@ int hfs_mac2asc(struct super_block *sb, char *out, const struct hfs_name *in)
+
+ src = in->name;
+ srclen = in->len;
++ if (srclen > HFS_NAMELEN)
++ srclen = HFS_NAMELEN;
+ dst = out;
+ dstlen = HFS_MAX_NAMELEN;
+ if (nls_io) {
+diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
+index 3d53efd..f81676f 100644
+--- a/include/drm/drm_pciids.h
++++ b/include/drm/drm_pciids.h
+@@ -4,6 +4,7 @@
+ */
+ #define radeon_PCI_IDS \
+ {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
++ {0x1002, 0x3151, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+ {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+ {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+ {0x1002, 0x3155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+@@ -55,6 +56,7 @@
+ {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
+ {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
+ {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \
++ {0x1002, 0x4C6E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \
+ {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
+ {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
+ {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
+diff --git a/mm/backing-dev.c b/mm/backing-dev.c
+index a87da52..253b071 100644
+--- a/mm/backing-dev.c
++++ b/mm/backing-dev.c
+@@ -720,6 +720,14 @@ void bdi_destroy(struct backing_dev_info *bdi)
+
+ bdi_unregister(bdi);
+
++ /*
++ * If bdi_unregister() had already been called earlier, the
++ * wakeup_timer could still be armed because bdi_prune_sb()
++ * can race with the bdi_wakeup_thread_delayed() calls from
++ * __mark_inode_dirty().
++ */
++ del_timer_sync(&bdi->wb.wakeup_timer);
++
+ for (i = 0; i < NR_BDI_STAT_ITEMS; i++)
+ percpu_counter_destroy(&bdi->bdi_stat[i]);
+
+diff --git a/security/keys/user_defined.c b/security/keys/user_defined.c
+index 5b366d7..69ff52c 100644
+--- a/security/keys/user_defined.c
++++ b/security/keys/user_defined.c
+@@ -102,7 +102,8 @@ int user_update(struct key *key, const void *data, size_t datalen)
+ key->expiry = 0;
+ }
+
+- kfree_rcu(zap, rcu);
++ if (zap)
++ kfree_rcu(zap, rcu);
+
+ error:
+ return ret;
+diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
+index f3aefef..3a1b47a 100644
+--- a/sound/pci/hda/hda_codec.c
++++ b/sound/pci/hda/hda_codec.c
+@@ -2296,6 +2296,39 @@ int snd_hda_codec_reset(struct hda_codec *codec)
+ return 0;
+ }
+
++typedef int (*map_slave_func_t)(void *, struct snd_kcontrol *);
++
++/* apply the function to all matching slave ctls in the mixer list */
++static int map_slaves(struct hda_codec *codec, const char * const *slaves,
++ map_slave_func_t func, void *data)
++{
++ struct hda_nid_item *items;
++ const char * const *s;
++ int i, err;
++
++ items = codec->mixers.list;
++ for (i = 0; i < codec->mixers.used; i++) {
++ struct snd_kcontrol *sctl = items[i].kctl;
++ if (!sctl || !sctl->id.name ||
++ sctl->id.iface != SNDRV_CTL_ELEM_IFACE_MIXER)
++ continue;
++ for (s = slaves; *s; s++) {
++ if (!strcmp(sctl->id.name, *s)) {
++ err = func(data, sctl);
++ if (err)
++ return err;
++ break;
++ }
++ }
++ }
++ return 0;
++}
++
++static int check_slave_present(void *data, struct snd_kcontrol *sctl)
++{
++ return 1;
++}
++
+ /**
+ * snd_hda_add_vmaster - create a virtual master control and add slaves
+ * @codec: HD-audio codec
+@@ -2316,12 +2349,10 @@ int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
+ unsigned int *tlv, const char * const *slaves)
+ {
+ struct snd_kcontrol *kctl;
+- const char * const *s;
+ int err;
+
+- for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
+- ;
+- if (!*s) {
++ err = map_slaves(codec, slaves, check_slave_present, NULL);
++ if (err != 1) {
+ snd_printdd("No slave found for %s\n", name);
+ return 0;
+ }
+@@ -2332,23 +2363,10 @@ int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
+ if (err < 0)
+ return err;
+
+- for (s = slaves; *s; s++) {
+- struct snd_kcontrol *sctl;
+- int i = 0;
+- for (;;) {
+- sctl = _snd_hda_find_mixer_ctl(codec, *s, i);
+- if (!sctl) {
+- if (!i)
+- snd_printdd("Cannot find slave %s, "
+- "skipped\n", *s);
+- break;
+- }
+- err = snd_ctl_add_slave(kctl, sctl);
+- if (err < 0)
+- return err;
+- i++;
+- }
+- }
++ err = map_slaves(codec, slaves, (map_slave_func_t)snd_ctl_add_slave,
++ kctl);
++ if (err < 0)
++ return err;
+ return 0;
+ }
+ EXPORT_SYMBOL_HDA(snd_hda_add_vmaster);
+diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
+index d0671a8..7ed9011 100644
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -94,6 +94,7 @@ enum {
+ STAC_92HD83XXX_REF,
+ STAC_92HD83XXX_PWR_REF,
+ STAC_DELL_S14,
++ STAC_DELL_VOSTRO_3500,
+ STAC_92HD83XXX_HP,
+ STAC_92HD83XXX_HP_cNB11_INTQUAD,
+ STAC_HP_DV7_4000,
+@@ -1658,6 +1659,12 @@ static const unsigned int dell_s14_pin_configs[10] = {
+ 0x40f000f0, 0x40f000f0,
+ };
+
++static const unsigned int dell_vostro_3500_pin_configs[10] = {
++ 0x02a11020, 0x0221101f, 0x400000f0, 0x90170110,
++ 0x400000f1, 0x400000f2, 0x400000f3, 0x90a60160,
++ 0x400000f4, 0x400000f5,
++};
++
+ static const unsigned int hp_dv7_4000_pin_configs[10] = {
+ 0x03a12050, 0x0321201f, 0x40f000f0, 0x90170110,
+ 0x40f000f0, 0x40f000f0, 0x90170110, 0xd5a30140,
+@@ -1674,6 +1681,7 @@ static const unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = {
+ [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs,
+ [STAC_92HD83XXX_PWR_REF] = ref92hd83xxx_pin_configs,
+ [STAC_DELL_S14] = dell_s14_pin_configs,
++ [STAC_DELL_VOSTRO_3500] = dell_vostro_3500_pin_configs,
+ [STAC_92HD83XXX_HP_cNB11_INTQUAD] = hp_cNB11_intquad_pin_configs,
+ [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs,
+ };
+@@ -1683,6 +1691,7 @@ static const char * const stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = {
+ [STAC_92HD83XXX_REF] = "ref",
+ [STAC_92HD83XXX_PWR_REF] = "mic-ref",
+ [STAC_DELL_S14] = "dell-s14",
++ [STAC_DELL_VOSTRO_3500] = "dell-vostro-3500",
+ [STAC_92HD83XXX_HP] = "hp",
+ [STAC_92HD83XXX_HP_cNB11_INTQUAD] = "hp_cNB11_intquad",
+ [STAC_HP_DV7_4000] = "hp-dv7-4000",
+@@ -1696,6 +1705,8 @@ static const struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = {
+ "DFI LanParty", STAC_92HD83XXX_REF),
+ SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02ba,
+ "unknown Dell", STAC_DELL_S14),
++ SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x1028,
++ "Dell Vostro 3500", STAC_DELL_VOSTRO_3500),
+ SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xff00, 0x3600,
+ "HP", STAC_92HD83XXX_HP),
+ SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1656,
+diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
+index 8468363..fa0a480 100644
+--- a/sound/soc/codecs/wm8994.c
++++ b/sound/soc/codecs/wm8994.c
+@@ -56,7 +56,7 @@ static int wm8994_retune_mobile_base[] = {
+ static int wm8994_readable(struct snd_soc_codec *codec, unsigned int reg)
+ {
+ struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
+- struct wm8994 *control = wm8994->control_data;
++ struct wm8994 *control = codec->control_data;
+
+ switch (reg) {
+ case WM8994_GPIO_1:
+diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
+index cdd19d7..0de7cbd 100644
+--- a/sound/usb/mixer.c
++++ b/sound/usb/mixer.c
+@@ -765,10 +765,60 @@ static void usb_mixer_elem_free(struct snd_kcontrol *kctl)
+ * interface to ALSA control for feature/mixer units
+ */
+
++/* volume control quirks */
++static void volume_control_quirks(struct usb_mixer_elem_info *cval,
++ struct snd_kcontrol *kctl)
++{
++ switch (cval->mixer->chip->usb_id) {
++ case USB_ID(0x0471, 0x0101):
++ case USB_ID(0x0471, 0x0104):
++ case USB_ID(0x0471, 0x0105):
++ case USB_ID(0x0672, 0x1041):
++ /* quirk for UDA1321/N101.
++ * note that detection between firmware 2.1.1.7 (N101)
++ * and later 2.1.1.21 is not very clear from datasheets.
++ * I hope that the min value is -15360 for newer firmware --jk
++ */
++ if (!strcmp(kctl->id.name, "PCM Playback Volume") &&
++ cval->min == -15616) {
++ snd_printk(KERN_INFO
++ "set volume quirk for UDA1321/N101 chip\n");
++ cval->max = -256;
++ }
++ break;
++
++ case USB_ID(0x046d, 0x09a4):
++ if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
++ snd_printk(KERN_INFO
++ "set volume quirk for QuickCam E3500\n");
++ cval->min = 6080;
++ cval->max = 8768;
++ cval->res = 192;
++ }
++ break;
++
++ case USB_ID(0x046d, 0x0808):
++ case USB_ID(0x046d, 0x0809):
++ case USB_ID(0x046d, 0x0991):
++ /* Most audio usb devices lie about volume resolution.
++ * Most Logitech webcams have res = 384.
++ * Proboly there is some logitech magic behind this number --fishor
++ */
++ if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
++ snd_printk(KERN_INFO
++ "set resolution quirk: cval->res = 384\n");
++ cval->res = 384;
++ }
++ break;
++
++ }
++}
++
+ /*
+ * retrieve the minimum and maximum values for the specified control
+ */
+-static int get_min_max(struct usb_mixer_elem_info *cval, int default_min)
++static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
++ int default_min, struct snd_kcontrol *kctl)
+ {
+ /* for failsafe */
+ cval->min = default_min;
+@@ -844,6 +894,9 @@ static int get_min_max(struct usb_mixer_elem_info *cval, int default_min)
+ cval->initialized = 1;
+ }
+
++ if (kctl)
++ volume_control_quirks(cval, kctl);
++
+ /* USB descriptions contain the dB scale in 1/256 dB unit
+ * while ALSA TLV contains in 1/100 dB unit
+ */
+@@ -864,6 +917,7 @@ static int get_min_max(struct usb_mixer_elem_info *cval, int default_min)
+ return 0;
+ }
+
++#define get_min_max(cval, def) get_min_max_with_quirks(cval, def, NULL)
+
+ /* get a feature/mixer unit info */
+ static int mixer_ctl_feature_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
+@@ -881,8 +935,17 @@ static int mixer_ctl_feature_info(struct snd_kcontrol *kcontrol, struct snd_ctl_
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = 1;
+ } else {
+- if (! cval->initialized)
+- get_min_max(cval, 0);
++ if (!cval->initialized) {
++ get_min_max_with_quirks(cval, 0, kcontrol);
++ if (cval->initialized && cval->dBmin >= cval->dBmax) {
++ kcontrol->vd[0].access &=
++ ~(SNDRV_CTL_ELEM_ACCESS_TLV_READ |
++ SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK);
++ snd_ctl_notify(cval->mixer->chip->card,
++ SNDRV_CTL_EVENT_MASK_INFO,
++ &kcontrol->id);
++ }
++ }
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max =
+ (cval->max - cval->min + cval->res - 1) / cval->res;
+@@ -1036,9 +1099,6 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
+ cval->ch_readonly = readonly_mask;
+ }
+
+- /* get min/max values */
+- get_min_max(cval, 0);
+-
+ /* if all channels in the mask are marked read-only, make the control
+ * read-only. set_cur_mix_value() will check the mask again and won't
+ * issue write commands to read-only channels. */
+@@ -1060,6 +1120,9 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
+ len = snd_usb_copy_string_desc(state, nameid,
+ kctl->id.name, sizeof(kctl->id.name));
+
++ /* get min/max values */
++ get_min_max_with_quirks(cval, 0, kctl);
++
+ switch (control) {
+ case UAC_FU_MUTE:
+ case UAC_FU_VOLUME:
+@@ -1109,51 +1172,6 @@ static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
+ break;
+ }
+
+- /* volume control quirks */
+- switch (state->chip->usb_id) {
+- case USB_ID(0x0471, 0x0101):
+- case USB_ID(0x0471, 0x0104):
+- case USB_ID(0x0471, 0x0105):
+- case USB_ID(0x0672, 0x1041):
+- /* quirk for UDA1321/N101.
+- * note that detection between firmware 2.1.1.7 (N101)
+- * and later 2.1.1.21 is not very clear from datasheets.
+- * I hope that the min value is -15360 for newer firmware --jk
+- */
+- if (!strcmp(kctl->id.name, "PCM Playback Volume") &&
+- cval->min == -15616) {
+- snd_printk(KERN_INFO
+- "set volume quirk for UDA1321/N101 chip\n");
+- cval->max = -256;
+- }
+- break;
+-
+- case USB_ID(0x046d, 0x09a4):
+- if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
+- snd_printk(KERN_INFO
+- "set volume quirk for QuickCam E3500\n");
+- cval->min = 6080;
+- cval->max = 8768;
+- cval->res = 192;
+- }
+- break;
+-
+- case USB_ID(0x046d, 0x0808):
+- case USB_ID(0x046d, 0x0809):
+- case USB_ID(0x046d, 0x0991):
+- /* Most audio usb devices lie about volume resolution.
+- * Most Logitech webcams have res = 384.
+- * Proboly there is some logitech magic behind this number --fishor
+- */
+- if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
+- snd_printk(KERN_INFO
+- "set resolution quirk: cval->res = 384\n");
+- cval->res = 384;
+- }
+- break;
+-
+- }
+-
+ range = (cval->max - cval->min) / cval->res;
+ /* Are there devices with volume range more than 255? I use a bit more
+ * to be sure. 384 is a resolution magic number found on Logitech
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-11-22 0:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-22 0:00 [gentoo-commits] linux-patches r2015 - genpatches-2.6/trunk/3.1 Mike Pagano (mpagano)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox