summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '3.2.71/1050_linux-3.2.51.patch')
-rw-r--r--3.2.71/1050_linux-3.2.51.patch3886
1 files changed, 0 insertions, 3886 deletions
diff --git a/3.2.71/1050_linux-3.2.51.patch b/3.2.71/1050_linux-3.2.51.patch
deleted file mode 100644
index 5d5832b..0000000
--- a/3.2.71/1050_linux-3.2.51.patch
+++ /dev/null
@@ -1,3886 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 0799e8e..0f11936 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,6 @@
- VERSION = 3
- PATCHLEVEL = 2
--SUBLEVEL = 50
-+SUBLEVEL = 51
- EXTRAVERSION =
- NAME = Saber-toothed Squirrel
-
-diff --git a/arch/alpha/Makefile b/arch/alpha/Makefile
-index 4759fe7..2cc3cc5 100644
---- a/arch/alpha/Makefile
-+++ b/arch/alpha/Makefile
-@@ -12,7 +12,7 @@ NM := $(NM) -B
-
- LDFLAGS_vmlinux := -static -N #-relax
- CHECKFLAGS += -D__alpha__ -m64
--cflags-y := -pipe -mno-fp-regs -ffixed-8 -msmall-data
-+cflags-y := -pipe -mno-fp-regs -ffixed-8
- cflags-y += $(call cc-option, -fno-jump-tables)
-
- cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4
-diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index 27bcd12..790ea68 100644
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -1,7 +1,6 @@
- config ARM
- bool
- default y
-- select HAVE_AOUT
- select HAVE_DMA_API_DEBUG
- select HAVE_IDE if PCI || ISA || PCMCIA
- select HAVE_MEMBLOCK
-diff --git a/arch/arm/include/asm/a.out-core.h b/arch/arm/include/asm/a.out-core.h
-deleted file mode 100644
-index 92f10cb..0000000
---- a/arch/arm/include/asm/a.out-core.h
-+++ /dev/null
-@@ -1,45 +0,0 @@
--/* a.out coredump register dumper
-- *
-- * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
-- * Written by David Howells (dhowells@redhat.com)
-- *
-- * This program is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU General Public Licence
-- * as published by the Free Software Foundation; either version
-- * 2 of the Licence, or (at your option) any later version.
-- */
--
--#ifndef _ASM_A_OUT_CORE_H
--#define _ASM_A_OUT_CORE_H
--
--#ifdef __KERNEL__
--
--#include <linux/user.h>
--#include <linux/elfcore.h>
--
--/*
-- * fill in the user structure for an a.out core dump
-- */
--static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
--{
-- struct task_struct *tsk = current;
--
-- dump->magic = CMAGIC;
-- dump->start_code = tsk->mm->start_code;
-- dump->start_stack = regs->ARM_sp & ~(PAGE_SIZE - 1);
--
-- dump->u_tsize = (tsk->mm->end_code - tsk->mm->start_code) >> PAGE_SHIFT;
-- dump->u_dsize = (tsk->mm->brk - tsk->mm->start_data + PAGE_SIZE - 1) >> PAGE_SHIFT;
-- dump->u_ssize = 0;
--
-- memset(dump->u_debugreg, 0, sizeof(dump->u_debugreg));
--
-- if (dump->start_stack < 0x04000000)
-- dump->u_ssize = (0x04000000 - dump->start_stack) >> PAGE_SHIFT;
--
-- dump->regs = *regs;
-- dump->u_fpvalid = dump_fpu (regs, &dump->u_fp);
--}
--
--#endif /* __KERNEL__ */
--#endif /* _ASM_A_OUT_CORE_H */
-diff --git a/arch/arm/include/asm/a.out.h b/arch/arm/include/asm/a.out.h
-deleted file mode 100644
-index 083894b..0000000
---- a/arch/arm/include/asm/a.out.h
-+++ /dev/null
-@@ -1,34 +0,0 @@
--#ifndef __ARM_A_OUT_H__
--#define __ARM_A_OUT_H__
--
--#include <linux/personality.h>
--#include <linux/types.h>
--
--struct exec
--{
-- __u32 a_info; /* Use macros N_MAGIC, etc for access */
-- __u32 a_text; /* length of text, in bytes */
-- __u32 a_data; /* length of data, in bytes */
-- __u32 a_bss; /* length of uninitialized data area for file, in bytes */
-- __u32 a_syms; /* length of symbol table data in file, in bytes */
-- __u32 a_entry; /* start address */
-- __u32 a_trsize; /* length of relocation info for text, in bytes */
-- __u32 a_drsize; /* length of relocation info for data, in bytes */
--};
--
--/*
-- * This is always the same
-- */
--#define N_TXTADDR(a) (0x00008000)
--
--#define N_TRSIZE(a) ((a).a_trsize)
--#define N_DRSIZE(a) ((a).a_drsize)
--#define N_SYMSIZE(a) ((a).a_syms)
--
--#define M_ARM 103
--
--#ifndef LIBRARY_START_TEXT
--#define LIBRARY_START_TEXT (0x00c00000)
--#endif
--
--#endif /* __A_OUT_GNU_H__ */
-diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h
-index b2d9df5..3352451 100644
---- a/arch/arm/include/asm/processor.h
-+++ b/arch/arm/include/asm/processor.h
-@@ -54,7 +54,6 @@ struct thread_struct {
-
- #define start_thread(regs,pc,sp) \
- ({ \
-- unsigned long *stack = (unsigned long *)sp; \
- set_fs(USER_DS); \
- memset(regs->uregs, 0, sizeof(regs->uregs)); \
- if (current->personality & ADDR_LIMIT_32BIT) \
-@@ -66,9 +65,6 @@ struct thread_struct {
- regs->ARM_cpsr |= PSR_ENDSTATE; \
- regs->ARM_pc = pc & ~1; /* pc */ \
- regs->ARM_sp = sp; /* sp */ \
-- regs->ARM_r2 = stack[2]; /* r2 (envp) */ \
-- regs->ARM_r1 = stack[1]; /* r1 (argv) */ \
-- regs->ARM_r0 = stack[0]; /* r0 (argc) */ \
- nommu_start_thread(regs); \
- })
-
-diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
-index 778d248..4a2db48 100644
---- a/arch/arm/kernel/perf_event.c
-+++ b/arch/arm/kernel/perf_event.c
-@@ -116,7 +116,12 @@ armpmu_map_cache_event(const unsigned (*cache_map)
- static int
- armpmu_map_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config)
- {
-- int mapping = (*event_map)[config];
-+ int mapping;
-+
-+ if (config >= PERF_COUNT_HW_MAX)
-+ return -ENOENT;
-+
-+ mapping = (*event_map)[config];
- return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping;
- }
-
-@@ -326,6 +331,9 @@ validate_event(struct pmu_hw_events *hw_events,
- struct hw_perf_event fake_event = event->hw;
- struct pmu *leader_pmu = event->group_leader->pmu;
-
-+ if (is_software_event(event))
-+ return 1;
-+
- if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF)
- return 1;
-
-diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S
-index a6990cb..a68b983 100644
---- a/arch/cris/kernel/vmlinux.lds.S
-+++ b/arch/cris/kernel/vmlinux.lds.S
-@@ -52,6 +52,7 @@ SECTIONS
-
- EXCEPTION_TABLE(4)
-
-+ _sdata = .;
- RODATA
-
- . = ALIGN (4);
-diff --git a/arch/hexagon/kernel/dma.c b/arch/hexagon/kernel/dma.c
-index e711ace..54891e1 100644
---- a/arch/hexagon/kernel/dma.c
-+++ b/arch/hexagon/kernel/dma.c
-@@ -22,6 +22,7 @@
- #include <linux/bootmem.h>
- #include <linux/genalloc.h>
- #include <asm/dma-mapping.h>
-+#include <linux/module.h>
-
- struct dma_map_ops *dma_ops;
- EXPORT_SYMBOL(dma_ops);
-diff --git a/arch/hexagon/kernel/ptrace.c b/arch/hexagon/kernel/ptrace.c
-index bea3f08..8fe0349 100644
---- a/arch/hexagon/kernel/ptrace.c
-+++ b/arch/hexagon/kernel/ptrace.c
-@@ -28,6 +28,7 @@
- #include <linux/ptrace.h>
- #include <linux/regset.h>
- #include <linux/user.h>
-+#include <linux/elf.h>
-
- #include <asm/system.h>
- #include <asm/user.h>
-diff --git a/arch/hexagon/kernel/time.c b/arch/hexagon/kernel/time.c
-index 6bee15c..5d9b33b 100644
---- a/arch/hexagon/kernel/time.c
-+++ b/arch/hexagon/kernel/time.c
-@@ -28,6 +28,7 @@
- #include <linux/of.h>
- #include <linux/of_address.h>
- #include <linux/of_irq.h>
-+#include <linux/module.h>
-
- #include <asm/timer-regs.h>
- #include <asm/hexagon_vm.h>
-diff --git a/arch/hexagon/kernel/vdso.c b/arch/hexagon/kernel/vdso.c
-index 16277c3..e4ceedb 100644
---- a/arch/hexagon/kernel/vdso.c
-+++ b/arch/hexagon/kernel/vdso.c
-@@ -21,6 +21,7 @@
- #include <linux/err.h>
- #include <linux/mm.h>
- #include <linux/vmalloc.h>
-+#include <linux/binfmts.h>
-
- #include <asm/vdso.h>
-
-diff --git a/arch/m32r/boot/compressed/Makefile b/arch/m32r/boot/compressed/Makefile
-index 177716b..01729c2 100644
---- a/arch/m32r/boot/compressed/Makefile
-+++ b/arch/m32r/boot/compressed/Makefile
-@@ -43,9 +43,9 @@ endif
-
- OBJCOPYFLAGS += -R .empty_zero_page
-
--suffix_$(CONFIG_KERNEL_GZIP) = gz
--suffix_$(CONFIG_KERNEL_BZIP2) = bz2
--suffix_$(CONFIG_KERNEL_LZMA) = lzma
-+suffix-$(CONFIG_KERNEL_GZIP) = gz
-+suffix-$(CONFIG_KERNEL_BZIP2) = bz2
-+suffix-$(CONFIG_KERNEL_LZMA) = lzma
-
- $(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE
- $(call if_changed,ld)
-diff --git a/arch/m32r/boot/compressed/misc.c b/arch/m32r/boot/compressed/misc.c
-index 370d608..28a0952 100644
---- a/arch/m32r/boot/compressed/misc.c
-+++ b/arch/m32r/boot/compressed/misc.c
-@@ -28,7 +28,7 @@ static unsigned long free_mem_ptr;
- static unsigned long free_mem_end_ptr;
-
- #ifdef CONFIG_KERNEL_BZIP2
--static void *memset(void *s, int c, size_t n)
-+void *memset(void *s, int c, size_t n)
- {
- char *ss = s;
-
-@@ -39,6 +39,16 @@ static void *memset(void *s, int c, size_t n)
- #endif
-
- #ifdef CONFIG_KERNEL_GZIP
-+void *memcpy(void *dest, const void *src, size_t n)
-+{
-+ char *d = dest;
-+ const char *s = src;
-+ while (n--)
-+ *d++ = *s++;
-+
-+ return dest;
-+}
-+
- #define BOOT_HEAP_SIZE 0x10000
- #include "../../../../lib/decompress_inflate.c"
- #endif
-diff --git a/arch/m68k/emu/natfeat.c b/arch/m68k/emu/natfeat.c
-index 2291a7d..fa277ae 100644
---- a/arch/m68k/emu/natfeat.c
-+++ b/arch/m68k/emu/natfeat.c
-@@ -18,9 +18,11 @@
- #include <asm/machdep.h>
- #include <asm/natfeat.h>
-
-+extern long nf_get_id2(const char *feature_name);
-+
- asm("\n"
--" .global nf_get_id,nf_call\n"
--"nf_get_id:\n"
-+" .global nf_get_id2,nf_call\n"
-+"nf_get_id2:\n"
- " .short 0x7300\n"
- " rts\n"
- "nf_call:\n"
-@@ -29,12 +31,25 @@ asm("\n"
- "1: moveq.l #0,%d0\n"
- " rts\n"
- " .section __ex_table,\"a\"\n"
--" .long nf_get_id,1b\n"
-+" .long nf_get_id2,1b\n"
- " .long nf_call,1b\n"
- " .previous");
--EXPORT_SYMBOL_GPL(nf_get_id);
- EXPORT_SYMBOL_GPL(nf_call);
-
-+long nf_get_id(const char *feature_name)
-+{
-+ /* feature_name may be in vmalloc()ed memory, so make a copy */
-+ char name_copy[32];
-+ size_t n;
-+
-+ n = strlcpy(name_copy, feature_name, sizeof(name_copy));
-+ if (n >= sizeof(name_copy))
-+ return 0;
-+
-+ return nf_get_id2(name_copy);
-+}
-+EXPORT_SYMBOL_GPL(nf_get_id);
-+
- void nfprint(const char *fmt, ...)
- {
- static char buf[256];
-diff --git a/arch/m68k/include/asm/div64.h b/arch/m68k/include/asm/div64.h
-index edb6614..7558032 100644
---- a/arch/m68k/include/asm/div64.h
-+++ b/arch/m68k/include/asm/div64.h
-@@ -13,16 +13,17 @@
- unsigned long long n64; \
- } __n; \
- unsigned long __rem, __upper; \
-+ unsigned long __base = (base); \
- \
- __n.n64 = (n); \
- if ((__upper = __n.n32[0])) { \
- asm ("divul.l %2,%1:%0" \
-- : "=d" (__n.n32[0]), "=d" (__upper) \
-- : "d" (base), "0" (__n.n32[0])); \
-+ : "=d" (__n.n32[0]), "=d" (__upper) \
-+ : "d" (__base), "0" (__n.n32[0])); \
- } \
- asm ("divu.l %2,%1:%0" \
-- : "=d" (__n.n32[1]), "=d" (__rem) \
-- : "d" (base), "1" (__upper), "0" (__n.n32[1])); \
-+ : "=d" (__n.n32[1]), "=d" (__rem) \
-+ : "d" (__base), "1" (__upper), "0" (__n.n32[1])); \
- (n) = __n.n64; \
- __rem; \
- })
-diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig
-index b3f5eec..a470f57 100644
---- a/arch/microblaze/configs/mmu_defconfig
-+++ b/arch/microblaze/configs/mmu_defconfig
-@@ -1,25 +1,22 @@
- CONFIG_EXPERIMENTAL=y
- CONFIG_SYSVIPC=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_FHANDLE=y
-+CONFIG_AUDIT=y
-+CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
- CONFIG_IKCONFIG=y
- CONFIG_IKCONFIG_PROC=y
-+CONFIG_SYSFS_DEPRECATED=y
- CONFIG_SYSFS_DEPRECATED_V2=y
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE="rootfs.cpio"
--CONFIG_INITRAMFS_COMPRESSION_GZIP=y
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_EXPERT=y
- CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--# CONFIG_HOTPLUG is not set
- # CONFIG_BASE_FULL is not set
--# CONFIG_FUTEX is not set
--# CONFIG_EPOLL is not set
--# CONFIG_SIGNALFD is not set
--# CONFIG_SHMEM is not set
-+CONFIG_EMBEDDED=y
- CONFIG_SLAB=y
- CONFIG_MODULES=y
- CONFIG_MODULE_UNLOAD=y
- # CONFIG_BLK_DEV_BSG is not set
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_EFI_PARTITION is not set
- CONFIG_OPT_LIB_ASM=y
- CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1
- CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1
-@@ -37,33 +34,53 @@ CONFIG_UNIX=y
- CONFIG_INET=y
- # CONFIG_INET_LRO is not set
- # CONFIG_IPV6 is not set
-+CONFIG_MTD=y
- CONFIG_PROC_DEVICETREE=y
- CONFIG_BLK_DEV_RAM=y
- CONFIG_BLK_DEV_RAM_SIZE=8192
- CONFIG_NETDEVICES=y
--CONFIG_NET_ETHERNET=y
- CONFIG_XILINX_EMACLITE=y
-+CONFIG_XILINX_LL_TEMAC=y
- # CONFIG_INPUT is not set
- # CONFIG_SERIO is not set
- # CONFIG_VT is not set
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
- CONFIG_SERIAL_UARTLITE=y
- CONFIG_SERIAL_UARTLITE_CONSOLE=y
- # CONFIG_HW_RANDOM is not set
-+CONFIG_XILINX_HWICAP=y
-+CONFIG_I2C=y
-+CONFIG_I2C_XILINX=y
-+CONFIG_SPI=y
-+CONFIG_SPI_XILINX=y
-+CONFIG_GPIOLIB=y
-+CONFIG_GPIO_SYSFS=y
-+CONFIG_GPIO_XILINX=y
- # CONFIG_HWMON is not set
-+CONFIG_WATCHDOG=y
-+CONFIG_XILINX_WATCHDOG=y
-+CONFIG_FB=y
-+CONFIG_FB_XILINX=y
- # CONFIG_USB_SUPPORT is not set
-+CONFIG_UIO=y
-+CONFIG_UIO_PDRV=y
-+CONFIG_UIO_PDRV_GENIRQ=y
-+CONFIG_UIO_DMEM_GENIRQ=y
- CONFIG_EXT2_FS=y
- # CONFIG_DNOTIFY is not set
-+CONFIG_CRAMFS=y
-+CONFIG_ROMFS_FS=y
- CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
- CONFIG_CIFS=y
- CONFIG_CIFS_STATS=y
- CONFIG_CIFS_STATS2=y
--CONFIG_PARTITION_ADVANCED=y
--CONFIG_DEBUG_KERNEL=y
- CONFIG_DETECT_HUNG_TASK=y
- CONFIG_DEBUG_SLAB=y
- CONFIG_DEBUG_SPINLOCK=y
- CONFIG_DEBUG_INFO=y
--# CONFIG_RCU_CPU_STALL_DETECTOR is not set
- CONFIG_EARLY_PRINTK=y
-+CONFIG_KEYS=y
-+CONFIG_ENCRYPTED_KEYS=y
-+CONFIG_KEYS_DEBUG_PROC_KEYS=y
- # CONFIG_CRYPTO_ANSI_CPRNG is not set
-diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig
-index 0249e4b..5454a6d 100644
---- a/arch/microblaze/configs/nommu_defconfig
-+++ b/arch/microblaze/configs/nommu_defconfig
-@@ -1,41 +1,40 @@
- CONFIG_EXPERIMENTAL=y
- CONFIG_SYSVIPC=y
- CONFIG_POSIX_MQUEUE=y
-+CONFIG_FHANDLE=y
-+CONFIG_AUDIT=y
-+CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
- CONFIG_BSD_PROCESS_ACCT=y
- CONFIG_BSD_PROCESS_ACCT_V3=y
- CONFIG_IKCONFIG=y
- CONFIG_IKCONFIG_PROC=y
-+CONFIG_SYSFS_DEPRECATED=y
- CONFIG_SYSFS_DEPRECATED_V2=y
--CONFIG_EXPERT=y
- CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--# CONFIG_HOTPLUG is not set
- # CONFIG_BASE_FULL is not set
-+CONFIG_EMBEDDED=y
- CONFIG_SLAB=y
- CONFIG_MODULES=y
- CONFIG_MODULE_UNLOAD=y
- # CONFIG_BLK_DEV_BSG is not set
--# CONFIG_OPT_LIB_FUNCTION is not set
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_EFI_PARTITION is not set
- CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1
- CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1
- CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1
- CONFIG_XILINX_MICROBLAZE0_USE_DIV=1
- CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=2
- CONFIG_XILINX_MICROBLAZE0_USE_FPU=2
--CONFIG_HIGH_RES_TIMERS=y
- CONFIG_HZ_100=y
- CONFIG_CMDLINE_BOOL=y
--CONFIG_BINFMT_FLAT=y
-+CONFIG_CMDLINE_FORCE=y
- CONFIG_NET=y
- CONFIG_PACKET=y
- CONFIG_UNIX=y
- CONFIG_INET=y
- # CONFIG_INET_LRO is not set
- # CONFIG_IPV6 is not set
--# CONFIG_PREVENT_FIRMWARE_BUILD is not set
- CONFIG_MTD=y
--CONFIG_MTD_CONCAT=y
--CONFIG_MTD_PARTITIONS=y
- CONFIG_MTD_CMDLINE_PARTS=y
- CONFIG_MTD_CHAR=y
- CONFIG_MTD_BLOCK=y
-@@ -45,41 +44,55 @@ CONFIG_MTD_CFI_AMDSTD=y
- CONFIG_MTD_RAM=y
- CONFIG_MTD_UCLINUX=y
- CONFIG_PROC_DEVICETREE=y
--CONFIG_BLK_DEV_NBD=y
- CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_SIZE=8192
- CONFIG_NETDEVICES=y
--CONFIG_NET_ETHERNET=y
-+CONFIG_XILINX_EMACLITE=y
-+CONFIG_XILINX_LL_TEMAC=y
- # CONFIG_INPUT is not set
- # CONFIG_SERIO is not set
- # CONFIG_VT is not set
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
- CONFIG_SERIAL_UARTLITE=y
- CONFIG_SERIAL_UARTLITE_CONSOLE=y
--CONFIG_HW_RANDOM=y
-+# CONFIG_HW_RANDOM is not set
-+CONFIG_XILINX_HWICAP=y
-+CONFIG_I2C=y
-+CONFIG_I2C_XILINX=y
-+CONFIG_SPI=y
-+CONFIG_SPI_XILINX=y
-+CONFIG_GPIOLIB=y
-+CONFIG_GPIO_SYSFS=y
-+CONFIG_GPIO_XILINX=y
- # CONFIG_HWMON is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
-+CONFIG_WATCHDOG=y
-+CONFIG_XILINX_WATCHDOG=y
-+CONFIG_FB=y
-+CONFIG_FB_XILINX=y
-+# CONFIG_USB_SUPPORT is not set
-+CONFIG_UIO=y
-+CONFIG_UIO_PDRV=y
-+CONFIG_UIO_PDRV_GENIRQ=y
-+CONFIG_UIO_DMEM_GENIRQ=y
- CONFIG_EXT2_FS=y
- # CONFIG_DNOTIFY is not set
- CONFIG_CRAMFS=y
- CONFIG_ROMFS_FS=y
- CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
- CONFIG_NFS_V3_ACL=y
--CONFIG_UNUSED_SYMBOLS=y
--CONFIG_DEBUG_FS=y
--CONFIG_DEBUG_KERNEL=y
--CONFIG_DEBUG_SHIRQ=y
-+CONFIG_NLS=y
- CONFIG_DETECT_HUNG_TASK=y
--CONFIG_SCHEDSTATS=y
--CONFIG_TIMER_STATS=y
--CONFIG_DEBUG_OBJECTS=y
--CONFIG_DEBUG_OBJECTS_SELFTEST=y
--CONFIG_DEBUG_OBJECTS_FREE=y
--CONFIG_DEBUG_OBJECTS_TIMERS=y
-+CONFIG_DEBUG_SLAB=y
-+CONFIG_DEBUG_SPINLOCK=y
- CONFIG_DEBUG_INFO=y
--CONFIG_DEBUG_LIST=y
--CONFIG_DEBUG_SG=y
--# CONFIG_RCU_CPU_STALL_DETECTOR is not set
--CONFIG_SYSCTL_SYSCALL_CHECK=y
- CONFIG_EARLY_PRINTK=y
-+CONFIG_KEYS=y
-+CONFIG_ENCRYPTED_KEYS=y
-+CONFIG_KEYS_DEBUG_PROC_KEYS=y
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_MD4=y
-+CONFIG_CRYPTO_MD5=y
-+CONFIG_CRYPTO_ARC4=y
-+CONFIG_CRYPTO_DES=y
- # CONFIG_CRYPTO_ANSI_CPRNG is not set
--# CONFIG_CRC32 is not set
-diff --git a/arch/microblaze/include/asm/futex.h b/arch/microblaze/include/asm/futex.h
-index b0526d2..ff8cde1 100644
---- a/arch/microblaze/include/asm/futex.h
-+++ b/arch/microblaze/include/asm/futex.h
-@@ -24,7 +24,7 @@
- .word 1b,4b,2b,4b; \
- .previous;" \
- : "=&r" (oldval), "=&r" (ret) \
-- : "b" (uaddr), "i" (-EFAULT), "r" (oparg) \
-+ : "r" (uaddr), "i" (-EFAULT), "r" (oparg) \
- ); \
- })
-
-diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
-index 951e18f..16ef838 100644
---- a/arch/powerpc/Kconfig
-+++ b/arch/powerpc/Kconfig
-@@ -937,6 +937,7 @@ config RELOCATABLE
- must live at a different physical address than the primary
- kernel.
-
-+# This value must have zeroes in the bottom 60 bits otherwise lots will break
- config PAGE_OFFSET
- hex
- default "0xc000000000000000"
-diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h
-index dd9c4fd..5b0bde2 100644
---- a/arch/powerpc/include/asm/page.h
-+++ b/arch/powerpc/include/asm/page.h
-@@ -132,9 +132,19 @@ extern phys_addr_t kernstart_addr;
- #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) - PHYSICAL_START + KERNELBASE))
- #define __pa(x) ((unsigned long)(x) + PHYSICAL_START - KERNELBASE)
- #else
-+#ifdef CONFIG_PPC64
-+/*
-+ * gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET
-+ * with -mcmodel=medium, so we use & and | instead of - and + on 64-bit.
-+ */
-+#define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET))
-+#define __pa(x) ((unsigned long)(x) & 0x0fffffffffffffffUL)
-+
-+#else /* 32-bit, non book E */
- #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + PAGE_OFFSET - MEMORY_START))
- #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET + MEMORY_START)
- #endif
-+#endif
-
- /*
- * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI,
-diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c
-index 84daabe..826681d 100644
---- a/arch/powerpc/kernel/lparcfg.c
-+++ b/arch/powerpc/kernel/lparcfg.c
-@@ -37,7 +37,13 @@
- #include <asm/vdso_datapage.h>
- #include <asm/vio.h>
- #include <asm/mmu.h>
-+#include <asm/machdep.h>
-
-+
-+/*
-+ * This isn't a module but we expose that to userspace
-+ * via /proc so leave the definitions here
-+ */
- #define MODULE_VERS "1.9"
- #define MODULE_NAME "lparcfg"
-
-@@ -487,7 +493,8 @@ static void parse_em_data(struct seq_file *m)
- {
- unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
-
-- if (plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS)
-+ if (firmware_has_feature(FW_FEATURE_LPAR) &&
-+ plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS)
- seq_printf(m, "power_mode_data=%016lx\n", retbuf[0]);
- }
-
-@@ -772,7 +779,6 @@ static int lparcfg_open(struct inode *inode, struct file *file)
- }
-
- static const struct file_operations lparcfg_fops = {
-- .owner = THIS_MODULE,
- .read = seq_read,
- .write = lparcfg_write,
- .open = lparcfg_open,
-@@ -799,15 +805,4 @@ static int __init lparcfg_init(void)
- proc_ppc64_lparcfg = ent;
- return 0;
- }
--
--static void __exit lparcfg_cleanup(void)
--{
-- if (proc_ppc64_lparcfg)
-- remove_proc_entry("lparcfg", proc_ppc64_lparcfg->parent);
--}
--
--module_init(lparcfg_init);
--module_exit(lparcfg_cleanup);
--MODULE_DESCRIPTION("Interface for LPAR configuration data");
--MODULE_AUTHOR("Dave Engebretsen");
--MODULE_LICENSE("GPL");
-+machine_device_initcall(pseries, lparcfg_init);
-diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
-index 4db9b1e..dd072b1 100644
---- a/arch/s390/kvm/kvm-s390.c
-+++ b/arch/s390/kvm/kvm-s390.c
-@@ -469,6 +469,8 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
-
- static void __vcpu_run(struct kvm_vcpu *vcpu)
- {
-+ int rc;
-+
- memcpy(&vcpu->arch.sie_block->gg14, &vcpu->arch.guest_gprs[14], 16);
-
- if (need_resched())
-@@ -479,21 +481,24 @@ static void __vcpu_run(struct kvm_vcpu *vcpu)
-
- kvm_s390_deliver_pending_interrupts(vcpu);
-
-+ VCPU_EVENT(vcpu, 6, "entering sie flags %x",
-+ atomic_read(&vcpu->arch.sie_block->cpuflags));
-+
- vcpu->arch.sie_block->icptcode = 0;
- local_irq_disable();
- kvm_guest_enter();
- local_irq_enable();
-- VCPU_EVENT(vcpu, 6, "entering sie flags %x",
-- atomic_read(&vcpu->arch.sie_block->cpuflags));
-- if (sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs)) {
-+ rc = sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs);
-+ local_irq_disable();
-+ kvm_guest_exit();
-+ local_irq_enable();
-+
-+ if (rc) {
- VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
- kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
- }
- VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
- vcpu->arch.sie_block->icptcode);
-- local_irq_disable();
-- kvm_guest_exit();
-- local_irq_enable();
-
- memcpy(&vcpu->arch.guest_gprs[14], &vcpu->arch.sie_block->gg14, 16);
- }
-diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
-index f210d51..87537e2 100644
---- a/arch/sparc/Kconfig
-+++ b/arch/sparc/Kconfig
-@@ -31,6 +31,7 @@ config SPARC
-
- config SPARC32
- def_bool !64BIT
-+ select GENERIC_ATOMIC64
-
- config SPARC64
- def_bool 64BIT
-diff --git a/arch/sparc/include/asm/atomic_32.h b/arch/sparc/include/asm/atomic_32.h
-index 5c3c8b6..07dd35e 100644
---- a/arch/sparc/include/asm/atomic_32.h
-+++ b/arch/sparc/include/asm/atomic_32.h
-@@ -15,6 +15,8 @@
-
- #ifdef __KERNEL__
-
-+#include <asm-generic/atomic64.h>
-+
- #include <asm/system.h>
-
- #define ATOMIC_INIT(i) { (i) }
-diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
-index a3fc437..4961516 100644
---- a/arch/sparc/lib/Makefile
-+++ b/arch/sparc/lib/Makefile
-@@ -40,7 +40,7 @@ lib-$(CONFIG_SPARC64) += copy_in_user.o user_fixup.o memmove.o
- lib-$(CONFIG_SPARC64) += mcount.o ipcsum.o xor.o hweight.o ffs.o
-
- obj-y += iomap.o
--obj-$(CONFIG_SPARC32) += atomic32.o
-+obj-$(CONFIG_SPARC32) += atomic32.o ucmpdi2.o
- obj-y += ksyms.o
- obj-$(CONFIG_SPARC64) += PeeCeeI.o
- obj-y += usercopy.o
-diff --git a/arch/sparc/lib/ucmpdi2.c b/arch/sparc/lib/ucmpdi2.c
-new file mode 100644
-index 0000000..1e06ed5
---- /dev/null
-+++ b/arch/sparc/lib/ucmpdi2.c
-@@ -0,0 +1,19 @@
-+#include <linux/module.h>
-+#include "libgcc.h"
-+
-+word_type __ucmpdi2(unsigned long long a, unsigned long long b)
-+{
-+ const DWunion au = {.ll = a};
-+ const DWunion bu = {.ll = b};
-+
-+ if ((unsigned int) au.s.high < (unsigned int) bu.s.high)
-+ return 0;
-+ else if ((unsigned int) au.s.high > (unsigned int) bu.s.high)
-+ return 2;
-+ if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
-+ return 0;
-+ else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
-+ return 2;
-+ return 1;
-+}
-+EXPORT_SYMBOL(__ucmpdi2);
-diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
-index 739d859..fa4ea09 100644
---- a/arch/x86/kernel/i387.c
-+++ b/arch/x86/kernel/i387.c
-@@ -51,7 +51,7 @@ void __cpuinit mxcsr_feature_mask_init(void)
- clts();
- if (cpu_has_fxsr) {
- memset(&fx_scratch, 0, sizeof(struct i387_fxsave_struct));
-- asm volatile("fxsave %0" : : "m" (fx_scratch));
-+ asm volatile("fxsave %0" : "+m" (fx_scratch));
- mask = fx_scratch.mxcsr_mask;
- if (mask == 0)
- mask = 0x0000ffbf;
-diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
-index 0514890..cdb2fc9 100644
---- a/arch/x86/kernel/sys_x86_64.c
-+++ b/arch/x86/kernel/sys_x86_64.c
-@@ -115,7 +115,7 @@ static void find_start_end(unsigned long flags, unsigned long *begin,
- *begin = new_begin;
- }
- } else {
-- *begin = TASK_UNMAPPED_BASE;
-+ *begin = current->mm->mmap_legacy_base;
- *end = TASK_SIZE;
- }
- }
-diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
-index 845df68..5c1ae28 100644
---- a/arch/x86/mm/mmap.c
-+++ b/arch/x86/mm/mmap.c
-@@ -112,12 +112,14 @@ static unsigned long mmap_legacy_base(void)
- */
- void arch_pick_mmap_layout(struct mm_struct *mm)
- {
-+ mm->mmap_legacy_base = mmap_legacy_base();
-+ mm->mmap_base = mmap_base();
-+
- if (mmap_is_legacy()) {
-- mm->mmap_base = mmap_legacy_base();
-+ mm->mmap_base = mm->mmap_legacy_base;
- mm->get_unmapped_area = arch_get_unmapped_area;
- mm->unmap_area = arch_unmap_area;
- } else {
-- mm->mmap_base = mmap_base();
- mm->get_unmapped_area = arch_get_unmapped_area_topdown;
- mm->unmap_area = arch_unmap_area_topdown;
- }
-diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
-index 6e5a7f1..4d54b38 100644
---- a/arch/x86/xen/setup.c
-+++ b/arch/x86/xen/setup.c
-@@ -212,6 +212,17 @@ static void xen_align_and_add_e820_region(u64 start, u64 size, int type)
- e820_add_region(start, end - start, type);
- }
-
-+void xen_ignore_unusable(struct e820entry *list, size_t map_size)
-+{
-+ struct e820entry *entry;
-+ unsigned int i;
-+
-+ for (i = 0, entry = list; i < map_size; i++, entry++) {
-+ if (entry->type == E820_UNUSABLE)
-+ entry->type = E820_RAM;
-+ }
-+}
-+
- /**
- * machine_specific_memory_setup - Hook for machine specific memory setup.
- **/
-@@ -250,6 +261,17 @@ char * __init xen_memory_setup(void)
- }
- BUG_ON(rc);
-
-+ /*
-+ * Xen won't allow a 1:1 mapping to be created to UNUSABLE
-+ * regions, so if we're using the machine memory map leave the
-+ * region as RAM as it is in the pseudo-physical map.
-+ *
-+ * UNUSABLE regions in domUs are not handled and will need
-+ * a patch in the future.
-+ */
-+ if (xen_initial_domain())
-+ xen_ignore_unusable(map, memmap.nr_entries);
-+
- /* Make sure the Xen-supplied memory map is well-ordered. */
- sanitize_e820_map(map, memmap.nr_entries, &memmap.nr_entries);
-
-diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
-index a1a4b8e..c749b93 100644
---- a/drivers/acpi/battery.c
-+++ b/drivers/acpi/battery.c
-@@ -117,6 +117,7 @@ struct acpi_battery {
- struct acpi_device *device;
- struct notifier_block pm_nb;
- unsigned long update_time;
-+ int revision;
- int rate_now;
- int capacity_now;
- int voltage_now;
-@@ -350,6 +351,7 @@ static struct acpi_offsets info_offsets[] = {
- };
-
- static struct acpi_offsets extended_info_offsets[] = {
-+ {offsetof(struct acpi_battery, revision), 0},
- {offsetof(struct acpi_battery, power_unit), 0},
- {offsetof(struct acpi_battery, design_capacity), 0},
- {offsetof(struct acpi_battery, full_charge_capacity), 0},
-diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
-index cf047c4..e7b3a9e 100644
---- a/drivers/ata/Kconfig
-+++ b/drivers/ata/Kconfig
-@@ -93,7 +93,7 @@ config SATA_FSL
- If unsure, say N.
-
- config SATA_INIC162X
-- tristate "Initio 162x SATA support"
-+ tristate "Initio 162x SATA support (Very Experimental)"
- depends on PCI
- help
- This option enables support for Initio 162x Serial ATA.
-diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
-index f63a588..f5c35be 100644
---- a/drivers/ata/libata-pmp.c
-+++ b/drivers/ata/libata-pmp.c
-@@ -289,24 +289,24 @@ static int sata_pmp_configure(struct ata_device *dev, int print_info)
-
- /* Disable sending Early R_OK.
- * With "cached read" HDD testing and multiple ports busy on a SATA
-- * host controller, 3726 PMP will very rarely drop a deferred
-+ * host controller, 3x26 PMP will very rarely drop a deferred
- * R_OK that was intended for the host. Symptom will be all
- * 5 drives under test will timeout, get reset, and recover.
- */
-- if (vendor == 0x1095 && devid == 0x3726) {
-+ if (vendor == 0x1095 && (devid == 0x3726 || devid == 0x3826)) {
- u32 reg;
-
- err_mask = sata_pmp_read(&ap->link, PMP_GSCR_SII_POL, &reg);
- if (err_mask) {
- rc = -EIO;
-- reason = "failed to read Sil3726 Private Register";
-+ reason = "failed to read Sil3x26 Private Register";
- goto fail;
- }
- reg &= ~0x1;
- err_mask = sata_pmp_write(&ap->link, PMP_GSCR_SII_POL, reg);
- if (err_mask) {
- rc = -EIO;
-- reason = "failed to write Sil3726 Private Register";
-+ reason = "failed to write Sil3x26 Private Register";
- goto fail;
- }
- }
-@@ -383,8 +383,8 @@ static void sata_pmp_quirks(struct ata_port *ap)
- u16 devid = sata_pmp_gscr_devid(gscr);
- struct ata_link *link;
-
-- if (vendor == 0x1095 && devid == 0x3726) {
-- /* sil3726 quirks */
-+ if (vendor == 0x1095 && (devid == 0x3726 || devid == 0x3826)) {
-+ /* sil3x26 quirks */
- ata_for_each_link(link, ap, EDGE) {
- /* link reports offline after LPM */
- link->flags |= ATA_LFLAG_NO_LPM;
-diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
-index 5c7d70c..3a8b55e 100644
---- a/drivers/ata/sata_inic162x.c
-+++ b/drivers/ata/sata_inic162x.c
-@@ -6,6 +6,18 @@
- *
- * This file is released under GPL v2.
- *
-+ * **** WARNING ****
-+ *
-+ * This driver never worked properly and unfortunately data corruption is
-+ * relatively common. There isn't anyone working on the driver and there's
-+ * no support from the vendor. Do not use this driver in any production
-+ * environment.
-+ *
-+ * http://thread.gmane.org/gmane.linux.debian.devel.bugs.rc/378525/focus=54491
-+ * https://bugzilla.kernel.org/show_bug.cgi?id=60565
-+ *
-+ * *****************
-+ *
- * This controller is eccentric and easily locks up if something isn't
- * right. Documentation is available at initio's website but it only
- * documents registers (not programming model).
-@@ -809,6 +821,8 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
-
- ata_print_version_once(&pdev->dev, DRV_VERSION);
-
-+ dev_alert(&pdev->dev, "inic162x support is broken with common data corruption issues and will be disabled by default, contact linux-ide@vger.kernel.org if in production use\n");
-+
- /* alloc host */
- host = ata_host_alloc_pinfo(&pdev->dev, ppi, NR_PORTS);
- hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
-diff --git a/drivers/base/memory.c b/drivers/base/memory.c
-index 8272d92..732ad0d 100644
---- a/drivers/base/memory.c
-+++ b/drivers/base/memory.c
-@@ -172,6 +172,8 @@ static ssize_t show_mem_removable(struct sys_device *dev,
- container_of(dev, struct memory_block, sysdev);
-
- for (i = 0; i < sections_per_block; i++) {
-+ if (!present_section_nr(mem->start_section_nr + i))
-+ continue;
- pfn = section_nr_to_pfn(mem->start_section_nr + i);
- ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION);
- }
-diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
-index 79038e5..6790cf7 100644
---- a/drivers/base/power/domain.c
-+++ b/drivers/base/power/domain.c
-@@ -751,8 +751,7 @@ static int pm_genpd_resume_noirq(struct device *dev)
- if (IS_ERR(genpd))
- return -EINVAL;
-
-- if (genpd->suspend_power_off
-- || (dev->power.wakeup_path && genpd_dev_active_wakeup(genpd, dev)))
-+ if (genpd->suspend_power_off)
- return 0;
-
- /*
-diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
-index 853fdf8..bde72f7 100644
---- a/drivers/bluetooth/ath3k.c
-+++ b/drivers/bluetooth/ath3k.c
-@@ -89,6 +89,11 @@ static struct usb_device_id ath3k_table[] = {
- { USB_DEVICE(0x13d3, 0x3393) },
- { USB_DEVICE(0x0489, 0xe04e) },
- { USB_DEVICE(0x0489, 0xe056) },
-+ { USB_DEVICE(0x0489, 0xe04d) },
-+ { USB_DEVICE(0x04c5, 0x1330) },
-+ { USB_DEVICE(0x13d3, 0x3402) },
-+ { USB_DEVICE(0x0cf3, 0x3121) },
-+ { USB_DEVICE(0x0cf3, 0xe003) },
-
- /* Atheros AR5BBU12 with sflash firmware */
- { USB_DEVICE(0x0489, 0xE02C) },
-@@ -125,6 +130,11 @@ static struct usb_device_id ath3k_blist_tbl[] = {
- { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },
-
- /* Atheros AR5BBU22 with sflash firmware */
- { USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 },
-diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index 6b784b7..1bd3924 100644
---- a/drivers/bluetooth/btusb.c
-+++ b/drivers/bluetooth/btusb.c
-@@ -63,6 +63,9 @@ static struct usb_device_id btusb_table[] = {
- /* Apple-specific (Broadcom) devices */
- { USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01) },
-
-+ /* MediaTek MT76x0E */
-+ { USB_DEVICE(0x0e8d, 0x763f) },
-+
- /* Broadcom SoftSailing reporting vendor specific */
- { USB_DEVICE(0x0a5c, 0x21e1) },
-
-@@ -156,6 +159,11 @@ static struct usb_device_id blacklist_table[] = {
- { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },
-
- /* Atheros AR5BBU12 with sflash firmware */
- { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
-diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
-index d5ae736..c68b8ad 100644
---- a/drivers/char/virtio_console.c
-+++ b/drivers/char/virtio_console.c
-@@ -257,9 +257,12 @@ static struct port *find_port_by_devt_in_portdev(struct ports_device *portdev,
- unsigned long flags;
-
- spin_lock_irqsave(&portdev->ports_lock, flags);
-- list_for_each_entry(port, &portdev->ports, list)
-- if (port->cdev->dev == dev)
-+ list_for_each_entry(port, &portdev->ports, list) {
-+ if (port->cdev->dev == dev) {
-+ kref_get(&port->kref);
- goto out;
-+ }
-+ }
- port = NULL;
- out:
- spin_unlock_irqrestore(&portdev->ports_lock, flags);
-@@ -634,6 +637,10 @@ static ssize_t port_fops_read(struct file *filp, char __user *ubuf,
-
- port = filp->private_data;
-
-+ /* Port is hot-unplugged. */
-+ if (!port->guest_connected)
-+ return -ENODEV;
-+
- if (!port_has_data(port)) {
- /*
- * If nothing's connected on the host just return 0 in
-@@ -650,7 +657,7 @@ static ssize_t port_fops_read(struct file *filp, char __user *ubuf,
- if (ret < 0)
- return ret;
- }
-- /* Port got hot-unplugged. */
-+ /* Port got hot-unplugged while we were waiting above. */
- if (!port->guest_connected)
- return -ENODEV;
- /*
-@@ -793,14 +800,14 @@ static int port_fops_open(struct inode *inode, struct file *filp)
- struct port *port;
- int ret;
-
-+ /* We get the port with a kref here */
- port = find_port_by_devt(cdev->dev);
-+ if (!port) {
-+ /* Port was unplugged before we could proceed */
-+ return -ENXIO;
-+ }
- filp->private_data = port;
-
-- /* Prevent against a port getting hot-unplugged at the same time */
-- spin_lock_irq(&port->portdev->ports_lock);
-- kref_get(&port->kref);
-- spin_unlock_irq(&port->portdev->ports_lock);
--
- /*
- * Don't allow opening of console port devices -- that's done
- * via /dev/hvc
-@@ -1264,14 +1271,6 @@ static void remove_port(struct kref *kref)
-
- port = container_of(kref, struct port, kref);
-
-- sysfs_remove_group(&port->dev->kobj, &port_attribute_group);
-- device_destroy(pdrvdata.class, port->dev->devt);
-- cdev_del(port->cdev);
--
-- kfree(port->name);
--
-- debugfs_remove(port->debugfs_file);
--
- kfree(port);
- }
-
-@@ -1289,12 +1288,14 @@ static void unplug_port(struct port *port)
- spin_unlock_irq(&port->portdev->ports_lock);
-
- if (port->guest_connected) {
-+ /* Let the app know the port is going down. */
-+ send_sigio_to_port(port);
-+
-+ /* Do this after sigio is actually sent */
- port->guest_connected = false;
- port->host_connected = false;
-- wake_up_interruptible(&port->waitqueue);
-
-- /* Let the app know the port is going down. */
-- send_sigio_to_port(port);
-+ wake_up_interruptible(&port->waitqueue);
- }
-
- if (is_console_port(port)) {
-@@ -1320,6 +1321,14 @@ static void unplug_port(struct port *port)
- */
- port->portdev = NULL;
-
-+ sysfs_remove_group(&port->dev->kobj, &port_attribute_group);
-+ device_destroy(pdrvdata.class, port->dev->devt);
-+ cdev_del(port->cdev);
-+
-+ kfree(port->name);
-+
-+ debugfs_remove(port->debugfs_file);
-+
- /*
- * Locks around here are not necessary - a port can't be
- * opened after we removed the port struct from ports_list
-diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
-index 144d37c..61274bf 100644
---- a/drivers/gpu/drm/i915/i915_drv.h
-+++ b/drivers/gpu/drm/i915/i915_drv.h
-@@ -275,6 +275,7 @@ enum intel_pch {
- #define QUIRK_PIPEA_FORCE (1<<0)
- #define QUIRK_LVDS_SSC_DISABLE (1<<1)
- #define QUIRK_INVERT_BRIGHTNESS (1<<2)
-+#define QUIRK_NO_PCH_PWM_ENABLE (1<<3)
-
- struct intel_fbdev;
- struct intel_fbc_work;
-diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
-index 124dd87..97a050f 100644
---- a/drivers/gpu/drm/i915/i915_reg.h
-+++ b/drivers/gpu/drm/i915/i915_reg.h
-@@ -362,6 +362,7 @@
- #define IPEIR_I965 0x02064
- #define IPEHR_I965 0x02068
- #define INSTDONE_I965 0x0206c
-+#define RING_INSTPM(base) ((base)+0xc0)
- #define INSTPS 0x02070 /* 965+ only */
- #define INSTDONE1 0x0207c /* 965+ only */
- #define ACTHD_I965 0x02074
-@@ -458,6 +459,8 @@
- will not assert AGPBUSY# and will only
- be delivered when out of C3. */
- #define INSTPM_FORCE_ORDERING (1<<7) /* GEN6+ */
-+#define INSTPM_TLB_INVALIDATE (1<<9)
-+#define INSTPM_SYNC_FLUSH (1<<5)
- #define ACTHD 0x020c8
- #define FW_BLC 0x020d8
- #define FW_BLC2 0x020dc
-@@ -3513,7 +3516,7 @@
- #define EDP_LINK_TRAIN_600MV_0DB_IVB (0x30 <<22)
- #define EDP_LINK_TRAIN_600MV_3_5DB_IVB (0x36 <<22)
- #define EDP_LINK_TRAIN_800MV_0DB_IVB (0x38 <<22)
--#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x33 <<22)
-+#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x3e <<22)
-
- /* legacy values */
- #define EDP_LINK_TRAIN_500MV_0DB_IVB (0x00 <<22)
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index cfbb893..ee29c1f 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -8842,6 +8842,17 @@ static void quirk_invert_brightness(struct drm_device *dev)
- dev_priv->quirks |= QUIRK_INVERT_BRIGHTNESS;
- }
-
-+/*
-+ * Some machines (Dell XPS13) suffer broken backlight controls if
-+ * BLM_PCH_PWM_ENABLE is set.
-+ */
-+static void quirk_no_pcm_pwm_enable(struct drm_device *dev)
-+{
-+ struct drm_i915_private *dev_priv = dev->dev_private;
-+ dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE;
-+ DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n");
-+}
-+
- struct intel_quirk {
- int device;
- int subsystem_vendor;
-@@ -8916,6 +8927,11 @@ struct intel_quirk intel_quirks[] = {
-
- /* Acer/Packard Bell NCL20 */
- { 0x2a42, 0x1025, 0x034b, quirk_invert_brightness },
-+
-+ /* Dell XPS13 HD Sandy Bridge */
-+ { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
-+ /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */
-+ { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable },
- };
-
- static void intel_init_quirks(struct drm_device *dev)
-diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
-index 2ffa740..74d312f 100644
---- a/drivers/gpu/drm/i915/intel_lvds.c
-+++ b/drivers/gpu/drm/i915/intel_lvds.c
-@@ -402,13 +402,7 @@ static void intel_lvds_prepare(struct drm_encoder *encoder)
- {
- struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
-
-- /*
-- * Prior to Ironlake, we must disable the pipe if we want to adjust
-- * the panel fitter. However at all other times we can just reset
-- * the registers regardless.
-- */
-- if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty)
-- intel_lvds_disable(intel_lvds);
-+ intel_lvds_disable(intel_lvds);
- }
-
- static void intel_lvds_commit(struct drm_encoder *encoder)
-@@ -1075,7 +1069,8 @@ bool intel_lvds_init(struct drm_device *dev)
- goto failed;
-
- out:
-- if (HAS_PCH_SPLIT(dev)) {
-+ if (HAS_PCH_SPLIT(dev) &&
-+ !(dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)) {
- u32 pwm;
-
- pipe = (I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT) ? 1 : 0;
-diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
-index 38a7793..3c55cf6 100644
---- a/drivers/gpu/drm/i915/intel_ringbuffer.c
-+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
-@@ -776,6 +776,18 @@ void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
-
- I915_WRITE(mmio, (u32)ring->status_page.gfx_addr);
- POSTING_READ(mmio);
-+
-+ /* Flush the TLB for this page */
-+ if (INTEL_INFO(dev)->gen >= 6) {
-+ u32 reg = RING_INSTPM(ring->mmio_base);
-+ I915_WRITE(reg,
-+ _MASKED_BIT_ENABLE(INSTPM_TLB_INVALIDATE |
-+ INSTPM_SYNC_FLUSH));
-+ if (wait_for((I915_READ(reg) & INSTPM_SYNC_FLUSH) == 0,
-+ 1000))
-+ DRM_ERROR("%s: wait for SyncFlush to complete for TLB invalidation timed out\n",
-+ ring->name);
-+ }
- }
-
- static int
-diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
-index d969f3c..afb351a 100644
---- a/drivers/gpu/drm/radeon/atom.c
-+++ b/drivers/gpu/drm/radeon/atom.c
-@@ -1220,12 +1220,17 @@ int atom_execute_table(struct atom_context *ctx, int index, uint32_t * params)
- int r;
-
- mutex_lock(&ctx->mutex);
-+ /* reset data block */
-+ ctx->data_block = 0;
- /* reset reg block */
- ctx->reg_block = 0;
- /* reset fb window */
- ctx->fb_base = 0;
- /* reset io mode */
- ctx->io_mode = ATOM_IO_MM;
-+ /* reset divmul */
-+ ctx->divmul[0] = 0;
-+ ctx->divmul[1] = 0;
- r = atom_execute_table_locked(ctx, index, params);
- mutex_unlock(&ctx->mutex);
- return r;
-diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
-index 9bea4a6..f5962a0 100644
---- a/drivers/gpu/drm/radeon/evergreen.c
-+++ b/drivers/gpu/drm/radeon/evergreen.c
-@@ -3036,6 +3036,8 @@ static int evergreen_startup(struct radeon_device *rdev)
- /* enable pcie gen2 link */
- evergreen_pcie_gen2_enable(rdev);
-
-+ evergreen_mc_program(rdev);
-+
- if (ASIC_IS_DCE5(rdev)) {
- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
- r = ni_init_microcode(rdev);
-@@ -3063,7 +3065,6 @@ static int evergreen_startup(struct radeon_device *rdev)
- if (r)
- return r;
-
-- evergreen_mc_program(rdev);
- if (rdev->flags & RADEON_IS_AGP) {
- evergreen_agp_enable(rdev);
- } else {
-diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
-index 3f9705b..77e6fb1 100644
---- a/drivers/gpu/drm/radeon/ni.c
-+++ b/drivers/gpu/drm/radeon/ni.c
-@@ -1353,6 +1353,8 @@ static int cayman_startup(struct radeon_device *rdev)
- /* enable pcie gen2 link */
- evergreen_pcie_gen2_enable(rdev);
-
-+ evergreen_mc_program(rdev);
-+
- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
- r = ni_init_microcode(rdev);
- if (r) {
-@@ -1370,7 +1372,6 @@ static int cayman_startup(struct radeon_device *rdev)
- if (r)
- return r;
-
-- evergreen_mc_program(rdev);
- r = cayman_pcie_gart_enable(rdev);
- if (r)
- return r;
-diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
-index 3d46d7d4..57e45c6 100644
---- a/drivers/gpu/drm/radeon/r600.c
-+++ b/drivers/gpu/drm/radeon/r600.c
-@@ -2415,6 +2415,8 @@ int r600_startup(struct radeon_device *rdev)
- /* enable pcie gen2 link */
- r600_pcie_gen2_enable(rdev);
-
-+ r600_mc_program(rdev);
-+
- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
- r = r600_init_microcode(rdev);
- if (r) {
-@@ -2427,7 +2429,6 @@ int r600_startup(struct radeon_device *rdev)
- if (r)
- return r;
-
-- r600_mc_program(rdev);
- if (rdev->flags & RADEON_IS_AGP) {
- r600_agp_enable(rdev);
- } else {
-diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
-index 63db75d..3e72074 100644
---- a/drivers/gpu/drm/radeon/rv770.c
-+++ b/drivers/gpu/drm/radeon/rv770.c
-@@ -1057,6 +1057,8 @@ static int rv770_startup(struct radeon_device *rdev)
- /* enable pcie gen2 link */
- rv770_pcie_gen2_enable(rdev);
-
-+ rv770_mc_program(rdev);
-+
- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
- r = r600_init_microcode(rdev);
- if (r) {
-@@ -1069,7 +1071,6 @@ static int rv770_startup(struct radeon_device *rdev)
- if (r)
- return r;
-
-- rv770_mc_program(rdev);
- if (rdev->flags & RADEON_IS_AGP) {
- rv770_agp_enable(rdev);
- } else {
-diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c
-index c41226a..2952249 100644
---- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c
-+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c
-@@ -29,7 +29,9 @@
- #include "drmP.h"
- #include "ttm/ttm_bo_driver.h"
-
--#define VMW_PPN_SIZE sizeof(unsigned long)
-+#define VMW_PPN_SIZE (sizeof(unsigned long))
-+/* A future safe maximum remap size. */
-+#define VMW_PPN_PER_REMAP ((31 * 1024) / VMW_PPN_SIZE)
-
- static int vmw_gmr2_bind(struct vmw_private *dev_priv,
- struct page *pages[],
-@@ -38,43 +40,61 @@ static int vmw_gmr2_bind(struct vmw_private *dev_priv,
- {
- SVGAFifoCmdDefineGMR2 define_cmd;
- SVGAFifoCmdRemapGMR2 remap_cmd;
-- uint32_t define_size = sizeof(define_cmd) + 4;
-- uint32_t remap_size = VMW_PPN_SIZE * num_pages + sizeof(remap_cmd) + 4;
- uint32_t *cmd;
- uint32_t *cmd_orig;
-+ uint32_t define_size = sizeof(define_cmd) + sizeof(*cmd);
-+ uint32_t remap_num = num_pages / VMW_PPN_PER_REMAP + ((num_pages % VMW_PPN_PER_REMAP) > 0);
-+ uint32_t remap_size = VMW_PPN_SIZE * num_pages + (sizeof(remap_cmd) + sizeof(*cmd)) * remap_num;
-+ uint32_t remap_pos = 0;
-+ uint32_t cmd_size = define_size + remap_size;
- uint32_t i;
-
-- cmd_orig = cmd = vmw_fifo_reserve(dev_priv, define_size + remap_size);
-+ cmd_orig = cmd = vmw_fifo_reserve(dev_priv, cmd_size);
- if (unlikely(cmd == NULL))
- return -ENOMEM;
-
- define_cmd.gmrId = gmr_id;
- define_cmd.numPages = num_pages;
-
-+ *cmd++ = SVGA_CMD_DEFINE_GMR2;
-+ memcpy(cmd, &define_cmd, sizeof(define_cmd));
-+ cmd += sizeof(define_cmd) / sizeof(*cmd);
-+
-+ /*
-+ * Need to split the command if there are too many
-+ * pages that goes into the gmr.
-+ */
-+
- remap_cmd.gmrId = gmr_id;
- remap_cmd.flags = (VMW_PPN_SIZE > sizeof(*cmd)) ?
- SVGA_REMAP_GMR2_PPN64 : SVGA_REMAP_GMR2_PPN32;
-- remap_cmd.offsetPages = 0;
-- remap_cmd.numPages = num_pages;
-
-- *cmd++ = SVGA_CMD_DEFINE_GMR2;
-- memcpy(cmd, &define_cmd, sizeof(define_cmd));
-- cmd += sizeof(define_cmd) / sizeof(uint32);
-+ while (num_pages > 0) {
-+ unsigned long nr = min(num_pages, (unsigned long)VMW_PPN_PER_REMAP);
-+
-+ remap_cmd.offsetPages = remap_pos;
-+ remap_cmd.numPages = nr;
-
-- *cmd++ = SVGA_CMD_REMAP_GMR2;
-- memcpy(cmd, &remap_cmd, sizeof(remap_cmd));
-- cmd += sizeof(remap_cmd) / sizeof(uint32);
-+ *cmd++ = SVGA_CMD_REMAP_GMR2;
-+ memcpy(cmd, &remap_cmd, sizeof(remap_cmd));
-+ cmd += sizeof(remap_cmd) / sizeof(*cmd);
-
-- for (i = 0; i < num_pages; ++i) {
-- if (VMW_PPN_SIZE <= 4)
-- *cmd = page_to_pfn(*pages++);
-- else
-- *((uint64_t *)cmd) = page_to_pfn(*pages++);
-+ for (i = 0; i < nr; ++i) {
-+ if (VMW_PPN_SIZE <= 4)
-+ *cmd = page_to_pfn(*pages++);
-+ else
-+ *((uint64_t *)cmd) = page_to_pfn(*pages++);
-
-- cmd += VMW_PPN_SIZE / sizeof(*cmd);
-+ cmd += VMW_PPN_SIZE / sizeof(*cmd);
-+ }
-+
-+ num_pages -= nr;
-+ remap_pos += nr;
- }
-
-- vmw_fifo_commit(dev_priv, define_size + remap_size);
-+ BUG_ON(cmd != cmd_orig + cmd_size / sizeof(*cmd));
-+
-+ vmw_fifo_commit(dev_priv, cmd_size);
-
- return 0;
- }
-diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c
-index c6d1ce0..a9726c1 100644
---- a/drivers/hwmon/adt7470.c
-+++ b/drivers/hwmon/adt7470.c
-@@ -215,7 +215,7 @@ static inline int adt7470_write_word_data(struct i2c_client *client, u8 reg,
- u16 value)
- {
- return i2c_smbus_write_byte_data(client, reg, value & 0xFF)
-- && i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
-+ || i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
- }
-
- static void adt7470_init_client(struct i2c_client *client)
-diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index 298e02a..c706a7b 100644
---- a/drivers/md/raid1.c
-+++ b/drivers/md/raid1.c
-@@ -1139,7 +1139,7 @@ read_again:
- * know the original bi_idx, so we just free
- * them all
- */
-- __bio_for_each_segment(bvec, mbio, j, 0)
-+ bio_for_each_segment_all(bvec, mbio, j)
- bvec->bv_page = r1_bio->behind_bvecs[j].bv_page;
- if (test_bit(WriteMostly, &conf->mirrors[i].rdev->flags))
- atomic_inc(&r1_bio->behind_remaining);
-diff --git a/drivers/net/arcnet/arcnet.c b/drivers/net/arcnet/arcnet.c
-index a746ba2..a956053 100644
---- a/drivers/net/arcnet/arcnet.c
-+++ b/drivers/net/arcnet/arcnet.c
-@@ -1007,7 +1007,7 @@ static void arcnet_rx(struct net_device *dev, int bufnum)
-
- soft = &pkt.soft.rfc1201;
-
-- lp->hw.copy_from_card(dev, bufnum, 0, &pkt, sizeof(ARC_HDR_SIZE));
-+ lp->hw.copy_from_card(dev, bufnum, 0, &pkt, ARC_HDR_SIZE);
- if (pkt.hard.offset[0]) {
- ofs = pkt.hard.offset[0];
- length = 256 - ofs;
-diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
-index fcd0e47..2a7d091 100644
---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
-+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c
-@@ -108,9 +108,8 @@ s32 ixgbe_dcb_config_tx_desc_arbiter_82598(struct ixgbe_hw *hw,
-
- /* Enable arbiter */
- reg &= ~IXGBE_DPMCS_ARBDIS;
-- /* Enable DFP and Recycle mode */
-- reg |= (IXGBE_DPMCS_TDPAC | IXGBE_DPMCS_TRM);
- reg |= IXGBE_DPMCS_TSOEF;
-+
- /* Configure Max TSO packet size 34KB including payload and headers */
- reg |= (0x4 << IXGBE_DPMCS_MTSOS_SHIFT);
-
-diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
-index b19841a..00f1367 100644
---- a/drivers/net/ifb.c
-+++ b/drivers/net/ifb.c
-@@ -34,6 +34,7 @@
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/moduleparam.h>
-+#include <linux/sched.h>
- #include <net/pkt_sched.h>
- #include <net/net_namespace.h>
-
-diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
-index f3d17f8..a8e4640 100644
---- a/drivers/net/usb/smsc75xx.c
-+++ b/drivers/net/usb/smsc75xx.c
-@@ -43,7 +43,6 @@
- #define EEPROM_MAC_OFFSET (0x01)
- #define DEFAULT_TX_CSUM_ENABLE (true)
- #define DEFAULT_RX_CSUM_ENABLE (true)
--#define DEFAULT_TSO_ENABLE (true)
- #define SMSC75XX_INTERNAL_PHY_ID (1)
- #define SMSC75XX_TX_OVERHEAD (8)
- #define MAX_RX_FIFO_SIZE (20 * 1024)
-@@ -1035,17 +1034,14 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf)
-
- INIT_WORK(&pdata->set_multicast, smsc75xx_deferred_multicast_write);
-
-- if (DEFAULT_TX_CSUM_ENABLE) {
-+ if (DEFAULT_TX_CSUM_ENABLE)
- dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-- if (DEFAULT_TSO_ENABLE)
-- dev->net->features |= NETIF_F_SG |
-- NETIF_F_TSO | NETIF_F_TSO6;
-- }
-+
- if (DEFAULT_RX_CSUM_ENABLE)
- dev->net->features |= NETIF_F_RXCSUM;
-
- dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
-- NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_RXCSUM;
-+ NETIF_F_RXCSUM;
-
- /* Init all registers */
- ret = smsc75xx_reset(dev);
-@@ -1170,8 +1166,6 @@ static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev,
- {
- u32 tx_cmd_a, tx_cmd_b;
-
-- skb_linearize(skb);
--
- if (skb_headroom(skb) < SMSC75XX_TX_OVERHEAD) {
- struct sk_buff *skb2 =
- skb_copy_expand(skb, SMSC75XX_TX_OVERHEAD, 0, flags);
-diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
-index 84890d5..ef921e1 100644
---- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
-@@ -851,6 +851,7 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv,
- if (error != 0)
- goto err_rx;
-
-+ ath9k_hw_disable(priv->ah);
- #ifdef CONFIG_MAC80211_LEDS
- /* must be initialized before ieee80211_register_hw */
- priv->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(priv->hw,
-diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
-index a48bb83..9a57149 100644
---- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
-@@ -448,6 +448,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv,
- struct ieee80211_conf *cur_conf = &priv->hw->conf;
- bool txok;
- int slot;
-+ int hdrlen, padsize;
-
- slot = strip_drv_header(priv, skb);
- if (slot < 0) {
-@@ -504,6 +505,15 @@ send_mac80211:
-
- ath9k_htc_tx_clear_slot(priv, slot);
-
-+ /* Remove padding before handing frame back to mac80211 */
-+ hdrlen = ieee80211_get_hdrlen_from_skb(skb);
-+
-+ padsize = hdrlen & 3;
-+ if (padsize && skb->len > hdrlen + padsize) {
-+ memmove(skb->data + padsize, skb->data, hdrlen);
-+ skb_pull(skb, padsize);
-+ }
-+
- /* Send status to mac80211 */
- ieee80211_tx_status(priv->hw, skb);
- }
-diff --git a/drivers/net/wireless/hostap/hostap_ioctl.c b/drivers/net/wireless/hostap/hostap_ioctl.c
-index 045a936..271e818 100644
---- a/drivers/net/wireless/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
-@@ -522,9 +522,9 @@ static int prism2_ioctl_giwaplist(struct net_device *dev,
-
- data->length = prism2_ap_get_sta_qual(local, addr, qual, IW_MAX_AP, 1);
-
-- memcpy(extra, &addr, sizeof(struct sockaddr) * data->length);
-+ memcpy(extra, addr, sizeof(struct sockaddr) * data->length);
- data->flags = 1; /* has quality information */
-- memcpy(extra + sizeof(struct sockaddr) * data->length, &qual,
-+ memcpy(extra + sizeof(struct sockaddr) * data->length, qual,
- sizeof(struct iw_quality) * data->length);
-
- kfree(addr);
-diff --git a/drivers/net/wireless/iwlegacy/iwl-core.c b/drivers/net/wireless/iwlegacy/iwl-core.c
-index 1bb64c9..09891e5 100644
---- a/drivers/net/wireless/iwlegacy/iwl-core.c
-+++ b/drivers/net/wireless/iwlegacy/iwl-core.c
-@@ -1757,6 +1757,7 @@ int iwl_legacy_force_reset(struct iwl_priv *priv, bool external)
-
- return 0;
- }
-+EXPORT_SYMBOL(iwl_legacy_force_reset);
-
- int
- iwl_legacy_mac_change_interface(struct ieee80211_hw *hw,
-diff --git a/drivers/net/wireless/iwlegacy/iwl4965-base.c b/drivers/net/wireless/iwlegacy/iwl4965-base.c
-index d2fba9e..6e25c7b 100644
---- a/drivers/net/wireless/iwlegacy/iwl4965-base.c
-+++ b/drivers/net/wireless/iwlegacy/iwl4965-base.c
-@@ -868,13 +868,13 @@ static void iwl4965_irq_tasklet(struct iwl_priv *priv)
- * is killed. Hence update the killswitch state here. The
- * rfkill handler will care about restarting if needed.
- */
-- if (!test_bit(STATUS_ALIVE, &priv->status)) {
-- if (hw_rf_kill)
-- set_bit(STATUS_RF_KILL_HW, &priv->status);
-- else
-- clear_bit(STATUS_RF_KILL_HW, &priv->status);
-- wiphy_rfkill_set_hw_state(priv->hw->wiphy, hw_rf_kill);
-+ if (hw_rf_kill) {
-+ set_bit(STATUS_RF_KILL_HW, &priv->status);
-+ } else {
-+ clear_bit(STATUS_RF_KILL_HW, &priv->status);
-+ iwl_legacy_force_reset(priv, true);
- }
-+ wiphy_rfkill_set_hw_state(priv->hw->wiphy, hw_rf_kill);
-
- handled |= CSR_INT_BIT_RF_KILL;
- }
-@@ -1764,6 +1764,9 @@ static void iwl4965_alive_start(struct iwl_priv *priv)
-
- priv->active_rate = IWL_RATES_MASK;
-
-+ iwl_legacy_power_update_mode(priv, true);
-+ IWL_DEBUG_INFO(priv, "Updated power mode\n");
-+
- if (iwl_legacy_is_associated_ctx(ctx)) {
- struct iwl_legacy_rxon_cmd *active_rxon =
- (struct iwl_legacy_rxon_cmd *)&ctx->active;
-@@ -1796,9 +1799,6 @@ static void iwl4965_alive_start(struct iwl_priv *priv)
- IWL_DEBUG_INFO(priv, "ALIVE processing complete.\n");
- wake_up(&priv->wait_command_queue);
-
-- iwl_legacy_power_update_mode(priv, true);
-- IWL_DEBUG_INFO(priv, "Updated power mode\n");
--
- return;
-
- restart:
-diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
-index 16cdd12..94d35ad 100644
---- a/drivers/net/wireless/iwlwifi/iwl-agn.c
-+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
-@@ -1297,7 +1297,7 @@ int iwl_alive_start(struct iwl_priv *priv)
- BT_COEX_PRIO_TBL_EVT_INIT_CALIB2);
- if (ret)
- return ret;
-- } else {
-+ } else if (priv->cfg->bt_params) {
- /*
- * default is 2-wire BT coexexistence support
- */
-diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
-index 832ec4d..5ef176a 100644
---- a/drivers/net/wireless/iwlwifi/iwl-core.c
-+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
-@@ -808,8 +808,11 @@ void iwl_chswitch_done(struct iwl_priv *priv, bool is_success)
- if (test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
- return;
-
-- if (test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING,
-+ if (!test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING,
- &priv->shrd->status))
-+ return;
-+
-+ if (ctx->vif)
- ieee80211_chswitch_done(ctx->vif, is_success);
- }
-
-diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c
-index 1800029..346dc9b 100644
---- a/drivers/net/wireless/iwlwifi/iwl-pci.c
-+++ b/drivers/net/wireless/iwlwifi/iwl-pci.c
-@@ -227,6 +227,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
- {IWL_PCI_DEVICE(0x423C, 0x1306, iwl5150_abg_cfg)}, /* Half Mini Card */
- {IWL_PCI_DEVICE(0x423C, 0x1221, iwl5150_agn_cfg)}, /* Mini Card */
- {IWL_PCI_DEVICE(0x423C, 0x1321, iwl5150_agn_cfg)}, /* Half Mini Card */
-+ {IWL_PCI_DEVICE(0x423C, 0x1326, iwl5150_abg_cfg)}, /* Half Mini Card */
-
- {IWL_PCI_DEVICE(0x423D, 0x1211, iwl5150_agn_cfg)}, /* Mini Card */
- {IWL_PCI_DEVICE(0x423D, 0x1311, iwl5150_agn_cfg)}, /* Half Mini Card */
-diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
-index 3579a68..17f8720 100644
---- a/drivers/net/wireless/mwifiex/sdio.c
-+++ b/drivers/net/wireless/mwifiex/sdio.c
-@@ -1429,8 +1429,8 @@ static int mwifiex_sdio_host_to_card(struct mwifiex_adapter *adapter,
- /* Allocate buffer and copy payload */
- blk_size = MWIFIEX_SDIO_BLOCK_SIZE;
- buf_block_len = (pkt_len + blk_size - 1) / blk_size;
-- *(u16 *) &payload[0] = (u16) pkt_len;
-- *(u16 *) &payload[2] = type;
-+ *(__le16 *)&payload[0] = cpu_to_le16((u16)pkt_len);
-+ *(__le16 *)&payload[2] = cpu_to_le16(type);
-
- /*
- * This is SDIO specific header
-diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
-index 50f92d5..4d792a2 100644
---- a/drivers/net/wireless/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
-@@ -856,13 +856,8 @@ void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index)
- spin_unlock_irqrestore(&queue->index_lock, irqflags);
- }
-
--void rt2x00queue_pause_queue(struct data_queue *queue)
-+void rt2x00queue_pause_queue_nocheck(struct data_queue *queue)
- {
-- if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
-- !test_bit(QUEUE_STARTED, &queue->flags) ||
-- test_and_set_bit(QUEUE_PAUSED, &queue->flags))
-- return;
--
- switch (queue->qid) {
- case QID_AC_VO:
- case QID_AC_VI:
-@@ -878,6 +873,15 @@ void rt2x00queue_pause_queue(struct data_queue *queue)
- break;
- }
- }
-+void rt2x00queue_pause_queue(struct data_queue *queue)
-+{
-+ if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) ||
-+ !test_bit(QUEUE_STARTED, &queue->flags) ||
-+ test_and_set_bit(QUEUE_PAUSED, &queue->flags))
-+ return;
-+
-+ rt2x00queue_pause_queue_nocheck(queue);
-+}
- EXPORT_SYMBOL_GPL(rt2x00queue_pause_queue);
-
- void rt2x00queue_unpause_queue(struct data_queue *queue)
-@@ -939,7 +943,7 @@ void rt2x00queue_stop_queue(struct data_queue *queue)
- return;
- }
-
-- rt2x00queue_pause_queue(queue);
-+ rt2x00queue_pause_queue_nocheck(queue);
-
- queue->rt2x00dev->ops->lib->stop_queue(queue);
-
-diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c
-index 8efa2f2..f8c319c 100644
---- a/drivers/net/wireless/zd1201.c
-+++ b/drivers/net/wireless/zd1201.c
-@@ -98,10 +98,12 @@ static int zd1201_fw_upload(struct usb_device *dev, int apfw)
- goto exit;
-
- err = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 0x4,
-- USB_DIR_IN | 0x40, 0,0, &ret, sizeof(ret), ZD1201_FW_TIMEOUT);
-+ USB_DIR_IN | 0x40, 0, 0, buf, sizeof(ret), ZD1201_FW_TIMEOUT);
- if (err < 0)
- goto exit;
-
-+ memcpy(&ret, buf, sizeof(ret));
-+
- if (ret & 0x80) {
- err = -EIO;
- goto exit;
-diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
-index fd85fa2..b77808c 100644
---- a/drivers/of/fdt.c
-+++ b/drivers/of/fdt.c
-@@ -389,6 +389,8 @@ static void __unflatten_device_tree(struct boot_param_header *blob,
- mem = (unsigned long)
- dt_alloc(size + 4, __alignof__(struct device_node));
-
-+ memset((void *)mem, 0, size);
-+
- ((__be32 *)mem)[size / 4] = cpu_to_be32(0xdeadbeef);
-
- pr_debug(" unflattening %lx...\n", mem);
-diff --git a/drivers/parisc/iommu-helpers.h b/drivers/parisc/iommu-helpers.h
-index a9c46cc..8c33491 100644
---- a/drivers/parisc/iommu-helpers.h
-+++ b/drivers/parisc/iommu-helpers.h
-@@ -1,3 +1,5 @@
-+#include <linux/prefetch.h>
-+
- /**
- * iommu_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir.
- * @ioc: The I/O Controller.
-diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
-index 083a49f..165274c 100644
---- a/drivers/pci/Makefile
-+++ b/drivers/pci/Makefile
-@@ -42,6 +42,7 @@ obj-$(CONFIG_UNICORE32) += setup-bus.o setup-irq.o
- obj-$(CONFIG_PARISC) += setup-bus.o
- obj-$(CONFIG_SUPERH) += setup-bus.o setup-irq.o
- obj-$(CONFIG_PPC) += setup-bus.o
-+obj-$(CONFIG_FRV) += setup-bus.o
- obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o
- obj-$(CONFIG_X86_VISWS) += setup-irq.o
- obj-$(CONFIG_MN10300) += setup-bus.o
-diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
-index e1b4f80..5c87270 100644
---- a/drivers/s390/scsi/zfcp_erp.c
-+++ b/drivers/s390/scsi/zfcp_erp.c
-@@ -102,10 +102,13 @@ static void zfcp_erp_action_dismiss_port(struct zfcp_port *port)
-
- if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
- zfcp_erp_action_dismiss(&port->erp_action);
-- else
-- shost_for_each_device(sdev, port->adapter->scsi_host)
-+ else {
-+ spin_lock(port->adapter->scsi_host->host_lock);
-+ __shost_for_each_device(sdev, port->adapter->scsi_host)
- if (sdev_to_zfcp(sdev)->port == port)
- zfcp_erp_action_dismiss_lun(sdev);
-+ spin_unlock(port->adapter->scsi_host->host_lock);
-+ }
- }
-
- static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
-@@ -592,9 +595,11 @@ static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear,
- {
- struct scsi_device *sdev;
-
-- shost_for_each_device(sdev, port->adapter->scsi_host)
-+ spin_lock(port->adapter->scsi_host->host_lock);
-+ __shost_for_each_device(sdev, port->adapter->scsi_host)
- if (sdev_to_zfcp(sdev)->port == port)
- _zfcp_erp_lun_reopen(sdev, clear, id, 0);
-+ spin_unlock(port->adapter->scsi_host->host_lock);
- }
-
- static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act)
-@@ -1435,8 +1440,10 @@ void zfcp_erp_set_adapter_status(struct zfcp_adapter *adapter, u32 mask)
- atomic_set_mask(common_mask, &port->status);
- read_unlock_irqrestore(&adapter->port_list_lock, flags);
-
-- shost_for_each_device(sdev, adapter->scsi_host)
-+ spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
-+ __shost_for_each_device(sdev, adapter->scsi_host)
- atomic_set_mask(common_mask, &sdev_to_zfcp(sdev)->status);
-+ spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
- }
-
- /**
-@@ -1470,11 +1477,13 @@ void zfcp_erp_clear_adapter_status(struct zfcp_adapter *adapter, u32 mask)
- }
- read_unlock_irqrestore(&adapter->port_list_lock, flags);
-
-- shost_for_each_device(sdev, adapter->scsi_host) {
-+ spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
-+ __shost_for_each_device(sdev, adapter->scsi_host) {
- atomic_clear_mask(common_mask, &sdev_to_zfcp(sdev)->status);
- if (clear_counter)
- atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
- }
-+ spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
- }
-
- /**
-@@ -1488,16 +1497,19 @@ void zfcp_erp_set_port_status(struct zfcp_port *port, u32 mask)
- {
- struct scsi_device *sdev;
- u32 common_mask = mask & ZFCP_COMMON_FLAGS;
-+ unsigned long flags;
-
- atomic_set_mask(mask, &port->status);
-
- if (!common_mask)
- return;
-
-- shost_for_each_device(sdev, port->adapter->scsi_host)
-+ spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags);
-+ __shost_for_each_device(sdev, port->adapter->scsi_host)
- if (sdev_to_zfcp(sdev)->port == port)
- atomic_set_mask(common_mask,
- &sdev_to_zfcp(sdev)->status);
-+ spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags);
- }
-
- /**
-@@ -1512,6 +1524,7 @@ void zfcp_erp_clear_port_status(struct zfcp_port *port, u32 mask)
- struct scsi_device *sdev;
- u32 common_mask = mask & ZFCP_COMMON_FLAGS;
- u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
-+ unsigned long flags;
-
- atomic_clear_mask(mask, &port->status);
-
-@@ -1521,13 +1534,15 @@ void zfcp_erp_clear_port_status(struct zfcp_port *port, u32 mask)
- if (clear_counter)
- atomic_set(&port->erp_counter, 0);
-
-- shost_for_each_device(sdev, port->adapter->scsi_host)
-+ spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags);
-+ __shost_for_each_device(sdev, port->adapter->scsi_host)
- if (sdev_to_zfcp(sdev)->port == port) {
- atomic_clear_mask(common_mask,
- &sdev_to_zfcp(sdev)->status);
- if (clear_counter)
- atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
- }
-+ spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags);
- }
-
- /**
-diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c
-index e76d003..52c6b59 100644
---- a/drivers/s390/scsi/zfcp_qdio.c
-+++ b/drivers/s390/scsi/zfcp_qdio.c
-@@ -224,11 +224,9 @@ int zfcp_qdio_sbals_from_sg(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req,
-
- static int zfcp_qdio_sbal_check(struct zfcp_qdio *qdio)
- {
-- spin_lock_irq(&qdio->req_q_lock);
- if (atomic_read(&qdio->req_q_free) ||
- !(atomic_read(&qdio->adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP))
- return 1;
-- spin_unlock_irq(&qdio->req_q_lock);
- return 0;
- }
-
-@@ -246,9 +244,8 @@ int zfcp_qdio_sbal_get(struct zfcp_qdio *qdio)
- {
- long ret;
-
-- spin_unlock_irq(&qdio->req_q_lock);
-- ret = wait_event_interruptible_timeout(qdio->req_q_wq,
-- zfcp_qdio_sbal_check(qdio), 5 * HZ);
-+ ret = wait_event_interruptible_lock_irq_timeout(qdio->req_q_wq,
-+ zfcp_qdio_sbal_check(qdio), qdio->req_q_lock, 5 * HZ);
-
- if (!(atomic_read(&qdio->adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP))
- return -EIO;
-@@ -262,7 +259,6 @@ int zfcp_qdio_sbal_get(struct zfcp_qdio *qdio)
- zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdsbg_1");
- }
-
-- spin_lock_irq(&qdio->req_q_lock);
- return -EIO;
- }
-
-diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
-index fc5a2ef..b018997 100644
---- a/drivers/scsi/megaraid/megaraid_sas_base.c
-+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
-@@ -3547,11 +3547,21 @@ static int megasas_init_fw(struct megasas_instance *instance)
- break;
- }
-
-- /*
-- * We expect the FW state to be READY
-- */
-- if (megasas_transition_to_ready(instance, 0))
-- goto fail_ready_state;
-+ if (megasas_transition_to_ready(instance, 0)) {
-+ atomic_set(&instance->fw_reset_no_pci_access, 1);
-+ instance->instancet->adp_reset
-+ (instance, instance->reg_set);
-+ atomic_set(&instance->fw_reset_no_pci_access, 0);
-+ dev_info(&instance->pdev->dev,
-+ "megasas: FW restarted successfully from %s!\n",
-+ __func__);
-+
-+ /*waitting for about 30 second before retry*/
-+ ssleep(30);
-+
-+ if (megasas_transition_to_ready(instance, 0))
-+ goto fail_ready_state;
-+ }
-
- /* Check if MSI-X is supported while in ready state */
- msix_enable = (instance->instancet->read_fw_status_reg(reg_set) &
-diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
-index f6a50c9..bfb05b8 100644
---- a/drivers/scsi/nsp32.c
-+++ b/drivers/scsi/nsp32.c
-@@ -2927,7 +2927,7 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
- * reset SCSI bus
- */
- nsp32_write1(base, SCSI_BUS_CONTROL, BUSCTL_RST);
-- udelay(RESET_HOLD_TIME);
-+ mdelay(RESET_HOLD_TIME / 1000);
- nsp32_write1(base, SCSI_BUS_CONTROL, 0);
- for(i = 0; i < 5; i++) {
- intrdat = nsp32_read2(base, IRQ_STATUS); /* dummy read */
-diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c
-index 717a8d4..903b2f5 100644
---- a/drivers/target/target_core_cdb.c
-+++ b/drivers/target/target_core_cdb.c
-@@ -127,11 +127,12 @@ target_emulate_inquiry_std(struct se_cmd *cmd)
- goto out;
- }
-
-- snprintf((unsigned char *)&buf[8], 8, "LIO-ORG");
-- snprintf((unsigned char *)&buf[16], 16, "%s",
-- &dev->se_sub_dev->t10_wwn.model[0]);
-- snprintf((unsigned char *)&buf[32], 4, "%s",
-- &dev->se_sub_dev->t10_wwn.revision[0]);
-+ memcpy(&buf[8], "LIO-ORG ", 8);
-+ memset(&buf[16], 0x20, 16);
-+ memcpy(&buf[16], dev->se_sub_dev->t10_wwn.model,
-+ min_t(size_t, strlen(dev->se_sub_dev->t10_wwn.model), 16));
-+ memcpy(&buf[32], dev->se_sub_dev->t10_wwn.revision,
-+ min_t(size_t, strlen(dev->se_sub_dev->t10_wwn.revision), 4));
- buf[4] = 31; /* Set additional length to 31 */
-
- out:
-diff --git a/drivers/tty/hvc/hvsi_lib.c b/drivers/tty/hvc/hvsi_lib.c
-index 6f4dd83..3749688 100644
---- a/drivers/tty/hvc/hvsi_lib.c
-+++ b/drivers/tty/hvc/hvsi_lib.c
-@@ -341,8 +341,8 @@ void hvsilib_establish(struct hvsi_priv *pv)
-
- pr_devel("HVSI@%x: ... waiting handshake\n", pv->termno);
-
-- /* Try for up to 200s */
-- for (timeout = 0; timeout < 20; timeout++) {
-+ /* Try for up to 400ms */
-+ for (timeout = 0; timeout < 40; timeout++) {
- if (pv->established)
- goto established;
- if (!hvsi_get_packet(pv))
-diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
-index 5b3d063..ab7d11e 100644
---- a/drivers/tty/serial/mxs-auart.c
-+++ b/drivers/tty/serial/mxs-auart.c
-@@ -374,11 +374,18 @@ static void mxs_auart_settermios(struct uart_port *u,
-
- static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
- {
-- u32 istatus, istat;
-+ u32 istat;
- struct mxs_auart_port *s = context;
- u32 stat = readl(s->port.membase + AUART_STAT);
-
-- istatus = istat = readl(s->port.membase + AUART_INTR);
-+ istat = readl(s->port.membase + AUART_INTR);
-+
-+ /* ack irq */
-+ writel(istat & (AUART_INTR_RTIS
-+ | AUART_INTR_TXIS
-+ | AUART_INTR_RXIS
-+ | AUART_INTR_CTSMIS),
-+ s->port.membase + AUART_INTR_CLR);
-
- if (istat & AUART_INTR_CTSMIS) {
- uart_handle_cts_change(&s->port, stat & AUART_STAT_CTS);
-@@ -397,12 +404,6 @@ static irqreturn_t mxs_auart_irq_handle(int irq, void *context)
- istat &= ~AUART_INTR_TXIS;
- }
-
-- writel(istatus & (AUART_INTR_RTIS
-- | AUART_INTR_TXIS
-- | AUART_INTR_RXIS
-- | AUART_INTR_CTSMIS),
-- s->port.membase + AUART_INTR_CLR);
--
- return IRQ_HANDLED;
- }
-
-@@ -542,7 +543,7 @@ auart_console_write(struct console *co, const char *str, unsigned int count)
- struct mxs_auart_port *s;
- struct uart_port *port;
- unsigned int old_ctrl0, old_ctrl2;
-- unsigned int to = 1000;
-+ unsigned int to = 20000;
-
- if (co->index > MXS_AUART_PORTS || co->index < 0)
- return;
-@@ -563,18 +564,23 @@ auart_console_write(struct console *co, const char *str, unsigned int count)
-
- uart_console_write(port, str, count, mxs_auart_console_putchar);
-
-- /*
-- * Finally, wait for transmitter to become empty
-- * and restore the TCR
-- */
-+ /* Finally, wait for transmitter to become empty ... */
- while (readl(port->membase + AUART_STAT) & AUART_STAT_BUSY) {
-+ udelay(1);
- if (!to--)
- break;
-- udelay(1);
- }
-
-- writel(old_ctrl0, port->membase + AUART_CTRL0);
-- writel(old_ctrl2, port->membase + AUART_CTRL2);
-+ /*
-+ * ... and restore the TCR if we waited long enough for the transmitter
-+ * to be idle. This might keep the transmitter enabled although it is
-+ * unused, but that is better than to disable it while it is still
-+ * transmitting.
-+ */
-+ if (!(readl(port->membase + AUART_STAT) & AUART_STAT_BUSY)) {
-+ writel(old_ctrl0, port->membase + AUART_CTRL0);
-+ writel(old_ctrl2, port->membase + AUART_CTRL2);
-+ }
-
- clk_disable(s->clk);
- }
-diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
-index 2fbcb75..f52182d 100644
---- a/drivers/usb/core/quirks.c
-+++ b/drivers/usb/core/quirks.c
-@@ -78,6 +78,12 @@ static const struct usb_device_id usb_quirk_list[] = {
- { USB_DEVICE(0x04d8, 0x000c), .driver_info =
- USB_QUIRK_CONFIG_INTF_STRINGS },
-
-+ /* CarrolTouch 4000U */
-+ { USB_DEVICE(0x04e7, 0x0009), .driver_info = USB_QUIRK_RESET_RESUME },
-+
-+ /* CarrolTouch 4500U */
-+ { USB_DEVICE(0x04e7, 0x0030), .driver_info = USB_QUIRK_RESET_RESUME },
-+
- /* Samsung Android phone modem - ID conflict with SPH-I500 */
- { USB_DEVICE(0x04e8, 0x6601), .driver_info =
- USB_QUIRK_CONFIG_INTF_STRINGS },
-diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c
-index fe85871..db5128b7e 100644
---- a/drivers/usb/misc/adutux.c
-+++ b/drivers/usb/misc/adutux.c
-@@ -829,7 +829,7 @@ static int adu_probe(struct usb_interface *interface,
-
- /* let the user know what node this device is now attached to */
- dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n",
-- udev->descriptor.idProduct, dev->serial_number,
-+ le16_to_cpu(udev->descriptor.idProduct), dev->serial_number,
- (dev->minor - ADU_MINOR_BASE));
- exit:
- dbg(2," %s : leave, return value %p (dev)", __func__, dev);
-diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
-index ce9f87f..a3f6fe0 100644
---- a/drivers/usb/serial/ftdi_sio.c
-+++ b/drivers/usb/serial/ftdi_sio.c
-@@ -743,9 +743,34 @@ static struct usb_device_id id_table_combined [] = {
- { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
- .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
- { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
-- { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) },
-- { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) },
-- { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_RTS01_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57B_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29A_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29B_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29F_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62B_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S01_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29C_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_81B_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_82B_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5D_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K4Y_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5G_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S05_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_60_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_61_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63B_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_64_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_65_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92D_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_W5R_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_A5R_PID) },
-+ { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_PW1_PID) },
- { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
- { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
- { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
-diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
-index 5d25e26..61685ed 100644
---- a/drivers/usb/serial/ftdi_sio_ids.h
-+++ b/drivers/usb/serial/ftdi_sio_ids.h
-@@ -815,11 +815,35 @@
- /*
- * RT Systems programming cables for various ham radios
- */
--#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
--#define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */
--#define RTSYSTEMS_CT29B_PID 0x9e54 /* CT29B Radio Cable */
--#define RTSYSTEMS_RTS01_PID 0x9e57 /* USB-RTS01 Radio Cable */
--
-+#define RTSYSTEMS_VID 0x2100 /* Vendor ID */
-+#define RTSYSTEMS_USB_S03_PID 0x9001 /* RTS-03 USB to Serial Adapter */
-+#define RTSYSTEMS_USB_59_PID 0x9e50 /* USB-59 USB to 8 pin plug */
-+#define RTSYSTEMS_USB_57A_PID 0x9e51 /* USB-57A USB to 4pin 3.5mm plug */
-+#define RTSYSTEMS_USB_57B_PID 0x9e52 /* USB-57B USB to extended 4pin 3.5mm plug */
-+#define RTSYSTEMS_USB_29A_PID 0x9e53 /* USB-29A USB to 3.5mm stereo plug */
-+#define RTSYSTEMS_USB_29B_PID 0x9e54 /* USB-29B USB to 6 pin mini din */
-+#define RTSYSTEMS_USB_29F_PID 0x9e55 /* USB-29F USB to 6 pin modular plug */
-+#define RTSYSTEMS_USB_62B_PID 0x9e56 /* USB-62B USB to 8 pin mini din plug*/
-+#define RTSYSTEMS_USB_S01_PID 0x9e57 /* USB-RTS01 USB to 3.5 mm stereo plug*/
-+#define RTSYSTEMS_USB_63_PID 0x9e58 /* USB-63 USB to 9 pin female*/
-+#define RTSYSTEMS_USB_29C_PID 0x9e59 /* USB-29C USB to 4 pin modular plug*/
-+#define RTSYSTEMS_USB_81B_PID 0x9e5A /* USB-81 USB to 8 pin mini din plug*/
-+#define RTSYSTEMS_USB_82B_PID 0x9e5B /* USB-82 USB to 2.5 mm stereo plug*/
-+#define RTSYSTEMS_USB_K5D_PID 0x9e5C /* USB-K5D USB to 8 pin modular plug*/
-+#define RTSYSTEMS_USB_K4Y_PID 0x9e5D /* USB-K4Y USB to 2.5/3.5 mm plugs*/
-+#define RTSYSTEMS_USB_K5G_PID 0x9e5E /* USB-K5G USB to 8 pin modular plug*/
-+#define RTSYSTEMS_USB_S05_PID 0x9e5F /* USB-RTS05 USB to 2.5 mm stereo plug*/
-+#define RTSYSTEMS_USB_60_PID 0x9e60 /* USB-60 USB to 6 pin din*/
-+#define RTSYSTEMS_USB_61_PID 0x9e61 /* USB-61 USB to 6 pin mini din*/
-+#define RTSYSTEMS_USB_62_PID 0x9e62 /* USB-62 USB to 8 pin mini din*/
-+#define RTSYSTEMS_USB_63B_PID 0x9e63 /* USB-63 USB to 9 pin female*/
-+#define RTSYSTEMS_USB_64_PID 0x9e64 /* USB-64 USB to 9 pin male*/
-+#define RTSYSTEMS_USB_65_PID 0x9e65 /* USB-65 USB to 9 pin female null modem*/
-+#define RTSYSTEMS_USB_92_PID 0x9e66 /* USB-92 USB to 12 pin plug*/
-+#define RTSYSTEMS_USB_92D_PID 0x9e67 /* USB-92D USB to 12 pin plug data*/
-+#define RTSYSTEMS_USB_W5R_PID 0x9e68 /* USB-W5R USB to 8 pin modular plug*/
-+#define RTSYSTEMS_USB_A5R_PID 0x9e69 /* USB-A5R USB to 8 pin modular plug*/
-+#define RTSYSTEMS_USB_PW1_PID 0x9e6A /* USB-PW1 USB to 8 pin modular plug*/
-
- /*
- * Physik Instrumente
-diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
-index 4f415e28..b668069 100644
---- a/drivers/usb/serial/keyspan.c
-+++ b/drivers/usb/serial/keyspan.c
-@@ -2620,7 +2620,7 @@ static int keyspan_startup(struct usb_serial *serial)
- if (d_details == NULL) {
- dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
- __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
-- return 1;
-+ return -ENODEV;
- }
-
- /* Setup private data for serial driver */
-diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
-index 9580679..9270d5c 100644
---- a/drivers/usb/serial/mos7720.c
-+++ b/drivers/usb/serial/mos7720.c
-@@ -97,6 +97,7 @@ struct urbtracker {
- struct list_head urblist_entry;
- struct kref ref_count;
- struct urb *urb;
-+ struct usb_ctrlrequest *setup;
- };
-
- enum mos7715_pp_modes {
-@@ -279,6 +280,7 @@ static void destroy_urbtracker(struct kref *kref)
- struct mos7715_parport *mos_parport = urbtrack->mos_parport;
- dbg("%s called", __func__);
- usb_free_urb(urbtrack->urb);
-+ kfree(urbtrack->setup);
- kfree(urbtrack);
- kref_put(&mos_parport->ref_count, destroy_mos_parport);
- }
-@@ -363,7 +365,6 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
- struct urbtracker *urbtrack;
- int ret_val;
- unsigned long flags;
-- struct usb_ctrlrequest setup;
- struct usb_serial *serial = mos_parport->serial;
- struct usb_device *usbdev = serial->dev;
- dbg("%s called", __func__);
-@@ -382,14 +383,20 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
- kfree(urbtrack);
- return -ENOMEM;
- }
-- setup.bRequestType = (__u8)0x40;
-- setup.bRequest = (__u8)0x0e;
-- setup.wValue = get_reg_value(reg, dummy);
-- setup.wIndex = get_reg_index(reg);
-- setup.wLength = 0;
-+ urbtrack->setup = kmalloc(sizeof(*urbtrack->setup), GFP_KERNEL);
-+ if (!urbtrack->setup) {
-+ usb_free_urb(urbtrack->urb);
-+ kfree(urbtrack);
-+ return -ENOMEM;
-+ }
-+ urbtrack->setup->bRequestType = (__u8)0x40;
-+ urbtrack->setup->bRequest = (__u8)0x0e;
-+ urbtrack->setup->wValue = get_reg_value(reg, dummy);
-+ urbtrack->setup->wIndex = get_reg_index(reg);
-+ urbtrack->setup->wLength = 0;
- usb_fill_control_urb(urbtrack->urb, usbdev,
- usb_sndctrlpipe(usbdev, 0),
-- (unsigned char *)&setup,
-+ (unsigned char *)urbtrack->setup,
- NULL, 0, async_complete, urbtrack);
- kref_init(&urbtrack->ref_count);
- INIT_LIST_HEAD(&urbtrack->urblist_entry);
-diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
-index 5e8c736..5d2501e 100644
---- a/drivers/usb/serial/mos7840.c
-+++ b/drivers/usb/serial/mos7840.c
-@@ -185,6 +185,10 @@
- #define URB_TRANSFER_BUFFER_SIZE 32 /* URB Size */
-
-
-+enum mos7840_flag {
-+ MOS7840_FLAG_CTRL_BUSY,
-+};
-+
- static const struct usb_device_id moschip_port_id_table[] = {
- {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
- {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
-@@ -258,6 +262,8 @@ struct moschip_port {
- struct urb *write_urb_pool[NUM_URBS];
- char busy[NUM_URBS];
- bool read_urb_busy;
-+
-+ unsigned long flags;
- };
-
-
-@@ -519,11 +525,11 @@ static void mos7840_control_callback(struct urb *urb)
- /* this urb is terminated, clean up */
- dbg("%s - urb shutting down with status: %d", __func__,
- status);
-- return;
-+ goto out;
- default:
- dbg("%s - nonzero urb status received: %d", __func__,
- status);
-- return;
-+ goto out;
- }
-
- dbg("%s urb buffer size is %d", __func__, urb->actual_length);
-@@ -536,6 +542,8 @@ static void mos7840_control_callback(struct urb *urb)
- mos7840_handle_new_msr(mos7840_port, regval);
- else if (mos7840_port->MsrLsr == 1)
- mos7840_handle_new_lsr(mos7840_port, regval);
-+out:
-+ clear_bit_unlock(MOS7840_FLAG_CTRL_BUSY, &mos7840_port->flags);
- }
-
- static int mos7840_get_reg(struct moschip_port *mcs, __u16 Wval, __u16 reg,
-@@ -546,6 +554,9 @@ static int mos7840_get_reg(struct moschip_port *mcs, __u16 Wval, __u16 reg,
- unsigned char *buffer = mcs->ctrl_buf;
- int ret;
-
-+ if (test_and_set_bit_lock(MOS7840_FLAG_CTRL_BUSY, &mcs->flags))
-+ return -EBUSY;
-+
- dr->bRequestType = MCS_RD_RTYPE;
- dr->bRequest = MCS_RDREQ;
- dr->wValue = cpu_to_le16(Wval); /* 0 */
-@@ -557,6 +568,9 @@ static int mos7840_get_reg(struct moschip_port *mcs, __u16 Wval, __u16 reg,
- mos7840_control_callback, mcs);
- mcs->control_urb->transfer_buffer_length = 2;
- ret = usb_submit_urb(mcs->control_urb, GFP_ATOMIC);
-+ if (ret)
-+ clear_bit_unlock(MOS7840_FLAG_CTRL_BUSY, &mcs->flags);
-+
- return ret;
- }
-
-diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
-index 42038ba..885d15d 100644
---- a/drivers/usb/serial/ti_usb_3410_5052.c
-+++ b/drivers/usb/serial/ti_usb_3410_5052.c
-@@ -1713,12 +1713,13 @@ static int ti_download_firmware(struct ti_device *tdev)
-
- dbg("%s\n", __func__);
- /* try ID specific firmware first, then try generic firmware */
-- sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor,
-- dev->descriptor.idProduct);
-+ sprintf(buf, "ti_usb-v%04x-p%04x.fw",
-+ le16_to_cpu(dev->descriptor.idVendor),
-+ le16_to_cpu(dev->descriptor.idProduct));
- if ((status = request_firmware(&fw_p, buf, &dev->dev)) != 0) {
- buf[0] = '\0';
-- if (dev->descriptor.idVendor == MTS_VENDOR_ID) {
-- switch (dev->descriptor.idProduct) {
-+ if (le16_to_cpu(dev->descriptor.idVendor) == MTS_VENDOR_ID) {
-+ switch (le16_to_cpu(dev->descriptor.idProduct)) {
- case MTS_CDMA_PRODUCT_ID:
- strcpy(buf, "mts_cdma.fw");
- break;
-diff --git a/drivers/xen/events.c b/drivers/xen/events.c
-index 11d7b64..f6227cc 100644
---- a/drivers/xen/events.c
-+++ b/drivers/xen/events.c
-@@ -316,7 +316,7 @@ static void init_evtchn_cpu_bindings(void)
-
- for_each_possible_cpu(i)
- memset(per_cpu(cpu_evtchn_mask, i),
-- (i == 0) ? ~0 : 0, sizeof(*per_cpu(cpu_evtchn_mask, i)));
-+ (i == 0) ? ~0 : 0, NR_EVENT_CHANNELS/8);
- }
-
- static inline void clear_evtchn(int port)
-@@ -1340,8 +1340,10 @@ void rebind_evtchn_irq(int evtchn, int irq)
- /* Rebind an evtchn so that it gets delivered to a specific cpu */
- static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
- {
-+ struct shared_info *s = HYPERVISOR_shared_info;
- struct evtchn_bind_vcpu bind_vcpu;
- int evtchn = evtchn_from_irq(irq);
-+ int masked;
-
- if (!VALID_EVTCHN(evtchn))
- return -1;
-@@ -1358,6 +1360,12 @@ static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
- bind_vcpu.vcpu = tcpu;
-
- /*
-+ * Mask the event while changing the VCPU binding to prevent
-+ * it being delivered on an unexpected VCPU.
-+ */
-+ masked = sync_test_and_set_bit(evtchn, s->evtchn_mask);
-+
-+ /*
- * If this fails, it usually just indicates that we're dealing with a
- * virq or IPI channel, which don't actually need to be rebound. Ignore
- * it, but don't do the xenlinux-level rebind in that case.
-@@ -1365,6 +1373,9 @@ static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
- if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_vcpu, &bind_vcpu) >= 0)
- bind_evtchn_to_cpu(evtchn, tcpu);
-
-+ if (!masked)
-+ unmask_evtchn(evtchn);
-+
- return 0;
- }
-
-diff --git a/fs/bio.c b/fs/bio.c
-index 4fc4dbb..b84d851 100644
---- a/fs/bio.c
-+++ b/fs/bio.c
-@@ -734,7 +734,7 @@ static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs,
- int iov_idx = 0;
- unsigned int iov_off = 0;
-
-- __bio_for_each_segment(bvec, bio, i, 0) {
-+ bio_for_each_segment_all(bvec, bio, i) {
- char *bv_addr = page_address(bvec->bv_page);
- unsigned int bv_len = iovecs[i].bv_len;
-
-@@ -787,12 +787,22 @@ static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs,
- int bio_uncopy_user(struct bio *bio)
- {
- struct bio_map_data *bmd = bio->bi_private;
-- int ret = 0;
-+ struct bio_vec *bvec;
-+ int ret = 0, i;
-
-- if (!bio_flagged(bio, BIO_NULL_MAPPED))
-- ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs,
-- bmd->nr_sgvecs, bio_data_dir(bio) == READ,
-- 0, bmd->is_our_pages);
-+ if (!bio_flagged(bio, BIO_NULL_MAPPED)) {
-+ /*
-+ * if we're in a workqueue, the request is orphaned, so
-+ * don't copy into a random user address space, just free.
-+ */
-+ if (current->mm)
-+ ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs,
-+ bmd->nr_sgvecs, bio_data_dir(bio) == READ,
-+ 0, bmd->is_our_pages);
-+ else if (bmd->is_our_pages)
-+ bio_for_each_segment_all(bvec, bio, i)
-+ __free_page(bvec->bv_page);
-+ }
- bio_free_map_data(bmd);
- bio_put(bio);
- return ret;
-@@ -916,7 +926,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
- return bio;
- cleanup:
- if (!map_data)
-- bio_for_each_segment(bvec, bio, i)
-+ bio_for_each_segment_all(bvec, bio, i)
- __free_page(bvec->bv_page);
-
- bio_put(bio);
-@@ -1130,7 +1140,7 @@ static void __bio_unmap_user(struct bio *bio)
- /*
- * make sure we dirty pages we wrote to
- */
-- __bio_for_each_segment(bvec, bio, i, 0) {
-+ bio_for_each_segment_all(bvec, bio, i) {
- if (bio_data_dir(bio) == READ)
- set_page_dirty_lock(bvec->bv_page);
-
-@@ -1236,7 +1246,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err)
- int i;
- char *p = bmd->sgvecs[0].iov_base;
-
-- __bio_for_each_segment(bvec, bio, i, 0) {
-+ bio_for_each_segment_all(bvec, bio, i) {
- char *addr = page_address(bvec->bv_page);
- int len = bmd->iovecs[i].bv_len;
-
-@@ -1276,7 +1286,7 @@ struct bio *bio_copy_kern(struct request_queue *q, void *data, unsigned int len,
- if (!reading) {
- void *p = data;
-
-- bio_for_each_segment(bvec, bio, i) {
-+ bio_for_each_segment_all(bvec, bio, i) {
- char *addr = page_address(bvec->bv_page);
-
- memcpy(addr, p, bvec->bv_len);
-@@ -1556,7 +1566,7 @@ sector_t bio_sector_offset(struct bio *bio, unsigned short index,
- if (index >= bio->bi_idx)
- index = bio->bi_vcnt - 1;
-
-- __bio_for_each_segment(bv, bio, i, 0) {
-+ bio_for_each_segment_all(bv, bio, i) {
- if (i == index) {
- if (offset > bv->bv_offset)
- sectors += (offset - bv->bv_offset) / sector_sz;
-diff --git a/fs/cifs/cifsencrypt.c b/fs/cifs/cifsencrypt.c
-index cdcd665..b4675bd 100644
---- a/fs/cifs/cifsencrypt.c
-+++ b/fs/cifs/cifsencrypt.c
-@@ -369,7 +369,7 @@ find_domain_name(struct cifs_ses *ses, const struct nls_table *nls_cp)
- if (blobptr + attrsize > blobend)
- break;
- if (type == NTLMSSP_AV_NB_DOMAIN_NAME) {
-- if (!attrsize)
-+ if (!attrsize || attrsize >= CIFS_MAX_DOMAINNAME_LEN)
- break;
- if (!ses->domainName) {
- ses->domainName =
-diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
-index 2f3ff59..7b68088 100644
---- a/fs/cifs/cifsglob.h
-+++ b/fs/cifs/cifsglob.h
-@@ -38,6 +38,7 @@
- #define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1)
- #define MAX_SERVER_SIZE 15
- #define MAX_SHARE_SIZE 80
-+#define CIFS_MAX_DOMAINNAME_LEN 256 /* max domain name length */
- #define MAX_USERNAME_SIZE 256 /* reasonable maximum for current servers */
- #define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */
-
-diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
-index 4c37ed4..52a820a 100644
---- a/fs/cifs/readdir.c
-+++ b/fs/cifs/readdir.c
-@@ -96,6 +96,14 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name,
- dput(dentry);
- }
-
-+ /*
-+ * If we know that the inode will need to be revalidated immediately,
-+ * then don't create a new dentry for it. We'll end up doing an on
-+ * the wire call either way and this spares us an invalidation.
-+ */
-+ if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL)
-+ return NULL;
-+
- dentry = d_alloc(parent, name);
- if (dentry == NULL)
- return NULL;
-diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
-index 2504809..d362626 100644
---- a/fs/cifs/sess.c
-+++ b/fs/cifs/sess.c
-@@ -198,7 +198,7 @@ static void unicode_domain_string(char **pbcc_area, struct cifs_ses *ses,
- bytes_ret = 0;
- } else
- bytes_ret = cifs_strtoUCS((__le16 *) bcc_ptr, ses->domainName,
-- 256, nls_cp);
-+ CIFS_MAX_DOMAINNAME_LEN, nls_cp);
- bcc_ptr += 2 * bytes_ret;
- bcc_ptr += 2; /* account for null terminator */
-
-@@ -256,8 +256,8 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifs_ses *ses,
-
- /* copy domain */
- if (ses->domainName != NULL) {
-- strncpy(bcc_ptr, ses->domainName, 256);
-- bcc_ptr += strnlen(ses->domainName, 256);
-+ strncpy(bcc_ptr, ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
-+ bcc_ptr += strnlen(ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
- } /* else we will send a null domain name
- so the server will default to its own domain */
- *bcc_ptr = 0;
-diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c
-index 1585db1..26bb512 100644
---- a/fs/exofs/ore.c
-+++ b/fs/exofs/ore.c
-@@ -401,7 +401,7 @@ static void _clear_bio(struct bio *bio)
- struct bio_vec *bv;
- unsigned i;
-
-- __bio_for_each_segment(bv, bio, i, 0) {
-+ bio_for_each_segment_all(bv, bio, i) {
- unsigned this_count = bv->bv_len;
-
- if (likely(PAGE_SIZE == this_count))
-diff --git a/fs/exofs/ore_raid.c b/fs/exofs/ore_raid.c
-index fff2070..2c64826 100644
---- a/fs/exofs/ore_raid.c
-+++ b/fs/exofs/ore_raid.c
-@@ -432,7 +432,7 @@ static void _mark_read4write_pages_uptodate(struct ore_io_state *ios, int ret)
- if (!bio)
- continue;
-
-- __bio_for_each_segment(bv, bio, i, 0) {
-+ bio_for_each_segment_all(bv, bio, i) {
- struct page *page = bv->bv_page;
-
- SetPageUptodate(page);
-diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
-index aca1790..d0b8f98 100644
---- a/fs/ext4/ext4_jbd2.c
-+++ b/fs/ext4/ext4_jbd2.c
-@@ -109,10 +109,10 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
-
- if (ext4_handle_valid(handle)) {
- err = jbd2_journal_dirty_metadata(handle, bh);
-- if (err) {
-- /* Errors can only happen if there is a bug */
-- handle->h_err = err;
-- __ext4_journal_stop(where, line, handle);
-+ /* Errors can only happen if there is a bug */
-+ if (WARN_ON_ONCE(err)) {
-+ ext4_journal_abort_handle(where, line, __func__, bh,
-+ handle, err);
- }
- } else {
- if (inode)
-diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index 259e950..84f84bf 100644
---- a/fs/ext4/super.c
-+++ b/fs/ext4/super.c
-@@ -3372,7 +3372,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
- }
- if (test_opt(sb, DIOREAD_NOLOCK)) {
- ext4_msg(sb, KERN_ERR, "can't mount with "
-- "both data=journal and delalloc");
-+ "both data=journal and dioread_nolock");
- goto failed_mount;
- }
- if (test_opt(sb, DELALLOC))
-@@ -4539,6 +4539,21 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
- goto restore_opts;
- }
-
-+ if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
-+ if (test_opt2(sb, EXPLICIT_DELALLOC)) {
-+ ext4_msg(sb, KERN_ERR, "can't mount with "
-+ "both data=journal and delalloc");
-+ err = -EINVAL;
-+ goto restore_opts;
-+ }
-+ if (test_opt(sb, DIOREAD_NOLOCK)) {
-+ ext4_msg(sb, KERN_ERR, "can't mount with "
-+ "both data=journal and dioread_nolock");
-+ err = -EINVAL;
-+ goto restore_opts;
-+ }
-+ }
-+
- if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
- ext4_abort(sb, "Abort forced by user");
-
-diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
-index 9197a1b..9f7c758 100644
---- a/fs/jfs/jfs_dtree.c
-+++ b/fs/jfs/jfs_dtree.c
-@@ -3047,6 +3047,14 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
-
- dir_index = (u32) filp->f_pos;
-
-+ /*
-+ * NFSv4 reserves cookies 1 and 2 for . and .. so the value
-+ * we return to the vfs is one greater than the one we use
-+ * internally.
-+ */
-+ if (dir_index)
-+ dir_index--;
-+
- if (dir_index > 1) {
- struct dir_table_slot dirtab_slot;
-
-@@ -3086,7 +3094,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
- if (p->header.flag & BT_INTERNAL) {
- jfs_err("jfs_readdir: bad index table");
- DT_PUTPAGE(mp);
-- filp->f_pos = -1;
-+ filp->f_pos = DIREND;
- return 0;
- }
- } else {
-@@ -3094,7 +3102,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
- /*
- * self "."
- */
-- filp->f_pos = 0;
-+ filp->f_pos = 1;
- if (filldir(dirent, ".", 1, 0, ip->i_ino,
- DT_DIR))
- return 0;
-@@ -3102,7 +3110,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
- /*
- * parent ".."
- */
-- filp->f_pos = 1;
-+ filp->f_pos = 2;
- if (filldir(dirent, "..", 2, 1, PARENT(ip), DT_DIR))
- return 0;
-
-@@ -3123,24 +3131,25 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
- /*
- * Legacy filesystem - OS/2 & Linux JFS < 0.3.6
- *
-- * pn = index = 0: First entry "."
-- * pn = 0; index = 1: Second entry ".."
-+ * pn = 0; index = 1: First entry "."
-+ * pn = 0; index = 2: Second entry ".."
- * pn > 0: Real entries, pn=1 -> leftmost page
- * pn = index = -1: No more entries
- */
- dtpos = filp->f_pos;
-- if (dtpos == 0) {
-+ if (dtpos < 2) {
- /* build "." entry */
-
-+ filp->f_pos = 1;
- if (filldir(dirent, ".", 1, filp->f_pos, ip->i_ino,
- DT_DIR))
- return 0;
-- dtoffset->index = 1;
-+ dtoffset->index = 2;
- filp->f_pos = dtpos;
- }
-
- if (dtoffset->pn == 0) {
-- if (dtoffset->index == 1) {
-+ if (dtoffset->index == 2) {
- /* build ".." entry */
-
- if (filldir(dirent, "..", 2, filp->f_pos,
-@@ -3233,6 +3242,12 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
- }
- jfs_dirent->position = unique_pos++;
- }
-+ /*
-+ * We add 1 to the index because we may
-+ * use a value of 2 internally, and NFSv4
-+ * doesn't like that.
-+ */
-+ jfs_dirent->position++;
- } else {
- jfs_dirent->position = dtpos;
- len = min(d_namleft, DTLHDRDATALEN_LEGACY);
-diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
-index 168cb93..3fde055 100644
---- a/fs/nfs/callback_xdr.c
-+++ b/fs/nfs/callback_xdr.c
-@@ -451,9 +451,9 @@ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp,
- args->csa_nrclists = ntohl(*p++);
- args->csa_rclists = NULL;
- if (args->csa_nrclists) {
-- args->csa_rclists = kmalloc(args->csa_nrclists *
-- sizeof(*args->csa_rclists),
-- GFP_KERNEL);
-+ args->csa_rclists = kmalloc_array(args->csa_nrclists,
-+ sizeof(*args->csa_rclists),
-+ GFP_KERNEL);
- if (unlikely(args->csa_rclists == NULL))
- goto out;
-
-diff --git a/fs/nilfs2/segbuf.c b/fs/nilfs2/segbuf.c
-index 850a7c0..07a666a 100644
---- a/fs/nilfs2/segbuf.c
-+++ b/fs/nilfs2/segbuf.c
-@@ -345,8 +345,7 @@ static void nilfs_end_bio_write(struct bio *bio, int err)
-
- if (err == -EOPNOTSUPP) {
- set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
-- bio_put(bio);
-- /* to be detected by submit_seg_bio() */
-+ /* to be detected by nilfs_segbuf_submit_bio() */
- }
-
- if (!uptodate)
-@@ -377,12 +376,12 @@ static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf,
- bio->bi_private = segbuf;
- bio_get(bio);
- submit_bio(mode, bio);
-+ segbuf->sb_nbio++;
- if (bio_flagged(bio, BIO_EOPNOTSUPP)) {
- bio_put(bio);
- err = -EOPNOTSUPP;
- goto failed;
- }
-- segbuf->sb_nbio++;
- bio_put(bio);
-
- wi->bio = NULL;
-diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index 3efa725..ef1740d 100644
---- a/fs/proc/task_mmu.c
-+++ b/fs/proc/task_mmu.c
-@@ -604,7 +604,7 @@ const struct file_operations proc_clear_refs_operations = {
- };
-
- struct pagemapread {
-- int pos, len;
-+ int pos, len; /* units: PM_ENTRY_BYTES, not bytes */
- u64 *buffer;
- };
-
-@@ -792,8 +792,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
- if (!count)
- goto out_task;
-
-- pm.len = PM_ENTRY_BYTES * (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
-- pm.buffer = kmalloc(pm.len, GFP_TEMPORARY);
-+ pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
-+ pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY);
- ret = -ENOMEM;
- if (!pm.buffer)
- goto out_task;
-diff --git a/include/linux/bio.h b/include/linux/bio.h
-index 847994a..e868554 100644
---- a/include/linux/bio.h
-+++ b/include/linux/bio.h
-@@ -135,16 +135,27 @@ static inline int bio_has_allocated_vec(struct bio *bio)
- #define bio_io_error(bio) bio_endio((bio), -EIO)
-
- /*
-- * drivers should not use the __ version unless they _really_ want to
-- * run through the entire bio and not just pending pieces
-+ * drivers should not use the __ version unless they _really_ know what
-+ * they're doing
- */
- #define __bio_for_each_segment(bvl, bio, i, start_idx) \
- for (bvl = bio_iovec_idx((bio), (start_idx)), i = (start_idx); \
- i < (bio)->bi_vcnt; \
- bvl++, i++)
-
-+/*
-+ * drivers should _never_ use the all version - the bio may have been split
-+ * before it got to the driver and the driver won't own all of it
-+ */
-+#define bio_for_each_segment_all(bvl, bio, i) \
-+ for (i = 0; \
-+ bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \
-+ i++)
-+
- #define bio_for_each_segment(bvl, bio, i) \
-- __bio_for_each_segment(bvl, bio, i, (bio)->bi_idx)
-+ for (i = (bio)->bi_idx; \
-+ bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \
-+ i++)
-
- /*
- * get a reference to a bio, so it won't disappear. the intended use is
-diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
-index c3da42d..82924bf 100644
---- a/include/linux/ftrace_event.h
-+++ b/include/linux/ftrace_event.h
-@@ -71,6 +71,8 @@ struct trace_iterator {
- /* trace_seq for __print_flags() and __print_symbolic() etc. */
- struct trace_seq tmp_seq;
-
-+ cpumask_var_t started;
-+
- /* The below is zeroed out in pipe_read */
- struct trace_seq seq;
- struct trace_entry *ent;
-@@ -83,7 +85,7 @@ struct trace_iterator {
- loff_t pos;
- long idx;
-
-- cpumask_var_t started;
-+ /* All new field here will be zeroed out in pipe_read */
- };
-
-
-diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 5b42f1b..de3a321 100644
---- a/include/linux/mm_types.h
-+++ b/include/linux/mm_types.h
-@@ -297,6 +297,7 @@ struct mm_struct {
- void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
- #endif
- unsigned long mmap_base; /* base of mmap area */
-+ unsigned long mmap_legacy_base; /* base of mmap area in bottom-up allocations */
- unsigned long task_size; /* size of task vm space */
- unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
- unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */
-diff --git a/include/linux/slab.h b/include/linux/slab.h
-index 573c809..a595dce 100644
---- a/include/linux/slab.h
-+++ b/include/linux/slab.h
-@@ -190,7 +190,7 @@ size_t ksize(const void *);
- #endif
-
- /**
-- * kcalloc - allocate memory for an array. The memory is set to zero.
-+ * kmalloc_array - allocate memory for an array.
- * @n: number of elements.
- * @size: element size.
- * @flags: the type of memory to allocate.
-@@ -240,11 +240,22 @@ size_t ksize(const void *);
- * for general use, and so are not documented here. For a full list of
- * potential flags, always refer to linux/gfp.h.
- */
--static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
-+static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
- {
- if (size != 0 && n > ULONG_MAX / size)
- return NULL;
-- return __kmalloc(n * size, flags | __GFP_ZERO);
-+ return __kmalloc(n * size, flags);
-+}
-+
-+/**
-+ * kcalloc - allocate memory for an array. The memory is set to zero.
-+ * @n: number of elements.
-+ * @size: element size.
-+ * @flags: the type of memory to allocate (see kmalloc).
-+ */
-+static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
-+{
-+ return kmalloc_array(n, size, flags | __GFP_ZERO);
- }
-
- #if !defined(CONFIG_NUMA) && !defined(CONFIG_SLOB)
-diff --git a/include/linux/wait.h b/include/linux/wait.h
-index bea7ad5..e007f76 100644
---- a/include/linux/wait.h
-+++ b/include/linux/wait.h
-@@ -530,6 +530,63 @@ do { \
- ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1))
-
-
-+#define __wait_event_interruptible_lock_irq_timeout(wq, condition, \
-+ lock, ret) \
-+do { \
-+ DEFINE_WAIT(__wait); \
-+ \
-+ for (;;) { \
-+ prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \
-+ if (condition) \
-+ break; \
-+ if (signal_pending(current)) { \
-+ ret = -ERESTARTSYS; \
-+ break; \
-+ } \
-+ spin_unlock_irq(&lock); \
-+ ret = schedule_timeout(ret); \
-+ spin_lock_irq(&lock); \
-+ if (!ret) \
-+ break; \
-+ } \
-+ finish_wait(&wq, &__wait); \
-+} while (0)
-+
-+/**
-+ * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets true or a timeout elapses.
-+ * The condition is checked under the lock. This is expected
-+ * to be called with the lock taken.
-+ * @wq: the waitqueue to wait on
-+ * @condition: a C expression for the event to wait for
-+ * @lock: a locked spinlock_t, which will be released before schedule()
-+ * and reacquired afterwards.
-+ * @timeout: timeout, in jiffies
-+ *
-+ * The process is put to sleep (TASK_INTERRUPTIBLE) until the
-+ * @condition evaluates to true or signal is received. The @condition is
-+ * checked each time the waitqueue @wq is woken up.
-+ *
-+ * wake_up() has to be called after changing any variable that could
-+ * change the result of the wait condition.
-+ *
-+ * This is supposed to be called while holding the lock. The lock is
-+ * dropped before going to sleep and is reacquired afterwards.
-+ *
-+ * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it
-+ * was interrupted by a signal, and the remaining jiffies otherwise
-+ * if the condition evaluated to true before the timeout elapsed.
-+ */
-+#define wait_event_interruptible_lock_irq_timeout(wq, condition, lock, \
-+ timeout) \
-+({ \
-+ int __ret = timeout; \
-+ \
-+ if (!(condition)) \
-+ __wait_event_interruptible_lock_irq_timeout( \
-+ wq, condition, lock, __ret); \
-+ __ret; \
-+})
-+
-
- #define __wait_event_killable(wq, condition, ret) \
- do { \
-diff --git a/kernel/events/core.c b/kernel/events/core.c
-index 8be9b746..5bbe443 100644
---- a/kernel/events/core.c
-+++ b/kernel/events/core.c
-@@ -900,6 +900,15 @@ list_add_event(struct perf_event *event, struct perf_event_context *ctx)
- }
-
- /*
-+ * Initialize event state based on the perf_event_attr::disabled.
-+ */
-+static inline void perf_event__state_init(struct perf_event *event)
-+{
-+ event->state = event->attr.disabled ? PERF_EVENT_STATE_OFF :
-+ PERF_EVENT_STATE_INACTIVE;
-+}
-+
-+/*
- * Called at perf_event creation and when events are attached/detached from a
- * group.
- */
-@@ -6050,8 +6059,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
- event->overflow_handler = overflow_handler;
- event->overflow_handler_context = context;
-
-- if (attr->disabled)
-- event->state = PERF_EVENT_STATE_OFF;
-+ perf_event__state_init(event);
-
- pmu = NULL;
-
-@@ -6433,9 +6441,17 @@ SYSCALL_DEFINE5(perf_event_open,
-
- mutex_lock(&gctx->mutex);
- perf_remove_from_context(group_leader);
-+
-+ /*
-+ * Removing from the context ends up with disabled
-+ * event. What we want here is event in the initial
-+ * startup state, ready to be add into new context.
-+ */
-+ perf_event__state_init(group_leader);
- list_for_each_entry(sibling, &group_leader->sibling_list,
- group_entry) {
- perf_remove_from_context(sibling);
-+ perf_event__state_init(sibling);
- put_ctx(gctx);
- }
- mutex_unlock(&gctx->mutex);
-diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
-index 66e4576..59474c5 100644
---- a/kernel/sched_fair.c
-+++ b/kernel/sched_fair.c
-@@ -5033,7 +5033,7 @@ static unsigned int get_rr_interval_fair(struct rq *rq, struct task_struct *task
- * idle runqueue:
- */
- if (rq->cfs.load.weight)
-- rr_interval = NS_TO_JIFFIES(sched_slice(&rq->cfs, se));
-+ rr_interval = NS_TO_JIFFIES(sched_slice(cfs_rq_of(se), se));
-
- return rr_interval;
- }
-diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index a584ad9..ce1067f 100644
---- a/kernel/trace/trace.c
-+++ b/kernel/trace/trace.c
-@@ -3375,6 +3375,7 @@ waitagain:
- memset(&iter->seq, 0,
- sizeof(struct trace_iterator) -
- offsetof(struct trace_iterator, seq));
-+ cpumask_clear(iter->started);
- iter->pos = -1;
-
- trace_event_read_lock();
-diff --git a/kernel/workqueue.c b/kernel/workqueue.c
-index 0ad2420..0bc9ff0 100644
---- a/kernel/workqueue.c
-+++ b/kernel/workqueue.c
-@@ -1920,6 +1920,15 @@ __acquires(&gcwq->lock)
- dump_stack();
- }
-
-+ /*
-+ * The following prevents a kworker from hogging CPU on !PREEMPT
-+ * kernels, where a requeueing work item waiting for something to
-+ * happen could deadlock with stop_machine as such work item could
-+ * indefinitely requeue itself while all other CPUs are trapped in
-+ * stop_machine.
-+ */
-+ cond_resched();
-+
- spin_lock_irq(&gcwq->lock);
-
- /* clear cpu intensive status */
-diff --git a/mm/bounce.c b/mm/bounce.c
-index 4e9ae72..f71a3b34 100644
---- a/mm/bounce.c
-+++ b/mm/bounce.c
-@@ -132,7 +132,7 @@ static void bounce_end_io(struct bio *bio, mempool_t *pool, int err)
- /*
- * free up bounce indirect pages used
- */
-- __bio_for_each_segment(bvec, bio, i, 0) {
-+ bio_for_each_segment_all(bvec, bio, i) {
- org_vec = bio_orig->bi_io_vec + i;
- if (bvec->bv_page == org_vec->bv_page)
- continue;
-diff --git a/mm/nommu.c b/mm/nommu.c
-index f0cd7ab..1db7971 100644
---- a/mm/nommu.c
-+++ b/mm/nommu.c
-@@ -1825,6 +1825,16 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
- }
- EXPORT_SYMBOL(remap_pfn_range);
-
-+int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
-+{
-+ unsigned long pfn = start >> PAGE_SHIFT;
-+ unsigned long vm_len = vma->vm_end - vma->vm_start;
-+
-+ pfn += vma->vm_pgoff;
-+ return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
-+}
-+EXPORT_SYMBOL(vm_iomap_memory);
-+
- int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
- unsigned long pgoff)
- {
-diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 5c028e2..b5afea2 100644
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -5777,6 +5777,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
- zone->free_area[order].nr_free--;
- __mod_zone_page_state(zone, NR_FREE_PAGES,
- - (1UL << order));
-+#ifdef CONFIG_HIGHMEM
-+ if (PageHighMem(page))
-+ totalhigh_pages -= 1 << order;
-+#endif
- for (i = 0; i < (1 << order); i++)
- SetPageReserved((page+i));
- pfn += (1 << order);
-diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
-index 5485077..739b073 100644
---- a/net/ipv4/sysctl_net_ipv4.c
-+++ b/net/ipv4/sysctl_net_ipv4.c
-@@ -32,6 +32,8 @@ static int tcp_adv_win_scale_min = -31;
- static int tcp_adv_win_scale_max = 31;
- static int ip_ttl_min = 1;
- static int ip_ttl_max = 255;
-+static int tcp_syn_retries_min = 1;
-+static int tcp_syn_retries_max = MAX_TCP_SYNCNT;
- static int ip_ping_group_range_min[] = { 0, 0 };
- static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
-
-@@ -231,7 +233,9 @@ static struct ctl_table ipv4_table[] = {
- .data = &sysctl_tcp_syn_retries,
- .maxlen = sizeof(int),
- .mode = 0644,
-- .proc_handler = proc_dointvec
-+ .proc_handler = proc_dointvec_minmax,
-+ .extra1 = &tcp_syn_retries_min,
-+ .extra2 = &tcp_syn_retries_max
- },
- {
- .procname = "tcp_synack_retries",
-diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
-index 449a918..f5af259 100644
---- a/net/ipv6/ip6mr.c
-+++ b/net/ipv6/ip6mr.c
-@@ -257,10 +257,12 @@ static void __net_exit ip6mr_rules_exit(struct net *net)
- {
- struct mr6_table *mrt, *next;
-
-+ rtnl_lock();
- list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) {
- list_del(&mrt->list);
- ip6mr_free_table(mrt);
- }
-+ rtnl_unlock();
- fib_rules_unregister(net->ipv6.mr6_rules_ops);
- }
- #else
-@@ -287,7 +289,10 @@ static int __net_init ip6mr_rules_init(struct net *net)
-
- static void __net_exit ip6mr_rules_exit(struct net *net)
- {
-+ rtnl_lock();
- ip6mr_free_table(net->ipv6.mrt6);
-+ net->ipv6.mrt6 = NULL;
-+ rtnl_unlock();
- }
- #endif
-
-diff --git a/net/key/af_key.c b/net/key/af_key.c
-index 6fefdfc..8dbdb8e 100644
---- a/net/key/af_key.c
-+++ b/net/key/af_key.c
-@@ -2073,6 +2073,7 @@ static int pfkey_xfrm_policy2msg(struct sk_buff *skb, const struct xfrm_policy *
- pol->sadb_x_policy_type = IPSEC_POLICY_NONE;
- }
- pol->sadb_x_policy_dir = dir+1;
-+ pol->sadb_x_policy_reserved = 0;
- pol->sadb_x_policy_id = xp->index;
- pol->sadb_x_policy_priority = xp->priority;
-
-@@ -2686,6 +2687,7 @@ static int key_notify_policy_flush(const struct km_event *c)
- hdr->sadb_msg_pid = c->pid;
- hdr->sadb_msg_version = PF_KEY_V2;
- hdr->sadb_msg_errno = (uint8_t) 0;
-+ hdr->sadb_msg_satype = SADB_SATYPE_UNSPEC;
- hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t));
- hdr->sadb_msg_reserved = 0;
- pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net);
-@@ -3108,7 +3110,9 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct
- pol->sadb_x_policy_exttype = SADB_X_EXT_POLICY;
- pol->sadb_x_policy_type = IPSEC_POLICY_IPSEC;
- pol->sadb_x_policy_dir = dir+1;
-+ pol->sadb_x_policy_reserved = 0;
- pol->sadb_x_policy_id = xp->index;
-+ pol->sadb_x_policy_priority = xp->priority;
-
- /* Set sadb_comb's. */
- if (x->id.proto == IPPROTO_AH)
-@@ -3496,6 +3500,7 @@ static int pfkey_send_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
- pol->sadb_x_policy_exttype = SADB_X_EXT_POLICY;
- pol->sadb_x_policy_type = IPSEC_POLICY_IPSEC;
- pol->sadb_x_policy_dir = dir + 1;
-+ pol->sadb_x_policy_reserved = 0;
- pol->sadb_x_policy_id = 0;
- pol->sadb_x_policy_priority = 0;
-
-diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
-index cd6cbdb..7d882fc 100644
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -821,8 +821,14 @@ ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
- struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
-
-- /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */
-- if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
-+ /*
-+ * Drop duplicate 802.11 retransmissions
-+ * (IEEE 802.11-2012: 9.3.2.10 "Duplicate detection and recovery")
-+ */
-+ if (rx->skb->len >= 24 && rx->sta &&
-+ !ieee80211_is_ctl(hdr->frame_control) &&
-+ !ieee80211_is_qos_nullfunc(hdr->frame_control) &&
-+ !is_multicast_ether_addr(hdr->addr1)) {
- if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
- rx->sta->last_seq_ctrl[rx->seqno_idx] ==
- hdr->seq_ctrl)) {
-diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c
-index e25e490..6e38ef0 100644
---- a/net/sched/sch_atm.c
-+++ b/net/sched/sch_atm.c
-@@ -606,6 +606,7 @@ static int atm_tc_dump_class(struct Qdisc *sch, unsigned long cl,
- struct sockaddr_atmpvc pvc;
- int state;
-
-+ memset(&pvc, 0, sizeof(pvc));
- pvc.sap_family = AF_ATMPVC;
- pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1;
- pvc.sap_addr.vpi = flow->vcc->vpi;
-diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
-index b7cddb9..7f59944 100644
---- a/net/sched/sch_cbq.c
-+++ b/net/sched/sch_cbq.c
-@@ -1467,6 +1467,7 @@ static int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
- unsigned char *b = skb_tail_pointer(skb);
- struct tc_cbq_wrropt opt;
-
-+ memset(&opt, 0, sizeof(opt));
- opt.flags = 0;
- opt.allot = cl->allot;
- opt.priority = cl->priority + 1;
-diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
-index 96eb168..3dd7207 100644
---- a/net/sctp/outqueue.c
-+++ b/net/sctp/outqueue.c
-@@ -205,6 +205,8 @@ static inline int sctp_cacc_skip(struct sctp_transport *primary,
- */
- void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
- {
-+ memset(q, 0, sizeof(struct sctp_outq));
-+
- q->asoc = asoc;
- INIT_LIST_HEAD(&q->out_chunk_list);
- INIT_LIST_HEAD(&q->control_chunk_list);
-@@ -212,13 +214,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
- INIT_LIST_HEAD(&q->sacked);
- INIT_LIST_HEAD(&q->abandoned);
-
-- q->fast_rtx = 0;
-- q->outstanding_bytes = 0;
- q->empty = 1;
-- q->cork = 0;
--
-- q->malloced = 0;
-- q->out_qlen = 0;
- }
-
- /* Free the outqueue structure and any related pending chunks.
-diff --git a/net/sunrpc/auth_gss/gss_krb5_wrap.c b/net/sunrpc/auth_gss/gss_krb5_wrap.c
-index 2763e3e..38f388c 100644
---- a/net/sunrpc/auth_gss/gss_krb5_wrap.c
-+++ b/net/sunrpc/auth_gss/gss_krb5_wrap.c
-@@ -82,9 +82,9 @@ gss_krb5_remove_padding(struct xdr_buf *buf, int blocksize)
- >>PAGE_CACHE_SHIFT;
- unsigned int offset = (buf->page_base + len - 1)
- & (PAGE_CACHE_SIZE - 1);
-- ptr = kmap_atomic(buf->pages[last], KM_USER0);
-+ ptr = kmap_atomic(buf->pages[last]);
- pad = *(ptr + offset);
-- kunmap_atomic(ptr, KM_USER0);
-+ kunmap_atomic(ptr);
- goto out;
- } else
- len -= buf->page_len;
-diff --git a/net/sunrpc/socklib.c b/net/sunrpc/socklib.c
-index 145e6784..0a648c5 100644
---- a/net/sunrpc/socklib.c
-+++ b/net/sunrpc/socklib.c
-@@ -114,7 +114,7 @@ ssize_t xdr_partial_copy_from_skb(struct xdr_buf *xdr, unsigned int base, struct
- }
-
- len = PAGE_CACHE_SIZE;
-- kaddr = kmap_atomic(*ppage, KM_SKB_SUNRPC_DATA);
-+ kaddr = kmap_atomic(*ppage);
- if (base) {
- len -= base;
- if (pglen < len)
-@@ -127,7 +127,7 @@ ssize_t xdr_partial_copy_from_skb(struct xdr_buf *xdr, unsigned int base, struct
- ret = copy_actor(desc, kaddr, len);
- }
- flush_dcache_page(*ppage);
-- kunmap_atomic(kaddr, KM_SKB_SUNRPC_DATA);
-+ kunmap_atomic(kaddr);
- copied += ret;
- if (ret != len || !desc->count)
- goto out;
-diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
-index 593f4c6..6997cdd 100644
---- a/net/sunrpc/xdr.c
-+++ b/net/sunrpc/xdr.c
-@@ -122,9 +122,9 @@ xdr_terminate_string(struct xdr_buf *buf, const u32 len)
- {
- char *kaddr;
-
-- kaddr = kmap_atomic(buf->pages[0], KM_USER0);
-+ kaddr = kmap_atomic(buf->pages[0]);
- kaddr[buf->page_base + len] = '\0';
-- kunmap_atomic(kaddr, KM_USER0);
-+ kunmap_atomic(kaddr);
- }
- EXPORT_SYMBOL_GPL(xdr_terminate_string);
-
-@@ -232,12 +232,15 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base,
- pgto_base -= copy;
- pgfrom_base -= copy;
-
-- vto = kmap_atomic(*pgto, KM_USER0);
-- vfrom = kmap_atomic(*pgfrom, KM_USER1);
-- memmove(vto + pgto_base, vfrom + pgfrom_base, copy);
-+ vto = kmap_atomic(*pgto);
-+ if (*pgto != *pgfrom) {
-+ vfrom = kmap_atomic(*pgfrom);
-+ memcpy(vto + pgto_base, vfrom + pgfrom_base, copy);
-+ kunmap_atomic(vfrom);
-+ } else
-+ memmove(vto + pgto_base, vto + pgfrom_base, copy);
- flush_dcache_page(*pgto);
-- kunmap_atomic(vfrom, KM_USER1);
-- kunmap_atomic(vto, KM_USER0);
-+ kunmap_atomic(vto);
-
- } while ((len -= copy) != 0);
- }
-@@ -267,9 +270,9 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
- if (copy > len)
- copy = len;
-
-- vto = kmap_atomic(*pgto, KM_USER0);
-+ vto = kmap_atomic(*pgto);
- memcpy(vto + pgbase, p, copy);
-- kunmap_atomic(vto, KM_USER0);
-+ kunmap_atomic(vto);
-
- len -= copy;
- if (len == 0)
-@@ -311,9 +314,9 @@ _copy_from_pages(char *p, struct page **pages, size_t pgbase, size_t len)
- if (copy > len)
- copy = len;
-
-- vfrom = kmap_atomic(*pgfrom, KM_USER0);
-+ vfrom = kmap_atomic(*pgfrom);
- memcpy(p, vfrom + pgbase, copy);
-- kunmap_atomic(vfrom, KM_USER0);
-+ kunmap_atomic(vfrom);
-
- pgbase += copy;
- if (pgbase == PAGE_CACHE_SIZE) {
-diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
-index 554d081..1776e57 100644
---- a/net/sunrpc/xprtrdma/rpc_rdma.c
-+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
-@@ -338,9 +338,9 @@ rpcrdma_inline_pullup(struct rpc_rqst *rqst, int pad)
- curlen = copy_len;
- dprintk("RPC: %s: page %d destp 0x%p len %d curlen %d\n",
- __func__, i, destp, copy_len, curlen);
-- srcp = kmap_atomic(ppages[i], KM_SKB_SUNRPC_DATA);
-+ srcp = kmap_atomic(ppages[i]);
- memcpy(destp, srcp+page_base, curlen);
-- kunmap_atomic(srcp, KM_SKB_SUNRPC_DATA);
-+ kunmap_atomic(srcp);
- rqst->rq_svec[0].iov_len += curlen;
- destp += curlen;
- copy_len -= curlen;
-@@ -639,10 +639,10 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
- dprintk("RPC: %s: page %d"
- " srcp 0x%p len %d curlen %d\n",
- __func__, i, srcp, copy_len, curlen);
-- destp = kmap_atomic(ppages[i], KM_SKB_SUNRPC_DATA);
-+ destp = kmap_atomic(ppages[i]);
- memcpy(destp + page_base, srcp, curlen);
- flush_dcache_page(ppages[i]);
-- kunmap_atomic(destp, KM_SKB_SUNRPC_DATA);
-+ kunmap_atomic(destp);
- srcp += curlen;
- copy_len -= curlen;
- if (copy_len == 0)
-diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
-index c06c365..6d4d263 100644
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -4826,12 +4826,14 @@ EXPORT_SYMBOL(cfg80211_testmode_alloc_event_skb);
-
- void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
- {
-+ struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0];
- void *hdr = ((void **)skb->cb)[1];
- struct nlattr *data = ((void **)skb->cb)[2];
-
- nla_nest_end(skb, data);
- genlmsg_end(skb, hdr);
-- genlmsg_multicast(skb, 0, nl80211_testmode_mcgrp.id, gfp);
-+ genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), skb, 0,
-+ nl80211_testmode_mcgrp.id, gfp);
- }
- EXPORT_SYMBOL(cfg80211_testmode_event);
- #endif
-@@ -7282,7 +7284,8 @@ void nl80211_send_mgmt_tx_status(struct cfg80211_registered_device *rdev,
- return;
- }
-
-- genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, gfp);
-+ genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
-+ nl80211_mlme_mcgrp.id, gfp);
- return;
-
- nla_put_failure:
-diff --git a/sound/i2c/other/ak4xxx-adda.c b/sound/i2c/other/ak4xxx-adda.c
-index cef813d..ed726d1 100644
---- a/sound/i2c/other/ak4xxx-adda.c
-+++ b/sound/i2c/other/ak4xxx-adda.c
-@@ -571,7 +571,7 @@ static int ak4xxx_capture_source_info(struct snd_kcontrol *kcontrol,
- struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);
- int mixer_ch = AK_GET_SHIFT(kcontrol->private_value);
- const char **input_names;
-- int num_names, idx;
-+ unsigned int num_names, idx;
-
- num_names = ak4xxx_capture_num_inputs(ak, mixer_ch);
- if (!num_names)
-diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
-index 97871be..cba84ef 100644
---- a/sound/isa/opti9xx/opti92x-ad1848.c
-+++ b/sound/isa/opti9xx/opti92x-ad1848.c
-@@ -173,11 +173,7 @@ MODULE_DEVICE_TABLE(pnp_card, snd_opti9xx_pnpids);
-
- #endif /* CONFIG_PNP */
-
--#ifdef OPTi93X
--#define DEV_NAME "opti93x"
--#else
--#define DEV_NAME "opti92x"
--#endif
-+#define DEV_NAME KBUILD_MODNAME
-
- static char * snd_opti9xx_names[] = {
- "unknown",
-@@ -1126,7 +1122,7 @@ static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard)
-
- static struct pnp_card_driver opti9xx_pnpc_driver = {
- .flags = PNP_DRIVER_RES_DISABLE,
-- .name = "opti9xx",
-+ .name = DEV_NAME,
- .id_table = snd_opti9xx_pnpids,
- .probe = snd_opti9xx_pnp_probe,
- .remove = __devexit_p(snd_opti9xx_pnp_remove),
-diff --git a/sound/oss/Kconfig b/sound/oss/Kconfig
-index 6c9e8e8..1fc28f5 100644
---- a/sound/oss/Kconfig
-+++ b/sound/oss/Kconfig
-@@ -250,6 +250,7 @@ config MSND_FIFOSIZE
- menuconfig SOUND_OSS
- tristate "OSS sound modules"
- depends on ISA_DMA_API && VIRT_TO_BUS
-+ depends on !GENERIC_ISA_DMA_SUPPORT_BROKEN
- help
- OSS is the Open Sound System suite of sound card drivers. They make
- sound programming easier since they provide a common API. Say Y or
-diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c
-index c994daa..af6ec8d 100644
---- a/sound/usb/6fire/comm.c
-+++ b/sound/usb/6fire/comm.c
-@@ -111,19 +111,37 @@ static int usb6fire_comm_send_buffer(u8 *buffer, struct usb_device *dev)
- static int usb6fire_comm_write8(struct comm_runtime *rt, u8 request,
- u8 reg, u8 value)
- {
-- u8 buffer[13]; /* 13: maximum length of message */
-+ u8 *buffer;
-+ int ret;
-+
-+ /* 13: maximum length of message */
-+ buffer = kmalloc(13, GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-
- usb6fire_comm_init_buffer(buffer, 0x00, request, reg, value, 0x00);
-- return usb6fire_comm_send_buffer(buffer, rt->chip->dev);
-+ ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev);
-+
-+ kfree(buffer);
-+ return ret;
- }
-
- static int usb6fire_comm_write16(struct comm_runtime *rt, u8 request,
- u8 reg, u8 vl, u8 vh)
- {
-- u8 buffer[13]; /* 13: maximum length of message */
-+ u8 *buffer;
-+ int ret;
-+
-+ /* 13: maximum length of message */
-+ buffer = kmalloc(13, GFP_KERNEL);
-+ if (!buffer)
-+ return -ENOMEM;
-
- usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, vh);
-- return usb6fire_comm_send_buffer(buffer, rt->chip->dev);
-+ ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev);
-+
-+ kfree(buffer);
-+ return ret;
- }
-
- int __devinit usb6fire_comm_init(struct sfire_chip *chip)
-@@ -136,6 +154,12 @@ int __devinit usb6fire_comm_init(struct sfire_chip *chip)
- if (!rt)
- return -ENOMEM;
-
-+ rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, GFP_KERNEL);
-+ if (!rt->receiver_buffer) {
-+ kfree(rt);
-+ return -ENOMEM;
-+ }
-+
- rt->serial = 1;
- rt->chip = chip;
- usb_init_urb(urb);
-@@ -153,6 +177,7 @@ int __devinit usb6fire_comm_init(struct sfire_chip *chip)
- urb->interval = 1;
- ret = usb_submit_urb(urb, GFP_KERNEL);
- if (ret < 0) {
-+ kfree(rt->receiver_buffer);
- kfree(rt);
- snd_printk(KERN_ERR PREFIX "cannot create comm data receiver.");
- return ret;
-@@ -171,6 +196,9 @@ void usb6fire_comm_abort(struct sfire_chip *chip)
-
- void usb6fire_comm_destroy(struct sfire_chip *chip)
- {
-- kfree(chip->comm);
-+ struct comm_runtime *rt = chip->comm;
-+
-+ kfree(rt->receiver_buffer);
-+ kfree(rt);
- chip->comm = NULL;
- }
-diff --git a/sound/usb/6fire/comm.h b/sound/usb/6fire/comm.h
-index edc5dc8..19e2f92 100644
---- a/sound/usb/6fire/comm.h
-+++ b/sound/usb/6fire/comm.h
-@@ -25,7 +25,7 @@ struct comm_runtime {
- struct sfire_chip *chip;
-
- struct urb receiver;
-- u8 receiver_buffer[COMM_RECEIVER_BUFSIZE];
-+ u8 *receiver_buffer;
-
- u8 serial; /* urb serial */
-
-diff --git a/sound/usb/6fire/midi.c b/sound/usb/6fire/midi.c
-index 13f4509..8283c5d 100644
---- a/sound/usb/6fire/midi.c
-+++ b/sound/usb/6fire/midi.c
-@@ -20,6 +20,10 @@
- #include "chip.h"
- #include "comm.h"
-
-+enum {
-+ MIDI_BUFSIZE = 64
-+};
-+
- static void usb6fire_midi_out_handler(struct urb *urb)
- {
- struct midi_runtime *rt = urb->context;
-@@ -157,6 +161,12 @@ int __devinit usb6fire_midi_init(struct sfire_chip *chip)
- if (!rt)
- return -ENOMEM;
-
-+ rt->out_buffer = kzalloc(MIDI_BUFSIZE, GFP_KERNEL);
-+ if (!rt->out_buffer) {
-+ kfree(rt);
-+ return -ENOMEM;
-+ }
-+
- rt->chip = chip;
- rt->in_received = usb6fire_midi_in_received;
- rt->out_buffer[0] = 0x80; /* 'send midi' command */
-@@ -170,6 +180,7 @@ int __devinit usb6fire_midi_init(struct sfire_chip *chip)
-
- ret = snd_rawmidi_new(chip->card, "6FireUSB", 0, 1, 1, &rt->instance);
- if (ret < 0) {
-+ kfree(rt->out_buffer);
- kfree(rt);
- snd_printk(KERN_ERR PREFIX "unable to create midi.\n");
- return ret;
-@@ -198,6 +209,9 @@ void usb6fire_midi_abort(struct sfire_chip *chip)
-
- void usb6fire_midi_destroy(struct sfire_chip *chip)
- {
-- kfree(chip->midi);
-+ struct midi_runtime *rt = chip->midi;
-+
-+ kfree(rt->out_buffer);
-+ kfree(rt);
- chip->midi = NULL;
- }
-diff --git a/sound/usb/6fire/midi.h b/sound/usb/6fire/midi.h
-index 97a7bf6..7f8f448 100644
---- a/sound/usb/6fire/midi.h
-+++ b/sound/usb/6fire/midi.h
-@@ -17,10 +17,6 @@
-
- #include "common.h"
-
--enum {
-- MIDI_BUFSIZE = 64
--};
--
- struct midi_runtime {
- struct sfire_chip *chip;
- struct snd_rawmidi *instance;
-@@ -33,7 +29,7 @@ struct midi_runtime {
- struct snd_rawmidi_substream *out;
- struct urb out_urb;
- u8 out_serial; /* serial number of out packet */
-- u8 out_buffer[MIDI_BUFSIZE];
-+ u8 *out_buffer;
- int buffer_offset;
-
- void (*in_received)(struct midi_runtime *rt, u8 *data, int length);
-diff --git a/sound/usb/6fire/pcm.c b/sound/usb/6fire/pcm.c
-index 888a7c7..8609c74 100644
---- a/sound/usb/6fire/pcm.c
-+++ b/sound/usb/6fire/pcm.c
-@@ -579,6 +579,33 @@ static void __devinit usb6fire_pcm_init_urb(struct pcm_urb *urb,
- urb->instance.number_of_packets = PCM_N_PACKETS_PER_URB;
- }
-
-+static int usb6fire_pcm_buffers_init(struct pcm_runtime *rt)
-+{
-+ int i;
-+
-+ for (i = 0; i < PCM_N_URBS; i++) {
-+ rt->out_urbs[i].buffer = kzalloc(PCM_N_PACKETS_PER_URB
-+ * PCM_MAX_PACKET_SIZE, GFP_KERNEL);
-+ if (!rt->out_urbs[i].buffer)
-+ return -ENOMEM;
-+ rt->in_urbs[i].buffer = kzalloc(PCM_N_PACKETS_PER_URB
-+ * PCM_MAX_PACKET_SIZE, GFP_KERNEL);
-+ if (!rt->in_urbs[i].buffer)
-+ return -ENOMEM;
-+ }
-+ return 0;
-+}
-+
-+static void usb6fire_pcm_buffers_destroy(struct pcm_runtime *rt)
-+{
-+ int i;
-+
-+ for (i = 0; i < PCM_N_URBS; i++) {
-+ kfree(rt->out_urbs[i].buffer);
-+ kfree(rt->in_urbs[i].buffer);
-+ }
-+}
-+
- int __devinit usb6fire_pcm_init(struct sfire_chip *chip)
- {
- int i;
-@@ -590,6 +617,13 @@ int __devinit usb6fire_pcm_init(struct sfire_chip *chip)
- if (!rt)
- return -ENOMEM;
-
-+ ret = usb6fire_pcm_buffers_init(rt);
-+ if (ret) {
-+ usb6fire_pcm_buffers_destroy(rt);
-+ kfree(rt);
-+ return ret;
-+ }
-+
- rt->chip = chip;
- rt->stream_state = STREAM_DISABLED;
- rt->rate = ARRAY_SIZE(rates);
-@@ -611,6 +645,7 @@ int __devinit usb6fire_pcm_init(struct sfire_chip *chip)
-
- ret = snd_pcm_new(chip->card, "DMX6FireUSB", 0, 1, 1, &pcm);
- if (ret < 0) {
-+ usb6fire_pcm_buffers_destroy(rt);
- kfree(rt);
- snd_printk(KERN_ERR PREFIX "cannot create pcm instance.\n");
- return ret;
-@@ -626,6 +661,7 @@ int __devinit usb6fire_pcm_init(struct sfire_chip *chip)
- snd_dma_continuous_data(GFP_KERNEL),
- MAX_BUFSIZE, MAX_BUFSIZE);
- if (ret) {
-+ usb6fire_pcm_buffers_destroy(rt);
- kfree(rt);
- snd_printk(KERN_ERR PREFIX
- "error preallocating pcm buffers.\n");
-@@ -670,6 +706,9 @@ void usb6fire_pcm_abort(struct sfire_chip *chip)
-
- void usb6fire_pcm_destroy(struct sfire_chip *chip)
- {
-- kfree(chip->pcm);
-+ struct pcm_runtime *rt = chip->pcm;
-+
-+ usb6fire_pcm_buffers_destroy(rt);
-+ kfree(rt);
- chip->pcm = NULL;
- }
-diff --git a/sound/usb/6fire/pcm.h b/sound/usb/6fire/pcm.h
-index 2bee813..a8e8899 100644
---- a/sound/usb/6fire/pcm.h
-+++ b/sound/usb/6fire/pcm.h
-@@ -33,7 +33,7 @@ struct pcm_urb {
- struct urb instance;
- struct usb_iso_packet_descriptor packets[PCM_N_PACKETS_PER_URB];
- /* END DO NOT SEPARATE */
-- u8 buffer[PCM_N_PACKETS_PER_URB * PCM_MAX_PACKET_SIZE];
-+ u8 *buffer;
-
- struct pcm_urb *peer;
- };
-diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
-index aeb26eb..41b9fe0 100644
---- a/sound/usb/mixer.c
-+++ b/sound/usb/mixer.c
-@@ -720,8 +720,20 @@ static int check_input_term(struct mixer_build *state, int id, struct usb_audio_
- return 0;
- }
- case UAC1_PROCESSING_UNIT:
-- case UAC1_EXTENSION_UNIT: {
-+ case UAC1_EXTENSION_UNIT:
-+ /* UAC2_PROCESSING_UNIT_V2 */
-+ /* UAC2_EFFECT_UNIT */
-+ case UAC2_EXTENSION_UNIT_V2: {
- struct uac_processing_unit_descriptor *d = p1;
-+
-+ if (state->mixer->protocol == UAC_VERSION_2 &&
-+ hdr[2] == UAC2_EFFECT_UNIT) {
-+ /* UAC2/UAC1 unit IDs overlap here in an
-+ * uncompatible way. Ignore this unit for now.
-+ */
-+ return 0;
-+ }
-+
- if (d->bNrInPins) {
- id = d->baSourceID[0];
- break; /* continue to parse */
-@@ -1956,6 +1968,8 @@ static int parse_audio_unit(struct mixer_build *state, int unitid)
- return parse_audio_extension_unit(state, unitid, p1);
- else /* UAC_VERSION_2 */
- return parse_audio_processing_unit(state, unitid, p1);
-+ case UAC2_EXTENSION_UNIT_V2:
-+ return parse_audio_extension_unit(state, unitid, p1);
- default:
- snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]);
- return -EINVAL;
-diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
-index 78284b1..42dffa0 100644
---- a/tools/perf/util/map.c
-+++ b/tools/perf/util/map.c
-@@ -15,7 +15,8 @@ const char *map_type__name[MAP__NR_TYPES] = {
-
- static inline int is_anon_memory(const char *filename)
- {
-- return strcmp(filename, "//anon") == 0;
-+ return !strcmp(filename, "//anon") ||
-+ !strcmp(filename, "/anon_hugepage (deleted)");
- }
-
- static inline int is_no_dso_memory(const char *filename)