diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/am57xx-beagle-x15.dts linux-libre-4.2.6-gnu/arch/arm/boot/dts/am57xx-beagle-x15.dts
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/am57xx-beagle-x15.dts	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/am57xx-beagle-x15.dts	2015-11-09 17:37:56.000000000 -0500
@@ -415,11 +415,12 @@
 				/* SMPS9 unused */
 
 				ldo1_reg: ldo1 {
-					/* VDD_SD  */
+					/* VDD_SD / VDDSHV8  */
 					regulator-name = "ldo1";
 					regulator-min-microvolt = <1800000>;
 					regulator-max-microvolt = <3300000>;
 					regulator-boot-on;
+					regulator-always-on;
 				};
 
 				ldo2_reg: ldo2 {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/armada-385-db-ap.dts linux-libre-4.2.6-gnu/arch/arm/boot/dts/armada-385-db-ap.dts
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/armada-385-db-ap.dts	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/armada-385-db-ap.dts	2015-11-09 17:37:56.000000000 -0500
@@ -46,7 +46,7 @@
 
 / {
 	model = "Marvell Armada 385 Access Point Development Board";
-	compatible = "marvell,a385-db-ap", "marvell,armada385", "marvell,armada38x";
+	compatible = "marvell,a385-db-ap", "marvell,armada385", "marvell,armada380";
 
 	chosen {
 		stdout-path = "serial1:115200n8";
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/berlin2q.dtsi linux-libre-4.2.6-gnu/arch/arm/boot/dts/berlin2q.dtsi
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/berlin2q.dtsi	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/berlin2q.dtsi	2015-11-09 17:37:56.000000000 -0500
@@ -152,7 +152,7 @@
 		};
 
 		usb_phy2: phy@a2f400 {
-			compatible = "marvell,berlin2-usb-phy";
+			compatible = "marvell,berlin2cd-usb-phy";
 			reg = <0xa2f400 0x128>;
 			#phy-cells = <0>;
 			resets = <&chip_rst 0x104 14>;
@@ -170,7 +170,7 @@
 		};
 
 		usb_phy0: phy@b74000 {
-			compatible = "marvell,berlin2-usb-phy";
+			compatible = "marvell,berlin2cd-usb-phy";
 			reg = <0xb74000 0x128>;
 			#phy-cells = <0>;
 			resets = <&chip_rst 0x104 12>;
@@ -178,7 +178,7 @@
 		};
 
 		usb_phy1: phy@b78000 {
-			compatible = "marvell,berlin2-usb-phy";
+			compatible = "marvell,berlin2cd-usb-phy";
 			reg = <0xb78000 0x128>;
 			#phy-cells = <0>;
 			resets = <&chip_rst 0x104 13>;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts linux-libre-4.2.6-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts	2015-11-09 17:37:56.000000000 -0500
@@ -915,6 +915,11 @@
 	};
 };
 
+&pmu_system_controller {
+	assigned-clocks = <&pmu_system_controller 0>;
+	assigned-clock-parents = <&clock CLK_FIN_PLL>;
+};
+
 &rtc {
 	status = "okay";
 	clocks = <&clock CLK_RTC>, <&max77802 MAX77802_CLK_32K_AP>;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts linux-libre-4.2.6-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts	2015-11-09 17:37:56.000000000 -0500
@@ -878,6 +878,11 @@
 	};
 };
 
+&pmu_system_controller {
+	assigned-clocks = <&pmu_system_controller 0>;
+	assigned-clock-parents = <&clock CLK_FIN_PLL>;
+};
+
 &rtc {
 	status = "okay";
 	clocks = <&clock CLK_RTC>, <&max77802 MAX77802_CLK_32K_AP>;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/imx7d.dtsi linux-libre-4.2.6-gnu/arch/arm/boot/dts/imx7d.dtsi
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/imx7d.dtsi	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/imx7d.dtsi	2015-11-09 17:37:56.000000000 -0500
@@ -340,10 +340,10 @@
 				status = "disabled";
 			};
 
