public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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