diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/alpha/include/asm/irq.h linux-libre-4.4.175-gnu/arch/alpha/include/asm/irq.h
--- linux-libre-4.4.174-gnu/arch/alpha/include/asm/irq.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/alpha/include/asm/irq.h	2019-02-20 04:13:24.000000000 -0500
@@ -55,15 +55,15 @@
 
 #elif defined(CONFIG_ALPHA_DP264) || \
       defined(CONFIG_ALPHA_LYNX)  || \
-      defined(CONFIG_ALPHA_SHARK) || \
-      defined(CONFIG_ALPHA_EIGER)
+      defined(CONFIG_ALPHA_SHARK)
 # define NR_IRQS	64
 
 #elif defined(CONFIG_ALPHA_TITAN)
 #define NR_IRQS		80
 
 #elif defined(CONFIG_ALPHA_RAWHIDE) || \
-	defined(CONFIG_ALPHA_TAKARA)
+      defined(CONFIG_ALPHA_TAKARA) || \
+      defined(CONFIG_ALPHA_EIGER)
 # define NR_IRQS	128
 
 #elif defined(CONFIG_ALPHA_WILDFIRE)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/alpha/mm/fault.c linux-libre-4.4.175-gnu/arch/alpha/mm/fault.c
--- linux-libre-4.4.174-gnu/arch/alpha/mm/fault.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/alpha/mm/fault.c	2019-02-20 04:13:24.000000000 -0500
@@ -77,7 +77,7 @@ __load_new_mm_context(struct mm_struct *
 /* Macro for exception fixup code to access integer registers.  */
 #define dpf_reg(r)							\
 	(((unsigned long *)regs)[(r) <= 8 ? (r) : (r) <= 15 ? (r)-16 :	\
-				 (r) <= 18 ? (r)+8 : (r)-10])
+				 (r) <= 18 ? (r)+10 : (r)-10])
 
 asmlinkage void
 do_page_fault(unsigned long address, unsigned long mmcsr,
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/boot/dts/da850-evm.dts linux-libre-4.4.175-gnu/arch/arm/boot/dts/da850-evm.dts
--- linux-libre-4.4.174-gnu/arch/arm/boot/dts/da850-evm.dts	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/boot/dts/da850-evm.dts	2019-02-20 04:13:24.000000000 -0500
@@ -147,7 +147,7 @@
 
 	sound {
 		compatible = "simple-audio-card";
-		simple-audio-card,name = "DA850/OMAP-L138 EVM";
+		simple-audio-card,name = "DA850-OMAPL138 EVM";
 		simple-audio-card,widgets =
 			"Line", "Line In",
 			"Line", "Line Out";
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/boot/dts/kirkwood-dnskw.dtsi linux-libre-4.4.175-gnu/arch/arm/boot/dts/kirkwood-dnskw.dtsi
--- linux-libre-4.4.174-gnu/arch/arm/boot/dts/kirkwood-dnskw.dtsi	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/boot/dts/kirkwood-dnskw.dtsi	2019-02-20 04:13:24.000000000 -0500
@@ -35,8 +35,8 @@
 		compatible = "gpio-fan";
 		pinctrl-0 = <&pmx_fan_high_speed &pmx_fan_low_speed>;
 		pinctrl-names = "default";
-		gpios = <&gpio1 14 GPIO_ACTIVE_LOW
-			 &gpio1 13 GPIO_ACTIVE_LOW>;
+		gpios = <&gpio1 14 GPIO_ACTIVE_HIGH
+			 &gpio1 13 GPIO_ACTIVE_HIGH>;
 		gpio-fan,speed-map = <0    0
 				      3000 1
 				      6000 2>;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/boot/dts/mmp2.dtsi linux-libre-4.4.175-gnu/arch/arm/boot/dts/mmp2.dtsi
--- linux-libre-4.4.174-gnu/arch/arm/boot/dts/mmp2.dtsi	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/boot/dts/mmp2.dtsi	2019-02-20 04:13:24.000000000 -0500
@@ -220,12 +220,15 @@
 				status = "disabled";
 			};
 
-			twsi2: i2c@d4025000 {
+			twsi2: i2c@d4031000 {
 				compatible = "mrvl,mmp-twsi";
-				reg = <0xd4025000 0x1000>;
-				interrupts = <58>;
+				reg = <0xd4031000 0x1000>;
+				interrupt-parent = <&intcmux17>;
+				interrupts = <0>;
 				clocks = <&soc_clocks MMP2_CLK_TWSI1>;
 				resets = <&soc_clocks MMP2_CLK_TWSI1>;
+				#address-cells = <1>;
+				#size-cells = <0>;
 				status = "disabled";
 			};
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/boot/dts/omap4-sdp.dts linux-libre-4.4.175-gnu/arch/arm/boot/dts/omap4-sdp.dts
--- linux-libre-4.4.174-gnu/arch/arm/boot/dts/omap4-sdp.dts	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/boot/dts/omap4-sdp.dts	2019-02-20 04:13:24.000000000 -0500
@@ -33,6 +33,7 @@
 		gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>;  /* gpio line 48 */
 		enable-active-high;
 		regulator-boot-on;
+		startup-delay-us = <25000>;
 	};
 
 	vbat: fixedregulator-vbat {
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/kernel/smp.c linux-libre-4.4.175-gnu/arch/arm/kernel/smp.c
--- linux-libre-4.4.174-gnu/arch/arm/kernel/smp.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/kernel/smp.c	2019-02-20 04:13:24.000000000 -0500
@@ -687,6 +687,21 @@ void smp_send_stop(void)
 		pr_warn("SMP: failed to stop secondary CPUs\n");
 }
 
+/* In case panic() and panic() called at the same time on CPU1 and CPU2,
+ * and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop()
+ * CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online,
+ * kdump fails. So split out the panic_smp_self_stop() and add
+ * set_cpu_online(smp_processor_id(), false).
+ */
+void panic_smp_self_stop(void)
+{
+	pr_debug("CPU %u will stop doing anything useful since another CPU has paniced\n",
+	         smp_processor_id());
+	set_cpu_online(smp_processor_id(), false);
+	while (1)
+		cpu_relax();
+}
+
 /*
  * not supported here
  */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/kvm/mmio.c linux-libre-4.4.175-gnu/arch/arm/kvm/mmio.c
--- linux-libre-4.4.174-gnu/arch/arm/kvm/mmio.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/kvm/mmio.c	2019-02-20 04:13:24.000000000 -0500
@@ -118,6 +118,12 @@ int kvm_handle_mmio_return(struct kvm_vc
 		vcpu_set_reg(vcpu, vcpu->arch.mmio_decode.rt, data);
 	}
 
+	/*
+	 * The MMIO instruction is emulated and should not be re-executed
+	 * in the guest.
+	 */
+	kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
+
 	return 0;
 }
 