-			uart2: serial@30870000 {
+			uart2: serial@30890000 {
 				compatible = "fsl,imx7d-uart",
 					     "fsl,imx6q-uart";
-				reg = <0x30870000 0x10000>;
+				reg = <0x30890000 0x10000>;
 				interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
 				clocks = <&clks IMX7D_UART2_ROOT_CLK>,
 					<&clks IMX7D_UART2_ROOT_CLK>;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/boot/dts/ste-hrefv60plus.dtsi linux-libre-4.2.6-gnu/arch/arm/boot/dts/ste-hrefv60plus.dtsi
--- linux-libre-4.2.5-gnu/arch/arm/boot/dts/ste-hrefv60plus.dtsi	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/boot/dts/ste-hrefv60plus.dtsi	2015-11-09 17:37:56.000000000 -0500
@@ -56,7 +56,7 @@
 					/* VMMCI level-shifter enable */
 					default_hrefv60_cfg2 {
 						pins = "GPIO169_D22";
-						ste,config = <&gpio_out_lo>;
+						ste,config = <&gpio_out_hi>;
 					};
 					/* VMMCI level-shifter voltage select */
 					default_hrefv60_cfg3 {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/kvm/Kconfig linux-libre-4.2.6-gnu/arch/arm/kvm/Kconfig
--- linux-libre-4.2.5-gnu/arch/arm/kvm/Kconfig	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/kvm/Kconfig	2015-11-09 17:37:56.000000000 -0500
@@ -21,6 +21,7 @@ config KVM
 	depends on MMU && OF
 	select PREEMPT_NOTIFIERS
 	select ANON_INODES
+	select ARM_GIC
 	select HAVE_KVM_CPU_RELAX_INTERCEPT
 	select HAVE_KVM_ARCH_TLB_FLUSH_ALL
 	select KVM_MMIO
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/mach-exynos/pm_domains.c linux-libre-4.2.6-gnu/arch/arm/mach-exynos/pm_domains.c
--- linux-libre-4.2.5-gnu/arch/arm/mach-exynos/pm_domains.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/mach-exynos/pm_domains.c	2015-11-09 17:37:56.000000000 -0500
@@ -200,15 +200,15 @@ no_clk:
 		args.args_count = 0;
 		child_domain = of_genpd_get_from_provider(&args);
 		if (IS_ERR(child_domain))
-			goto next_pd;
+			continue;
 
 		if (of_parse_phandle_with_args(np, "power-domains",
 					 "#power-domain-cells", 0, &args) != 0)
-			goto next_pd;
+			continue;
 
 		parent_domain = of_genpd_get_from_provider(&args);
 		if (IS_ERR(parent_domain))
-			goto next_pd;
+			continue;
 
 		if (pm_genpd_add_subdomain(parent_domain, child_domain))
 			pr_warn("%s failed to add subdomain: %s\n",
@@ -216,8 +216,6 @@ no_clk:
 		else
 			pr_info("%s has as child subdomain: %s.\n",
 				parent_domain->name, child_domain->name);
-next_pd:
-		of_node_put(np);
 	}
 
 	return 0;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/plat-orion/common.c linux-libre-4.2.6-gnu/arch/arm/plat-orion/common.c
--- linux-libre-4.2.5-gnu/arch/arm/plat-orion/common.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/plat-orion/common.c	2015-11-09 17:37:56.000000000 -0500
@@ -495,7 +495,7 @@ void __init orion_ge00_switch_init(struc
 
 	d->netdev = &orion_ge00.dev;
 	for (i = 0; i < d->nr_chips; i++)
-		d->chip[i].host_dev = &orion_ge00_shared.dev;
+		d->chip[i].host_dev = &orion_ge_mvmdio.dev;
 	orion_switch_device.dev.platform_data = d;
 
 	platform_device_register(&orion_switch_device);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm/vdso/vdsomunge.c linux-libre-4.2.6-gnu/arch/arm/vdso/vdsomunge.c
--- linux-libre-4.2.5-gnu/arch/arm/vdso/vdsomunge.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm/vdso/vdsomunge.c	2015-11-09 17:37:56.000000000 -0500
@@ -45,7 +45,6 @@
  * it does.
  */
 
-#include <byteswap.h>
 #include <elf.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -59,6 +58,16 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#define swab16(x) \
+	((((x) & 0x00ff) << 8) | \
+	 (((x) & 0xff00) >> 8))
+
+#define swab32(x) \
+	((((x) & 0x000000ff) << 24) | \
+	 (((x) & 0x0000ff00) <<  8) | \
+	 (((x) & 0x00ff0000) >>  8) | \
+	 (((x) & 0xff000000) >> 24))
+
 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
 #define HOST_ORDER ELFDATA2LSB
 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
@@ -104,17 +113,17 @@ static void cleanup(void)
 
 static Elf32_Word read_elf_word(Elf32_Word word, bool swap)
 {
-	return swap ? bswap_32(word) : word;
+	return swap ? swab32(word) : word;
 }
 
 static Elf32_Half read_elf_half(Elf32_Half half, bool swap)
 {
-	return swap ? bswap_16(half) : half;
+	return swap ? swab16(half) : half;
 }
 
 static void write_elf_word(Elf32_Word val, Elf32_Word *dst, bool swap)
 {
-	*dst = swap ? bswap_32(val) : val;
+	*dst = swap ? swab32(val) : val;
 }
 
 int main(int argc, char **argv)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm64/kernel/armv8_deprecated.c linux-libre-4.2.6-gnu/arch/arm64/kernel/armv8_deprecated.c
--- linux-libre-4.2.5-gnu/arch/arm64/kernel/armv8_deprecated.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm64/kernel/armv8_deprecated.c	2015-11-09 17:37:56.000000000 -0500
@@ -279,22 +279,24 @@ static void register_insn_emulation_sysc
  */
 #define __user_swpX_asm(data, addr, res, temp, B)		\
 	__asm__ __volatile__(					\
-	"	mov		%w2, %w1\n"			\
-	"0:	ldxr"B"		%w1, [%3]\n"			\
-	"1:	stxr"B"		%w0, %w2, [%3]\n"		\
+	"0:	ldxr"B"		%w2, [%3]\n"			\
+	"1:	stxr"B"		%w0, %w1, [%3]\n"		\
 	"	cbz		%w0, 2f\n"			\
 	"	mov		%w0, %w4\n"			\
+	"	b		3f\n"				\
 	"2:\n"							\
+	"	mov		%w1, %w2\n"			\
+	"3:\n"							\
 	"	.pushsection	 .fixup,\"ax\"\n"		\
 	"	.align		2\n"				\
-	"3:	mov		%w0, %w5\n"			\
-	"	b		2b\n"				\
+	"4:	mov		%w0, %w5\n"			\
+	"	b		3b\n"				\
 	"	.popsection"					\
 	"	.pushsection	 __ex_table,\"a\"\n"		\
 	"	.align		3\n"				\
-	"	.quad		0b, 3b\n"			\
-	"	.quad		1b, 3b\n"			\
-	"	.popsection"					\
+	"	.quad		0b, 4b\n"			\
+	"	.quad		1b, 4b\n"			\
+	"	.popsection\n"					\
 	: "=&r" (res), "+r" (data), "=&r" (temp)		\
 	: "r" (addr), "i" (-EAGAIN), "i" (-EFAULT)		\
 	: "memory")
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm64/kernel/stacktrace.c linux-libre-4.2.6-gnu/arch/arm64/kernel/stacktrace.c
--- linux-libre-4.2.5-gnu/arch/arm64/kernel/stacktrace.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm64/kernel/stacktrace.c	2015-11-09 17:37:56.000000000 -0500
@@ -48,11 +48,7 @@ int notrace unwind_frame(struct stackfra
 
 	frame->sp = fp + 0x10;
 	frame->fp = *(unsigned long *)(fp);
-	/*
-	 * -4 here because we care about the PC at time of bl,
-	 * not where the return will go.
-	 */
-	frame->pc = *(unsigned long *)(fp + 8) - 4;
+	frame->pc = *(unsigned long *)(fp + 8);
 
 	return 0;
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/arm64/kernel/suspend.c linux-libre-4.2.6-gnu/arch/arm64/kernel/suspend.c
--- linux-libre-4.2.5-gnu/arch/arm64/kernel/suspend.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/arm64/kernel/suspend.c	2015-11-09 17:37:56.000000000 -0500
@@ -80,17 +80,21 @@ int cpu_suspend(unsigned long arg, int (
 	if (ret == 0) {
 		/*
 		 * We are resuming from reset with TTBR0_EL1 set to the
-		 * idmap to enable the MMU; restore the active_mm mappings in
-		 * TTBR0_EL1 unless the active_mm == &init_mm, in which case
-		 * the thread entered cpu_suspend with TTBR0_EL1 set to
-		 * reserved TTBR0 page tables and should be restored as such.
+		 * idmap to enable the MMU; set the TTBR0 to the reserved
+		 * page tables to prevent speculative TLB allocations, flush
+		 * the local tlb and set the default tcr_el1.t0sz so that
+		 * the TTBR0 address space set-up is properly restored.
+		 * If the current active_mm != &init_mm we entered cpu_suspend
+		 * with mappings in TTBR0 that must be restored, so we switch
+		 * them back to complete the address space configuration
+		 * restoration before returning.
 		 */
-		if (mm == &init_mm)
-			cpu_set_reserved_ttbr0();
-		else
-			cpu_switch_mm(mm->pgd, mm);
-
+		cpu_set_reserved_ttbr0();
 		flush_tlb_all();
+		cpu_set_default_tcr_t0sz();
+
+		if (mm != &init_mm)
+			cpu_switch_mm(mm->pgd, mm);
 
 		/*
 		 * Restore per-cpu offset before any kernel
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/powerpc/kernel/rtas.c linux-libre-4.2.6-gnu/arch/powerpc/kernel/rtas.c
--- linux-libre-4.2.5-gnu/arch/powerpc/kernel/rtas.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/powerpc/kernel/rtas.c	2015-11-09 17:37:56.000000000 -0500
@@ -1041,6 +1041,9 @@ asmlinkage int ppc_rtas(struct rtas_args
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
 
+	if (!rtas.entry)
+		return -EINVAL;
+
 	if (copy_from_user(&args, uargs, 3 * sizeof(u32)) != 0)
 		return -EFAULT;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/um/kernel/trap.c linux-libre-4.2.6-gnu/arch/um/kernel/trap.c
--- linux-libre-4.2.5-gnu/arch/um/kernel/trap.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/um/kernel/trap.c	2015-11-09 17:37:56.000000000 -0500
@@ -220,7 +220,7 @@ unsigned long segv(struct faultinfo fi,
 		show_regs(container_of(regs, struct pt_regs, regs));
 		panic("Segfault with no mm");
 	}
-	else if (!is_user && address < TASK_SIZE) {
+	else if (!is_user && address > PAGE_SIZE && address < TASK_SIZE) {
 		show_regs(container_of(regs, struct pt_regs, regs));
 		panic("Kernel tried to access user memory at addr 0x%lx, ip 0x%lx",
 		       address, ip);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/x86/boot/compressed/eboot.c linux-libre-4.2.6-gnu/arch/x86/boot/compressed/eboot.c
--- linux-libre-4.2.5-gnu/arch/x86/boot/compressed/eboot.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/x86/boot/compressed/eboot.c	2015-11-09 17:37:56.000000000 -0500
@@ -667,6 +667,7 @@ setup_gop32(struct screen_info *si, efi_
 		bool conout_found = false;
 		void *dummy = NULL;
 		u32 h = handles[i];
+		u32 current_fb_base;
 
 		status = efi_call_early(handle_protocol, h,
 					proto, (void **)&gop32);
@@ -678,7 +679,7 @@ setup_gop32(struct screen_info *si, efi_
 		if (status == EFI_SUCCESS)
 			conout_found = true;
 
-		status = __gop_query32(gop32, &info, &size, &fb_base);
+		status = __gop_query32(gop32, &info, &size, &current_fb_base);
 		if (status == EFI_SUCCESS && (!first_gop || conout_found)) {
 			/*
 			 * Systems that use the UEFI Console Splitter may
@@ -692,6 +693,7 @@ setup_gop32(struct screen_info *si, efi_
 			pixel_format = info->pixel_format;
 			pixel_info = info->pixel_information;
 			pixels_per_scan_line = info->pixels_per_scan_line;
+			fb_base = current_fb_base;
 
 			/*
 			 * Once we've found a GOP supporting ConOut,
@@ -770,6 +772,7 @@ setup_gop64(struct screen_info *si, efi_
 		bool conout_found = false;
 		void *dummy = NULL;
 		u64 h = handles[i];
+		u32 current_fb_base;
 
 		status = efi_call_early(handle_protocol, h,
 					proto, (void **)&gop64);
@@ -781,7 +784,7 @@ setup_gop64(struct screen_info *si, efi_
 		if (status == EFI_SUCCESS)
 			conout_found = true;
 
-		status = __gop_query64(gop64, &info, &size, &fb_base);
+		status = __gop_query64(gop64, &info, &size, &current_fb_base);
 		if (status == EFI_SUCCESS && (!first_gop || conout_found)) {
 			/*
 			 * Systems that use the UEFI Console Splitter may
@@ -795,6 +798,7 @@ setup_gop64(struct screen_info *si, efi_
 			pixel_format = info->pixel_format;
 			pixel_info = info->pixel_information;
 			pixels_per_scan_line = info->pixels_per_scan_line;
+			fb_base = current_fb_base;
 
 			/*
 			 * Once we've found a GOP supporting ConOut,
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/x86/kernel/apic/io_apic.c linux-libre-4.2.6-gnu/arch/x86/kernel/apic/io_apic.c
--- linux-libre-4.2.5-gnu/arch/x86/kernel/apic/io_apic.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/x86/kernel/apic/io_apic.c	2015-11-09 17:37:56.000000000 -0500
@@ -2547,7 +2547,9 @@ void __init setup_ioapic_dest(void)
 			mask = apic->target_cpus();
 
 		chip = irq_data_get_irq_chip(idata);
-		chip->irq_set_affinity(idata, mask, false);
+		/* Might be lapic_chip for irq 0 */
+		if (chip->irq_set_affinity)
+			chip->irq_set_affinity(idata, mask, false);
 	}
 }
 #endif
diff -druNp --no-dereference linux-libre-4.2.5-gnu/arch/x86/xen/enlighten.c linux-libre-4.2.6-gnu/arch/x86/xen/enlighten.c
--- linux-libre-4.2.5-gnu/arch/x86/xen/enlighten.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/arch/x86/xen/enlighten.c	2015-11-09 17:37:56.000000000 -0500
@@ -33,7 +33,7 @@
 #include <linux/memblock.h>
 #include <linux/edd.h>
 
-#ifdef CONFIG_KEXEC_CORE
+#ifdef CONFIG_KEXEC
 #include <linux/kexec.h>
 #endif
 
@@ -1804,7 +1804,7 @@ static struct notifier_block xen_hvm_cpu
 	.notifier_call	= xen_hvm_cpu_notify,
 };
 
-#ifdef CONFIG_KEXEC_CORE
+#ifdef CONFIG_KEXEC
 static void xen_hvm_shutdown(void)
 {
 	native_machine_shutdown();
@@ -1838,7 +1838,7 @@ static void __init xen_hvm_guest_init(vo
 	x86_init.irqs.intr_init = xen_init_IRQ;
 	xen_hvm_init_time_ops();
 	xen_hvm_init_mmu_ops();
-#ifdef CONFIG_KEXEC_CORE
+#ifdef CONFIG_KEXEC
 	machine_ops.shutdown = xen_hvm_shutdown;
 	machine_ops.crash_shutdown = xen_hvm_crash_shutdown;
 #endif
diff -druNp --no-dereference linux-libre-4.2.5-gnu/block/blk-core.c linux-libre-4.2.6-gnu/block/blk-core.c
--- linux-libre-4.2.5-gnu/block/blk-core.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/block/blk-core.c	2015-11-09 17:37:56.000000000 -0500
@@ -578,7 +578,7 @@ void blk_cleanup_queue(struct request_qu
 		q->queue_lock = &q->__queue_lock;
 	spin_unlock_irq(lock);
 
-	bdi_destroy(&q->backing_dev_info);
+	bdi_unregister(&q->backing_dev_info);
 
 	/* @q is and will stay empty, shutdown and put */
 	blk_put_queue(q);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/block/blk-mq.c linux-libre-4.2.6-gnu/block/blk-mq.c
--- linux-libre-4.2.5-gnu/block/blk-mq.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/block/blk-mq.c	2015-11-09 17:37:56.000000000 -0500
@@ -2263,10 +2263,8 @@ void blk_mq_free_tag_set(struct blk_mq_t
 	int i;
 
 	for (i = 0; i < set->nr_hw_queues; i++) {
-		if (set->tags[i]) {
+		if (set->tags[i])
 			blk_mq_free_rq_map(set, set->tags[i], i);
-			free_cpumask_var(set->tags[i]->cpumask);
-		}
 	}
 
 	kfree(set->tags);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/block/blk-mq-tag.c linux-libre-4.2.6-gnu/block/blk-mq-tag.c
--- linux-libre-4.2.5-gnu/block/blk-mq-tag.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/block/blk-mq-tag.c	2015-11-09 17:37:56.000000000 -0500
@@ -628,6 +628,7 @@ void blk_mq_free_tags(struct blk_mq_tags
 {
 	bt_free(&tags->bitmap_tags);
 	bt_free(&tags->breserved_tags);
+	free_cpumask_var(tags->cpumask);
 	kfree(tags);
 }
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/block/blk-sysfs.c linux-libre-4.2.6-gnu/block/blk-sysfs.c
--- linux-libre-4.2.5-gnu/block/blk-sysfs.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/block/blk-sysfs.c	2015-11-09 17:37:56.000000000 -0500
@@ -502,6 +502,7 @@ static void blk_release_queue(struct kob
 	struct request_queue *q =
 		container_of(kobj, struct request_queue, kobj);
 
+	bdi_exit(&q->backing_dev_info);
 	blkcg_exit_queue(q);
 
 	if (q->elevator) {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/crypto/ablkcipher.c linux-libre-4.2.6-gnu/crypto/ablkcipher.c
--- linux-libre-4.2.5-gnu/crypto/ablkcipher.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/crypto/ablkcipher.c	2015-11-09 17:37:56.000000000 -0500
@@ -706,7 +706,7 @@ struct crypto_ablkcipher *crypto_alloc_a
 err:
 		if (err != -EAGAIN)
 			break;
-		if (signal_pending(current)) {
+		if (fatal_signal_pending(current)) {
 			err = -EINTR;
 			break;
 		}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/crypto/algapi.c linux-libre-4.2.6-gnu/crypto/algapi.c
--- linux-libre-4.2.5-gnu/crypto/algapi.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/crypto/algapi.c	2015-11-09 17:37:56.000000000 -0500
@@ -335,7 +335,7 @@ static void crypto_wait_for_test(struct
 		crypto_alg_tested(larval->alg.cra_driver_name, 0);
 	}
 
-	err = wait_for_completion_interruptible(&larval->completion);
+	err = wait_for_completion_killable(&larval->completion);
 	WARN_ON(err);
 
 out:
diff -druNp --no-dereference linux-libre-4.2.5-gnu/crypto/api.c linux-libre-4.2.6-gnu/crypto/api.c
--- linux-libre-4.2.5-gnu/crypto/api.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/crypto/api.c	2015-11-09 17:37:56.000000000 -0500
@@ -172,7 +172,7 @@ static struct crypto_alg *crypto_larval_
 	struct crypto_larval *larval = (void *)alg;
 	long timeout;
 
-	timeout = wait_for_completion_interruptible_timeout(
+	timeout = wait_for_completion_killable_timeout(
 		&larval->completion, 60 * HZ);
 
 	alg = larval->adult;
@@ -445,7 +445,7 @@ struct crypto_tfm *crypto_alloc_base(con
 err:
 		if (err != -EAGAIN)
 			break;
-		if (signal_pending(current)) {
+		if (fatal_signal_pending(current)) {
 			err = -EINTR;
 			break;
 		}
@@ -562,7 +562,7 @@ void *crypto_alloc_tfm(const char *alg_n
 err:
 		if (err != -EAGAIN)
 			break;
-		if (signal_pending(current)) {
+		if (fatal_signal_pending(current)) {
 			err = -EINTR;
 			break;
 		}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/crypto/crypto_user.c linux-libre-4.2.6-gnu/crypto/crypto_user.c
--- linux-libre-4.2.5-gnu/crypto/crypto_user.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/crypto/crypto_user.c	2015-11-09 17:37:56.000000000 -0500
@@ -376,7 +376,7 @@ static struct crypto_alg *crypto_user_sk
 		err = PTR_ERR(alg);
 		if (err != -EAGAIN)
 			break;
-		if (signal_pending(current)) {
+		if (fatal_signal_pending(current)) {
 			err = -EINTR;
 			break;
 		}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/block/nvme-core.c linux-libre-4.2.6-gnu/drivers/block/nvme-core.c
--- linux-libre-4.2.5-gnu/drivers/block/nvme-core.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/block/nvme-core.c	2015-11-09 17:37:56.000000000 -0500
@@ -597,6 +597,7 @@ static void req_completion(struct nvme_q
 	struct nvme_iod *iod = ctx;
 	struct request *req = iod_get_private(iod);
 	struct nvme_cmd_info *cmd_rq = blk_mq_rq_to_pdu(req);
+	bool requeue = false;
 
 	u16 status = le16_to_cpup(&cqe->status) >> 1;
 
@@ -605,12 +606,13 @@ static void req_completion(struct nvme_q
 		    && (jiffies - req->start_time) < req->timeout) {
 			unsigned long flags;
 
+			requeue = true;
 			blk_mq_requeue_request(req);
 			spin_lock_irqsave(req->q->queue_lock, flags);
 			if (!blk_queue_stopped(req->q))
 				blk_mq_kick_requeue_list(req->q);
 			spin_unlock_irqrestore(req->q->queue_lock, flags);
-			return;
+			goto release_iod;
 		}
 		if (req->cmd_type == REQ_TYPE_DRV_PRIV) {
 			if (cmd_rq->ctx == CMD_CTX_CANCELLED)
@@ -631,7 +633,7 @@ static void req_completion(struct nvme_q
 		dev_warn(nvmeq->dev->dev,
 			"completing aborted command with status:%04x\n",
 			status);
-
+ release_iod:
 	if (iod->nents) {
 		dma_unmap_sg(nvmeq->dev->dev, iod->sg, iod->nents,
 			rq_data_dir(req) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
@@ -644,7 +646,8 @@ static void req_completion(struct nvme_q
 	}
 	nvme_free_iod(nvmeq->dev, iod);
 
-	blk_mq_complete_request(req);
+	if (likely(!requeue))
+		blk_mq_complete_request(req);
 }
 
 /* length is in bytes.  gfp flags indicates whether we may sleep. */
@@ -1764,7 +1767,7 @@ static int nvme_submit_io(struct nvme_ns
 
 	length = (io.nblocks + 1) << ns->lba_shift;
 	meta_len = (io.nblocks + 1) * ns->ms;
-	metadata = (void __user *)(unsigned long)io.metadata;
+	metadata = (void __user *)(uintptr_t)io.metadata;
 	write = io.opcode & 1;
 
 	if (ns->ext) {
@@ -1804,7 +1807,7 @@ static int nvme_submit_io(struct nvme_ns
 	c.rw.metadata = cpu_to_le64(meta_dma);
 
 	status = __nvme_submit_sync_cmd(ns->queue, &c, NULL,
-			(void __user *)io.addr, length, NULL, 0);
+			(void __user *)(uintptr_t)io.addr, length, NULL, 0);
  unmap:
 	if (meta) {
 		if (status == NVME_SC_SUCCESS && !write) {
@@ -1846,7 +1849,7 @@ static int nvme_user_cmd(struct nvme_dev
 		timeout = msecs_to_jiffies(cmd.timeout_ms);
 
 	status = __nvme_submit_sync_cmd(ns ? ns->queue : dev->admin_q, &c,
-			NULL, (void __user *)cmd.addr, cmd.data_len,
+			NULL, (void __user *)(uintptr_t)cmd.addr, cmd.data_len,
 			&cmd.result, timeout);
 	if (status >= 0) {
 		if (put_user(cmd.result, &ucmd->result))
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/block/rbd.c linux-libre-4.2.6-gnu/drivers/block/rbd.c
--- linux-libre-4.2.5-gnu/drivers/block/rbd.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/block/rbd.c	2015-11-09 17:37:56.000000000 -0500
@@ -96,6 +96,8 @@ static int atomic_dec_return_safe(atomic
 #define RBD_MINORS_PER_MAJOR		256
 #define RBD_SINGLE_MAJOR_PART_SHIFT	4
 
+#define RBD_MAX_PARENT_CHAIN_LEN	16
+
 #define RBD_SNAP_DEV_NAME_PREFIX	"snap_"
 #define RBD_MAX_SNAP_NAME_LEN	\
 			(NAME_MAX - (sizeof (RBD_SNAP_DEV_NAME_PREFIX) - 1))
@@ -426,7 +428,7 @@ static ssize_t rbd_add_single_major(stru
 				    size_t count);
 static ssize_t rbd_remove_single_major(struct bus_type *bus, const char *buf,
 				       size_t count);
-static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping);
+static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth);
 static void rbd_spec_put(struct rbd_spec *spec);
 
 static int rbd_dev_id_to_minor(int dev_id)
@@ -3819,6 +3821,9 @@ static int rbd_init_disk(struct rbd_devi
 	q->limits.discard_zeroes_data = 1;
 
 	blk_queue_merge_bvec(q, rbd_merge_bvec);
+	if (!ceph_test_opt(rbd_dev->rbd_client->client, NOCRC))
+		q->backing_dev_info.capabilities |= BDI_CAP_STABLE_WRITES;
+
 	disk->queue = q;
 
 	q->queuedata = rbd_dev;
@@ -5169,44 +5174,51 @@ out_err:
 	return ret;
 }
 
-static int rbd_dev_probe_parent(struct rbd_device *rbd_dev)
+/*
+ * @depth is rbd_dev_image_probe() -> rbd_dev_probe_parent() ->
+ * rbd_dev_image_probe() recursion depth, which means it's also the
+ * length of the already discovered part of the parent chain.
+ */
+static int rbd_dev_probe_parent(struct rbd_device *rbd_dev, int depth)
 {
 	struct rbd_device *parent = NULL;
-	struct rbd_spec *parent_spec;
-	struct rbd_client *rbdc;
 	int ret;
 
 	if (!rbd_dev->parent_spec)
 		return 0;
-	/*
-	 * We need to pass a reference to the client and the parent
-	 * spec when creating the parent rbd_dev.  Images related by
-	 * parent/child relationships always share both.
-	 */
-	parent_spec = rbd_spec_get(rbd_dev->parent_spec);
-	rbdc = __rbd_get_client(rbd_dev->rbd_client);
 
-	ret = -ENOMEM;
-	parent = rbd_dev_create(rbdc, parent_spec, NULL);
-	if (!parent)
+	if (++depth > RBD_MAX_PARENT_CHAIN_LEN) {
+		pr_info("parent chain is too long (%d)\n", depth);
+		ret = -EINVAL;
 		goto out_err;
+	}
 
-	ret = rbd_dev_image_probe(parent, false);
+	parent = rbd_dev_create(rbd_dev->rbd_client, rbd_dev->parent_spec,
+				NULL);
+	if (!parent) {
+		ret = -ENOMEM;
+		goto out_err;
+	}
+
+	/*
+	 * Images related by parent/child relationships always share
+	 * rbd_client and spec/parent_spec, so bump their refcounts.
+	 */
+	__rbd_get_client(rbd_dev->rbd_client);
+	rbd_spec_get(rbd_dev->parent_spec);
+
+	ret = rbd_dev_image_probe(parent, depth);
 	if (ret < 0)
 		goto out_err;
+
 	rbd_dev->parent = parent;
 	atomic_set(&rbd_dev->parent_ref, 1);
-
 	return 0;
+
 out_err:
-	if (parent) {
-		rbd_dev_unparent(rbd_dev);
+	rbd_dev_unparent(rbd_dev);
+	if (parent)
 		rbd_dev_destroy(parent);
-	} else {
-		rbd_put_client(rbdc);
-		rbd_spec_put(parent_spec);
-	}
-
 	return ret;
 }
 
@@ -5324,7 +5336,7 @@ static void rbd_dev_image_release(struct
  * parent), initiate a watch on its header object before using that
  * object to get detailed information about the rbd image.
  */
-static int rbd_dev_image_probe(struct rbd_device *rbd_dev, bool mapping)
+static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth)
 {
 	int ret;
 
@@ -5342,7 +5354,7 @@ static int rbd_dev_image_probe(struct rb
 	if (ret)
 		goto err_out_format;
 
-	if (mapping) {
+	if (!depth) {
 		ret = rbd_dev_header_watch_sync(rbd_dev);
 		if (ret) {
 			if (ret == -ENOENT)
@@ -5363,7 +5375,7 @@ static int rbd_dev_image_probe(struct rb
 	 * Otherwise this is a parent image, identified by pool, image
 	 * and snap ids - need to fill in names for those ids.
 	 */
-	if (mapping)
+	if (!depth)
 		ret = rbd_spec_fill_snap_id(rbd_dev);
 	else
 		ret = rbd_spec_fill_names(rbd_dev);
@@ -5385,12 +5397,12 @@ static int rbd_dev_image_probe(struct rb
 		 * Need to warn users if this image is the one being
 		 * mapped and has a parent.
 		 */
-		if (mapping && rbd_dev->parent_spec)
+		if (!depth && rbd_dev->parent_spec)
 			rbd_warn(rbd_dev,
 				 "WARNING: kernel layering is EXPERIMENTAL!");
 	}
 
-	ret = rbd_dev_probe_parent(rbd_dev);
+	ret = rbd_dev_probe_parent(rbd_dev, depth);
 	if (ret)
 		goto err_out_probe;
 
@@ -5401,7 +5413,7 @@ static int rbd_dev_image_probe(struct rb
 err_out_probe:
 	rbd_dev_unprobe(rbd_dev);
 err_out_watch:
-	if (mapping)
+	if (!depth)
 		rbd_dev_header_unwatch_sync(rbd_dev);
 out_header_name:
 	kfree(rbd_dev->header_name);
@@ -5464,7 +5476,7 @@ static ssize_t do_rbd_add(struct bus_typ
 	spec = NULL;		/* rbd_dev now owns this */
 	rbd_opts = NULL;	/* rbd_dev now owns this */
 
-	rc = rbd_dev_image_probe(rbd_dev, true);
+	rc = rbd_dev_image_probe(rbd_dev, 0);
 	if (rc < 0)
 		goto err_out_rbd_dev;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/block/xen-blkfront.c linux-libre-4.2.6-gnu/drivers/block/xen-blkfront.c
--- linux-libre-4.2.5-gnu/drivers/block/xen-blkfront.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/block/xen-blkfront.c	2015-11-09 17:37:56.000000000 -0500
@@ -1984,7 +1984,8 @@ static void blkback_changed(struct xenbu
 			break;
 		/* Missed the backend's Closing state -- fallthrough */
 	case XenbusStateClosing:
-		blkfront_closing(info);
+		if (info)
+			blkfront_closing(info);
 		break;
 	}
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/bus/arm-ccn.c linux-libre-4.2.6-gnu/drivers/bus/arm-ccn.c
--- linux-libre-4.2.5-gnu/drivers/bus/arm-ccn.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/bus/arm-ccn.c	2015-11-09 17:37:56.000000000 -0500
@@ -1188,7 +1188,8 @@ static int arm_ccn_pmu_cpu_notifier(stru
 			break;
 		perf_pmu_migrate_context(&dt->pmu, cpu, target);
 		cpumask_set_cpu(target, &dt->cpu);
-		WARN_ON(irq_set_affinity(ccn->irq, &dt->cpu) != 0);
+		if (ccn->irq)
+			WARN_ON(irq_set_affinity(ccn->irq, &dt->cpu) != 0);
 	default:
 		break;
 	}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/clk/clkdev.c linux-libre-4.2.6-gnu/drivers/clk/clkdev.c
--- linux-libre-4.2.5-gnu/drivers/clk/clkdev.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/clk/clkdev.c	2015-11-09 17:37:56.000000000 -0500
@@ -333,7 +333,8 @@ int clk_add_alias(const char *alias, con
 	if (IS_ERR(r))
 		return PTR_ERR(r);
 
-	l = clkdev_create(r, alias, "%s", alias_dev_name);
+	l = clkdev_create(r, alias, alias_dev_name ? "%s" : NULL,
+			  alias_dev_name);
 	clk_put(r);
 
 	return l ? 0 : -ENODEV;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/cpufreq/intel_pstate.c linux-libre-4.2.6-gnu/drivers/cpufreq/intel_pstate.c
--- linux-libre-4.2.5-gnu/drivers/cpufreq/intel_pstate.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/cpufreq/intel_pstate.c	2015-11-09 17:37:56.000000000 -0500
@@ -766,6 +766,11 @@ static inline void intel_pstate_sample(s
 	local_irq_save(flags);
 	rdmsrl(MSR_IA32_APERF, aperf);
 	rdmsrl(MSR_IA32_MPERF, mperf);
+	if (cpu->prev_mperf == mperf) {
+		local_irq_restore(flags);
+		return;
+	}
+
 	tsc = native_read_tsc();
 	local_irq_restore(flags);
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/edac/sb_edac.c linux-libre-4.2.6-gnu/drivers/edac/sb_edac.c
--- linux-libre-4.2.5-gnu/drivers/edac/sb_edac.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/edac/sb_edac.c	2015-11-09 17:37:56.000000000 -0500
@@ -1648,6 +1648,7 @@ static int sbridge_mci_bind_devs(struct
 {
 	struct sbridge_pvt *pvt = mci->pvt_info;
 	struct pci_dev *pdev;
+	u8 saw_chan_mask = 0;
 	int i;
 
 	for (i = 0; i < sbridge_dev->n_devs; i++) {
@@ -1681,6 +1682,7 @@ static int sbridge_mci_bind_devs(struct
 		{
 			int id = pdev->device - PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD0;
 			pvt->pci_tad[id] = pdev;
+			saw_chan_mask |= 1 << id;
 		}
 			break;
 		case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_DDRIO:
@@ -1701,10 +1703,8 @@ static int sbridge_mci_bind_devs(struct
 	    !pvt-> pci_tad || !pvt->pci_ras  || !pvt->pci_ta)
 		goto enodev;
 
-	for (i = 0; i < NUM_CHANNELS; i++) {
-		if (!pvt->pci_tad[i])
-			goto enodev;
-	}
+	if (saw_chan_mask != 0x0f)
+		goto enodev;
 	return 0;
 
 enodev:
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu.h linux-libre-4.2.6-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu.h
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu.h	2015-11-09 17:37:56.000000000 -0500
@@ -1583,6 +1583,7 @@ struct amdgpu_pm {
 	u8                      fan_max_rpm;
 	/* dpm */
 	bool                    dpm_enabled;
+	bool                    sysfs_initialized;
 	struct amdgpu_dpm       dpm;
 	const struct firmware	*fw;	/* SMC firmware */
 	uint32_t                fw_version;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c linux-libre-4.2.6-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c	2015-11-09 17:37:56.000000000 -0500
@@ -693,6 +693,9 @@ int amdgpu_pm_sysfs_init(struct amdgpu_d
 {
 	int ret;
 
+	if (adev->pm.sysfs_initialized)
+		return 0;
+
 	if (adev->pm.funcs->get_temperature == NULL)
 		return 0;
 	adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev,
@@ -721,6 +724,8 @@ int amdgpu_pm_sysfs_init(struct amdgpu_d
 		return ret;
 	}
 
+	adev->pm.sysfs_initialized = true;
+
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/amd/amdgpu/kv_dpm.c linux-libre-4.2.6-gnu/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/amd/amdgpu/kv_dpm.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/amd/amdgpu/kv_dpm.c	2015-11-09 17:37:56.000000000 -0500
@@ -2997,6 +2997,9 @@ static int kv_dpm_late_init(void *handle
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 	int ret;
 
+	if (!amdgpu_dpm)
+		return 0;
+
 	/* init the sysfs and debugfs files late */
 	ret = amdgpu_pm_sysfs_init(adev);
 	if (ret)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/drm_crtc.c linux-libre-4.2.6-gnu/drivers/gpu/drm/drm_crtc.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/drm_crtc.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/drm_crtc.c	2015-11-09 17:37:56.000000000 -0500
@@ -4221,7 +4221,7 @@ drm_property_create_blob(struct drm_devi
 	struct drm_property_blob *blob;
 	int ret;
 
-	if (!length)
+	if (!length || length > ULONG_MAX - sizeof(struct drm_property_blob))
 		return ERR_PTR(-EINVAL);
 
 	blob = kzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
@@ -4573,7 +4573,7 @@ int drm_mode_createblob_ioctl(struct drm
 	 * not associated with any file_priv. */
 	mutex_lock(&dev->mode_config.blob_lock);
 	out_resp->blob_id = blob->base.id;
-	list_add_tail(&file_priv->blobs, &blob->head_file);
+	list_add_tail(&blob->head_file, &file_priv->blobs);
 	mutex_unlock(&dev->mode_config.blob_lock);
 
 	return 0;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/drm_dp_mst_topology.c linux-libre-4.2.6-gnu/drivers/gpu/drm/drm_dp_mst_topology.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/drm_dp_mst_topology.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/drm_dp_mst_topology.c	2015-11-09 17:37:56.000000000 -0500
@@ -1193,17 +1193,18 @@ static struct drm_dp_mst_branch *drm_dp_
 
 		list_for_each_entry(port, &mstb->ports, next) {
 			if (port->port_num == port_num) {
-				if (!port->mstb) {
+				mstb = port->mstb;
+				if (!mstb) {
 					DRM_ERROR("failed to lookup MSTB with lct %d, rad %02x\n", lct, rad[0]);
-					return NULL;
+					goto out;
 				}
 
-				mstb = port->mstb;
 				break;
 			}
 		}
 	}
 	kref_get(&mstb->kref);
+out:
 	mutex_unlock(&mgr->lock);
 	return mstb;
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/i915_gem_userptr.c linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/i915_gem_userptr.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/i915_gem_userptr.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/i915_gem_userptr.c	2015-11-09 17:37:56.000000000 -0500
@@ -804,7 +804,10 @@ static const struct drm_i915_gem_object_
  * Also note, that the object created here is not currently a "first class"
  * object, in that several ioctls are banned. These are the CPU access
  * ioctls: mmap(), pwrite and pread. In practice, you are expected to use
- * direct access via your pointer rather than use those ioctls.
+ * direct access via your pointer rather than use those ioctls. Another
+ * restriction is that we do not allow userptr surfaces to be pinned to the
+ * hardware and so we reject any attempt to create a framebuffer out of a
+ * userptr.
  *
  * If you think this is a good interface to use to pass GPU memory between
  * drivers, please use dma-buf instead. In fact, wherever possible use
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/intel_display.c linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/intel_display.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/intel_display.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/intel_display.c	2015-11-09 17:37:56.000000000 -0500
@@ -1729,6 +1729,8 @@ static void i9xx_enable_pll(struct intel
 			   I915_READ(DPLL(!crtc->pipe)) | DPLL_DVO_2X_MODE);
 	}
 
+	I915_WRITE(reg, dpll);
+
 	/* Wait for the clocks to stabilize. */
 	POSTING_READ(reg);
 	udelay(150);
@@ -14070,6 +14072,11 @@ static int intel_user_framebuffer_create
 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 	struct drm_i915_gem_object *obj = intel_fb->obj;
 
+	if (obj->userptr.mm) {
+		DRM_DEBUG("attempting to use a userptr for a framebuffer, denied\n");
+		return -EINVAL;
+	}
+
 	return drm_gem_handle_create(file, &obj->base, handle);
 }
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/intel_lrc.c linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/intel_lrc.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/intel_lrc.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/intel_lrc.c	2015-11-09 17:37:56.000000000 -0500
@@ -1250,6 +1250,7 @@ static int gen8_emit_flush_render(struct
 	if (flush_domains) {
 		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
 		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
+		flags |= PIPE_CONTROL_FLUSH_ENABLE;
 	}
 
 	if (invalidate_domains) {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/intel_ringbuffer.c linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/intel_ringbuffer.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/i915/intel_ringbuffer.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/i915/intel_ringbuffer.c	2015-11-09 17:37:56.000000000 -0500
@@ -342,6 +342,7 @@ gen7_render_ring_flush(struct intel_engi
 	if (flush_domains) {
 		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
 		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
+		flags |= PIPE_CONTROL_FLUSH_ENABLE;
 	}
 	if (invalidate_domains) {
 		flags |= PIPE_CONTROL_TLB_INVALIDATE;
@@ -412,6 +413,7 @@ gen8_render_ring_flush(struct intel_engi
 	if (flush_domains) {
 		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
 		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
+		flags |= PIPE_CONTROL_FLUSH_ENABLE;
 	}
 	if (invalidate_domains) {
 		flags |= PIPE_CONTROL_TLB_INVALIDATE;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/nouveau/nouveau_gem.c linux-libre-4.2.6-gnu/drivers/gpu/drm/nouveau/nouveau_gem.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/nouveau/nouveau_gem.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/nouveau/nouveau_gem.c	2015-11-09 17:37:56.000000000 -0500
@@ -227,11 +227,12 @@ nouveau_gem_info(struct drm_file *file_p
 	struct nouveau_bo *nvbo = nouveau_gem_object(gem);
 	struct nvkm_vma *vma;
 
-	if (nvbo->bo.mem.mem_type == TTM_PL_TT)
+	if (is_power_of_2(nvbo->valid_domains))
+		rep->domain = nvbo->valid_domains;
+	else if (nvbo->bo.mem.mem_type == TTM_PL_TT)
 		rep->domain = NOUVEAU_GEM_DOMAIN_GART;
 	else
 		rep->domain = NOUVEAU_GEM_DOMAIN_VRAM;
-
 	rep->offset = nvbo->bo.offset;
 	if (cli->vm) {
 		vma = nouveau_bo_vma_find(nvbo, cli->vm);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/atombios_encoders.c linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/atombios_encoders.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/atombios_encoders.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/atombios_encoders.c	2015-11-09 17:37:56.000000000 -0500
@@ -237,6 +237,7 @@ void radeon_atom_backlight_init(struct r
 	backlight_update_status(bd);
 
 	DRM_INFO("radeon atom DIG backlight initialized\n");
+	rdev->mode_info.bl_encoder = radeon_encoder;
 
 	return;
 
@@ -1624,9 +1625,14 @@ radeon_atom_encoder_dpms_avivo(struct dr
 		} else
 			atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
 		if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
-			struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
+			if (rdev->mode_info.bl_encoder) {
+				struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
 
-			atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
+				atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
+			} else {
+				args.ucAction = ATOM_LCD_BLON;
+				atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
+			}
 		}
 		break;
 	case DRM_MODE_DPMS_STANDBY:
@@ -1706,8 +1712,13 @@ radeon_atom_encoder_dpms_dig(struct drm_
 			if (ASIC_IS_DCE4(rdev))
 				atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
 		}
-		if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
-			atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
+		if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
+			if (rdev->mode_info.bl_encoder)
+				atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
+			else
+				atombios_dig_transmitter_setup(encoder,
+							       ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
+		}
 		if (ext_encoder)
 			atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
 		break;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon_encoders.c linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon_encoders.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon_encoders.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon_encoders.c	2015-11-09 17:37:56.000000000 -0500
@@ -194,7 +194,6 @@ static void radeon_encoder_add_backlight
 			radeon_atom_backlight_init(radeon_encoder, connector);
 		else
 			radeon_legacy_backlight_init(radeon_encoder, connector);
-		rdev->mode_info.bl_encoder = radeon_encoder;
 	}
 }
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon.h linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon.h
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon.h	2015-11-09 17:37:56.000000000 -0500
@@ -1658,6 +1658,7 @@ struct radeon_pm {
 	u8                      fan_max_rpm;
 	/* dpm */
 	bool                    dpm_enabled;
+	bool                    sysfs_initialized;
 	struct radeon_dpm       dpm;
 };
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon_legacy_encoders.c linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon_legacy_encoders.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon_legacy_encoders.c	2015-11-09 17:37:56.000000000 -0500
@@ -441,6 +441,7 @@ void radeon_legacy_backlight_init(struct
 	backlight_update_status(bd);
 
 	DRM_INFO("radeon legacy LVDS backlight initialized\n");
+	rdev->mode_info.bl_encoder = radeon_encoder;
 
 	return;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon_pm.c linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon_pm.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/radeon/radeon_pm.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/radeon/radeon_pm.c	2015-11-09 17:37:56.000000000 -0500
@@ -720,10 +720,14 @@ static umode_t hwmon_attributes_visible(
 	struct radeon_device *rdev = dev_get_drvdata(dev);
 	umode_t effective_mode = attr->mode;
 
-	/* Skip limit attributes if DPM is not enabled */
+	/* Skip attributes if DPM is not enabled */
 	if (rdev->pm.pm_method != PM_METHOD_DPM &&
 	    (attr == &sensor_dev_attr_temp1_crit.dev_attr.attr ||
-	     attr == &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr))
+	     attr == &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr ||
+	     attr == &sensor_dev_attr_pwm1.dev_attr.attr ||
+	     attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr ||
+	     attr == &sensor_dev_attr_pwm1_max.dev_attr.attr ||
+	     attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
 		return 0;
 
 	/* Skip fan attributes if fan is not present */
@@ -1529,19 +1533,23 @@ int radeon_pm_late_init(struct radeon_de
 
 	if (rdev->pm.pm_method == PM_METHOD_DPM) {
 		if (rdev->pm.dpm_enabled) {
-			ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state);
-			if (ret)
-				DRM_ERROR("failed to create device file for dpm state\n");
-			ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level);
-			if (ret)
-				DRM_ERROR("failed to create device file for dpm state\n");
-			/* XXX: these are noops for dpm but are here for backwards compat */
-			ret = device_create_file(rdev->dev, &dev_attr_power_profile);
-			if (ret)
-				DRM_ERROR("failed to create device file for power profile\n");
-			ret = device_create_file(rdev->dev, &dev_attr_power_method);
-			if (ret)
-				DRM_ERROR("failed to create device file for power method\n");
+			if (!rdev->pm.sysfs_initialized) {
+				ret = device_create_file(rdev->dev, &dev_attr_power_dpm_state);
+				if (ret)
+					DRM_ERROR("failed to create device file for dpm state\n");
+				ret = device_create_file(rdev->dev, &dev_attr_power_dpm_force_performance_level);
+				if (ret)
+					DRM_ERROR("failed to create device file for dpm state\n");
+				/* XXX: these are noops for dpm but are here for backwards compat */
+				ret = device_create_file(rdev->dev, &dev_attr_power_profile);
+				if (ret)
+					DRM_ERROR("failed to create device file for power profile\n");
+				ret = device_create_file(rdev->dev, &dev_attr_power_method);
+				if (ret)
+					DRM_ERROR("failed to create device file for power method\n");
+				if (!ret)
+					rdev->pm.sysfs_initialized = true;
+			}
 
 			mutex_lock(&rdev->pm.mutex);
 			ret = radeon_dpm_late_enable(rdev);
@@ -1557,7 +1565,8 @@ int radeon_pm_late_init(struct radeon_de
 			}
 		}
 	} else {
-		if (rdev->pm.num_power_states > 1) {
+		if ((rdev->pm.num_power_states > 1) &&
+		    (!rdev->pm.sysfs_initialized)) {
 			/* where's the best place to put these? */
 			ret = device_create_file(rdev->dev, &dev_attr_power_profile);
 			if (ret)
@@ -1565,6 +1574,8 @@ int radeon_pm_late_init(struct radeon_de
 			ret = device_create_file(rdev->dev, &dev_attr_power_method);
 			if (ret)
 				DRM_ERROR("failed to create device file for power method\n");
+			if (!ret)
+				rdev->pm.sysfs_initialized = true;
 		}
 	}
 	return ret;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c	2015-11-09 17:37:56.000000000 -0500
@@ -1458,6 +1458,9 @@ static void __exit vmwgfx_exit(void)
 	drm_pci_exit(&driver, &vmw_pci_driver);
 }
 
+MODULE_INFO(vmw_patch, "ed7d78b2");
+MODULE_INFO(vmw_patch, "54c12bc3");
+
 module_init(vmwgfx_init);
 module_exit(vmwgfx_exit);
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h	2015-11-09 17:37:56.000000000 -0500
@@ -636,7 +636,8 @@ extern int vmw_user_dmabuf_alloc(struct
 				 uint32_t size,
 				 bool shareable,
 				 uint32_t *handle,
-				 struct vmw_dma_buffer **p_dma_buf);
+				 struct vmw_dma_buffer **p_dma_buf,
+				 struct ttm_base_object **p_base);
 extern int vmw_user_dmabuf_reference(struct ttm_object_file *tfile,
 				     struct vmw_dma_buffer *dma_buf,
 				     uint32_t *handle);
@@ -650,7 +651,8 @@ extern uint32_t vmw_dmabuf_validate_node
 					 uint32_t cur_validate_node);
 extern void vmw_dmabuf_validate_clear(struct ttm_buffer_object *bo);
 extern int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile,
-				  uint32_t id, struct vmw_dma_buffer **out);
+				  uint32_t id, struct vmw_dma_buffer **out,
+				  struct ttm_base_object **base);
 extern int vmw_stream_claim_ioctl(struct drm_device *dev, void *data,
 				  struct drm_file *file_priv);
 extern int vmw_stream_unref_ioctl(struct drm_device *dev, void *data,
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c	2015-11-09 17:37:56.000000000 -0500
@@ -887,7 +887,8 @@ static int vmw_translate_mob_ptr(struct
 	struct vmw_relocation *reloc;
 	int ret;
 
-	ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo);
+	ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo,
+				     NULL);
 	if (unlikely(ret != 0)) {
 		DRM_ERROR("Could not find or use MOB buffer.\n");
 		ret = -EINVAL;
@@ -949,7 +950,8 @@ static int vmw_translate_guest_ptr(struc
 	struct vmw_relocation *reloc;
 	int ret;
 
-	ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo);
+	ret = vmw_user_dmabuf_lookup(sw_context->fp->tfile, handle, &vmw_bo,
+				     NULL);
 	if (unlikely(ret != 0)) {
 		DRM_ERROR("Could not find or use GMR region.\n");
 		ret = -EINVAL;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c	2015-11-09 17:37:56.000000000 -0500
@@ -484,7 +484,7 @@ int vmw_overlay_ioctl(struct drm_device
 		goto out_unlock;
 	}
 
-	ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &buf);
+	ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &buf, NULL);
 	if (ret)
 		goto out_unlock;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c	2015-11-09 17:37:56.000000000 -0500
@@ -356,7 +356,7 @@ int vmw_user_lookup_handle(struct vmw_pr
 	}
 
 	*out_surf = NULL;
-	ret = vmw_user_dmabuf_lookup(tfile, handle, out_buf);
+	ret = vmw_user_dmabuf_lookup(tfile, handle, out_buf, NULL);
 	return ret;
 }
 
@@ -483,7 +483,8 @@ int vmw_user_dmabuf_alloc(struct vmw_pri
 			  uint32_t size,
 			  bool shareable,
 			  uint32_t *handle,
-			  struct vmw_dma_buffer **p_dma_buf)
+			  struct vmw_dma_buffer **p_dma_buf,
+			  struct ttm_base_object **p_base)
 {
 	struct vmw_user_dma_buffer *user_bo;
 	struct ttm_buffer_object *tmp;
@@ -517,6 +518,10 @@ int vmw_user_dmabuf_alloc(struct vmw_pri
 	}
 
 	*p_dma_buf = &user_bo->dma;
+	if (p_base) {
+		*p_base = &user_bo->prime.base;
+		kref_get(&(*p_base)->refcount);
+	}
 	*handle = user_bo->prime.base.hash.key;
 
 out_no_base_object:
@@ -633,6 +638,7 @@ int vmw_user_dmabuf_synccpu_ioctl(struct
 	struct vmw_dma_buffer *dma_buf;
 	struct vmw_user_dma_buffer *user_bo;
 	struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
+	struct ttm_base_object *buffer_base;
 	int ret;
 
 	if ((arg->flags & (drm_vmw_synccpu_read | drm_vmw_synccpu_write)) == 0
@@ -645,7 +651,8 @@ int vmw_user_dmabuf_synccpu_ioctl(struct
 
 	switch (arg->op) {
 	case drm_vmw_synccpu_grab:
-		ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &dma_buf);
+		ret = vmw_user_dmabuf_lookup(tfile, arg->handle, &dma_buf,
+					     &buffer_base);
 		if (unlikely(ret != 0))
 			return ret;
 
@@ -653,6 +660,7 @@ int vmw_user_dmabuf_synccpu_ioctl(struct
 				       dma);
 		ret = vmw_user_dmabuf_synccpu_grab(user_bo, tfile, arg->flags);
 		vmw_dmabuf_unreference(&dma_buf);
+		ttm_base_object_unref(&buffer_base);
 		if (unlikely(ret != 0 && ret != -ERESTARTSYS &&
 			     ret != -EBUSY)) {
 			DRM_ERROR("Failed synccpu grab on handle 0x%08x.\n",
@@ -694,7 +702,8 @@ int vmw_dmabuf_alloc_ioctl(struct drm_de
 		return ret;
 
 	ret = vmw_user_dmabuf_alloc(dev_priv, vmw_fpriv(file_priv)->tfile,
-				    req->size, false, &handle, &dma_buf);
+				    req->size, false, &handle, &dma_buf,
+				    NULL);
 	if (unlikely(ret != 0))
 		goto out_no_dmabuf;
 
@@ -723,7 +732,8 @@ int vmw_dmabuf_unref_ioctl(struct drm_de
 }
 
 int vmw_user_dmabuf_lookup(struct ttm_object_file *tfile,
-			   uint32_t handle, struct vmw_dma_buffer **out)
+			   uint32_t handle, struct vmw_dma_buffer **out,
+			   struct ttm_base_object **p_base)
 {
 	struct vmw_user_dma_buffer *vmw_user_bo;
 	struct ttm_base_object *base;
@@ -745,7 +755,10 @@ int vmw_user_dmabuf_lookup(struct ttm_ob
 	vmw_user_bo = container_of(base, struct vmw_user_dma_buffer,
 				   prime.base);
 	(void)ttm_bo_reference(&vmw_user_bo->dma.base);
-	ttm_base_object_unref(&base);
+	if (p_base)
+		*p_base = base;
+	else
+		ttm_base_object_unref(&base);
 	*out = &vmw_user_bo->dma;
 
 	return 0;
@@ -1006,7 +1019,7 @@ int vmw_dumb_create(struct drm_file *fil
 
 	ret = vmw_user_dmabuf_alloc(dev_priv, vmw_fpriv(file_priv)->tfile,
 				    args->size, false, &args->handle,
-				    &dma_buf);
+				    &dma_buf, NULL);
 	if (unlikely(ret != 0))
 		goto out_no_dmabuf;
 
@@ -1034,7 +1047,7 @@ int vmw_dumb_map_offset(struct drm_file
 	struct vmw_dma_buffer *out_buf;
 	int ret;
 
-	ret = vmw_user_dmabuf_lookup(tfile, handle, &out_buf);
+	ret = vmw_user_dmabuf_lookup(tfile, handle, &out_buf, NULL);
 	if (ret != 0)
 		return -EINVAL;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c	2015-11-09 17:37:56.000000000 -0500
@@ -470,7 +470,7 @@ int vmw_shader_define_ioctl(struct drm_d
 
 	if (arg->buffer_handle != SVGA3D_INVALID_ID) {
 		ret = vmw_user_dmabuf_lookup(tfile, arg->buffer_handle,
-					     &buffer);
+					     &buffer, NULL);
 		if (unlikely(ret != 0)) {
 			DRM_ERROR("Could not find buffer for shader "
 				  "creation.\n");
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
--- linux-libre-4.2.5-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c	2015-11-09 17:37:56.000000000 -0500
@@ -43,6 +43,7 @@ struct vmw_user_surface {
 	struct vmw_surface srf;
 	uint32_t size;
 	struct drm_master *master;
+	struct ttm_base_object *backup_base;
 };
 
 /**
@@ -652,6 +653,8 @@ static void vmw_user_surface_base_releas
 	struct vmw_resource *res = &user_srf->srf.res;
 
 	*p_base = NULL;
+	if (user_srf->backup_base)
+		ttm_base_object_unref(&user_srf->backup_base);
 	vmw_resource_unreference(&res);
 }
 
@@ -846,7 +849,8 @@ int vmw_surface_define_ioctl(struct drm_
 					    res->backup_size,
 					    true,
 					    &backup_handle,
-					    &res->backup);
+					    &res->backup,
+					    &user_srf->backup_base);
 		if (unlikely(ret != 0)) {
 			vmw_resource_unreference(&res);
 			goto out_unlock;
@@ -1309,7 +1313,8 @@ int vmw_gb_surface_define_ioctl(struct d
 
 	if (req->buffer_handle != SVGA3D_INVALID_ID) {
 		ret = vmw_user_dmabuf_lookup(tfile, req->buffer_handle,
-					     &res->backup);
+					     &res->backup,
+					     &user_srf->backup_base);
 	} else if (req->drm_surface_flags &
 		   drm_vmw_surface_flag_create_buffer)
 		ret = vmw_user_dmabuf_alloc(dev_priv, tfile,
@@ -1317,7 +1322,8 @@ int vmw_gb_surface_define_ioctl(struct d
 					    req->drm_surface_flags &
 					    drm_vmw_surface_flag_shareable,
 					    &backup_handle,
-					    &res->backup);
+					    &res->backup,
+					    &user_srf->backup_base);
 
 	if (unlikely(ret != 0)) {
 		vmw_resource_unreference(&res);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/i2c/busses/i2c-mv64xxx.c linux-libre-4.2.6-gnu/drivers/i2c/busses/i2c-mv64xxx.c
--- linux-libre-4.2.5-gnu/drivers/i2c/busses/i2c-mv64xxx.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/i2c/busses/i2c-mv64xxx.c	2015-11-09 17:37:56.000000000 -0500
@@ -669,8 +669,6 @@ mv64xxx_i2c_can_offload(struct mv64xxx_i
 	struct i2c_msg *msgs = drv_data->msgs;
 	int num = drv_data->num_msgs;
 
-	return false;
-
 	if (!drv_data->offload_enabled)
 		return false;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/iio/accel/st_accel_core.c linux-libre-4.2.6-gnu/drivers/iio/accel/st_accel_core.c
--- linux-libre-4.2.5-gnu/drivers/iio/accel/st_accel_core.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/iio/accel/st_accel_core.c	2015-11-09 17:37:56.000000000 -0500
@@ -149,8 +149,6 @@
 #define ST_ACCEL_4_BDU_MASK			0x40
 #define ST_ACCEL_4_DRDY_IRQ_ADDR		0x21
 #define ST_ACCEL_4_DRDY_IRQ_INT1_MASK		0x04
-#define ST_ACCEL_4_IG1_EN_ADDR			0x21
-#define ST_ACCEL_4_IG1_EN_MASK			0x08
 #define ST_ACCEL_4_MULTIREAD_BIT		true
 
 /* CUSTOM VALUES FOR SENSOR 5 */
@@ -484,10 +482,6 @@ static const struct st_sensor_settings s
 		.drdy_irq = {
 			.addr = ST_ACCEL_4_DRDY_IRQ_ADDR,
 			.mask_int1 = ST_ACCEL_4_DRDY_IRQ_INT1_MASK,
-			.ig1 = {
-				.en_addr = ST_ACCEL_4_IG1_EN_ADDR,
-				.en_mask = ST_ACCEL_4_IG1_EN_MASK,
-			},
 		},
 		.multi_read_bit = ST_ACCEL_4_MULTIREAD_BIT,
 		.bootime = 2, /* guess */
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/infiniband/core/cm.c linux-libre-4.2.6-gnu/drivers/infiniband/core/cm.c
--- linux-libre-4.2.5-gnu/drivers/infiniband/core/cm.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/infiniband/core/cm.c	2015-11-09 17:37:56.000000000 -0500
@@ -873,6 +873,11 @@ retest:
 	case IB_CM_SIDR_REQ_RCVD:
 		spin_unlock_irq(&cm_id_priv->lock);
 		cm_reject_sidr_req(cm_id_priv, IB_SIDR_REJECT);
+		spin_lock_irq(&cm.lock);
+		if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node))
+			rb_erase(&cm_id_priv->sidr_id_node,
+				 &cm.remote_sidr_table);
+		spin_unlock_irq(&cm.lock);
 		break;
 	case IB_CM_REQ_SENT:
 	case IB_CM_MRA_REQ_RCVD:
@@ -3112,7 +3117,10 @@ int ib_send_cm_sidr_rep(struct ib_cm_id
 	spin_unlock_irqrestore(&cm_id_priv->lock, flags);
 
 	spin_lock_irqsave(&cm.lock, flags);
-	rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
+	if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node)) {
+		rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
+		RB_CLEAR_NODE(&cm_id_priv->sidr_id_node);
+	}
 	spin_unlock_irqrestore(&cm.lock, flags);
 	return 0;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/input/mouse/alps.c linux-libre-4.2.6-gnu/drivers/input/mouse/alps.c
--- linux-libre-4.2.5-gnu/drivers/input/mouse/alps.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/input/mouse/alps.c	2015-11-09 17:37:56.000000000 -0500
@@ -100,7 +100,7 @@ static const struct alps_nibble_commands
 #define ALPS_FOUR_BUTTONS	0x40	/* 4 direction button present */
 #define ALPS_PS2_INTERLEAVED	0x80	/* 3-byte PS/2 packet interleaved with
 					   6-byte ALPS packet */
-#define ALPS_DELL		0x100	/* device is a Dell laptop */
+#define ALPS_STICK_BITS		0x100	/* separate stick button bits */
 #define ALPS_BUTTONPAD		0x200	/* device is a clickpad */
 
 static const struct alps_model_info alps_model_data[] = {
@@ -159,6 +159,43 @@ static const struct alps_protocol_info a
 	ALPS_PROTO_V8, 0x18, 0x18, 0
 };
 
+/*
+ * Some v2 models report the stick buttons in separate bits
+ */
+static const struct dmi_system_id alps_dmi_has_separate_stick_buttons[] = {
+#if defined(CONFIG_DMI) && defined(CONFIG_X86)
+	{
+		/* Extrapolated from other entries */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D420"),
+		},
+	},
+	{
+		/* Reported-by: Hans de Bruin <jmdebruin@xmsnet.nl> */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D430"),
+		},
+	},
+	{
+		/* Reported-by: Hans de Goede <hdegoede@redhat.com> */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D620"),
+		},
+	},
+	{
+		/* Extrapolated from other entries */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D630"),
+		},
+	},
+#endif
+	{ }
+};
+
 static void alps_set_abs_params_st(struct alps_data *priv,
 				   struct input_dev *dev1);
 static void alps_set_abs_params_semi_mt(struct alps_data *priv,
@@ -253,9 +290,8 @@ static void alps_process_packet_v1_v2(st
 		return;
 	}
 
-	/* Dell non interleaved V2 dualpoint has separate stick button bits */
-	if (priv->proto_version == ALPS_PROTO_V2 &&
-	    priv->flags == (ALPS_DELL | ALPS_PASS | ALPS_DUALPOINT)) {
+	/* Some models have separate stick button bits */
+	if (priv->flags & ALPS_STICK_BITS) {
 		left |= packet[0] & 1;
 		right |= packet[0] & 2;
 		middle |= packet[0] & 4;
@@ -2552,8 +2588,6 @@ static int alps_set_protocol(struct psmo
 	priv->byte0 = protocol->byte0;
 	priv->mask0 = protocol->mask0;
 	priv->flags = protocol->flags;
-	if (dmi_name_in_vendors("Dell"))
-		priv->flags |= ALPS_DELL;
 
 	priv->x_max = 2000;
 	priv->y_max = 1400;
@@ -2568,6 +2602,8 @@ static int alps_set_protocol(struct psmo
 		priv->set_abs_params = alps_set_abs_params_st;
 		priv->x_max = 1023;
 		priv->y_max = 767;
+		if (dmi_check_system(alps_dmi_has_separate_stick_buttons))
+			priv->flags |= ALPS_STICK_BITS;
 		break;
 
 	case ALPS_PROTO_V3:
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/iommu/amd_iommu.c linux-libre-4.2.6-gnu/drivers/iommu/amd_iommu.c
--- linux-libre-4.2.5-gnu/drivers/iommu/amd_iommu.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/iommu/amd_iommu.c	2015-11-09 17:37:56.000000000 -0500
@@ -1974,8 +1974,8 @@ static void set_dte_entry(u16 devid, str
 static void clear_dte_entry(u16 devid)
 {
 	/* remove entry from the device table seen by the hardware */
-	amd_iommu_dev_table[devid].data[0] = IOMMU_PTE_P | IOMMU_PTE_TV;
-	amd_iommu_dev_table[devid].data[1] = 0;
+	amd_iommu_dev_table[devid].data[0]  = IOMMU_PTE_P | IOMMU_PTE_TV;
+	amd_iommu_dev_table[devid].data[1] &= DTE_FLAG_MASK;
 
 	amd_iommu_apply_erratum_63(devid);
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/iommu/amd_iommu_types.h linux-libre-4.2.6-gnu/drivers/iommu/amd_iommu_types.h
--- linux-libre-4.2.5-gnu/drivers/iommu/amd_iommu_types.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/iommu/amd_iommu_types.h	2015-11-09 17:37:56.000000000 -0500
@@ -295,6 +295,7 @@
 #define IOMMU_PTE_IR (1ULL << 61)
 #define IOMMU_PTE_IW (1ULL << 62)
 
+#define DTE_FLAG_MASK	(0x3ffULL << 32)
 #define DTE_FLAG_IOTLB	(0x01UL << 32)
 #define DTE_FLAG_GV	(0x01ULL << 55)
 #define DTE_GLX_SHIFT	(56)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/iommu/amd_iommu_v2.c linux-libre-4.2.6-gnu/drivers/iommu/amd_iommu_v2.c
--- linux-libre-4.2.5-gnu/drivers/iommu/amd_iommu_v2.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/iommu/amd_iommu_v2.c	2015-11-09 17:37:56.000000000 -0500
@@ -516,6 +516,13 @@ static void do_fault(struct work_struct
 		goto out;
 	}
 
+	if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))) {
+		/* handle_mm_fault would BUG_ON() */
+		up_read(&mm->mmap_sem);
+		handle_fault_error(fault);
+		goto out;
+	}
+
 	ret = handle_mm_fault(mm, vma, address, write);
 	if (ret & VM_FAULT_ERROR) {
 		/* failed to service fault */
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/iommu/intel-iommu.c linux-libre-4.2.6-gnu/drivers/iommu/intel-iommu.c
--- linux-libre-4.2.5-gnu/drivers/iommu/intel-iommu.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/iommu/intel-iommu.c	2015-11-09 17:37:56.000000000 -0500
@@ -2109,15 +2109,19 @@ static int __domain_mapping(struct dmar_
 				return -ENOMEM;
 			/* It is large page*/
 			if (largepage_lvl > 1) {
+				unsigned long nr_superpages, end_pfn;
+
 				pteval |= DMA_PTE_LARGE_PAGE;
 				lvl_pages = lvl_to_nr_pages(largepage_lvl);
+
+				nr_superpages = sg_res / lvl_pages;
+				end_pfn = iov_pfn + nr_superpages * lvl_pages - 1;
+
 				/*
 				 * Ensure that old small page tables are
-				 * removed to make room for superpage,
-				 * if they exist.
+				 * removed to make room for superpage(s).
 				 */
-				dma_pte_free_pagetable(domain, iov_pfn,
-						       iov_pfn + lvl_pages - 1);
+				dma_pte_free_pagetable(domain, iov_pfn, end_pfn);
 			} else {
 				pteval &= ~(uint64_t)DMA_PTE_LARGE_PAGE;
 			}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/irqchip/irq-tegra.c linux-libre-4.2.6-gnu/drivers/irqchip/irq-tegra.c
--- linux-libre-4.2.5-gnu/drivers/irqchip/irq-tegra.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/irqchip/irq-tegra.c	2015-11-09 17:37:56.000000000 -0500
@@ -215,6 +215,7 @@ static struct irq_chip tegra_ictlr_chip
 	.irq_unmask		= tegra_unmask,
 	.irq_retrigger		= tegra_retrigger,
 	.irq_set_wake		= tegra_set_wake,
+	.irq_set_type		= irq_chip_set_type_parent,
 	.flags			= IRQCHIP_MASK_ON_SUSPEND,
 #ifdef CONFIG_SMP
 	.irq_set_affinity	= irq_chip_set_affinity_parent,
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/dm-cache-metadata.c linux-libre-4.2.6-gnu/drivers/md/dm-cache-metadata.c
--- linux-libre-4.2.5-gnu/drivers/md/dm-cache-metadata.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/dm-cache-metadata.c	2015-11-09 17:37:56.000000000 -0500
@@ -634,10 +634,10 @@ static int __commit_transaction(struct d
 
 	disk_super = dm_block_data(sblock);
 
+	disk_super->flags = cpu_to_le32(cmd->flags);
 	if (mutator)
 		update_flags(disk_super, mutator);
 
-	disk_super->flags = cpu_to_le32(cmd->flags);
 	disk_super->mapping_root = cpu_to_le64(cmd->root);
 	disk_super->hint_root = cpu_to_le64(cmd->hint_root);
 	disk_super->discard_root = cpu_to_le64(cmd->discard_root);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/md.c linux-libre-4.2.6-gnu/drivers/md/md.c
--- linux-libre-4.2.5-gnu/drivers/md/md.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/md.c	2015-11-09 17:37:56.000000000 -0500
@@ -8030,8 +8030,7 @@ static int remove_and_add_spares(struct
 		       !test_bit(Bitmap_sync, &rdev->flags)))
 			continue;
 
-		if (rdev->saved_raid_disk < 0)
-			rdev->recovery_offset = 0;
+		rdev->recovery_offset = 0;
 		if (mddev->pers->
 		    hot_add_disk(mddev, rdev) == 0) {
 			if (sysfs_link_rdev(mddev, rdev))
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/persistent-data/dm-btree.c linux-libre-4.2.6-gnu/drivers/md/persistent-data/dm-btree.c
--- linux-libre-4.2.5-gnu/drivers/md/persistent-data/dm-btree.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/persistent-data/dm-btree.c	2015-11-09 17:37:56.000000000 -0500
@@ -523,7 +523,7 @@ static int btree_split_beneath(struct sh
 
 	r = new_block(s->info, &right);
 	if (r < 0) {
-		/* FIXME: put left */
+		unlock_block(s->info, left);
 		return r;
 	}
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/persistent-data/dm-btree-remove.c linux-libre-4.2.6-gnu/drivers/md/persistent-data/dm-btree-remove.c
--- linux-libre-4.2.5-gnu/drivers/md/persistent-data/dm-btree-remove.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/persistent-data/dm-btree-remove.c	2015-11-09 17:37:56.000000000 -0500
@@ -301,11 +301,16 @@ static void redistribute3(struct dm_btre
 {
 	int s;
 	uint32_t max_entries = le32_to_cpu(left->header.max_entries);
-	unsigned target = (nr_left + nr_center + nr_right) / 3;
-	BUG_ON(target > max_entries);
+	unsigned total = nr_left + nr_center + nr_right;
+	unsigned target_right = total / 3;
+	unsigned remainder = (target_right * 3) != total;
+	unsigned target_left = target_right + remainder;
+
+	BUG_ON(target_left > max_entries);
+	BUG_ON(target_right > max_entries);
 
 	if (nr_left < nr_right) {
-		s = nr_left - target;
+		s = nr_left - target_left;
 
 		if (s < 0 && nr_center < -s) {
 			/* not enough in central node */
@@ -316,10 +321,10 @@ static void redistribute3(struct dm_btre
 		} else
 			shift(left, center, s);
 
-		shift(center, right, target - nr_right);
+		shift(center, right, target_right - nr_right);
 
 	} else {
-		s = target - nr_right;
+		s = target_right - nr_right;
 		if (s > 0 && nr_center < s) {
 			/* not enough in central node */
 			shift(center, right, nr_center);
@@ -329,7 +334,7 @@ static void redistribute3(struct dm_btre
 		} else
 			shift(center, right, s);
 
-		shift(left, center, nr_left - target);
+		shift(left, center, nr_left - target_left);
 	}
 
 	*key_ptr(parent, c->index) = center->keys[0];
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/raid10.c linux-libre-4.2.6-gnu/drivers/md/raid10.c
--- linux-libre-4.2.5-gnu/drivers/md/raid10.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/raid10.c	2015-11-09 17:37:56.000000000 -0500
@@ -2580,7 +2580,7 @@ static int narrow_write_error(struct r10
 				   choose_data_offset(r10_bio, rdev) +
 				   (sector - r10_bio->sector));
 		wbio->bi_bdev = rdev->bdev;
-		if (submit_bio_wait(WRITE, wbio) == 0)
+		if (submit_bio_wait(WRITE, wbio) < 0)
 			/* Failure! */
 			ok = rdev_set_badblocks(rdev, sector,
 						sectors, 0)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/raid1.c linux-libre-4.2.6-gnu/drivers/md/raid1.c
--- linux-libre-4.2.5-gnu/drivers/md/raid1.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/raid1.c	2015-11-09 17:37:56.000000000 -0500
@@ -2249,7 +2249,7 @@ static int narrow_write_error(struct r1b
 		bio_trim(wbio, sector - r1_bio->sector, sectors);
 		wbio->bi_iter.bi_sector += rdev->data_offset;
 		wbio->bi_bdev = rdev->bdev;
-		if (submit_bio_wait(WRITE, wbio) == 0)
+		if (submit_bio_wait(WRITE, wbio) < 0)
 			/* failure! */
 			ok = rdev_set_badblocks(rdev, sector,
 						sectors, 0)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/md/raid5.c linux-libre-4.2.6-gnu/drivers/md/raid5.c
--- linux-libre-4.2.5-gnu/drivers/md/raid5.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/md/raid5.c	2015-11-09 17:37:56.000000000 -0500
@@ -3505,6 +3505,7 @@ returnbi:
 		}
 	if (!discard_pending &&
 	    test_bit(R5_Discard, &sh->dev[sh->pd_idx].flags)) {
+		int hash;
 		clear_bit(R5_Discard, &sh->dev[sh->pd_idx].flags);
 		clear_bit(R5_UPTODATE, &sh->dev[sh->pd_idx].flags);
 		if (sh->qd_idx >= 0) {
@@ -3518,16 +3519,17 @@ returnbi:
 		 * no updated data, so remove it from hash list and the stripe
 		 * will be reinitialized
 		 */
-		spin_lock_irq(&conf->device_lock);
 unhash:
+		hash = sh->hash_lock_index;
+		spin_lock_irq(conf->hash_locks + hash);
 		remove_hash(sh);
+		spin_unlock_irq(conf->hash_locks + hash);
 		if (head_sh->batch_head) {
 			sh = list_first_entry(&sh->batch_list,
 					      struct stripe_head, batch_list);
 			if (sh != head_sh)
 					goto unhash;
 		}
-		spin_unlock_irq(&conf->device_lock);
 		sh = head_sh;
 
 		if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state))
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/media/dvb-frontends/m88ds3103.c linux-libre-4.2.6-gnu/drivers/media/dvb-frontends/m88ds3103.c
--- linux-libre-4.2.5-gnu/drivers/media/dvb-frontends/m88ds3103.c	2015-10-27 00:04:16.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/media/dvb-frontends/m88ds3103.c	2015-11-10 06:22:14.000000000 -0500
@@ -18,6 +18,27 @@
 
 static struct dvb_frontend_ops m88ds3103_ops;
 
+/* write single register with mask */
+static int m88ds3103_update_bits(struct m88ds3103_dev *dev,
+				u8 reg, u8 mask, u8 val)
+{
+	int ret;
+	u8 tmp;
+
+	/* no need for read if whole reg is written */
+	if (mask != 0xff) {
+		ret = regmap_bulk_read(dev->regmap, reg, &tmp, 1);
+		if (ret)
+			return ret;
+
+		val &= mask;
+		tmp &= ~mask;
+		val |= tmp;
+	}
+
+	return regmap_bulk_write(dev->regmap, reg, &val, 1);
+}
+
 /* write reg val table using reg addr auto increment */
 static int m88ds3103_wr_reg_val_tab(struct m88ds3103_dev *dev,
 		const struct m88ds3103_reg_val *tab, int tab_len)
@@ -394,10 +415,10 @@ static int m88ds3103_set_frontend(struct
 			u8tmp2 = 0x00; /* 0b00 */
 			break;
 		}
-		ret = regmap_update_bits(dev->regmap, 0x22, 0xc0, u8tmp1 << 6);
+		ret = m88ds3103_update_bits(dev, 0x22, 0xc0, u8tmp1 << 6);
 		if (ret)
 			goto err;
-		ret = regmap_update_bits(dev->regmap, 0x24, 0xc0, u8tmp2 << 6);
+		ret = m88ds3103_update_bits(dev, 0x24, 0xc0, u8tmp2 << 6);
 		if (ret)
 			goto err;
 	}
@@ -455,13 +476,13 @@ static int m88ds3103_set_frontend(struct
 			if (ret)
 				goto err;
 		}
-		ret = regmap_update_bits(dev->regmap, 0x9d, 0x08, 0x08);
+		ret = m88ds3103_update_bits(dev, 0x9d, 0x08, 0x08);
 		if (ret)
 			goto err;
 		ret = regmap_write(dev->regmap, 0xf1, 0x01);
 		if (ret)
 			goto err;
-		ret = regmap_update_bits(dev->regmap, 0x30, 0x80, 0x80);
+		ret = m88ds3103_update_bits(dev, 0x30, 0x80, 0x80);
 		if (ret)
 			goto err;
 	}
@@ -498,7 +519,7 @@ static int m88ds3103_set_frontend(struct
 	switch (dev->cfg->ts_mode) {
 	case M88DS3103_TS_SERIAL:
 	case M88DS3103_TS_SERIAL_D7:
-		ret = regmap_update_bits(dev->regmap, 0x29, 0x20, u8tmp1);
+		ret = m88ds3103_update_bits(dev, 0x29, 0x20, u8tmp1);
 		if (ret)
 			goto err;
 		u8tmp1 = 0;
@@ -567,11 +588,11 @@ static int m88ds3103_set_frontend(struct
 	if (ret)
 		goto err;
 
-	ret = regmap_update_bits(dev->regmap, 0x4d, 0x02, dev->cfg->spec_inv << 1);
+	ret = m88ds3103_update_bits(dev, 0x4d, 0x02, dev->cfg->spec_inv << 1);
 	if (ret)
 		goto err;
 
-	ret = regmap_update_bits(dev->regmap, 0x30, 0x10, dev->cfg->agc_inv << 4);
+	ret = m88ds3103_update_bits(dev, 0x30, 0x10, dev->cfg->agc_inv << 4);
 	if (ret)
 		goto err;
 
@@ -625,13 +646,13 @@ static int m88ds3103_init(struct dvb_fro
 	dev->warm = false;
 
 	/* wake up device from sleep */
-	ret = regmap_update_bits(dev->regmap, 0x08, 0x01, 0x01);
+	ret = m88ds3103_update_bits(dev, 0x08, 0x01, 0x01);
 	if (ret)
 		goto err;
-	ret = regmap_update_bits(dev->regmap, 0x04, 0x01, 0x00);
+	ret = m88ds3103_update_bits(dev, 0x04, 0x01, 0x00);
 	if (ret)
 		goto err;
-	ret = regmap_update_bits(dev->regmap, 0x23, 0x10, 0x00);
+	ret = m88ds3103_update_bits(dev, 0x23, 0x10, 0x00);
 	if (ret)
 		goto err;
 
@@ -749,18 +770,18 @@ static int m88ds3103_sleep(struct dvb_fr
 		utmp = 0x29;
 	else
 		utmp = 0x27;
-	ret = regmap_update_bits(dev->regmap, utmp, 0x01, 0x00);
+	ret = m88ds3103_update_bits(dev, utmp, 0x01, 0x00);
 	if (ret)
 		goto err;
 
 	/* sleep */
-	ret = regmap_update_bits(dev->regmap, 0x08, 0x01, 0x00);
+	ret = m88ds3103_update_bits(dev, 0x08, 0x01, 0x00);
 	if (ret)
 		goto err;
-	ret = regmap_update_bits(dev->regmap, 0x04, 0x01, 0x01);
+	ret = m88ds3103_update_bits(dev, 0x04, 0x01, 0x01);
 	if (ret)
 		goto err;
-	ret = regmap_update_bits(dev->regmap, 0x23, 0x10, 0x10);
+	ret = m88ds3103_update_bits(dev, 0x23, 0x10, 0x10);
 	if (ret)
 		goto err;
 
@@ -992,12 +1013,12 @@ static int m88ds3103_set_tone(struct dvb
 	}
 
 	utmp = tone << 7 | dev->cfg->envelope_mode << 5;
-	ret = regmap_update_bits(dev->regmap, 0xa2, 0xe0, utmp);
+	ret = m88ds3103_update_bits(dev, 0xa2, 0xe0, utmp);
 	if (ret)
 		goto err;
 
 	utmp = 1 << 2;
-	ret = regmap_update_bits(dev->regmap, 0xa1, reg_a1_mask, utmp);
+	ret = m88ds3103_update_bits(dev, 0xa1, reg_a1_mask, utmp);
 	if (ret)
 		goto err;
 
@@ -1047,7 +1068,7 @@ static int m88ds3103_set_voltage(struct
 	voltage_dis ^= dev->cfg->lnb_en_pol;
 
 	utmp = voltage_dis << 1 | voltage_sel << 0;
-	ret = regmap_update_bits(dev->regmap, 0xa2, 0x03, utmp);
+	ret = m88ds3103_update_bits(dev, 0xa2, 0x03, utmp);
 	if (ret)
 		goto err;
 
@@ -1080,7 +1101,7 @@ static int m88ds3103_diseqc_send_master_
 	}
 
 	utmp = dev->cfg->envelope_mode << 5;
-	ret = regmap_update_bits(dev->regmap, 0xa2, 0xe0, utmp);
+	ret = m88ds3103_update_bits(dev, 0xa2, 0xe0, utmp);
 	if (ret)
 		goto err;
 
@@ -1115,12 +1136,12 @@ static int m88ds3103_diseqc_send_master_
 	} else {
 		dev_dbg(&client->dev, "diseqc tx timeout\n");
 
-		ret = regmap_update_bits(dev->regmap, 0xa1, 0xc0, 0x40);
+		ret = m88ds3103_update_bits(dev, 0xa1, 0xc0, 0x40);
 		if (ret)
 			goto err;
 	}
 
-	ret = regmap_update_bits(dev->regmap, 0xa2, 0xc0, 0x80);
+	ret = m88ds3103_update_bits(dev, 0xa2, 0xc0, 0x80);
 	if (ret)
 		goto err;
 
@@ -1152,7 +1173,7 @@ static int m88ds3103_diseqc_send_burst(s
 	}
 
 	utmp = dev->cfg->envelope_mode << 5;
-	ret = regmap_update_bits(dev->regmap, 0xa2, 0xe0, utmp);
+	ret = m88ds3103_update_bits(dev, 0xa2, 0xe0, utmp);
 	if (ret)
 		goto err;
 
@@ -1194,12 +1215,12 @@ static int m88ds3103_diseqc_send_burst(s
 	} else {
 		dev_dbg(&client->dev, "diseqc tx timeout\n");
 
-		ret = regmap_update_bits(dev->regmap, 0xa1, 0xc0, 0x40);
+		ret = m88ds3103_update_bits(dev, 0xa1, 0xc0, 0x40);
 		if (ret)
 			goto err;
 	}
 
-	ret = regmap_update_bits(dev->regmap, 0xa2, 0xc0, 0x80);
+	ret = m88ds3103_update_bits(dev, 0xa2, 0xc0, 0x80);
 	if (ret)
 		goto err;
 
@@ -1435,13 +1456,13 @@ static int m88ds3103_probe(struct i2c_cl
 		goto err_kfree;
 
 	/* sleep */
-	ret = regmap_update_bits(dev->regmap, 0x08, 0x01, 0x00);
+	ret = m88ds3103_update_bits(dev, 0x08, 0x01, 0x00);
 	if (ret)
 		goto err_kfree;
-	ret = regmap_update_bits(dev->regmap, 0x04, 0x01, 0x01);
+	ret = m88ds3103_update_bits(dev, 0x04, 0x01, 0x01);
 	if (ret)
 		goto err_kfree;
-	ret = regmap_update_bits(dev->regmap, 0x23, 0x10, 0x10);
+	ret = m88ds3103_update_bits(dev, 0x23, 0x10, 0x10);
 	if (ret)
 		goto err_kfree;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/media/dvb-frontends/si2168.c linux-libre-4.2.6-gnu/drivers/media/dvb-frontends/si2168.c
--- linux-libre-4.2.5-gnu/drivers/media/dvb-frontends/si2168.c	2015-10-27 00:04:34.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/media/dvb-frontends/si2168.c	2015-11-10 06:22:32.000000000 -0500
@@ -502,6 +502,10 @@ static int si2168_init(struct dvb_fronte
 		/* firmware is in the new format */
 		for (remaining = fw->size; remaining > 0; remaining -= 17) {
 			len = fw->data[fw->size - remaining];
+			if (len > SI2168_ARGLEN) {
+				ret = -EINVAL;
+				break;
+			}
 			memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len);
 			cmd.wlen = len;
 			cmd.rlen = 1;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/media/tuners/si2157.c linux-libre-4.2.6-gnu/drivers/media/tuners/si2157.c
--- linux-libre-4.2.5-gnu/drivers/media/tuners/si2157.c	2015-10-27 00:02:02.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/media/tuners/si2157.c	2015-11-10 06:20:14.000000000 -0500
@@ -166,6 +166,10 @@ static int si2157_init(struct dvb_fronte
 
 	for (remaining = fw->size; remaining > 0; remaining -= 17) {
 		len = fw->data[fw->size - remaining];
+		if (len > SI2157_ARGLEN) {
+			dev_err(&client->dev, "Bad firmware length\n");
+			goto err_release_firmware;
+		}
 		memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len);
 		cmd.wlen = len;
 		cmd.rlen = 1;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.c linux-libre-4.2.6-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
--- linux-libre-4.2.5-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.c	2015-11-09 17:37:56.000000000 -0500
@@ -34,6 +34,14 @@ static int rtl28xxu_ctrl_msg(struct dvb_
 	unsigned int pipe;
 	u8 requesttype;
 
+	mutex_lock(&d->usb_mutex);
+
+	if (req->size > sizeof(dev->buf)) {
+		dev_err(&d->intf->dev, "too large message %u\n", req->size);
+		ret = -EINVAL;
+		goto err_mutex_unlock;
+	}
+
 	if (req->index & CMD_WR_FLAG) {
 		/* write */
 		memcpy(dev->buf, req->data, req->size);
@@ -50,14 +58,17 @@ static int rtl28xxu_ctrl_msg(struct dvb_
 	dvb_usb_dbg_usb_control_msg(d->udev, 0, requesttype, req->value,
 			req->index, dev->buf, req->size);
 	if (ret < 0)
-		goto err;
+		goto err_mutex_unlock;
 
 	/* read request, copy returned data to return buf */
 	if (requesttype == (USB_TYPE_VENDOR | USB_DIR_IN))
 		memcpy(req->data, dev->buf, req->size);
 
+	mutex_unlock(&d->usb_mutex);
+
 	return 0;
-err:
+err_mutex_unlock:
+	mutex_unlock(&d->usb_mutex);
 	dev_dbg(&d->intf->dev, "failed=%d\n", ret);
 	return ret;
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.h linux-libre-4.2.6-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.h
--- linux-libre-4.2.5-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/media/usb/dvb-usb-v2/rtl28xxu.h	2015-11-09 17:37:56.000000000 -0500
@@ -71,7 +71,7 @@
 
 
 struct rtl28xxu_dev {
-	u8 buf[28];
+	u8 buf[128];
 	u8 chip_id;
 	u8 tuner;
 	char *tuner_name;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/mmc/card/mmc_test.c linux-libre-4.2.6-gnu/drivers/mmc/card/mmc_test.c
--- linux-libre-4.2.5-gnu/drivers/mmc/card/mmc_test.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/mmc/card/mmc_test.c	2015-11-09 17:37:56.000000000 -0500
@@ -2263,15 +2263,12 @@ static int mmc_test_profile_sglen_r_nonb
 /*
  * eMMC hardware reset.
  */
-static int mmc_test_hw_reset(struct mmc_test_card *test)
+static int mmc_test_reset(struct mmc_test_card *test)
 {
 	struct mmc_card *card = test->card;
 	struct mmc_host *host = card->host;
 	int err;
 
-	if (!mmc_card_mmc(card) || !mmc_can_reset(card))
-		return RESULT_UNSUP_CARD;
-
 	err = mmc_hw_reset(host);
 	if (!err)
 		return RESULT_OK;
@@ -2605,8 +2602,8 @@ static const struct mmc_test_case mmc_te
 	},
 
 	{
-		.name = "eMMC hardware reset",
-		.run = mmc_test_hw_reset,
+		.name = "Reset test",
+		.run = mmc_test_reset,
 	},
 };
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/mmc/core/mmc.c linux-libre-4.2.6-gnu/drivers/mmc/core/mmc.c
--- linux-libre-4.2.5-gnu/drivers/mmc/core/mmc.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/mmc/core/mmc.c	2015-11-09 17:37:56.000000000 -0500
@@ -1924,7 +1924,6 @@ EXPORT_SYMBOL(mmc_can_reset);
 static int mmc_reset(struct mmc_host *host)
 {
 	struct mmc_card *card = host->card;
-	u32 status;
 
 	if (!(host->caps & MMC_CAP_HW_RESET) || !host->ops->hw_reset)
 		return -EOPNOTSUPP;
@@ -1937,12 +1936,6 @@ static int mmc_reset(struct mmc_host *ho
 
 	host->ops->hw_reset(host);
 
-	/* If the reset has happened, then a status command will fail */
-	if (!mmc_send_status(card, &status)) {
-		mmc_host_clk_release(host);
-		return -ENOSYS;
-	}
-
 	/* Set initial state and call mmc_set_ios */
 	mmc_set_initial_state(host);
 	mmc_host_clk_release(host);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/ath/ath9k/init.c linux-libre-4.2.6-gnu/drivers/net/wireless/ath/ath9k/init.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/ath/ath9k/init.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/ath/ath9k/init.c	2015-11-09 17:37:56.000000000 -0500
@@ -874,6 +874,7 @@ static void ath9k_set_hw_capab(struct at
 	hw->max_rate_tries = 10;
 	hw->sta_data_size = sizeof(struct ath_node);
 	hw->vif_data_size = sizeof(struct ath_vif);
+	hw->extra_tx_headroom = 4;
 
 	hw->wiphy->available_antennas_rx = BIT(ah->caps.max_rxchains) - 1;
 	hw->wiphy->available_antennas_tx = BIT(ah->caps.max_txchains) - 1;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/dvm/lib.c linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/dvm/lib.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/dvm/lib.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/dvm/lib.c	2015-11-09 17:37:56.000000000 -0500
@@ -1022,7 +1022,7 @@ static void iwlagn_wowlan_program_keys(s
 			u8 *pn = seq.ccmp.pn;
 
 			ieee80211_get_key_rx_seq(key, i, &seq);
-			aes_sc->pn = cpu_to_le64(
+			aes_sc[i].pn = cpu_to_le64(
 					(u64)pn[5] |
 					((u64)pn[4] << 8) |
 					((u64)pn[3] << 16) |
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/d3.c linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/d3.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/d3.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/d3.c	2015-11-09 17:37:56.000000000 -0500
@@ -274,18 +274,13 @@ static void iwl_mvm_wowlan_program_keys(
 		break;
 	case WLAN_CIPHER_SUITE_CCMP:
 		if (sta) {
-			u8 *pn = seq.ccmp.pn;
+			u64 pn64;
 
 			aes_sc = data->rsc_tsc->all_tsc_rsc.aes.unicast_rsc;
 			aes_tx_sc = &data->rsc_tsc->all_tsc_rsc.aes.tsc;
 
-			ieee80211_get_key_tx_seq(key, &seq);
-			aes_tx_sc->pn = cpu_to_le64((u64)pn[5] |
-						    ((u64)pn[4] << 8) |
-						    ((u64)pn[3] << 16) |
-						    ((u64)pn[2] << 24) |
-						    ((u64)pn[1] << 32) |
-						    ((u64)pn[0] << 40));
+			pn64 = atomic64_read(&key->tx_pn);
+			aes_tx_sc->pn = cpu_to_le64(pn64);
 		} else {
 			aes_sc = data->rsc_tsc->all_tsc_rsc.aes.multicast_rsc;
 		}
@@ -298,12 +293,12 @@ static void iwl_mvm_wowlan_program_keys(
 			u8 *pn = seq.ccmp.pn;
 
 			ieee80211_get_key_rx_seq(key, i, &seq);
-			aes_sc->pn = cpu_to_le64((u64)pn[5] |
-						 ((u64)pn[4] << 8) |
-						 ((u64)pn[3] << 16) |
-						 ((u64)pn[2] << 24) |
-						 ((u64)pn[1] << 32) |
-						 ((u64)pn[0] << 40));
+			aes_sc[i].pn = cpu_to_le64((u64)pn[5] |
+						   ((u64)pn[4] << 8) |
+						   ((u64)pn[3] << 16) |
+						   ((u64)pn[2] << 24) |
+						   ((u64)pn[1] << 32) |
+						   ((u64)pn[0] << 40));
 		}
 		data->use_rsc_tsc = true;
 		break;
@@ -1446,15 +1441,15 @@ static void iwl_mvm_d3_update_gtks(struc
 
 		switch (key->cipher) {
 		case WLAN_CIPHER_SUITE_CCMP:
-			iwl_mvm_aes_sc_to_seq(&sc->aes.tsc, &seq);
 			iwl_mvm_set_aes_rx_seq(sc->aes.unicast_rsc, key);
+			atomic64_set(&key->tx_pn, le64_to_cpu(sc->aes.tsc.pn));
 			break;
 		case WLAN_CIPHER_SUITE_TKIP:
 			iwl_mvm_tkip_sc_to_seq(&sc->tkip.tsc, &seq);
 			iwl_mvm_set_tkip_rx_seq(sc->tkip.unicast_rsc, key);
+			ieee80211_set_key_tx_seq(key, &seq);
 			break;
 		}
-		ieee80211_set_key_tx_seq(key, &seq);
 
 		/* that's it for this key */
 		return;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/fw.c linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/fw.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/fw.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/fw.c	2015-11-09 17:37:56.000000000 -0500
@@ -364,7 +364,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mv
 	 * abort after reading the nvm in case RF Kill is on, we will complete
 	 * the init seq later when RF kill will switch to off
 	 */
-	if (iwl_mvm_is_radio_killed(mvm)) {
+	if (iwl_mvm_is_radio_hw_killed(mvm)) {
 		IWL_DEBUG_RF_KILL(mvm,
 				  "jump over all phy activities due to RF kill\n");
 		iwl_remove_notification(&mvm->notif_wait, &calib_wait);
@@ -397,7 +397,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mv
 	ret = iwl_wait_notification(&mvm->notif_wait, &calib_wait,
 			MVM_UCODE_CALIB_TIMEOUT);
 
-	if (ret && iwl_mvm_is_radio_killed(mvm)) {
+	if (ret && iwl_mvm_is_radio_hw_killed(mvm)) {
 		IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n");
 		ret = 1;
 	}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/mac80211.c linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/mac80211.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/mac80211.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/mac80211.c	2015-11-09 17:37:56.000000000 -0500
@@ -2373,6 +2373,7 @@ static void iwl_mvm_stop_ap_ibss(struct
 		iwl_mvm_remove_time_event(mvm, mvmvif,
 					  &mvmvif->time_event_data);
 		RCU_INIT_POINTER(mvm->csa_vif, NULL);
+		mvmvif->csa_countdown = false;
 	}
 
 	if (rcu_access_pointer(mvm->csa_tx_blocked_vif) == vif) {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/mvm.h linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/mvm.h
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/mvm.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/mvm.h	2015-11-09 17:37:56.000000000 -0500
@@ -848,6 +848,11 @@ static inline bool iwl_mvm_is_radio_kill
 	       test_bit(IWL_MVM_STATUS_HW_CTKILL, &mvm->status);
 }
 
+static inline bool iwl_mvm_is_radio_hw_killed(struct iwl_mvm *mvm)
+{
+	return test_bit(IWL_MVM_STATUS_HW_RFKILL, &mvm->status);
+}
+
 /* Must be called with rcu_read_lock() held and it can only be
  * released when mvmsta is not needed anymore.
  */
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/ops.c linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/ops.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/mvm/ops.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/mvm/ops.c	2015-11-09 17:37:56.000000000 -0500
@@ -582,6 +582,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *
 	ieee80211_unregister_hw(mvm->hw);
 	iwl_mvm_leds_exit(mvm);
  out_free:
+	flush_delayed_work(&mvm->fw_dump_wk);
 	iwl_phy_db_free(mvm->phy_db);
 	kfree(mvm->scan_cmd);
 	if (!cfg->no_power_up_nic_in_init || !mvm->nvm_file_name)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/pcie/drv.c linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/pcie/drv.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/iwlwifi/pcie/drv.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/iwlwifi/pcie/drv.c	2015-11-09 17:37:56.000000000 -0500
@@ -414,6 +414,11 @@ static const struct pci_device_id iwl_hw
 	{IWL_PCI_DEVICE(0x095A, 0x5590, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095A, 0x5F10, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095B, 0x5212, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095B, 0x520A, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095A, 0x9000, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095A, 0x9400, iwl7265_2ac_cfg)},
 
 /* 8000 Series */
 	{IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)},
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/pci.h linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/pci.h
--- linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/pci.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/pci.h	2015-11-09 17:37:56.000000000 -0500
@@ -247,6 +247,8 @@ struct rtl_pci {
 	/* MSI support */
 	bool msi_support;
 	bool using_msi;
+	/* interrupt clear before set */
+	bool int_clear;
 };
 
 struct mp_adapter {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/hw.c	2015-11-09 17:37:56.000000000 -0500
@@ -2253,11 +2253,28 @@ void rtl8821ae_set_qos(struct ieee80211_
 	}
 }
 
+static void rtl8821ae_clear_interrupt(struct ieee80211_hw *hw)
+{
+	struct rtl_priv *rtlpriv = rtl_priv(hw);
+	u32 tmp = rtl_read_dword(rtlpriv, REG_HISR);
+
+	rtl_write_dword(rtlpriv, REG_HISR, tmp);
+
+	tmp = rtl_read_dword(rtlpriv, REG_HISRE);
+	rtl_write_dword(rtlpriv, REG_HISRE, tmp);
+
+	tmp = rtl_read_dword(rtlpriv, REG_HSISR);
+	rtl_write_dword(rtlpriv, REG_HSISR, tmp);
+}
+
 void rtl8821ae_enable_interrupt(struct ieee80211_hw *hw)
 {
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
 	struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
+	if (!rtlpci->int_clear)
+		rtl8821ae_clear_interrupt(hw);/*clear it here first*/
+
 	rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
 	rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
 	rtlpci->irq_enabled = true;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c
--- linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c	2015-10-27 00:14:46.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/rtl8821ae/sw.c	2015-11-10 06:32:57.000000000 -0500
@@ -96,6 +96,7 @@ int rtl8821ae_init_sw_vars(struct ieee80
 
 	rtl8821ae_bt_reg_init(hw);
 	rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support;
+	rtlpci->int_clear = rtlpriv->cfg->mod_params->int_clear;
 	rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
 
 	rtlpriv->dm.dm_initialgain_enable = 1;
@@ -167,6 +168,7 @@ int rtl8821ae_init_sw_vars(struct ieee80
 	rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
 	rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
 	rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support;
+	rtlpci->msi_support = rtlpriv->cfg->mod_params->int_clear;
 	if (rtlpriv->cfg->mod_params->disable_watchdog)
 		pr_info("watchdog disabled\n");
 	rtlpriv->psc.reg_fwctrl_lps = 3;
@@ -308,6 +310,7 @@ static struct rtl_mod_params rtl8821ae_m
 	.swctrl_lps = false,
 	.fwctrl_lps = true,
 	.msi_support = true,
+	.int_clear = true,
 	.debug = DBG_EMERG,
 	.disable_watchdog = 0,
 };
@@ -437,6 +440,7 @@ module_param_named(fwlps, rtl8821ae_mod_
 module_param_named(msi, rtl8821ae_mod_params.msi_support, bool, 0444);
 module_param_named(disable_watchdog, rtl8821ae_mod_params.disable_watchdog,
 		   bool, 0444);
+module_param_named(int_clear, rtl8821ae_mod_params.int_clear, bool, 0444);
 MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
 MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 1)\n");
 MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
@@ -444,6 +448,7 @@ MODULE_PARM_DESC(fwlps, "Set to 1 to use
 MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 1)\n");
 MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
 MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");
+MODULE_PARM_DESC(int_clear, "Set to 1 to disable interrupt clear before set (default 0)\n");
 
 static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/wifi.h linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/wifi.h
--- linux-libre-4.2.5-gnu/drivers/net/wireless/rtlwifi/wifi.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/net/wireless/rtlwifi/wifi.h	2015-11-09 17:37:56.000000000 -0500
@@ -2234,6 +2234,9 @@ struct rtl_mod_params {
 
 	/* default 0: 1 means disable */
 	bool disable_watchdog;
+
+	/* default 0: 1 means do not disable interrupts */
+	bool int_clear;
 };
 
 struct rtl_hal_usbint_cfg {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/pci/pci-sysfs.c linux-libre-4.2.6-gnu/drivers/pci/pci-sysfs.c
--- linux-libre-4.2.5-gnu/drivers/pci/pci-sysfs.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/pci/pci-sysfs.c	2015-11-09 17:37:56.000000000 -0500
@@ -216,7 +216,7 @@ static ssize_t numa_node_store(struct de
 	if (ret)
 		return ret;
 
-	if (!node_online(node))
+	if (node >= MAX_NUMNODES || !node_online(node))
 		return -EINVAL;
 
 	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/pinctrl/intel/pinctrl-baytrail.c linux-libre-4.2.6-gnu/drivers/pinctrl/intel/pinctrl-baytrail.c
--- linux-libre-4.2.5-gnu/drivers/pinctrl/intel/pinctrl-baytrail.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/pinctrl/intel/pinctrl-baytrail.c	2015-11-09 17:37:56.000000000 -0500
@@ -146,7 +146,7 @@ struct byt_gpio_pin_context {
 struct byt_gpio {
 	struct gpio_chip		chip;
 	struct platform_device		*pdev;
-	spinlock_t			lock;
+	raw_spinlock_t			lock;
 	void __iomem			*reg_base;
 	struct pinctrl_gpio_range	*range;
 	struct byt_gpio_pin_context	*saved_context;
@@ -174,11 +174,11 @@ static void byt_gpio_clear_triggering(st
 	unsigned long flags;
 	u32 value;
 
-	spin_lock_irqsave(&vg->lock, flags);
+	raw_spin_lock_irqsave(&vg->lock, flags);
 	value = readl(reg);
 	value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
 	writel(value, reg);
-	spin_unlock_irqrestore(&vg->lock, flags);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
 }
 
 static u32 byt_get_gpio_mux(struct byt_gpio *vg, unsigned offset)
@@ -201,6 +201,9 @@ static int byt_gpio_request(struct gpio_
 	struct byt_gpio *vg = to_byt_gpio(chip);
 	void __iomem *reg = byt_gpio_reg(chip, offset, BYT_CONF0_REG);
 	u32 value, gpio_mux;
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&vg->lock, flags);
 
 	/*
 	 * In most cases, func pin mux 000 means GPIO function.
@@ -214,18 +217,16 @@ static int byt_gpio_request(struct gpio_
 	value = readl(reg) & BYT_PIN_MUX;
 	gpio_mux = byt_get_gpio_mux(vg, offset);
 	if (WARN_ON(gpio_mux != value)) {
-		unsigned long flags;
-
-		spin_lock_irqsave(&vg->lock, flags);
 		value = readl(reg) & ~BYT_PIN_MUX;
 		value |= gpio_mux;
 		writel(value, reg);
-		spin_unlock_irqrestore(&vg->lock, flags);
 
 		dev_warn(&vg->pdev->dev,
 			 "pin %u forcibly re-configured as GPIO\n", offset);
 	}
 
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
+
 	pm_runtime_get(&vg->pdev->dev);
 
 	return 0;
@@ -250,7 +251,7 @@ static int byt_irq_type(struct irq_data
 	if (offset >= vg->chip.ngpio)
 		return -EINVAL;
 
-	spin_lock_irqsave(&vg->lock, flags);
+	raw_spin_lock_irqsave(&vg->lock, flags);
 	value = readl(reg);
 
 	WARN(value & BYT_DIRECT_IRQ_EN,
@@ -269,7 +270,7 @@ static int byt_irq_type(struct irq_data
 	else if (type & IRQ_TYPE_LEVEL_MASK)
 		__irq_set_handler_locked(d->irq, handle_level_irq);
 
-	spin_unlock_irqrestore(&vg->lock, flags);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
 
 	return 0;
 }
@@ -277,7 +278,15 @@ static int byt_irq_type(struct irq_data
 static int byt_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
 	void __iomem *reg = byt_gpio_reg(chip, offset, BYT_VAL_REG);
-	return readl(reg) & BYT_LEVEL;
+	struct byt_gpio *vg = to_byt_gpio(chip);
+	unsigned long flags;
+	u32 val;
+
+	raw_spin_lock_irqsave(&vg->lock, flags);
+	val = readl(reg);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
+
+	return val & BYT_LEVEL;
 }
 
 static void byt_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
@@ -287,7 +296,7 @@ static void byt_gpio_set(struct gpio_chi
 	unsigned long flags;
 	u32 old_val;
 
-	spin_lock_irqsave(&vg->lock, flags);
+	raw_spin_lock_irqsave(&vg->lock, flags);
 
 	old_val = readl(reg);
 
@@ -296,7 +305,7 @@ static void byt_gpio_set(struct gpio_chi
 	else
 		writel(old_val & ~BYT_LEVEL, reg);
 
-	spin_unlock_irqrestore(&vg->lock, flags);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
 }
 
 static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
@@ -306,13 +315,13 @@ static int byt_gpio_direction_input(stru
 	unsigned long flags;
 	u32 value;
 
-	spin_lock_irqsave(&vg->lock, flags);
+	raw_spin_lock_irqsave(&vg->lock, flags);
 
 	value = readl(reg) | BYT_DIR_MASK;
 	value &= ~BYT_INPUT_EN;		/* active low */
 	writel(value, reg);
 
-	spin_unlock_irqrestore(&vg->lock, flags);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
 
 	return 0;
 }
@@ -326,7 +335,7 @@ static int byt_gpio_direction_output(str
 	unsigned long flags;
 	u32 reg_val;
 
-	spin_lock_irqsave(&vg->lock, flags);
+	raw_spin_lock_irqsave(&vg->lock, flags);
 
 	/*
 	 * Before making any direction modifications, do a check if gpio
@@ -345,7 +354,7 @@ static int byt_gpio_direction_output(str
 	else
 		writel(reg_val & ~BYT_LEVEL, reg);
 
-	spin_unlock_irqrestore(&vg->lock, flags);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
 
 	return 0;
 }
@@ -354,18 +363,19 @@ static void byt_gpio_dbg_show(struct seq
 {
 	struct byt_gpio *vg = to_byt_gpio(chip);
 	int i;
-	unsigned long flags;
 	u32 conf0, val, offs;
 
-	spin_lock_irqsave(&vg->lock, flags);
-
 	for (i = 0; i < vg->chip.ngpio; i++) {
 		const char *pull_str = NULL;
 		const char *pull = NULL;
+		unsigned long flags;
 		const char *label;
 		offs = vg->range->pins[i] * 16;
+
+		raw_spin_lock_irqsave(&vg->lock, flags);
 		conf0 = readl(vg->reg_base + offs + BYT_CONF0_REG);
 		val = readl(vg->reg_base + offs + BYT_VAL_REG);
+		raw_spin_unlock_irqrestore(&vg->lock, flags);
 
 		label = gpiochip_is_requested(chip, i);
 		if (!label)
@@ -418,7 +428,6 @@ static void byt_gpio_dbg_show(struct seq
 
 		seq_puts(s, "\n");
 	}
-	spin_unlock_irqrestore(&vg->lock, flags);
 }
 
 static void byt_gpio_irq_handler(unsigned irq, struct irq_desc *desc)
@@ -450,8 +459,10 @@ static void byt_irq_ack(struct irq_data
 	unsigned offset = irqd_to_hwirq(d);
 	void __iomem *reg;
 
+	raw_spin_lock(&vg->lock);
 	reg = byt_gpio_reg(&vg->chip, offset, BYT_INT_STAT_REG);
 	writel(BIT(offset % 32), reg);
+	raw_spin_unlock(&vg->lock);
 }
 
 static void byt_irq_unmask(struct irq_data *d)
@@ -463,9 +474,9 @@ static void byt_irq_unmask(struct irq_da
 	void __iomem *reg;
 	u32 value;
 
-	spin_lock_irqsave(&vg->lock, flags);
-
 	reg = byt_gpio_reg(&vg->chip, offset, BYT_CONF0_REG);
+
+	raw_spin_lock_irqsave(&vg->lock, flags);
 	value = readl(reg);
 
 	switch (irqd_get_trigger_type(d)) {
@@ -486,7 +497,7 @@ static void byt_irq_unmask(struct irq_da
 
 	writel(value, reg);
 
-	spin_unlock_irqrestore(&vg->lock, flags);
+	raw_spin_unlock_irqrestore(&vg->lock, flags);
 }
 
 static void byt_irq_mask(struct irq_data *d)
@@ -578,7 +589,7 @@ static int byt_gpio_probe(struct platfor
 	if (IS_ERR(vg->reg_base))
 		return PTR_ERR(vg->reg_base);
 
-	spin_lock_init(&vg->lock);
+	raw_spin_lock_init(&vg->lock);
 
 	gc = &vg->chip;
 	gc->label = dev_name(&pdev->dev);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/scsi/mvsas/mv_sas.c linux-libre-4.2.6-gnu/drivers/scsi/mvsas/mv_sas.c
--- linux-libre-4.2.5-gnu/drivers/scsi/mvsas/mv_sas.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/scsi/mvsas/mv_sas.c	2015-11-09 17:37:56.000000000 -0500
@@ -887,6 +887,8 @@ static void mvs_slot_free(struct mvs_inf
 static void mvs_slot_task_free(struct mvs_info *mvi, struct sas_task *task,
 			  struct mvs_slot_info *slot, u32 slot_idx)
 {
+	if (!slot)
+		return;
 	if (!slot->task)
 		return;
 	if (!sas_protocol_ata(task->task_proto))
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/staging/iio/accel/sca3000_ring.c linux-libre-4.2.6-gnu/drivers/staging/iio/accel/sca3000_ring.c
--- linux-libre-4.2.5-gnu/drivers/staging/iio/accel/sca3000_ring.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/staging/iio/accel/sca3000_ring.c	2015-11-09 17:37:56.000000000 -0500
@@ -116,7 +116,7 @@ static int sca3000_read_first_n_hw_rb(st
 	if (ret)
 		goto error_ret;
 
-	for (i = 0; i < num_read; i++)
+	for (i = 0; i < num_read / sizeof(u16); i++)
 		*(((u16 *)rx) + i) = be16_to_cpup((__be16 *)rx + i);
 
 	if (copy_to_user(buf, rx, num_read))
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/staging/iio/adc/mxs-lradc.c linux-libre-4.2.6-gnu/drivers/staging/iio/adc/mxs-lradc.c
--- linux-libre-4.2.5-gnu/drivers/staging/iio/adc/mxs-lradc.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/staging/iio/adc/mxs-lradc.c	2015-11-09 17:37:56.000000000 -0500
@@ -919,11 +919,12 @@ static int mxs_lradc_read_raw(struct iio
 	case IIO_CHAN_INFO_OFFSET:
 		if (chan->type == IIO_TEMP) {
 			/* The calculated value from the ADC is in Kelvin, we
-			 * want Celsius for hwmon so the offset is
-			 * -272.15 * scale
+			 * want Celsius for hwmon so the offset is -273.15
+			 * The offset is applied before scaling so it is
+			 * actually -213.15 * 4 / 1.012 = -1079.644268
 			 */
-			*val = -1075;
-			*val2 = 691699;
+			*val = -1079;
+			*val2 = 644268;
 
 			return IIO_VAL_INT_PLUS_MICRO;
 		}
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/thermal/samsung/exynos_tmu.c linux-libre-4.2.6-gnu/drivers/thermal/samsung/exynos_tmu.c
--- linux-libre-4.2.5-gnu/drivers/thermal/samsung/exynos_tmu.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/thermal/samsung/exynos_tmu.c	2015-11-09 17:37:56.000000000 -0500
@@ -933,7 +933,7 @@ static void exynos4412_tmu_set_emulation
 
 	if (data->soc == SOC_ARCH_EXYNOS5260)
 		emul_con = EXYNOS5260_EMUL_CON;
-	if (data->soc == SOC_ARCH_EXYNOS5433)
+	else if (data->soc == SOC_ARCH_EXYNOS5433)
 		emul_con = EXYNOS5433_TMU_EMUL_CON;
 	else if (data->soc == SOC_ARCH_EXYNOS7)
 		emul_con = EXYNOS7_TMU_REG_EMUL_CON;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/tty/serial/8250/8250_dma.c linux-libre-4.2.6-gnu/drivers/tty/serial/8250/8250_dma.c
--- linux-libre-4.2.5-gnu/drivers/tty/serial/8250/8250_dma.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/tty/serial/8250/8250_dma.c	2015-11-09 17:37:56.000000000 -0500
@@ -80,10 +80,6 @@ int serial8250_tx_dma(struct uart_8250_p
 		return 0;
 
 	dma->tx_size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
-	if (dma->tx_size < p->port.fifosize) {
-		ret = -EINVAL;
-		goto err;
-	}
 
 	desc = dmaengine_prep_slave_single(dma->txchan,
 					   dma->tx_addr + xmit->tail,
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/usb/host/xhci-pci.c linux-libre-4.2.6-gnu/drivers/usb/host/xhci-pci.c
--- linux-libre-4.2.5-gnu/drivers/usb/host/xhci-pci.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/usb/host/xhci-pci.c	2015-11-09 17:37:56.000000000 -0500
@@ -147,6 +147,7 @@ static void xhci_pci_quirks(struct devic
 	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
 		pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
 		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
+		xhci->quirks |= XHCI_SPURIOUS_WAKEUP;
 	}
 	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
 		(pdev->device == PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI ||
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/usb/host/xhci-ring.c linux-libre-4.2.6-gnu/drivers/usb/host/xhci-ring.c
--- linux-libre-4.2.5-gnu/drivers/usb/host/xhci-ring.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/usb/host/xhci-ring.c	2015-11-09 17:37:56.000000000 -0500
@@ -2239,6 +2239,7 @@ static int handle_tx_event(struct xhci_h
 	u32 trb_comp_code;
 	int ret = 0;
 	int td_num = 0;
+	bool handling_skipped_tds = false;
 
 	slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags));
 	xdev = xhci->devs[slot_id];
@@ -2372,6 +2373,10 @@ static int handle_tx_event(struct xhci_h
 		ep->skip = true;
 		xhci_dbg(xhci, "Miss service interval error, set skip flag\n");
 		goto cleanup;
+	case COMP_PING_ERR:
+		ep->skip = true;
+		xhci_dbg(xhci, "No Ping response error, Skip one Isoc TD\n");
+		goto cleanup;
 	default:
 		if (xhci_is_vendor_info_code(xhci, trb_comp_code)) {
 			status = 0;
@@ -2508,13 +2513,18 @@ static int handle_tx_event(struct xhci_h
 						 ep, &status);
 
 cleanup:
+
+
+		handling_skipped_tds = ep->skip &&
+			trb_comp_code != COMP_MISSED_INT &&
+			trb_comp_code != COMP_PING_ERR;
+
 		/*
-		 * Do not update event ring dequeue pointer if ep->skip is set.
-		 * Will roll back to continue process missed tds.
+		 * Do not update event ring dequeue pointer if we're in a loop
+		 * processing missed tds.
 		 */
-		if (trb_comp_code == COMP_MISSED_INT || !ep->skip) {
+		if (!handling_skipped_tds)
 			inc_deq(xhci, xhci->event_ring);
-		}
 
 		if (ret) {
 			urb = td->urb;
@@ -2549,7 +2559,7 @@ cleanup:
 	 * Process them as short transfer until reach the td pointed by
 	 * the event.
 	 */
-	} while (ep->skip && trb_comp_code != COMP_MISSED_INT);
+	} while (handling_skipped_tds);
 
 	return 0;
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/usb/serial/qcserial.c linux-libre-4.2.6-gnu/drivers/usb/serial/qcserial.c
--- linux-libre-4.2.5-gnu/drivers/usb/serial/qcserial.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/usb/serial/qcserial.c	2015-11-09 17:37:56.000000000 -0500
@@ -153,6 +153,8 @@ static const struct usb_device_id id_tab
 	{DEVICE_SWI(0x1199, 0x9056)},	/* Sierra Wireless Modem */
 	{DEVICE_SWI(0x1199, 0x9060)},	/* Sierra Wireless Modem */
 	{DEVICE_SWI(0x1199, 0x9061)},	/* Sierra Wireless Modem */
+	{DEVICE_SWI(0x1199, 0x9070)},	/* Sierra Wireless MC74xx/EM74xx */
+	{DEVICE_SWI(0x1199, 0x9071)},	/* Sierra Wireless MC74xx/EM74xx */
 	{DEVICE_SWI(0x413c, 0x81a2)},	/* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
 	{DEVICE_SWI(0x413c, 0x81a3)},	/* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
 	{DEVICE_SWI(0x413c, 0x81a4)},	/* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
diff -druNp --no-dereference linux-libre-4.2.5-gnu/drivers/video/console/fbcon.c linux-libre-4.2.6-gnu/drivers/video/console/fbcon.c
--- linux-libre-4.2.5-gnu/drivers/video/console/fbcon.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/drivers/video/console/fbcon.c	2015-11-09 17:37:56.000000000 -0500
@@ -1093,6 +1093,7 @@ static void fbcon_init(struct vc_data *v
 		con_copy_unimap(vc, svc);
 
 	ops = info->fbcon_par;
+	ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
 	p->con_rotate = initial_rotation;
 	set_blitting_type(vc, info);
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/fs/btrfs/ioctl.c linux-libre-4.2.6-gnu/fs/btrfs/ioctl.c
--- linux-libre-4.2.5-gnu/fs/btrfs/ioctl.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/fs/btrfs/ioctl.c	2015-11-09 17:37:56.000000000 -0500
@@ -4649,7 +4649,7 @@ locked:
 
 	if (bctl->flags & ~(BTRFS_BALANCE_ARGS_MASK | BTRFS_BALANCE_TYPE_MASK)) {
 		ret = -EINVAL;
-		goto out_bargs;
+		goto out_bctl;
 	}
 
 do_balance:
@@ -4663,12 +4663,15 @@ do_balance:
 	need_unlock = false;
 
 	ret = btrfs_balance(bctl, bargs);
+	bctl = NULL;
 
 	if (arg) {
 		if (copy_to_user(arg, bargs, sizeof(*bargs)))
 			ret = -EFAULT;
 	}
 
+out_bctl:
+	kfree(bctl);
 out_bargs:
 	kfree(bargs);
 out_unlock:
diff -druNp --no-dereference linux-libre-4.2.5-gnu/fs/overlayfs/copy_up.c linux-libre-4.2.6-gnu/fs/overlayfs/copy_up.c
--- linux-libre-4.2.5-gnu/fs/overlayfs/copy_up.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/fs/overlayfs/copy_up.c	2015-11-09 17:37:56.000000000 -0500
@@ -81,11 +81,11 @@ static int ovl_copy_up_data(struct path
 	if (len == 0)
 		return 0;
 
-	old_file = ovl_path_open(old, O_RDONLY);
+	old_file = ovl_path_open(old, O_LARGEFILE | O_RDONLY);
 	if (IS_ERR(old_file))
 		return PTR_ERR(old_file);
 
-	new_file = ovl_path_open(new, O_WRONLY);
+	new_file = ovl_path_open(new, O_LARGEFILE | O_WRONLY);
 	if (IS_ERR(new_file)) {
 		error = PTR_ERR(new_file);
 		goto out_fput;
@@ -267,7 +267,7 @@ out:
 
 out_cleanup:
 	ovl_cleanup(wdir, newdentry);
-	goto out;
+	goto out2;
 }
 
 /*
diff -druNp --no-dereference linux-libre-4.2.5-gnu/fs/overlayfs/inode.c linux-libre-4.2.6-gnu/fs/overlayfs/inode.c
--- linux-libre-4.2.5-gnu/fs/overlayfs/inode.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/fs/overlayfs/inode.c	2015-11-09 17:37:56.000000000 -0500
@@ -363,6 +363,9 @@ struct inode *ovl_d_select_inode(struct
 		ovl_path_upper(dentry, &realpath);
 	}
 
+	if (realpath.dentry->d_flags & DCACHE_OP_SELECT_INODE)
+		return realpath.dentry->d_op->d_select_inode(realpath.dentry, file_flags);
+
 	return d_backing_inode(realpath.dentry);
 }
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/fs/overlayfs/super.c linux-libre-4.2.6-gnu/fs/overlayfs/super.c
--- linux-libre-4.2.5-gnu/fs/overlayfs/super.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/fs/overlayfs/super.c	2015-11-09 17:37:56.000000000 -0500
@@ -544,6 +544,7 @@ static void ovl_put_super(struct super_b
 	mntput(ufs->upper_mnt);
 	for (i = 0; i < ufs->numlower; i++)
 		mntput(ufs->lower_mnt[i]);
+	kfree(ufs->lower_mnt);
 
 	kfree(ufs->config.lowerdir);
 	kfree(ufs->config.upperdir);
@@ -1048,6 +1049,7 @@ static int ovl_fill_super(struct super_b
 		oe->lowerstack[i].dentry = stack[i].dentry;
 		oe->lowerstack[i].mnt = ufs->lower_mnt[i];
 	}
+	kfree(stack);
 
 	root_dentry->d_fsdata = oe;
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/include/linux/backing-dev.h linux-libre-4.2.6-gnu/include/linux/backing-dev.h
--- linux-libre-4.2.5-gnu/include/linux/backing-dev.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/include/linux/backing-dev.h	2015-11-09 17:37:56.000000000 -0500
@@ -18,13 +18,17 @@
 #include <linux/slab.h>
 
 int __must_check bdi_init(struct backing_dev_info *bdi);
-void bdi_destroy(struct backing_dev_info *bdi);
+void bdi_exit(struct backing_dev_info *bdi);
 
 __printf(3, 4)
 int bdi_register(struct backing_dev_info *bdi, struct device *parent,
 		const char *fmt, ...);
 int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
+void bdi_unregister(struct backing_dev_info *bdi);
+
 int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
+void bdi_destroy(struct backing_dev_info *bdi);
+
 void wb_start_writeback(struct bdi_writeback *wb, long nr_pages,
 			bool range_cyclic, enum wb_reason reason);
 void wb_start_background_writeback(struct bdi_writeback *wb);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/include/linux/omap-dma.h linux-libre-4.2.6-gnu/include/linux/omap-dma.h
--- linux-libre-4.2.5-gnu/include/linux/omap-dma.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/include/linux/omap-dma.h	2015-11-09 17:37:56.000000000 -0500
@@ -17,7 +17,7 @@
 
 #include <linux/platform_device.h>
 
-#define INT_DMA_LCD			25
+#define INT_DMA_LCD			(NR_IRQS_LEGACY + 25)
 
 #define OMAP1_DMA_TOUT_IRQ		(1 << 0)
 #define OMAP_DMA_DROP_IRQ		(1 << 1)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/include/sound/soc.h linux-libre-4.2.6-gnu/include/sound/soc.h
--- linux-libre-4.2.5-gnu/include/sound/soc.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/include/sound/soc.h	2015-11-09 17:37:56.000000000 -0500
@@ -86,7 +86,7 @@
 	.access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
 	SNDRV_CTL_ELEM_ACCESS_READWRITE, \
 	.tlv.p  = (tlv_array),\
-	.info = snd_soc_info_volsw, \
+	.info = snd_soc_info_volsw_sx, \
 	.get = snd_soc_get_volsw_sx,\
 	.put = snd_soc_put_volsw_sx, \
 	.private_value = (unsigned long)&(struct soc_mixer_control) \
@@ -156,7 +156,7 @@
 	.access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
 	SNDRV_CTL_ELEM_ACCESS_READWRITE, \
 	.tlv.p  = (tlv_array), \
-	.info = snd_soc_info_volsw, \
+	.info = snd_soc_info_volsw_sx, \
 	.get = snd_soc_get_volsw_sx, \
 	.put = snd_soc_put_volsw_sx, \
 	.private_value = (unsigned long)&(struct soc_mixer_control) \
@@ -573,6 +573,8 @@ int snd_soc_put_enum_double(struct snd_k
 	struct snd_ctl_elem_value *ucontrol);
 int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_info *uinfo);
+int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol,
+			  struct snd_ctl_elem_info *uinfo);
 #define snd_soc_info_bool_ext		snd_ctl_boolean_mono_info
 int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_value *ucontrol);
diff -druNp --no-dereference linux-libre-4.2.5-gnu/include/sound/wm8904.h linux-libre-4.2.6-gnu/include/sound/wm8904.h
--- linux-libre-4.2.5-gnu/include/sound/wm8904.h	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/include/sound/wm8904.h	2015-11-09 17:37:56.000000000 -0500
@@ -119,7 +119,7 @@
 #define WM8904_MIC_REGS  2
 #define WM8904_GPIO_REGS 4
 #define WM8904_DRC_REGS  4
-#define WM8904_EQ_REGS   25
+#define WM8904_EQ_REGS   24
 
 /**
  * DRC configurations are specified with a label and a set of register
diff -druNp --no-dereference linux-libre-4.2.5-gnu/kernel/module.c linux-libre-4.2.6-gnu/kernel/module.c
--- linux-libre-4.2.5-gnu/kernel/module.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/kernel/module.c	2015-11-09 17:37:56.000000000 -0500
@@ -1063,11 +1063,15 @@ void symbol_put_addr(void *addr)
 	if (core_kernel_text(a))
 		return;
 
-	/* module_text_address is safe here: we're supposed to have reference
-	 * to module from symbol_get, so it can't go away. */
+	/*
+	 * Even though we hold a reference on the module; we still need to
+	 * disable preemption in order to safely traverse the data structure.
+	 */
+	preempt_disable();
 	modaddr = __module_text_address(a);
 	BUG_ON(!modaddr);
 	module_put(modaddr);
+	preempt_enable();
 }
 EXPORT_SYMBOL_GPL(symbol_put_addr);
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/kernel/sched/deadline.c linux-libre-4.2.6-gnu/kernel/sched/deadline.c
--- linux-libre-4.2.5-gnu/kernel/sched/deadline.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/kernel/sched/deadline.c	2015-11-09 17:37:56.000000000 -0500
@@ -1066,8 +1066,9 @@ select_task_rq_dl(struct task_struct *p,
 		int target = find_later_rq(p);
 
 		if (target != -1 &&
-				dl_time_before(p->dl.deadline,
-					cpu_rq(target)->dl.earliest_dl.curr))
+				(dl_time_before(p->dl.deadline,
+					cpu_rq(target)->dl.earliest_dl.curr) ||
+				(cpu_rq(target)->dl.dl_nr_running == 0)))
 			cpu = target;
 	}
 	rcu_read_unlock();
@@ -1417,7 +1418,8 @@ static struct rq *find_lock_later_rq(str
 
 		later_rq = cpu_rq(cpu);
 
-		if (!dl_time_before(task->dl.deadline,
+		if (later_rq->dl.dl_nr_running &&
+		    !dl_time_before(task->dl.deadline,
 					later_rq->dl.earliest_dl.curr)) {
 			/*
 			 * Target rq has tasks of equal or earlier deadline,
diff -druNp --no-dereference linux-libre-4.2.5-gnu/kernel/trace/trace_stack.c linux-libre-4.2.6-gnu/kernel/trace/trace_stack.c
--- linux-libre-4.2.5-gnu/kernel/trace/trace_stack.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/kernel/trace/trace_stack.c	2015-11-09 17:37:56.000000000 -0500
@@ -94,6 +94,12 @@ check_stack(unsigned long ip, unsigned l
 	local_irq_save(flags);
 	arch_spin_lock(&max_stack_lock);
 
+	/*
+	 * RCU may not be watching, make it see us.
+	 * The stack trace code uses rcu_sched.
+	 */
+	rcu_irq_enter();
+
 	/* In case another CPU set the tracer_frame on us */
 	if (unlikely(!frame_size))
 		this_size -= tracer_frame;
@@ -174,6 +180,7 @@ check_stack(unsigned long ip, unsigned l
 	}
 
  out:
+	rcu_irq_exit();
 	arch_spin_unlock(&max_stack_lock);
 	local_irq_restore(flags);
 }
diff -druNp --no-dereference linux-libre-4.2.5-gnu/lib/fault-inject.c linux-libre-4.2.6-gnu/lib/fault-inject.c
--- linux-libre-4.2.5-gnu/lib/fault-inject.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/lib/fault-inject.c	2015-11-09 17:37:56.000000000 -0500
@@ -44,7 +44,7 @@ static void fail_dump(struct fault_attr
 		printk(KERN_NOTICE "FAULT_INJECTION: forcing a failure.\n"
 		       "name %pd, interval %lu, probability %lu, "
 		       "space %d, times %d\n", attr->dname,
-		       attr->probability, attr->interval,
+		       attr->interval, attr->probability,
 		       atomic_read(&attr->space),
 		       atomic_read(&attr->times));
 		if (attr->verbose > 1)
diff -druNp --no-dereference linux-libre-4.2.5-gnu/Makefile linux-libre-4.2.6-gnu/Makefile
--- linux-libre-4.2.5-gnu/Makefile	2015-10-26 23:58:10.000000000 -0400
+++ linux-libre-4.2.6-gnu/Makefile	2015-11-10 06:16:15.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 2
-SUBLEVEL = 5
+SUBLEVEL = 6
 EXTRAVERSION = -gnu
 NAME = Hurr durr I'ma sheep
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/mm/backing-dev.c linux-libre-4.2.6-gnu/mm/backing-dev.c
--- linux-libre-4.2.5-gnu/mm/backing-dev.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/mm/backing-dev.c	2015-11-09 17:37:56.000000000 -0500
@@ -823,7 +823,7 @@ static void bdi_remove_from_list(struct
 	synchronize_rcu_expedited();
 }
 
-void bdi_destroy(struct backing_dev_info *bdi)
+void bdi_unregister(struct backing_dev_info *bdi)
 {
 	/* make sure nobody finds us on the bdi_list anymore */
 	bdi_remove_from_list(bdi);
@@ -835,9 +835,19 @@ void bdi_destroy(struct backing_dev_info
 		device_unregister(bdi->dev);
 		bdi->dev = NULL;
 	}
+}
 
+void bdi_exit(struct backing_dev_info *bdi)
+{
+	WARN_ON_ONCE(bdi->dev);
 	wb_exit(&bdi->wb);
 }
+
+void bdi_destroy(struct backing_dev_info *bdi)
+{
+	bdi_unregister(bdi);
+	bdi_exit(bdi);
+}
 EXPORT_SYMBOL(bdi_destroy);
 
 /*
diff -druNp --no-dereference linux-libre-4.2.5-gnu/mm/filemap.c linux-libre-4.2.6-gnu/mm/filemap.c
--- linux-libre-4.2.5-gnu/mm/filemap.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/mm/filemap.c	2015-11-09 17:37:56.000000000 -0500
@@ -2488,6 +2488,11 @@ again:
 			break;
 		}
 
+		if (fatal_signal_pending(current)) {
+			status = -EINTR;
+			break;
+		}
+
 		status = a_ops->write_begin(file, mapping, pos, bytes, flags,
 						&page, &fsdata);
 		if (unlikely(status < 0))
@@ -2525,10 +2530,6 @@ again:
 		written += copied;
 
 		balance_dirty_pages_ratelimited(mapping);
-		if (fatal_signal_pending(current)) {
-			status = -EINTR;
-			break;
-		}
 	} while (iov_iter_count(i));
 
 	return written ? written : status;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/mm/huge_memory.c linux-libre-4.2.6-gnu/mm/huge_memory.c
--- linux-libre-4.2.5-gnu/mm/huge_memory.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/mm/huge_memory.c	2015-11-09 17:37:56.000000000 -0500
@@ -2132,7 +2132,8 @@ static int __collapse_huge_page_isolate(
 	for (_pte = pte; _pte < pte+HPAGE_PMD_NR;
 	     _pte++, address += PAGE_SIZE) {
 		pte_t pteval = *_pte;
-		if (pte_none(pteval) || is_zero_pfn(pte_pfn(pteval))) {
+		if (pte_none(pteval) || (pte_present(pteval) &&
+			is_zero_pfn(pte_pfn(pteval)))) {
 			if (++none_or_zero <= khugepaged_max_ptes_none)
 				continue;
 			else
diff -druNp --no-dereference linux-libre-4.2.5-gnu/net/mac80211/debugfs.c linux-libre-4.2.6-gnu/net/mac80211/debugfs.c
--- linux-libre-4.2.5-gnu/net/mac80211/debugfs.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/net/mac80211/debugfs.c	2015-11-09 17:37:56.000000000 -0500
@@ -148,7 +148,7 @@ static ssize_t hwflags_read(struct file
 
 	for (i = 0; i < NUM_IEEE80211_HW_FLAGS; i++) {
 		if (test_bit(i, local->hw.flags))
-			pos += scnprintf(pos, end - pos, "%s",
+			pos += scnprintf(pos, end - pos, "%s\n",
 					 hw_flag_names[i]);
 	}
 
diff -druNp --no-dereference linux-libre-4.2.5-gnu/net/netfilter/ipset/ip_set_list_set.c linux-libre-4.2.6-gnu/net/netfilter/ipset/ip_set_list_set.c
--- linux-libre-4.2.5-gnu/net/netfilter/ipset/ip_set_list_set.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/net/netfilter/ipset/ip_set_list_set.c	2015-11-09 17:37:56.000000000 -0500
@@ -297,7 +297,7 @@ list_set_uadd(struct ip_set *set, void *
 	      ip_set_timeout_expired(ext_timeout(n, set))))
 		n =  NULL;
 
-	e = kzalloc(set->dsize, GFP_KERNEL);
+	e = kzalloc(set->dsize, GFP_ATOMIC);
 	if (!e)
 		return -ENOMEM;
 	e->id = d->id;
diff -druNp --no-dereference linux-libre-4.2.5-gnu/sound/hda/ext/hdac_ext_bus.c linux-libre-4.2.6-gnu/sound/hda/ext/hdac_ext_bus.c
--- linux-libre-4.2.5-gnu/sound/hda/ext/hdac_ext_bus.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/sound/hda/ext/hdac_ext_bus.c	2015-11-09 17:37:56.000000000 -0500
@@ -19,6 +19,7 @@
 
 #include <linux/module.h>
 #include <linux/slab.h>
+#include <linux/io.h>
 #include <sound/hdaudio_ext.h>
 
 MODULE_DESCRIPTION("HDA extended core");
diff -druNp --no-dereference linux-libre-4.2.5-gnu/sound/pci/hda/hda_codec.c linux-libre-4.2.6-gnu/sound/pci/hda/hda_codec.c
--- linux-libre-4.2.5-gnu/sound/pci/hda/hda_codec.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/sound/pci/hda/hda_codec.c	2015-11-09 17:37:56.000000000 -0500
@@ -3438,10 +3438,8 @@ int snd_hda_codec_build_pcms(struct hda_
 	int dev, err;
 
 	err = snd_hda_codec_parse_pcms(codec);
-	if (err < 0) {
-		snd_hda_codec_reset(codec);
+	if (err < 0)
 		return err;
-	}
 
 	/* attach a new PCM streams */
 	list_for_each_entry(cpcm, &codec->pcm_list_head, list) {
diff -druNp --no-dereference linux-libre-4.2.5-gnu/sound/pci/hda/patch_conexant.c linux-libre-4.2.6-gnu/sound/pci/hda/patch_conexant.c
--- linux-libre-4.2.5-gnu/sound/pci/hda/patch_conexant.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/sound/pci/hda/patch_conexant.c	2015-11-09 17:37:56.000000000 -0500
@@ -819,6 +819,7 @@ static const struct snd_pci_quirk cxt506
 	SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT_PINCFG_LENOVO_TP410),
 	SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT_PINCFG_LENOVO_TP410),
 	SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo IdeaPad Z560", CXT_FIXUP_MUTE_LED_EAPD),
+	SND_PCI_QUIRK(0x17aa, 0x390b, "Lenovo G50-80", CXT_FIXUP_STEREO_DMIC),
 	SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC),
 	SND_PCI_QUIRK(0x17aa, 0x3977, "Lenovo IdeaPad U310", CXT_FIXUP_STEREO_DMIC),
 	SND_PCI_QUIRK(0x17aa, 0x397b, "Lenovo S205", CXT_FIXUP_STEREO_DMIC),
diff -druNp --no-dereference linux-libre-4.2.5-gnu/sound/soc/soc-ops.c linux-libre-4.2.6-gnu/sound/soc/soc-ops.c
--- linux-libre-4.2.5-gnu/sound/soc/soc-ops.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/sound/soc/soc-ops.c	2015-11-09 17:37:56.000000000 -0500
@@ -207,6 +207,34 @@ int snd_soc_info_volsw(struct snd_kcontr
 EXPORT_SYMBOL_GPL(snd_soc_info_volsw);
 
 /**
+ * snd_soc_info_volsw_sx - Mixer info callback for SX TLV controls
+ * @kcontrol: mixer control
+ * @uinfo: control element information
+ *
+ * Callback to provide information about a single mixer control, or a double
+ * mixer control that spans 2 registers of the SX TLV type. SX TLV controls
+ * have a range that represents both positive and negative values either side
+ * of zero but without a sign bit.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol,
+			  struct snd_ctl_elem_info *uinfo)
+{
+	struct soc_mixer_control *mc =
+		(struct soc_mixer_control *)kcontrol->private_value;
+
+	snd_soc_info_volsw(kcontrol, uinfo);
+	/* Max represents the number of levels in an SX control not the
+	 * maximum value, so add the minimum value back on
+	 */
+	uinfo->value.integer.max += mc->min;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_info_volsw_sx);
+
+/**
  * snd_soc_get_volsw - single mixer get callback
  * @kcontrol: mixer control
  * @ucontrol: control element information
diff -druNp --no-dereference linux-libre-4.2.5-gnu/virt/kvm/irqchip.c linux-libre-4.2.6-gnu/virt/kvm/irqchip.c
--- linux-libre-4.2.5-gnu/virt/kvm/irqchip.c	2015-10-26 20:53:59.000000000 -0400
+++ linux-libre-4.2.6-gnu/virt/kvm/irqchip.c	2015-11-09 17:37:56.000000000 -0500
@@ -213,11 +213,15 @@ int kvm_set_irq_routing(struct kvm *kvm,
 			goto out;
 
 		r = -EINVAL;
-		if (ue->flags)
+		if (ue->flags) {
+			kfree(e);
 			goto out;
+		}
 		r = setup_routing_entry(new, e, ue);
-		if (r)
+		if (r) {
+			kfree(e);
 			goto out;
+		}
 		++ue;
 	}
 
