diff options
Diffstat (limited to '1002_linux-4.0.3.patch')
-rw-r--r-- | 1002_linux-4.0.3.patch | 2827 |
1 files changed, 0 insertions, 2827 deletions
diff --git a/1002_linux-4.0.3.patch b/1002_linux-4.0.3.patch deleted file mode 100644 index d137bf26..00000000 --- a/1002_linux-4.0.3.patch +++ /dev/null @@ -1,2827 +0,0 @@ -diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index bfcb1a62a7b4..4d68ec841304 100644 ---- a/Documentation/kernel-parameters.txt -+++ b/Documentation/kernel-parameters.txt -@@ -3746,6 +3746,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. - READ_CAPACITY_16 command); - f = NO_REPORT_OPCODES (don't use report opcodes - command, uas only); -+ g = MAX_SECTORS_240 (don't transfer more than -+ 240 sectors at a time, uas only); - h = CAPACITY_HEURISTICS (decrease the - reported device capacity by one - sector if the number is odd); -diff --git a/Makefile b/Makefile -index 0649a6011a76..dc9f43a019d6 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,6 +1,6 @@ - VERSION = 4 - PATCHLEVEL = 0 --SUBLEVEL = 2 -+SUBLEVEL = 3 - EXTRAVERSION = - NAME = Hurr durr I'ma sheep - -diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c -index ef7d112f5ce0..b0bd4e5fd5cf 100644 ---- a/arch/arm64/mm/dma-mapping.c -+++ b/arch/arm64/mm/dma-mapping.c -@@ -67,8 +67,7 @@ static void *__alloc_from_pool(size_t size, struct page **ret_page, gfp_t flags) - - *ret_page = phys_to_page(phys); - ptr = (void *)val; -- if (flags & __GFP_ZERO) -- memset(ptr, 0, size); -+ memset(ptr, 0, size); - } - - return ptr; -@@ -105,7 +104,6 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size, - struct page *page; - void *addr; - -- size = PAGE_ALIGN(size); - page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT, - get_order(size)); - if (!page) -@@ -113,8 +111,7 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size, - - *dma_handle = phys_to_dma(dev, page_to_phys(page)); - addr = page_address(page); -- if (flags & __GFP_ZERO) -- memset(addr, 0, size); -+ memset(addr, 0, size); - return addr; - } else { - return swiotlb_alloc_coherent(dev, size, dma_handle, flags); -@@ -195,6 +192,8 @@ static void __dma_free(struct device *dev, size_t size, - { - void *swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle)); - -+ size = PAGE_ALIGN(size); -+ - if (!is_device_dma_coherent(dev)) { - if (__free_from_pool(vaddr, size)) - return; -diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig -index c7a16904cd03..1a313c468d65 100644 ---- a/arch/mips/Kconfig -+++ b/arch/mips/Kconfig -@@ -2072,7 +2072,7 @@ config MIPSR2_TO_R6_EMULATOR - help - Choose this option if you want to run non-R6 MIPS userland code. - Even if you say 'Y' here, the emulator will still be disabled by -- default. You can enable it using the 'mipsr2emul' kernel option. -+ default. You can enable it using the 'mipsr2emu' kernel option. - The only reason this is a build-time option is to save ~14K from the - final kernel image. - comment "MIPS R2-to-R6 emulator is only available for UP kernels" -@@ -2142,7 +2142,7 @@ config MIPS_CMP - - config MIPS_CPS - bool "MIPS Coherent Processing System support" -- depends on SYS_SUPPORTS_MIPS_CPS -+ depends on SYS_SUPPORTS_MIPS_CPS && !64BIT - select MIPS_CM - select MIPS_CPC - select MIPS_CPS_PM if HOTPLUG_CPU -diff --git a/arch/mips/Makefile b/arch/mips/Makefile -index 8f57fc72d62c..1b4dab1e6ab8 100644 ---- a/arch/mips/Makefile -+++ b/arch/mips/Makefile -@@ -197,11 +197,17 @@ endif - # Warning: the 64-bit MIPS architecture does not support the `smartmips' extension - # Pass -Wa,--no-warn to disable all assembler warnings until the kernel code has - # been fixed properly. --mips-cflags := "$(cflags-y)" --cflags-$(CONFIG_CPU_HAS_SMARTMIPS) += $(call cc-option,$(mips-cflags),-msmartmips) -Wa,--no-warn --cflags-$(CONFIG_CPU_MICROMIPS) += $(call cc-option,$(mips-cflags),-mmicromips) -+mips-cflags := $(cflags-y) -+ifeq ($(CONFIG_CPU_HAS_SMARTMIPS),y) -+smartmips-ase := $(call cc-option-yn,$(mips-cflags) -msmartmips) -+cflags-$(smartmips-ase) += -msmartmips -Wa,--no-warn -+endif -+ifeq ($(CONFIG_CPU_MICROMIPS),y) -+micromips-ase := $(call cc-option-yn,$(mips-cflags) -mmicromips) -+cflags-$(micromips-ase) += -mmicromips -+endif - ifeq ($(CONFIG_CPU_HAS_MSA),y) --toolchain-msa := $(call cc-option-yn,-$(mips-cflags),mhard-float -mfp64 -Wa$(comma)-mmsa) -+toolchain-msa := $(call cc-option-yn,$(mips-cflags) -mhard-float -mfp64 -Wa$(comma)-mmsa) - cflags-$(toolchain-msa) += -DTOOLCHAIN_SUPPORTS_MSA - endif - -diff --git a/arch/mips/bcm47xx/board.c b/arch/mips/bcm47xx/board.c -index b3ae068ca4fa..3fd369d74444 100644 ---- a/arch/mips/bcm47xx/board.c -+++ b/arch/mips/bcm47xx/board.c -@@ -247,8 +247,8 @@ static __init const struct bcm47xx_board_type *bcm47xx_board_get_nvram(void) - } - - if (bcm47xx_nvram_getenv("hardware_version", buf1, sizeof(buf1)) >= 0 && -- bcm47xx_nvram_getenv("boardtype", buf2, sizeof(buf2)) >= 0) { -- for (e2 = bcm47xx_board_list_boot_hw; e2->value1; e2++) { -+ bcm47xx_nvram_getenv("boardnum", buf2, sizeof(buf2)) >= 0) { -+ for (e2 = bcm47xx_board_list_hw_version_num; e2->value1; e2++) { - if (!strstarts(buf1, e2->value1) && - !strcmp(buf2, e2->value2)) - return &e2->board; -diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c -index e1f27d653f60..7019e2967009 100644 ---- a/arch/mips/bcm63xx/prom.c -+++ b/arch/mips/bcm63xx/prom.c -@@ -17,7 +17,6 @@ - #include <bcm63xx_cpu.h> - #include <bcm63xx_io.h> - #include <bcm63xx_regs.h> --#include <bcm63xx_gpio.h> - - void __init prom_init(void) - { -@@ -53,9 +52,6 @@ void __init prom_init(void) - reg &= ~mask; - bcm_perf_writel(reg, PERF_CKCTL_REG); - -- /* register gpiochip */ -- bcm63xx_gpio_init(); -- - /* do low level board init */ - board_prom_init(); - -diff --git a/arch/mips/bcm63xx/setup.c b/arch/mips/bcm63xx/setup.c -index 6660c7ddf87b..240fb4ffa55c 100644 ---- a/arch/mips/bcm63xx/setup.c -+++ b/arch/mips/bcm63xx/setup.c -@@ -20,6 +20,7 @@ - #include <bcm63xx_cpu.h> - #include <bcm63xx_regs.h> - #include <bcm63xx_io.h> -+#include <bcm63xx_gpio.h> - - void bcm63xx_machine_halt(void) - { -@@ -160,6 +161,9 @@ void __init plat_mem_setup(void) - - int __init bcm63xx_register_devices(void) - { -+ /* register gpiochip */ -+ bcm63xx_gpio_init(); -+ - return board_register_devices(); - } - -diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c -index 7d8987818ccf..d8960d46417b 100644 ---- a/arch/mips/cavium-octeon/dma-octeon.c -+++ b/arch/mips/cavium-octeon/dma-octeon.c -@@ -306,7 +306,7 @@ void __init plat_swiotlb_setup(void) - swiotlbsize = 64 * (1<<20); - } - #endif --#ifdef CONFIG_USB_OCTEON_OHCI -+#ifdef CONFIG_USB_OHCI_HCD_PLATFORM - /* OCTEON II ohci is only 32-bit. */ - if (OCTEON_IS_OCTEON2() && max_addr >= 0x100000000ul) - swiotlbsize = 64 * (1<<20); -diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c -index a42110e7edbc..a7f40820e567 100644 ---- a/arch/mips/cavium-octeon/setup.c -+++ b/arch/mips/cavium-octeon/setup.c -@@ -413,7 +413,10 @@ static void octeon_restart(char *command) - - mb(); - while (1) -- cvmx_write_csr(CVMX_CIU_SOFT_RST, 1); -+ if (OCTEON_IS_OCTEON3()) -+ cvmx_write_csr(CVMX_RST_SOFT_RST, 1); -+ else -+ cvmx_write_csr(CVMX_CIU_SOFT_RST, 1); - } - - -diff --git a/arch/mips/include/asm/cacheflush.h b/arch/mips/include/asm/cacheflush.h -index e08381a37f8b..723229f4cf27 100644 ---- a/arch/mips/include/asm/cacheflush.h -+++ b/arch/mips/include/asm/cacheflush.h -@@ -29,6 +29,20 @@ - * - flush_icache_all() flush the entire instruction cache - * - flush_data_cache_page() flushes a page from the data cache - */ -+ -+ /* -+ * This flag is used to indicate that the page pointed to by a pte -+ * is dirty and requires cleaning before returning it to the user. -+ */ -+#define PG_dcache_dirty PG_arch_1 -+ -+#define Page_dcache_dirty(page) \ -+ test_bit(PG_dcache_dirty, &(page)->flags) -+#define SetPageDcacheDirty(page) \ -+ set_bit(PG_dcache_dirty, &(page)->flags) -+#define ClearPageDcacheDirty(page) \ -+ clear_bit(PG_dcache_dirty, &(page)->flags) -+ - extern void (*flush_cache_all)(void); - extern void (*__flush_cache_all)(void); - extern void (*flush_cache_mm)(struct mm_struct *mm); -@@ -37,13 +51,15 @@ extern void (*flush_cache_range)(struct vm_area_struct *vma, - unsigned long start, unsigned long end); - extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); - extern void __flush_dcache_page(struct page *page); -+extern void __flush_icache_page(struct vm_area_struct *vma, struct page *page); - - #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 - static inline void flush_dcache_page(struct page *page) - { -- if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) -+ if (cpu_has_dc_aliases) - __flush_dcache_page(page); -- -+ else if (!cpu_has_ic_fills_f_dc) -+ SetPageDcacheDirty(page); - } - - #define flush_dcache_mmap_lock(mapping) do { } while (0) -@@ -61,6 +77,11 @@ static inline void flush_anon_page(struct vm_area_struct *vma, - static inline void flush_icache_page(struct vm_area_struct *vma, - struct page *page) - { -+ if (!cpu_has_ic_fills_f_dc && (vma->vm_flags & VM_EXEC) && -+ Page_dcache_dirty(page)) { -+ __flush_icache_page(vma, page); -+ ClearPageDcacheDirty(page); -+ } - } - - extern void (*flush_icache_range)(unsigned long start, unsigned long end); -@@ -95,19 +116,6 @@ extern void (*flush_icache_all)(void); - extern void (*local_flush_data_cache_page)(void * addr); - extern void (*flush_data_cache_page)(unsigned long addr); - --/* -- * This flag is used to indicate that the page pointed to by a pte -- * is dirty and requires cleaning before returning it to the user. -- */ --#define PG_dcache_dirty PG_arch_1 -- --#define Page_dcache_dirty(page) \ -- test_bit(PG_dcache_dirty, &(page)->flags) --#define SetPageDcacheDirty(page) \ -- set_bit(PG_dcache_dirty, &(page)->flags) --#define ClearPageDcacheDirty(page) \ -- clear_bit(PG_dcache_dirty, &(page)->flags) -- - /* Run kernel code uncached, useful for cache probing functions. */ - unsigned long run_uncached(void *func); - -diff --git a/arch/mips/include/asm/cpu-features.h b/arch/mips/include/asm/cpu-features.h -index 0d8208de9a3f..345fd7f80730 100644 ---- a/arch/mips/include/asm/cpu-features.h -+++ b/arch/mips/include/asm/cpu-features.h -@@ -235,8 +235,39 @@ - /* MIPSR2 and MIPSR6 have a lot of similarities */ - #define cpu_has_mips_r2_r6 (cpu_has_mips_r2 | cpu_has_mips_r6) - -+/* -+ * cpu_has_mips_r2_exec_hazard - return if IHB is required on current processor -+ * -+ * Returns non-zero value if the current processor implementation requires -+ * an IHB instruction to deal with an instruction hazard as per MIPS R2 -+ * architecture specification, zero otherwise. -+ */ - #ifndef cpu_has_mips_r2_exec_hazard --#define cpu_has_mips_r2_exec_hazard (cpu_has_mips_r2 | cpu_has_mips_r6) -+#define cpu_has_mips_r2_exec_hazard \ -+({ \ -+ int __res; \ -+ \ -+ switch (current_cpu_type()) { \ -+ case CPU_M14KC: \ -+ case CPU_74K: \ -+ case CPU_1074K: \ -+ case CPU_PROAPTIV: \ -+ case CPU_P5600: \ -+ case CPU_M5150: \ -+ case CPU_QEMU_GENERIC: \ -+ case CPU_CAVIUM_OCTEON: \ -+ case CPU_CAVIUM_OCTEON_PLUS: \ -+ case CPU_CAVIUM_OCTEON2: \ -+ case CPU_CAVIUM_OCTEON3: \ -+ __res = 0; \ -+ break; \ -+ \ -+ default: \ -+ __res = 1; \ -+ } \ -+ \ -+ __res; \ -+}) - #endif - - /* -diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h -index 535f196ffe02..694925a26924 100644 ---- a/arch/mips/include/asm/elf.h -+++ b/arch/mips/include/asm/elf.h -@@ -294,6 +294,9 @@ do { \ - if (personality(current->personality) != PER_LINUX) \ - set_personality(PER_LINUX); \ - \ -+ clear_thread_flag(TIF_HYBRID_FPREGS); \ -+ set_thread_flag(TIF_32BIT_FPREGS); \ -+ \ - mips_set_personality_fp(state); \ - \ - current->thread.abi = &mips_abi; \ -@@ -319,6 +322,8 @@ do { \ - do { \ - set_thread_flag(TIF_32BIT_REGS); \ - set_thread_flag(TIF_32BIT_ADDR); \ -+ clear_thread_flag(TIF_HYBRID_FPREGS); \ -+ set_thread_flag(TIF_32BIT_FPREGS); \ - \ - mips_set_personality_fp(state); \ - \ -diff --git a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h -index fa1f3cfbae8d..d68e685cde60 100644 ---- a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h -+++ b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h -@@ -50,7 +50,6 @@ - #define cpu_has_mips32r2 0 - #define cpu_has_mips64r1 0 - #define cpu_has_mips64r2 1 --#define cpu_has_mips_r2_exec_hazard 0 - #define cpu_has_dsp 0 - #define cpu_has_dsp2 0 - #define cpu_has_mipsmt 0 -diff --git a/arch/mips/include/asm/octeon/cvmx.h b/arch/mips/include/asm/octeon/cvmx.h -index 33db1c806b01..774bb45834cb 100644 ---- a/arch/mips/include/asm/octeon/cvmx.h -+++ b/arch/mips/include/asm/octeon/cvmx.h -@@ -436,14 +436,6 @@ static inline uint64_t cvmx_get_cycle_global(void) - - /***************************************************************************/ - --static inline void cvmx_reset_octeon(void) --{ -- union cvmx_ciu_soft_rst ciu_soft_rst; -- ciu_soft_rst.u64 = 0; -- ciu_soft_rst.s.soft_rst = 1; -- cvmx_write_csr(CVMX_CIU_SOFT_RST, ciu_soft_rst.u64); --} -- - /* Return the number of cores available in the chip */ - static inline uint32_t cvmx_octeon_num_cores(void) - { -diff --git a/arch/mips/include/asm/octeon/pci-octeon.h b/arch/mips/include/asm/octeon/pci-octeon.h -index 64ba56a02843..1884609741a8 100644 ---- a/arch/mips/include/asm/octeon/pci-octeon.h -+++ b/arch/mips/include/asm/octeon/pci-octeon.h -@@ -11,9 +11,6 @@ - - #include <linux/pci.h> - --/* Some PCI cards require delays when accessing config space. */ --#define PCI_CONFIG_SPACE_DELAY 10000 -- - /* - * The physical memory base mapped by BAR1. 256MB at the end of the - * first 4GB. -diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h -index bef782c4a44b..f8f809fd6c6d 100644 ---- a/arch/mips/include/asm/pgtable.h -+++ b/arch/mips/include/asm/pgtable.h -@@ -127,10 +127,6 @@ do { \ - } \ - } while(0) - -- --extern void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, -- pte_t pteval); -- - #if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32) - - #define pte_none(pte) (!(((pte).pte_low | (pte).pte_high) & ~_PAGE_GLOBAL)) -@@ -154,6 +150,7 @@ static inline void set_pte(pte_t *ptep, pte_t pte) - } - } - } -+#define set_pte_at(mm, addr, ptep, pteval) set_pte(ptep, pteval) - - static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) - { -@@ -192,6 +189,7 @@ static inline void set_pte(pte_t *ptep, pte_t pteval) - } - #endif - } -+#define set_pte_at(mm, addr, ptep, pteval) set_pte(ptep, pteval) - - static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) - { -@@ -407,12 +405,15 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) - - extern void __update_tlb(struct vm_area_struct *vma, unsigned long address, - pte_t pte); -+extern void __update_cache(struct vm_area_struct *vma, unsigned long address, -+ pte_t pte); - - static inline void update_mmu_cache(struct vm_area_struct *vma, - unsigned long address, pte_t *ptep) - { - pte_t pte = *ptep; - __update_tlb(vma, address, pte); -+ __update_cache(vma, address, pte); - } - - static inline void update_mmu_cache_pmd(struct vm_area_struct *vma, -diff --git a/arch/mips/include/asm/r4kcache.h b/arch/mips/include/asm/r4kcache.h -index 1b22d2da88a1..38902bf97adc 100644 ---- a/arch/mips/include/asm/r4kcache.h -+++ b/arch/mips/include/asm/r4kcache.h -@@ -12,6 +12,8 @@ - #ifndef _ASM_R4KCACHE_H - #define _ASM_R4KCACHE_H - -+#include <linux/stringify.h> -+ - #include <asm/asm.h> - #include <asm/cacheops.h> - #include <asm/compiler.h> -@@ -344,7 +346,7 @@ static inline void invalidate_tcache_page(unsigned long addr) - " cache %1, 0x0a0(%0); cache %1, 0x0b0(%0)\n" \ - " cache %1, 0x0c0(%0); cache %1, 0x0d0(%0)\n" \ - " cache %1, 0x0e0(%0); cache %1, 0x0f0(%0)\n" \ -- " addiu $1, $0, 0x100 \n" \ -+ " "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x010($1)\n" \ - " cache %1, 0x020($1); cache %1, 0x030($1)\n" \ - " cache %1, 0x040($1); cache %1, 0x050($1)\n" \ -@@ -368,17 +370,17 @@ static inline void invalidate_tcache_page(unsigned long addr) - " cache %1, 0x040(%0); cache %1, 0x060(%0)\n" \ - " cache %1, 0x080(%0); cache %1, 0x0a0(%0)\n" \ - " cache %1, 0x0c0(%0); cache %1, 0x0e0(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x020($1)\n" \ - " cache %1, 0x040($1); cache %1, 0x060($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0a0($1)\n" \ - " cache %1, 0x0c0($1); cache %1, 0x0e0($1)\n" \ -- " addiu $1, $1, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x020($1)\n" \ - " cache %1, 0x040($1); cache %1, 0x060($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0a0($1)\n" \ - " cache %1, 0x0c0($1); cache %1, 0x0e0($1)\n" \ -- " addiu $1, $1, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100\n" \ - " cache %1, 0x000($1); cache %1, 0x020($1)\n" \ - " cache %1, 0x040($1); cache %1, 0x060($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0a0($1)\n" \ -@@ -396,25 +398,25 @@ static inline void invalidate_tcache_page(unsigned long addr) - " .set noat\n" \ - " cache %1, 0x000(%0); cache %1, 0x040(%0)\n" \ - " cache %1, 0x080(%0); cache %1, 0x0c0(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ - " cache %1, 0x000($1); cache %1, 0x040($1)\n" \ - " cache %1, 0x080($1); cache %1, 0x0c0($1)\n" \ - " .set pop\n" \ -@@ -429,39 +431,38 @@ static inline void invalidate_tcache_page(unsigned long addr) - " .set mips64r6\n" \ - " .set noat\n" \ - " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -- " cache %1, 0x000(%0); cache %1, 0x080(%0)\n" \ -- " addiu $1, %0, 0x100\n" \ -+ " "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ -+ " "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n" \ -+ " cache %1, 0x000($1); cache %1, 0x080($1)\n" \ - " .set pop\n" \ - : \ - : "r" (base), \ -diff --git a/arch/mips/include/asm/spinlock.h b/arch/mips/include/asm/spinlock.h -index b4548690ade9..1fca2e0793dc 100644 ---- a/arch/mips/include/asm/spinlock.h -+++ b/arch/mips/include/asm/spinlock.h -@@ -263,7 +263,7 @@ static inline void arch_read_unlock(arch_rwlock_t *rw) - if (R10000_LLSC_WAR) { - __asm__ __volatile__( - "1: ll %1, %2 # arch_read_unlock \n" -- " addiu %1, 1 \n" -+ " addiu %1, -1 \n" - " sc %1, %0 \n" - " beqzl %1, 1b \n" - : "=" GCC_OFF_SMALL_ASM() (rw->lock), "=&r" (tmp) -diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S -index af41ba6db960..7791840cf22c 100644 ---- a/arch/mips/kernel/entry.S -+++ b/arch/mips/kernel/entry.S -@@ -10,6 +10,7 @@ - - #include <asm/asm.h> - #include <asm/asmmacro.h> -+#include <asm/compiler.h> - #include <asm/regdef.h> - #include <asm/mipsregs.h> - #include <asm/stackframe.h> -@@ -185,7 +186,7 @@ syscall_exit_work: - * For C code use the inline version named instruction_hazard(). - */ - LEAF(mips_ihb) -- .set mips32r2 -+ .set MIPS_ISA_LEVEL_RAW - jr.hb ra - nop - END(mips_ihb) -diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c -index bed7590e475f..d5589bedd0a4 100644 ---- a/arch/mips/kernel/smp-cps.c -+++ b/arch/mips/kernel/smp-cps.c -@@ -88,6 +88,12 @@ static void __init cps_smp_setup(void) - - /* Make core 0 coherent with everything */ - write_gcr_cl_coherence(0xff); -+ -+#ifdef CONFIG_MIPS_MT_FPAFF -+ /* If we have an FPU, enroll ourselves in the FPU-full mask */ -+ if (cpu_has_fpu) -+ cpu_set(0, mt_fpu_cpumask); -+#endif /* CONFIG_MIPS_MT_FPAFF */ - } - - static void __init cps_prepare_cpus(unsigned int max_cpus) -diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c -index 7e3ea7766822..77d96db8253c 100644 ---- a/arch/mips/mm/cache.c -+++ b/arch/mips/mm/cache.c -@@ -119,36 +119,37 @@ void __flush_anon_page(struct page *page, unsigned long vmaddr) - - EXPORT_SYMBOL(__flush_anon_page); - --static void mips_flush_dcache_from_pte(pte_t pteval, unsigned long address) -+void __flush_icache_page(struct vm_area_struct *vma, struct page *page) -+{ -+ unsigned long addr; -+ -+ if (PageHighMem(page)) -+ return; -+ -+ addr = (unsigned long) page_address(page); -+ flush_data_cache_page(addr); -+} -+EXPORT_SYMBOL_GPL(__flush_icache_page); -+ -+void __update_cache(struct vm_area_struct *vma, unsigned long address, -+ pte_t pte) - { - struct page *page; -- unsigned long pfn = pte_pfn(pteval); -+ unsigned long pfn, addr; -+ int exec = (vma->vm_flags & VM_EXEC) && !cpu_has_ic_fills_f_dc; - -+ pfn = pte_pfn(pte); - if (unlikely(!pfn_valid(pfn))) - return; -- - page = pfn_to_page(pfn); - if (page_mapping(page) && Page_dcache_dirty(page)) { -- unsigned long page_addr = (unsigned long) page_address(page); -- -- if (!cpu_has_ic_fills_f_dc || -- pages_do_alias(page_addr, address & PAGE_MASK)) -- flush_data_cache_page(page_addr); -+ addr = (unsigned long) page_address(page); -+ if (exec || pages_do_alias(addr, address & PAGE_MASK)) -+ flush_data_cache_page(addr); - ClearPageDcacheDirty(page); - } - } - --void set_pte_at(struct mm_struct *mm, unsigned long addr, -- pte_t *ptep, pte_t pteval) --{ -- if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) { -- if (pte_present(pteval)) -- mips_flush_dcache_from_pte(pteval, addr); -- } -- -- set_pte(ptep, pteval); --} -- - unsigned long _page_cachable_default; - EXPORT_SYMBOL(_page_cachable_default); - -diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c -index d75ff73a2012..a79fd0af0224 100644 ---- a/arch/mips/mm/tlbex.c -+++ b/arch/mips/mm/tlbex.c -@@ -501,26 +501,9 @@ static void build_tlb_write_entry(u32 **p, struct uasm_label **l, - case tlb_indexed: tlbw = uasm_i_tlbwi; break; - } - -- if (cpu_has_mips_r2_exec_hazard) { -- /* -- * The architecture spec says an ehb is required here, -- * but a number of cores do not have the hazard and -- * using an ehb causes an expensive pipeline stall. -- */ -- switch (current_cpu_type()) { -- case CPU_M14KC: -- case CPU_74K: -- case CPU_1074K: -- case CPU_PROAPTIV: -- case CPU_P5600: -- case CPU_M5150: -- case CPU_QEMU_GENERIC: -- break; -- -- default: -+ if (cpu_has_mips_r2_r6) { -+ if (cpu_has_mips_r2_exec_hazard) - uasm_i_ehb(p); -- break; -- } - tlbw(p); - return; - } -diff --git a/arch/mips/netlogic/xlp/ahci-init-xlp2.c b/arch/mips/netlogic/xlp/ahci-init-xlp2.c -index c83dbf3689e2..7b066a44e679 100644 ---- a/arch/mips/netlogic/xlp/ahci-init-xlp2.c -+++ b/arch/mips/netlogic/xlp/ahci-init-xlp2.c -@@ -203,6 +203,7 @@ static u8 read_phy_reg(u64 regbase, u32 addr, u32 physel) - static void config_sata_phy(u64 regbase) - { - u32 port, i, reg; -+ u8 val; - - for (port = 0; port < 2; port++) { - for (i = 0, reg = RXCDRCALFOSC0; reg <= CALDUTY; reg++, i++) -@@ -210,6 +211,18 @@ static void config_sata_phy(u64 regbase) - - for (i = 0, reg = RXDPIF; reg <= PPMDRIFTMAX_HI; reg++, i++) - write_phy_reg(regbase, reg, port, sata_phy_config2[i]); -+ -+ /* Fix for PHY link up failures at lower temperatures */ -+ write_phy_reg(regbase, 0x800F, port, 0x1f); -+ -+ val = read_phy_reg(regbase, 0x0029, port); -+ write_phy_reg(regbase, 0x0029, port, val | (0x7 << 1)); -+ -+ val = read_phy_reg(regbase, 0x0056, port); -+ write_phy_reg(regbase, 0x0056, port, val & ~(1 << 3)); -+ -+ val = read_phy_reg(regbase, 0x0018, port); -+ write_phy_reg(regbase, 0x0018, port, val & ~(0x7 << 0)); - } - } - -diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile -index 300591c6278d..2eda01e6e08f 100644 ---- a/arch/mips/pci/Makefile -+++ b/arch/mips/pci/Makefile -@@ -43,7 +43,7 @@ obj-$(CONFIG_SIBYTE_BCM1x80) += pci-bcm1480.o pci-bcm1480ht.o - obj-$(CONFIG_SNI_RM) += fixup-sni.o ops-sni.o - obj-$(CONFIG_LANTIQ) += fixup-lantiq.o - obj-$(CONFIG_PCI_LANTIQ) += pci-lantiq.o ops-lantiq.o --obj-$(CONFIG_SOC_RT2880) += pci-rt2880.o -+obj-$(CONFIG_SOC_RT288X) += pci-rt2880.o - obj-$(CONFIG_SOC_RT3883) += pci-rt3883.o - obj-$(CONFIG_TANBAC_TB0219) += fixup-tb0219.o - obj-$(CONFIG_TANBAC_TB0226) += fixup-tb0226.o -diff --git a/arch/mips/pci/pci-octeon.c b/arch/mips/pci/pci-octeon.c -index a04af55d89f1..c258cd406fbb 100644 ---- a/arch/mips/pci/pci-octeon.c -+++ b/arch/mips/pci/pci-octeon.c -@@ -214,6 +214,8 @@ const char *octeon_get_pci_interrupts(void) - return "AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; - case CVMX_BOARD_TYPE_BBGW_REF: - return "AABCD"; -+ case CVMX_BOARD_TYPE_CUST_DSR1000N: -+ return "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"; - case CVMX_BOARD_TYPE_THUNDER: - case CVMX_BOARD_TYPE_EBH3000: - default: -@@ -271,9 +273,6 @@ static int octeon_read_config(struct pci_bus *bus, unsigned int devfn, - pci_addr.s.func = devfn & 0x7; - pci_addr.s.reg = reg; - --#if PCI_CONFIG_SPACE_DELAY -- udelay(PCI_CONFIG_SPACE_DELAY); --#endif - switch (size) { - case 4: - *val = le32_to_cpu(cvmx_read64_uint32(pci_addr.u64)); -@@ -308,9 +307,6 @@ static int octeon_write_config(struct pci_bus *bus, unsigned int devfn, - pci_addr.s.func = devfn & 0x7; - pci_addr.s.reg = reg; - --#if PCI_CONFIG_SPACE_DELAY -- udelay(PCI_CONFIG_SPACE_DELAY); --#endif - switch (size) { - case 4: - cvmx_write64_uint32(pci_addr.u64, cpu_to_le32(val)); -diff --git a/arch/mips/pci/pcie-octeon.c b/arch/mips/pci/pcie-octeon.c -index 1bb0b2bf8d6e..99f3db4f0a9b 100644 ---- a/arch/mips/pci/pcie-octeon.c -+++ b/arch/mips/pci/pcie-octeon.c -@@ -1762,14 +1762,6 @@ static int octeon_pcie_write_config(unsigned int pcie_port, struct pci_bus *bus, - default: - return PCIBIOS_FUNC_NOT_SUPPORTED; - } --#if PCI_CONFIG_SPACE_DELAY -- /* -- * Delay on writes so that devices have time to come up. Some -- * bridges need this to allow time for the secondary busses to -- * work -- */ -- udelay(PCI_CONFIG_SPACE_DELAY); --#endif - return PCIBIOS_SUCCESSFUL; - } - -diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig -index b1c52ca580f9..e9bc8c96174e 100644 ---- a/arch/mips/ralink/Kconfig -+++ b/arch/mips/ralink/Kconfig -@@ -7,6 +7,11 @@ config CLKEVT_RT3352 - select CLKSRC_OF - select CLKSRC_MMIO - -+config RALINK_ILL_ACC -+ bool -+ depends on SOC_RT305X -+ default y -+ - choice - prompt "Ralink SoC selection" - default SOC_RT305X -diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c -index a7a3edd28beb..f23179e84128 100644 ---- a/drivers/acpi/sbs.c -+++ b/drivers/acpi/sbs.c -@@ -670,7 +670,7 @@ static int acpi_sbs_add(struct acpi_device *device) - if (!sbs_manager_broken) { - result = acpi_manager_get_info(sbs); - if (!result) { -- sbs->manager_present = 0; -+ sbs->manager_present = 1; - for (id = 0; id < MAX_SBS_BAT; ++id) - if ((sbs->batteries_supported & (1 << id))) - acpi_battery_add(sbs, id); -diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c -index b40af3203089..b67066d0d9a6 100644 ---- a/drivers/block/rbd.c -+++ b/drivers/block/rbd.c -@@ -2264,6 +2264,11 @@ static bool rbd_img_obj_end_request(struct rbd_obj_request *obj_request) - result, xferred); - if (!img_request->result) - img_request->result = result; -+ /* -+ * Need to end I/O on the entire obj_request worth of -+ * bytes in case of error. -+ */ -+ xferred = obj_request->length; - } - - /* Image object requests don't own their page array */ -diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c -index 9bd56116fd5a..1afc0b419da2 100644 ---- a/drivers/gpu/drm/radeon/atombios_crtc.c -+++ b/drivers/gpu/drm/radeon/atombios_crtc.c -@@ -580,6 +580,9 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, - else - radeon_crtc->pll_flags |= RADEON_PLL_PREFER_LOW_REF_DIV; - -+ /* if there is no audio, set MINM_OVER_MAXP */ -+ if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) -+ radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP; - if (rdev->family < CHIP_RV770) - radeon_crtc->pll_flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP; - /* use frac fb div on APUs */ -diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c -index c39c1d0d9d4e..f20eb32406d1 100644 ---- a/drivers/gpu/drm/radeon/atombios_encoders.c -+++ b/drivers/gpu/drm/radeon/atombios_encoders.c -@@ -1729,17 +1729,15 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode) - struct drm_device *dev = encoder->dev; - struct radeon_device *rdev = dev->dev_private; - struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); -- struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); - int encoder_mode = atombios_get_encoder_mode(encoder); - - DRM_DEBUG_KMS("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n", - radeon_encoder->encoder_id, mode, radeon_encoder->devices, - radeon_encoder->active_device); - -- if (connector && (radeon_audio != 0) && -+ if ((radeon_audio != 0) && - ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || -- (ENCODER_MODE_IS_DP(encoder_mode) && -- drm_detect_monitor_audio(radeon_connector_edid(connector))))) -+ ENCODER_MODE_IS_DP(encoder_mode))) - radeon_audio_dpms(encoder, mode); - - switch (radeon_encoder->encoder_id) { -diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c -index 3adc2afe32aa..68fd9fc677e3 100644 ---- a/drivers/gpu/drm/radeon/dce6_afmt.c -+++ b/drivers/gpu/drm/radeon/dce6_afmt.c -@@ -295,28 +295,3 @@ void dce6_dp_audio_set_dto(struct radeon_device *rdev, - WREG32(DCCG_AUDIO_DTO1_MODULE, clock); - } - } -- --void dce6_dp_enable(struct drm_encoder *encoder, bool enable) --{ -- struct drm_device *dev = encoder->dev; -- struct radeon_device *rdev = dev->dev_private; -- struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); -- struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; -- -- if (!dig || !dig->afmt) -- return; -- -- if (enable) { -- WREG32(EVERGREEN_DP_SEC_TIMESTAMP + dig->afmt->offset, -- EVERGREEN_DP_SEC_TIMESTAMP_MODE(1)); -- WREG32(EVERGREEN_DP_SEC_CNTL + dig->afmt->offset, -- EVERGREEN_DP_SEC_ASP_ENABLE | /* Audio packet transmission */ -- EVERGREEN_DP_SEC_ATP_ENABLE | /* Audio timestamp packet transmission */ -- EVERGREEN_DP_SEC_AIP_ENABLE | /* Audio infoframe packet transmission */ -- EVERGREEN_DP_SEC_STREAM_ENABLE); /* Master enable for secondary stream engine */ -- } else { -- WREG32(EVERGREEN_DP_SEC_CNTL + dig->afmt->offset, 0); -- } -- -- dig->afmt->enabled = enable; --} -diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c -index c18d4ecbd95d..0926739c9fa7 100644 ---- a/drivers/gpu/drm/radeon/evergreen_hdmi.c -+++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c -@@ -219,13 +219,9 @@ void evergreen_set_avi_packet(struct radeon_device *rdev, u32 offset, - WREG32(AFMT_AVI_INFO3 + offset, - frame[0xC] | (frame[0xD] << 8) | (buffer[1] << 24)); - -- WREG32_OR(HDMI_INFOFRAME_CONTROL0 + offset, -- HDMI_AVI_INFO_SEND | /* enable AVI info frames */ -- HDMI_AVI_INFO_CONT); /* required for audio info values to be updated */ -- - WREG32_P(HDMI_INFOFRAME_CONTROL1 + offset, -- HDMI_AVI_INFO_LINE(2), /* anything other than 0 */ -- ~HDMI_AVI_INFO_LINE_MASK); -+ HDMI_AVI_INFO_LINE(2), /* anything other than 0 */ -+ ~HDMI_AVI_INFO_LINE_MASK); - } - - void dce4_hdmi_audio_set_dto(struct radeon_device *rdev, -@@ -370,9 +366,13 @@ void dce4_set_audio_packet(struct drm_encoder *encoder, u32 offset) - WREG32(AFMT_AUDIO_PACKET_CONTROL2 + offset, - AFMT_AUDIO_CHANNEL_ENABLE(0xff)); - -+ WREG32(HDMI_AUDIO_PACKET_CONTROL + offset, -+ HDMI_AUDIO_DELAY_EN(1) | /* set the default audio delay */ -+ HDMI_AUDIO_PACKETS_PER_LINE(3)); /* should be suffient for all audio modes and small enough for all hblanks */ -+ - /* allow 60958 channel status and send audio packets fields to be updated */ -- WREG32(AFMT_AUDIO_PACKET_CONTROL + offset, -- AFMT_AUDIO_SAMPLE_SEND | AFMT_RESET_FIFO_WHEN_AUDIO_DIS | AFMT_60958_CS_UPDATE); -+ WREG32_OR(AFMT_AUDIO_PACKET_CONTROL + offset, -+ AFMT_RESET_FIFO_WHEN_AUDIO_DIS | AFMT_60958_CS_UPDATE); - } - - -@@ -398,17 +398,26 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) - return; - - if (enable) { -- WREG32(HDMI_INFOFRAME_CONTROL1 + dig->afmt->offset, -- HDMI_AUDIO_INFO_LINE(2)); /* anything other than 0 */ -- -- WREG32(HDMI_AUDIO_PACKET_CONTROL + dig->afmt->offset, -- HDMI_AUDIO_DELAY_EN(1) | /* set the default audio delay */ -- HDMI_AUDIO_PACKETS_PER_LINE(3)); /* should be suffient for all audio modes and small enough for all hblanks */ -+ struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); - -- WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset, -- HDMI_AUDIO_INFO_SEND | /* enable audio info frames (frames won't be set until audio is enabled) */ -- HDMI_AUDIO_INFO_CONT); /* required for audio info values to be updated */ -+ if (drm_detect_monitor_audio(radeon_connector_edid(connector))) { -+ WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset, -+ HDMI_AVI_INFO_SEND | /* enable AVI info frames */ -+ HDMI_AVI_INFO_CONT | /* required for audio info values to be updated */ -+ HDMI_AUDIO_INFO_SEND | /* enable audio info frames (frames won't be set until audio is enabled) */ -+ HDMI_AUDIO_INFO_CONT); /* required for audio info values to be updated */ -+ WREG32_OR(AFMT_AUDIO_PACKET_CONTROL + dig->afmt->offset, -+ AFMT_AUDIO_SAMPLE_SEND); -+ } else { -+ WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset, -+ HDMI_AVI_INFO_SEND | /* enable AVI info frames */ -+ HDMI_AVI_INFO_CONT); /* required for audio info values to be updated */ -+ WREG32_AND(AFMT_AUDIO_PACKET_CONTROL + dig->afmt->offset, -+ ~AFMT_AUDIO_SAMPLE_SEND); -+ } - } else { -+ WREG32_AND(AFMT_AUDIO_PACKET_CONTROL + dig->afmt->offset, -+ ~AFMT_AUDIO_SAMPLE_SEND); - WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset, 0); - } - -@@ -424,20 +433,24 @@ void evergreen_dp_enable(struct drm_encoder *encoder, bool enable) - struct radeon_device *rdev = dev->dev_private; - struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); - struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; -+ struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); - - if (!dig || !dig->afmt) - return; - -- if (enable) { -+ if (enable && drm_detect_monitor_audio(radeon_connector_edid(connector))) { - struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); - struct radeon_connector *radeon_connector = to_radeon_connector(connector); - struct radeon_connector_atom_dig *dig_connector; - uint32_t val; - -+ WREG32_OR(AFMT_AUDIO_PACKET_CONTROL + dig->afmt->offset, -+ AFMT_AUDIO_SAMPLE_SEND); -+ - WREG32(EVERGREEN_DP_SEC_TIMESTAMP + dig->afmt->offset, - EVERGREEN_DP_SEC_TIMESTAMP_MODE(1)); - -- if (radeon_connector->con_priv) { -+ if (!ASIC_IS_DCE6(rdev) && radeon_connector->con_priv) { - dig_connector = radeon_connector->con_priv; - val = RREG32(EVERGREEN_DP_SEC_AUD_N + dig->afmt->offset); - val &= ~EVERGREEN_DP_SEC_N_BASE_MULTIPLE(0xf); -@@ -457,6 +470,8 @@ void evergreen_dp_enable(struct drm_encoder *encoder, bool enable) - EVERGREEN_DP_SEC_STREAM_ENABLE); /* Master enable for secondary stream engine */ - } else { - WREG32(EVERGREEN_DP_SEC_CNTL + dig->afmt->offset, 0); -+ WREG32_AND(AFMT_AUDIO_PACKET_CONTROL + dig->afmt->offset, -+ ~AFMT_AUDIO_SAMPLE_SEND); - } - - dig->afmt->enabled = enable; -diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c -index dd6606b8e23c..e85894ade95c 100644 ---- a/drivers/gpu/drm/radeon/r600_hdmi.c -+++ b/drivers/gpu/drm/radeon/r600_hdmi.c -@@ -228,12 +228,13 @@ void r600_set_avi_packet(struct radeon_device *rdev, u32 offset, - WREG32(HDMI0_AVI_INFO3 + offset, - frame[0xC] | (frame[0xD] << 8) | (buffer[1] << 24)); - -+ WREG32_OR(HDMI0_INFOFRAME_CONTROL1 + offset, -+ HDMI0_AVI_INFO_LINE(2)); /* anything other than 0 */ -+ - WREG32_OR(HDMI0_INFOFRAME_CONTROL0 + offset, -- HDMI0_AVI_INFO_SEND | /* enable AVI info frames */ -- HDMI0_AVI_INFO_CONT); /* send AVI info frames every frame/field */ -+ HDMI0_AVI_INFO_SEND | /* enable AVI info frames */ -+ HDMI0_AVI_INFO_CONT); /* send AVI info frames every frame/field */ - -- WREG32_OR(HDMI0_INFOFRAME_CONTROL1 + offset, -- HDMI0_AVI_INFO_LINE(2)); /* anything other than 0 */ - } - - /* -diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c -index b21ef69a34ac..b7d33a13db9f 100644 ---- a/drivers/gpu/drm/radeon/radeon_audio.c -+++ b/drivers/gpu/drm/radeon/radeon_audio.c -@@ -102,7 +102,6 @@ static void radeon_audio_dp_mode_set(struct drm_encoder *encoder, - void r600_hdmi_enable(struct drm_encoder *encoder, bool enable); - void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable); - void evergreen_dp_enable(struct drm_encoder *encoder, bool enable); --void dce6_dp_enable(struct drm_encoder *encoder, bool enable); - - static const u32 pin_offsets[7] = - { -@@ -240,7 +239,7 @@ static struct radeon_audio_funcs dce6_dp_funcs = { - .set_avi_packet = evergreen_set_avi_packet, - .set_audio_packet = dce4_set_audio_packet, - .mode_set = radeon_audio_dp_mode_set, -- .dpms = dce6_dp_enable, -+ .dpms = evergreen_dp_enable, - }; - - static void radeon_audio_interface_init(struct radeon_device *rdev) -@@ -461,30 +460,33 @@ void radeon_audio_detect(struct drm_connector *connector, - if (!connector || !connector->encoder) - return; - -+ if (!radeon_encoder_is_digital(connector->encoder)) -+ return; -+ - rdev = connector->encoder->dev->dev_private; - radeon_encoder = to_radeon_encoder(connector->encoder); - dig = radeon_encoder->enc_priv; - -- if (status == connector_status_connected) { -- struct radeon_connector *radeon_connector; -- int sink_type; -- -- if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) { -- radeon_encoder->audio = NULL; -- return; -- } -+ if (!dig->afmt) -+ return; - -- radeon_connector = to_radeon_connector(connector); -- sink_type = radeon_dp_getsinktype(radeon_connector); -+ if (status == connector_status_connected) { -+ struct radeon_connector *radeon_connector = to_radeon_connector(connector); - - if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && -- sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) -+ radeon_dp_getsinktype(radeon_connector) == -+ CONNECTOR_OBJECT_ID_DISPLAYPORT) - radeon_encoder->audio = rdev->audio.dp_funcs; - else - radeon_encoder->audio = rdev->audio.hdmi_funcs; - - dig->afmt->pin = radeon_audio_get_pin(connector->encoder); -- radeon_audio_enable(rdev, dig->afmt->pin, 0xf); -+ if (drm_detect_monitor_audio(radeon_connector_edid(connector))) { -+ radeon_audio_enable(rdev, dig->afmt->pin, 0xf); -+ } else { -+ radeon_audio_enable(rdev, dig->afmt->pin, 0); -+ dig->afmt->pin = NULL; -+ } - } else { - radeon_audio_enable(rdev, dig->afmt->pin, 0); - dig->afmt->pin = NULL; -diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c -index 27def67cb6be..27973e3faf0e 100644 ---- a/drivers/gpu/drm/radeon/radeon_connectors.c -+++ b/drivers/gpu/drm/radeon/radeon_connectors.c -@@ -1333,8 +1333,10 @@ out: - /* updated in get modes as well since we need to know if it's analog or digital */ - radeon_connector_update_scratch_regs(connector, ret); - -- if (radeon_audio != 0) -+ if (radeon_audio != 0) { -+ radeon_connector_get_edid(connector); - radeon_audio_detect(connector, ret); -+ } - - exit: - pm_runtime_mark_last_busy(connector->dev->dev); -@@ -1659,8 +1661,10 @@ radeon_dp_detect(struct drm_connector *connector, bool force) - - radeon_connector_update_scratch_regs(connector, ret); - -- if (radeon_audio != 0) -+ if (radeon_audio != 0) { -+ radeon_connector_get_edid(connector); - radeon_audio_detect(connector, ret); -+ } - - out: - pm_runtime_mark_last_busy(connector->dev->dev); -diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c -index 4d0f96cc3da4..ab39b85e0f76 100644 ---- a/drivers/gpu/drm/radeon/radeon_cs.c -+++ b/drivers/gpu/drm/radeon/radeon_cs.c -@@ -88,7 +88,7 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p) - p->dma_reloc_idx = 0; - /* FIXME: we assume that each relocs use 4 dwords */ - p->nrelocs = chunk->length_dw / 4; -- p->relocs = kcalloc(p->nrelocs, sizeof(struct radeon_bo_list), GFP_KERNEL); -+ p->relocs = drm_calloc_large(p->nrelocs, sizeof(struct radeon_bo_list)); - if (p->relocs == NULL) { - return -ENOMEM; - } -@@ -428,7 +428,7 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error, bo - } - } - kfree(parser->track); -- kfree(parser->relocs); -+ drm_free_large(parser->relocs); - drm_free_large(parser->vm_bos); - for (i = 0; i < parser->nchunks; i++) - drm_free_large(parser->chunks[i].kdata); -diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c -index 2a5a4a9e772d..de42fc4a22b8 100644 ---- a/drivers/gpu/drm/radeon/radeon_vm.c -+++ b/drivers/gpu/drm/radeon/radeon_vm.c -@@ -473,6 +473,23 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, - } - - mutex_lock(&vm->mutex); -+ soffset /= RADEON_GPU_PAGE_SIZE; -+ eoffset /= RADEON_GPU_PAGE_SIZE; -+ if (soffset || eoffset) { -+ struct interval_tree_node *it; -+ it = interval_tree_iter_first(&vm->va, soffset, eoffset - 1); -+ if (it && it != &bo_va->it) { -+ struct radeon_bo_va *tmp; -+ tmp = container_of(it, struct radeon_bo_va, it); -+ /* bo and tmp overlap, invalid offset */ -+ dev_err(rdev->dev, "bo %p va 0x%010Lx conflict with " -+ "(bo %p 0x%010lx 0x%010lx)\n", bo_va->bo, -+ soffset, tmp->bo, tmp->it.start, tmp->it.last); -+ mutex_unlock(&vm->mutex); -+ return -EINVAL; -+ } -+ } -+ - if (bo_va->it.start || bo_va->it.last) { - if (bo_va->addr) { - /* add a clone of the bo_va to clear the old address */ -@@ -490,6 +507,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, - spin_lock(&vm->status_lock); - list_add(&tmp->vm_status, &vm->freed); - spin_unlock(&vm->status_lock); -+ -+ bo_va->addr = 0; - } - - interval_tree_remove(&bo_va->it, &vm->va); -@@ -497,21 +516,7 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev, - bo_va->it.last = 0; - } - -- soffset /= RADEON_GPU_PAGE_SIZE; -- eoffset /= RADEON_GPU_PAGE_SIZE; - if (soffset || eoffset) { -- struct interval_tree_node *it; -- it = interval_tree_iter_first(&vm->va, soffset, eoffset - 1); -- if (it) { -- struct radeon_bo_va *tmp; -- tmp = container_of(it, struct radeon_bo_va, it); -- /* bo and tmp overlap, invalid offset */ -- dev_err(rdev->dev, "bo %p va 0x%010Lx conflict with " -- "(bo %p 0x%010lx 0x%010lx)\n", bo_va->bo, -- soffset, tmp->bo, tmp->it.start, tmp->it.last); -- mutex_unlock(&vm->mutex); -- return -EINVAL; -- } - bo_va->it.start = soffset; - bo_va->it.last = eoffset - 1; - interval_tree_insert(&bo_va->it, &vm->va); -@@ -1107,7 +1112,8 @@ void radeon_vm_bo_rmv(struct radeon_device *rdev, - list_del(&bo_va->bo_list); - - mutex_lock(&vm->mutex); -- interval_tree_remove(&bo_va->it, &vm->va); -+ if (bo_va->it.start || bo_va->it.last) -+ interval_tree_remove(&bo_va->it, &vm->va); - spin_lock(&vm->status_lock); - list_del(&bo_va->vm_status); - -diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c -index 7be11651b7e6..9dbb3154d559 100644 ---- a/drivers/gpu/drm/radeon/si_dpm.c -+++ b/drivers/gpu/drm/radeon/si_dpm.c -@@ -2924,6 +2924,7 @@ struct si_dpm_quirk { - static struct si_dpm_quirk si_dpm_quirk_list[] = { - /* PITCAIRN - https://bugs.freedesktop.org/show_bug.cgi?id=76490 */ - { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 }, -+ { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0xe271, 0, 120000 }, - { 0, 0, 0, 0 }, - }; - -diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c -index 3736f71bdec5..18def3022f6e 100644 ---- a/drivers/hv/channel_mgmt.c -+++ b/drivers/hv/channel_mgmt.c -@@ -787,7 +787,7 @@ int vmbus_request_offers(void) - { - struct vmbus_channel_message_header *msg; - struct vmbus_channel_msginfo *msginfo; -- int ret, t; -+ int ret; - - msginfo = kmalloc(sizeof(*msginfo) + - sizeof(struct vmbus_channel_message_header), -@@ -795,8 +795,6 @@ int vmbus_request_offers(void) - if (!msginfo) - return -ENOMEM; - -- init_completion(&msginfo->waitevent); -- - msg = (struct vmbus_channel_message_header *)msginfo->msg; - - msg->msgtype = CHANNELMSG_REQUESTOFFERS; -@@ -810,14 +808,6 @@ int vmbus_request_offers(void) - goto cleanup; - } - -- t = wait_for_completion_timeout(&msginfo->waitevent, 5*HZ); -- if (t == 0) { -- ret = -ETIMEDOUT; -- goto cleanup; -- } -- -- -- - cleanup: - kfree(msginfo); - -diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c -index ee394dc68303..ec1ea8ba7aac 100644 ---- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c -+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c -@@ -492,7 +492,7 @@ int t4_memory_rw(struct adapter *adap, int win, int mtype, u32 addr, - memoffset = (mtype * (edc_size * 1024 * 1024)); - else { - mc_size = EXT_MEM0_SIZE_G(t4_read_reg(adap, -- MA_EXT_MEMORY1_BAR_A)); -+ MA_EXT_MEMORY0_BAR_A)); - memoffset = (MEM_MC0 * edc_size + mc_size) * 1024 * 1024; - } - -diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c -index 3485acf03014..2f1324bed7b3 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c -+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c -@@ -1467,6 +1467,7 @@ static void mlx4_en_service_task(struct work_struct *work) - if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS) - mlx4_en_ptp_overflow_check(mdev); - -+ mlx4_en_recover_from_oom(priv); - queue_delayed_work(mdev->workqueue, &priv->service_task, - SERVICE_TASK_DELAY); - } -diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c -index 698d60de1255..05ec5e151ded 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c -+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c -@@ -244,6 +244,12 @@ static int mlx4_en_prepare_rx_desc(struct mlx4_en_priv *priv, - return mlx4_en_alloc_frags(priv, rx_desc, frags, ring->page_alloc, gfp); - } - -+static inline bool mlx4_en_is_ring_empty(struct mlx4_en_rx_ring *ring) -+{ -+ BUG_ON((u32)(ring->prod - ring->cons) > ring->actual_size); -+ return ring->prod == ring->cons; -+} -+ - static inline void mlx4_en_update_rx_prod_db(struct mlx4_en_rx_ring *ring) - { - *ring->wqres.db.db = cpu_to_be32(ring->prod & 0xffff); -@@ -315,8 +321,7 @@ static void mlx4_en_free_rx_buf(struct mlx4_en_priv *priv, - ring->cons, ring->prod); - - /* Unmap and free Rx buffers */ -- BUG_ON((u32) (ring->prod - ring->cons) > ring->actual_size); -- while (ring->cons != ring->prod) { -+ while (!mlx4_en_is_ring_empty(ring)) { - index = ring->cons & ring->size_mask; - en_dbg(DRV, priv, "Processing descriptor:%d\n", index); - mlx4_en_free_rx_desc(priv, ring, index); -@@ -491,6 +496,23 @@ err_allocator: - return err; - } - -+/* We recover from out of memory by scheduling our napi poll -+ * function (mlx4_en_process_cq), which tries to allocate -+ * all missing RX buffers (call to mlx4_en_refill_rx_buffers). -+ */ -+void mlx4_en_recover_from_oom(struct mlx4_en_priv *priv) -+{ -+ int ring; -+ -+ if (!priv->port_up) -+ return; -+ -+ for (ring = 0; ring < priv->rx_ring_num; ring++) { -+ if (mlx4_en_is_ring_empty(priv->rx_ring[ring])) -+ napi_reschedule(&priv->rx_cq[ring]->napi); -+ } -+} -+ - void mlx4_en_destroy_rx_ring(struct mlx4_en_priv *priv, - struct mlx4_en_rx_ring **pring, - u32 size, u16 stride) -diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c -index 55f9f5c5344e..8c234ec1d8aa 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c -+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c -@@ -143,8 +143,10 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv, - ring->hwtstamp_tx_type = priv->hwtstamp_config.tx_type; - ring->queue_index = queue_index; - -- if (queue_index < priv->num_tx_rings_p_up && cpu_online(queue_index)) -- cpumask_set_cpu(queue_index, &ring->affinity_mask); -+ if (queue_index < priv->num_tx_rings_p_up) -+ cpumask_set_cpu_local_first(queue_index, -+ priv->mdev->dev->numa_node, -+ &ring->affinity_mask); - - *pring = ring; - return 0; -@@ -213,7 +215,7 @@ int mlx4_en_activate_tx_ring(struct mlx4_en_priv *priv, - - err = mlx4_qp_to_ready(mdev->dev, &ring->wqres.mtt, &ring->context, - &ring->qp, &ring->qp_state); -- if (!user_prio && cpu_online(ring->queue_index)) -+ if (!cpumask_empty(&ring->affinity_mask)) - netif_set_xps_queue(priv->dev, &ring->affinity_mask, - ring->queue_index); - -diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h -index ebbe244e80dd..8687c8d54227 100644 ---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h -+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h -@@ -790,6 +790,7 @@ int mlx4_en_activate_tx_ring(struct mlx4_en_priv *priv, - void mlx4_en_deactivate_tx_ring(struct mlx4_en_priv *priv, - struct mlx4_en_tx_ring *ring); - void mlx4_en_set_num_rx_rings(struct mlx4_en_dev *mdev); -+void mlx4_en_recover_from_oom(struct mlx4_en_priv *priv); - int mlx4_en_create_rx_ring(struct mlx4_en_priv *priv, - struct mlx4_en_rx_ring **pring, - u32 size, u16 stride, int node); -diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c -index 7600639db4c4..add419d6ff34 100644 ---- a/drivers/scsi/3w-9xxx.c -+++ b/drivers/scsi/3w-9xxx.c -@@ -149,7 +149,6 @@ static int twa_reset_sequence(TW_Device_Extension *tw_dev, int soft_reset); - static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, char *cdb, int use_sg, TW_SG_Entry *sglistarg); - static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int request_id); - static char *twa_string_lookup(twa_message_type *table, unsigned int aen_code); --static void twa_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id); - - /* Functions */ - -@@ -1340,11 +1339,11 @@ static irqreturn_t twa_interrupt(int irq, void *dev_instance) - } - - /* Now complete the io */ -+ scsi_dma_unmap(cmd); -+ cmd->scsi_done(cmd); - tw_dev->state[request_id] = TW_S_COMPLETED; - twa_free_request_id(tw_dev, request_id); - tw_dev->posted_request_count--; -- tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); -- twa_unmap_scsi_data(tw_dev, request_id); - } - - /* Check for valid status after each drain */ -@@ -1402,26 +1401,6 @@ static void twa_load_sgl(TW_Device_Extension *tw_dev, TW_Command_Full *full_comm - } - } /* End twa_load_sgl() */ - --/* This function will perform a pci-dma mapping for a scatter gather list */ --static int twa_map_scsi_sg_data(TW_Device_Extension *tw_dev, int request_id) --{ -- int use_sg; -- struct scsi_cmnd *cmd = tw_dev->srb[request_id]; -- -- use_sg = scsi_dma_map(cmd); -- if (!use_sg) -- return 0; -- else if (use_sg < 0) { -- TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1c, "Failed to map scatter gather list"); -- return 0; -- } -- -- cmd->SCp.phase = TW_PHASE_SGLIST; -- cmd->SCp.have_data_in = use_sg; -- -- return use_sg; --} /* End twa_map_scsi_sg_data() */ -- - /* This function will poll for a response interrupt of a request */ - static int twa_poll_response(TW_Device_Extension *tw_dev, int request_id, int seconds) - { -@@ -1600,9 +1579,11 @@ static int twa_reset_device_extension(TW_Device_Extension *tw_dev) - (tw_dev->state[i] != TW_S_INITIAL) && - (tw_dev->state[i] != TW_S_COMPLETED)) { - if (tw_dev->srb[i]) { -- tw_dev->srb[i]->result = (DID_RESET << 16); -- tw_dev->srb[i]->scsi_done(tw_dev->srb[i]); -- twa_unmap_scsi_data(tw_dev, i); -+ struct scsi_cmnd *cmd = tw_dev->srb[i]; -+ -+ cmd->result = (DID_RESET << 16); -+ scsi_dma_unmap(cmd); -+ cmd->scsi_done(cmd); - } - } - } -@@ -1781,21 +1762,18 @@ static int twa_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_ - /* Save the scsi command for use by the ISR */ - tw_dev->srb[request_id] = SCpnt; - -- /* Initialize phase to zero */ -- SCpnt->SCp.phase = TW_PHASE_INITIAL; -- - retval = twa_scsiop_execute_scsi(tw_dev, request_id, NULL, 0, NULL); - switch (retval) { - case SCSI_MLQUEUE_HOST_BUSY: -+ scsi_dma_unmap(SCpnt); - twa_free_request_id(tw_dev, request_id); -- twa_unmap_scsi_data(tw_dev, request_id); - break; - case 1: -- tw_dev->state[request_id] = TW_S_COMPLETED; -- twa_free_request_id(tw_dev, request_id); -- twa_unmap_scsi_data(tw_dev, request_id); - SCpnt->result = (DID_ERROR << 16); -+ scsi_dma_unmap(SCpnt); - done(SCpnt); -+ tw_dev->state[request_id] = TW_S_COMPLETED; -+ twa_free_request_id(tw_dev, request_id); - retval = 0; - } - out: -@@ -1863,8 +1841,8 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, - command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]); - command_packet->sg_list[0].length = cpu_to_le32(TW_MIN_SGL_LENGTH); - } else { -- sg_count = twa_map_scsi_sg_data(tw_dev, request_id); -- if (sg_count == 0) -+ sg_count = scsi_dma_map(srb); -+ if (sg_count < 0) - goto out; - - scsi_for_each_sg(srb, sg, sg_count, i) { -@@ -1979,15 +1957,6 @@ static char *twa_string_lookup(twa_message_type *table, unsigned int code) - return(table[index].text); - } /* End twa_string_lookup() */ - --/* This function will perform a pci-dma unmap */ --static void twa_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id) --{ -- struct scsi_cmnd *cmd = tw_dev->srb[request_id]; -- -- if (cmd->SCp.phase == TW_PHASE_SGLIST) -- scsi_dma_unmap(cmd); --} /* End twa_unmap_scsi_data() */ -- - /* This function gets called when a disk is coming on-line */ - static int twa_slave_configure(struct scsi_device *sdev) - { -diff --git a/drivers/scsi/3w-9xxx.h b/drivers/scsi/3w-9xxx.h -index 040f7214e5b7..0fdc83cfa0e1 100644 ---- a/drivers/scsi/3w-9xxx.h -+++ b/drivers/scsi/3w-9xxx.h -@@ -324,11 +324,6 @@ static twa_message_type twa_error_table[] = { - #define TW_CURRENT_DRIVER_BUILD 0 - #define TW_CURRENT_DRIVER_BRANCH 0 - --/* Phase defines */ --#define TW_PHASE_INITIAL 0 --#define TW_PHASE_SINGLE 1 --#define TW_PHASE_SGLIST 2 -- - /* Misc defines */ - #define TW_9550SX_DRAIN_COMPLETED 0xFFFF - #define TW_SECTOR_SIZE 512 -diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c -index 2361772d5909..f8374850f714 100644 ---- a/drivers/scsi/3w-sas.c -+++ b/drivers/scsi/3w-sas.c -@@ -290,26 +290,6 @@ static int twl_post_command_packet(TW_Device_Extension *tw_dev, int request_id) - return 0; - } /* End twl_post_command_packet() */ - --/* This function will perform a pci-dma mapping for a scatter gather list */ --static int twl_map_scsi_sg_data(TW_Device_Extension *tw_dev, int request_id) --{ -- int use_sg; -- struct scsi_cmnd *cmd = tw_dev->srb[request_id]; -- -- use_sg = scsi_dma_map(cmd); -- if (!use_sg) -- return 0; -- else if (use_sg < 0) { -- TW_PRINTK(tw_dev->host, TW_DRIVER, 0x1, "Failed to map scatter gather list"); -- return 0; -- } -- -- cmd->SCp.phase = TW_PHASE_SGLIST; -- cmd->SCp.have_data_in = use_sg; -- -- return use_sg; --} /* End twl_map_scsi_sg_data() */ -- - /* This function hands scsi cdb's to the firmware */ - static int twl_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, char *cdb, int use_sg, TW_SG_Entry_ISO *sglistarg) - { -@@ -357,8 +337,8 @@ static int twl_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, - if (!sglistarg) { - /* Map sglist from scsi layer to cmd packet */ - if (scsi_sg_count(srb)) { -- sg_count = twl_map_scsi_sg_data(tw_dev, request_id); -- if (sg_count == 0) -+ sg_count = scsi_dma_map(srb); -+ if (sg_count <= 0) - goto out; - - scsi_for_each_sg(srb, sg, sg_count, i) { -@@ -1102,15 +1082,6 @@ out: - return retval; - } /* End twl_initialize_device_extension() */ - --/* This function will perform a pci-dma unmap */ --static void twl_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id) --{ -- struct scsi_cmnd *cmd = tw_dev->srb[request_id]; -- -- if (cmd->SCp.phase == TW_PHASE_SGLIST) -- scsi_dma_unmap(cmd); --} /* End twl_unmap_scsi_data() */ -- - /* This function will handle attention interrupts */ - static int twl_handle_attention_interrupt(TW_Device_Extension *tw_dev) - { -@@ -1251,11 +1222,11 @@ static irqreturn_t twl_interrupt(int irq, void *dev_instance) - } - - /* Now complete the io */ -+ scsi_dma_unmap(cmd); -+ cmd->scsi_done(cmd); - tw_dev->state[request_id] = TW_S_COMPLETED; - twl_free_request_id(tw_dev, request_id); - tw_dev->posted_request_count--; -- tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); -- twl_unmap_scsi_data(tw_dev, request_id); - } - - /* Check for another response interrupt */ -@@ -1400,10 +1371,12 @@ static int twl_reset_device_extension(TW_Device_Extension *tw_dev, int ioctl_res - if ((tw_dev->state[i] != TW_S_FINISHED) && - (tw_dev->state[i] != TW_S_INITIAL) && - (tw_dev->state[i] != TW_S_COMPLETED)) { -- if (tw_dev->srb[i]) { -- tw_dev->srb[i]->result = (DID_RESET << 16); -- tw_dev->srb[i]->scsi_done(tw_dev->srb[i]); -- twl_unmap_scsi_data(tw_dev, i); -+ struct scsi_cmnd *cmd = tw_dev->srb[i]; -+ -+ if (cmd) { -+ cmd->result = (DID_RESET << 16); -+ scsi_dma_unmap(cmd); -+ cmd->scsi_done(cmd); - } - } - } -@@ -1507,9 +1480,6 @@ static int twl_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_ - /* Save the scsi command for use by the ISR */ - tw_dev->srb[request_id] = SCpnt; - -- /* Initialize phase to zero */ -- SCpnt->SCp.phase = TW_PHASE_INITIAL; -- - retval = twl_scsiop_execute_scsi(tw_dev, request_id, NULL, 0, NULL); - if (retval) { - tw_dev->state[request_id] = TW_S_COMPLETED; -diff --git a/drivers/scsi/3w-sas.h b/drivers/scsi/3w-sas.h -index d474892701d4..fec6449c7595 100644 ---- a/drivers/scsi/3w-sas.h -+++ b/drivers/scsi/3w-sas.h -@@ -103,10 +103,6 @@ static char *twl_aen_severity_table[] = - #define TW_CURRENT_DRIVER_BUILD 0 - #define TW_CURRENT_DRIVER_BRANCH 0 - --/* Phase defines */ --#define TW_PHASE_INITIAL 0 --#define TW_PHASE_SGLIST 2 -- - /* Misc defines */ - #define TW_SECTOR_SIZE 512 - #define TW_MAX_UNITS 32 -diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c -index c75f2048319f..2940bd769936 100644 ---- a/drivers/scsi/3w-xxxx.c -+++ b/drivers/scsi/3w-xxxx.c -@@ -1271,32 +1271,6 @@ static int tw_initialize_device_extension(TW_Device_Extension *tw_dev) - return 0; - } /* End tw_initialize_device_extension() */ - --static int tw_map_scsi_sg_data(struct pci_dev *pdev, struct scsi_cmnd *cmd) --{ -- int use_sg; -- -- dprintk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data()\n"); -- -- use_sg = scsi_dma_map(cmd); -- if (use_sg < 0) { -- printk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data(): pci_map_sg() failed.\n"); -- return 0; -- } -- -- cmd->SCp.phase = TW_PHASE_SGLIST; -- cmd->SCp.have_data_in = use_sg; -- -- return use_sg; --} /* End tw_map_scsi_sg_data() */ -- --static void tw_unmap_scsi_data(struct pci_dev *pdev, struct scsi_cmnd *cmd) --{ -- dprintk(KERN_WARNING "3w-xxxx: tw_unmap_scsi_data()\n"); -- -- if (cmd->SCp.phase == TW_PHASE_SGLIST) -- scsi_dma_unmap(cmd); --} /* End tw_unmap_scsi_data() */ -- - /* This function will reset a device extension */ - static int tw_reset_device_extension(TW_Device_Extension *tw_dev) - { -@@ -1319,8 +1293,8 @@ static int tw_reset_device_extension(TW_Device_Extension *tw_dev) - srb = tw_dev->srb[i]; - if (srb != NULL) { - srb->result = (DID_RESET << 16); -- tw_dev->srb[i]->scsi_done(tw_dev->srb[i]); -- tw_unmap_scsi_data(tw_dev->tw_pci_dev, tw_dev->srb[i]); -+ scsi_dma_unmap(srb); -+ srb->scsi_done(srb); - } - } - } -@@ -1767,8 +1741,8 @@ static int tw_scsiop_read_write(TW_Device_Extension *tw_dev, int request_id) - command_packet->byte8.io.lba = lba; - command_packet->byte6.block_count = num_sectors; - -- use_sg = tw_map_scsi_sg_data(tw_dev->tw_pci_dev, tw_dev->srb[request_id]); -- if (!use_sg) -+ use_sg = scsi_dma_map(srb); -+ if (use_sg <= 0) - return 1; - - scsi_for_each_sg(tw_dev->srb[request_id], sg, use_sg, i) { -@@ -1955,9 +1929,6 @@ static int tw_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_c - /* Save the scsi command for use by the ISR */ - tw_dev->srb[request_id] = SCpnt; - -- /* Initialize phase to zero */ -- SCpnt->SCp.phase = TW_PHASE_INITIAL; -- - switch (*command) { - case READ_10: - case READ_6: -@@ -2185,12 +2156,11 @@ static irqreturn_t tw_interrupt(int irq, void *dev_instance) - - /* Now complete the io */ - if ((error != TW_ISR_DONT_COMPLETE)) { -+ scsi_dma_unmap(tw_dev->srb[request_id]); -+ tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); - tw_dev->state[request_id] = TW_S_COMPLETED; - tw_state_request_finish(tw_dev, request_id); - tw_dev->posted_request_count--; -- tw_dev->srb[request_id]->scsi_done(tw_dev->srb[request_id]); -- -- tw_unmap_scsi_data(tw_dev->tw_pci_dev, tw_dev->srb[request_id]); - } - } - -diff --git a/drivers/scsi/3w-xxxx.h b/drivers/scsi/3w-xxxx.h -index 29b0b84ed69e..6f65e663d393 100644 ---- a/drivers/scsi/3w-xxxx.h -+++ b/drivers/scsi/3w-xxxx.h -@@ -195,11 +195,6 @@ static unsigned char tw_sense_table[][4] = - #define TW_AEN_SMART_FAIL 0x000F - #define TW_AEN_SBUF_FAIL 0x0024 - --/* Phase defines */ --#define TW_PHASE_INITIAL 0 --#define TW_PHASE_SINGLE 1 --#define TW_PHASE_SGLIST 2 -- - /* Misc defines */ - #define TW_ALIGNMENT_6000 64 /* 64 bytes */ - #define TW_ALIGNMENT_7000 4 /* 4 bytes */ -diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c -index 262ab837a704..9f77d23239a2 100644 ---- a/drivers/scsi/scsi_devinfo.c -+++ b/drivers/scsi/scsi_devinfo.c -@@ -226,6 +226,7 @@ static struct { - {"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, - {"Promise", "VTrak E610f", NULL, BLIST_SPARSELUN | BLIST_NO_RSOC}, - {"Promise", "", NULL, BLIST_SPARSELUN}, -+ {"QNAP", "iSCSI Storage", NULL, BLIST_MAX_1024}, - {"QUANTUM", "XP34301", "1071", BLIST_NOTQ}, - {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN}, - {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN}, -diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c -index 9c0a520d933c..3e6142f61499 100644 ---- a/drivers/scsi/scsi_scan.c -+++ b/drivers/scsi/scsi_scan.c -@@ -897,6 +897,12 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, - */ - if (*bflags & BLIST_MAX_512) - blk_queue_max_hw_sectors(sdev->request_queue, 512); -+ /* -+ * Max 1024 sector transfer length for targets that report incorrect -+ * max/optimal lengths and relied on the old block layer safe default -+ */ -+ else if (*bflags & BLIST_MAX_1024) -+ blk_queue_max_hw_sectors(sdev->request_queue, 1024); - - /* - * Some devices may not want to have a start command automatically -diff --git a/drivers/ssb/Kconfig b/drivers/ssb/Kconfig -index 75b3603906c1..f0d22cdb51cd 100644 ---- a/drivers/ssb/Kconfig -+++ b/drivers/ssb/Kconfig -@@ -130,6 +130,7 @@ config SSB_DRIVER_MIPS - bool "SSB Broadcom MIPS core driver" - depends on SSB && MIPS - select SSB_SERIAL -+ select SSB_SFLASH - help - Driver for the Sonics Silicon Backplane attached - Broadcom MIPS core. -diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c -index 4e959c43f680..6afce7eb3d74 100644 ---- a/drivers/tty/serial/atmel_serial.c -+++ b/drivers/tty/serial/atmel_serial.c -@@ -880,6 +880,7 @@ static int atmel_prepare_tx_dma(struct uart_port *port) - config.direction = DMA_MEM_TO_DEV; - config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; - config.dst_addr = port->mapbase + ATMEL_US_THR; -+ config.dst_maxburst = 1; - - ret = dmaengine_slave_config(atmel_port->chan_tx, - &config); -@@ -1059,6 +1060,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port) - config.direction = DMA_DEV_TO_MEM; - config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; - config.src_addr = port->mapbase + ATMEL_US_RHR; -+ config.src_maxburst = 1; - - ret = dmaengine_slave_config(atmel_port->chan_rx, - &config); -diff --git a/drivers/tty/serial/of_serial.c b/drivers/tty/serial/of_serial.c -index 33fb94f78967..0a52c8b55a5f 100644 ---- a/drivers/tty/serial/of_serial.c -+++ b/drivers/tty/serial/of_serial.c -@@ -344,7 +344,6 @@ static struct of_device_id of_platform_serial_table[] = { - { .compatible = "ibm,qpace-nwp-serial", - .data = (void *)PORT_NWPSERIAL, }, - #endif -- { .type = "serial", .data = (void *)PORT_UNKNOWN, }, - { /* end of list */ }, - }; - -diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c -index 189f52e3111f..a0099a7f60d4 100644 ---- a/drivers/tty/serial/uartlite.c -+++ b/drivers/tty/serial/uartlite.c -@@ -632,7 +632,8 @@ MODULE_DEVICE_TABLE(of, ulite_of_match); - - static int ulite_probe(struct platform_device *pdev) - { -- struct resource *res, *res2; -+ struct resource *res; -+ int irq; - int id = pdev->id; - #ifdef CONFIG_OF - const __be32 *prop; -@@ -646,11 +647,11 @@ static int ulite_probe(struct platform_device *pdev) - if (!res) - return -ENODEV; - -- res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 0); -- if (!res2) -- return -ENODEV; -+ irq = platform_get_irq(pdev, 0); -+ if (irq <= 0) -+ return -ENXIO; - -- return ulite_assign(&pdev->dev, id, res->start, res2->start); -+ return ulite_assign(&pdev->dev, id, res->start, irq); - } - - static int ulite_remove(struct platform_device *pdev) -diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c -index cff531a51a78..54853a02ce9e 100644 ---- a/drivers/tty/serial/xilinx_uartps.c -+++ b/drivers/tty/serial/xilinx_uartps.c -@@ -1325,9 +1325,9 @@ static SIMPLE_DEV_PM_OPS(cdns_uart_dev_pm_ops, cdns_uart_suspend, - */ - static int cdns_uart_probe(struct platform_device *pdev) - { -- int rc, id; -+ int rc, id, irq; - struct uart_port *port; -- struct resource *res, *res2; -+ struct resource *res; - struct cdns_uart *cdns_uart_data; - - cdns_uart_data = devm_kzalloc(&pdev->dev, sizeof(*cdns_uart_data), -@@ -1374,9 +1374,9 @@ static int cdns_uart_probe(struct platform_device *pdev) - goto err_out_clk_disable; - } - -- res2 = platform_get_resource(pdev, IORESOURCE_IRQ, 0); -- if (!res2) { -- rc = -ENODEV; -+ irq = platform_get_irq(pdev, 0); -+ if (irq <= 0) { -+ rc = -ENXIO; - goto err_out_clk_disable; - } - -@@ -1405,7 +1405,7 @@ static int cdns_uart_probe(struct platform_device *pdev) - * and triggers invocation of the config_port() entry point. - */ - port->mapbase = res->start; -- port->irq = res2->start; -+ port->irq = irq; - port->dev = &pdev->dev; - port->uartclk = clk_get_rate(cdns_uart_data->uartclk); - port->private_data = cdns_uart_data; -diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c -index 562e581f6765..3770330a2201 100644 ---- a/drivers/usb/chipidea/otg_fsm.c -+++ b/drivers/usb/chipidea/otg_fsm.c -@@ -537,7 +537,6 @@ static int ci_otg_start_host(struct otg_fsm *fsm, int on) - { - struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); - -- mutex_unlock(&fsm->lock); - if (on) { - ci_role_stop(ci); - ci_role_start(ci, CI_ROLE_HOST); -@@ -546,7 +545,6 @@ static int ci_otg_start_host(struct otg_fsm *fsm, int on) - hw_device_reset(ci); - ci_role_start(ci, CI_ROLE_GADGET); - } -- mutex_lock(&fsm->lock); - return 0; - } - -@@ -554,12 +552,10 @@ static int ci_otg_start_gadget(struct otg_fsm *fsm, int on) - { - struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm); - -- mutex_unlock(&fsm->lock); - if (on) - usb_gadget_vbus_connect(&ci->gadget); - else - usb_gadget_vbus_disconnect(&ci->gadget); -- mutex_lock(&fsm->lock); - - return 0; - } -diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c -index 683617714e7c..220c0fd059bb 100644 ---- a/drivers/usb/class/cdc-acm.c -+++ b/drivers/usb/class/cdc-acm.c -@@ -1133,11 +1133,16 @@ static int acm_probe(struct usb_interface *intf, - } - - while (buflen > 0) { -+ elength = buffer[0]; -+ if (!elength) { -+ dev_err(&intf->dev, "skipping garbage byte\n"); -+ elength = 1; -+ goto next_desc; -+ } - if (buffer[1] != USB_DT_CS_INTERFACE) { - dev_err(&intf->dev, "skipping garbage\n"); - goto next_desc; - } -- elength = buffer[0]; - - switch (buffer[2]) { - case USB_CDC_UNION_TYPE: /* we've found it */ -diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h -index 9893d696fc97..f58caa9e6a27 100644 ---- a/drivers/usb/storage/uas-detect.h -+++ b/drivers/usb/storage/uas-detect.h -@@ -51,7 +51,8 @@ static int uas_find_endpoints(struct usb_host_interface *alt, - } - - static int uas_use_uas_driver(struct usb_interface *intf, -- const struct usb_device_id *id) -+ const struct usb_device_id *id, -+ unsigned long *flags_ret) - { - struct usb_host_endpoint *eps[4] = { }; - struct usb_device *udev = interface_to_usbdev(intf); -@@ -73,7 +74,7 @@ static int uas_use_uas_driver(struct usb_interface *intf, - * this writing the following versions exist: - * ASM1051 - no uas support version - * ASM1051 - with broken (*) uas support -- * ASM1053 - with working uas support -+ * ASM1053 - with working uas support, but problems with large xfers - * ASM1153 - with working uas support - * - * Devices with these chips re-use a number of device-ids over the -@@ -103,6 +104,9 @@ static int uas_use_uas_driver(struct usb_interface *intf, - } else if (usb_ss_max_streams(&eps[1]->ss_ep_comp) == 32) { - /* Possibly an ASM1051, disable uas */ - flags |= US_FL_IGNORE_UAS; -+ } else { -+ /* ASM1053, these have issues with large transfers */ -+ flags |= US_FL_MAX_SECTORS_240; - } - } - -@@ -132,5 +136,8 @@ static int uas_use_uas_driver(struct usb_interface *intf, - return 0; - } - -+ if (flags_ret) -+ *flags_ret = flags; -+ - return 1; - } -diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c -index 6cdabdc119a7..6d3122afeed3 100644 ---- a/drivers/usb/storage/uas.c -+++ b/drivers/usb/storage/uas.c -@@ -759,7 +759,10 @@ static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd) - - static int uas_slave_alloc(struct scsi_device *sdev) - { -- sdev->hostdata = (void *)sdev->host->hostdata; -+ struct uas_dev_info *devinfo = -+ (struct uas_dev_info *)sdev->host->hostdata; -+ -+ sdev->hostdata = devinfo; - - /* USB has unusual DMA-alignment requirements: Although the - * starting address of each scatter-gather element doesn't matter, -@@ -778,6 +781,11 @@ static int uas_slave_alloc(struct scsi_device *sdev) - */ - blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1)); - -+ if (devinfo->flags & US_FL_MAX_SECTORS_64) -+ blk_queue_max_hw_sectors(sdev->request_queue, 64); -+ else if (devinfo->flags & US_FL_MAX_SECTORS_240) -+ blk_queue_max_hw_sectors(sdev->request_queue, 240); -+ - return 0; - } - -@@ -887,8 +895,9 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) - struct Scsi_Host *shost = NULL; - struct uas_dev_info *devinfo; - struct usb_device *udev = interface_to_usbdev(intf); -+ unsigned long dev_flags; - -- if (!uas_use_uas_driver(intf, id)) -+ if (!uas_use_uas_driver(intf, id, &dev_flags)) - return -ENODEV; - - if (uas_switch_interface(udev, intf)) -@@ -910,8 +919,7 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) - devinfo->udev = udev; - devinfo->resetting = 0; - devinfo->shutdown = 0; -- devinfo->flags = id->driver_info; -- usb_stor_adjust_quirks(udev, &devinfo->flags); -+ devinfo->flags = dev_flags; - init_usb_anchor(&devinfo->cmd_urbs); - init_usb_anchor(&devinfo->sense_urbs); - init_usb_anchor(&devinfo->data_urbs); -diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c -index 5600c33fcadb..6c10c888f35f 100644 ---- a/drivers/usb/storage/usb.c -+++ b/drivers/usb/storage/usb.c -@@ -479,7 +479,8 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags) - US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT | - US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 | - US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE | -- US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES); -+ US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES | -+ US_FL_MAX_SECTORS_240); - - p = quirks; - while (*p) { -@@ -520,6 +521,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags) - case 'f': - f |= US_FL_NO_REPORT_OPCODES; - break; -+ case 'g': -+ f |= US_FL_MAX_SECTORS_240; -+ break; - case 'h': - f |= US_FL_CAPACITY_HEURISTICS; - break; -@@ -1080,7 +1084,7 @@ static int storage_probe(struct usb_interface *intf, - - /* If uas is enabled and this device can do uas then ignore it. */ - #if IS_ENABLED(CONFIG_USB_UAS) -- if (uas_use_uas_driver(intf, id)) -+ if (uas_use_uas_driver(intf, id, NULL)) - return -ENXIO; - #endif - -diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c -index f23d4be3280e..2b4c5423672d 100644 ---- a/fs/btrfs/ioctl.c -+++ b/fs/btrfs/ioctl.c -@@ -2403,7 +2403,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file, - "Attempt to delete subvolume %llu during send", - dest->root_key.objectid); - err = -EPERM; -- goto out_dput; -+ goto out_unlock_inode; - } - - d_invalidate(dentry); -@@ -2498,6 +2498,7 @@ out_up_write: - root_flags & ~BTRFS_ROOT_SUBVOL_DEAD); - spin_unlock(&dest->root_item_lock); - } -+out_unlock_inode: - mutex_unlock(&inode->i_mutex); - if (!err) { - shrink_dcache_sb(root->fs_info->sb); -diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c -index bed43081720f..16f6365f65e7 100644 ---- a/fs/ext4/extents.c -+++ b/fs/ext4/extents.c -@@ -4934,13 +4934,6 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) - if (ret) - return ret; - -- /* -- * currently supporting (pre)allocate mode for extent-based -- * files _only_ -- */ -- if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) -- return -EOPNOTSUPP; -- - if (mode & FALLOC_FL_COLLAPSE_RANGE) - return ext4_collapse_range(inode, offset, len); - -@@ -4962,6 +4955,14 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) - - mutex_lock(&inode->i_mutex); - -+ /* -+ * We only support preallocation for extent-based files only -+ */ -+ if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { -+ ret = -EOPNOTSUPP; -+ goto out; -+ } -+ - if (!(mode & FALLOC_FL_KEEP_SIZE) && - offset + len > i_size_read(inode)) { - new_size = offset + len; -diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c -index e04d45733976..9a0121376358 100644 ---- a/fs/ext4/extents_status.c -+++ b/fs/ext4/extents_status.c -@@ -705,6 +705,14 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk, - - BUG_ON(end < lblk); - -+ if ((status & EXTENT_STATUS_DELAYED) && -+ (status & EXTENT_STATUS_WRITTEN)) { -+ ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as " -+ " delayed and written which can potentially " -+ " cause data loss.\n", lblk, len); -+ WARN_ON(1); -+ } -+ - newes.es_lblk = lblk; - newes.es_len = len; - ext4_es_store_pblock_status(&newes, pblk, status); -diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c -index 5cb9a212b86f..852cc521f327 100644 ---- a/fs/ext4/inode.c -+++ b/fs/ext4/inode.c -@@ -534,6 +534,7 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode, - status = map->m_flags & EXT4_MAP_UNWRITTEN ? - EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; - if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) && -+ !(status & EXTENT_STATUS_WRITTEN) && - ext4_find_delalloc_range(inode, map->m_lblk, - map->m_lblk + map->m_len - 1)) - status |= EXTENT_STATUS_DELAYED; -@@ -638,6 +639,7 @@ found: - status = map->m_flags & EXT4_MAP_UNWRITTEN ? - EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN; - if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) && -+ !(status & EXTENT_STATUS_WRITTEN) && - ext4_find_delalloc_range(inode, map->m_lblk, - map->m_lblk + map->m_len - 1)) - status |= EXTENT_STATUS_DELAYED; -diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c -index d98094a9f476..ff10f3decbc9 100644 ---- a/fs/hfsplus/xattr.c -+++ b/fs/hfsplus/xattr.c -@@ -806,9 +806,6 @@ end_removexattr: - static int hfsplus_osx_getxattr(struct dentry *dentry, const char *name, - void *buffer, size_t size, int type) - { -- char *xattr_name; -- int res; -- - if (!strcmp(name, "")) - return -EINVAL; - -@@ -818,24 +815,19 @@ static int hfsplus_osx_getxattr(struct dentry *dentry, const char *name, - */ - if (is_known_namespace(name)) - return -EOPNOTSUPP; -- xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN -- + XATTR_MAC_OSX_PREFIX_LEN + 1, GFP_KERNEL); -- if (!xattr_name) -- return -ENOMEM; -- strcpy(xattr_name, XATTR_MAC_OSX_PREFIX); -- strcpy(xattr_name + XATTR_MAC_OSX_PREFIX_LEN, name); - -- res = hfsplus_getxattr(dentry, xattr_name, buffer, size); -- kfree(xattr_name); -- return res; -+ /* -+ * osx is the namespace we use to indicate an unprefixed -+ * attribute on the filesystem (like the ones that OS X -+ * creates), so we pass the name through unmodified (after -+ * ensuring it doesn't conflict with another namespace). -+ */ -+ return hfsplus_getxattr(dentry, name, buffer, size); - } - - static int hfsplus_osx_setxattr(struct dentry *dentry, const char *name, - const void *buffer, size_t size, int flags, int type) - { -- char *xattr_name; -- int res; -- - if (!strcmp(name, "")) - return -EINVAL; - -@@ -845,16 +837,14 @@ static int hfsplus_osx_setxattr(struct dentry *dentry, const char *name, - */ - if (is_known_namespace(name)) - return -EOPNOTSUPP; -- xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN -- + XATTR_MAC_OSX_PREFIX_LEN + 1, GFP_KERNEL); -- if (!xattr_name) -- return -ENOMEM; -- strcpy(xattr_name, XATTR_MAC_OSX_PREFIX); -- strcpy(xattr_name + XATTR_MAC_OSX_PREFIX_LEN, name); - -- res = hfsplus_setxattr(dentry, xattr_name, buffer, size, flags); -- kfree(xattr_name); -- return res; -+ /* -+ * osx is the namespace we use to indicate an unprefixed -+ * attribute on the filesystem (like the ones that OS X -+ * creates), so we pass the name through unmodified (after -+ * ensuring it doesn't conflict with another namespace). -+ */ -+ return hfsplus_setxattr(dentry, name, buffer, size, flags); - } - - static size_t hfsplus_osx_listxattr(struct dentry *dentry, char *list, -diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h -index a7f2604c5f25..7f5f78bd15ad 100644 ---- a/include/linux/usb_usual.h -+++ b/include/linux/usb_usual.h -@@ -77,6 +77,8 @@ - /* Cannot handle ATA_12 or ATA_16 CDBs */ \ - US_FLAG(NO_REPORT_OPCODES, 0x04000000) \ - /* Cannot handle MI_REPORT_SUPPORTED_OPERATION_CODES */ \ -+ US_FLAG(MAX_SECTORS_240, 0x08000000) \ -+ /* Sets max_sectors to 240 */ \ - - #define US_FLAG(name, value) US_FL_##name = value , - enum { US_DO_ALL_FLAGS }; -diff --git a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h -index 183eaab7c380..96e3f56519e7 100644 ---- a/include/scsi/scsi_devinfo.h -+++ b/include/scsi/scsi_devinfo.h -@@ -36,5 +36,6 @@ - for sequential scan */ - #define BLIST_TRY_VPD_PAGES 0x10000000 /* Attempt to read VPD pages */ - #define BLIST_NO_RSOC 0x20000000 /* don't try to issue RSOC */ -+#define BLIST_MAX_1024 0x40000000 /* maximum 1024 sector cdb length */ - - #endif -diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h -index 0de95ccb92cf..5bd134651f5e 100644 ---- a/include/sound/emu10k1.h -+++ b/include/sound/emu10k1.h -@@ -41,7 +41,8 @@ - - #define EMUPAGESIZE 4096 - #define MAXREQVOICES 8 --#define MAXPAGES 8192 -+#define MAXPAGES0 4096 /* 32 bit mode */ -+#define MAXPAGES1 8192 /* 31 bit mode */ - #define RESERVED 0 - #define NUM_MIDI 16 - #define NUM_G 64 /* use all channels */ -@@ -50,8 +51,7 @@ - - /* FIXME? - according to the OSS driver the EMU10K1 needs a 29 bit DMA mask */ - #define EMU10K1_DMA_MASK 0x7fffffffUL /* 31bit */ --#define AUDIGY_DMA_MASK 0x7fffffffUL /* 31bit FIXME - 32 should work? */ -- /* See ALSA bug #1276 - rlrevell */ -+#define AUDIGY_DMA_MASK 0xffffffffUL /* 32bit mode */ - - #define TMEMSIZE 256*1024 - #define TMEMSIZEREG 4 -@@ -466,8 +466,11 @@ - - #define MAPB 0x0d /* Cache map B */ - --#define MAP_PTE_MASK 0xffffe000 /* The 19 MSBs of the PTE indexed by the PTI */ --#define MAP_PTI_MASK 0x00001fff /* The 13 bit index to one of the 8192 PTE dwords */ -+#define MAP_PTE_MASK0 0xfffff000 /* The 20 MSBs of the PTE indexed by the PTI */ -+#define MAP_PTI_MASK0 0x00000fff /* The 12 bit index to one of the 4096 PTE dwords */ -+ -+#define MAP_PTE_MASK1 0xffffe000 /* The 19 MSBs of the PTE indexed by the PTI */ -+#define MAP_PTI_MASK1 0x00001fff /* The 13 bit index to one of the 8192 PTE dwords */ - - /* 0x0e, 0x0f: Not used */ - -@@ -1704,6 +1707,7 @@ struct snd_emu10k1 { - unsigned short model; /* subsystem id */ - unsigned int card_type; /* EMU10K1_CARD_* */ - unsigned int ecard_ctrl; /* ecard control bits */ -+ unsigned int address_mode; /* address mode */ - unsigned long dma_mask; /* PCI DMA mask */ - unsigned int delay_pcm_irq; /* in samples */ - int max_cache_pages; /* max memory size / PAGE_SIZE */ -diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h -index 8d7416e46861..15355892a0ff 100644 ---- a/include/sound/soc-dapm.h -+++ b/include/sound/soc-dapm.h -@@ -287,7 +287,7 @@ struct device; - .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE,\ - .tlv.p = (tlv_array), \ - .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \ -- .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 0) } -+ .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert, 1) } - #define SOC_DAPM_SINGLE_TLV_VIRT(xname, max, tlv_array) \ - SOC_DAPM_SINGLE(xname, SND_SOC_NOPM, 0, max, 0, tlv_array) - #define SOC_DAPM_ENUM(xname, xenum) \ -diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c -index a64e7a207d2b..0c5796eadae1 100644 ---- a/kernel/bpf/core.c -+++ b/kernel/bpf/core.c -@@ -357,8 +357,8 @@ select_insn: - ALU64_MOD_X: - if (unlikely(SRC == 0)) - return 0; -- tmp = DST; -- DST = do_div(tmp, SRC); -+ div64_u64_rem(DST, SRC, &tmp); -+ DST = tmp; - CONT; - ALU_MOD_X: - if (unlikely(SRC == 0)) -@@ -367,8 +367,8 @@ select_insn: - DST = do_div(tmp, (u32) SRC); - CONT; - ALU64_MOD_K: -- tmp = DST; -- DST = do_div(tmp, IMM); -+ div64_u64_rem(DST, IMM, &tmp); -+ DST = tmp; - CONT; - ALU_MOD_K: - tmp = (u32) DST; -@@ -377,7 +377,7 @@ select_insn: - ALU64_DIV_X: - if (unlikely(SRC == 0)) - return 0; -- do_div(DST, SRC); -+ DST = div64_u64(DST, SRC); - CONT; - ALU_DIV_X: - if (unlikely(SRC == 0)) -@@ -387,7 +387,7 @@ select_insn: - DST = (u32) tmp; - CONT; - ALU64_DIV_K: -- do_div(DST, IMM); -+ DST = div64_u64(DST, IMM); - CONT; - ALU_DIV_K: - tmp = (u32) DST; -diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c -index 208d5439e59b..787b0d699969 100644 ---- a/net/ipv4/ping.c -+++ b/net/ipv4/ping.c -@@ -158,6 +158,7 @@ void ping_unhash(struct sock *sk) - if (sk_hashed(sk)) { - write_lock_bh(&ping_table.lock); - hlist_nulls_del(&sk->sk_nulls_node); -+ sk_nulls_node_init(&sk->sk_nulls_node); - sock_put(sk); - isk->inet_num = 0; - isk->inet_sport = 0; -diff --git a/net/ipv4/route.c b/net/ipv4/route.c -index ad5064362c5c..20fc0202cbbe 100644 ---- a/net/ipv4/route.c -+++ b/net/ipv4/route.c -@@ -963,10 +963,7 @@ static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu) - if (dst_metric_locked(dst, RTAX_MTU)) - return; - -- if (dst->dev->mtu < mtu) -- return; -- -- if (rt->rt_pmtu && rt->rt_pmtu < mtu) -+ if (ipv4_mtu(dst) < mtu) - return; - - if (mtu < ip_rt_min_pmtu) -diff --git a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c -index 37d0220a094c..db7a2e5e4a14 100644 ---- a/sound/pci/emu10k1/emu10k1.c -+++ b/sound/pci/emu10k1/emu10k1.c -@@ -183,8 +183,10 @@ static int snd_card_emu10k1_probe(struct pci_dev *pci, - } - #endif - -- strcpy(card->driver, emu->card_capabilities->driver); -- strcpy(card->shortname, emu->card_capabilities->name); -+ strlcpy(card->driver, emu->card_capabilities->driver, -+ sizeof(card->driver)); -+ strlcpy(card->shortname, emu->card_capabilities->name, -+ sizeof(card->shortname)); - snprintf(card->longname, sizeof(card->longname), - "%s (rev.%d, serial:0x%x) at 0x%lx, irq %i", - card->shortname, emu->revision, emu->serial, emu->port, emu->irq); -diff --git a/sound/pci/emu10k1/emu10k1_callback.c b/sound/pci/emu10k1/emu10k1_callback.c -index 874cd76c7b7f..d2c7ea3a7610 100644 ---- a/sound/pci/emu10k1/emu10k1_callback.c -+++ b/sound/pci/emu10k1/emu10k1_callback.c -@@ -415,7 +415,7 @@ start_voice(struct snd_emux_voice *vp) - snd_emu10k1_ptr_write(hw, Z2, ch, 0); - - /* invalidate maps */ -- temp = (hw->silent_page.addr << 1) | MAP_PTI_MASK; -+ temp = (hw->silent_page.addr << hw->address_mode) | (hw->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0); - snd_emu10k1_ptr_write(hw, MAPA, ch, temp); - snd_emu10k1_ptr_write(hw, MAPB, ch, temp); - #if 0 -@@ -436,7 +436,7 @@ start_voice(struct snd_emux_voice *vp) - snd_emu10k1_ptr_write(hw, CDF, ch, sample); - - /* invalidate maps */ -- temp = ((unsigned int)hw->silent_page.addr << 1) | MAP_PTI_MASK; -+ temp = ((unsigned int)hw->silent_page.addr << hw_address_mode) | (hw->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0); - snd_emu10k1_ptr_write(hw, MAPA, ch, temp); - snd_emu10k1_ptr_write(hw, MAPB, ch, temp); - -diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c -index b4458a630a7c..df9f5c7c9c77 100644 ---- a/sound/pci/emu10k1/emu10k1_main.c -+++ b/sound/pci/emu10k1/emu10k1_main.c -@@ -282,7 +282,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) - snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */ - snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */ - -- silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK; -+ silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0); - for (ch = 0; ch < NUM_G; ch++) { - snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page); - snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); -@@ -348,6 +348,11 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) - outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG); - } - -+ if (emu->address_mode == 0) { -+ /* use 16M in 4G */ -+ outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG); -+ } -+ - return 0; - } - -@@ -1421,7 +1426,7 @@ static struct snd_emu_chip_details emu_chip_details[] = { - * - */ - {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102, -- .driver = "Audigy2", .name = "SB Audigy 2 ZS Notebook [SB0530]", -+ .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]", - .id = "Audigy2", - .emu10k2_chip = 1, - .ca0108_chip = 1, -@@ -1571,7 +1576,7 @@ static struct snd_emu_chip_details emu_chip_details[] = { - .adc_1361t = 1, /* 24 bit capture instead of 16bit */ - .ac97_chip = 1} , - {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102, -- .driver = "Audigy2", .name = "SB Audigy 2 Platinum EX [SB0280]", -+ .driver = "Audigy2", .name = "Audigy 2 Platinum EX [SB0280]", - .id = "Audigy2", - .emu10k2_chip = 1, - .ca0102_chip = 1, -@@ -1877,8 +1882,10 @@ int snd_emu10k1_create(struct snd_card *card, - - is_audigy = emu->audigy = c->emu10k2_chip; - -+ /* set addressing mode */ -+ emu->address_mode = is_audigy ? 0 : 1; - /* set the DMA transfer mask */ -- emu->dma_mask = is_audigy ? AUDIGY_DMA_MASK : EMU10K1_DMA_MASK; -+ emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK; - if (pci_set_dma_mask(pci, emu->dma_mask) < 0 || - pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) { - dev_err(card->dev, -@@ -1903,7 +1910,7 @@ int snd_emu10k1_create(struct snd_card *card, - - emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT; - if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), -- 32 * 1024, &emu->ptb_pages) < 0) { -+ (emu->address_mode ? 32 : 16) * 1024, &emu->ptb_pages) < 0) { - err = -ENOMEM; - goto error; - } -@@ -2002,8 +2009,8 @@ int snd_emu10k1_create(struct snd_card *card, - - /* Clear silent pages and set up pointers */ - memset(emu->silent_page.area, 0, PAGE_SIZE); -- silent_page = emu->silent_page.addr << 1; -- for (idx = 0; idx < MAXPAGES; idx++) -+ silent_page = emu->silent_page.addr << emu->address_mode; -+ for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++) - ((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx); - - /* set up voice indices */ -diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c -index 0dc07385af0e..14a305bd8a98 100644 ---- a/sound/pci/emu10k1/emupcm.c -+++ b/sound/pci/emu10k1/emupcm.c -@@ -380,7 +380,7 @@ static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu, - snd_emu10k1_ptr_write(emu, Z1, voice, 0); - snd_emu10k1_ptr_write(emu, Z2, voice, 0); - /* invalidate maps */ -- silent_page = ((unsigned int)emu->silent_page.addr << 1) | MAP_PTI_MASK; -+ silent_page = ((unsigned int)emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0); - snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page); - snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page); - /* modulation envelope */ -diff --git a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c -index c68e6dd2fa67..4f1f69be1865 100644 ---- a/sound/pci/emu10k1/memory.c -+++ b/sound/pci/emu10k1/memory.c -@@ -34,10 +34,11 @@ - * aligned pages in others - */ - #define __set_ptb_entry(emu,page,addr) \ -- (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << 1) | (page))) -+ (((u32 *)(emu)->ptb_pages.area)[page] = cpu_to_le32(((addr) << (emu->address_mode)) | (page))) - - #define UNIT_PAGES (PAGE_SIZE / EMUPAGESIZE) --#define MAX_ALIGN_PAGES (MAXPAGES / UNIT_PAGES) -+#define MAX_ALIGN_PAGES0 (MAXPAGES0 / UNIT_PAGES) -+#define MAX_ALIGN_PAGES1 (MAXPAGES1 / UNIT_PAGES) - /* get aligned page from offset address */ - #define get_aligned_page(offset) ((offset) >> PAGE_SHIFT) - /* get offset address from aligned page */ -@@ -124,7 +125,7 @@ static int search_empty_map_area(struct snd_emu10k1 *emu, int npages, struct lis - } - page = blk->mapped_page + blk->pages; - } -- size = MAX_ALIGN_PAGES - page; -+ size = (emu->address_mode ? MAX_ALIGN_PAGES1 : MAX_ALIGN_PAGES0) - page; - if (size >= max_size) { - *nextp = pos; - return page; -@@ -181,7 +182,7 @@ static int unmap_memblk(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk) - q = get_emu10k1_memblk(p, mapped_link); - end_page = q->mapped_page; - } else -- end_page = MAX_ALIGN_PAGES; -+ end_page = (emu->address_mode ? MAX_ALIGN_PAGES1 : MAX_ALIGN_PAGES0); - - /* remove links */ - list_del(&blk->mapped_link); -@@ -307,7 +308,7 @@ snd_emu10k1_alloc_pages(struct snd_emu10k1 *emu, struct snd_pcm_substream *subst - if (snd_BUG_ON(!emu)) - return NULL; - if (snd_BUG_ON(runtime->dma_bytes <= 0 || -- runtime->dma_bytes >= MAXPAGES * EMUPAGESIZE)) -+ runtime->dma_bytes >= (emu->address_mode ? MAXPAGES1 : MAXPAGES0) * EMUPAGESIZE)) - return NULL; - hdr = emu->memhdr; - if (snd_BUG_ON(!hdr)) -diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c -index 2fe86d2e1b09..a63a86332deb 100644 ---- a/sound/pci/hda/hda_codec.c -+++ b/sound/pci/hda/hda_codec.c -@@ -3027,6 +3027,16 @@ static struct snd_kcontrol_new vmaster_mute_mode = { - .put = vmaster_mute_mode_put, - }; - -+/* meta hook to call each driver's vmaster hook */ -+static void vmaster_hook(void *private_data, int enabled) -+{ -+ struct hda_vmaster_mute_hook *hook = private_data; -+ -+ if (hook->mute_mode != HDA_VMUTE_FOLLOW_MASTER) -+ enabled = hook->mute_mode; -+ hook->hook(hook->codec, enabled); -+} -+ - /** - * snd_hda_add_vmaster_hook - Add a vmaster hook for mute-LED - * @codec: the HDA codec -@@ -3045,9 +3055,9 @@ int snd_hda_add_vmaster_hook(struct hda_codec *codec, - - if (!hook->hook || !hook->sw_kctl) - return 0; -- snd_ctl_add_vmaster_hook(hook->sw_kctl, hook->hook, codec); - hook->codec = codec; - hook->mute_mode = HDA_VMUTE_FOLLOW_MASTER; -+ snd_ctl_add_vmaster_hook(hook->sw_kctl, vmaster_hook, hook); - if (!expose_enum_ctl) - return 0; - kctl = snd_ctl_new1(&vmaster_mute_mode, hook); -@@ -3073,14 +3083,7 @@ void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook) - */ - if (hook->codec->bus->shutdown) - return; -- switch (hook->mute_mode) { -- case HDA_VMUTE_FOLLOW_MASTER: -- snd_ctl_sync_vmaster_hook(hook->sw_kctl); -- break; -- default: -- hook->hook(hook->codec, hook->mute_mode); -- break; -- } -+ snd_ctl_sync_vmaster_hook(hook->sw_kctl); - } - EXPORT_SYMBOL_GPL(snd_hda_sync_vmaster_hook); - -diff --git a/sound/pci/hda/thinkpad_helper.c b/sound/pci/hda/thinkpad_helper.c -index 6ba0b5517c40..2341fc334163 100644 ---- a/sound/pci/hda/thinkpad_helper.c -+++ b/sound/pci/hda/thinkpad_helper.c -@@ -72,6 +72,7 @@ static void hda_fixup_thinkpad_acpi(struct hda_codec *codec, - if (led_set_func(TPACPI_LED_MUTE, false) >= 0) { - old_vmaster_hook = spec->vmaster_mute.hook; - spec->vmaster_mute.hook = update_tpacpi_mute_led; -+ spec->vmaster_mute_enum = 1; - removefunc = false; - } - if (led_set_func(TPACPI_LED_MICMUTE, false) >= 0) { -diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c -index fb9c20eace3f..97b33e96439a 100644 ---- a/sound/soc/codecs/rt5677.c -+++ b/sound/soc/codecs/rt5677.c -@@ -62,6 +62,9 @@ static const struct reg_default init_list[] = { - {RT5677_PR_BASE + 0x1e, 0x0000}, - {RT5677_PR_BASE + 0x12, 0x0eaa}, - {RT5677_PR_BASE + 0x14, 0x018a}, -+ {RT5677_PR_BASE + 0x15, 0x0490}, -+ {RT5677_PR_BASE + 0x38, 0x0f71}, -+ {RT5677_PR_BASE + 0x39, 0x0f71}, - }; - #define RT5677_INIT_REG_LEN ARRAY_SIZE(init_list) - -@@ -901,7 +904,7 @@ static int set_dmic_clk(struct snd_soc_dapm_widget *w, - { - struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); - struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); -- int idx = rl6231_calc_dmic_clk(rt5677->sysclk); -+ int idx = rl6231_calc_dmic_clk(rt5677->lrck[RT5677_AIF1] << 8); - - if (idx < 0) - dev_err(codec->dev, "Failed to set DMIC clock\n"); -diff --git a/sound/soc/codecs/tfa9879.c b/sound/soc/codecs/tfa9879.c -index 16f1b71edb55..aab0af681e8c 100644 ---- a/sound/soc/codecs/tfa9879.c -+++ b/sound/soc/codecs/tfa9879.c -@@ -280,8 +280,8 @@ static int tfa9879_i2c_probe(struct i2c_client *i2c, - int i; - - tfa9879 = devm_kzalloc(&i2c->dev, sizeof(*tfa9879), GFP_KERNEL); -- if (IS_ERR(tfa9879)) -- return PTR_ERR(tfa9879); -+ if (!tfa9879) -+ return -ENOMEM; - - i2c_set_clientdata(i2c, tfa9879); - -diff --git a/sound/soc/samsung/s3c24xx-i2s.c b/sound/soc/samsung/s3c24xx-i2s.c -index 326d3c3804e3..5bf723689692 100644 ---- a/sound/soc/samsung/s3c24xx-i2s.c -+++ b/sound/soc/samsung/s3c24xx-i2s.c -@@ -461,8 +461,8 @@ static int s3c24xx_iis_dev_probe(struct platform_device *pdev) - return -ENOENT; - } - s3c24xx_i2s.regs = devm_ioremap_resource(&pdev->dev, res); -- if (s3c24xx_i2s.regs == NULL) -- return -ENXIO; -+ if (IS_ERR(s3c24xx_i2s.regs)) -+ return PTR_ERR(s3c24xx_i2s.regs); - - s3c24xx_i2s_pcm_stereo_out.dma_addr = res->start + S3C2410_IISFIFO; - s3c24xx_i2s_pcm_stereo_in.dma_addr = res->start + S3C2410_IISFIFO; -diff --git a/sound/synth/emux/emux_oss.c b/sound/synth/emux/emux_oss.c -index ab37add269ae..82e350e9501c 100644 ---- a/sound/synth/emux/emux_oss.c -+++ b/sound/synth/emux/emux_oss.c -@@ -118,12 +118,8 @@ snd_emux_open_seq_oss(struct snd_seq_oss_arg *arg, void *closure) - if (snd_BUG_ON(!arg || !emu)) - return -ENXIO; - -- mutex_lock(&emu->register_mutex); -- -- if (!snd_emux_inc_count(emu)) { -- mutex_unlock(&emu->register_mutex); -+ if (!snd_emux_inc_count(emu)) - return -EFAULT; -- } - - memset(&callback, 0, sizeof(callback)); - callback.owner = THIS_MODULE; -@@ -135,7 +131,6 @@ snd_emux_open_seq_oss(struct snd_seq_oss_arg *arg, void *closure) - if (p == NULL) { - snd_printk(KERN_ERR "can't create port\n"); - snd_emux_dec_count(emu); -- mutex_unlock(&emu->register_mutex); - return -ENOMEM; - } - -@@ -148,8 +143,6 @@ snd_emux_open_seq_oss(struct snd_seq_oss_arg *arg, void *closure) - reset_port_mode(p, arg->seq_mode); - - snd_emux_reset_port(p); -- -- mutex_unlock(&emu->register_mutex); - return 0; - } - -@@ -195,13 +188,11 @@ snd_emux_close_seq_oss(struct snd_seq_oss_arg *arg) - if (snd_BUG_ON(!emu)) - return -ENXIO; - -- mutex_lock(&emu->register_mutex); - snd_emux_sounds_off_all(p); - snd_soundfont_close_check(emu->sflist, SF_CLIENT_NO(p->chset.port)); - snd_seq_event_port_detach(p->chset.client, p->chset.port); - snd_emux_dec_count(emu); - -- mutex_unlock(&emu->register_mutex); - return 0; - } - -diff --git a/sound/synth/emux/emux_seq.c b/sound/synth/emux/emux_seq.c -index 7778b8e19782..a0209204ae48 100644 ---- a/sound/synth/emux/emux_seq.c -+++ b/sound/synth/emux/emux_seq.c -@@ -124,12 +124,10 @@ snd_emux_detach_seq(struct snd_emux *emu) - if (emu->voices) - snd_emux_terminate_all(emu); - -- mutex_lock(&emu->register_mutex); - if (emu->client >= 0) { - snd_seq_delete_kernel_client(emu->client); - emu->client = -1; - } -- mutex_unlock(&emu->register_mutex); - } - - -@@ -269,8 +267,8 @@ snd_emux_event_input(struct snd_seq_event *ev, int direct, void *private_data, - /* - * increment usage count - */ --int --snd_emux_inc_count(struct snd_emux *emu) -+static int -+__snd_emux_inc_count(struct snd_emux *emu) - { - emu->used++; - if (!try_module_get(emu->ops.owner)) -@@ -284,12 +282,21 @@ snd_emux_inc_count(struct snd_emux *emu) - return 1; - } - -+int snd_emux_inc_count(struct snd_emux *emu) -+{ -+ int ret; -+ -+ mutex_lock(&emu->register_mutex); -+ ret = __snd_emux_inc_count(emu); -+ mutex_unlock(&emu->register_mutex); -+ return ret; -+} - - /* - * decrease usage count - */ --void --snd_emux_dec_count(struct snd_emux *emu) -+static void -+__snd_emux_dec_count(struct snd_emux *emu) - { - module_put(emu->card->module); - emu->used--; -@@ -298,6 +305,12 @@ snd_emux_dec_count(struct snd_emux *emu) - module_put(emu->ops.owner); - } - -+void snd_emux_dec_count(struct snd_emux *emu) -+{ -+ mutex_lock(&emu->register_mutex); -+ __snd_emux_dec_count(emu); -+ mutex_unlock(&emu->register_mutex); -+} - - /* - * Routine that is called upon a first use of a particular port -@@ -317,7 +330,7 @@ snd_emux_use(void *private_data, struct snd_seq_port_subscribe *info) - - mutex_lock(&emu->register_mutex); - snd_emux_init_port(p); -- snd_emux_inc_count(emu); -+ __snd_emux_inc_count(emu); - mutex_unlock(&emu->register_mutex); - return 0; - } -@@ -340,7 +353,7 @@ snd_emux_unuse(void *private_data, struct snd_seq_port_subscribe *info) - - mutex_lock(&emu->register_mutex); - snd_emux_sounds_off_all(p); -- snd_emux_dec_count(emu); -+ __snd_emux_dec_count(emu); - mutex_unlock(&emu->register_mutex); - return 0; - } |