@@ -151,11 +157,6 @@ static int decode_hsr(struct kvm_vcpu *v
 	vcpu->arch.mmio_decode.sign_extend = sign_extend;
 	vcpu->arch.mmio_decode.rt = rt;
 
-	/*
-	 * The MMIO instruction is emulated and should not be re-executed
-	 * in the guest.
-	 */
-	kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/mach-integrator/impd1.c linux-libre-4.4.175-gnu/arch/arm/mach-integrator/impd1.c
--- linux-libre-4.4.174-gnu/arch/arm/mach-integrator/impd1.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/mach-integrator/impd1.c	2019-02-20 04:13:24.000000000 -0500
@@ -394,7 +394,11 @@ static int __init_refok impd1_probe(stru
 					      sizeof(*lookup) + 3 * sizeof(struct gpiod_lookup),
 					      GFP_KERNEL);
 			chipname = devm_kstrdup(&dev->dev, devname, GFP_KERNEL);
-			mmciname = kasprintf(GFP_KERNEL, "lm%x:00700", dev->id);
+			mmciname = devm_kasprintf(&dev->dev, GFP_KERNEL,
+						  "lm%x:00700", dev->id);
+			if (!lookup || !chipname || !mmciname)
+				return -ENOMEM;
+
 			lookup->dev_id = mmciname;
 			/*
 			 * Offsets on GPIO block 1:
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/mach-iop32x/n2100.c linux-libre-4.4.175-gnu/arch/arm/mach-iop32x/n2100.c
--- linux-libre-4.4.174-gnu/arch/arm/mach-iop32x/n2100.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/mach-iop32x/n2100.c	2019-02-20 04:13:24.000000000 -0500
@@ -75,8 +75,7 @@ void __init n2100_map_io(void)
 /*
  * N2100 PCI.
  */
-static int __init
-n2100_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+static int n2100_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 	int irq;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/mach-omap2/omap_hwmod.c linux-libre-4.4.175-gnu/arch/arm/mach-omap2/omap_hwmod.c
--- linux-libre-4.4.174-gnu/arch/arm/mach-omap2/omap_hwmod.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/mach-omap2/omap_hwmod.c	2019-02-20 04:13:24.000000000 -0500
@@ -2526,7 +2526,7 @@ static int __init _init(struct omap_hwmo
  * a stub; implementing this properly requires iclk autoidle usecounting in
  * the clock code.   No return value.
  */
-static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)
+static void _setup_iclk_autoidle(struct omap_hwmod *oh)
 {
 	struct omap_hwmod_ocp_if *os;
 	struct list_head *p;
@@ -2561,7 +2561,7 @@ static void __init _setup_iclk_autoidle(
  * reset.  Returns 0 upon success or a negative error code upon
  * failure.
  */
-static int __init _setup_reset(struct omap_hwmod *oh)
+static int _setup_reset(struct omap_hwmod *oh)
 {
 	int r;
 
@@ -2622,7 +2622,7 @@ static int __init _setup_reset(struct om
  *
  * No return value.
  */
-static void __init _setup_postsetup(struct omap_hwmod *oh)
+static void _setup_postsetup(struct omap_hwmod *oh)
 {
 	u8 postsetup_state;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/mach-pxa/cm-x300.c linux-libre-4.4.175-gnu/arch/arm/mach-pxa/cm-x300.c
--- linux-libre-4.4.174-gnu/arch/arm/mach-pxa/cm-x300.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/mach-pxa/cm-x300.c	2019-02-20 04:13:24.000000000 -0500
@@ -547,7 +547,7 @@ static struct pxa3xx_u2d_platform_data c
 	.exit		= cm_x300_u2d_exit,
 };
 
-static void cm_x300_init_u2d(void)
+static void __init cm_x300_init_u2d(void)
 {
 	pxa3xx_set_u2d_info(&cm_x300_u2d_platform_data);
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/mach-pxa/littleton.c linux-libre-4.4.175-gnu/arch/arm/mach-pxa/littleton.c
--- linux-libre-4.4.174-gnu/arch/arm/mach-pxa/littleton.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/mach-pxa/littleton.c	2019-02-20 04:13:24.000000000 -0500
@@ -183,7 +183,7 @@ static struct pxafb_mach_info littleton_
 	.lcd_conn		= LCD_COLOR_TFT_16BPP,
 };
 
-static void littleton_init_lcd(void)
+static void __init littleton_init_lcd(void)
 {
 	pxa_set_fb_info(NULL, &littleton_lcd_info);
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm/mach-pxa/zeus.c linux-libre-4.4.175-gnu/arch/arm/mach-pxa/zeus.c
--- linux-libre-4.4.174-gnu/arch/arm/mach-pxa/zeus.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm/mach-pxa/zeus.c	2019-02-20 04:13:24.000000000 -0500
@@ -558,7 +558,7 @@ static struct pxaohci_platform_data zeus
 	.flags		= ENABLE_PORT_ALL | POWER_SENSE_LOW,
 };
 
-static void zeus_register_ohci(void)
+static void __init zeus_register_ohci(void)
 {
 	/* Port 2 is shared between host and client interface. */
 	UP2OCR = UP2OCR_HXOE | UP2OCR_HXS | UP2OCR_DMPDE | UP2OCR_DPPDE;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/arm64/kernel/entry-ftrace.S linux-libre-4.4.175-gnu/arch/arm64/kernel/entry-ftrace.S
--- linux-libre-4.4.174-gnu/arch/arm64/kernel/entry-ftrace.S	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/arm64/kernel/entry-ftrace.S	2019-02-20 04:13:24.000000000 -0500
@@ -78,7 +78,6 @@
 	.macro mcount_get_lr reg
 	ldr	\reg, [x29]
 	ldr	\reg, [\reg, #8]
-	mcount_adjust_addr	\reg, \reg
 	.endm
 
 	.macro mcount_get_lr_addr reg
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/mips/include/uapi/asm/inst.h linux-libre-4.4.175-gnu/arch/mips/include/uapi/asm/inst.h
--- linux-libre-4.4.174-gnu/arch/mips/include/uapi/asm/inst.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/mips/include/uapi/asm/inst.h	2019-02-20 04:13:24.000000000 -0500
@@ -290,8 +290,8 @@ enum mm_32a_minor_op {
 	mm_ext_op = 0x02c,
 	mm_pool32axf_op = 0x03c,
 	mm_srl32_op = 0x040,
+	mm_srlv32_op = 0x050,
 	mm_sra_op = 0x080,
-	mm_srlv32_op = 0x090,
 	mm_rotr_op = 0x0c0,
 	mm_lwxs_op = 0x118,
 	mm_addu32_op = 0x150,
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/mips/kernel/mips-cm.c linux-libre-4.4.175-gnu/arch/mips/kernel/mips-cm.c
--- linux-libre-4.4.174-gnu/arch/mips/kernel/mips-cm.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/mips/kernel/mips-cm.c	2019-02-20 04:13:24.000000000 -0500
@@ -424,5 +424,5 @@ void mips_cm_error_report(void)
 	}
 
 	/* reprime cause register */
-	write_gcr_error_cause(0);
+	write_gcr_error_cause(cm_error);
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/mips/pci/pci-octeon.c linux-libre-4.4.175-gnu/arch/mips/pci/pci-octeon.c
--- linux-libre-4.4.174-gnu/arch/mips/pci/pci-octeon.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/mips/pci/pci-octeon.c	2019-02-20 04:13:24.000000000 -0500
@@ -571,6 +571,11 @@ static int __init octeon_pci_setup(void)
 	if (octeon_has_feature(OCTEON_FEATURE_PCIE))
 		return 0;
 
+	if (!octeon_is_pci_host()) {
+		pr_notice("Not in host mode, PCI Controller not initialized\n");
+		return 0;
+	}
+
 	/* Point pcibios_map_irq() to the PCI version of it */
 	octeon_pcibios_map_irq = octeon_pci_pcibios_map_irq;
 
@@ -582,11 +587,6 @@ static int __init octeon_pci_setup(void)
 	else
 		octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_BIG;
 
-	if (!octeon_is_pci_host()) {
-		pr_notice("Not in host mode, PCI Controller not initialized\n");
-		return 0;
-	}
-
 	/* PCI I/O and PCI MEM values */
 	set_io_port_base(OCTEON_PCI_IOSPACE_BASE);
 	ioport_resource.start = 0;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/mips/vdso/Makefile linux-libre-4.4.175-gnu/arch/mips/vdso/Makefile
--- linux-libre-4.4.174-gnu/arch/mips/vdso/Makefile	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/mips/vdso/Makefile	2019-02-20 04:13:24.000000000 -0500
@@ -107,7 +107,7 @@ $(obj)/%-o32.o: $(src)/%.c FORCE
 	$(call cmd,force_checksrc)
 	$(call if_changed_rule,cc_o_c)
 
-$(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := -mabi=32
+$(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) -mabi=32
 $(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE
 	$(call if_changed_dep,cpp_lds_S)
 
@@ -143,7 +143,7 @@ $(obj)/%-n32.o: $(src)/%.c FORCE
 	$(call cmd,force_checksrc)
 	$(call if_changed_rule,cc_o_c)
 
-$(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := -mabi=n32
+$(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) -mabi=n32
 $(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE
 	$(call if_changed_dep,cpp_lds_S)
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/powerpc/include/asm/uaccess.h linux-libre-4.4.175-gnu/arch/powerpc/include/asm/uaccess.h
--- linux-libre-4.4.174-gnu/arch/powerpc/include/asm/uaccess.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/powerpc/include/asm/uaccess.h	2019-02-20 04:13:24.000000000 -0500
@@ -59,7 +59,7 @@
 #endif
 
 #define access_ok(type, addr, size)		\
-	(__chk_user_ptr(addr),			\
+	(__chk_user_ptr(addr), (void)(type),		\
 	 __access_ok((__force unsigned long)(addr), (size), get_fs()))
 
 /*
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/powerpc/platforms/pseries/dlpar.c linux-libre-4.4.175-gnu/arch/powerpc/platforms/pseries/dlpar.c
--- linux-libre-4.4.174-gnu/arch/powerpc/platforms/pseries/dlpar.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/powerpc/platforms/pseries/dlpar.c	2019-02-20 04:13:24.000000000 -0500
@@ -280,6 +280,8 @@ int dlpar_detach_node(struct device_node
 	if (rc)
 		return rc;
 
+	of_node_put(dn);
+
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/um/include/asm/pgtable.h linux-libre-4.4.175-gnu/arch/um/include/asm/pgtable.h
--- linux-libre-4.4.174-gnu/arch/um/include/asm/pgtable.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/um/include/asm/pgtable.h	2019-02-20 04:13:24.000000000 -0500
@@ -197,12 +197,17 @@ static inline pte_t pte_mkold(pte_t pte)
 
 static inline pte_t pte_wrprotect(pte_t pte)
 { 
-	pte_clear_bits(pte, _PAGE_RW);
+	if (likely(pte_get_bits(pte, _PAGE_RW)))
+		pte_clear_bits(pte, _PAGE_RW);
+	else
+		return pte;
 	return(pte_mknewprot(pte)); 
 }
 
 static inline pte_t pte_mkread(pte_t pte)
 { 
+	if (unlikely(pte_get_bits(pte, _PAGE_USER)))
+		return pte;
 	pte_set_bits(pte, _PAGE_USER);
 	return(pte_mknewprot(pte)); 
 }
@@ -221,6 +226,8 @@ static inline pte_t pte_mkyoung(pte_t pt
 
 static inline pte_t pte_mkwrite(pte_t pte)	
 {
+	if (unlikely(pte_get_bits(pte,  _PAGE_RW)))
+		return pte;
 	pte_set_bits(pte, _PAGE_RW);
 	return(pte_mknewprot(pte)); 
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/ia32/ia32_aout.c linux-libre-4.4.175-gnu/arch/x86/ia32/ia32_aout.c
--- linux-libre-4.4.174-gnu/arch/x86/ia32/ia32_aout.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/ia32/ia32_aout.c	2019-02-20 04:13:24.000000000 -0500
@@ -50,7 +50,7 @@ static unsigned long get_dr(int n)
 /*
  * fill in the user structure for a core dump..
  */
-static void dump_thread32(struct pt_regs *regs, struct user32 *dump)
+static void fill_dump(struct pt_regs *regs, struct user32 *dump)
 {
 	u32 fs, gs;
 	memset(dump, 0, sizeof(*dump));
@@ -156,10 +156,12 @@ static int aout_core_dump(struct coredum
 	fs = get_fs();
 	set_fs(KERNEL_DS);
 	has_dumped = 1;
+
+	fill_dump(cprm->regs, &dump);
+
 	strncpy(dump.u_comm, current->comm, sizeof(current->comm));
 	dump.u_ar0 = offsetof(struct user32, regs);
 	dump.signal = cprm->siginfo->si_signo;
-	dump_thread32(cprm->regs, &dump);
 
 	/*
 	 * If the size of the dump file exceeds the rlimit, then see
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/include/asm/fpu/internal.h linux-libre-4.4.175-gnu/arch/x86/include/asm/fpu/internal.h
--- linux-libre-4.4.174-gnu/arch/x86/include/asm/fpu/internal.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/include/asm/fpu/internal.h	2019-02-20 04:13:24.000000000 -0500
@@ -94,6 +94,9 @@ extern void fpstate_sanitize_xstate(stru
 #define user_insn(insn, output, input...)				\
 ({									\
 	int err;							\
+									\
+	might_fault();							\
+									\
 	asm volatile(ASM_STAC "\n"					\
 		     "1:" #insn "\n\t"					\
 		     "2: " ASM_CLAC "\n"				\
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/include/asm/uv/bios.h linux-libre-4.4.175-gnu/arch/x86/include/asm/uv/bios.h
--- linux-libre-4.4.174-gnu/arch/x86/include/asm/uv/bios.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/include/asm/uv/bios.h	2019-02-20 04:13:24.000000000 -0500
@@ -48,7 +48,8 @@ enum {
 	BIOS_STATUS_SUCCESS		=  0,
 	BIOS_STATUS_UNIMPLEMENTED	= -ENOSYS,
 	BIOS_STATUS_EINVAL		= -EINVAL,
-	BIOS_STATUS_UNAVAIL		= -EBUSY
+	BIOS_STATUS_UNAVAIL		= -EBUSY,
+	BIOS_STATUS_ABORT		= -EINTR,
 };
 
 /*
@@ -111,4 +112,9 @@ extern long system_serial_number;
 
 extern struct kobject *sgi_uv_kobj;	/* /sys/firmware/sgi_uv */
 
+/*
+ * EFI runtime lock; cf. firmware/efi/runtime-wrappers.c for details
+ */
+extern struct semaphore __efi_uv_runtime_lock;
+
 #endif /* _ASM_X86_UV_BIOS_H */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/kernel/cpu/mcheck/mce.c linux-libre-4.4.175-gnu/arch/x86/kernel/cpu/mcheck/mce.c
--- linux-libre-4.4.174-gnu/arch/x86/kernel/cpu/mcheck/mce.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/kernel/cpu/mcheck/mce.c	2019-02-20 04:13:24.000000000 -0500
@@ -670,6 +670,7 @@ static int mce_no_way_out(struct mce *m,
 		}
 
 		if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
+			m->bank = i;
 			*msg = tmp;
 			ret = 1;
 		}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c linux-libre-4.4.175-gnu/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c
--- linux-libre-4.4.174-gnu/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c	2019-02-20 04:13:24.000000000 -0500
@@ -1081,6 +1081,8 @@ static struct pci_driver snbep_uncore_pc
 	.id_table	= snbep_uncore_pci_ids,
 };
 
+#define NODE_ID_MASK	0x7
+
 /*
  * build pci bus to socket mapping
  */
@@ -1102,7 +1104,7 @@ static int snbep_pci2phy_map_init(int de
 		err = pci_read_config_dword(ubox_dev, 0x40, &config);
 		if (err)
 			break;
-		nodeid = config;
+		nodeid = config & NODE_ID_MASK;
 		/* get the Node ID mapping */
 		err = pci_read_config_dword(ubox_dev, 0x54, &config);
 		if (err)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/kvm/svm.c linux-libre-4.4.175-gnu/arch/x86/kvm/svm.c
--- linux-libre-4.4.174-gnu/arch/x86/kvm/svm.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/kvm/svm.c	2019-02-20 04:13:24.000000000 -0500
@@ -4156,6 +4156,13 @@ static bool svm_cpu_has_accelerated_tpr(
 
 static bool svm_has_emulated_msr(int index)
 {
+	switch (index) {
+	case MSR_IA32_MCG_EXT_CTL:
+		return false;
+	default:
+		break;
+	}
+
 	return true;
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/kvm/vmx.c linux-libre-4.4.175-gnu/arch/x86/kvm/vmx.c
--- linux-libre-4.4.174-gnu/arch/x86/kvm/vmx.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/kvm/vmx.c	2019-02-20 04:13:24.000000000 -0500
@@ -6965,6 +6965,7 @@ static void free_nested(struct vcpu_vmx
 	if (!vmx->nested.vmxon)
 		return;
 
+	hrtimer_cancel(&vmx->nested.preemption_timer);
 	vmx->nested.vmxon = false;
 	free_vpid(vmx->nested.vpid02);
 	nested_release_vmcs12(vmx);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/kvm/x86.c linux-libre-4.4.175-gnu/arch/x86/kvm/x86.c
--- linux-libre-4.4.174-gnu/arch/x86/kvm/x86.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/kvm/x86.c	2019-02-20 04:13:24.000000000 -0500
@@ -4247,6 +4247,13 @@ int kvm_read_guest_virt(struct kvm_vcpu
 {
 	u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0;
 
+	/*
+	 * FIXME: this should call handle_emulation_failure if X86EMUL_IO_NEEDED
+	 * is returned, but our callers are not ready for that and they blindly
+	 * call kvm_inject_page_fault.  Ensure that they at least do not leak
+	 * uninitialized kernel stack memory into cr2 and error code.
+	 */
+	memset(exception, 0, sizeof(*exception));
 	return kvm_read_guest_virt_helper(addr, val, bytes, vcpu, access,
 					  exception);
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/pci/broadcom_bus.c linux-libre-4.4.175-gnu/arch/x86/pci/broadcom_bus.c
--- linux-libre-4.4.174-gnu/arch/x86/pci/broadcom_bus.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/pci/broadcom_bus.c	2019-02-20 04:13:24.000000000 -0500
@@ -50,8 +50,8 @@ static void __init cnb20le_res(u8 bus, u
 	word1 = read_pci_config_16(bus, slot, func, 0xc0);
 	word2 = read_pci_config_16(bus, slot, func, 0xc2);
 	if (word1 != word2) {
-		res.start = (word1 << 16) | 0x0000;
-		res.end   = (word2 << 16) | 0xffff;
+		res.start = ((resource_size_t) word1 << 16) | 0x0000;
+		res.end   = ((resource_size_t) word2 << 16) | 0xffff;
 		res.flags = IORESOURCE_MEM;
 		update_res(info, res.start, res.end, res.flags, 0);
 	}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/arch/x86/platform/uv/bios_uv.c linux-libre-4.4.175-gnu/arch/x86/platform/uv/bios_uv.c
--- linux-libre-4.4.174-gnu/arch/x86/platform/uv/bios_uv.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/arch/x86/platform/uv/bios_uv.c	2019-02-20 04:13:24.000000000 -0500
@@ -28,7 +28,8 @@
 
 static struct uv_systab uv_systab;
 
-s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
+static s64 __uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
+			u64 a4, u64 a5)
 {
 	struct uv_systab *tab = &uv_systab;
 	s64 ret;
@@ -43,6 +44,19 @@ s64 uv_bios_call(enum uv_bios_cmd which,
 			a1, a2, a3, a4, a5);
 	return ret;
 }
+
+s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
+{
+	s64 ret;
+
+	if (down_interruptible(&__efi_uv_runtime_lock))
+		return BIOS_STATUS_ABORT;
+
+	ret = __uv_bios_call(which, a1, a2, a3, a4, a5);
+	up(&__efi_uv_runtime_lock);
+
+	return ret;
+}
 EXPORT_SYMBOL_GPL(uv_bios_call);
 
 s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
@@ -51,10 +65,15 @@ s64 uv_bios_call_irqsave(enum uv_bios_cm
 	unsigned long bios_flags;
 	s64 ret;
 
+	if (down_interruptible(&__efi_uv_runtime_lock))
+		return BIOS_STATUS_ABORT;
+
 	local_irq_save(bios_flags);
-	ret = uv_bios_call(which, a1, a2, a3, a4, a5);
+	ret = __uv_bios_call(which, a1, a2, a3, a4, a5);
 	local_irq_restore(bios_flags);
 
+	up(&__efi_uv_runtime_lock);
+
 	return ret;
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/Documentation/networking/ip-sysctl.txt linux-libre-4.4.175-gnu/Documentation/networking/ip-sysctl.txt
--- linux-libre-4.4.174-gnu/Documentation/networking/ip-sysctl.txt	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/Documentation/networking/ip-sysctl.txt	2019-02-20 04:13:24.000000000 -0500
@@ -116,7 +116,7 @@ ipfrag_high_thresh - LONG INTEGER
 	Maximum memory used to reassemble IP fragments.
 
 ipfrag_low_thresh - LONG INTEGER
-	(Obsolete since linux-4.17)
+	(Obsolete since linux-4.4.174, backported from linux-4.17)
 	Maximum memory used to reassemble IP fragments before the kernel
 	begins to remove incomplete fragment queues to free up resources.
 	The kernel still accepts new fragments for defragmentation.
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/ata/sata_rcar.c linux-libre-4.4.175-gnu/drivers/ata/sata_rcar.c
--- linux-libre-4.4.174-gnu/drivers/ata/sata_rcar.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/ata/sata_rcar.c	2019-02-20 04:13:24.000000000 -0500
@@ -875,7 +875,9 @@ static int sata_rcar_probe(struct platfo
 	int ret = 0;
 
 	irq = platform_get_irq(pdev, 0);
-	if (irq <= 0)
+	if (irq < 0)
+		return irq;
+	if (!irq)
 		return -EINVAL;
 
 	priv = devm_kzalloc(&pdev->dev, sizeof(struct sata_rcar_priv),
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/block/drbd/drbd_nl.c linux-libre-4.4.175-gnu/drivers/block/drbd/drbd_nl.c
--- linux-libre-4.4.174-gnu/drivers/block/drbd/drbd_nl.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/block/drbd/drbd_nl.c	2019-02-20 04:13:24.000000000 -0500
@@ -632,14 +632,15 @@ drbd_set_role(struct drbd_device *const
 		if (rv == SS_TWO_PRIMARIES) {
 			/* Maybe the peer is detected as dead very soon...
 			   retry at most once more in this case. */
-			int timeo;
-			rcu_read_lock();
-			nc = rcu_dereference(connection->net_conf);
-			timeo = nc ? (nc->ping_timeo + 1) * HZ / 10 : 1;
-			rcu_read_unlock();
-			schedule_timeout_interruptible(timeo);
-			if (try < max_tries)
+			if (try < max_tries) {
+				int timeo;
 				try = max_tries - 1;
+				rcu_read_lock();
+				nc = rcu_dereference(connection->net_conf);
+				timeo = nc ? (nc->ping_timeo + 1) * HZ / 10 : 1;
+				rcu_read_unlock();
+				schedule_timeout_interruptible(timeo);
+			}
 			continue;
 		}
 		if (rv < SS_SUCCESS) {
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/block/drbd/drbd_receiver.c linux-libre-4.4.175-gnu/drivers/block/drbd/drbd_receiver.c
--- linux-libre-4.4.174-gnu/drivers/block/drbd/drbd_receiver.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/block/drbd/drbd_receiver.c	2019-02-20 04:13:24.000000000 -0500
@@ -3126,7 +3126,7 @@ static enum drbd_conns drbd_sync_handsha
 	enum drbd_conns rv = C_MASK;
 	enum drbd_disk_state mydisk;
 	struct net_conf *nc;
-	int hg, rule_nr, rr_conflict, tentative;
+	int hg, rule_nr, rr_conflict, tentative, always_asbp;
 
 	mydisk = device->state.disk;
 	if (mydisk == D_NEGOTIATING)
@@ -3168,8 +3168,12 @@ static enum drbd_conns drbd_sync_handsha
 
 	rcu_read_lock();
 	nc = rcu_dereference(peer_device->connection->net_conf);
+	always_asbp = nc->always_asbp;
+	rr_conflict = nc->rr_conflict;
+	tentative = nc->tentative;
+	rcu_read_unlock();
 
-	if (hg == 100 || (hg == -100 && nc->always_asbp)) {
+	if (hg == 100 || (hg == -100 && always_asbp)) {
 		int pcount = (device->state.role == R_PRIMARY)
 			   + (peer_role == R_PRIMARY);
 		int forced = (hg == -100);
@@ -3208,9 +3212,6 @@ static enum drbd_conns drbd_sync_handsha
 			     "Sync from %s node\n",
 			     (hg < 0) ? "peer" : "this");
 	}
-	rr_conflict = nc->rr_conflict;
-	tentative = nc->tentative;
-	rcu_read_unlock();
 
 	if (hg == -100) {
 		/* FIXME this log message is not correct if we end up here
@@ -3889,7 +3890,7 @@ static int receive_uuids(struct drbd_con
 	kfree(device->p_uuid);
 	device->p_uuid = p_uuid;
 
-	if (device->state.conn < C_CONNECTED &&
+	if ((device->state.conn < C_CONNECTED || device->state.pdsk == D_DISKLESS) &&
 	    device->state.disk < D_INCONSISTENT &&
 	    device->state.role == R_PRIMARY &&
 	    (device->ed_uuid & ~((u64)1)) != (p_uuid[UI_CURRENT] & ~((u64)1))) {
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/block/sunvdc.c linux-libre-4.4.175-gnu/drivers/block/sunvdc.c
--- linux-libre-4.4.174-gnu/drivers/block/sunvdc.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/block/sunvdc.c	2019-02-20 04:13:24.000000000 -0500
@@ -40,6 +40,8 @@ MODULE_VERSION(DRV_MODULE_VERSION);
 #define WAITING_FOR_GEN_CMD	0x04
 #define WAITING_FOR_ANY		-1
 
+#define	VDC_MAX_RETRIES	10
+
 static struct workqueue_struct *sunvdc_wq;
 
 struct vdc_req_entry {
@@ -419,6 +421,7 @@ static int __vdc_tx_trigger(struct vdc_p
 		.end_idx		= dr->prod,
 	};
 	int err, delay;
+	int retries = 0;
 
 	hdr.seq = dr->snd_nxt;
 	delay = 1;
@@ -431,6 +434,8 @@ static int __vdc_tx_trigger(struct vdc_p
 		udelay(delay);
 		if ((delay <<= 1) > 128)
 			delay = 128;
+		if (retries++ > VDC_MAX_RETRIES)
+			break;
 	} while (err == -EAGAIN);
 
 	if (err == -ENOTCONN)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/block/swim3.c linux-libre-4.4.175-gnu/drivers/block/swim3.c
--- linux-libre-4.4.174-gnu/drivers/block/swim3.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/block/swim3.c	2019-02-20 04:13:24.000000000 -0500
@@ -1027,7 +1027,11 @@ static void floppy_release(struct gendis
 	struct swim3 __iomem *sw = fs->swim3;
 
 	mutex_lock(&swim3_mutex);
-	if (fs->ref_count > 0 && --fs->ref_count == 0) {
+	if (fs->ref_count > 0)
+		--fs->ref_count;
+	else if (fs->ref_count == -1)
+		fs->ref_count = 0;
+	if (fs->ref_count == 0) {
 		swim3_action(fs, MOTOR_OFF);
 		out_8(&sw->control_bic, 0xff);
 		swim3_select(fs, RELAX);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/cdrom/gdrom.c linux-libre-4.4.175-gnu/drivers/cdrom/gdrom.c
--- linux-libre-4.4.174-gnu/drivers/cdrom/gdrom.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/cdrom/gdrom.c	2019-02-20 04:13:24.000000000 -0500
@@ -882,6 +882,7 @@ static void __exit exit_gdrom(void)
 	platform_device_unregister(pd);
 	platform_driver_unregister(&gdrom_driver);
 	kfree(gd.toc);
+	kfree(gd.cd_info);
 }
 
 module_init(init_gdrom);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/clk/imx/clk-imx6sl.c linux-libre-4.4.175-gnu/drivers/clk/imx/clk-imx6sl.c
--- linux-libre-4.4.174-gnu/drivers/clk/imx/clk-imx6sl.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/clk/imx/clk-imx6sl.c	2019-02-20 04:13:24.000000000 -0500
@@ -17,6 +17,8 @@
 
 #include "clk.h"
 
+#define CCDR				0x4
+#define BM_CCM_CCDR_MMDC_CH0_MASK	(1 << 17)
 #define CCSR			0xc
 #define BM_CCSR_PLL1_SW_CLK_SEL	(1 << 2)
 #define CACRR			0x10
@@ -414,6 +416,10 @@ static void __init imx6sl_clocks_init(st
 	clks[IMX6SL_CLK_USDHC3]       = imx_clk_gate2("usdhc3",       "usdhc3_podf",       base + 0x80, 6);
 	clks[IMX6SL_CLK_USDHC4]       = imx_clk_gate2("usdhc4",       "usdhc4_podf",       base + 0x80, 8);
 
+	/* Ensure the MMDC CH0 handshake is bypassed */
+	writel_relaxed(readl_relaxed(base + CCDR) |
+		BM_CCM_CCDR_MMDC_CH0_MASK, base + CCDR);
+
 	imx_check_clocks(clks, ARRAY_SIZE(clks));
 
 	clk_data.clks = clks;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/cpuidle/cpuidle-big_little.c linux-libre-4.4.175-gnu/drivers/cpuidle/cpuidle-big_little.c
--- linux-libre-4.4.174-gnu/drivers/cpuidle/cpuidle-big_little.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/cpuidle/cpuidle-big_little.c	2019-02-20 04:13:24.000000000 -0500
@@ -167,6 +167,7 @@ static int __init bl_idle_init(void)
 {
 	int ret;
 	struct device_node *root = of_find_node_by_path("/");
+	const struct of_device_id *match_id;
 
 	if (!root)
 		return -ENODEV;
@@ -174,7 +175,11 @@ static int __init bl_idle_init(void)
 	/*
 	 * Initialize the driver just for a compliant set of machines
 	 */
-	if (!of_match_node(compatible_machine_match, root))
+	match_id = of_match_node(compatible_machine_match, root);
+
+	of_node_put(root);
+
+	if (!match_id)
 		return -ENODEV;
 
 	if (!mcpm_is_available())
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/crypto/ux500/cryp/cryp_core.c linux-libre-4.4.175-gnu/drivers/crypto/ux500/cryp/cryp_core.c
--- linux-libre-4.4.174-gnu/drivers/crypto/ux500/cryp/cryp_core.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/crypto/ux500/cryp/cryp_core.c	2019-02-20 04:13:24.000000000 -0500
@@ -555,7 +555,7 @@ static int cryp_set_dma_transfer(struct
 		desc = dmaengine_prep_slave_sg(channel,
 				ctx->device->dma.sg_src,
 				ctx->device->dma.sg_src_len,
-				direction, DMA_CTRL_ACK);
+				DMA_MEM_TO_DEV, DMA_CTRL_ACK);
 		break;
 
 	case DMA_FROM_DEVICE:
@@ -579,7 +579,7 @@ static int cryp_set_dma_transfer(struct
 		desc = dmaengine_prep_slave_sg(channel,
 				ctx->device->dma.sg_dst,
 				ctx->device->dma.sg_dst_len,
-				direction,
+				DMA_DEV_TO_MEM,
 				DMA_CTRL_ACK |
 				DMA_PREP_INTERRUPT);
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/crypto/ux500/hash/hash_core.c linux-libre-4.4.175-gnu/drivers/crypto/ux500/hash/hash_core.c
--- linux-libre-4.4.174-gnu/drivers/crypto/ux500/hash/hash_core.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/crypto/ux500/hash/hash_core.c	2019-02-20 04:13:24.000000000 -0500
@@ -181,7 +181,7 @@ static int hash_set_dma_transfer(struct
 		__func__);
 	desc = dmaengine_prep_slave_sg(channel,
 			ctx->device->dma.sg, ctx->device->dma.sg_len,
-			direction, DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
+			DMA_MEM_TO_DEV, DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
 	if (!desc) {
 		dev_err(ctx->device->dev,
 			"%s: dmaengine_prep_slave_sg() failed!\n", __func__);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/dma/imx-dma.c linux-libre-4.4.175-gnu/drivers/dma/imx-dma.c
--- linux-libre-4.4.174-gnu/drivers/dma/imx-dma.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/dma/imx-dma.c	2019-02-20 04:13:24.000000000 -0500
@@ -619,7 +619,7 @@ static void imxdma_tasklet(unsigned long
 {
 	struct imxdma_channel *imxdmac = (void *)data;
 	struct imxdma_engine *imxdma = imxdmac->imxdma;
-	struct imxdma_desc *desc;
+	struct imxdma_desc *desc, *next_desc;
 	unsigned long flags;
 
 	spin_lock_irqsave(&imxdma->lock, flags);
@@ -649,10 +649,10 @@ static void imxdma_tasklet(unsigned long
 	list_move_tail(imxdmac->ld_active.next, &imxdmac->ld_free);
 
 	if (!list_empty(&imxdmac->ld_queue)) {
-		desc = list_first_entry(&imxdmac->ld_queue, struct imxdma_desc,
-					node);
+		next_desc = list_first_entry(&imxdmac->ld_queue,
+					     struct imxdma_desc, node);
 		list_move_tail(imxdmac->ld_queue.next, &imxdmac->ld_active);
-		if (imxdma_xfer_desc(desc) < 0)
+		if (imxdma_xfer_desc(next_desc) < 0)
 			dev_warn(imxdma->dev, "%s: channel: %d couldn't xfer desc\n",
 				 __func__, imxdmac->channel);
 	}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/firmware/efi/runtime-wrappers.c linux-libre-4.4.175-gnu/drivers/firmware/efi/runtime-wrappers.c
--- linux-libre-4.4.174-gnu/drivers/firmware/efi/runtime-wrappers.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/firmware/efi/runtime-wrappers.c	2019-02-20 04:13:24.000000000 -0500
@@ -88,6 +88,13 @@ static DEFINE_SPINLOCK(efi_runtime_lock)
  */
 
 /*
+ * Expose the EFI runtime lock to the UV platform
+ */
+#ifdef CONFIG_X86_UV
+extern struct semaphore __efi_uv_runtime_lock __alias(efi_runtime_lock);
+#endif
+
+/*
  * As per commit ef68c8f87ed1 ("x86: Serialize EFI time accesses on rtc_lock"),
  * the EFI specification requires that callers of the time related runtime
  * functions serialize with other CMOS accesses in the kernel, as the EFI time
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/gpu/drm/drm_bufs.c linux-libre-4.4.175-gnu/drivers/gpu/drm/drm_bufs.c
--- linux-libre-4.4.174-gnu/drivers/gpu/drm/drm_bufs.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/gpu/drm/drm_bufs.c	2019-02-20 04:13:24.000000000 -0500
@@ -36,6 +36,8 @@
 #include <drm/drmP.h>
 #include "drm_legacy.h"
 
+#include <linux/nospec.h>
+
 static struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
 						  struct drm_local_map *map)
 {
@@ -1332,6 +1334,7 @@ int drm_legacy_freebufs(struct drm_devic
 				  idx, dma->buf_count - 1);
 			return -EINVAL;
 		}
+		idx = array_index_nospec(idx, dma->buf_count);
 		buf = dma->buflist[idx];
 		if (buf->file_priv != file_priv) {
 			DRM_ERROR("Process %d freeing buffer not owned\n",
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/gpu/drm/drm_modes.c linux-libre-4.4.175-gnu/drivers/gpu/drm/drm_modes.c
--- linux-libre-4.4.174-gnu/drivers/gpu/drm/drm_modes.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/gpu/drm/drm_modes.c	2019-02-20 04:13:24.000000000 -0500
@@ -722,7 +722,7 @@ int drm_mode_hsync(const struct drm_disp
 	if (mode->hsync)
 		return mode->hsync;
 
-	if (mode->htotal < 0)
+	if (mode->htotal <= 0)
 		return 0;
 
 	calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c linux-libre-4.4.175-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
--- linux-libre-4.4.174-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c	2019-02-20 04:13:24.000000000 -0500
@@ -594,13 +594,16 @@ out_fixup:
 static int vmw_dma_masks(struct vmw_private *dev_priv)
 {
 	struct drm_device *dev = dev_priv->dev;
+	int ret = 0;
 
-	if (intel_iommu_enabled &&
+	ret = dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(64));
+	if (dev_priv->map_mode != vmw_dma_phys &&
 	    (sizeof(unsigned long) == 4 || vmw_restrict_dma_mask)) {
 		DRM_INFO("Restricting DMA addresses to 44 bits.\n");
-		return dma_set_mask(dev->dev, DMA_BIT_MASK(44));
+		return dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(44));
 	}
-	return 0;
+
+	return ret;
 }
 #else
 static int vmw_dma_masks(struct vmw_private *dev_priv)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c linux-libre-4.4.175-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
--- linux-libre-4.4.174-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c	2019-02-20 04:13:24.000000000 -0500
@@ -3663,7 +3663,7 @@ int vmw_execbuf_fence_commands(struct dr
 		*p_fence = NULL;
 	}
 
-	return 0;
+	return ret;
 }
 
 /**
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/hid/hid-debug.c linux-libre-4.4.175-gnu/drivers/hid/hid-debug.c
--- linux-libre-4.4.174-gnu/drivers/hid/hid-debug.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/hid/hid-debug.c	2019-02-20 04:13:24.000000000 -0500
@@ -30,6 +30,7 @@
 
 #include <linux/debugfs.h>
 #include <linux/seq_file.h>
+#include <linux/kfifo.h>
 #include <linux/sched.h>
 #include <linux/export.h>
 #include <linux/slab.h>
@@ -455,7 +456,7 @@ static char *resolv_usage_page(unsigned
 	char *buf = NULL;
 
 	if (!f) {
-		buf = kzalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_ATOMIC);
+		buf = kzalloc(HID_DEBUG_BUFSIZE, GFP_ATOMIC);
 		if (!buf)
 			return ERR_PTR(-ENOMEM);
 	}
@@ -659,17 +660,12 @@ EXPORT_SYMBOL_GPL(hid_dump_device);
 /* enqueue string to 'events' ring buffer */
 void hid_debug_event(struct hid_device *hdev, char *buf)
 {
-	int i;
 	struct hid_debug_list *list;
 	unsigned long flags;
 
 	spin_lock_irqsave(&hdev->debug_list_lock, flags);
-	list_for_each_entry(list, &hdev->debug_list, node) {
-		for (i = 0; i < strlen(buf); i++)
-			list->hid_debug_buf[(list->tail + i) % HID_DEBUG_BUFSIZE] =
-				buf[i];
-		list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
-        }
+	list_for_each_entry(list, &hdev->debug_list, node)
+		kfifo_in(&list->hid_debug_fifo, buf, strlen(buf));
 	spin_unlock_irqrestore(&hdev->debug_list_lock, flags);
 
 	wake_up_interruptible(&hdev->debug_wait);
@@ -720,8 +716,7 @@ void hid_dump_input(struct hid_device *h
 	hid_debug_event(hdev, buf);
 
 	kfree(buf);
-        wake_up_interruptible(&hdev->debug_wait);
-
+	wake_up_interruptible(&hdev->debug_wait);
 }
 EXPORT_SYMBOL_GPL(hid_dump_input);
 
@@ -1086,8 +1081,8 @@ static int hid_debug_events_open(struct
 		goto out;
 	}
 
-	if (!(list->hid_debug_buf = kzalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_KERNEL))) {
-		err = -ENOMEM;
+	err = kfifo_alloc(&list->hid_debug_fifo, HID_DEBUG_FIFOSIZE, GFP_KERNEL);
+	if (err) {
 		kfree(list);
 		goto out;
 	}
@@ -1107,77 +1102,57 @@ static ssize_t hid_debug_events_read(str
 		size_t count, loff_t *ppos)
 {
 	struct hid_debug_list *list = file->private_data;
-	int ret = 0, len;
+	int ret = 0, copied;
 	DECLARE_WAITQUEUE(wait, current);
 
 	mutex_lock(&list->read_mutex);
-	while (ret == 0) {
-		if (list->head == list->tail) {
-			add_wait_queue(&list->hdev->debug_wait, &wait);
-			set_current_state(TASK_INTERRUPTIBLE);
-
-			while (list->head == list->tail) {
-				if (file->f_flags & O_NONBLOCK) {
-					ret = -EAGAIN;
-					break;
-				}
-				if (signal_pending(current)) {
-					ret = -ERESTARTSYS;
-					break;
-				}
-
-				if (!list->hdev || !list->hdev->debug) {
-					ret = -EIO;
-					set_current_state(TASK_RUNNING);
-					goto out;
-				}
+	if (kfifo_is_empty(&list->hid_debug_fifo)) {
+		add_wait_queue(&list->hdev->debug_wait, &wait);
+		set_current_state(TASK_INTERRUPTIBLE);
 
-				/* allow O_NONBLOCK from other threads */
-				mutex_unlock(&list->read_mutex);
-				schedule();
-				mutex_lock(&list->read_mutex);
-				set_current_state(TASK_INTERRUPTIBLE);
+		while (kfifo_is_empty(&list->hid_debug_fifo)) {
+			if (file->f_flags & O_NONBLOCK) {
+				ret = -EAGAIN;
+				break;
 			}
 
-			set_current_state(TASK_RUNNING);
-			remove_wait_queue(&list->hdev->debug_wait, &wait);
-		}
-
-		if (ret)
-			goto out;
-
-		/* pass the ringbuffer contents to userspace */
-copy_rest:
-		if (list->tail == list->head)
-			goto out;
-		if (list->tail > list->head) {
-			len = list->tail - list->head;
-			if (len > count)
-				len = count;
-
-			if (copy_to_user(buffer + ret, &list->hid_debug_buf[list->head], len)) {
-				ret = -EFAULT;
-				goto out;
+			if (signal_pending(current)) {
+				ret = -ERESTARTSYS;
+				break;
 			}
-			ret += len;
-			list->head += len;
-		} else {
-			len = HID_DEBUG_BUFSIZE - list->head;
-			if (len > count)
-				len = count;
 
-			if (copy_to_user(buffer, &list->hid_debug_buf[list->head], len)) {
-				ret = -EFAULT;
+			/* if list->hdev is NULL we cannot remove_wait_queue().
+			 * if list->hdev->debug is 0 then hid_debug_unregister()
+			 * was already called and list->hdev is being destroyed.
+			 * if we add remove_wait_queue() here we can hit a race.
+			 */
+			if (!list->hdev || !list->hdev->debug) {
+				ret = -EIO;
+				set_current_state(TASK_RUNNING);
 				goto out;
 			}
-			list->head = 0;
-			ret += len;
-			count -= len;
-			if (count > 0)
-				goto copy_rest;
+
+			/* allow O_NONBLOCK from other threads */
+			mutex_unlock(&list->read_mutex);
+			schedule();
+			mutex_lock(&list->read_mutex);
+			set_current_state(TASK_INTERRUPTIBLE);
 		}
 
+		__set_current_state(TASK_RUNNING);
+		remove_wait_queue(&list->hdev->debug_wait, &wait);
+
+		if (ret)
+			goto out;
 	}
+
+	/* pass the fifo content to userspace, locking is not needed with only
+	 * one concurrent reader and one concurrent writer
+	 */
+	ret = kfifo_to_user(&list->hid_debug_fifo, buffer, count, &copied);
+	if (ret)
+		goto out;
+	ret = copied;
 out:
 	mutex_unlock(&list->read_mutex);
 	return ret;
@@ -1188,7 +1163,7 @@ static unsigned int hid_debug_events_pol
 	struct hid_debug_list *list = file->private_data;
 
 	poll_wait(file, &list->hdev->debug_wait, wait);
-	if (list->head != list->tail)
+	if (!kfifo_is_empty(&list->hid_debug_fifo))
 		return POLLIN | POLLRDNORM;
 	if (!list->hdev->debug)
 		return POLLERR | POLLHUP;
@@ -1203,7 +1178,7 @@ static int hid_debug_events_release(stru
 	spin_lock_irqsave(&list->hdev->debug_list_lock, flags);
 	list_del(&list->node);
 	spin_unlock_irqrestore(&list->hdev->debug_list_lock, flags);
-	kfree(list->hid_debug_buf);
+	kfifo_free(&list->hid_debug_fifo);
 	kfree(list);
 
 	return 0;
@@ -1254,4 +1229,3 @@ void hid_debug_exit(void)
 {
 	debugfs_remove_recursive(hid_debug_root);
 }
-
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/hid/hid-lenovo.c linux-libre-4.4.175-gnu/drivers/hid/hid-lenovo.c
--- linux-libre-4.4.174-gnu/drivers/hid/hid-lenovo.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/hid/hid-lenovo.c	2019-02-20 04:13:24.000000000 -0500
@@ -703,7 +703,9 @@ static int lenovo_probe_tpkbd(struct hid
 	data_pointer->led_mute.brightness_get = lenovo_led_brightness_get_tpkbd;
 	data_pointer->led_mute.brightness_set = lenovo_led_brightness_set_tpkbd;
 	data_pointer->led_mute.dev = dev;
-	led_classdev_register(dev, &data_pointer->led_mute);
+	ret = led_classdev_register(dev, &data_pointer->led_mute);
+	if (ret < 0)
+		goto err;
 
 	data_pointer->led_micmute.name = name_micmute;
 	data_pointer->led_micmute.brightness_get =
@@ -711,7 +713,11 @@ static int lenovo_probe_tpkbd(struct hid
 	data_pointer->led_micmute.brightness_set =
 		lenovo_led_brightness_set_tpkbd;
 	data_pointer->led_micmute.dev = dev;
-	led_classdev_register(dev, &data_pointer->led_micmute);
+	ret = led_classdev_register(dev, &data_pointer->led_micmute);
+	if (ret < 0) {
+		led_classdev_unregister(&data_pointer->led_mute);
+		goto err;
+	}
 
 	lenovo_features_set_tpkbd(hdev);
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/hwmon/lm80.c linux-libre-4.4.175-gnu/drivers/hwmon/lm80.c
--- linux-libre-4.4.174-gnu/drivers/hwmon/lm80.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/hwmon/lm80.c	2019-02-20 04:13:24.000000000 -0500
@@ -360,9 +360,11 @@ static ssize_t set_fan_div(struct device
 	struct i2c_client *client = data->client;
 	unsigned long min, val;
 	u8 reg;
-	int err = kstrtoul(buf, 10, &val);
-	if (err < 0)
-		return err;
+	int rv;
+
+	rv = kstrtoul(buf, 10, &val);
+	if (rv < 0)
+		return rv;
 
 	/* Save fan_min */
 	mutex_lock(&data->update_lock);
@@ -390,8 +392,11 @@ static ssize_t set_fan_div(struct device
 		return -EINVAL;
 	}
 
-	reg = (lm80_read_value(client, LM80_REG_FANDIV) &
-	       ~(3 << (2 * (nr + 1)))) | (data->fan_div[nr] << (2 * (nr + 1)));
+	rv = lm80_read_value(client, LM80_REG_FANDIV);
+	if (rv < 0)
+		return rv;
+	reg = (rv & ~(3 << (2 * (nr + 1))))
+	    | (data->fan_div[nr] << (2 * (nr + 1)));
 	lm80_write_value(client, LM80_REG_FANDIV, reg);
 
 	/* Restore fan_min */
@@ -623,6 +628,7 @@ static int lm80_probe(struct i2c_client
 	struct device *dev = &client->dev;
 	struct device *hwmon_dev;
 	struct lm80_data *data;
+	int rv;
 
 	data = devm_kzalloc(dev, sizeof(struct lm80_data), GFP_KERNEL);
 	if (!data)
@@ -635,8 +641,14 @@ static int lm80_probe(struct i2c_client
 	lm80_init_client(client);
 
 	/* A few vars need to be filled upon startup */
-	data->fan[f_min][0] = lm80_read_value(client, LM80_REG_FAN_MIN(1));
-	data->fan[f_min][1] = lm80_read_value(client, LM80_REG_FAN_MIN(2));
+	rv = lm80_read_value(client, LM80_REG_FAN_MIN(1));
+	if (rv < 0)
+		return rv;
+	data->fan[f_min][0] = rv;
+	rv = lm80_read_value(client, LM80_REG_FAN_MIN(2));
+	if (rv < 0)
+		return rv;
+	data->fan[f_min][1] = rv;
 
 	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
 							   data, lm80_groups);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/i2c/busses/i2c-axxia.c linux-libre-4.4.175-gnu/drivers/i2c/busses/i2c-axxia.c
--- linux-libre-4.4.174-gnu/drivers/i2c/busses/i2c-axxia.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/i2c/busses/i2c-axxia.c	2019-02-20 04:13:24.000000000 -0500
@@ -296,22 +296,7 @@ static irqreturn_t axxia_i2c_isr(int irq
 			i2c_int_disable(idev, MST_STATUS_TFL);
 	}
 
-	if (status & MST_STATUS_SCC) {
-		/* Stop completed */
-		i2c_int_disable(idev, ~MST_STATUS_TSS);
-		complete(&idev->msg_complete);
-	} else if (status & MST_STATUS_SNS) {
-		/* Transfer done */
-		i2c_int_disable(idev, ~MST_STATUS_TSS);
-		if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len)
-			axxia_i2c_empty_rx_fifo(idev);
-		complete(&idev->msg_complete);
-	} else if (status & MST_STATUS_TSS) {
-		/* Transfer timeout */
-		idev->msg_err = -ETIMEDOUT;
-		i2c_int_disable(idev, ~MST_STATUS_TSS);
-		complete(&idev->msg_complete);
-	} else if (unlikely(status & MST_STATUS_ERR)) {
+	if (unlikely(status & MST_STATUS_ERR)) {
 		/* Transfer error */
 		i2c_int_disable(idev, ~0);
 		if (status & MST_STATUS_AL)
@@ -328,6 +313,21 @@ static irqreturn_t axxia_i2c_isr(int irq
 			readl(idev->base + MST_TX_BYTES_XFRD),
 			readl(idev->base + MST_TX_XFER));
 		complete(&idev->msg_complete);
+	} else if (status & MST_STATUS_SCC) {
+		/* Stop completed */
+		i2c_int_disable(idev, ~MST_STATUS_TSS);
+		complete(&idev->msg_complete);
+	} else if (status & MST_STATUS_SNS) {
+		/* Transfer done */
+		i2c_int_disable(idev, ~MST_STATUS_TSS);
+		if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len)
+			axxia_i2c_empty_rx_fifo(idev);
+		complete(&idev->msg_complete);
+	} else if (status & MST_STATUS_TSS) {
+		/* Transfer timeout */
+		idev->msg_err = -ETIMEDOUT;
+		i2c_int_disable(idev, ~MST_STATUS_TSS);
+		complete(&idev->msg_complete);
 	}
 
 out:
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/input/misc/bma150.c linux-libre-4.4.175-gnu/drivers/input/misc/bma150.c
--- linux-libre-4.4.174-gnu/drivers/input/misc/bma150.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/input/misc/bma150.c	2019-02-20 04:13:24.000000000 -0500
@@ -482,13 +482,14 @@ static int bma150_register_input_device(
 	idev->close = bma150_irq_close;
 	input_set_drvdata(idev, bma150);
 
+	bma150->input = idev;
+
 	error = input_register_device(idev);
 	if (error) {
 		input_free_device(idev);
 		return error;
 	}
 
-	bma150->input = idev;
 	return 0;
 }
 
@@ -511,15 +512,15 @@ static int bma150_register_polled_device
 
 	bma150_init_input_device(bma150, ipoll_dev->input);
 
+	bma150->input_polled = ipoll_dev;
+	bma150->input = ipoll_dev->input;
+
 	error = input_register_polled_device(ipoll_dev);
 	if (error) {
 		input_free_polled_device(ipoll_dev);
 		return error;
 	}
 
-	bma150->input_polled = ipoll_dev;
-	bma150->input = ipoll_dev->input;
-
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/input/mouse/elan_i2c_core.c linux-libre-4.4.175-gnu/drivers/input/mouse/elan_i2c_core.c
--- linux-libre-4.4.174-gnu/drivers/input/mouse/elan_i2c_core.c	2019-02-09 11:28:04.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/input/mouse/elan_i2c_core.c	2019-02-20 18:17:34.000000000 -0500
@@ -1240,7 +1240,6 @@ MODULE_DEVICE_TABLE(i2c, elan_id);
 static const struct acpi_device_id elan_acpi_id[] = {
 	{ "ELAN0000", 0 },
 	{ "ELAN0100", 0 },
-	{ "ELAN0501", 0 },
 	{ "ELAN0600", 0 },
 	{ "ELAN0602", 0 },
 	{ "ELAN0605", 0 },
@@ -1251,6 +1250,7 @@ static const struct acpi_device_id elan_
 	{ "ELAN060C", 0 },
 	{ "ELAN0611", 0 },
 	{ "ELAN0612", 0 },
+	{ "ELAN0617", 0 },
 	{ "ELAN0618", 0 },
 	{ "ELAN061C", 0 },
 	{ "ELAN061D", 0 },
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/input/mouse/elantech.c linux-libre-4.4.175-gnu/drivers/input/mouse/elantech.c
--- linux-libre-4.4.174-gnu/drivers/input/mouse/elantech.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/input/mouse/elantech.c	2019-02-20 04:13:24.000000000 -0500
@@ -1121,6 +1121,8 @@ static int elantech_get_resolution_v4(st
  * Asus UX31               0x361f00        20, 15, 0e      clickpad
  * Asus UX32VD             0x361f02        00, 15, 0e      clickpad
  * Avatar AVIU-145A2       0x361f00        ?               clickpad
+ * Fujitsu CELSIUS H760    0x570f02        40, 14, 0c      3 hw buttons (**)
+ * Fujitsu CELSIUS H780    0x5d0f02        41, 16, 0d      3 hw buttons (**)
  * Fujitsu LIFEBOOK E544   0x470f00        d0, 12, 09      2 hw buttons
  * Fujitsu LIFEBOOK E546   0x470f00        50, 12, 09      2 hw buttons
  * Fujitsu LIFEBOOK E547   0x470f00        50, 12, 09      2 hw buttons
@@ -1173,6 +1175,13 @@ static const struct dmi_system_id elante
 			DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H760"),
 		},
 	},
+	{
+		/* Fujitsu H780 also has a middle button */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "CELSIUS H780"),
+		},
+	},
 #endif
 	{ }
 };
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/iommu/arm-smmu-v3.c linux-libre-4.4.175-gnu/drivers/iommu/arm-smmu-v3.c
--- linux-libre-4.4.174-gnu/drivers/iommu/arm-smmu-v3.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/iommu/arm-smmu-v3.c	2019-02-20 04:13:24.000000000 -0500
@@ -683,7 +683,13 @@ static void queue_inc_cons(struct arm_sm
 	u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1;
 
 	q->cons = Q_OVF(q, q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons);
-	writel(q->cons, q->cons_reg);
+
+	/*
+	 * Ensure that all CPU accesses (reads and writes) to the queue
+	 * are complete before we update the cons pointer.
+	 */
+	mb();
+	writel_relaxed(q->cons, q->cons_reg);
 }
 
 static int queue_sync_prod(struct arm_smmu_queue *q)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/isdn/hisax/hfc_pci.c linux-libre-4.4.175-gnu/drivers/isdn/hisax/hfc_pci.c
--- linux-libre-4.4.174-gnu/drivers/isdn/hisax/hfc_pci.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/isdn/hisax/hfc_pci.c	2019-02-20 04:13:24.000000000 -0500
@@ -1169,11 +1169,13 @@ HFCPCI_l1hw(struct PStack *st, int pr, v
 		if (cs->debug & L1_DEB_LAPD)
 			debugl1(cs, "-> PH_REQUEST_PULL");
 #endif
+		spin_lock_irqsave(&cs->lock, flags);
 		if (!cs->tx_skb) {
 			test_and_clear_bit(FLG_L1_PULL_REQ, &st->l1.Flags);
 			st->l1.l1l2(st, PH_PULL | CONFIRM, NULL);
 		} else
 			test_and_set_bit(FLG_L1_PULL_REQ, &st->l1.Flags);
+		spin_unlock_irqrestore(&cs->lock, flags);
 		break;
 	case (HW_RESET | REQUEST):
 		spin_lock_irqsave(&cs->lock, flags);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/md/dm-thin.c linux-libre-4.4.175-gnu/drivers/md/dm-thin.c
--- linux-libre-4.4.174-gnu/drivers/md/dm-thin.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/md/dm-thin.c	2019-02-20 04:13:24.000000000 -0500
@@ -256,6 +256,7 @@ struct pool {
 
 	spinlock_t lock;
 	struct bio_list deferred_flush_bios;
+	struct bio_list deferred_flush_completions;
 	struct list_head prepared_mappings;
 	struct list_head prepared_discards;
 	struct list_head active_thins;
@@ -920,6 +921,39 @@ static void process_prepared_mapping_fai
 	mempool_free(m, m->tc->pool->mapping_pool);
 }
 
+static void complete_overwrite_bio(struct thin_c *tc, struct bio *bio)
+{
+	struct pool *pool = tc->pool;
+	unsigned long flags;
+
+	/*
+	 * If the bio has the REQ_FUA flag set we must commit the metadata
+	 * before signaling its completion.
+	 */
+	if (!bio_triggers_commit(tc, bio)) {
+		bio_endio(bio);
+		return;
+	}
+
+	/*
+	 * Complete bio with an error if earlier I/O caused changes to the
+	 * metadata that can't be committed, e.g, due to I/O errors on the
+	 * metadata device.
+	 */
+	if (dm_thin_aborted_changes(tc->td)) {
+		bio_io_error(bio);
+		return;
+	}
+
+	/*
+	 * Batch together any bios that trigger commits and then issue a
+	 * single commit for them in process_deferred_bios().
+	 */
+	spin_lock_irqsave(&pool->lock, flags);
+	bio_list_add(&pool->deferred_flush_completions, bio);
+	spin_unlock_irqrestore(&pool->lock, flags);
+}
+
 static void process_prepared_mapping(struct dm_thin_new_mapping *m)
 {
 	struct thin_c *tc = m->tc;
@@ -952,7 +986,7 @@ static void process_prepared_mapping(str
 	 */
 	if (bio) {
 		inc_remap_and_issue_cell(tc, m->cell, m->data_block);
-		bio_endio(bio);
+		complete_overwrite_bio(tc, bio);
 	} else {
 		inc_all_io_entry(tc->pool, m->cell->holder);
 		remap_and_issue(tc, m->cell->holder, m->data_block);
@@ -2228,7 +2262,7 @@ static void process_deferred_bios(struct
 {
 	unsigned long flags;
 	struct bio *bio;
-	struct bio_list bios;
+	struct bio_list bios, bio_completions;
 	struct thin_c *tc;
 
 	tc = get_first_thin(pool);
@@ -2239,26 +2273,36 @@ static void process_deferred_bios(struct
 	}
 
 	/*
-	 * If there are any deferred flush bios, we must commit
-	 * the metadata before issuing them.
+	 * If there are any deferred flush bios, we must commit the metadata
+	 * before issuing them or signaling their completion.
 	 */
 	bio_list_init(&bios);
+	bio_list_init(&bio_completions);
+
 	spin_lock_irqsave(&pool->lock, flags);
 	bio_list_merge(&bios, &pool->deferred_flush_bios);
 	bio_list_init(&pool->deferred_flush_bios);
+
+	bio_list_merge(&bio_completions, &pool->deferred_flush_completions);
+	bio_list_init(&pool->deferred_flush_completions);
 	spin_unlock_irqrestore(&pool->lock, flags);
 
-	if (bio_list_empty(&bios) &&
+	if (bio_list_empty(&bios) && bio_list_empty(&bio_completions) &&
 	    !(dm_pool_changed_this_transaction(pool->pmd) && need_commit_due_to_time(pool)))
 		return;
 
 	if (commit(pool)) {
+		bio_list_merge(&bios, &bio_completions);
+
 		while ((bio = bio_list_pop(&bios)))
 			bio_io_error(bio);
 		return;
 	}
 	pool->last_commit_jiffies = jiffies;
 
+	while ((bio = bio_list_pop(&bio_completions)))
+		bio_endio(bio);
+
 	while ((bio = bio_list_pop(&bios)))
 		generic_make_request(bio);
 }
@@ -2885,6 +2929,7 @@ static struct pool *pool_create(struct m
 	INIT_DELAYED_WORK(&pool->no_space_timeout, do_no_space_timeout);
 	spin_lock_init(&pool->lock);
 	bio_list_init(&pool->deferred_flush_bios);
+	bio_list_init(&pool->deferred_flush_completions);
 	INIT_LIST_HEAD(&pool->prepared_mappings);
 	INIT_LIST_HEAD(&pool->prepared_discards);
 	INIT_LIST_HEAD(&pool->active_thins);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/media/platform/davinci/vpbe.c linux-libre-4.4.175-gnu/drivers/media/platform/davinci/vpbe.c
--- linux-libre-4.4.174-gnu/drivers/media/platform/davinci/vpbe.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/media/platform/davinci/vpbe.c	2019-02-20 04:13:24.000000000 -0500
@@ -753,7 +753,7 @@ static int vpbe_initialize(struct device
 	if (ret) {
 		v4l2_err(&vpbe_dev->v4l2_dev, "Failed to set default output %s",
 			 def_output);
-		return ret;
+		goto fail_kfree_amp;
 	}
 
 	printk(KERN_NOTICE "Setting default mode to %s\n", def_mode);
@@ -761,12 +761,15 @@ static int vpbe_initialize(struct device
 	if (ret) {
 		v4l2_err(&vpbe_dev->v4l2_dev, "Failed to set default mode %s",
 			 def_mode);
-		return ret;
+		goto fail_kfree_amp;
 	}
 	vpbe_dev->initialized = 1;
 	/* TBD handling of bootargs for default output and mode */
 	return 0;
 
+fail_kfree_amp:
+	mutex_lock(&vpbe_dev->lock);
+	kfree(vpbe_dev->amp);
 fail_kfree_encoders:
 	kfree(vpbe_dev->encoders);
 fail_dev_unregister:
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/memstick/core/memstick.c linux-libre-4.4.175-gnu/drivers/memstick/core/memstick.c
--- linux-libre-4.4.174-gnu/drivers/memstick/core/memstick.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/memstick/core/memstick.c	2019-02-20 04:13:24.000000000 -0500
@@ -18,6 +18,7 @@
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/module.h>
+#include <linux/pm_runtime.h>
 
 #define DRIVER_NAME "memstick"
 
@@ -436,6 +437,7 @@ static void memstick_check(struct work_s
 	struct memstick_dev *card;
 
 	dev_dbg(&host->dev, "memstick_check started\n");
+	pm_runtime_get_noresume(host->dev.parent);
 	mutex_lock(&host->lock);
 	if (!host->card) {
 		if (memstick_power_on(host))
@@ -479,6 +481,7 @@ out_power_off:
 		host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF);
 
 	mutex_unlock(&host->lock);
+	pm_runtime_put(host->dev.parent);
 	dev_dbg(&host->dev, "memstick_check finished\n");
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/misc/vexpress-syscfg.c linux-libre-4.4.175-gnu/drivers/misc/vexpress-syscfg.c
--- linux-libre-4.4.174-gnu/drivers/misc/vexpress-syscfg.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/misc/vexpress-syscfg.c	2019-02-20 04:13:24.000000000 -0500
@@ -61,7 +61,7 @@ static int vexpress_syscfg_exec(struct v
 	int tries;
 	long timeout;
 
-	if (WARN_ON(index > func->num_templates))
+	if (WARN_ON(index >= func->num_templates))
 		return -EINVAL;
 
 	command = readl(syscfg->base + SYS_CFGCTRL);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/mtd/nand/gpmi-nand/gpmi-lib.c linux-libre-4.4.175-gnu/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
--- linux-libre-4.4.174-gnu/drivers/mtd/nand/gpmi-nand/gpmi-lib.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/mtd/nand/gpmi-nand/gpmi-lib.c	2019-02-20 04:13:24.000000000 -0500
@@ -168,9 +168,10 @@ int gpmi_init(struct gpmi_nand_data *thi
 
 	/*
 	 * Reset BCH here, too. We got failures otherwise :(
-	 * See later BCH reset for explanation of MX23 handling
+	 * See later BCH reset for explanation of MX23 and MX28 handling
 	 */
-	ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MX23(this));
+	ret = gpmi_reset_block(r->bch_regs,
+			       GPMI_IS_MX23(this) || GPMI_IS_MX28(this));
 	if (ret)
 		goto err_out;
 
@@ -274,13 +275,11 @@ int bch_set_geometry(struct gpmi_nand_da
 
 	/*
 	* Due to erratum #2847 of the MX23, the BCH cannot be soft reset on this
-	* chip, otherwise it will lock up. So we skip resetting BCH on the MX23.
-	* On the other hand, the MX28 needs the reset, because one case has been
-	* seen where the BCH produced ECC errors constantly after 10000
-	* consecutive reboots. The latter case has not been seen on the MX23
-	* yet, still we don't know if it could happen there as well.
+	* chip, otherwise it will lock up. So we skip resetting BCH on the MX23
+	* and MX28.
 	*/
-	ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MX23(this));
+	ret = gpmi_reset_block(r->bch_regs,
+			       GPMI_IS_MX23(this) || GPMI_IS_MX28(this));
 	if (ret)
 		goto err_out;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/ethernet/broadcom/bcmsysport.c linux-libre-4.4.175-gnu/drivers/net/ethernet/broadcom/bcmsysport.c
--- linux-libre-4.4.174-gnu/drivers/net/ethernet/broadcom/bcmsysport.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/ethernet/broadcom/bcmsysport.c	2019-02-20 04:13:24.000000000 -0500
@@ -400,7 +400,6 @@ static void bcm_sysport_get_wol(struct n
 				struct ethtool_wolinfo *wol)
 {
 	struct bcm_sysport_priv *priv = netdev_priv(dev);
-	u32 reg;
 
 	wol->supported = WAKE_MAGIC | WAKE_MAGICSECURE;
 	wol->wolopts = priv->wolopts;
@@ -408,11 +407,7 @@ static void bcm_sysport_get_wol(struct n
 	if (!(priv->wolopts & WAKE_MAGICSECURE))
 		return;
 
-	/* Return the programmed SecureOn password */
-	reg = umac_readl(priv, UMAC_PSW_MS);
-	put_unaligned_be16(reg, &wol->sopass[0]);
-	reg = umac_readl(priv, UMAC_PSW_LS);
-	put_unaligned_be32(reg, &wol->sopass[2]);
+	memcpy(wol->sopass, priv->sopass, sizeof(priv->sopass));
 }
 
 static int bcm_sysport_set_wol(struct net_device *dev,
@@ -428,13 +423,8 @@ static int bcm_sysport_set_wol(struct ne
 	if (wol->wolopts & ~supported)
 		return -EINVAL;
 
-	/* Program the SecureOn password */
-	if (wol->wolopts & WAKE_MAGICSECURE) {
-		umac_writel(priv, get_unaligned_be16(&wol->sopass[0]),
-			    UMAC_PSW_MS);
-		umac_writel(priv, get_unaligned_be32(&wol->sopass[2]),
-			    UMAC_PSW_LS);
-	}
+	if (wol->wolopts & WAKE_MAGICSECURE)
+		memcpy(priv->sopass, wol->sopass, sizeof(priv->sopass));
 
 	/* Flag the device and relevant IRQ as wakeup capable */
 	if (wol->wolopts) {
@@ -1889,12 +1879,17 @@ static int bcm_sysport_suspend_to_wol(st
 	unsigned int timeout = 1000;
 	u32 reg;
 
-	/* Password has already been programmed */
 	reg = umac_readl(priv, UMAC_MPD_CTRL);
 	reg |= MPD_EN;
 	reg &= ~PSW_EN;
-	if (priv->wolopts & WAKE_MAGICSECURE)
+	if (priv->wolopts & WAKE_MAGICSECURE) {
+		/* Program the SecureOn password */
+		umac_writel(priv, get_unaligned_be16(&priv->sopass[0]),
+			    UMAC_PSW_MS);
+		umac_writel(priv, get_unaligned_be32(&priv->sopass[2]),
+			    UMAC_PSW_LS);
 		reg |= PSW_EN;
+	}
 	umac_writel(priv, reg, UMAC_MPD_CTRL);
 
 	/* Make sure RBUF entered WoL mode as result */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/ethernet/broadcom/bcmsysport.h linux-libre-4.4.175-gnu/drivers/net/ethernet/broadcom/bcmsysport.h
--- linux-libre-4.4.174-gnu/drivers/net/ethernet/broadcom/bcmsysport.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/ethernet/broadcom/bcmsysport.h	2019-02-20 04:13:24.000000000 -0500
@@ -11,6 +11,7 @@
 #ifndef __BCM_SYSPORT_H
 #define __BCM_SYSPORT_H
 
+#include <linux/ethtool.h>
 #include <linux/if_vlan.h>
 
 /* Receive/transmit descriptor format */
@@ -682,6 +683,7 @@ struct bcm_sysport_priv {
 	unsigned int		crc_fwd:1;
 	u16			rev;
 	u32			wolopts;
+	u8			sopass[SOPASS_MAX];
 	unsigned int		wol_irq_disabled:1;
 
 	/* MIB related fields */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/ethernet/cisco/enic/enic_main.c linux-libre-4.4.175-gnu/drivers/net/ethernet/cisco/enic/enic_main.c
--- linux-libre-4.4.174-gnu/drivers/net/ethernet/cisco/enic/enic_main.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/ethernet/cisco/enic/enic_main.c	2019-02-20 04:13:24.000000000 -0500
@@ -1180,7 +1180,7 @@ static void enic_rq_indicate_buf(struct
 		 * CHECSUM_UNNECESSARY.
 		 */
 		if ((netdev->features & NETIF_F_RXCSUM) && tcp_udp_csum_ok &&
-		    ipv4_csum_ok)
+		    (ipv4_csum_ok || ipv6))
 			skb->ip_summed = CHECKSUM_UNNECESSARY;
 
 		if (vlan_stripped)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/ethernet/intel/igb/igb_main.c linux-libre-4.4.175-gnu/drivers/net/ethernet/intel/igb/igb_main.c
--- linux-libre-4.4.174-gnu/drivers/net/ethernet/intel/igb/igb_main.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/ethernet/intel/igb/igb_main.c	2019-02-20 04:13:24.000000000 -0500
@@ -7339,9 +7339,11 @@ static int __igb_shutdown(struct pci_dev
 	rtnl_unlock();
 
 #ifdef CONFIG_PM
-	retval = pci_save_state(pdev);
-	if (retval)
-		return retval;
+	if (!runtime) {
+		retval = pci_save_state(pdev);
+		if (retval)
+			return retval;
+	}
 #endif
 
 	status = rd32(E1000_STATUS);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/ethernet/marvell/skge.c linux-libre-4.4.175-gnu/drivers/net/ethernet/marvell/skge.c
--- linux-libre-4.4.174-gnu/drivers/net/ethernet/marvell/skge.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/ethernet/marvell/skge.c	2019-02-20 04:13:24.000000000 -0500
@@ -152,8 +152,10 @@ static void skge_get_regs(struct net_dev
 	memset(p, 0, regs->len);
 	memcpy_fromio(p, io, B3_RAM_ADDR);
 
-	memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1,
-		      regs->len - B3_RI_WTO_R1);
+	if (regs->len > B3_RI_WTO_R1) {
+		memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1,
+			      regs->len - B3_RI_WTO_R1);
+	}
 }
 
 /* Wake on Lan only supported on Yukon chips with rev 1 or above */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/ethernet/sun/niu.c linux-libre-4.4.175-gnu/drivers/net/ethernet/sun/niu.c
--- linux-libre-4.4.174-gnu/drivers/net/ethernet/sun/niu.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/ethernet/sun/niu.c	2019-02-20 04:13:24.000000000 -0500
@@ -8121,6 +8121,8 @@ static int niu_pci_vpd_scan_props(struct
 		start += 3;
 
 		prop_len = niu_pci_eeprom_read(np, start + 4);
+		if (prop_len < 0)
+			return prop_len;
 		err = niu_pci_vpd_get_propname(np, start + 5, namebuf, 64);
 		if (err < 0)
 			return err;
@@ -8165,8 +8167,12 @@ static int niu_pci_vpd_scan_props(struct
 			netif_printk(np, probe, KERN_DEBUG, np->dev,
 				     "VPD_SCAN: Reading in property [%s] len[%d]\n",
 				     namebuf, prop_len);
-			for (i = 0; i < prop_len; i++)
-				*prop_buf++ = niu_pci_eeprom_read(np, off + i);
+			for (i = 0; i < prop_len; i++) {
+				err = niu_pci_eeprom_read(np, off + i);
+				if (err >= 0)
+					*prop_buf = err;
+				++prop_buf;
+			}
 		}
 
 		start += len;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/phy/dp83640.c linux-libre-4.4.175-gnu/drivers/net/phy/dp83640.c
--- linux-libre-4.4.174-gnu/drivers/net/phy/dp83640.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/phy/dp83640.c	2019-02-20 04:13:24.000000000 -0500
@@ -890,14 +890,14 @@ static void decode_txts(struct dp83640_p
 			struct phy_txts *phy_txts)
 {
 	struct skb_shared_hwtstamps shhwtstamps;
+	struct dp83640_skb_info *skb_info;
 	struct sk_buff *skb;
-	u64 ns;
 	u8 overflow;
+	u64 ns;
 
 	/* We must already have the skb that triggered this. */
-
+again:
 	skb = skb_dequeue(&dp83640->tx_queue);
-
 	if (!skb) {
 		pr_debug("have timestamp but tx_queue empty\n");
 		return;
@@ -912,6 +912,11 @@ static void decode_txts(struct dp83640_p
 		}
 		return;
 	}
+	skb_info = (struct dp83640_skb_info *)skb->cb;
+	if (time_after(jiffies, skb_info->tmo)) {
+		kfree_skb(skb);
+		goto again;
+	}
 
 	ns = phy2txts(phy_txts);
 	memset(&shhwtstamps, 0, sizeof(shhwtstamps));
@@ -1461,6 +1466,7 @@ static bool dp83640_rxtstamp(struct phy_
 static void dp83640_txtstamp(struct phy_device *phydev,
 			     struct sk_buff *skb, int type)
 {
+	struct dp83640_skb_info *skb_info = (struct dp83640_skb_info *)skb->cb;
 	struct dp83640_private *dp83640 = phydev->priv;
 
 	switch (dp83640->hwts_tx_en) {
@@ -1473,6 +1479,7 @@ static void dp83640_txtstamp(struct phy_
 		/* fall through */
 	case HWTSTAMP_TX_ON:
 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
+		skb_info->tmo = jiffies + SKB_TIMESTAMP_TIMEOUT;
 		skb_queue_tail(&dp83640->tx_queue, skb);
 		break;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/usb/ch9200.c linux-libre-4.4.175-gnu/drivers/net/usb/ch9200.c
--- linux-libre-4.4.174-gnu/drivers/net/usb/ch9200.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/usb/ch9200.c	2019-02-20 04:13:24.000000000 -0500
@@ -255,14 +255,9 @@ static struct sk_buff *ch9200_tx_fixup(s
 	tx_overhead = 0x40;
 
 	len = skb->len;
-	if (skb_headroom(skb) < tx_overhead) {
-		struct sk_buff *skb2;
-
-		skb2 = skb_copy_expand(skb, tx_overhead, 0, flags);
+	if (skb_cow_head(skb, tx_overhead)) {
 		dev_kfree_skb_any(skb);
-		skb = skb2;
-		if (!skb)
-			return NULL;
+		return NULL;
 	}
 
 	__skb_push(skb, tx_overhead);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/usb/kaweth.c linux-libre-4.4.175-gnu/drivers/net/usb/kaweth.c
--- linux-libre-4.4.174-gnu/drivers/net/usb/kaweth.c	2019-02-09 11:22:19.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/usb/kaweth.c	2019-02-20 18:07:21.000000000 -0500
@@ -809,18 +809,12 @@ static netdev_tx_t kaweth_start_xmit(str
 	}
 
 	/* We now decide whether we can put our special header into the sk_buff */
-	if (skb_cloned(skb) || skb_headroom(skb) < 2) {
-		/* no such luck - we make our own */
-		struct sk_buff *copied_skb;
-		copied_skb = skb_copy_expand(skb, 2, 0, GFP_ATOMIC);
-		dev_kfree_skb_irq(skb);
-		skb = copied_skb;
-		if (!copied_skb) {
-			kaweth->stats.tx_errors++;
-			netif_start_queue(net);
-			spin_unlock_irq(&kaweth->device_lock);
-			return NETDEV_TX_OK;
-		}
+	if (skb_cow_head(skb, 2)) {
+		kaweth->stats.tx_errors++;
+		netif_start_queue(net);
+		spin_unlock_irq(&kaweth->device_lock);
+		dev_kfree_skb_any(skb);
+		return NETDEV_TX_OK;
 	}
 
 	private_header = (__le16 *)__skb_push(skb, 2);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/usb/smsc95xx.c linux-libre-4.4.175-gnu/drivers/net/usb/smsc95xx.c
--- linux-libre-4.4.174-gnu/drivers/net/usb/smsc95xx.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/usb/smsc95xx.c	2019-02-20 04:13:24.000000000 -0500
@@ -1838,13 +1838,13 @@ static struct sk_buff *smsc95xx_tx_fixup
 	/* We do not advertise SG, so skbs should be already linearized */
 	BUG_ON(skb_shinfo(skb)->nr_frags);
 
-	if (skb_headroom(skb) < overhead) {
-		struct sk_buff *skb2 = skb_copy_expand(skb,
-			overhead, 0, flags);
+	/* Make writable and expand header space by overhead if required */
+	if (skb_cow_head(skb, overhead)) {
+		/* Must deallocate here as returning NULL to indicate error
+		 * means the skb won't be deallocated in the caller.
+		 */
 		dev_kfree_skb_any(skb);
-		skb = skb2;
-		if (!skb)
-			return NULL;
+		return NULL;
 	}
 
 	if (csum) {
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/net/wireless/cw1200/scan.c linux-libre-4.4.175-gnu/drivers/net/wireless/cw1200/scan.c
--- linux-libre-4.4.174-gnu/drivers/net/wireless/cw1200/scan.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/net/wireless/cw1200/scan.c	2019-02-20 04:13:24.000000000 -0500
@@ -78,6 +78,10 @@ int cw1200_hw_scan(struct ieee80211_hw *
 	if (req->n_ssids > WSM_SCAN_MAX_NUM_OF_SSIDS)
 		return -EINVAL;
 
+	/* will be unlocked in cw1200_scan_work() */
+	down(&priv->scan.lock);
+	mutex_lock(&priv->conf_mutex);
+
 	frame.skb = ieee80211_probereq_get(hw, priv->vif->addr, NULL, 0,
 		req->ie_len);
 	if (!frame.skb)
@@ -86,19 +90,15 @@ int cw1200_hw_scan(struct ieee80211_hw *
 	if (req->ie_len)
 		memcpy(skb_put(frame.skb, req->ie_len), req->ie, req->ie_len);
 
-	/* will be unlocked in cw1200_scan_work() */
-	down(&priv->scan.lock);
-	mutex_lock(&priv->conf_mutex);
-
 	ret = wsm_set_template_frame(priv, &frame);
 	if (!ret) {
 		/* Host want to be the probe responder. */
 		ret = wsm_set_probe_responder(priv, true);
 	}
 	if (ret) {
+		dev_kfree_skb(frame.skb);
 		mutex_unlock(&priv->conf_mutex);
 		up(&priv->scan.lock);
-		dev_kfree_skb(frame.skb);
 		return ret;
 	}
 
@@ -120,10 +120,9 @@ int cw1200_hw_scan(struct ieee80211_hw *
 		++priv->scan.n_ssids;
 	}
 
-	mutex_unlock(&priv->conf_mutex);
-
 	if (frame.skb)
 		dev_kfree_skb(frame.skb);
+	mutex_unlock(&priv->conf_mutex);
 	queue_work(priv->workqueue, &priv->scan.work);
 	return 0;
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/nfc/nxp-nci/firmware.c linux-libre-4.4.175-gnu/drivers/nfc/nxp-nci/firmware.c
--- linux-libre-4.4.174-gnu/drivers/nfc/nxp-nci/firmware.c	2019-02-09 11:22:12.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/nfc/nxp-nci/firmware.c	2019-02-20 18:07:08.000000000 -0500
@@ -24,7 +24,7 @@
 #include <linux/completion.h>
 #include <linux/firmware.h>
 #include <linux/nfc.h>
-#include <linux/unaligned/access_ok.h>
+#include <asm/unaligned.h>
 
 #include "nxp-nci.h"
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/nfc/nxp-nci/i2c.c linux-libre-4.4.175-gnu/drivers/nfc/nxp-nci/i2c.c
--- linux-libre-4.4.174-gnu/drivers/nfc/nxp-nci/i2c.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/nfc/nxp-nci/i2c.c	2019-02-20 04:13:24.000000000 -0500
@@ -36,7 +36,7 @@
 #include <linux/of_gpio.h>
 #include <linux/of_irq.h>
 #include <linux/platform_data/nxp-nci.h>
-#include <linux/unaligned/access_ok.h>
+#include <asm/unaligned.h>
 
 #include <net/nfc/nfc.h>
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/pinctrl/qcom/pinctrl-msm.c linux-libre-4.4.175-gnu/drivers/pinctrl/qcom/pinctrl-msm.c
--- linux-libre-4.4.174-gnu/drivers/pinctrl/qcom/pinctrl-msm.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/pinctrl/qcom/pinctrl-msm.c	2019-02-20 04:13:24.000000000 -0500
@@ -806,11 +806,24 @@ static int msm_gpio_init(struct msm_pinc
 		return ret;
 	}
 
-	ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), 0, 0, chip->ngpio);
-	if (ret) {
-		dev_err(pctrl->dev, "Failed to add pin range\n");
-		gpiochip_remove(&pctrl->chip);
-		return ret;
+	/*
+	 * For DeviceTree-supported systems, the gpio core checks the
+	 * pinctrl's device node for the "gpio-ranges" property.
+	 * If it is present, it takes care of adding the pin ranges
+	 * for the driver. In this case the driver can skip ahead.
+	 *
+	 * In order to remain compatible with older, existing DeviceTree
+	 * files which don't set the "gpio-ranges" property or systems that
+	 * utilize ACPI the driver has to call gpiochip_add_pin_range().
+	 */
+	if (!of_property_read_bool(pctrl->dev->of_node, "gpio-ranges")) {
+		ret = gpiochip_add_pin_range(&pctrl->chip,
+			dev_name(pctrl->dev), 0, 0, chip->ngpio);
+		if (ret) {
+			dev_err(pctrl->dev, "Failed to add pin range\n");
+			gpiochip_remove(&pctrl->chip);
+			return ret;
+		}
 	}
 
 	ret = gpiochip_irqchip_add(chip,
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/ptp/ptp_chardev.c linux-libre-4.4.175-gnu/drivers/ptp/ptp_chardev.c
--- linux-libre-4.4.174-gnu/drivers/ptp/ptp_chardev.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/ptp/ptp_chardev.c	2019-02-20 04:13:24.000000000 -0500
@@ -204,7 +204,9 @@ long ptp_ioctl(struct posix_clock *pc, u
 			pct->sec = ts.tv_sec;
 			pct->nsec = ts.tv_nsec;
 			pct++;
-			ptp->info->gettime64(ptp->info, &ts);
+			err = ptp->info->gettime64(ptp->info, &ts);
+			if (err)
+				goto out;
 			pct->sec = ts.tv_sec;
 			pct->nsec = ts.tv_nsec;
 			pct++;
@@ -257,6 +259,7 @@ long ptp_ioctl(struct posix_clock *pc, u
 		break;
 	}
 
+out:
 	kfree(sysoff);
 	return err;
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/scsi/lpfc/lpfc_els.c linux-libre-4.4.175-gnu/drivers/scsi/lpfc/lpfc_els.c
--- linux-libre-4.4.174-gnu/drivers/scsi/lpfc/lpfc_els.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/scsi/lpfc/lpfc_els.c	2019-02-20 04:13:24.000000000 -0500
@@ -5105,6 +5105,9 @@ error:
 	stat = (struct ls_rjt *)(pcmd + sizeof(uint32_t));
 	stat->un.b.lsRjtRsnCode = LSRJT_UNABLE_TPC;
 
+	if (shdr_add_status == ADD_STATUS_OPERATION_ALREADY_ACTIVE)
+		stat->un.b.lsRjtRsnCodeExp = LSEXP_CMD_IN_PROGRESS;
+
 	elsiocb->iocb_cmpl = lpfc_cmpl_els_rsp;
 	phba->fc_stat.elsXmitLSRJT++;
 	rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, elsiocb, 0);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/soc/tegra/common.c linux-libre-4.4.175-gnu/drivers/soc/tegra/common.c
--- linux-libre-4.4.174-gnu/drivers/soc/tegra/common.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/soc/tegra/common.c	2019-02-20 04:13:24.000000000 -0500
@@ -22,11 +22,15 @@ static const struct of_device_id tegra_m
 
 bool soc_is_tegra(void)
 {
+	const struct of_device_id *match;
 	struct device_node *root;
 
 	root = of_find_node_by_path("/");
 	if (!root)
 		return false;
 
-	return of_match_node(tegra_machine_match, root) != NULL;
+	match = of_match_node(tegra_machine_match, root);
+	of_node_put(root);
+
+	return match != NULL;
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/staging/iio/adc/ad7280a.c linux-libre-4.4.175-gnu/drivers/staging/iio/adc/ad7280a.c
--- linux-libre-4.4.174-gnu/drivers/staging/iio/adc/ad7280a.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/staging/iio/adc/ad7280a.c	2019-02-20 04:13:24.000000000 -0500
@@ -250,7 +250,9 @@ static int ad7280_read(struct ad7280_sta
 	if (ret)
 		return ret;
 
-	__ad7280_read32(st, &tmp);
+	ret = __ad7280_read32(st, &tmp);
+	if (ret)
+		return ret;
 
 	if (ad7280_check_crc(st, tmp))
 		return -EIO;
@@ -288,7 +290,9 @@ static int ad7280_read_channel(struct ad
 
 	ad7280_delay(st);
 
-	__ad7280_read32(st, &tmp);
+	ret = __ad7280_read32(st, &tmp);
+	if (ret)
+		return ret;
 
 	if (ad7280_check_crc(st, tmp))
 		return -EIO;
@@ -321,7 +325,9 @@ static int ad7280_read_all_channels(stru
 	ad7280_delay(st);
 
 	for (i = 0; i < cnt; i++) {
-		__ad7280_read32(st, &tmp);
+		ret = __ad7280_read32(st, &tmp);
+		if (ret)
+			return ret;
 
 		if (ad7280_check_crc(st, tmp))
 			return -EIO;
@@ -364,7 +370,10 @@ static int ad7280_chain_setup(struct ad7
 		return ret;
 
 	for (n = 0; n <= AD7280A_MAX_CHAIN; n++) {
-		__ad7280_read32(st, &val);
+		ret = __ad7280_read32(st, &val);
+		if (ret)
+			return ret;
+
 		if (val == 0)
 			return n - 1;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/staging/iio/adc/ad7780.c linux-libre-4.4.175-gnu/drivers/staging/iio/adc/ad7780.c
--- linux-libre-4.4.174-gnu/drivers/staging/iio/adc/ad7780.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/staging/iio/adc/ad7780.c	2019-02-20 04:13:24.000000000 -0500
@@ -90,12 +90,16 @@ static int ad7780_read_raw(struct iio_de
 			   long m)
 {
 	struct ad7780_state *st = iio_priv(indio_dev);
+	int voltage_uv;
 
 	switch (m) {
 	case IIO_CHAN_INFO_RAW:
 		return ad_sigma_delta_single_conversion(indio_dev, chan, val);
 	case IIO_CHAN_INFO_SCALE:
-		*val = st->int_vref_mv * st->gain;
+		voltage_uv = regulator_get_voltage(st->reg);
+		if (voltage_uv < 0)
+			return voltage_uv;
+		*val = (voltage_uv / 1000) * st->gain;
 		*val2 = chan->scan_type.realbits - 1;
 		return IIO_VAL_FRACTIONAL_LOG2;
 	case IIO_CHAN_INFO_OFFSET:
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/staging/iio/resolver/ad2s90.c linux-libre-4.4.175-gnu/drivers/staging/iio/resolver/ad2s90.c
--- linux-libre-4.4.174-gnu/drivers/staging/iio/resolver/ad2s90.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/staging/iio/resolver/ad2s90.c	2019-02-20 04:13:24.000000000 -0500
@@ -86,7 +86,12 @@ static int ad2s90_probe(struct spi_devic
 	/* need 600ns between CS and the first falling edge of SCLK */
 	spi->max_speed_hz = 830000;
 	spi->mode = SPI_MODE_3;
-	spi_setup(spi);
+	ret = spi_setup(spi);
+
+	if (ret < 0) {
+		dev_err(&spi->dev, "spi_setup failed!\n");
+		return ret;
+	}
 
 	return 0;
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/thermal/thermal_hwmon.h linux-libre-4.4.175-gnu/drivers/thermal/thermal_hwmon.h
--- linux-libre-4.4.174-gnu/drivers/thermal/thermal_hwmon.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/thermal/thermal_hwmon.h	2019-02-20 04:13:24.000000000 -0500
@@ -34,13 +34,13 @@
 int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz);
 void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz);
 #else
-static int
+static inline int
 thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
 {
 	return 0;
 }
 
-static void
+static inline void
 thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz)
 {
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/tty/serial/fsl_lpuart.c linux-libre-4.4.175-gnu/drivers/tty/serial/fsl_lpuart.c
--- linux-libre-4.4.174-gnu/drivers/tty/serial/fsl_lpuart.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/tty/serial/fsl_lpuart.c	2019-02-20 04:13:24.000000000 -0500
@@ -1267,6 +1267,8 @@ lpuart_set_termios(struct uart_port *por
 			else
 				cr1 &= ~UARTCR1_PT;
 		}
+	} else {
+		cr1 &= ~UARTCR1_PE;
 	}
 
 	/* ask the core to calculate the divisor */
@@ -1402,6 +1404,8 @@ lpuart32_set_termios(struct uart_port *p
 			else
 				ctrl &= ~UARTCTRL_PT;
 		}
+	} else {
+		ctrl &= ~UARTCTRL_PE;
 	}
 
 	/* ask the core to calculate the divisor */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/tty/serial/samsung.c linux-libre-4.4.175-gnu/drivers/tty/serial/samsung.c
--- linux-libre-4.4.174-gnu/drivers/tty/serial/samsung.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/tty/serial/samsung.c	2019-02-20 04:13:24.000000000 -0500
@@ -1329,11 +1329,14 @@ static void s3c24xx_serial_set_termios(s
 	wr_regl(port, S3C2410_ULCON, ulcon);
 	wr_regl(port, S3C2410_UBRDIV, quot);
 
+	port->status &= ~UPSTAT_AUTOCTS;
+
 	umcon = rd_regl(port, S3C2410_UMCON);
 	if (termios->c_cflag & CRTSCTS) {
 		umcon |= S3C2410_UMCOM_AFC;
 		/* Disable RTS when RX FIFO contains 63 bytes */
 		umcon &= ~S3C2412_UMCON_AFC_8;
+		port->status = UPSTAT_AUTOCTS;
 	} else {
 		umcon &= ~S3C2410_UMCOM_AFC;
 	}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/usb/core/hub.c linux-libre-4.4.175-gnu/drivers/usb/core/hub.c
--- linux-libre-4.4.174-gnu/drivers/usb/core/hub.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/usb/core/hub.c	2019-02-20 04:13:24.000000000 -0500
@@ -1092,6 +1092,16 @@ static void hub_activate(struct usb_hub
 						   USB_PORT_FEAT_ENABLE);
 		}
 
+		/*
+		 * Add debounce if USB3 link is in polling/link training state.
+		 * Link will automatically transition to Enabled state after
+		 * link training completes.
+		 */
+		if (hub_is_superspeed(hdev) &&
+		    ((portstatus & USB_PORT_STAT_LINK_STATE) ==
+						USB_SS_PORT_LS_POLLING))
+			need_debounce_delay = true;
+
 		/* Clear status-change flags; we'll debounce later */
 		if (portchange & USB_PORT_STAT_C_CONNECTION) {
 			need_debounce_delay = true;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/usb/dwc2/hcd.c linux-libre-4.4.175-gnu/drivers/usb/dwc2/hcd.c
--- linux-libre-4.4.174-gnu/drivers/usb/dwc2/hcd.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/usb/dwc2/hcd.c	2019-02-20 04:13:24.000000000 -0500
@@ -3164,7 +3164,6 @@ error3:
 error2:
 	usb_put_hcd(hcd);
 error1:
-	kfree(hsotg->core_params);
 
 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
 	kfree(hsotg->last_frame_num_array);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/usb/gadget/udc/net2272.c linux-libre-4.4.175-gnu/drivers/usb/gadget/udc/net2272.c
--- linux-libre-4.4.174-gnu/drivers/usb/gadget/udc/net2272.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/usb/gadget/udc/net2272.c	2019-02-20 04:13:24.000000000 -0500
@@ -2100,7 +2100,7 @@ static irqreturn_t net2272_irq(int irq,
 #if defined(PLX_PCI_RDK2)
 	/* see if PCI int for us by checking irqstat */
 	intcsr = readl(dev->rdk2.fpga_base_addr + RDK2_IRQSTAT);
-	if (!intcsr & (1 << NET2272_PCI_IRQ)) {
+	if (!(intcsr & (1 << NET2272_PCI_IRQ))) {
 		spin_unlock(&dev->lock);
 		return IRQ_NONE;
 	}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/usb/phy/phy-am335x.c linux-libre-4.4.175-gnu/drivers/usb/phy/phy-am335x.c
--- linux-libre-4.4.174-gnu/drivers/usb/phy/phy-am335x.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/usb/phy/phy-am335x.c	2019-02-20 04:13:24.000000000 -0500
@@ -56,9 +56,6 @@ static int am335x_phy_probe(struct platf
 	if (ret)
 		return ret;
 
-	ret = usb_add_phy_dev(&am_phy->usb_phy_gen.phy);
-	if (ret)
-		return ret;
 	am_phy->usb_phy_gen.phy.init = am335x_init;
 	am_phy->usb_phy_gen.phy.shutdown = am335x_shutdown;
 
@@ -77,7 +74,7 @@ static int am335x_phy_probe(struct platf
 	device_set_wakeup_enable(dev, false);
 	phy_ctrl_power(am_phy->phy_ctrl, am_phy->id, false);
 
-	return 0;
+	return usb_add_phy_dev(&am_phy->usb_phy_gen.phy);
 }
 
 static int am335x_phy_remove(struct platform_device *pdev)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/video/console/fbcon.c linux-libre-4.4.175-gnu/drivers/video/console/fbcon.c
--- linux-libre-4.4.174-gnu/drivers/video/console/fbcon.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/video/console/fbcon.c	2019-02-20 04:13:24.000000000 -0500
@@ -3032,7 +3032,7 @@ static int fbcon_fb_unbind(int idx)
 	for (i = first_fb_vc; i <= last_fb_vc; i++) {
 		if (con2fb_map[i] != idx &&
 		    con2fb_map[i] != -1) {
-			new_idx = i;
+			new_idx = con2fb_map[i];
 			break;
 		}
 	}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/video/fbdev/clps711x-fb.c linux-libre-4.4.175-gnu/drivers/video/fbdev/clps711x-fb.c
--- linux-libre-4.4.174-gnu/drivers/video/fbdev/clps711x-fb.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/video/fbdev/clps711x-fb.c	2019-02-20 04:13:24.000000000 -0500
@@ -287,14 +287,17 @@ static int clps711x_fb_probe(struct plat
 	}
 
 	ret = of_get_fb_videomode(disp, &cfb->mode, OF_USE_NATIVE_MODE);
-	if (ret)
+	if (ret) {
+		of_node_put(disp);
 		goto out_fb_release;
+	}
 
 	of_property_read_u32(disp, "ac-prescale", &cfb->ac_prescale);
 	cfb->cmap_invert = of_property_read_bool(disp, "cmap-invert");
 
 	ret = of_property_read_u32(disp, "bits-per-pixel",
 				   &info->var.bits_per_pixel);
+	of_node_put(disp);
 	if (ret)
 		goto out_fb_release;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/drivers/video/fbdev/core/fbmem.c linux-libre-4.4.175-gnu/drivers/video/fbdev/core/fbmem.c
--- linux-libre-4.4.174-gnu/drivers/video/fbdev/core/fbmem.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/drivers/video/fbdev/core/fbmem.c	2019-02-20 04:13:24.000000000 -0500
@@ -433,7 +433,9 @@ static void fb_do_show_logo(struct fb_in
 			image->dx += image->width + 8;
 		}
 	} else if (rotate == FB_ROTATE_UD) {
-		for (x = 0; x < num; x++) {
+		u32 dx = image->dx;
+
+		for (x = 0; x < num && image->dx <= dx; x++) {
 			info->fbops->fb_imageblit(info, image);
 			image->dx -= image->width + 8;
 		}
@@ -445,7 +447,9 @@ static void fb_do_show_logo(struct fb_in
 			image->dy += image->height + 8;
 		}
 	} else if (rotate == FB_ROTATE_CCW) {
-		for (x = 0; x < num; x++) {
+		u32 dy = image->dy;
+
+		for (x = 0; x < num && image->dy <= dy; x++) {
 			info->fbops->fb_imageblit(info, image);
 			image->dy -= image->height + 8;
 		}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/cifs/file.c linux-libre-4.4.175-gnu/fs/cifs/file.c
--- linux-libre-4.4.174-gnu/fs/cifs/file.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/cifs/file.c	2019-02-20 04:13:24.000000000 -0500
@@ -1081,6 +1081,10 @@ cifs_push_mandatory_locks(struct cifsFil
 		return -EINVAL;
 	}
 
+	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
+		     PAGE_SIZE);
+	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
+			PAGE_SIZE);
 	max_num = (max_buf - sizeof(struct smb_hdr)) /
 						sizeof(LOCKING_ANDX_RANGE);
 	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
@@ -1410,6 +1414,10 @@ cifs_unlock_range(struct cifsFileInfo *c
 	if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE)))
 		return -EINVAL;
 
+	BUILD_BUG_ON(sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE) >
+		     PAGE_SIZE);
+	max_buf = min_t(unsigned int, max_buf - sizeof(struct smb_hdr),
+			PAGE_SIZE);
 	max_num = (max_buf - sizeof(struct smb_hdr)) /
 						sizeof(LOCKING_ANDX_RANGE);
 	buf = kcalloc(max_num, sizeof(LOCKING_ANDX_RANGE), GFP_KERNEL);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/cifs/Kconfig linux-libre-4.4.175-gnu/fs/cifs/Kconfig
--- linux-libre-4.4.174-gnu/fs/cifs/Kconfig	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/cifs/Kconfig	2019-02-20 04:13:24.000000000 -0500
@@ -111,7 +111,7 @@ config CIFS_XATTR
 
 config CIFS_POSIX
         bool "CIFS POSIX Extensions"
-        depends on CIFS && CIFS_ALLOW_INSECURE_LEGACY && CIFS_XATTR
+        depends on CIFS_XATTR
         help
           Enabling this option will cause the cifs client to attempt to
 	  negotiate a newer dialect with servers, such as Samba 3.0.5
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/cifs/readdir.c linux-libre-4.4.175-gnu/fs/cifs/readdir.c
--- linux-libre-4.4.174-gnu/fs/cifs/readdir.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/cifs/readdir.c	2019-02-20 04:13:24.000000000 -0500
@@ -652,7 +652,14 @@ find_cifs_entry(const unsigned int xid,
 		/* scan and find it */
 		int i;
 		char *cur_ent;
-		char *end_of_smb = cfile->srch_inf.ntwrk_buf_start +
+		char *end_of_smb;
+
+		if (cfile->srch_inf.ntwrk_buf_start == NULL) {
+			cifs_dbg(VFS, "ntwrk_buf_start is NULL during readdir\n");
+			return -EIO;
+		}
+
+		end_of_smb = cfile->srch_inf.ntwrk_buf_start +
 			server->ops->calc_smb_size(
 					cfile->srch_inf.ntwrk_buf_start);
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/cifs/smb2file.c linux-libre-4.4.175-gnu/fs/cifs/smb2file.c
--- linux-libre-4.4.174-gnu/fs/cifs/smb2file.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/cifs/smb2file.c	2019-02-20 04:13:24.000000000 -0500
@@ -129,6 +129,8 @@ smb2_unlock_range(struct cifsFileInfo *c
 	if (max_buf < sizeof(struct smb2_lock_element))
 		return -EINVAL;
 
+	BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
+	max_buf = min_t(unsigned int, max_buf, PAGE_SIZE);
 	max_num = max_buf / sizeof(struct smb2_lock_element);
 	buf = kcalloc(max_num, sizeof(struct smb2_lock_element), GFP_KERNEL);
 	if (!buf)
@@ -265,6 +267,8 @@ smb2_push_mandatory_locks(struct cifsFil
 		return -EINVAL;
 	}
 
+	BUILD_BUG_ON(sizeof(struct smb2_lock_element) > PAGE_SIZE);
+	max_buf = min_t(unsigned int, max_buf, PAGE_SIZE);
 	max_num = max_buf / sizeof(struct smb2_lock_element);
 	buf = kcalloc(max_num, sizeof(struct smb2_lock_element), GFP_KERNEL);
 	if (!buf) {
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/debugfs/inode.c linux-libre-4.4.175-gnu/fs/debugfs/inode.c
--- linux-libre-4.4.174-gnu/fs/debugfs/inode.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/debugfs/inode.c	2019-02-20 04:13:24.000000000 -0500
@@ -671,6 +671,13 @@ struct dentry *debugfs_rename(struct den
 	struct dentry *dentry = NULL, *trap;
 	struct name_snapshot old_name;
 
+	if (IS_ERR(old_dir))
+		return old_dir;
+	if (IS_ERR(new_dir))
+		return new_dir;
+	if (IS_ERR_OR_NULL(old_dentry))
+		return old_dentry;
+
 	trap = lock_rename(new_dir, old_dir);
 	/* Source or destination directories don't exist? */
 	if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir))
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/dlm/ast.c linux-libre-4.4.175-gnu/fs/dlm/ast.c
--- linux-libre-4.4.174-gnu/fs/dlm/ast.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/dlm/ast.c	2019-02-20 04:13:24.000000000 -0500
@@ -290,6 +290,8 @@ void dlm_callback_suspend(struct dlm_ls
 		flush_workqueue(ls->ls_callback_wq);
 }
 
+#define MAX_CB_QUEUE 25
+
 void dlm_callback_resume(struct dlm_ls *ls)
 {
 	struct dlm_lkb *lkb, *safe;
@@ -300,15 +302,23 @@ void dlm_callback_resume(struct dlm_ls *
 	if (!ls->ls_callback_wq)
 		return;
 
+more:
 	mutex_lock(&ls->ls_cb_mutex);
 	list_for_each_entry_safe(lkb, safe, &ls->ls_cb_delay, lkb_cb_list) {
 		list_del_init(&lkb->lkb_cb_list);
 		queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);
 		count++;
+		if (count == MAX_CB_QUEUE)
+			break;
 	}
 	mutex_unlock(&ls->ls_cb_mutex);
 
 	if (count)
 		log_rinfo(ls, "dlm_callback_resume %d", count);
+	if (count == MAX_CB_QUEUE) {
+		count = 0;
+		cond_resched();
+		goto more;
+	}
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/eventpoll.c linux-libre-4.4.175-gnu/fs/eventpoll.c
--- linux-libre-4.4.174-gnu/fs/eventpoll.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/eventpoll.c	2019-02-20 04:13:24.000000000 -0500
@@ -1034,7 +1034,7 @@ static int ep_poll_callback(wait_queue_t
 	 * semantics). All the events that happen during that period of time are
 	 * chained in ep->ovflist and requeued later on.
 	 */
-	if (unlikely(ep->ovflist != EP_UNACTIVE_PTR)) {
+	if (ep->ovflist != EP_UNACTIVE_PTR) {
 		if (epi->next == EP_UNACTIVE_PTR) {
 			epi->next = ep->ovflist;
 			ep->ovflist = epi;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/f2fs/acl.c linux-libre-4.4.175-gnu/fs/f2fs/acl.c
--- linux-libre-4.4.174-gnu/fs/f2fs/acl.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/f2fs/acl.c	2019-02-20 04:13:24.000000000 -0500
@@ -350,12 +350,14 @@ static int f2fs_acl_create(struct inode
 		return PTR_ERR(p);
 
 	clone = f2fs_acl_clone(p, GFP_NOFS);
-	if (!clone)
-		goto no_mem;
+	if (!clone) {
+		ret = -ENOMEM;
+		goto release_acl;
+	}
 
 	ret = f2fs_acl_create_masq(clone, mode);
 	if (ret < 0)
-		goto no_mem_clone;
+		goto release_clone;
 
 	if (ret == 0)
 		posix_acl_release(clone);
@@ -369,11 +371,11 @@ static int f2fs_acl_create(struct inode
 
 	return 0;
 
-no_mem_clone:
+release_clone:
 	posix_acl_release(clone);
-no_mem:
+release_acl:
 	posix_acl_release(p);
-	return -ENOMEM;
+	return ret;
 }
 
 int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/f2fs/file.c linux-libre-4.4.175-gnu/fs/f2fs/file.c
--- linux-libre-4.4.174-gnu/fs/f2fs/file.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/f2fs/file.c	2019-02-20 04:13:24.000000000 -0500
@@ -200,6 +200,9 @@ int f2fs_sync_file(struct file *file, lo
 
 	trace_f2fs_sync_file_enter(inode);
 
+	if (S_ISDIR(inode->i_mode))
+		goto go_write;
+
 	/* if fdatasync is triggered, let's do in-place-update */
 	if (get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
 		set_inode_flag(fi, FI_NEED_IPU);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/fuse/dev.c linux-libre-4.4.175-gnu/fs/fuse/dev.c
--- linux-libre-4.4.174-gnu/fs/fuse/dev.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/fuse/dev.c	2019-02-20 04:13:24.000000000 -0500
@@ -1741,7 +1741,6 @@ static int fuse_retrieve(struct fuse_con
 	req->in.h.nodeid = outarg->nodeid;
 	req->in.numargs = 2;
 	req->in.argpages = 1;
-	req->page_descs[0].offset = offset;
 	req->end = fuse_retrieve_end;
 
 	index = outarg->offset >> PAGE_CACHE_SHIFT;
@@ -1756,6 +1755,7 @@ static int fuse_retrieve(struct fuse_con
 
 		this_num = min_t(unsigned, num, PAGE_CACHE_SIZE - offset);
 		req->pages[req->num_pages] = page;
+		req->page_descs[req->num_pages].offset = offset;
 		req->page_descs[req->num_pages].length = this_num;
 		req->num_pages++;
 
@@ -2074,10 +2074,13 @@ static ssize_t fuse_dev_splice_write(str
 
 	ret = fuse_dev_do_write(fud, &cs, len);
 
+	pipe_lock(pipe);
 	for (idx = 0; idx < nbuf; idx++) {
 		struct pipe_buffer *buf = &bufs[idx];
 		buf->ops->release(pipe, buf);
 	}
+	pipe_unlock(pipe);
+
 out:
 	kfree(bufs);
 	return ret;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/fuse/file.c linux-libre-4.4.175-gnu/fs/fuse/file.c
--- linux-libre-4.4.174-gnu/fs/fuse/file.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/fuse/file.c	2019-02-20 04:13:24.000000000 -0500
@@ -1784,7 +1784,7 @@ static bool fuse_writepage_in_flight(str
 		spin_unlock(&fc->lock);
 
 		dec_wb_stat(&bdi->wb, WB_WRITEBACK);
-		dec_zone_page_state(page, NR_WRITEBACK_TEMP);
+		dec_zone_page_state(new_req->pages[0], NR_WRITEBACK_TEMP);
 		wb_writeout_inc(&bdi->wb);
 		fuse_writepage_free(fc, new_req);
 		fuse_request_free(new_req);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/nfs/super.c linux-libre-4.4.175-gnu/fs/nfs/super.c
--- linux-libre-4.4.174-gnu/fs/nfs/super.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/nfs/super.c	2019-02-20 04:13:24.000000000 -0500
@@ -2376,8 +2376,7 @@ static int nfs_compare_mount_options(con
 		goto Ebusy;
 	if (a->acdirmax != b->acdirmax)
 		goto Ebusy;
-	if (b->auth_info.flavor_len > 0 &&
-	   clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor)
+	if (clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor)
 		goto Ebusy;
 	return 1;
 Ebusy:
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/nfsd/nfsctl.c linux-libre-4.4.175-gnu/fs/nfsd/nfsctl.c
--- linux-libre-4.4.174-gnu/fs/nfsd/nfsctl.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/nfsd/nfsctl.c	2019-02-20 04:13:24.000000000 -0500
@@ -1106,6 +1106,8 @@ static ssize_t write_v4_end_grace(struct
 		case 'Y':
 		case 'y':
 		case '1':
+			if (nn->nfsd_serv)
+				return -EBUSY;
 			nfsd4_end_grace(nn);
 			break;
 		default:
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/ocfs2/buffer_head_io.c linux-libre-4.4.175-gnu/fs/ocfs2/buffer_head_io.c
--- linux-libre-4.4.174-gnu/fs/ocfs2/buffer_head_io.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/ocfs2/buffer_head_io.c	2019-02-20 04:13:24.000000000 -0500
@@ -146,7 +146,6 @@ int ocfs2_read_blocks_sync(struct ocfs2_
 			BUG();
 		}
 
-		clear_buffer_uptodate(bh);
 		get_bh(bh); /* for end_buffer_read_sync() */
 		bh->b_end_io = end_buffer_read_sync;
 		submit_bh(READ, bh);
@@ -300,7 +299,6 @@ int ocfs2_read_blocks(struct ocfs2_cachi
 				continue;
 			}
 
-			clear_buffer_uptodate(bh);
 			get_bh(bh); /* for end_buffer_read_sync() */
 			if (validate)
 				set_buffer_needs_validate(bh);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/fs/udf/inode.c linux-libre-4.4.175-gnu/fs/udf/inode.c
--- linux-libre-4.4.174-gnu/fs/udf/inode.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/fs/udf/inode.c	2019-02-20 04:13:24.000000000 -0500
@@ -1364,6 +1364,12 @@ reread:
 
 	iinfo->i_alloc_type = le16_to_cpu(fe->icbTag.flags) &
 							ICBTAG_FLAG_AD_MASK;
+	if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_SHORT &&
+	    iinfo->i_alloc_type != ICBTAG_FLAG_AD_LONG &&
+	    iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
+		ret = -EIO;
+		goto out;
+	}
 	iinfo->i_unique = 0;
 	iinfo->i_lenEAttr = 0;
 	iinfo->i_lenExtents = 0;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/include/linux/genl_magic_struct.h linux-libre-4.4.175-gnu/include/linux/genl_magic_struct.h
--- linux-libre-4.4.174-gnu/include/linux/genl_magic_struct.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/include/linux/genl_magic_struct.h	2019-02-20 04:13:24.000000000 -0500
@@ -185,6 +185,7 @@ static inline void ct_assert_unique_oper
 {
 	switch (0) {
 #include GENL_MAGIC_INCLUDE_FILE
+	case 0:
 		;
 	}
 }
@@ -203,6 +204,7 @@ static inline void ct_assert_unique_top_
 {
 	switch (0) {
 #include GENL_MAGIC_INCLUDE_FILE
+	case 0:
 		;
 	}
 }
@@ -212,7 +214,8 @@ static inline void ct_assert_unique_top_
 static inline void ct_assert_unique_ ## s_name ## _attributes(void)	\
 {									\
 	switch (0) {							\
-		s_fields						\
+	s_fields							\
+	case 0:								\
 			;						\
 	}								\
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/include/linux/hid-debug.h linux-libre-4.4.175-gnu/include/linux/hid-debug.h
--- linux-libre-4.4.174-gnu/include/linux/hid-debug.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/include/linux/hid-debug.h	2019-02-20 04:13:24.000000000 -0500
@@ -24,7 +24,10 @@
 
 #ifdef CONFIG_DEBUG_FS
 
+#include <linux/kfifo.h>
+
 #define HID_DEBUG_BUFSIZE 512
+#define HID_DEBUG_FIFOSIZE 512
 
 void hid_dump_input(struct hid_device *, struct hid_usage *, __s32);
 void hid_dump_report(struct hid_device *, int , u8 *, int);
@@ -37,11 +40,8 @@ void hid_debug_init(void);
 void hid_debug_exit(void);
 void hid_debug_event(struct hid_device *, char *);
 
-
 struct hid_debug_list {
-	char *hid_debug_buf;
-	int head;
-	int tail;
+	DECLARE_KFIFO_PTR(hid_debug_fifo, char);
 	struct fasync_struct *fasync;
 	struct hid_device *hdev;
 	struct list_head node;
@@ -64,4 +64,3 @@ struct hid_debug_list {
 #endif
 
 #endif
-
diff -druNp --no-dereference linux-libre-4.4.174-gnu/include/linux/string.h linux-libre-4.4.175-gnu/include/linux/string.h
--- linux-libre-4.4.174-gnu/include/linux/string.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/include/linux/string.h	2019-02-20 04:13:24.000000000 -0500
@@ -26,7 +26,7 @@ extern char * strncpy(char *,const char
 size_t strlcpy(char *, const char *, size_t);
 #endif
 #ifndef __HAVE_ARCH_STRSCPY
-ssize_t __must_check strscpy(char *, const char *, size_t);
+ssize_t strscpy(char *, const char *, size_t);
 #endif
 #ifndef __HAVE_ARCH_STRCAT
 extern char * strcat(char *, const char *);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/include/sound/compress_driver.h linux-libre-4.4.175-gnu/include/sound/compress_driver.h
--- linux-libre-4.4.174-gnu/include/sound/compress_driver.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/include/sound/compress_driver.h	2019-02-20 04:13:24.000000000 -0500
@@ -178,7 +178,11 @@ static inline void snd_compr_drain_notif
 	if (snd_BUG_ON(!stream))
 		return;
 
-	stream->runtime->state = SNDRV_PCM_STATE_SETUP;
+	if (stream->direction == SND_COMPRESS_PLAYBACK)
+		stream->runtime->state = SNDRV_PCM_STATE_SETUP;
+	else
+		stream->runtime->state = SNDRV_PCM_STATE_PREPARED;
+
 	wake_up(&stream->runtime->sleep);
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/include/uapi/linux/if_ether.h linux-libre-4.4.175-gnu/include/uapi/linux/if_ether.h
--- linux-libre-4.4.174-gnu/include/uapi/linux/if_ether.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/include/uapi/linux/if_ether.h	2019-02-20 04:13:24.000000000 -0500
@@ -136,11 +136,18 @@
  *	This is an Ethernet frame header.
  */
 
+/* allow libcs like musl to deactivate this, glibc does not implement this. */
+#ifndef __UAPI_DEF_ETHHDR
+#define __UAPI_DEF_ETHHDR		1
+#endif
+
+#if __UAPI_DEF_ETHHDR
 struct ethhdr {
 	unsigned char	h_dest[ETH_ALEN];	/* destination eth addr	*/
 	unsigned char	h_source[ETH_ALEN];	/* source ether addr	*/
 	__be16		h_proto;		/* packet type ID field	*/
 } __attribute__((packed));
+#endif
 
 
 #endif /* _UAPI_LINUX_IF_ETHER_H */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/kernel/events/ring_buffer.c linux-libre-4.4.175-gnu/kernel/events/ring_buffer.c
--- linux-libre-4.4.174-gnu/kernel/events/ring_buffer.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/kernel/events/ring_buffer.c	2019-02-20 04:13:24.000000000 -0500
@@ -637,6 +637,9 @@ struct ring_buffer *rb_alloc(int nr_page
 	size = sizeof(struct ring_buffer);
 	size += nr_pages * sizeof(void *);
 
+	if (order_base_2(size) >= PAGE_SHIFT+MAX_ORDER)
+		goto fail;
+
 	rb = kzalloc(size, GFP_KERNEL);
 	if (!rb)
 		goto fail;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/kernel/hung_task.c linux-libre-4.4.175-gnu/kernel/hung_task.c
--- linux-libre-4.4.174-gnu/kernel/hung_task.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/kernel/hung_task.c	2019-02-20 04:13:24.000000000 -0500
@@ -30,7 +30,7 @@ int __read_mostly sysctl_hung_task_check
  * is disabled during the critical section. It also controls the size of
  * the RCU grace period. So it needs to be upper-bound.
  */
-#define HUNG_TASK_BATCHING 1024
+#define HUNG_TASK_LOCK_BREAK (HZ / 10)
 
 /*
  * Zero means infinite timeout - no checking done:
@@ -158,7 +158,7 @@ static bool rcu_lock_break(struct task_s
 static void check_hung_uninterruptible_tasks(unsigned long timeout)
 {
 	int max_count = sysctl_hung_task_check_count;
-	int batch_count = HUNG_TASK_BATCHING;
+	unsigned long last_break = jiffies;
 	struct task_struct *g, *t;
 
 	/*
@@ -172,10 +172,10 @@ static void check_hung_uninterruptible_t
 	for_each_process_thread(g, t) {
 		if (!max_count--)
 			goto unlock;
-		if (!--batch_count) {
-			batch_count = HUNG_TASK_BATCHING;
+		if (time_after(jiffies, last_break + HUNG_TASK_LOCK_BREAK)) {
 			if (!rcu_lock_break(g, t))
 				goto unlock;
+			last_break = jiffies;
 		}
 		/* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */
 		if (t->state == TASK_UNINTERRUPTIBLE)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/kernel/signal.c linux-libre-4.4.175-gnu/kernel/signal.c
--- linux-libre-4.4.174-gnu/kernel/signal.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/kernel/signal.c	2019-02-20 04:13:24.000000000 -0500
@@ -696,6 +696,48 @@ static inline bool si_fromuser(const str
 		(!is_si_special(info) && SI_FROMUSER(info));
 }
 
+static int dequeue_synchronous_signal(siginfo_t *info)
+{
+	struct task_struct *tsk = current;
+	struct sigpending *pending = &tsk->pending;
+	struct sigqueue *q, *sync = NULL;
+
+	/*
+	 * Might a synchronous signal be in the queue?
+	 */
+	if (!((pending->signal.sig[0] & ~tsk->blocked.sig[0]) & SYNCHRONOUS_MASK))
+		return 0;
+
+	/*
+	 * Return the first synchronous signal in the queue.
+	 */
+	list_for_each_entry(q, &pending->list, list) {
+		/* Synchronous signals have a postive si_code */
+		if ((q->info.si_code > SI_USER) &&
+		    (sigmask(q->info.si_signo) & SYNCHRONOUS_MASK)) {
+			sync = q;
+			goto next;
+		}
+	}
+	return 0;
+next:
+	/*
+	 * Check if there is another siginfo for the same signal.
+	 */
+	list_for_each_entry_continue(q, &pending->list, list) {
+		if (q->info.si_signo == sync->info.si_signo)
+			goto still_pending;
+	}
+
+	sigdelset(&pending->signal, sync->info.si_signo);
+	recalc_sigpending();
+still_pending:
+	list_del_init(&sync->list);
+	copy_siginfo(info, &sync->info);
+	__sigqueue_free(sync);
+	return info->si_signo;
+}
+
 /*
  * called with RCU read lock from check_kill_permission()
  */
@@ -2198,6 +2240,14 @@ relock:
 		goto relock;
 	}
 
+	/* Has this task already been marked for death? */
+	if (signal_group_exit(signal)) {
+		ksig->info.si_signo = signr = SIGKILL;
+		sigdelset(&current->pending.signal, SIGKILL);
+		recalc_sigpending();
+		goto fatal;
+	}
+
 	for (;;) {
 		struct k_sigaction *ka;
 
@@ -2211,7 +2261,15 @@ relock:
 			goto relock;
 		}
 
-		signr = dequeue_signal(current, &current->blocked, &ksig->info);
+		/*
+		 * Signals generated by the execution of an instruction
+		 * need to be delivered before any other pending signals
+		 * so that the instruction pointer in the signal stack
+		 * frame points to the faulting instruction.
+		 */
+		signr = dequeue_synchronous_signal(&ksig->info);
+		if (!signr)
+			signr = dequeue_signal(current, &current->blocked, &ksig->info);
 
 		if (!signr)
 			break; /* will return 0 */
@@ -2293,6 +2351,7 @@ relock:
 			continue;
 		}
 
+	fatal:
 		spin_unlock_irq(&sighand->siglock);
 
 		/*
diff -druNp --no-dereference linux-libre-4.4.174-gnu/kernel/time/timekeeping.c linux-libre-4.4.175-gnu/kernel/time/timekeeping.c
--- linux-libre-4.4.174-gnu/kernel/time/timekeeping.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/kernel/time/timekeeping.c	2019-02-20 04:13:24.000000000 -0500
@@ -39,7 +39,9 @@
 static struct {
 	seqcount_t		seq;
 	struct timekeeper	timekeeper;
-} tk_core ____cacheline_aligned;
+} tk_core ____cacheline_aligned = {
+	.seq = SEQCNT_ZERO(tk_core.seq),
+};
 
 static DEFINE_RAW_SPINLOCK(timekeeper_lock);
 static struct timekeeper shadow_timekeeper;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/kernel/trace/trace_uprobe.c linux-libre-4.4.175-gnu/kernel/trace/trace_uprobe.c
--- linux-libre-4.4.174-gnu/kernel/trace/trace_uprobe.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/kernel/trace/trace_uprobe.c	2019-02-20 04:13:24.000000000 -0500
@@ -150,7 +150,14 @@ static void FETCH_FUNC_NAME(memory, stri
 
 	ret = strncpy_from_user(dst, src, maxlen);
 	if (ret == maxlen)
-		dst[--ret] = '\0';
+		dst[ret - 1] = '\0';
+	else if (ret >= 0)
+		/*
+		 * Include the terminating null byte. In this case it
+		 * was copied by strncpy_from_user but not accounted
+		 * for in ret.
+		 */
+		ret++;
 
 	if (ret < 0) {	/* Failed to fetch string */
 		((u8 *)get_rloc_data(dest))[0] = '\0';
diff -druNp --no-dereference linux-libre-4.4.174-gnu/lib/seq_buf.c linux-libre-4.4.175-gnu/lib/seq_buf.c
--- linux-libre-4.4.174-gnu/lib/seq_buf.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/lib/seq_buf.c	2019-02-20 04:13:24.000000000 -0500
@@ -143,9 +143,13 @@ int seq_buf_puts(struct seq_buf *s, cons
 
 	WARN_ON(s->size == 0);
 
+	/* Add 1 to len for the trailing null byte which must be there */
+	len += 1;
+
 	if (seq_buf_can_fit(s, len)) {
 		memcpy(s->buffer + s->len, str, len);
-		s->len += len;
+		/* Don't count the trailing null byte against the capacity */
+		s->len += len - 1;
 		return 0;
 	}
 	seq_buf_set_overflow(s);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/lib/test-hexdump.c linux-libre-4.4.175-gnu/lib/test-hexdump.c
--- linux-libre-4.4.174-gnu/lib/test-hexdump.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/lib/test-hexdump.c	2019-02-20 04:13:24.000000000 -0500
@@ -81,7 +81,7 @@ static void __init test_hexdump(size_t l
 		const char *q = *result++;
 		size_t amount = strlen(q);
 
-		strncpy(p, q, amount);
+		memcpy(p, q, amount);
 		p += amount + 1;
 	}
 	if (i)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/Makefile linux-libre-4.4.175-gnu/Makefile
--- linux-libre-4.4.174-gnu/Makefile	2019-02-09 11:12:25.000000000 -0500
+++ linux-libre-4.4.175-gnu/Makefile	2019-02-20 17:51:11.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 4
-SUBLEVEL = 174
+SUBLEVEL = 175
 EXTRAVERSION = -gnu
 NAME = Blurry Fish Butt
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/batman-adv/hard-interface.c linux-libre-4.4.175-gnu/net/batman-adv/hard-interface.c
--- linux-libre-4.4.174-gnu/net/batman-adv/hard-interface.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/batman-adv/hard-interface.c	2019-02-20 04:13:24.000000000 -0500
@@ -18,7 +18,6 @@
 #include "hard-interface.h"
 #include "main.h"
 
-#include <linux/bug.h>
 #include <linux/byteorder/generic.h>
 #include <linux/errno.h>
 #include <linux/fs.h>
@@ -104,8 +103,10 @@ static bool batadv_is_on_batman_iface(co
 	/* recurse over the parent device */
 	parent_dev = __dev_get_by_index(&init_net, dev_get_iflink(net_dev));
 	/* if we got a NULL parent_dev there is something broken.. */
-	if (WARN(!parent_dev, "Cannot find parent device"))
+	if (!parent_dev) {
+		pr_err("Cannot find parent device\n");
 		return false;
+	}
 
 	ret = batadv_is_on_batman_iface(parent_dev);
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/batman-adv/soft-interface.c linux-libre-4.4.175-gnu/net/batman-adv/soft-interface.c
--- linux-libre-4.4.174-gnu/net/batman-adv/soft-interface.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/batman-adv/soft-interface.c	2019-02-20 04:13:24.000000000 -0500
@@ -209,6 +209,8 @@ static int batadv_interface_tx(struct sk
 
 	soft_iface->trans_start = jiffies;
 	vid = batadv_get_vid(skb, 0);
+
+	skb_reset_mac_header(skb);
 	ethhdr = eth_hdr(skb);
 
 	switch (ntohs(ethhdr->h_proto)) {
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/bluetooth/hci_event.c linux-libre-4.4.175-gnu/net/bluetooth/hci_event.c
--- linux-libre-4.4.174-gnu/net/bluetooth/hci_event.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/bluetooth/hci_event.c	2019-02-20 04:13:24.000000000 -0500
@@ -5185,6 +5185,12 @@ static bool hci_get_cmd_complete(struct
 		return true;
 	}
 
+	/* Check if request ended in Command Status - no way to retreive
+	 * any extra parameters in this case.
+	 */
+	if (hdr->evt == HCI_EV_CMD_STATUS)
+		return false;
+
 	if (hdr->evt != HCI_EV_CMD_COMPLETE) {
 		BT_DBG("Last event is not cmd complete (0x%2.2x)", hdr->evt);
 		return false;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/ceph/messenger.c linux-libre-4.4.175-gnu/net/ceph/messenger.c
--- linux-libre-4.4.174-gnu/net/ceph/messenger.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/ceph/messenger.c	2019-02-20 04:13:24.000000000 -0500
@@ -3181,9 +3181,10 @@ void ceph_con_keepalive(struct ceph_conn
 	dout("con_keepalive %p\n", con);
 	mutex_lock(&con->mutex);
 	clear_standby(con);
+	con_flag_set(con, CON_FLAG_KEEPALIVE_PENDING);
 	mutex_unlock(&con->mutex);
-	if (con_flag_test_and_set(con, CON_FLAG_KEEPALIVE_PENDING) == 0 &&
-	    con_flag_test_and_set(con, CON_FLAG_WRITE_PENDING) == 0)
+
+	if (con_flag_test_and_set(con, CON_FLAG_WRITE_PENDING) == 0)
 		queue_con(con);
 }
 EXPORT_SYMBOL(ceph_con_keepalive);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/dccp/ccid.h linux-libre-4.4.175-gnu/net/dccp/ccid.h
--- linux-libre-4.4.174-gnu/net/dccp/ccid.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/dccp/ccid.h	2019-02-20 04:13:24.000000000 -0500
@@ -202,7 +202,7 @@ static inline void ccid_hc_tx_packet_rec
 static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk,
 					   u8 pkt, u8 opt, u8 *val, u8 len)
 {
-	if (ccid->ccid_ops->ccid_hc_tx_parse_options == NULL)
+	if (!ccid || !ccid->ccid_ops->ccid_hc_tx_parse_options)
 		return 0;
 	return ccid->ccid_ops->ccid_hc_tx_parse_options(sk, pkt, opt, val, len);
 }
@@ -214,7 +214,7 @@ static inline int ccid_hc_tx_parse_optio
 static inline int ccid_hc_rx_parse_options(struct ccid *ccid, struct sock *sk,
 					   u8 pkt, u8 opt, u8 *val, u8 len)
 {
-	if (ccid->ccid_ops->ccid_hc_rx_parse_options == NULL)
+	if (!ccid || !ccid->ccid_ops->ccid_hc_rx_parse_options)
 		return 0;
 	return ccid->ccid_ops->ccid_hc_rx_parse_options(sk, pkt, opt, val, len);
 }
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/dsa/slave.c linux-libre-4.4.175-gnu/net/dsa/slave.c
--- linux-libre-4.4.174-gnu/net/dsa/slave.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/dsa/slave.c	2019-02-20 04:13:24.000000000 -0500
@@ -157,10 +157,14 @@ static void dsa_slave_change_rx_flags(st
 	struct dsa_slave_priv *p = netdev_priv(dev);
 	struct net_device *master = p->parent->dst->master_netdev;
 
-	if (change & IFF_ALLMULTI)
-		dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1);
-	if (change & IFF_PROMISC)
-		dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1);
+	if (dev->flags & IFF_UP) {
+		if (change & IFF_ALLMULTI)
+			dev_set_allmulti(master,
+					 dev->flags & IFF_ALLMULTI ? 1 : -1);
+		if (change & IFF_PROMISC)
+			dev_set_promiscuity(master,
+					    dev->flags & IFF_PROMISC ? 1 : -1);
+	}
 }
 
 static void dsa_slave_set_rx_mode(struct net_device *dev)
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/ipv6/xfrm6_tunnel.c linux-libre-4.4.175-gnu/net/ipv6/xfrm6_tunnel.c
--- linux-libre-4.4.174-gnu/net/ipv6/xfrm6_tunnel.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/ipv6/xfrm6_tunnel.c	2019-02-20 04:13:24.000000000 -0500
@@ -144,6 +144,9 @@ static u32 __xfrm6_tunnel_alloc_spi(stru
 		index = __xfrm6_tunnel_spi_check(net, spi);
 		if (index >= 0)
 			goto alloc_spi;
+
+		if (spi == XFRM6_TUNNEL_SPI_MAX)
+			break;
 	}
 	for (spi = XFRM6_TUNNEL_SPI_MIN; spi < xfrm6_tn->spi; spi++) {
 		index = __xfrm6_tunnel_spi_check(net, spi);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/mac80211/rx.c linux-libre-4.4.175-gnu/net/mac80211/rx.c
--- linux-libre-4.4.174-gnu/net/mac80211/rx.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/mac80211/rx.c	2019-02-20 04:13:24.000000000 -0500
@@ -149,6 +149,9 @@ ieee80211_rx_radiotap_hdrlen(struct ieee
 	/* allocate extra bitmaps */
 	if (status->chains)
 		len += 4 * hweight8(status->chains);
+	/* vendor presence bitmap */
+	if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)
+		len += 4;
 
 	if (ieee80211_have_rx_timestamp(status)) {
 		len = ALIGN(len, 8);
@@ -185,8 +188,6 @@ ieee80211_rx_radiotap_hdrlen(struct ieee
 	if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
 		struct ieee80211_vendor_radiotap *rtap = (void *)skb->data;
 
-		/* vendor presence bitmap */
-		len += 4;
 		/* alignment for fixed 6-byte vendor data header */
 		len = ALIGN(len, 2);
 		/* vendor data header */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/mac80211/tx.c linux-libre-4.4.175-gnu/net/mac80211/tx.c
--- linux-libre-4.4.174-gnu/net/mac80211/tx.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/mac80211/tx.c	2019-02-20 04:13:24.000000000 -0500
@@ -1599,9 +1599,16 @@ static int ieee80211_skb_resize(struct i
 				int head_need, bool may_encrypt)
 {
 	struct ieee80211_local *local = sdata->local;
+	struct ieee80211_hdr *hdr;
+	bool enc_tailroom;
 	int tail_need = 0;
 
-	if (may_encrypt && sdata->crypto_tx_tailroom_needed_cnt) {
+	hdr = (struct ieee80211_hdr *) skb->data;
+	enc_tailroom = may_encrypt &&
+		       (sdata->crypto_tx_tailroom_needed_cnt ||
+			ieee80211_is_mgmt(hdr->frame_control));
+
+	if (enc_tailroom) {
 		tail_need = IEEE80211_ENCRYPT_TAILROOM;
 		tail_need -= skb_tailroom(skb);
 		tail_need = max_t(int, tail_need, 0);
@@ -1609,8 +1616,7 @@ static int ieee80211_skb_resize(struct i
 
 	if (skb_cloned(skb) &&
 	    (!ieee80211_hw_check(&local->hw, SUPPORTS_CLONED_SKBS) ||
-	     !skb_clone_writable(skb, ETH_HLEN) ||
-	     (may_encrypt && sdata->crypto_tx_tailroom_needed_cnt)))
+	     !skb_clone_writable(skb, ETH_HLEN) || enc_tailroom))
 		I802_DEBUG_INC(local->tx_expand_skb_head_cloned);
 	else if (head_need || tail_need)
 		I802_DEBUG_INC(local->tx_expand_skb_head);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/tipc/subscr.c linux-libre-4.4.175-gnu/net/tipc/subscr.c
--- linux-libre-4.4.174-gnu/net/tipc/subscr.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/tipc/subscr.c	2019-02-20 04:13:24.000000000 -0500
@@ -337,7 +337,7 @@ int tipc_topsrv_start(struct net *net)
 	topsrv->tipc_conn_new		= tipc_subscrb_connect_cb;
 	topsrv->tipc_conn_shutdown	= tipc_subscrb_shutdown_cb;
 
-	strncpy(topsrv->name, name, strlen(name) + 1);
+	strscpy(topsrv->name, name, sizeof(topsrv->name));
 	tn->topsrv = topsrv;
 	atomic_set(&tn->subscription_count, 0);
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/net/xfrm/xfrm_user.c linux-libre-4.4.175-gnu/net/xfrm/xfrm_user.c
--- linux-libre-4.4.174-gnu/net/xfrm/xfrm_user.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/net/xfrm/xfrm_user.c	2019-02-20 04:13:24.000000000 -0500
@@ -1404,10 +1404,15 @@ static int validate_tmpl(int nr, struct
 		if (!ut[i].family)
 			ut[i].family = family;
 
-		if ((ut[i].mode == XFRM_MODE_TRANSPORT) &&
-		    (ut[i].family != prev_family))
-			return -EINVAL;
-
+		switch (ut[i].mode) {
+		case XFRM_MODE_TUNNEL:
+		case XFRM_MODE_BEET:
+			break;
+		default:
+			if (ut[i].family != prev_family)
+				return -EINVAL;
+			break;
+		}
 		if (ut[i].mode >= XFRM_MODE_MAX)
 			return -EINVAL;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/scripts/decode_stacktrace.sh linux-libre-4.4.175-gnu/scripts/decode_stacktrace.sh
--- linux-libre-4.4.174-gnu/scripts/decode_stacktrace.sh	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/scripts/decode_stacktrace.sh	2019-02-20 04:13:24.000000000 -0500
@@ -64,7 +64,7 @@ parse_symbol() {
 	fi
 
 	# Strip out the base of the path
-	code=${code//$basepath/""}
+	code=${code//^$basepath/""}
 
 	# In the case of inlines, move everything to same line
 	code=${code//$'\n'/' '}
diff -druNp --no-dereference linux-libre-4.4.174-gnu/scripts/mod/modpost.c linux-libre-4.4.175-gnu/scripts/mod/modpost.c
--- linux-libre-4.4.174-gnu/scripts/mod/modpost.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/scripts/mod/modpost.c	2019-02-20 04:13:24.000000000 -0500
@@ -1197,6 +1197,30 @@ static int secref_whitelist(const struct
 	return 1;
 }
 
+static inline int is_arm_mapping_symbol(const char *str)
+{
+	return str[0] == '$' && strchr("axtd", str[1])
+	       && (str[2] == '\0' || str[2] == '.');
+}
+
+/*
+ * If there's no name there, ignore it; likewise, ignore it if it's
+ * one of the magic symbols emitted used by current ARM tools.
+ *
+ * Otherwise if find_symbols_between() returns those symbols, they'll
+ * fail the whitelist tests and cause lots of false alarms ... fixable
+ * only by merging __exit and __init sections into __text, bloating
+ * the kernel (which is especially evil on embedded platforms).
+ */
+static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
+{
+	const char *name = elf->strtab + sym->st_name;
+
+	if (!name || !strlen(name))
+		return 0;
+	return !is_arm_mapping_symbol(name);
+}
+
 /**
  * Find symbol based on relocation record info.
  * In some cases the symbol supplied is a valid symbol so
@@ -1222,6 +1246,8 @@ static Elf_Sym *find_elf_symbol(struct e
 			continue;
 		if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
 			continue;
+		if (!is_valid_name(elf, sym))
+			continue;
 		if (sym->st_value == addr)
 			return sym;
 		/* Find a symbol nearby - addr are maybe negative */
@@ -1240,30 +1266,6 @@ static Elf_Sym *find_elf_symbol(struct e
 		return NULL;
 }
 
-static inline int is_arm_mapping_symbol(const char *str)
-{
-	return str[0] == '$' && strchr("axtd", str[1])
-	       && (str[2] == '\0' || str[2] == '.');
-}
-
-/*
- * If there's no name there, ignore it; likewise, ignore it if it's
- * one of the magic symbols emitted used by current ARM tools.
- *
- * Otherwise if find_symbols_between() returns those symbols, they'll
- * fail the whitelist tests and cause lots of false alarms ... fixable
- * only by merging __exit and __init sections into __text, bloating
- * the kernel (which is especially evil on embedded platforms).
- */
-static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
-{
-	const char *name = elf->strtab + sym->st_name;
-
-	if (!name || !strlen(name))
-		return 0;
-	return !is_arm_mapping_symbol(name);
-}
-
 /*
  * Find symbols before or equal addr and after addr - in the section sec.
  * If we find two symbols with equal offset prefer one with a valid name.
diff -druNp --no-dereference linux-libre-4.4.174-gnu/security/smack/smack_lsm.c linux-libre-4.4.175-gnu/security/smack/smack_lsm.c
--- linux-libre-4.4.174-gnu/security/smack/smack_lsm.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/security/smack/smack_lsm.c	2019-02-20 04:13:24.000000000 -0500
@@ -4311,6 +4311,12 @@ static int smack_key_permission(key_ref_
 	int request = 0;
 	int rc;
 
+	/*
+	 * Validate requested permissions
+	 */
+	if (perm & ~KEY_NEED_ALL)
+		return -EINVAL;
+
 	keyp = key_ref_to_ptr(key_ref);
 	if (keyp == NULL)
 		return -EINVAL;
@@ -4330,10 +4336,10 @@ static int smack_key_permission(key_ref_
 	ad.a.u.key_struct.key = keyp->serial;
 	ad.a.u.key_struct.key_desc = keyp->description;
 #endif
-	if (perm & KEY_NEED_READ)
-		request = MAY_READ;
+	if (perm & (KEY_NEED_READ | KEY_NEED_SEARCH | KEY_NEED_VIEW))
+		request |= MAY_READ;
 	if (perm & (KEY_NEED_WRITE | KEY_NEED_LINK | KEY_NEED_SETATTR))
-		request = MAY_WRITE;
+		request |= MAY_WRITE;
 	rc = smk_access(tkp, keyp->security, request, &ad);
 	rc = smk_bu_note("key access", tkp, keyp->security, request, rc);
 	return rc;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/pci/hda/hda_bind.c linux-libre-4.4.175-gnu/sound/pci/hda/hda_bind.c
--- linux-libre-4.4.174-gnu/sound/pci/hda/hda_bind.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/pci/hda/hda_bind.c	2019-02-20 04:13:24.000000000 -0500
@@ -109,7 +109,8 @@ static int hda_codec_driver_probe(struct
 	err = snd_hda_codec_build_controls(codec);
 	if (err < 0)
 		goto error_module;
-	if (codec->card->registered) {
+	/* only register after the bus probe finished; otherwise it's racy */
+	if (!codec->bus->bus_probing && codec->card->registered) {
 		err = snd_card_register(codec->card);
 		if (err < 0)
 			goto error_module;
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/pci/hda/hda_codec.h linux-libre-4.4.175-gnu/sound/pci/hda/hda_codec.h
--- linux-libre-4.4.174-gnu/sound/pci/hda/hda_codec.h	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/pci/hda/hda_codec.h	2019-02-20 04:13:24.000000000 -0500
@@ -68,6 +68,7 @@ struct hda_bus {
 	unsigned int response_reset:1;	/* controller was reset */
 	unsigned int in_reset:1;	/* during reset operation */
 	unsigned int no_response_fallback:1; /* don't fallback at RIRB error */
+	unsigned int bus_probing :1;	/* during probing process */
 
 	int primary_dig_out_type;	/* primary digital out PCM type */
 	unsigned int mixer_assigned;	/* codec addr for mixer name */
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/pci/hda/hda_intel.c linux-libre-4.4.175-gnu/sound/pci/hda/hda_intel.c
--- linux-libre-4.4.174-gnu/sound/pci/hda/hda_intel.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/pci/hda/hda_intel.c	2019-02-20 04:13:24.000000000 -0500
@@ -2100,6 +2100,7 @@ static int azx_probe_continue(struct azx
 	int val;
 	int err;
 
+	to_hda_bus(bus)->bus_probing = 1;
 	hda->probe_continued = 1;
 
 	/* Request display power well for the HDA controller or codec. For
@@ -2200,6 +2201,7 @@ i915_power_fail:
 	if (err < 0)
 		hda->init_failed = 1;
 	complete_all(&hda->probe_wait);
+	to_hda_bus(bus)->bus_probing = 0;
 	return err;
 }
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/pci/hda/patch_conexant.c linux-libre-4.4.175-gnu/sound/pci/hda/patch_conexant.c
--- linux-libre-4.4.174-gnu/sound/pci/hda/patch_conexant.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/pci/hda/patch_conexant.c	2019-02-20 04:13:24.000000000 -0500
@@ -854,6 +854,7 @@ static const struct snd_pci_quirk cxt506
 	SND_PCI_QUIRK(0x103c, 0x807C, "HP EliteBook 820 G3", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x80FD, "HP ProBook 640 G2", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x828c, "HP EliteBook 840 G4", CXT_FIXUP_HP_DOCK),
+	SND_PCI_QUIRK(0x103c, 0x83b2, "HP EliteBook 840 G5", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x83b3, "HP EliteBook 830 G5", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x83d3, "HP ProBook 640 G4", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/soc/fsl/Kconfig linux-libre-4.4.175-gnu/sound/soc/fsl/Kconfig
--- linux-libre-4.4.174-gnu/sound/soc/fsl/Kconfig	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/soc/fsl/Kconfig	2019-02-20 04:13:24.000000000 -0500
@@ -219,7 +219,7 @@ config SND_SOC_PHYCORE_AC97
 
 config SND_SOC_EUKREA_TLV320
 	tristate "Eukrea TLV320"
-	depends on ARCH_MXC && I2C
+	depends on ARCH_MXC && !ARM64 && I2C
 	select SND_SOC_TLV320AIC23_I2C
 	select SND_SOC_IMX_AUDMUX
 	select SND_SOC_IMX_SSI
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/soc/intel/atom/sst/sst_loader.c linux-libre-4.4.175-gnu/sound/soc/intel/atom/sst/sst_loader.c
--- linux-libre-4.4.174-gnu/sound/soc/intel/atom/sst/sst_loader.c	2019-02-09 11:32:21.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/soc/intel/atom/sst/sst_loader.c	2019-02-20 18:24:34.000000000 -0500
@@ -354,14 +354,14 @@ static int sst_request_fw(struct intel_s
 	const struct firmware *fw;
 
 	retval = reject_firmware(&fw, sst->firmware_name, sst->dev);
-	if (fw == NULL) {
-		dev_err(sst->dev, "fw is returning as null\n");
-		return -EINVAL;
-	}
 	if (retval) {
 		dev_err(sst->dev, "request fw failed %d\n", retval);
 		return retval;
 	}
+	if (fw == NULL) {
+		dev_err(sst->dev, "fw is returning as null\n");
+		return -EINVAL;
+	}
 	mutex_lock(&sst->sst_lock);
 	retval = sst_cache_and_parse_fw(sst, fw);
 	mutex_unlock(&sst->sst_lock);
diff -druNp --no-dereference linux-libre-4.4.174-gnu/sound/usb/pcm.c linux-libre-4.4.175-gnu/sound/usb/pcm.c
--- linux-libre-4.4.174-gnu/sound/usb/pcm.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/sound/usb/pcm.c	2019-02-20 04:13:24.000000000 -0500
@@ -313,6 +313,9 @@ static int search_roland_implicit_fb(str
 	return 0;
 }
 
+/* Setup an implicit feedback endpoint from a quirk. Returns 0 if no quirk
+ * applies. Returns 1 if a quirk was found.
+ */
 static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
 					 struct usb_device *dev,
 					 struct usb_interface_descriptor *altsd,
@@ -381,7 +384,7 @@ add_sync_ep:
 
 	subs->data_endpoint->sync_master = subs->sync_endpoint;
 
-	return 0;
+	return 1;
 }
 
 static int set_sync_endpoint(struct snd_usb_substream *subs,
@@ -420,6 +423,10 @@ static int set_sync_endpoint(struct snd_
 	if (err < 0)
 		return err;
 
+	/* endpoint set by quirk */
+	if (err > 0)
+		return 0;
+
 	if (altsd->bNumEndpoints < 2)
 		return 0;
 
diff -druNp --no-dereference linux-libre-4.4.174-gnu/tools/perf/arch/x86/util/kvm-stat.c linux-libre-4.4.175-gnu/tools/perf/arch/x86/util/kvm-stat.c
--- linux-libre-4.4.174-gnu/tools/perf/arch/x86/util/kvm-stat.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/tools/perf/arch/x86/util/kvm-stat.c	2019-02-20 04:13:24.000000000 -0500
@@ -146,7 +146,7 @@ int cpu_isa_init(struct perf_kvm_stat *k
 	if (strstr(cpuid, "Intel")) {
 		kvm->exit_reasons = vmx_exit_reasons;
 		kvm->exit_reasons_isa = "VMX";
-	} else if (strstr(cpuid, "AMD")) {
+	} else if (strstr(cpuid, "AMD") || strstr(cpuid, "Hygon")) {
 		kvm->exit_reasons = svm_exit_reasons;
 		kvm->exit_reasons_isa = "SVM";
 	} else
diff -druNp --no-dereference linux-libre-4.4.174-gnu/tools/perf/tests/evsel-tp-sched.c linux-libre-4.4.175-gnu/tools/perf/tests/evsel-tp-sched.c
--- linux-libre-4.4.174-gnu/tools/perf/tests/evsel-tp-sched.c	2019-02-08 05:25:33.000000000 -0500
+++ linux-libre-4.4.175-gnu/tools/perf/tests/evsel-tp-sched.c	2019-02-20 04:13:24.000000000 -0500
@@ -16,7 +16,7 @@ static int perf_evsel__test_field(struct
 		return -1;
 	}
 
-	is_signed = !!(field->flags | FIELD_IS_SIGNED);
+	is_signed = !!(field->flags & FIELD_IS_SIGNED);
 	if (should_be_signed && !is_signed) {
 		pr_debug("%s: \"%s\" signedness(%d) is wrong, should be %d\n",
 			 evsel->name, name, is_signed, should_be_signed);
