diff options
Diffstat (limited to '4.9.16/1015_linux-4.9.16.patch')
-rw-r--r-- | 4.9.16/1015_linux-4.9.16.patch | 1623 |
1 files changed, 0 insertions, 1623 deletions
diff --git a/4.9.16/1015_linux-4.9.16.patch b/4.9.16/1015_linux-4.9.16.patch deleted file mode 100644 index 7ac2f77..0000000 --- a/4.9.16/1015_linux-4.9.16.patch +++ /dev/null @@ -1,1623 +0,0 @@ -diff --git a/Makefile b/Makefile -index 03df4fc..4e0f962 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,6 +1,6 @@ - VERSION = 4 - PATCHLEVEL = 9 --SUBLEVEL = 15 -+SUBLEVEL = 16 - EXTRAVERSION = - NAME = Roaring Lionus - -diff --git a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig -index 5d83ff7..ec8e968 100644 ---- a/arch/mips/configs/ip22_defconfig -+++ b/arch/mips/configs/ip22_defconfig -@@ -67,8 +67,8 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_DCCP=m --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_DCCP=y -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig -index 2b74aee..e582069 100644 ---- a/arch/mips/configs/ip27_defconfig -+++ b/arch/mips/configs/ip27_defconfig -@@ -133,7 +133,7 @@ CONFIG_LIBFC=m - CONFIG_SCSI_QLOGIC_1280=y - CONFIG_SCSI_PMCRAID=m - CONFIG_SCSI_BFA_FC=m --CONFIG_SCSI_DH=m -+CONFIG_SCSI_DH=y - CONFIG_SCSI_DH_RDAC=m - CONFIG_SCSI_DH_HP_SW=m - CONFIG_SCSI_DH_EMC=m -@@ -205,7 +205,6 @@ CONFIG_MLX4_EN=m - # CONFIG_MLX4_DEBUG is not set - CONFIG_TEHUTI=m - CONFIG_BNX2X=m --CONFIG_QLGE=m - CONFIG_SFC=m - CONFIG_BE2NET=m - CONFIG_LIBERTAS_THINFIRM=m -diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig -index 5da76e0..0cdb431 100644 ---- a/arch/mips/configs/lemote2f_defconfig -+++ b/arch/mips/configs/lemote2f_defconfig -@@ -39,7 +39,7 @@ CONFIG_HIBERNATION=y - CONFIG_PM_STD_PARTITION="/dev/hda3" - CONFIG_CPU_FREQ=y - CONFIG_CPU_FREQ_DEBUG=y --CONFIG_CPU_FREQ_STAT=m -+CONFIG_CPU_FREQ_STAT=y - CONFIG_CPU_FREQ_STAT_DETAILS=y - CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y - CONFIG_CPU_FREQ_GOV_POWERSAVE=m -diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig -index 58d43f3..078ecac 100644 ---- a/arch/mips/configs/malta_defconfig -+++ b/arch/mips/configs/malta_defconfig -@@ -59,8 +59,8 @@ CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_DCCP=m --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_DCCP=y -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/configs/malta_kvm_defconfig b/arch/mips/configs/malta_kvm_defconfig -index c8f7e28..e233f87 100644 ---- a/arch/mips/configs/malta_kvm_defconfig -+++ b/arch/mips/configs/malta_kvm_defconfig -@@ -60,8 +60,8 @@ CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_DCCP=m --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_DCCP=y -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/configs/malta_kvm_guest_defconfig b/arch/mips/configs/malta_kvm_guest_defconfig -index d2f54e5..fbe085c 100644 ---- a/arch/mips/configs/malta_kvm_guest_defconfig -+++ b/arch/mips/configs/malta_kvm_guest_defconfig -@@ -59,8 +59,8 @@ CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_DCCP=m --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_DCCP=y -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/configs/maltaup_xpa_defconfig b/arch/mips/configs/maltaup_xpa_defconfig -index 3d0d9cb..2942610 100644 ---- a/arch/mips/configs/maltaup_xpa_defconfig -+++ b/arch/mips/configs/maltaup_xpa_defconfig -@@ -61,8 +61,8 @@ CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_DCCP=m --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_DCCP=y -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/configs/nlm_xlp_defconfig b/arch/mips/configs/nlm_xlp_defconfig -index b496c25..07d0182 100644 ---- a/arch/mips/configs/nlm_xlp_defconfig -+++ b/arch/mips/configs/nlm_xlp_defconfig -@@ -110,7 +110,7 @@ CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/configs/nlm_xlr_defconfig b/arch/mips/configs/nlm_xlr_defconfig -index 8e99ad8..f59969a 100644 ---- a/arch/mips/configs/nlm_xlr_defconfig -+++ b/arch/mips/configs/nlm_xlr_defconfig -@@ -90,7 +90,7 @@ CONFIG_NETFILTER=y - CONFIG_NF_CONNTRACK=m - CONFIG_NF_CONNTRACK_SECMARK=y - CONFIG_NF_CONNTRACK_EVENTS=y --CONFIG_NF_CT_PROTO_UDPLITE=m -+CONFIG_NF_CT_PROTO_UDPLITE=y - CONFIG_NF_CONNTRACK_AMANDA=m - CONFIG_NF_CONNTRACK_FTP=m - CONFIG_NF_CONNTRACK_H323=m -diff --git a/arch/mips/include/asm/mach-ip27/spaces.h b/arch/mips/include/asm/mach-ip27/spaces.h -index 4775a11..24d5e31 100644 ---- a/arch/mips/include/asm/mach-ip27/spaces.h -+++ b/arch/mips/include/asm/mach-ip27/spaces.h -@@ -12,14 +12,16 @@ - - /* - * IP27 uses the R10000's uncached attribute feature. Attribute 3 selects -- * uncached memory addressing. -+ * uncached memory addressing. Hide the definitions on 32-bit compilation -+ * of the compat-vdso code. - */ -- -+#ifdef CONFIG_64BIT - #define HSPEC_BASE 0x9000000000000000 - #define IO_BASE 0x9200000000000000 - #define MSPEC_BASE 0x9400000000000000 - #define UNCAC_BASE 0x9600000000000000 - #define CAC_BASE 0xa800000000000000 -+#endif - - #define TO_MSPEC(x) (MSPEC_BASE | ((x) & TO_PHYS_MASK)) - #define TO_HSPEC(x) (HSPEC_BASE | ((x) & TO_PHYS_MASK)) -diff --git a/arch/mips/ralink/prom.c b/arch/mips/ralink/prom.c -index 5a73c5e..23198c9 100644 ---- a/arch/mips/ralink/prom.c -+++ b/arch/mips/ralink/prom.c -@@ -30,8 +30,10 @@ const char *get_system_type(void) - return soc_info.sys_type; - } - --static __init void prom_init_cmdline(int argc, char **argv) -+static __init void prom_init_cmdline(void) - { -+ int argc; -+ char **argv; - int i; - - pr_debug("prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x\n", -@@ -60,14 +62,11 @@ static __init void prom_init_cmdline(int argc, char **argv) - - void __init prom_init(void) - { -- int argc; -- char **argv; -- - prom_soc_init(&soc_info); - - pr_info("SoC Type: %s\n", get_system_type()); - -- prom_init_cmdline(argc, argv); -+ prom_init_cmdline(); - } - - void __init prom_free_prom_memory(void) -diff --git a/arch/mips/ralink/rt288x.c b/arch/mips/ralink/rt288x.c -index 285796e..2b76e36 100644 ---- a/arch/mips/ralink/rt288x.c -+++ b/arch/mips/ralink/rt288x.c -@@ -40,16 +40,6 @@ static struct rt2880_pmx_group rt2880_pinmux_data_act[] = { - { 0 } - }; - --static void rt288x_wdt_reset(void) --{ -- u32 t; -- -- /* enable WDT reset output on pin SRAM_CS_N */ -- t = rt_sysc_r32(SYSC_REG_CLKCFG); -- t |= CLKCFG_SRAM_CS_N_WDT; -- rt_sysc_w32(t, SYSC_REG_CLKCFG); --} -- - void __init ralink_clk_init(void) - { - unsigned long cpu_rate, wmac_rate = 40000000; -diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c -index c8a28c4b..e778e0b 100644 ---- a/arch/mips/ralink/rt305x.c -+++ b/arch/mips/ralink/rt305x.c -@@ -89,17 +89,6 @@ static struct rt2880_pmx_group rt5350_pinmux_data[] = { - { 0 } - }; - --static void rt305x_wdt_reset(void) --{ -- u32 t; -- -- /* enable WDT reset output on pin SRAM_CS_N */ -- t = rt_sysc_r32(SYSC_REG_SYSTEM_CONFIG); -- t |= RT305X_SYSCFG_SRAM_CS0_MODE_WDT << -- RT305X_SYSCFG_SRAM_CS0_MODE_SHIFT; -- rt_sysc_w32(t, SYSC_REG_SYSTEM_CONFIG); --} -- - static unsigned long rt5350_get_mem_size(void) - { - void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT305X_SYSC_BASE); -diff --git a/arch/mips/ralink/rt3883.c b/arch/mips/ralink/rt3883.c -index 4cef916..3e0aa09 100644 ---- a/arch/mips/ralink/rt3883.c -+++ b/arch/mips/ralink/rt3883.c -@@ -63,16 +63,6 @@ static struct rt2880_pmx_group rt3883_pinmux_data[] = { - { 0 } - }; - --static void rt3883_wdt_reset(void) --{ -- u32 t; -- -- /* enable WDT reset output on GPIO 2 */ -- t = rt_sysc_r32(RT3883_SYSC_REG_SYSCFG1); -- t |= RT3883_SYSCFG1_GPIO2_AS_WDT_OUT; -- rt_sysc_w32(t, RT3883_SYSC_REG_SYSCFG1); --} -- - void __init ralink_clk_init(void) - { - unsigned long cpu_rate, sys_rate; -diff --git a/arch/mips/ralink/timer.c b/arch/mips/ralink/timer.c -index 8077ff3..d4469b2 100644 ---- a/arch/mips/ralink/timer.c -+++ b/arch/mips/ralink/timer.c -@@ -71,11 +71,6 @@ static int rt_timer_request(struct rt_timer *rt) - return err; - } - --static void rt_timer_free(struct rt_timer *rt) --{ -- free_irq(rt->irq, rt); --} -- - static int rt_timer_config(struct rt_timer *rt, unsigned long divisor) - { - if (rt->timer_freq < divisor) -@@ -101,15 +96,6 @@ static int rt_timer_enable(struct rt_timer *rt) - return 0; - } - --static void rt_timer_disable(struct rt_timer *rt) --{ -- u32 t; -- -- t = rt_timer_r32(rt, TIMER_REG_TMR0CTL); -- t &= ~TMR0CTL_ENABLE; -- rt_timer_w32(rt, TIMER_REG_TMR0CTL, t); --} -- - static int rt_timer_probe(struct platform_device *pdev) - { - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -diff --git a/arch/mips/sgi-ip22/Platform b/arch/mips/sgi-ip22/Platform -index b7a4b7e..e8f6b3a 100644 ---- a/arch/mips/sgi-ip22/Platform -+++ b/arch/mips/sgi-ip22/Platform -@@ -25,7 +25,7 @@ endif - # Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys - # - ifdef CONFIG_SGI_IP28 -- ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n) -+ ifeq ($(call cc-option-yn,-march=r10000 -mr10k-cache-barrier=store), n) - $(error gcc doesn't support needed option -mr10k-cache-barrier=store) - endif - endif -diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c -index 3362299..6ca3b90 100644 ---- a/arch/powerpc/lib/sstep.c -+++ b/arch/powerpc/lib/sstep.c -@@ -1807,8 +1807,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - goto instr_done; - - case LARX: -- if (regs->msr & MSR_LE) -- return 0; - if (op.ea & (size - 1)) - break; /* can't handle misaligned */ - err = -EFAULT; -@@ -1832,8 +1830,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - goto ldst_done; - - case STCX: -- if (regs->msr & MSR_LE) -- return 0; - if (op.ea & (size - 1)) - break; /* can't handle misaligned */ - err = -EFAULT; -@@ -1859,8 +1855,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - goto ldst_done; - - case LOAD: -- if (regs->msr & MSR_LE) -- return 0; - err = read_mem(®s->gpr[op.reg], op.ea, size, regs); - if (!err) { - if (op.type & SIGNEXT) -@@ -1872,8 +1866,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - - #ifdef CONFIG_PPC_FPU - case LOAD_FP: -- if (regs->msr & MSR_LE) -- return 0; - if (size == 4) - err = do_fp_load(op.reg, do_lfs, op.ea, size, regs); - else -@@ -1882,15 +1874,11 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - #endif - #ifdef CONFIG_ALTIVEC - case LOAD_VMX: -- if (regs->msr & MSR_LE) -- return 0; - err = do_vec_load(op.reg, do_lvx, op.ea & ~0xfUL, regs); - goto ldst_done; - #endif - #ifdef CONFIG_VSX - case LOAD_VSX: -- if (regs->msr & MSR_LE) -- return 0; - err = do_vsx_load(op.reg, do_lxvd2x, op.ea, regs); - goto ldst_done; - #endif -@@ -1913,8 +1901,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - goto instr_done; - - case STORE: -- if (regs->msr & MSR_LE) -- return 0; - if ((op.type & UPDATE) && size == sizeof(long) && - op.reg == 1 && op.update_reg == 1 && - !(regs->msr & MSR_PR) && -@@ -1927,8 +1913,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - - #ifdef CONFIG_PPC_FPU - case STORE_FP: -- if (regs->msr & MSR_LE) -- return 0; - if (size == 4) - err = do_fp_store(op.reg, do_stfs, op.ea, size, regs); - else -@@ -1937,15 +1921,11 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr) - #endif - #ifdef CONFIG_ALTIVEC - case STORE_VMX: -- if (regs->msr & MSR_LE) -- return 0; - err = do_vec_store(op.reg, do_stvx, op.ea & ~0xfUL, regs); - goto ldst_done; - #endif - #ifdef CONFIG_VSX - case STORE_VSX: -- if (regs->msr & MSR_LE) -- return 0; - err = do_vsx_store(op.reg, do_stxvd2x, op.ea, regs); - goto ldst_done; - #endif -diff --git a/arch/powerpc/sysdev/xics/icp-opal.c b/arch/powerpc/sysdev/xics/icp-opal.c -index c96c0cb..32c46b4 100644 ---- a/arch/powerpc/sysdev/xics/icp-opal.c -+++ b/arch/powerpc/sysdev/xics/icp-opal.c -@@ -91,6 +91,16 @@ static unsigned int icp_opal_get_irq(void) - - static void icp_opal_set_cpu_priority(unsigned char cppr) - { -+ /* -+ * Here be dragons. The caller has asked to allow only IPI's and not -+ * external interrupts. But OPAL XIVE doesn't support that. So instead -+ * of allowing no interrupts allow all. That's still not right, but -+ * currently the only caller who does this is xics_migrate_irqs_away() -+ * and it works in that case. -+ */ -+ if (cppr >= DEFAULT_PRIORITY) -+ cppr = LOWEST_PRIORITY; -+ - xics_set_base_cppr(cppr); - opal_int_set_cppr(cppr); - iosync(); -diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c -index 69d858e..23efe4e 100644 ---- a/arch/powerpc/sysdev/xics/xics-common.c -+++ b/arch/powerpc/sysdev/xics/xics-common.c -@@ -20,6 +20,7 @@ - #include <linux/of.h> - #include <linux/slab.h> - #include <linux/spinlock.h> -+#include <linux/delay.h> - - #include <asm/prom.h> - #include <asm/io.h> -@@ -198,9 +199,6 @@ void xics_migrate_irqs_away(void) - /* Remove ourselves from the global interrupt queue */ - xics_set_cpu_giq(xics_default_distrib_server, 0); - -- /* Allow IPIs again... */ -- icp_ops->set_priority(DEFAULT_PRIORITY); -- - for_each_irq_desc(virq, desc) { - struct irq_chip *chip; - long server; -@@ -255,6 +253,19 @@ void xics_migrate_irqs_away(void) - unlock: - raw_spin_unlock_irqrestore(&desc->lock, flags); - } -+ -+ /* Allow "sufficient" time to drop any inflight IRQ's */ -+ mdelay(5); -+ -+ /* -+ * Allow IPIs again. This is done at the very end, after migrating all -+ * interrupts, the expectation is that we'll only get woken up by an IPI -+ * interrupt beyond this point, but leave externals masked just to be -+ * safe. If we're using icp-opal this may actually allow all -+ * interrupts anyway, but that should be OK. -+ */ -+ icp_ops->set_priority(DEFAULT_PRIORITY); -+ - } - #endif /* CONFIG_HOTPLUG_CPU */ - -diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c -index d56ef26..7678f79 100644 ---- a/arch/s390/mm/pgtable.c -+++ b/arch/s390/mm/pgtable.c -@@ -606,12 +606,29 @@ void ptep_zap_key(struct mm_struct *mm, unsigned long addr, pte_t *ptep) - bool test_and_clear_guest_dirty(struct mm_struct *mm, unsigned long addr) - { - spinlock_t *ptl; -+ pgd_t *pgd; -+ pud_t *pud; -+ pmd_t *pmd; - pgste_t pgste; - pte_t *ptep; - pte_t pte; - bool dirty; - -- ptep = get_locked_pte(mm, addr, &ptl); -+ pgd = pgd_offset(mm, addr); -+ pud = pud_alloc(mm, pgd, addr); -+ if (!pud) -+ return false; -+ pmd = pmd_alloc(mm, pud, addr); -+ if (!pmd) -+ return false; -+ /* We can't run guests backed by huge pages, but userspace can -+ * still set them up and then try to migrate them without any -+ * migration support. -+ */ -+ if (pmd_large(*pmd)) -+ return true; -+ -+ ptep = pte_alloc_map_lock(mm, pmd, addr, &ptl); - if (unlikely(!ptep)) - return false; - -diff --git a/crypto/Makefile b/crypto/Makefile -index bd6a029..9e52b3c 100644 ---- a/crypto/Makefile -+++ b/crypto/Makefile -@@ -71,6 +71,7 @@ obj-$(CONFIG_CRYPTO_SHA256) += sha256_generic.o - obj-$(CONFIG_CRYPTO_SHA512) += sha512_generic.o - obj-$(CONFIG_CRYPTO_SHA3) += sha3_generic.o - obj-$(CONFIG_CRYPTO_WP512) += wp512.o -+CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 - obj-$(CONFIG_CRYPTO_TGR192) += tgr192.o - obj-$(CONFIG_CRYPTO_GF128MUL) += gf128mul.o - obj-$(CONFIG_CRYPTO_ECB) += ecb.o -@@ -94,6 +95,7 @@ obj-$(CONFIG_CRYPTO_BLOWFISH_COMMON) += blowfish_common.o - obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o - obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o - obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o -+CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149 - obj-$(CONFIG_CRYPTO_AES) += aes_generic.o - obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o - obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o -diff --git a/drivers/firmware/efi/arm-runtime.c b/drivers/firmware/efi/arm-runtime.c -index 7c75a8d..6bdf39e 100644 ---- a/drivers/firmware/efi/arm-runtime.c -+++ b/drivers/firmware/efi/arm-runtime.c -@@ -65,6 +65,7 @@ static bool __init efi_virtmap_init(void) - bool systab_found; - - efi_mm.pgd = pgd_alloc(&efi_mm); -+ mm_init_cpumask(&efi_mm); - init_new_context(NULL, &efi_mm); - - systab_found = false; -diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c -index 83768e8..2178266 100644 ---- a/drivers/i2c/i2c-mux.c -+++ b/drivers/i2c/i2c-mux.c -@@ -429,6 +429,7 @@ void i2c_mux_del_adapters(struct i2c_mux_core *muxc) - while (muxc->num_adapters) { - struct i2c_adapter *adap = muxc->adapter[--muxc->num_adapters]; - struct i2c_mux_priv *priv = adap->algo_data; -+ struct device_node *np = adap->dev.of_node; - - muxc->adapter[muxc->num_adapters] = NULL; - -@@ -438,6 +439,7 @@ void i2c_mux_del_adapters(struct i2c_mux_core *muxc) - - sysfs_remove_link(&priv->adap.dev.kobj, "mux_device"); - i2c_del_adapter(adap); -+ of_node_put(np); - kfree(priv); - } - } -diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c -index 4cab29e..11bfa27 100644 ---- a/drivers/infiniband/hw/mlx5/main.c -+++ b/drivers/infiniband/hw/mlx5/main.c -@@ -3141,9 +3141,11 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev) - if (err) - goto err_rsrc; - -- err = mlx5_ib_alloc_q_counters(dev); -- if (err) -- goto err_odp; -+ if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) { -+ err = mlx5_ib_alloc_q_counters(dev); -+ if (err) -+ goto err_odp; -+ } - - err = ib_register_device(&dev->ib_dev, NULL); - if (err) -@@ -3171,7 +3173,8 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev) - ib_unregister_device(&dev->ib_dev); - - err_q_cnt: -- mlx5_ib_dealloc_q_counters(dev); -+ if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) -+ mlx5_ib_dealloc_q_counters(dev); - - err_odp: - mlx5_ib_odp_remove_one(dev); -@@ -3201,7 +3204,8 @@ static void mlx5_ib_remove(struct mlx5_core_dev *mdev, void *context) - - mlx5_remove_roce_notifier(dev); - ib_unregister_device(&dev->ib_dev); -- mlx5_ib_dealloc_q_counters(dev); -+ if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) -+ mlx5_ib_dealloc_q_counters(dev); - destroy_umrc_res(dev); - mlx5_ib_odp_remove_one(dev); - destroy_dev_resources(&dev->devr); -diff --git a/drivers/md/dm.c b/drivers/md/dm.c -index ef7bf1d..628ba00 100644 ---- a/drivers/md/dm.c -+++ b/drivers/md/dm.c -@@ -972,10 +972,61 @@ void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors) - } - EXPORT_SYMBOL_GPL(dm_accept_partial_bio); - -+/* -+ * Flush current->bio_list when the target map method blocks. -+ * This fixes deadlocks in snapshot and possibly in other targets. -+ */ -+struct dm_offload { -+ struct blk_plug plug; -+ struct blk_plug_cb cb; -+}; -+ -+static void flush_current_bio_list(struct blk_plug_cb *cb, bool from_schedule) -+{ -+ struct dm_offload *o = container_of(cb, struct dm_offload, cb); -+ struct bio_list list; -+ struct bio *bio; -+ -+ INIT_LIST_HEAD(&o->cb.list); -+ -+ if (unlikely(!current->bio_list)) -+ return; -+ -+ list = *current->bio_list; -+ bio_list_init(current->bio_list); -+ -+ while ((bio = bio_list_pop(&list))) { -+ struct bio_set *bs = bio->bi_pool; -+ if (unlikely(!bs) || bs == fs_bio_set) { -+ bio_list_add(current->bio_list, bio); -+ continue; -+ } -+ -+ spin_lock(&bs->rescue_lock); -+ bio_list_add(&bs->rescue_list, bio); -+ queue_work(bs->rescue_workqueue, &bs->rescue_work); -+ spin_unlock(&bs->rescue_lock); -+ } -+} -+ -+static void dm_offload_start(struct dm_offload *o) -+{ -+ blk_start_plug(&o->plug); -+ o->cb.callback = flush_current_bio_list; -+ list_add(&o->cb.list, ¤t->plug->cb_list); -+} -+ -+static void dm_offload_end(struct dm_offload *o) -+{ -+ list_del(&o->cb.list); -+ blk_finish_plug(&o->plug); -+} -+ - static void __map_bio(struct dm_target_io *tio) - { - int r; - sector_t sector; -+ struct dm_offload o; - struct bio *clone = &tio->clone; - struct dm_target *ti = tio->ti; - -@@ -988,7 +1039,11 @@ static void __map_bio(struct dm_target_io *tio) - */ - atomic_inc(&tio->io->io_count); - sector = clone->bi_iter.bi_sector; -+ -+ dm_offload_start(&o); - r = ti->type->map(ti, clone); -+ dm_offload_end(&o); -+ - if (r == DM_MAPIO_REMAPPED) { - /* the bio has been remapped so dispatch it */ - -diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c -index d9c1f2f..aba7735 100644 ---- a/drivers/media/rc/rc-main.c -+++ b/drivers/media/rc/rc-main.c -@@ -1411,6 +1411,7 @@ int rc_register_device(struct rc_dev *dev) - int attr = 0; - int minor; - int rc; -+ u64 rc_type; - - if (!dev || !dev->map_name) - return -EINVAL; -@@ -1496,14 +1497,18 @@ int rc_register_device(struct rc_dev *dev) - goto out_input; - } - -+ rc_type = BIT_ULL(rc_map->rc_type); -+ - if (dev->change_protocol) { -- u64 rc_type = (1ll << rc_map->rc_type); - rc = dev->change_protocol(dev, &rc_type); - if (rc < 0) - goto out_raw; - dev->enabled_protocols = rc_type; - } - -+ if (dev->driver_type == RC_DRIVER_IR_RAW) -+ ir_raw_load_modules(&rc_type); -+ - /* Allow the RC sysfs nodes to be accessible */ - atomic_set(&dev->initialized, 1); - -diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c -index 2c720cb..c3e6734 100644 ---- a/drivers/media/usb/dvb-usb/dw2102.c -+++ b/drivers/media/usb/dvb-usb/dw2102.c -@@ -68,6 +68,7 @@ - struct dw2102_state { - u8 initialized; - u8 last_lock; -+ u8 data[MAX_XFER_SIZE + 4]; - struct i2c_client *i2c_client_demod; - struct i2c_client *i2c_client_tuner; - -@@ -662,62 +663,72 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], - int num) - { - struct dvb_usb_device *d = i2c_get_adapdata(adap); -- u8 obuf[0x40], ibuf[0x40]; -+ struct dw2102_state *state; - - if (!d) - return -ENODEV; -+ -+ state = d->priv; -+ - if (mutex_lock_interruptible(&d->i2c_mutex) < 0) - return -EAGAIN; -+ if (mutex_lock_interruptible(&d->data_mutex) < 0) { -+ mutex_unlock(&d->i2c_mutex); -+ return -EAGAIN; -+ } - - switch (num) { - case 1: - switch (msg[0].addr) { - case SU3000_STREAM_CTRL: -- obuf[0] = msg[0].buf[0] + 0x36; -- obuf[1] = 3; -- obuf[2] = 0; -- if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 0, 0) < 0) -+ state->data[0] = msg[0].buf[0] + 0x36; -+ state->data[1] = 3; -+ state->data[2] = 0; -+ if (dvb_usb_generic_rw(d, state->data, 3, -+ state->data, 0, 0) < 0) - err("i2c transfer failed."); - break; - case DW2102_RC_QUERY: -- obuf[0] = 0x10; -- if (dvb_usb_generic_rw(d, obuf, 1, ibuf, 2, 0) < 0) -+ state->data[0] = 0x10; -+ if (dvb_usb_generic_rw(d, state->data, 1, -+ state->data, 2, 0) < 0) - err("i2c transfer failed."); -- msg[0].buf[1] = ibuf[0]; -- msg[0].buf[0] = ibuf[1]; -+ msg[0].buf[1] = state->data[0]; -+ msg[0].buf[0] = state->data[1]; - break; - default: - /* always i2c write*/ -- obuf[0] = 0x08; -- obuf[1] = msg[0].addr; -- obuf[2] = msg[0].len; -+ state->data[0] = 0x08; -+ state->data[1] = msg[0].addr; -+ state->data[2] = msg[0].len; - -- memcpy(&obuf[3], msg[0].buf, msg[0].len); -+ memcpy(&state->data[3], msg[0].buf, msg[0].len); - -- if (dvb_usb_generic_rw(d, obuf, msg[0].len + 3, -- ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, msg[0].len + 3, -+ state->data, 1, 0) < 0) - err("i2c transfer failed."); - - } - break; - case 2: - /* always i2c read */ -- obuf[0] = 0x09; -- obuf[1] = msg[0].len; -- obuf[2] = msg[1].len; -- obuf[3] = msg[0].addr; -- memcpy(&obuf[4], msg[0].buf, msg[0].len); -- -- if (dvb_usb_generic_rw(d, obuf, msg[0].len + 4, -- ibuf, msg[1].len + 1, 0) < 0) -+ state->data[0] = 0x09; -+ state->data[1] = msg[0].len; -+ state->data[2] = msg[1].len; -+ state->data[3] = msg[0].addr; -+ memcpy(&state->data[4], msg[0].buf, msg[0].len); -+ -+ if (dvb_usb_generic_rw(d, state->data, msg[0].len + 4, -+ state->data, msg[1].len + 1, 0) < 0) - err("i2c transfer failed."); - -- memcpy(msg[1].buf, &ibuf[1], msg[1].len); -+ memcpy(msg[1].buf, &state->data[1], msg[1].len); - break; - default: - warn("more than 2 i2c messages at a time is not handled yet."); - break; - } -+ mutex_unlock(&d->data_mutex); - mutex_unlock(&d->i2c_mutex); - return num; - } -@@ -845,17 +856,23 @@ static int su3000_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) - static int su3000_power_ctrl(struct dvb_usb_device *d, int i) - { - struct dw2102_state *state = (struct dw2102_state *)d->priv; -- u8 obuf[] = {0xde, 0}; -+ int ret = 0; - - info("%s: %d, initialized %d", __func__, i, state->initialized); - - if (i && !state->initialized) { -+ mutex_lock(&d->data_mutex); -+ -+ state->data[0] = 0xde; -+ state->data[1] = 0; -+ - state->initialized = 1; - /* reset board */ -- return dvb_usb_generic_rw(d, obuf, 2, NULL, 0, 0); -+ ret = dvb_usb_generic_rw(d, state->data, 2, NULL, 0, 0); -+ mutex_unlock(&d->data_mutex); - } - -- return 0; -+ return ret; - } - - static int su3000_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) -@@ -1310,49 +1327,57 @@ static int prof_7500_frontend_attach(struct dvb_usb_adapter *d) - return 0; - } - --static int su3000_frontend_attach(struct dvb_usb_adapter *d) -+static int su3000_frontend_attach(struct dvb_usb_adapter *adap) - { -- u8 obuf[3] = { 0xe, 0x80, 0 }; -- u8 ibuf[] = { 0 }; -+ struct dvb_usb_device *d = adap->dev; -+ struct dw2102_state *state = d->priv; -+ -+ mutex_lock(&d->data_mutex); -+ -+ state->data[0] = 0xe; -+ state->data[1] = 0x80; -+ state->data[2] = 0; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0xe; -- obuf[1] = 0x02; -- obuf[2] = 1; -+ state->data[0] = 0xe; -+ state->data[1] = 0x02; -+ state->data[2] = 1; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - msleep(300); - -- obuf[0] = 0xe; -- obuf[1] = 0x83; -- obuf[2] = 0; -+ state->data[0] = 0xe; -+ state->data[1] = 0x83; -+ state->data[2] = 0; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0xe; -- obuf[1] = 0x83; -- obuf[2] = 1; -+ state->data[0] = 0xe; -+ state->data[1] = 0x83; -+ state->data[2] = 1; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0x51; -+ state->data[0] = 0x51; - -- if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) - err("command 0x51 transfer failed."); - -- d->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config, -- &d->dev->i2c_adap); -- if (d->fe_adap[0].fe == NULL) -+ mutex_unlock(&d->data_mutex); -+ -+ adap->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config, -+ &d->i2c_adap); -+ if (adap->fe_adap[0].fe == NULL) - return -EIO; - -- if (dvb_attach(ts2020_attach, d->fe_adap[0].fe, -+ if (dvb_attach(ts2020_attach, adap->fe_adap[0].fe, - &dw2104_ts2020_config, -- &d->dev->i2c_adap)) { -+ &d->i2c_adap)) { - info("Attached DS3000/TS2020!"); - return 0; - } -@@ -1361,47 +1386,55 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d) - return -EIO; - } - --static int t220_frontend_attach(struct dvb_usb_adapter *d) -+static int t220_frontend_attach(struct dvb_usb_adapter *adap) - { -- u8 obuf[3] = { 0xe, 0x87, 0 }; -- u8 ibuf[] = { 0 }; -+ struct dvb_usb_device *d = adap->dev; -+ struct dw2102_state *state = d->priv; -+ -+ mutex_lock(&d->data_mutex); - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ state->data[0] = 0xe; -+ state->data[1] = 0x87; -+ state->data[2] = 0x0; -+ -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0xe; -- obuf[1] = 0x86; -- obuf[2] = 1; -+ state->data[0] = 0xe; -+ state->data[1] = 0x86; -+ state->data[2] = 1; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0xe; -- obuf[1] = 0x80; -- obuf[2] = 0; -+ state->data[0] = 0xe; -+ state->data[1] = 0x80; -+ state->data[2] = 0; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - - msleep(50); - -- obuf[0] = 0xe; -- obuf[1] = 0x80; -- obuf[2] = 1; -+ state->data[0] = 0xe; -+ state->data[1] = 0x80; -+ state->data[2] = 1; - -- if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0x51; -+ state->data[0] = 0x51; - -- if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) - err("command 0x51 transfer failed."); - -- d->fe_adap[0].fe = dvb_attach(cxd2820r_attach, &cxd2820r_config, -- &d->dev->i2c_adap, NULL); -- if (d->fe_adap[0].fe != NULL) { -- if (dvb_attach(tda18271_attach, d->fe_adap[0].fe, 0x60, -- &d->dev->i2c_adap, &tda18271_config)) { -+ mutex_unlock(&d->data_mutex); -+ -+ adap->fe_adap[0].fe = dvb_attach(cxd2820r_attach, &cxd2820r_config, -+ &d->i2c_adap, NULL); -+ if (adap->fe_adap[0].fe != NULL) { -+ if (dvb_attach(tda18271_attach, adap->fe_adap[0].fe, 0x60, -+ &d->i2c_adap, &tda18271_config)) { - info("Attached TDA18271HD/CXD2820R!"); - return 0; - } -@@ -1411,23 +1444,30 @@ static int t220_frontend_attach(struct dvb_usb_adapter *d) - return -EIO; - } - --static int m88rs2000_frontend_attach(struct dvb_usb_adapter *d) -+static int m88rs2000_frontend_attach(struct dvb_usb_adapter *adap) - { -- u8 obuf[] = { 0x51 }; -- u8 ibuf[] = { 0 }; -+ struct dvb_usb_device *d = adap->dev; -+ struct dw2102_state *state = d->priv; -+ -+ mutex_lock(&d->data_mutex); - -- if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) -+ state->data[0] = 0x51; -+ -+ if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) - err("command 0x51 transfer failed."); - -- d->fe_adap[0].fe = dvb_attach(m88rs2000_attach, &s421_m88rs2000_config, -- &d->dev->i2c_adap); -+ mutex_unlock(&d->data_mutex); - -- if (d->fe_adap[0].fe == NULL) -+ adap->fe_adap[0].fe = dvb_attach(m88rs2000_attach, -+ &s421_m88rs2000_config, -+ &d->i2c_adap); -+ -+ if (adap->fe_adap[0].fe == NULL) - return -EIO; - -- if (dvb_attach(ts2020_attach, d->fe_adap[0].fe, -+ if (dvb_attach(ts2020_attach, adap->fe_adap[0].fe, - &dw2104_ts2020_config, -- &d->dev->i2c_adap)) { -+ &d->i2c_adap)) { - info("Attached RS2000/TS2020!"); - return 0; - } -@@ -1440,44 +1480,50 @@ static int tt_s2_4600_frontend_attach(struct dvb_usb_adapter *adap) - { - struct dvb_usb_device *d = adap->dev; - struct dw2102_state *state = d->priv; -- u8 obuf[3] = { 0xe, 0x80, 0 }; -- u8 ibuf[] = { 0 }; - struct i2c_adapter *i2c_adapter; - struct i2c_client *client; - struct i2c_board_info board_info; - struct m88ds3103_platform_data m88ds3103_pdata = {}; - struct ts2020_config ts2020_config = {}; - -- if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) -+ mutex_lock(&d->data_mutex); -+ -+ state->data[0] = 0xe; -+ state->data[1] = 0x80; -+ state->data[2] = 0x0; -+ -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0xe; -- obuf[1] = 0x02; -- obuf[2] = 1; -+ state->data[0] = 0xe; -+ state->data[1] = 0x02; -+ state->data[2] = 1; - -- if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - msleep(300); - -- obuf[0] = 0xe; -- obuf[1] = 0x83; -- obuf[2] = 0; -+ state->data[0] = 0xe; -+ state->data[1] = 0x83; -+ state->data[2] = 0; - -- if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0xe; -- obuf[1] = 0x83; -- obuf[2] = 1; -+ state->data[0] = 0xe; -+ state->data[1] = 0x83; -+ state->data[2] = 1; - -- if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) - err("command 0x0e transfer failed."); - -- obuf[0] = 0x51; -+ state->data[0] = 0x51; - -- if (dvb_usb_generic_rw(d, obuf, 1, ibuf, 1, 0) < 0) -+ if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) - err("command 0x51 transfer failed."); - -+ mutex_unlock(&d->data_mutex); -+ - /* attach demod */ - m88ds3103_pdata.clk = 27000000; - m88ds3103_pdata.i2c_wr_max = 33; -diff --git a/drivers/mtd/maps/pmcmsp-flash.c b/drivers/mtd/maps/pmcmsp-flash.c -index f9fa3fa..2051f28 100644 ---- a/drivers/mtd/maps/pmcmsp-flash.c -+++ b/drivers/mtd/maps/pmcmsp-flash.c -@@ -139,15 +139,13 @@ static int __init init_msp_flash(void) - } - - msp_maps[i].bankwidth = 1; -- msp_maps[i].name = kmalloc(7, GFP_KERNEL); -+ msp_maps[i].name = kstrndup(flash_name, 7, GFP_KERNEL); - if (!msp_maps[i].name) { - iounmap(msp_maps[i].virt); - kfree(msp_parts[i]); - goto cleanup_loop; - } - -- msp_maps[i].name = strncpy(msp_maps[i].name, flash_name, 7); -- - for (j = 0; j < pcnt; j++) { - part_name[5] = '0' + i; - part_name[7] = '0' + j; -diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c -index 5370909..08d91ef 100644 ---- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c -+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c -@@ -913,6 +913,8 @@ static int bcm_enet_open(struct net_device *dev) - priv->old_link = 0; - priv->old_duplex = -1; - priv->old_pause = -1; -+ } else { -+ phydev = NULL; - } - - /* mask all interrupts and request them */ -@@ -1083,7 +1085,7 @@ static int bcm_enet_open(struct net_device *dev) - enet_dmac_writel(priv, priv->dma_chan_int_mask, - ENETDMAC_IRMASK, priv->tx_chan); - -- if (priv->has_phy) -+ if (phydev) - phy_start(phydev); - else - bcm_enet_adjust_link(dev); -@@ -1126,7 +1128,7 @@ static int bcm_enet_open(struct net_device *dev) - free_irq(dev->irq, dev); - - out_phy_disconnect: -- if (priv->has_phy) -+ if (phydev) - phy_disconnect(phydev); - - return ret; -diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c -index 28097be..5127b7e 100644 ---- a/drivers/net/ethernet/ti/cpmac.c -+++ b/drivers/net/ethernet/ti/cpmac.c -@@ -1211,7 +1211,7 @@ int cpmac_init(void) - goto fail_alloc; - } - --#warning FIXME: unhardcode gpio&reset bits -+ /* FIXME: unhardcode gpio&reset bits */ - ar7_gpio_disable(26); - ar7_gpio_disable(27); - ar7_device_reset(AR7_RESET_BIT_CPMAC_LO); -diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index 3a035e07..087a218 100644 ---- a/drivers/pci/quirks.c -+++ b/drivers/pci/quirks.c -@@ -2173,6 +2173,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005d, quirk_blacklist_vpd); - DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_LSI_LOGIC, 0x005f, quirk_blacklist_vpd); - DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, PCI_ANY_ID, - quirk_blacklist_vpd); -+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_QLOGIC, 0x2261, quirk_blacklist_vpd); - - /* - * For Broadcom 5706, 5708, 5709 rev. A nics, any read beyond the -diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c -index f44615f..3e2ef4f 100644 ---- a/drivers/tty/serial/samsung.c -+++ b/drivers/tty/serial/samsung.c -@@ -1036,8 +1036,10 @@ static int s3c64xx_serial_startup(struct uart_port *port) - if (ourport->dma) { - ret = s3c24xx_serial_request_dma(ourport); - if (ret < 0) { -- dev_warn(port->dev, "DMA request failed\n"); -- return ret; -+ dev_warn(port->dev, -+ "DMA request failed, DMA will not be used\n"); -+ devm_kfree(port->dev, ourport->dma); -+ ourport->dma = NULL; - } - } - -diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c -index 29e80cc..5dd1832 100644 ---- a/drivers/usb/dwc3/dwc3-omap.c -+++ b/drivers/usb/dwc3/dwc3-omap.c -@@ -249,6 +249,7 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap, - val = dwc3_omap_read_utmi_ctrl(omap); - val |= USBOTGSS_UTMI_OTG_CTRL_IDDIG; - dwc3_omap_write_utmi_ctrl(omap, val); -+ break; - - case OMAP_DWC3_VBUS_OFF: - val = dwc3_omap_read_utmi_ctrl(omap); -diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h -index e4a1d97..39459b7 100644 ---- a/drivers/usb/dwc3/gadget.h -+++ b/drivers/usb/dwc3/gadget.h -@@ -28,23 +28,23 @@ struct dwc3; - #define gadget_to_dwc(g) (container_of(g, struct dwc3, gadget)) - - /* DEPCFG parameter 1 */ --#define DWC3_DEPCFG_INT_NUM(n) ((n) << 0) -+#define DWC3_DEPCFG_INT_NUM(n) (((n) & 0x1f) << 0) - #define DWC3_DEPCFG_XFER_COMPLETE_EN (1 << 8) - #define DWC3_DEPCFG_XFER_IN_PROGRESS_EN (1 << 9) - #define DWC3_DEPCFG_XFER_NOT_READY_EN (1 << 10) - #define DWC3_DEPCFG_FIFO_ERROR_EN (1 << 11) - #define DWC3_DEPCFG_STREAM_EVENT_EN (1 << 13) --#define DWC3_DEPCFG_BINTERVAL_M1(n) ((n) << 16) -+#define DWC3_DEPCFG_BINTERVAL_M1(n) (((n) & 0xff) << 16) - #define DWC3_DEPCFG_STREAM_CAPABLE (1 << 24) --#define DWC3_DEPCFG_EP_NUMBER(n) ((n) << 25) -+#define DWC3_DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25) - #define DWC3_DEPCFG_BULK_BASED (1 << 30) - #define DWC3_DEPCFG_FIFO_BASED (1 << 31) - - /* DEPCFG parameter 0 */ --#define DWC3_DEPCFG_EP_TYPE(n) ((n) << 1) --#define DWC3_DEPCFG_MAX_PACKET_SIZE(n) ((n) << 3) --#define DWC3_DEPCFG_FIFO_NUMBER(n) ((n) << 17) --#define DWC3_DEPCFG_BURST_SIZE(n) ((n) << 22) -+#define DWC3_DEPCFG_EP_TYPE(n) (((n) & 0x3) << 1) -+#define DWC3_DEPCFG_MAX_PACKET_SIZE(n) (((n) & 0x7ff) << 3) -+#define DWC3_DEPCFG_FIFO_NUMBER(n) (((n) & 0x1f) << 17) -+#define DWC3_DEPCFG_BURST_SIZE(n) (((n) & 0xf) << 22) - #define DWC3_DEPCFG_DATA_SEQ_NUM(n) ((n) << 26) - /* This applies for core versions earlier than 1.94a */ - #define DWC3_DEPCFG_IGN_SEQ_NUM (1 << 31) -diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c -index 8d412d8..89081b8 100644 ---- a/drivers/usb/gadget/function/f_fs.c -+++ b/drivers/usb/gadget/function/f_fs.c -@@ -1833,11 +1833,14 @@ static int ffs_func_eps_enable(struct ffs_function *func) - spin_lock_irqsave(&func->ffs->eps_lock, flags); - do { - struct usb_endpoint_descriptor *ds; -+ struct usb_ss_ep_comp_descriptor *comp_desc = NULL; -+ int needs_comp_desc = false; - int desc_idx; - -- if (ffs->gadget->speed == USB_SPEED_SUPER) -+ if (ffs->gadget->speed == USB_SPEED_SUPER) { - desc_idx = 2; -- else if (ffs->gadget->speed == USB_SPEED_HIGH) -+ needs_comp_desc = true; -+ } else if (ffs->gadget->speed == USB_SPEED_HIGH) - desc_idx = 1; - else - desc_idx = 0; -@@ -1854,6 +1857,14 @@ static int ffs_func_eps_enable(struct ffs_function *func) - - ep->ep->driver_data = ep; - ep->ep->desc = ds; -+ -+ comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds + -+ USB_DT_ENDPOINT_SIZE); -+ ep->ep->maxburst = comp_desc->bMaxBurst + 1; -+ -+ if (needs_comp_desc) -+ ep->ep->comp_desc = comp_desc; -+ - ret = usb_ep_enable(ep->ep); - if (likely(!ret)) { - epfile->ep = ep; -diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c -index 27ed51b..29b41b5 100644 ---- a/drivers/usb/gadget/function/f_uvc.c -+++ b/drivers/usb/gadget/function/f_uvc.c -@@ -258,13 +258,6 @@ uvc_function_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl) - memcpy(&uvc_event->req, ctrl, sizeof(uvc_event->req)); - v4l2_event_queue(&uvc->vdev, &v4l2_event); - -- /* Pass additional setup data to userspace */ -- if (uvc->event_setup_out && uvc->event_length) { -- uvc->control_req->length = uvc->event_length; -- return usb_ep_queue(uvc->func.config->cdev->gadget->ep0, -- uvc->control_req, GFP_ATOMIC); -- } -- - return 0; - } - -diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c -index a81d9ab..4fa5de2 100644 ---- a/drivers/usb/gadget/udc/dummy_hcd.c -+++ b/drivers/usb/gadget/udc/dummy_hcd.c -@@ -1031,6 +1031,8 @@ static int dummy_udc_probe(struct platform_device *pdev) - int rc; - - dum = *((void **)dev_get_platdata(&pdev->dev)); -+ /* Clear usb_gadget region for new registration to udc-core */ -+ memzero_explicit(&dum->gadget, sizeof(struct usb_gadget)); - dum->gadget.name = gadget_name; - dum->gadget.ops = &dummy_ops; - dum->gadget.max_speed = USB_SPEED_SUPER; -diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c -index b38a228..af0566d 100644 ---- a/drivers/usb/host/ohci-at91.c -+++ b/drivers/usb/host/ohci-at91.c -@@ -361,7 +361,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, - - case USB_PORT_FEAT_SUSPEND: - dev_dbg(hcd->self.controller, "SetPortFeat: SUSPEND\n"); -- if (valid_port(wIndex)) { -+ if (valid_port(wIndex) && ohci_at91->sfr_regmap) { - ohci_at91_port_suspend(ohci_at91->sfr_regmap, - 1); - return 0; -@@ -404,7 +404,7 @@ static int ohci_at91_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, - - case USB_PORT_FEAT_SUSPEND: - dev_dbg(hcd->self.controller, "ClearPortFeature: SUSPEND\n"); -- if (valid_port(wIndex)) { -+ if (valid_port(wIndex) && ohci_at91->sfr_regmap) { - ohci_at91_port_suspend(ohci_at91->sfr_regmap, - 0); - return 0; -diff --git a/drivers/usb/host/xhci-dbg.c b/drivers/usb/host/xhci-dbg.c -index 74c42f7..3425154 100644 ---- a/drivers/usb/host/xhci-dbg.c -+++ b/drivers/usb/host/xhci-dbg.c -@@ -111,7 +111,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci) - xhci_dbg(xhci, "RTSOFF 0x%x:\n", temp & RTSOFF_MASK); - - /* xhci 1.1 controllers have the HCCPARAMS2 register */ -- if (hci_version > 100) { -+ if (hci_version > 0x100) { - temp = readl(&xhci->cap_regs->hcc_params2); - xhci_dbg(xhci, "HCC PARAMS2 0x%x:\n", (unsigned int) temp); - xhci_dbg(xhci, " HC %s Force save context capability", -diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c -index abe3606..5895e84 100644 ---- a/drivers/usb/host/xhci-plat.c -+++ b/drivers/usb/host/xhci-plat.c -@@ -274,6 +274,8 @@ static int xhci_plat_remove(struct platform_device *dev) - struct xhci_hcd *xhci = hcd_to_xhci(hcd); - struct clk *clk = xhci->clk; - -+ xhci->xhc_state |= XHCI_STATE_REMOVING; -+ - usb_remove_hcd(xhci->shared_hcd); - usb_phy_shutdown(hcd->usb_phy); - -diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c -index 095778f..37c63cb 100644 ---- a/drivers/usb/misc/iowarrior.c -+++ b/drivers/usb/misc/iowarrior.c -@@ -781,12 +781,6 @@ static int iowarrior_probe(struct usb_interface *interface, - iface_desc = interface->cur_altsetting; - dev->product_id = le16_to_cpu(udev->descriptor.idProduct); - -- if (iface_desc->desc.bNumEndpoints < 1) { -- dev_err(&interface->dev, "Invalid number of endpoints\n"); -- retval = -EINVAL; -- goto error; -- } -- - /* set up the endpoint information */ - for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { - endpoint = &iface_desc->endpoint[i].desc; -@@ -797,6 +791,21 @@ static int iowarrior_probe(struct usb_interface *interface, - /* this one will match for the IOWarrior56 only */ - dev->int_out_endpoint = endpoint; - } -+ -+ if (!dev->int_in_endpoint) { -+ dev_err(&interface->dev, "no interrupt-in endpoint found\n"); -+ retval = -ENODEV; -+ goto error; -+ } -+ -+ if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) { -+ if (!dev->int_out_endpoint) { -+ dev_err(&interface->dev, "no interrupt-out endpoint found\n"); -+ retval = -ENODEV; -+ goto error; -+ } -+ } -+ - /* we have to check the report_size often, so remember it in the endianness suitable for our machine */ - dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint); - if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) && -diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c -index 6a1df9e..30bf0f5 100644 ---- a/drivers/usb/serial/digi_acceleport.c -+++ b/drivers/usb/serial/digi_acceleport.c -@@ -1482,16 +1482,20 @@ static int digi_read_oob_callback(struct urb *urb) - struct usb_serial *serial = port->serial; - struct tty_struct *tty; - struct digi_port *priv = usb_get_serial_port_data(port); -+ unsigned char *buf = urb->transfer_buffer; - int opcode, line, status, val; - int i; - unsigned int rts; - -+ if (urb->actual_length < 4) -+ return -1; -+ - /* handle each oob command */ -- for (i = 0; i < urb->actual_length - 3;) { -- opcode = ((unsigned char *)urb->transfer_buffer)[i++]; -- line = ((unsigned char *)urb->transfer_buffer)[i++]; -- status = ((unsigned char *)urb->transfer_buffer)[i++]; -- val = ((unsigned char *)urb->transfer_buffer)[i++]; -+ for (i = 0; i < urb->actual_length - 3; i += 4) { -+ opcode = buf[i]; -+ line = buf[i + 1]; -+ status = buf[i + 2]; -+ val = buf[i + 3]; - - dev_dbg(&port->dev, "digi_read_oob_callback: opcode=%d, line=%d, status=%d, val=%d\n", - opcode, line, status, val); -diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c -index c02808a..f1a8fdc 100644 ---- a/drivers/usb/serial/io_ti.c -+++ b/drivers/usb/serial/io_ti.c -@@ -1674,6 +1674,12 @@ static void edge_interrupt_callback(struct urb *urb) - function = TIUMP_GET_FUNC_FROM_CODE(data[0]); - dev_dbg(dev, "%s - port_number %d, function %d, info 0x%x\n", __func__, - port_number, function, data[1]); -+ -+ if (port_number >= edge_serial->serial->num_ports) { -+ dev_err(dev, "bad port number %d\n", port_number); -+ goto exit; -+ } -+ - port = edge_serial->serial->port[port_number]; - edge_port = usb_get_serial_port_data(port); - if (!edge_port) { -@@ -1755,7 +1761,7 @@ static void edge_bulk_in_callback(struct urb *urb) - - port_number = edge_port->port->port_number; - -- if (edge_port->lsr_event) { -+ if (urb->actual_length > 0 && edge_port->lsr_event) { - edge_port->lsr_event = 0; - dev_dbg(dev, "%s ===== Port %u LSR Status = %02x, Data = %02x ======\n", - __func__, port_number, edge_port->lsr_mask, *data); -diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c -index a180b17..76564b3 100644 ---- a/drivers/usb/serial/omninet.c -+++ b/drivers/usb/serial/omninet.c -@@ -142,12 +142,6 @@ static int omninet_port_remove(struct usb_serial_port *port) - - static int omninet_open(struct tty_struct *tty, struct usb_serial_port *port) - { -- struct usb_serial *serial = port->serial; -- struct usb_serial_port *wport; -- -- wport = serial->port[1]; -- tty_port_tty_set(&wport->port, tty); -- - return usb_serial_generic_open(tty, port); - } - -diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c -index 93c6c9b..8a069aa 100644 ---- a/drivers/usb/serial/safe_serial.c -+++ b/drivers/usb/serial/safe_serial.c -@@ -200,6 +200,11 @@ static void safe_process_read_urb(struct urb *urb) - if (!safe) - goto out; - -+ if (length < 2) { -+ dev_err(&port->dev, "malformed packet\n"); -+ return; -+ } -+ - fcs = fcs_compute10(data, length, CRC10_INITFCS); - if (fcs) { - dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs); -diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c -index 1d4f5fa..dc9d64a 100644 ---- a/fs/ext4/inode.c -+++ b/fs/ext4/inode.c -@@ -3824,6 +3824,10 @@ static int ext4_block_truncate_page(handle_t *handle, - unsigned blocksize; - struct inode *inode = mapping->host; - -+ /* If we are processing an encrypted inode during orphan list handling */ -+ if (ext4_encrypted_inode(inode) && !fscrypt_has_encryption_key(inode)) -+ return 0; -+ - blocksize = inode->i_sb->s_blocksize; - length = blocksize - (offset & (blocksize - 1)); - -diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h -index eb209d4..dc79773 100644 ---- a/include/linux/user_namespace.h -+++ b/include/linux/user_namespace.h -@@ -65,7 +65,7 @@ struct ucounts { - struct hlist_node node; - struct user_namespace *ns; - kuid_t uid; -- atomic_t count; -+ int count; - atomic_t ucount[UCOUNT_COUNTS]; - }; - -diff --git a/include/trace/events/syscalls.h b/include/trace/events/syscalls.h -index 14e49c7..b35533b 100644 ---- a/include/trace/events/syscalls.h -+++ b/include/trace/events/syscalls.h -@@ -1,5 +1,6 @@ - #undef TRACE_SYSTEM - #define TRACE_SYSTEM raw_syscalls -+#undef TRACE_INCLUDE_FILE - #define TRACE_INCLUDE_FILE syscalls - - #if !defined(_TRACE_EVENTS_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ) -diff --git a/kernel/ucount.c b/kernel/ucount.c -index 4bbd38e..f4ac185 100644 ---- a/kernel/ucount.c -+++ b/kernel/ucount.c -@@ -139,7 +139,7 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) - - new->ns = ns; - new->uid = uid; -- atomic_set(&new->count, 0); -+ new->count = 0; - - spin_lock_irq(&ucounts_lock); - ucounts = find_ucounts(ns, uid, hashent); -@@ -150,8 +150,10 @@ static struct ucounts *get_ucounts(struct user_namespace *ns, kuid_t uid) - ucounts = new; - } - } -- if (!atomic_add_unless(&ucounts->count, 1, INT_MAX)) -+ if (ucounts->count == INT_MAX) - ucounts = NULL; -+ else -+ ucounts->count += 1; - spin_unlock_irq(&ucounts_lock); - return ucounts; - } -@@ -160,13 +162,15 @@ static void put_ucounts(struct ucounts *ucounts) - { - unsigned long flags; - -- if (atomic_dec_and_test(&ucounts->count)) { -- spin_lock_irqsave(&ucounts_lock, flags); -+ spin_lock_irqsave(&ucounts_lock, flags); -+ ucounts->count -= 1; -+ if (!ucounts->count) - hlist_del_init(&ucounts->node); -- spin_unlock_irqrestore(&ucounts_lock, flags); -+ else -+ ucounts = NULL; -+ spin_unlock_irqrestore(&ucounts_lock, flags); - -- kfree(ucounts); -- } -+ kfree(ucounts); - } - - static inline bool atomic_inc_below(atomic_t *v, int u) -diff --git a/virt/kvm/arm/vgic/vgic-mmio.c b/virt/kvm/arm/vgic/vgic-mmio.c -index ebe1b9f..85814d1 100644 ---- a/virt/kvm/arm/vgic/vgic-mmio.c -+++ b/virt/kvm/arm/vgic/vgic-mmio.c -@@ -187,21 +187,37 @@ unsigned long vgic_mmio_read_active(struct kvm_vcpu *vcpu, - static void vgic_mmio_change_active(struct kvm_vcpu *vcpu, struct vgic_irq *irq, - bool new_active_state) - { -+ struct kvm_vcpu *requester_vcpu; - spin_lock(&irq->irq_lock); -+ -+ /* -+ * The vcpu parameter here can mean multiple things depending on how -+ * this function is called; when handling a trap from the kernel it -+ * depends on the GIC version, and these functions are also called as -+ * part of save/restore from userspace. -+ * -+ * Therefore, we have to figure out the requester in a reliable way. -+ * -+ * When accessing VGIC state from user space, the requester_vcpu is -+ * NULL, which is fine, because we guarantee that no VCPUs are running -+ * when accessing VGIC state from user space so irq->vcpu->cpu is -+ * always -1. -+ */ -+ requester_vcpu = kvm_arm_get_running_vcpu(); -+ - /* - * If this virtual IRQ was written into a list register, we - * have to make sure the CPU that runs the VCPU thread has -- * synced back LR state to the struct vgic_irq. We can only -- * know this for sure, when either this irq is not assigned to -- * anyone's AP list anymore, or the VCPU thread is not -- * running on any CPUs. -+ * synced back the LR state to the struct vgic_irq. - * -- * In the opposite case, we know the VCPU thread may be on its -- * way back from the guest and still has to sync back this -- * IRQ, so we release and re-acquire the spin_lock to let the -- * other thread sync back the IRQ. -+ * As long as the conditions below are true, we know the VCPU thread -+ * may be on its way back from the guest (we kicked the VCPU thread in -+ * vgic_change_active_prepare) and still has to sync back this IRQ, -+ * so we release and re-acquire the spin_lock to let the other thread -+ * sync back the IRQ. - */ - while (irq->vcpu && /* IRQ may have state in an LR somewhere */ -+ irq->vcpu != requester_vcpu && /* Current thread is not the VCPU thread */ - irq->vcpu->cpu != -1) /* VCPU thread is running */ - cond_resched_lock(&irq->irq_lock); - |