diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/arm/mach-omap2/cpuidle34xx.c linux-libre-3.12.60-gnu/arch/arm/mach-omap2/cpuidle34xx.c
--- linux-libre-3.12.59-gnu/arch/arm/mach-omap2/cpuidle34xx.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/arm/mach-omap2/cpuidle34xx.c	2016-05-19 05:02:51.000000000 -0400
@@ -34,6 +34,7 @@
 #include "pm.h"
 #include "control.h"
 #include "common.h"
+#include "soc.h"
 
 /* Mach specific information to be recorded in the C-state driver_data */
 struct omap3_idle_statedata {
@@ -322,6 +323,69 @@ static struct cpuidle_driver omap3_idle_
 	.safe_state_index = 0,
 };
 
+/*
+ * Numbers based on measurements made in October 2009 for PM optimized kernel
+ * with CPU freq enabled on device Nokia N900. Assumes OPP2 (main idle OPP,
+ * and worst case latencies).
+ */
+static struct cpuidle_driver omap3430_idle_driver = {
+	.name             = "omap3430_idle",
+	.owner            = THIS_MODULE,
+	.states = {
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 110 + 162,
+			.target_residency = 5,
+			.name		  = "C1",
+			.desc		  = "MPU ON + CORE ON",
+		},
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 106 + 180,
+			.target_residency = 309,
+			.name		  = "C2",
+			.desc		  = "MPU ON + CORE ON",
+		},
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 107 + 410,
+			.target_residency = 46057,
+			.name		  = "C3",
+			.desc		  = "MPU RET + CORE ON",
+		},
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 121 + 3374,
+			.target_residency = 46057,
+			.name		  = "C4",
+			.desc		  = "MPU OFF + CORE ON",
+		},
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 855 + 1146,
+			.target_residency = 46057,
+			.name		  = "C5",
+			.desc		  = "MPU RET + CORE RET",
+		},
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 7580 + 4134,
+			.target_residency = 484329,
+			.name		  = "C6",
+			.desc		  = "MPU OFF + CORE RET",
+		},
+		{
+			.enter		  = omap3_enter_idle_bm,
+			.exit_latency	  = 7505 + 15274,
+			.target_residency = 484329,
+			.name		  = "C7",
+			.desc		  = "MPU OFF + CORE OFF",
+		},
+	},
+	.state_count = ARRAY_SIZE(omap3_idle_data),
+	.safe_state_index = 0,
+};
+
 /* Public functions */
 
 /**
@@ -340,5 +404,8 @@ int __init omap3_idle_init(void)
 	if (!mpu_pd || !core_pd || !per_pd || !cam_pd)
 		return -ENODEV;
 
-	return cpuidle_register(&omap3_idle_driver, NULL);
+	if (cpu_is_omap3430())
+		return cpuidle_register(&omap3430_idle_driver, NULL);
+	else
+		return cpuidle_register(&omap3_idle_driver, NULL);
 }
diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/arm/mach-omap2/omap_hwmod.c linux-libre-3.12.60-gnu/arch/arm/mach-omap2/omap_hwmod.c
--- linux-libre-3.12.59-gnu/arch/arm/mach-omap2/omap_hwmod.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/arm/mach-omap2/omap_hwmod.c	2016-05-19 05:02:51.000000000 -0400
@@ -1435,9 +1435,7 @@ static void _enable_sysc(struct omap_hwm
 	    (sf & SYSC_HAS_CLOCKACTIVITY))
 		_set_clockactivity(oh, oh->class->sysc->clockact, &v);
 
-	/* If the cached value is the same as the new value, skip the write */
-	if (oh->_sysc_cache != v)
-		_write_sysconfig(v, oh);
+	_write_sysconfig(v, oh);
 
 	/*
 	 * Set the autoidle bit only after setting the smartidle bit
@@ -1500,7 +1498,9 @@ static void _idle_sysc(struct omap_hwmod
 		_set_master_standbymode(oh, idlemode, &v);
 	}
 
-	_write_sysconfig(v, oh);
+	/* If the cached value is the same as the new value, skip the write */
+	if (oh->_sysc_cache != v)
+		_write_sysconfig(v, oh);
 }
 
 /**
diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/arm/mach-omap2/sleep34xx.S linux-libre-3.12.60-gnu/arch/arm/mach-omap2/sleep34xx.S
--- linux-libre-3.12.59-gnu/arch/arm/mach-omap2/sleep34xx.S	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/arm/mach-omap2/sleep34xx.S	2016-05-19 05:02:51.000000000 -0400
@@ -203,23 +203,8 @@ save_context_wfi:
 	 */
 	ldr	r1, kernel_flush
 	blx	r1
-	/*
-	 * The kernel doesn't interwork: v7_flush_dcache_all in particluar will
-	 * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled.
-	 * This sequence switches back to ARM.  Note that .align may insert a
-	 * nop: bx pc needs to be word-aligned in order to work.
-	 */
- THUMB(	.thumb		)
- THUMB(	.align		)
- THUMB(	bx	pc	)
- THUMB(	nop		)
-	.arm
-
 	b	omap3_do_wfi
-
-/*
- * Local variables
- */
+ENDPROC(omap34xx_cpu_suspend)
 omap3_do_wfi_sram_addr:
 	.word omap3_do_wfi_sram
 kernel_flush:
@@ -364,10 +349,7 @@ exit_nonoff_modes:
  * ===================================
  */
 	ldmfd	sp!, {r4 - r11, pc}	@ restore regs and return
-
-/*
- * Local variables
- */
+ENDPROC(omap3_do_wfi)
 sdrc_power:
 	.word	SDRC_POWER_V
 cm_idlest1_core:
diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/arm/mach-socfpga/headsmp.S linux-libre-3.12.60-gnu/arch/arm/mach-socfpga/headsmp.S
--- linux-libre-3.12.59-gnu/arch/arm/mach-socfpga/headsmp.S	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/arm/mach-socfpga/headsmp.S	2016-05-19 05:02:51.000000000 -0400
@@ -11,6 +11,7 @@
 #include <linux/init.h>
 
 	.arch	armv7-a
+	.arm
 
 ENTRY(secondary_trampoline)
 	movw	r2, #:lower16:cpu1start_addr
diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/powerpc/include/uapi/asm/cputable.h linux-libre-3.12.60-gnu/arch/powerpc/include/uapi/asm/cputable.h
--- linux-libre-3.12.59-gnu/arch/powerpc/include/uapi/asm/cputable.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/powerpc/include/uapi/asm/cputable.h	2016-05-19 05:02:51.000000000 -0400
@@ -31,6 +31,7 @@
 #define PPC_FEATURE_PSERIES_PERFMON_COMPAT \
 					0x00000040
 
+/* Reserved - do not use		0x00000004 */
 #define PPC_FEATURE_TRUE_LE		0x00000002
 #define PPC_FEATURE_PPC_LE		0x00000001
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/powerpc/kernel/prom.c linux-libre-3.12.60-gnu/arch/powerpc/kernel/prom.c
--- linux-libre-3.12.59-gnu/arch/powerpc/kernel/prom.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/powerpc/kernel/prom.c	2016-05-19 05:02:51.000000000 -0400
@@ -159,7 +159,7 @@ static struct ibm_pa_feature {
 	{CPU_FTR_NOEXECUTE, 0, 0,	0, 6, 0},
 	{CPU_FTR_NODSISRALIGN, 0, 0,	1, 1, 1},
 	{0, MMU_FTR_CI_LARGE_PAGE, 0,	1, 2, 0},
-	{CPU_FTR_REAL_LE, PPC_FEATURE_TRUE_LE, 5, 0, 0},
+	{CPU_FTR_REAL_LE, 0, PPC_FEATURE_TRUE_LE, 5, 0, 0},
 };
 
 static void __init scan_features(unsigned long node, unsigned char *ftrs,
diff -druNp --no-dereference linux-libre-3.12.59-gnu/arch/x86/kernel/sysfb_efi.c linux-libre-3.12.60-gnu/arch/x86/kernel/sysfb_efi.c
--- linux-libre-3.12.59-gnu/arch/x86/kernel/sysfb_efi.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/arch/x86/kernel/sysfb_efi.c	2016-05-19 05:02:51.000000000 -0400
@@ -106,14 +106,24 @@ static int __init efifb_set_system(const
 					continue;
 				for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
 					resource_size_t start, end;
+					unsigned long flags;
+
+					flags = pci_resource_flags(dev, i);
+					if (!(flags & IORESOURCE_MEM))
+						continue;
+
+					if (flags & IORESOURCE_UNSET)
+						continue;
+
+					if (pci_resource_len(dev, i) == 0)
+						continue;
 
 					start = pci_resource_start(dev, i);
-					if (start == 0)
-						break;
 					end = pci_resource_end(dev, i);
 					if (screen_info.lfb_base >= start &&
 					    screen_info.lfb_base < end) {
 						found_bar = 1;
+						break;
 					}
 				}
 			}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/crypto/ahash.c linux-libre-3.12.60-gnu/crypto/ahash.c
--- linux-libre-3.12.59-gnu/crypto/ahash.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/crypto/ahash.c	2016-05-19 05:02:51.000000000 -0400
@@ -64,8 +64,9 @@ static int hash_walk_new_entry(struct cr
 	struct scatterlist *sg;
 
 	sg = walk->sg;
-	walk->pg = sg_page(sg);
 	walk->offset = sg->offset;
+	walk->pg = sg_page(walk->sg) + (walk->offset >> PAGE_SHIFT);
+	walk->offset = offset_in_page(walk->offset);
 	walk->entrylen = sg->length;
 
 	if (walk->entrylen > walk->total)
diff -druNp --no-dereference linux-libre-3.12.59-gnu/crypto/gcm.c linux-libre-3.12.60-gnu/crypto/gcm.c
--- linux-libre-3.12.59-gnu/crypto/gcm.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/crypto/gcm.c	2016-05-19 05:02:51.000000000 -0400
@@ -1173,6 +1173,9 @@ static struct aead_request *crypto_rfc45
 	aead_request_set_tfm(subreq, ctx->child);
 	aead_request_set_callback(subreq, req->base.flags, crypto_rfc4543_done,
 				  req);
+	if (!enc)
+		aead_request_set_callback(subreq, req->base.flags,
+					  req->base.complete, req->base.data);
 	aead_request_set_crypt(subreq, cipher, cipher, enc ? 0 : authsize, iv);
 	aead_request_set_assoc(subreq, assoc, assoclen);
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/acpi/acpica/dsmethod.c linux-libre-3.12.60-gnu/drivers/acpi/acpica/dsmethod.c
--- linux-libre-3.12.59-gnu/drivers/acpi/acpica/dsmethod.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/acpi/acpica/dsmethod.c	2016-05-19 05:02:51.000000000 -0400
@@ -267,6 +267,9 @@ acpi_ds_begin_method_execution(struct ac
 				obj_desc->method.mutex->mutex.
 				    original_sync_level =
 				    obj_desc->method.mutex->mutex.sync_level;
+
+				obj_desc->method.mutex->mutex.thread_id =
+				    acpi_os_get_thread_id();
 			}
 		}
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/block/nbd.c linux-libre-3.12.60-gnu/drivers/block/nbd.c
--- linux-libre-3.12.59-gnu/drivers/block/nbd.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/block/nbd.c	2016-05-19 05:02:51.000000000 -0400
@@ -581,8 +581,8 @@ static void do_nbd_request(struct reques
 		BUG_ON(nbd->magic != NBD_MAGIC);
 
 		if (unlikely(!nbd->sock)) {
-			dev_err(disk_to_dev(nbd->disk),
-				"Attempted send on closed socket\n");
+			dev_err_ratelimited(disk_to_dev(nbd->disk),
+					    "Attempted send on closed socket\n");
 			req->errors++;
 			nbd_end_request(req);
 			spin_lock_irq(q->queue_lock);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/block/paride/pd.c linux-libre-3.12.60-gnu/drivers/block/paride/pd.c
--- linux-libre-3.12.59-gnu/drivers/block/paride/pd.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/block/paride/pd.c	2016-05-19 05:02:51.000000000 -0400
@@ -126,7 +126,7 @@
 */
 #include <linux/types.h>
 
-static bool verbose = 0;
+static int verbose = 0;
 static int major = PD_MAJOR;
 static char *name = PD_NAME;
 static int cluster = 64;
@@ -161,7 +161,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_GEO,
 static DEFINE_MUTEX(pd_mutex);
 static DEFINE_SPINLOCK(pd_lock);
 
-module_param(verbose, bool, 0);
+module_param(verbose, int, 0);
 module_param(major, int, 0);
 module_param(name, charp, 0);
 module_param(cluster, int, 0);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/block/paride/pt.c linux-libre-3.12.60-gnu/drivers/block/paride/pt.c
--- linux-libre-3.12.59-gnu/drivers/block/paride/pt.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/block/paride/pt.c	2016-05-19 05:02:51.000000000 -0400
@@ -117,7 +117,7 @@
 
 */
 
-static bool verbose = 0;
+static int verbose = 0;
 static int major = PT_MAJOR;
 static char *name = PT_NAME;
 static int disable = 0;
@@ -152,7 +152,7 @@ static int (*drives[4])[6] = {&drive0, &
 
 #include <asm/uaccess.h>
 
-module_param(verbose, bool, 0);
+module_param(verbose, int, 0);
 module_param(major, int, 0);
 module_param(name, charp, 0);
 module_param_array(drive0, int, NULL, 0);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/bus/imx-weim.c linux-libre-3.12.60-gnu/drivers/bus/imx-weim.c
--- linux-libre-3.12.59-gnu/drivers/bus/imx-weim.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/bus/imx-weim.c	2016-05-19 05:02:51.000000000 -0400
@@ -92,7 +92,7 @@ static int __init weim_parse_dt(struct p
 	struct device_node *child;
 	int ret;
 
-	for_each_child_of_node(pdev->dev.of_node, child) {
+	for_each_available_child_of_node(pdev->dev.of_node, child) {
 		if (!child->name)
 			continue;
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/clk/versatile/clk-sp810.c linux-libre-3.12.60-gnu/drivers/clk/versatile/clk-sp810.c
--- linux-libre-3.12.59-gnu/drivers/clk/versatile/clk-sp810.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/clk/versatile/clk-sp810.c	2016-05-19 05:02:51.000000000 -0400
@@ -141,6 +141,7 @@ void __init clk_sp810_of_setup(struct de
 	const char *parent_names[2];
 	char name[12];
 	struct clk_init_data init;
+	static int instance;
 	int i;
 
 	if (!sp810) {
@@ -172,7 +173,7 @@ void __init clk_sp810_of_setup(struct de
 	init.num_parents = ARRAY_SIZE(parent_names);
 
 	for (i = 0; i < ARRAY_SIZE(sp810->timerclken); i++) {
-		snprintf(name, ARRAY_SIZE(name), "timerclken%d", i);
+		snprintf(name, sizeof(name), "sp810_%d_%d", instance, i);
 
 		sp810->timerclken[i].sp810 = sp810;
 		sp810->timerclken[i].channel = i;
@@ -184,5 +185,6 @@ void __init clk_sp810_of_setup(struct de
 	}
 
 	of_clk_add_provider(node, clk_sp810_timerclken_of_get, sp810);
+	instance++;
 }
 CLK_OF_DECLARE(sp810, "arm,sp810", clk_sp810_of_setup);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/edac/i7core_edac.c linux-libre-3.12.60-gnu/drivers/edac/i7core_edac.c
--- linux-libre-3.12.59-gnu/drivers/edac/i7core_edac.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/edac/i7core_edac.c	2016-05-19 05:02:51.000000000 -0400
@@ -1878,7 +1878,7 @@ static int i7core_mce_check_error(struct
 
 	i7_dev = get_i7core_dev(mce->socketid);
 	if (!i7_dev)
-		return NOTIFY_BAD;
+		return NOTIFY_DONE;
 
 	mci = i7_dev->mci;
 	pvt = mci->pvt_info;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/edac/sb_edac.c linux-libre-3.12.60-gnu/drivers/edac/sb_edac.c
--- linux-libre-3.12.59-gnu/drivers/edac/sb_edac.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/edac/sb_edac.c	2016-05-19 05:02:51.000000000 -0400
@@ -1538,7 +1538,7 @@ static int sbridge_mce_check_error(struc
 
 	mci = get_mci_for_node_id(mce->socketid);
 	if (!mci)
-		return NOTIFY_BAD;
+		return NOTIFY_DONE;
 	pvt = mci->pvt_info;
 
 	/*
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/firmware/efi/vars.c linux-libre-3.12.60-gnu/drivers/firmware/efi/vars.c
--- linux-libre-3.12.59-gnu/drivers/firmware/efi/vars.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/firmware/efi/vars.c	2016-05-19 05:02:51.000000000 -0400
@@ -202,29 +202,44 @@ static const struct variable_validate va
 	{ NULL_GUID, "", NULL },
 };
 
+/*
+ * Check if @var_name matches the pattern given in @match_name.
+ *
+ * @var_name: an array of @len non-NUL characters.
+ * @match_name: a NUL-terminated pattern string, optionally ending in "*". A
+ *              final "*" character matches any trailing characters @var_name,
+ *              including the case when there are none left in @var_name.
+ * @match: on output, the number of non-wildcard characters in @match_name
+ *         that @var_name matches, regardless of the return value.
+ * @return: whether @var_name fully matches @match_name.
+ */
 static bool
 variable_matches(const char *var_name, size_t len, const char *match_name,
 		 int *match)
 {
 	for (*match = 0; ; (*match)++) {
 		char c = match_name[*match];
-		char u = var_name[*match];
 
-		/* Wildcard in the matching name means we've matched */
-		if (c == '*')
+		switch (c) {
+		case '*':
+			/* Wildcard in @match_name means we've matched. */
 			return true;
 
-		/* Case sensitive match */
-		if (!c && *match == len)
-			return true;
+		case '\0':
+			/* @match_name has ended. Has @var_name too? */
+			return (*match == len);
 
-		if (c != u)
+		default:
+			/*
+			 * We've reached a non-wildcard char in @match_name.
+			 * Continue only if there's an identical character in
+			 * @var_name.
+			 */
+			if (*match < len && c == var_name[*match])
+				continue;
 			return false;
-
-		if (!c)
-			return true;
+		}
 	}
-	return true;
 }
 
 bool
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/gpu/drm/i915/intel_crt.c linux-libre-3.12.60-gnu/drivers/gpu/drm/i915/intel_crt.c
--- linux-libre-3.12.59-gnu/drivers/gpu/drm/i915/intel_crt.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/gpu/drm/i915/intel_crt.c	2016-05-19 05:02:51.000000000 -0400
@@ -248,8 +248,14 @@ static bool intel_crt_compute_config(str
 		pipe_config->has_pch_encoder = true;
 
 	/* LPT FDI RX only supports 8bpc. */
-	if (HAS_PCH_LPT(dev))
+	if (HAS_PCH_LPT(dev)) {
+		if (pipe_config->bw_constrained && pipe_config->pipe_bpp < 24) {
+			DRM_DEBUG_KMS("LPT only supports 24bpp\n");
+			return false;
+		}
+
 		pipe_config->pipe_bpp = 24;
+	}
 
 	return true;
 }
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/gpu/drm/qxl/qxl_display.c linux-libre-3.12.60-gnu/drivers/gpu/drm/qxl/qxl_display.c
--- linux-libre-3.12.59-gnu/drivers/gpu/drm/qxl/qxl_display.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/gpu/drm/qxl/qxl_display.c	2016-05-19 05:02:51.000000000 -0400
@@ -287,10 +287,15 @@ static int qxl_crtc_cursor_set2(struct d
 
 	qxl_bo_kunmap(user_bo);
 
+	qcrtc->cur_x += qcrtc->hot_spot_x - hot_x;
+	qcrtc->cur_y += qcrtc->hot_spot_y - hot_y;
+	qcrtc->hot_spot_x = hot_x;
+	qcrtc->hot_spot_y = hot_y;
+
 	cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
 	cmd->type = QXL_CURSOR_SET;
-	cmd->u.set.position.x = qcrtc->cur_x;
-	cmd->u.set.position.y = qcrtc->cur_y;
+	cmd->u.set.position.x = qcrtc->cur_x + qcrtc->hot_spot_x;
+	cmd->u.set.position.y = qcrtc->cur_y + qcrtc->hot_spot_y;
 
 	cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0);
 
@@ -353,8 +358,8 @@ static int qxl_crtc_cursor_move(struct d
 
 	cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
 	cmd->type = QXL_CURSOR_MOVE;
-	cmd->u.position.x = qcrtc->cur_x;
-	cmd->u.position.y = qcrtc->cur_y;
+	cmd->u.position.x = qcrtc->cur_x + qcrtc->hot_spot_x;
+	cmd->u.position.y = qcrtc->cur_y + qcrtc->hot_spot_y;
 	qxl_release_unmap(qdev, release, &cmd->release_info);
 
 	qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/gpu/drm/qxl/qxl_drv.h linux-libre-3.12.60-gnu/drivers/gpu/drm/qxl/qxl_drv.h
--- linux-libre-3.12.59-gnu/drivers/gpu/drm/qxl/qxl_drv.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/gpu/drm/qxl/qxl_drv.h	2016-05-19 05:02:51.000000000 -0400
@@ -139,6 +139,8 @@ struct qxl_crtc {
 	int index;
 	int cur_x;
 	int cur_y;
+	int hot_spot_x;
+	int hot_spot_y;
 };
 
 struct qxl_output {
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/gpu/drm/radeon/atombios_crtc.c linux-libre-3.12.60-gnu/drivers/gpu/drm/radeon/atombios_crtc.c
--- linux-libre-3.12.59-gnu/drivers/gpu/drm/radeon/atombios_crtc.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/gpu/drm/radeon/atombios_crtc.c	2016-05-19 05:02:51.000000000 -0400
@@ -1572,6 +1572,7 @@ static u32 radeon_get_pll_use_mask(struc
 static int radeon_get_shared_dp_ppll(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
+	struct radeon_device *rdev = dev->dev_private;
 	struct drm_crtc *test_crtc;
 	struct radeon_crtc *test_radeon_crtc;
 
@@ -1581,6 +1582,10 @@ static int radeon_get_shared_dp_ppll(str
 		test_radeon_crtc = to_radeon_crtc(test_crtc);
 		if (test_radeon_crtc->encoder &&
 		    ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
+			/* PPLL2 is exclusive to UNIPHYA on DCE61 */
+			if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
+			    test_radeon_crtc->pll_id == ATOM_PPLL2)
+				continue;
 			/* for DP use the same PLL for all */
 			if (test_radeon_crtc->pll_id != ATOM_PPLL_INVALID)
 				return test_radeon_crtc->pll_id;
@@ -1602,6 +1607,7 @@ static int radeon_get_shared_nondp_ppll(
 {
 	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
 	struct drm_device *dev = crtc->dev;
+	struct radeon_device *rdev = dev->dev_private;
 	struct drm_crtc *test_crtc;
 	struct radeon_crtc *test_radeon_crtc;
 	u32 adjusted_clock, test_adjusted_clock;
@@ -1617,6 +1623,10 @@ static int radeon_get_shared_nondp_ppll(
 		test_radeon_crtc = to_radeon_crtc(test_crtc);
 		if (test_radeon_crtc->encoder &&
 		    !ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_radeon_crtc->encoder))) {
+			/* PPLL2 is exclusive to UNIPHYA on DCE61 */
+			if (ASIC_IS_DCE61(rdev) && !ASIC_IS_DCE8(rdev) &&
+			    test_radeon_crtc->pll_id == ATOM_PPLL2)
+				continue;
 			/* check if we are already driving this connector with another crtc */
 			if (test_radeon_crtc->connector == radeon_crtc->connector) {
 				/* if we are, return that pll */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/hv/vmbus_drv.c linux-libre-3.12.60-gnu/drivers/hv/vmbus_drv.c
--- linux-libre-3.12.59-gnu/drivers/hv/vmbus_drv.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/hv/vmbus_drv.c	2016-05-19 05:02:51.000000000 -0400
@@ -32,6 +32,7 @@
 #include <linux/acpi.h>
 #include <acpi/acpi_bus.h>
 #include <linux/completion.h>
+#include <linux/cpu.h>
 #include <linux/hyperv.h>
 #include <linux/kernel_stat.h>
 #include <asm/hyperv.h>
@@ -517,6 +518,39 @@ static void vmbus_flow_handler(unsigned
 	desc->action->handler(irq, desc->action->dev_id);
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+static int hyperv_cpu_disable(void)
+{
+	return -ENOSYS;
+}
+
+static void hv_cpu_hotplug_quirk(bool vmbus_loaded)
+{
+	static void *previous_cpu_disable;
+
+	/*
+	 * Offlining a CPU when running on newer hypervisors (WS2012R2, Win8,
+	 * ...) is not supported at this moment as channel interrupts are
+	 * distributed across all of them.
+	 */
+
+	if ((vmbus_proto_version == VERSION_WS2008) ||
+	    (vmbus_proto_version == VERSION_WIN7))
+		return;
+
+	if (vmbus_loaded) {
+		previous_cpu_disable = smp_ops.cpu_disable;
+		smp_ops.cpu_disable = hyperv_cpu_disable;
+		pr_notice("CPU offlining is not supported by hypervisor\n");
+	} else if (previous_cpu_disable)
+		smp_ops.cpu_disable = previous_cpu_disable;
+}
+#else
+static void hv_cpu_hotplug_quirk(bool vmbus_loaded)
+{
+}
+#endif
+
 /*
  * vmbus_bus_init -Main vmbus driver initialization routine.
  *
@@ -575,6 +609,7 @@ static int vmbus_bus_init(int irq)
 	if (ret)
 		goto err_alloc;
 
+	hv_cpu_hotplug_quirk(true);
 	vmbus_request_offers();
 
 	return 0;
@@ -812,6 +847,7 @@ static void __exit vmbus_exit(void)
 	bus_unregister(&hv_bus);
 	hv_cleanup();
 	acpi_bus_unregister_driver(&vmbus_acpi_driver);
+	hv_cpu_hotplug_quirk(false);
 }
 
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/iio/magnetometer/ak8975.c linux-libre-3.12.60-gnu/drivers/iio/magnetometer/ak8975.c
--- linux-libre-3.12.59-gnu/drivers/iio/magnetometer/ak8975.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/iio/magnetometer/ak8975.c	2016-05-19 05:02:51.000000000 -0400
@@ -151,6 +151,8 @@ static int ak8975_setup_irq(struct ak897
 	int rc;
 	int irq;
 
+	init_waitqueue_head(&data->data_ready_queue);
+	clear_bit(0, &data->flags);
 	if (client->irq)
 		irq = client->irq;
 	else
@@ -166,8 +168,6 @@ static int ak8975_setup_irq(struct ak897
 		return rc;
 	}
 
-	init_waitqueue_head(&data->data_ready_queue);
-	clear_bit(0, &data->flags);
 	data->eoc_irq = irq;
 
 	return rc;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/input/misc/max8997_haptic.c linux-libre-3.12.60-gnu/drivers/input/misc/max8997_haptic.c
--- linux-libre-3.12.59-gnu/drivers/input/misc/max8997_haptic.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/input/misc/max8997_haptic.c	2016-05-19 05:02:51.000000000 -0400
@@ -246,12 +246,14 @@ static int max8997_haptic_probe(struct p
 	struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
 	const struct max8997_platform_data *pdata =
 					dev_get_platdata(iodev->dev);
-	const struct max8997_haptic_platform_data *haptic_pdata =
-					pdata->haptic_pdata;
+	const struct max8997_haptic_platform_data *haptic_pdata = NULL;
 	struct max8997_haptic *chip;
 	struct input_dev *input_dev;
 	int error;
 
+	if (pdata)
+		haptic_pdata = pdata->haptic_pdata;
+
 	if (!haptic_pdata) {
 		dev_err(&pdev->dev, "no haptic platform data\n");
 		return -EINVAL;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/input/serio/i8042.c linux-libre-3.12.60-gnu/drivers/input/serio/i8042.c
--- linux-libre-3.12.59-gnu/drivers/input/serio/i8042.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/input/serio/i8042.c	2016-05-19 05:02:51.000000000 -0400
@@ -871,7 +871,7 @@ static int __init i8042_check_aux(void)
 static int i8042_controller_check(void)
 {
 	if (i8042_flush()) {
-		pr_err("No controller found\n");
+		pr_info("No controller found\n");
 		return -ENODEV;
 	}
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/input/tablet/gtco.c linux-libre-3.12.60-gnu/drivers/input/tablet/gtco.c
--- linux-libre-3.12.59-gnu/drivers/input/tablet/gtco.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/input/tablet/gtco.c	2016-05-19 05:02:51.000000000 -0400
@@ -869,6 +869,14 @@ static int gtco_probe(struct usb_interfa
 		goto err_free_buf;
 	}
 
+	/* Sanity check that a device has an endpoint */
+	if (usbinterface->altsetting[0].desc.bNumEndpoints < 1) {
+		dev_err(&usbinterface->dev,
+			"Invalid number of endpoints\n");
+		error = -EINVAL;
+		goto err_free_urb;
+	}
+
 	/*
 	 * The endpoint is always altsetting 0, we know this since we know
 	 * this device only has one interrupt endpoint
@@ -890,7 +898,7 @@ static int gtco_probe(struct usb_interfa
 	 * HID report descriptor
 	 */
 	if (usb_get_extra_descriptor(usbinterface->cur_altsetting,
-				     HID_DEVICE_TYPE, &hid_desc) != 0){
+				     HID_DEVICE_TYPE, &hid_desc) != 0) {
 		dev_err(&usbinterface->dev,
 			"Can't retrieve exta USB descriptor to get hid report descriptor length\n");
 		error = -EIO;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/input/touchscreen/ads7846.c linux-libre-3.12.60-gnu/drivers/input/touchscreen/ads7846.c
--- linux-libre-3.12.59-gnu/drivers/input/touchscreen/ads7846.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/input/touchscreen/ads7846.c	2016-05-19 05:02:51.000000000 -0400
@@ -700,18 +700,22 @@ static int ads7846_no_filter(void *ads,
 
 static int ads7846_get_value(struct ads7846 *ts, struct spi_message *m)
 {
+	int value;
 	struct spi_transfer *t =
 		list_entry(m->transfers.prev, struct spi_transfer, transfer_list);
 
 	if (ts->model == 7845) {
-		return be16_to_cpup((__be16 *)&(((char*)t->rx_buf)[1])) >> 3;
+		value = be16_to_cpup((__be16 *)&(((char *)t->rx_buf)[1]));
 	} else {
 		/*
 		 * adjust:  on-wire is a must-ignore bit, a BE12 value, then
 		 * padding; built from two 8 bit values written msb-first.
 		 */
-		return be16_to_cpup((__be16 *)t->rx_buf) >> 3;
+		value = be16_to_cpup((__be16 *)t->rx_buf);
 	}
+
+	/* enforce ADC output is 12 bits width */
+	return (value >> 3) & 0xfff;
 }
 
 static void ads7846_update_value(struct spi_message *m, int val)
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/misc/ad525x_dpot.c linux-libre-3.12.60-gnu/drivers/misc/ad525x_dpot.c
--- linux-libre-3.12.59-gnu/drivers/misc/ad525x_dpot.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/misc/ad525x_dpot.c	2016-05-19 05:02:51.000000000 -0400
@@ -216,7 +216,7 @@ static s32 dpot_read_i2c(struct dpot_dat
 			 */
 			value = swab16(value);
 
-			if (dpot->uid == DPOT_UID(AD5271_ID))
+			if (dpot->uid == DPOT_UID(AD5274_ID))
 				value = value >> 2;
 		return value;
 	default:
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/misc/Kconfig linux-libre-3.12.60-gnu/drivers/misc/Kconfig
--- linux-libre-3.12.59-gnu/drivers/misc/Kconfig	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/misc/Kconfig	2016-05-19 05:02:51.000000000 -0400
@@ -451,7 +451,7 @@ config ARM_CHARLCD
 	  still useful.
 
 config BMP085
-	bool
+	tristate
 	depends on SYSFS
 
 config BMP085_I2C
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/mmc/host/sdhci.c linux-libre-3.12.60-gnu/drivers/mmc/host/sdhci.c
--- linux-libre-3.12.59-gnu/drivers/mmc/host/sdhci.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/mmc/host/sdhci.c	2016-05-19 05:02:51.000000000 -0400
@@ -2417,9 +2417,7 @@ static irqreturn_t sdhci_irq(int irq, vo
 
 	if (host->runtime_suspended) {
 		spin_unlock(&host->lock);
-		pr_warning("%s: got irq while runtime suspended\n",
-		       mmc_hostname(host->mmc));
-		return IRQ_HANDLED;
+		return IRQ_NONE;
 	}
 
 	intmask = sdhci_readl(host, SDHCI_INT_STATUS);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/net/ethernet/atheros/atlx/atl2.c linux-libre-3.12.60-gnu/drivers/net/ethernet/atheros/atlx/atl2.c
--- linux-libre-3.12.59-gnu/drivers/net/ethernet/atheros/atlx/atl2.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/net/ethernet/atheros/atlx/atl2.c	2016-05-19 05:02:51.000000000 -0400
@@ -1413,7 +1413,7 @@ static int atl2_probe(struct pci_dev *pd
 
 	err = -EIO;
 
-	netdev->hw_features = NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_RX;
+	netdev->hw_features = NETIF_F_HW_VLAN_CTAG_RX;
 	netdev->features |= (NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX);
 
 	/* Init PHY as early as possible due to power saving issue  */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/net/ethernet/mellanox/mlx4/en_tx.c linux-libre-3.12.60-gnu/drivers/net/ethernet/mellanox/mlx4/en_tx.c
--- linux-libre-3.12.59-gnu/drivers/net/ethernet/mellanox/mlx4/en_tx.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/net/ethernet/mellanox/mlx4/en_tx.c	2016-05-19 05:02:51.000000000 -0400
@@ -343,7 +343,6 @@ static void mlx4_en_process_tx_cq(struct
 	u32 packets = 0;
 	u32 bytes = 0;
 	int factor = priv->cqe_factor;
-	u64 timestamp = 0;
 
 	if (!priv->port_up)
 		return;
@@ -375,9 +374,12 @@ static void mlx4_en_process_tx_cq(struct
 		new_index = be16_to_cpu(cqe->wqe_index) & size_mask;
 
 		do {
+			u64 timestamp = 0;
+
 			txbbs_skipped += ring->last_nr_txbb;
 			ring_index = (ring_index + ring->last_nr_txbb) & size_mask;
-			if (ring->tx_info[ring_index].ts_requested)
+
+			if (unlikely(ring->tx_info[ring_index].ts_requested))
 				timestamp = mlx4_en_get_cqe_ts(cqe);
 
 			/* free next descriptor */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/pinctrl/pinctrl-single.c linux-libre-3.12.60-gnu/drivers/pinctrl/pinctrl-single.c
--- linux-libre-3.12.59-gnu/drivers/pinctrl/pinctrl-single.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/pinctrl/pinctrl-single.c	2016-05-19 05:02:51.000000000 -0400
@@ -1263,9 +1263,9 @@ static int pcs_parse_bits_in_pinctrl_ent
 
 		/* Parse pins in each row from LSB */
 		while (mask) {
-			bit_pos = ffs(mask);
+			bit_pos = __ffs(mask);
 			pin_num_from_lsb = bit_pos / pcs->bits_per_pin;
-			mask_pos = ((pcs->fmask) << (bit_pos - 1));
+			mask_pos = ((pcs->fmask) << bit_pos);
 			val_pos = val & mask_pos;
 			submask = mask & mask_pos;
 			mask &= ~mask_pos;
@@ -1549,7 +1549,7 @@ static int pcs_probe(struct platform_dev
 	ret = of_property_read_u32(np, "pinctrl-single,function-mask",
 				   &pcs->fmask);
 	if (!ret) {
-		pcs->fshift = ffs(pcs->fmask) - 1;
+		pcs->fshift = __ffs(pcs->fmask);
 		pcs->fmax = pcs->fmask >> pcs->fshift;
 	} else {
 		/* If mask property doesn't exist, function mux is invalid. */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/pnp/pnpbios/bioscalls.c linux-libre-3.12.60-gnu/drivers/pnp/pnpbios/bioscalls.c
--- linux-libre-3.12.59-gnu/drivers/pnp/pnpbios/bioscalls.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/pnp/pnpbios/bioscalls.c	2016-05-19 05:02:51.000000000 -0400
@@ -21,7 +21,7 @@
 
 #include "pnpbios.h"
 
-static struct {
+__visible struct {
 	u16 offset;
 	u16 segment;
 } pnp_bios_callpoint;
@@ -41,6 +41,7 @@ asmlinkage void pnp_bios_callfunc(void);
 
 __asm__(".text			\n"
 	__ALIGN_STR "\n"
+	".globl pnp_bios_callfunc\n"
 	"pnp_bios_callfunc:\n"
 	"	pushl %edx	\n"
 	"	pushl %ecx	\n"
@@ -66,9 +67,9 @@ static struct desc_struct bad_bios_desc
  * after PnP BIOS oopses.
  */
 
-u32 pnp_bios_fault_esp;
-u32 pnp_bios_fault_eip;
-u32 pnp_bios_is_utter_crap = 0;
+__visible u32 pnp_bios_fault_esp;
+__visible u32 pnp_bios_fault_eip;
+__visible u32 pnp_bios_is_utter_crap = 0;
 
 static spinlock_t pnp_bios_lock;
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/rtc/rtc-vr41xx.c linux-libre-3.12.60-gnu/drivers/rtc/rtc-vr41xx.c
--- linux-libre-3.12.59-gnu/drivers/rtc/rtc-vr41xx.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/rtc/rtc-vr41xx.c	2016-05-19 05:02:51.000000000 -0400
@@ -272,12 +272,13 @@ static irqreturn_t rtclong1_interrupt(in
 }
 
 static const struct rtc_class_ops vr41xx_rtc_ops = {
-	.release	= vr41xx_rtc_release,
-	.ioctl		= vr41xx_rtc_ioctl,
-	.read_time	= vr41xx_rtc_read_time,
-	.set_time	= vr41xx_rtc_set_time,
-	.read_alarm	= vr41xx_rtc_read_alarm,
-	.set_alarm	= vr41xx_rtc_set_alarm,
+	.release		= vr41xx_rtc_release,
+	.ioctl			= vr41xx_rtc_ioctl,
+	.read_time		= vr41xx_rtc_read_time,
+	.set_time		= vr41xx_rtc_set_time,
+	.read_alarm		= vr41xx_rtc_read_alarm,
+	.set_alarm		= vr41xx_rtc_set_alarm,
+	.alarm_irq_enable	= vr41xx_rtc_alarm_irq_enable,
 };
 
 static int rtc_probe(struct platform_device *pdev)
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/scsi/lpfc/lpfc_init.c linux-libre-3.12.60-gnu/drivers/scsi/lpfc/lpfc_init.c
--- linux-libre-3.12.59-gnu/drivers/scsi/lpfc/lpfc_init.c	2016-04-27 17:57:43.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/scsi/lpfc/lpfc_init.c	2016-05-24 02:48:26.000000000 -0400
@@ -2697,7 +2697,7 @@ lpfc_online(struct lpfc_hba *phba)
 	}
 
 	vports = lpfc_create_vport_work_array(phba);
-	if (vports != NULL)
+	if (vports != NULL) {
 		for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
 			struct Scsi_Host *shost;
 			shost = lpfc_shost_from_vport(vports[i]);
@@ -2714,7 +2714,8 @@ lpfc_online(struct lpfc_hba *phba)
 			}
 			spin_unlock_irq(shost->host_lock);
 		}
-		lpfc_destroy_vport_work_array(phba, vports);
+	}
+	lpfc_destroy_vport_work_array(phba, vports);
 
 	lpfc_unblock_mgmt_io(phba);
 	return 0;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/scsi/scsi_lib.c linux-libre-3.12.60-gnu/drivers/scsi/scsi_lib.c
--- linux-libre-3.12.59-gnu/drivers/scsi/scsi_lib.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/scsi/scsi_lib.c	2016-05-19 05:02:51.000000000 -0400
@@ -1096,7 +1096,17 @@ int scsi_init_io(struct scsi_cmnd *cmd,
 		struct scsi_data_buffer *prot_sdb = cmd->prot_sdb;
 		int ivecs, count;
 
-		BUG_ON(prot_sdb == NULL);
+		if (prot_sdb == NULL) {
+			/*
+			 * This can happen if someone (e.g. multipath)
+			 * queues a command to a device on an adapter
+			 * that does not support DIX.
+			 */
+			WARN_ON_ONCE(1);
+			error = BLKPREP_KILL;
+			goto err_exit;
+		}
+
 		ivecs = blk_rq_count_integrity_sg(rq->q, rq->bio);
 
 		if (scsi_alloc_sgtable(prot_sdb, ivecs, gfp_mask)) {
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/tty/serial/sh-sci.c linux-libre-3.12.60-gnu/drivers/tty/serial/sh-sci.c
--- linux-libre-3.12.59-gnu/drivers/tty/serial/sh-sci.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/tty/serial/sh-sci.c	2016-05-19 05:02:51.000000000 -0400
@@ -41,7 +41,6 @@
 #include <linux/console.h>
 #include <linux/platform_device.h>
 #include <linux/serial_sci.h>
-#include <linux/notifier.h>
 #include <linux/pm_runtime.h>
 #include <linux/cpufreq.h>
 #include <linux/clk.h>
@@ -97,8 +96,6 @@ struct sci_port {
 	struct timer_list		rx_timer;
 	unsigned int			rx_timeout;
 #endif
-
-	struct notifier_block		freq_transition;
 };
 
 /* Function prototypes */
@@ -1008,30 +1005,6 @@ static irqreturn_t sci_mpxed_interrupt(i
 	return ret;
 }
 
-/*
- * Here we define a transition notifier so that we can update all of our
- * ports' baud rate when the peripheral clock changes.
- */
-static int sci_notifier(struct notifier_block *self,
-			unsigned long phase, void *p)
-{
-	struct sci_port *sci_port;
-	unsigned long flags;
-
-	sci_port = container_of(self, struct sci_port, freq_transition);
-
-	if ((phase == CPUFREQ_POSTCHANGE) ||
-	    (phase == CPUFREQ_RESUMECHANGE)) {
-		struct uart_port *port = &sci_port->port;
-
-		spin_lock_irqsave(&port->lock, flags);
-		port->uartclk = clk_get_rate(sci_port->iclk);
-		spin_unlock_irqrestore(&port->lock, flags);
-	}
-
-	return NOTIFY_OK;
-}
-
 static struct sci_irq_desc {
 	const char	*desc;
 	irq_handler_t	handler;
@@ -2427,9 +2400,6 @@ static int sci_remove(struct platform_de
 {
 	struct sci_port *port = platform_get_drvdata(dev);
 
-	cpufreq_unregister_notifier(&port->freq_transition,
-				    CPUFREQ_TRANSITION_NOTIFIER);
-
 	uart_remove_one_port(&sci_uart_driver, &port->port);
 
 	sci_cleanup_single(port);
@@ -2487,15 +2457,6 @@ static int sci_probe(struct platform_dev
 	if (ret)
 		return ret;
 
-	sp->freq_transition.notifier_call = sci_notifier;
-
-	ret = cpufreq_register_notifier(&sp->freq_transition,
-					CPUFREQ_TRANSITION_NOTIFIER);
-	if (unlikely(ret < 0)) {
-		sci_cleanup_single(sp);
-		return ret;
-	}
-
 #ifdef CONFIG_SH_STANDARD_BIOS
 	sh_bios_gdb_detach();
 #endif
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/usb/core/hcd-pci.c linux-libre-3.12.60-gnu/drivers/usb/core/hcd-pci.c
--- linux-libre-3.12.59-gnu/drivers/usb/core/hcd-pci.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/usb/core/hcd-pci.c	2016-05-19 05:02:51.000000000 -0400
@@ -74,6 +74,15 @@ static void for_each_companion(struct pc
 		if (companion->bus != pdev->bus ||
 				PCI_SLOT(companion->devfn) != slot)
 			continue;
+
+		/*
+		 * Companion device should be either UHCI,OHCI or EHCI host
+		 * controller, otherwise skip.
+		 */
+		if (companion->class != CL_UHCI && companion->class != CL_OHCI &&
+				companion->class != CL_EHCI)
+			continue;
+
 		companion_hcd = pci_get_drvdata(companion);
 		if (!companion_hcd || !companion_hcd->self.root_hub)
 			continue;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/usb/host/xhci-mem.c linux-libre-3.12.60-gnu/drivers/usb/host/xhci-mem.c
--- linux-libre-3.12.59-gnu/drivers/usb/host/xhci-mem.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/usb/host/xhci-mem.c	2016-05-19 05:02:51.000000000 -0400
@@ -1785,6 +1785,12 @@ no_bw:
 	kfree(xhci->rh_bw);
 	kfree(xhci->ext_caps);
 
+	xhci->usb2_ports = NULL;
+	xhci->usb3_ports = NULL;
+	xhci->port_array = NULL;
+	xhci->rh_bw = NULL;
+	xhci->ext_caps = NULL;
+
 	xhci->page_size = 0;
 	xhci->page_shift = 0;
 	xhci->bus_state[0].bus_suspended = 0;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/usb/serial/cp210x.c linux-libre-3.12.60-gnu/drivers/usb/serial/cp210x.c
--- linux-libre-3.12.59-gnu/drivers/usb/serial/cp210x.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/usb/serial/cp210x.c	2016-05-19 05:02:51.000000000 -0400
@@ -108,6 +108,7 @@ static const struct usb_device_id id_tab
 	{ USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
 	{ USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
 	{ USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
+	{ USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
 	{ USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
 	{ USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
 	{ USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
@@ -117,6 +118,7 @@ static const struct usb_device_id id_tab
 	{ USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
 	{ USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
 	{ USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
+	{ USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
 	{ USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
 	{ USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
 	{ USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
@@ -140,6 +142,8 @@ static const struct usb_device_id id_tab
 	{ USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
 	{ USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
 	{ USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
+	{ USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */
+	{ USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
 	{ USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
 	{ USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
 	{ USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/video/da8xx-fb.c linux-libre-3.12.60-gnu/drivers/video/da8xx-fb.c
--- linux-libre-3.12.59-gnu/drivers/video/da8xx-fb.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/video/da8xx-fb.c	2016-05-19 05:02:51.000000000 -0400
@@ -210,8 +210,7 @@ static struct fb_videomode known_lcd_pan
 		.lower_margin   = 2,
 		.hsync_len      = 0,
 		.vsync_len      = 0,
-		.sync           = FB_SYNC_CLK_INVERT |
-			FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+		.sync           = FB_SYNC_CLK_INVERT,
 	},
 	/* Sharp LK043T1DG01 */
 	[1] = {
@@ -225,7 +224,7 @@ static struct fb_videomode known_lcd_pan
 		.lower_margin   = 2,
 		.hsync_len      = 41,
 		.vsync_len      = 10,
-		.sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+		.sync           = 0,
 		.flag           = 0,
 	},
 	[2] = {
@@ -240,7 +239,7 @@ static struct fb_videomode known_lcd_pan
 		.lower_margin   = 10,
 		.hsync_len      = 10,
 		.vsync_len      = 10,
-		.sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+		.sync           = 0,
 		.flag           = 0,
 	},
 };
diff -druNp --no-dereference linux-libre-3.12.59-gnu/drivers/virtio/virtio_balloon.c linux-libre-3.12.60-gnu/drivers/virtio/virtio_balloon.c
--- linux-libre-3.12.59-gnu/drivers/virtio/virtio_balloon.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/drivers/virtio/virtio_balloon.c	2016-05-19 05:02:51.000000000 -0400
@@ -164,8 +164,8 @@ static void release_pages_by_pfn(const u
 	/* Find pfns pointing at start of each page, get pages and free them. */
 	for (i = 0; i < num; i += VIRTIO_BALLOON_PAGES_PER_PAGE) {
 		struct page *page = balloon_pfn_to_page(pfns[i]);
-		balloon_page_free(page);
 		adjust_managed_page_count(page, 1);
+		put_page(page); /* balloon reference */
 	}
 }
 
@@ -399,6 +399,8 @@ int virtballoon_migratepage(struct addre
 	if (!mutex_trylock(&vb->balloon_lock))
 		return -EAGAIN;
 
+	get_page(newpage); /* balloon reference */
+
 	/* balloon's page migration 1st step  -- inflate "newpage" */
 	spin_lock_irqsave(&vb_dev_info->pages_lock, flags);
 	balloon_page_insert(newpage, mapping, &vb_dev_info->pages);
@@ -408,12 +410,7 @@ int virtballoon_migratepage(struct addre
 	set_page_pfns(vb->pfns, newpage);
 	tell_host(vb, vb->inflate_vq);
 
-	/*
-	 * balloon's page migration 2nd step -- deflate "page"
-	 *
-	 * It's safe to delete page->lru here because this page is at
-	 * an isolated migration list, and this step is expected to happen here
-	 */
+	/* balloon's page migration 2nd step -- deflate "page" */
 	balloon_page_delete(page);
 	vb->num_pfns = VIRTIO_BALLOON_PAGES_PER_PAGE;
 	set_page_pfns(vb->pfns, page);
@@ -421,7 +418,9 @@ int virtballoon_migratepage(struct addre
 
 	mutex_unlock(&vb->balloon_lock);
 
-	return MIGRATEPAGE_BALLOON_SUCCESS;
+	put_page(page); /* balloon reference */
+
+	return MIGRATEPAGE_SUCCESS;
 }
 
 /* define the balloon_mapping->a_ops callback to allow balloon page migration */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/fs/isofs/rock.c linux-libre-3.12.60-gnu/fs/isofs/rock.c
--- linux-libre-3.12.59-gnu/fs/isofs/rock.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/fs/isofs/rock.c	2016-05-19 05:02:51.000000000 -0400
@@ -203,6 +203,8 @@ int get_rock_ridge_filename(struct iso_d
 	int retnamlen = 0;
 	int truncate = 0;
 	int ret = 0;
+	char *p;
+	int len;
 
 	if (!ISOFS_SB(inode->i_sb)->s_rock)
 		return 0;
@@ -267,12 +269,17 @@ repeat:
 					rr->u.NM.flags);
 				break;
 			}
-			if ((strlen(retname) + rr->len - 5) >= 254) {
+			len = rr->len - 5;
+			if (retnamlen + len >= 254) {
 				truncate = 1;
 				break;
 			}
-			strncat(retname, rr->u.NM.name, rr->len - 5);
-			retnamlen += rr->len - 5;
+			p = memchr(rr->u.NM.name, '\0', len);
+			if (unlikely(p))
+				len = p - rr->u.NM.name;
+			memcpy(retname + retnamlen, rr->u.NM.name, len);
+			retnamlen += len;
+			retname[retnamlen] = '\0';
 			break;
 		case SIG('R', 'E'):
 			kfree(rs.buffer);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/fs/proc/base.c linux-libre-3.12.60-gnu/fs/proc/base.c
--- linux-libre-3.12.59-gnu/fs/proc/base.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/fs/proc/base.c	2016-05-19 05:02:51.000000000 -0400
@@ -844,7 +844,8 @@ static ssize_t environ_read(struct file
 	int ret = 0;
 	struct mm_struct *mm = file->private_data;
 
-	if (!mm)
+	/* Ensure the process spawned far enough to have an environment. */
+	if (!mm || !mm->env_end)
 		return 0;
 
 	page = (char *)__get_free_page(GFP_TEMPORARY);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/fs/xfs/xfs_ioctl.c linux-libre-3.12.60-gnu/fs/xfs/xfs_ioctl.c
--- linux-libre-3.12.59-gnu/fs/xfs/xfs_ioctl.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/fs/xfs/xfs_ioctl.c	2016-05-19 05:02:51.000000000 -0400
@@ -1718,12 +1718,6 @@ xfs_file_ioctl(
 		if (mp->m_flags & XFS_MOUNT_RDONLY)
 			return -XFS_ERROR(EROFS);
 
-		if (!capable(CAP_SYS_ADMIN))
-			return -EPERM;
-
-		if (mp->m_flags & XFS_MOUNT_RDONLY)
-			return -XFS_ERROR(EROFS);
-
 		if (copy_from_user(&eofb, arg, sizeof(eofb)))
 			return -XFS_ERROR(EFAULT);
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/balloon_compaction.h linux-libre-3.12.60-gnu/include/linux/balloon_compaction.h
--- linux-libre-3.12.59-gnu/include/linux/balloon_compaction.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/balloon_compaction.h	2016-05-19 05:02:51.000000000 -0400
@@ -27,10 +27,13 @@
  *      counter raised only while it is under our special handling;
  *
  * iii. after the lockless scan step have selected a potential balloon page for
- *      isolation, re-test the page->mapping flags and the page ref counter
+ *      isolation, re-test the PageBalloon mark and the PagePrivate flag
  *      under the proper page lock, to ensure isolating a valid balloon page
  *      (not yet isolated, nor under release procedure)
  *
+ *  iv. isolation or dequeueing procedure must clear PagePrivate flag under
+ *      page lock together with removing page from balloon device page list.
+ *
  * The functions provided by this interface are placed to help on coping with
  * the aforementioned balloon page corner case, as well as to ensure the simple
  * set of exposed rules are satisfied while we are dealing with balloon pages
@@ -71,28 +74,6 @@ static inline void balloon_devinfo_free(
 	kfree(b_dev_info);
 }
 
-/*
- * balloon_page_free - release a balloon page back to the page free lists
- * @page: ballooned page to be set free
- *
- * This function must be used to properly set free an isolated/dequeued balloon
- * page at the end of a sucessful page migration, or at the balloon driver's
- * page release procedure.
- */
-static inline void balloon_page_free(struct page *page)
-{
-	/*
-	 * Balloon pages always get an extra refcount before being isolated
-	 * and before being dequeued to help on sorting out fortuite colisions
-	 * between a thread attempting to isolate and another thread attempting
-	 * to release the very same balloon page.
-	 *
-	 * Before we handle the page back to Buddy, lets drop its extra refcnt.
-	 */
-	put_page(page);
-	__free_page(page);
-}
-
 #ifdef CONFIG_BALLOON_COMPACTION
 extern bool balloon_page_isolate(struct page *page);
 extern void balloon_page_putback(struct page *page);
@@ -108,74 +89,33 @@ static inline void balloon_mapping_free(
 }
 
 /*
- * page_flags_cleared - helper to perform balloon @page ->flags tests.
- *
- * As balloon pages are obtained from buddy and we do not play with page->flags
- * at driver level (exception made when we get the page lock for compaction),
- * we can safely identify a ballooned page by checking if the
- * PAGE_FLAGS_CHECK_AT_PREP page->flags are all cleared.  This approach also
- * helps us skip ballooned pages that are locked for compaction or release, thus
- * mitigating their racy check at balloon_page_movable()
- */
-static inline bool page_flags_cleared(struct page *page)
-{
-	return !(page->flags & PAGE_FLAGS_CHECK_AT_PREP);
-}
-
-/*
- * __is_movable_balloon_page - helper to perform @page mapping->flags tests
+ * __is_movable_balloon_page - helper to perform @page PageBalloon tests
  */
 static inline bool __is_movable_balloon_page(struct page *page)
 {
-	struct address_space *mapping = page->mapping;
-	return mapping_balloon(mapping);
+	return PageBalloon(page);
 }
 
 /*
- * balloon_page_movable - test page->mapping->flags to identify balloon pages
- *			  that can be moved by compaction/migration.
- *
- * This function is used at core compaction's page isolation scheme, therefore
- * most pages exposed to it are not enlisted as balloon pages and so, to avoid
- * undesired side effects like racing against __free_pages(), we cannot afford
- * holding the page locked while testing page->mapping->flags here.
+ * balloon_page_movable - test PageBalloon to identify balloon pages
+ *			  and PagePrivate to check that the page is not
+ *			  isolated and can be moved by compaction/migration.
  *
  * As we might return false positives in the case of a balloon page being just
- * released under us, the page->mapping->flags need to be re-tested later,
- * under the proper page lock, at the functions that will be coping with the
- * balloon page case.
+ * released under us, this need to be re-tested later, under the page lock.
  */
 static inline bool balloon_page_movable(struct page *page)
 {
-	/*
-	 * Before dereferencing and testing mapping->flags, let's make sure
-	 * this is not a page that uses ->mapping in a different way
-	 */
-	if (page_flags_cleared(page) && !page_mapped(page) &&
-	    page_count(page) == 1)
-		return __is_movable_balloon_page(page);
-
-	return false;
+	return PageBalloon(page) && PagePrivate(page);
 }
 
 /*
  * isolated_balloon_page - identify an isolated balloon page on private
  *			   compaction/migration page lists.
- *
- * After a compaction thread isolates a balloon page for migration, it raises
- * the page refcount to prevent concurrent compaction threads from re-isolating
- * the same page. For that reason putback_movable_pages(), or other routines
- * that need to identify isolated balloon pages on private pagelists, cannot
- * rely on balloon_page_movable() to accomplish the task.
  */
 static inline bool isolated_balloon_page(struct page *page)
 {
-	/* Already isolated balloon pages, by default, have a raised refcount */
-	if (page_flags_cleared(page) && !page_mapped(page) &&
-	    page_count(page) >= 2)
-		return __is_movable_balloon_page(page);
-
-	return false;
+	return PageBalloon(page);
 }
 
 /*
@@ -192,6 +132,8 @@ static inline void balloon_page_insert(s
 				       struct address_space *mapping,
 				       struct list_head *head)
 {
+	__SetPageBalloon(page);
+	SetPagePrivate(page);
 	page->mapping = mapping;
 	list_add(&page->lru, head);
 }
@@ -206,8 +148,12 @@ static inline void balloon_page_insert(s
  */
 static inline void balloon_page_delete(struct page *page)
 {
+	__ClearPageBalloon(page);
 	page->mapping = NULL;
-	list_del(&page->lru);
+	if (PagePrivate(page)) {
+		ClearPagePrivate(page);
+		list_del(&page->lru);
+	}
 }
 
 /*
@@ -258,6 +204,11 @@ static inline void balloon_page_delete(s
 	list_del(&page->lru);
 }
 
+static inline bool __is_movable_balloon_page(struct page *page)
+{
+	return false;
+}
+
 static inline bool balloon_page_movable(struct page *page)
 {
 	return false;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/compiler-gcc.h linux-libre-3.12.60-gnu/include/linux/compiler-gcc.h
--- linux-libre-3.12.59-gnu/include/linux/compiler-gcc.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/compiler-gcc.h	2016-05-19 05:02:51.000000000 -0400
@@ -177,7 +177,7 @@
 #define unreachable() __builtin_unreachable()
 
 /* Mark a function definition as prohibited from being cloned. */
-#define __noclone	__attribute__((__noclone__))
+#define __noclone	__attribute__((__noclone__, __optimize__("no-tracer")))
 
 #endif /* GCC_VERSION >= 40500 */
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/cpuset.h linux-libre-3.12.60-gnu/include/linux/cpuset.h
--- linux-libre-3.12.59-gnu/include/linux/cpuset.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/cpuset.h	2016-05-19 05:02:51.000000000 -0400
@@ -132,10 +132,14 @@ static inline bool read_mems_allowed_ret
 
 static inline void set_mems_allowed(nodemask_t nodemask)
 {
+	unsigned long flags;
+
 	task_lock(current);
+	local_irq_save(flags);
 	write_seqcount_begin(&current->mems_allowed_seq);
 	current->mems_allowed = nodemask;
 	write_seqcount_end(&current->mems_allowed_seq);
+	local_irq_restore(flags);
 	task_unlock(current);
 }
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/migrate.h linux-libre-3.12.60-gnu/include/linux/migrate.h
--- linux-libre-3.12.59-gnu/include/linux/migrate.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/migrate.h	2016-05-19 05:02:51.000000000 -0400
@@ -13,18 +13,9 @@ typedef void free_page_t(struct page *pa
  * Return values from addresss_space_operations.migratepage():
  * - negative errno on page migration failure;
  * - zero on page migration success;
- *
- * The balloon page migration introduces this special case where a 'distinct'
- * return code is used to flag a successful page migration to unmap_and_move().
- * This approach is necessary because page migration can race against balloon
- * deflation procedure, and for such case we could introduce a nasty page leak
- * if a successfully migrated balloon page gets released concurrently with
- * migration's unmap_and_move() wrap-up steps.
  */
 #define MIGRATEPAGE_SUCCESS		0
-#define MIGRATEPAGE_BALLOON_SUCCESS	1 /* special ret code for balloon page
-					   * sucessful migration case.
-					   */
+
 enum migrate_reason {
 	MR_COMPACTION,
 	MR_MEMORY_FAILURE,
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/mm.h linux-libre-3.12.60-gnu/include/linux/mm.h
--- linux-libre-3.12.59-gnu/include/linux/mm.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/mm.h	2016-05-19 05:02:51.000000000 -0400
@@ -477,6 +477,25 @@ static inline void __ClearPageBuddy(stru
 	atomic_set(&page->_mapcount, -1);
 }
 
+#define PAGE_BALLOON_MAPCOUNT_VALUE (-256)
+
+static inline int PageBalloon(struct page *page)
+{
+	return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE;
+}
+
+static inline void __SetPageBalloon(struct page *page)
+{
+	VM_BUG_ON(atomic_read(&page->_mapcount) != -1);
+	atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE);
+}
+
+static inline void __ClearPageBalloon(struct page *page)
+{
+	VM_BUG_ON(!PageBalloon(page));
+	atomic_set(&page->_mapcount, -1);
+}
+
 void put_page(struct page *page);
 void put_pages_list(struct list_head *pages);
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/mod_devicetable.h linux-libre-3.12.60-gnu/include/linux/mod_devicetable.h
--- linux-libre-3.12.59-gnu/include/linux/mod_devicetable.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/mod_devicetable.h	2016-05-19 05:02:51.000000000 -0400
@@ -398,6 +398,7 @@ struct virtio_device_id {
 /*
  * For Hyper-V devices we use the device guid as the id.
  */
+#define vmbus_device_id hv_vmbus_device_id
 struct hv_vmbus_device_id {
 	__u8 guid[16];
 	kernel_ulong_t driver_data;	/* Data private to the driver */
@@ -548,6 +549,11 @@ struct amba_id {
  * See documentation of "x86_match_cpu" for details.
  */
 
+/*
+ * MODULE_DEVICE_TABLE expects this struct to be called x86cpu_device_id.
+ * Although gcc seems to ignore this error, clang fails without this define.
+ */
+#define x86cpu_device_id x86_cpu_id
 struct x86_cpu_id {
 	__u16 vendor;
 	__u16 family;
@@ -575,6 +581,7 @@ struct ipack_device_id {
 #define MEI_CL_MODULE_PREFIX "mei:"
 #define MEI_CL_NAME_SIZE 32
 
+#define mei_device_id mei_cl_device_id
 struct mei_cl_device_id {
 	char name[MEI_CL_NAME_SIZE];
 	kernel_ulong_t driver_info;
@@ -594,6 +601,7 @@ struct mei_cl_device_id {
  * Identifies a RapidIO device based on both the device/vendor IDs and
  * the assembly device/vendor IDs.
  */
+#define rapidio_device_id rio_device_id
 struct rio_device_id {
 	__u16 did, vid;
 	__u16 asm_did, asm_vid;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/include/linux/poison.h linux-libre-3.12.60-gnu/include/linux/poison.h
--- linux-libre-3.12.59-gnu/include/linux/poison.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/include/linux/poison.h	2016-05-19 05:02:51.000000000 -0400
@@ -19,8 +19,8 @@
  * under normal circumstances, used to verify that nobody uses
  * non-initialized list entries.
  */
-#define LIST_POISON1  ((void *) 0x00100100 + POISON_POINTER_DELTA)
-#define LIST_POISON2  ((void *) 0x00200200 + POISON_POINTER_DELTA)
+#define LIST_POISON1  ((void *) 0x100 + POISON_POINTER_DELTA)
+#define LIST_POISON2  ((void *) 0x200 + POISON_POINTER_DELTA)
 
 /********** include/linux/timer.h **********/
 /*
diff -druNp --no-dereference linux-libre-3.12.59-gnu/kernel/sched/core.c linux-libre-3.12.60-gnu/kernel/sched/core.c
--- linux-libre-3.12.59-gnu/kernel/sched/core.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/kernel/sched/core.c	2016-05-19 05:02:51.000000000 -0400
@@ -6865,8 +6865,12 @@ void sched_move_task(struct task_struct
 	if (unlikely(running))
 		tsk->sched_class->put_prev_task(rq, tsk);
 
-	tg = container_of(task_css_check(tsk, cpu_cgroup_subsys_id,
-				lockdep_is_held(&tsk->sighand->siglock)),
+	/*
+	 * All callers are synchronized by task_rq_lock(); we do not use RCU
+	 * which is pointless here. Thus, we pass "true" to task_css_check()
+	 * to prevent lockdep warnings.
+	 */
+	tg = container_of(task_css_check(tsk, cpu_cgroup_subsys_id, true),
 			  struct task_group, css);
 	tg = autogroup_task_group(tsk, tg);
 	tsk->sched_task_group = tg;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/kernel/workqueue.c linux-libre-3.12.60-gnu/kernel/workqueue.c
--- linux-libre-3.12.59-gnu/kernel/workqueue.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/kernel/workqueue.c	2016-05-19 05:02:51.000000000 -0400
@@ -622,6 +622,35 @@ static void set_work_pool_and_clear_pend
 	 */
 	smp_wmb();
 	set_work_data(work, (unsigned long)pool_id << WORK_OFFQ_POOL_SHIFT, 0);
+	/*
+	 * The following mb guarantees that previous clear of a PENDING bit
+	 * will not be reordered with any speculative LOADS or STORES from
+	 * work->current_func, which is executed afterwards.  This possible
+	 * reordering can lead to a missed execution on attempt to qeueue
+	 * the same @work.  E.g. consider this case:
+	 *
+	 *   CPU#0                         CPU#1
+	 *   ----------------------------  --------------------------------
+	 *
+	 * 1  STORE event_indicated
+	 * 2  queue_work_on() {
+	 * 3    test_and_set_bit(PENDING)
+	 * 4 }                             set_..._and_clear_pending() {
+	 * 5                                 set_work_data() # clear bit
+	 * 6                                 smp_mb()
+	 * 7                               work->current_func() {
+	 * 8				      LOAD event_indicated
+	 *				   }
+	 *
+	 * Without an explicit full barrier speculative LOAD on line 8 can
+	 * be executed before CPU#0 does STORE on line 1.  If that happens,
+	 * CPU#0 observes the PENDING bit is still set and new execution of
+	 * a @work is not queued in a hope, that CPU#1 will eventually
+	 * finish the queued @work.  Meanwhile CPU#1 does not see
+	 * event_indicated is set, because speculative LOAD was executed
+	 * before actual STORE.
+	 */
+	smp_mb();
 }
 
 static void clear_work_data(struct work_struct *work)
diff -druNp --no-dereference linux-libre-3.12.59-gnu/lib/asn1_decoder.c linux-libre-3.12.60-gnu/lib/asn1_decoder.c
--- linux-libre-3.12.59-gnu/lib/asn1_decoder.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/lib/asn1_decoder.c	2016-05-19 05:02:51.000000000 -0400
@@ -69,7 +69,7 @@ next_tag:
 
 	/* Extract a tag from the data */
 	tag = data[dp++];
-	if (tag == 0) {
+	if (tag == ASN1_EOC) {
 		/* It appears to be an EOC. */
 		if (data[dp++] != 0)
 			goto invalid_eoc;
@@ -91,10 +91,8 @@ next_tag:
 
 	/* Extract the length */
 	len = data[dp++];
-	if (len <= 0x7f) {
-		dp += len;
-		goto next_tag;
-	}
+	if (len <= 0x7f)
+		goto check_length;
 
 	if (unlikely(len == ASN1_INDEFINITE_LENGTH)) {
 		/* Indefinite length */
@@ -105,14 +103,18 @@ next_tag:
 	}
 
 	n = len - 0x80;
-	if (unlikely(n > sizeof(size_t) - 1))
+	if (unlikely(n > sizeof(len) - 1))
 		goto length_too_long;
 	if (unlikely(n > datalen - dp))
 		goto data_overrun_error;
-	for (len = 0; n > 0; n--) {
+	len = 0;
+	for (; n > 0; n--) {
 		len <<= 8;
 		len |= data[dp++];
 	}
+check_length:
+	if (len > datalen - dp)
+		goto data_overrun_error;
 	dp += len;
 	goto next_tag;
 
@@ -208,9 +210,8 @@ next_op:
 		unsigned char tmp;
 
 		/* Skip conditional matches if possible */
-		if ((op & ASN1_OP_MATCH__COND &&
-		     flags & FLAG_MATCHED) ||
-		    dp == datalen) {
+		if ((op & ASN1_OP_MATCH__COND && flags & FLAG_MATCHED) ||
+		    (op & ASN1_OP_MATCH__SKIP && dp == datalen)) {
 			pc += asn1_op_lengths[op];
 			goto next_op;
 		}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/lib/lz4/lz4defs.h linux-libre-3.12.60-gnu/lib/lz4/lz4defs.h
--- linux-libre-3.12.59-gnu/lib/lz4/lz4defs.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/lib/lz4/lz4defs.h	2016-05-19 05:02:51.000000000 -0400
@@ -11,8 +11,7 @@
 /*
  * Detects 64 bits mode
  */
-#if (defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) \
-	|| defined(__ppc64__) || defined(__LP64__))
+#if defined(CONFIG_64BIT)
 #define LZ4_ARCH64 1
 #else
 #define LZ4_ARCH64 0
@@ -35,6 +34,10 @@ typedef struct _U64_S { u64 v; } U64_S;
 
 #define PUT4(s, d) (A32(d) = A32(s))
 #define PUT8(s, d) (A64(d) = A64(s))
+
+#define LZ4_READ_LITTLEENDIAN_16(d, s, p)	\
+	(d = s - A16(p))
+
 #define LZ4_WRITE_LITTLEENDIAN_16(p, v)	\
 	do {	\
 		A16(p) = v; \
@@ -51,10 +54,13 @@ typedef struct _U64_S { u64 v; } U64_S;
 #define PUT8(s, d) \
 	put_unaligned(get_unaligned((const u64 *) s), (u64 *) d)
 
-#define LZ4_WRITE_LITTLEENDIAN_16(p, v)	\
-	do {	\
-		put_unaligned(v, (u16 *)(p)); \
-		p += 2; \
+#define LZ4_READ_LITTLEENDIAN_16(d, s, p)	\
+	(d = s - get_unaligned_le16(p))
+
+#define LZ4_WRITE_LITTLEENDIAN_16(p, v)			\
+	do {						\
+		put_unaligned_le16(v, (u16 *)(p));	\
+		p += 2;					\
 	} while (0)
 #endif
 
@@ -140,9 +146,6 @@ typedef struct _U64_S { u64 v; } U64_S;
 
 #endif
 
-#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \
-	(d = s - get_unaligned_le16(p))
-
 #define LZ4_WILDCOPY(s, d, e)		\
 	do {				\
 		LZ4_COPYPACKET(s, d);	\
diff -druNp --no-dereference linux-libre-3.12.59-gnu/MAINTAINERS linux-libre-3.12.60-gnu/MAINTAINERS
--- linux-libre-3.12.59-gnu/MAINTAINERS	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/MAINTAINERS	2016-05-19 05:02:51.000000000 -0400
@@ -3165,8 +3165,8 @@ F:	Documentation/x86/efi-stub.txt
 F:	arch/ia64/kernel/efi.c
 F:	arch/x86/boot/compressed/eboot.[ch]
 F:	arch/x86/include/asm/efi.h
-F:	arch/x86/platform/efi/*
-F:	drivers/firmware/efi/*
+F:	arch/x86/platform/efi/
+F:	drivers/firmware/efi/
 F:	include/linux/efi*.h
 
 EFI VARIABLE FILESYSTEM
diff -druNp --no-dereference linux-libre-3.12.59-gnu/Makefile linux-libre-3.12.60-gnu/Makefile
--- linux-libre-3.12.59-gnu/Makefile	2016-04-27 17:40:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/Makefile	2016-05-24 02:32:34.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 12
-SUBLEVEL = 59
+SUBLEVEL = 60
 EXTRAVERSION =-gnu
 NAME = One Giant Leap for Frogkind
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/mm/balloon_compaction.c linux-libre-3.12.60-gnu/mm/balloon_compaction.c
--- linux-libre-3.12.59-gnu/mm/balloon_compaction.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/mm/balloon_compaction.c	2016-05-19 05:02:51.000000000 -0400
@@ -93,17 +93,14 @@ struct page *balloon_page_dequeue(struct
 		 * to be released by the balloon driver.
 		 */
 		if (trylock_page(page)) {
+#ifdef CONFIG_BALLOON_COMPACTION
+			if (!PagePrivate(page)) {
+				/* raced with isolation */
+				unlock_page(page);
+				continue;
+			}
+#endif
 			spin_lock_irqsave(&b_dev_info->pages_lock, flags);
-			/*
-			 * Raise the page refcount here to prevent any wrong
-			 * attempt to isolate this page, in case of coliding
-			 * with balloon_page_isolate() just after we release
-			 * the page lock.
-			 *
-			 * balloon_page_free() will take care of dropping
-			 * this extra refcount later.
-			 */
-			get_page(page);
 			balloon_page_delete(page);
 			spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);
 			unlock_page(page);
@@ -187,7 +184,9 @@ static inline void __isolate_balloon_pag
 {
 	struct balloon_dev_info *b_dev_info = page->mapping->private_data;
 	unsigned long flags;
+
 	spin_lock_irqsave(&b_dev_info->pages_lock, flags);
+	ClearPagePrivate(page);
 	list_del(&page->lru);
 	b_dev_info->isolated_pages++;
 	spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);
@@ -197,7 +196,9 @@ static inline void __putback_balloon_pag
 {
 	struct balloon_dev_info *b_dev_info = page->mapping->private_data;
 	unsigned long flags;
+
 	spin_lock_irqsave(&b_dev_info->pages_lock, flags);
+	SetPagePrivate(page);
 	list_add(&page->lru, &b_dev_info->pages);
 	b_dev_info->isolated_pages--;
 	spin_unlock_irqrestore(&b_dev_info->pages_lock, flags);
@@ -235,12 +236,11 @@ bool balloon_page_isolate(struct page *p
 		 */
 		if (likely(trylock_page(page))) {
 			/*
-			 * A ballooned page, by default, has just one refcount.
+			 * A ballooned page, by default, has PagePrivate set.
 			 * Prevent concurrent compaction threads from isolating
-			 * an already isolated balloon page by refcount check.
+			 * an already isolated balloon page by clearing it.
 			 */
-			if (__is_movable_balloon_page(page) &&
-			    page_count(page) == 2) {
+			if (balloon_page_movable(page)) {
 				__isolate_balloon_page(page);
 				unlock_page(page);
 				return true;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/mm/compaction.c linux-libre-3.12.60-gnu/mm/compaction.c
--- linux-libre-3.12.59-gnu/mm/compaction.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/mm/compaction.c	2016-05-19 05:02:51.000000000 -0400
@@ -595,7 +595,7 @@ isolate_migratepages_range(struct zone *
 		 */
 		if (!PageLRU(page)) {
 			if (unlikely(balloon_page_movable(page))) {
-				if (locked && balloon_page_isolate(page)) {
+				if (balloon_page_isolate(page)) {
 					/* Successfully isolated */
 					goto isolate_success;
 				}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/mm/migrate.c linux-libre-3.12.60-gnu/mm/migrate.c
--- linux-libre-3.12.59-gnu/mm/migrate.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/mm/migrate.c	2016-05-19 05:02:51.000000000 -0400
@@ -856,7 +856,7 @@ static int __unmap_and_move(struct page
 		}
 	}
 
-	if (unlikely(balloon_page_movable(page))) {
+	if (unlikely(isolated_balloon_page(page))) {
 		/*
 		 * A ballooned page does not need any special attention from
 		 * physical to virtual reverse mapping procedures.
@@ -904,9 +904,7 @@ skip_unmap:
 		put_anon_vma(anon_vma);
 
 uncharge:
-	mem_cgroup_end_migration(mem, page, newpage,
-				 (rc == MIGRATEPAGE_SUCCESS ||
-				  rc == MIGRATEPAGE_BALLOON_SUCCESS));
+	mem_cgroup_end_migration(mem, page, newpage, rc == MIGRATEPAGE_SUCCESS);
 	unlock_page(page);
 out:
 	return rc;
@@ -938,17 +936,6 @@ static int unmap_and_move(new_page_t get
 
 	rc = __unmap_and_move(page, newpage, force, mode);
 
-	if (unlikely(rc == MIGRATEPAGE_BALLOON_SUCCESS)) {
-		/*
-		 * A ballooned page has been migrated already.
-		 * Now, it's the time to wrap-up counters,
-		 * handle the page back to Buddy and return.
-		 */
-		dec_zone_page_state(page, NR_ISOLATED_ANON +
-				    page_is_file_cache(page));
-		balloon_page_free(page);
-		return MIGRATEPAGE_SUCCESS;
-	}
 out:
 	if (rc != -EAGAIN) {
 		/*
@@ -971,6 +958,9 @@ out:
 	if (rc != MIGRATEPAGE_SUCCESS && put_new_page) {
 		ClearPageSwapBacked(newpage);
 		put_new_page(newpage, private);
+	} else if (unlikely(__is_movable_balloon_page(newpage))) {
+		/* drop our reference, page already in the balloon */
+		put_page(newpage);
 	} else
 		putback_lru_page(newpage);
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/batman-adv/routing.c linux-libre-3.12.60-gnu/net/batman-adv/routing.c
--- linux-libre-3.12.59-gnu/net/batman-adv/routing.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/batman-adv/routing.c	2016-05-19 05:02:51.000000000 -0400
@@ -70,6 +70,15 @@ static void _batadv_update_route(struct
 		neigh_node = NULL;
 
 	spin_lock_bh(&orig_node->neigh_list_lock);
+	/* curr_router used earlier may not be the current orig_node->router
+	 * anymore because it was dereferenced outside of the neigh_list_lock
+	 * protected region. After the new best neighbor has replace the current
+	 * best neighbor the reference counter needs to decrease. Consequently,
+	 * the code needs to ensure the curr_router variable contains a pointer
+	 * to the replaced best neighbor.
+	 */
+	curr_router = rcu_dereference_protected(orig_node->router, true);
+
 	rcu_assign_pointer(orig_node->router, neigh_node);
 	spin_unlock_bh(&orig_node->neigh_list_lock);
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/batman-adv/send.c linux-libre-3.12.60-gnu/net/batman-adv/send.c
--- linux-libre-3.12.59-gnu/net/batman-adv/send.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/batman-adv/send.c	2016-05-19 05:02:51.000000000 -0400
@@ -364,6 +364,9 @@ batadv_purge_outstanding_packets(struct
 
 		if (pending) {
 			hlist_del(&forw_packet->list);
+			if (!forw_packet->own)
+				atomic_inc(&bat_priv->batman_queue_left);
+
 			batadv_forw_packet_free(forw_packet);
 		}
 	}
@@ -390,6 +393,9 @@ batadv_purge_outstanding_packets(struct
 
 		if (pending) {
 			hlist_del(&forw_packet->list);
+			if (!forw_packet->own)
+				atomic_inc(&bat_priv->bcast_queue_left);
+
 			batadv_forw_packet_free(forw_packet);
 		}
 	}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/batman-adv/soft-interface.c linux-libre-3.12.60-gnu/net/batman-adv/soft-interface.c
--- linux-libre-3.12.59-gnu/net/batman-adv/soft-interface.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/batman-adv/soft-interface.c	2016-05-19 05:02:51.000000000 -0400
@@ -326,10 +326,16 @@ void batadv_interface_rx(struct net_devi
 	skb_pull_rcsum(skb, hdr_size);
 	skb_reset_mac_header(skb);
 
+	if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
+		goto dropped;
+
 	ethhdr = eth_hdr(skb);
 
 	switch (ntohs(ethhdr->h_proto)) {
 	case ETH_P_8021Q:
+		if (!pskb_may_pull(skb, VLAN_ETH_HLEN))
+			goto dropped;
+
 		vhdr = (struct vlan_ethhdr *)skb->data;
 		vid = ntohs(vhdr->h_vlan_TCI) & VLAN_VID_MASK;
 		vid |= BATADV_VLAN_HAS_TAG;
@@ -343,8 +349,6 @@ void batadv_interface_rx(struct net_devi
 	}
 
 	/* skb->dev & skb->pkt_type are set here */
-	if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
-		goto dropped;
 	skb->protocol = eth_type_trans(skb, soft_iface);
 
 	/* should not be necessary anymore as we use skb_pull_rcsum()
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/bridge/br_ioctl.c linux-libre-3.12.60-gnu/net/bridge/br_ioctl.c
--- linux-libre-3.12.59-gnu/net/bridge/br_ioctl.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/bridge/br_ioctl.c	2016-05-19 05:02:51.000000000 -0400
@@ -21,18 +21,19 @@
 #include <asm/uaccess.h>
 #include "br_private.h"
 
-/* called with RTNL */
 static int get_bridge_ifindices(struct net *net, int *indices, int num)
 {
 	struct net_device *dev;
 	int i = 0;
 
-	for_each_netdev(net, dev) {
+	rcu_read_lock();
+	for_each_netdev_rcu(net, dev) {
 		if (i >= num)
 			break;
 		if (dev->priv_flags & IFF_EBRIDGE)
 			indices[i++] = dev->ifindex;
 	}
+	rcu_read_unlock();
 
 	return i;
 }
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/core/rtnetlink.c linux-libre-3.12.60-gnu/net/core/rtnetlink.c
--- linux-libre-3.12.59-gnu/net/core/rtnetlink.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/core/rtnetlink.c	2016-05-19 05:02:51.000000000 -0400
@@ -950,14 +950,16 @@ static int rtnl_fill_ifinfo(struct sk_bu
 		goto nla_put_failure;
 
 	if (1) {
-		struct rtnl_link_ifmap map = {
-			.mem_start   = dev->mem_start,
-			.mem_end     = dev->mem_end,
-			.base_addr   = dev->base_addr,
-			.irq         = dev->irq,
-			.dma         = dev->dma,
-			.port        = dev->if_port,
-		};
+		struct rtnl_link_ifmap map;
+
+		memset(&map, 0, sizeof(map));
+		map.mem_start   = dev->mem_start;
+		map.mem_end     = dev->mem_end;
+		map.base_addr   = dev->base_addr;
+		map.irq         = dev->irq;
+		map.dma         = dev->dma;
+		map.port        = dev->if_port;
+
 		if (nla_put(skb, IFLA_MAP, sizeof(map), &map))
 			goto nla_put_failure;
 	}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/decnet/dn_route.c linux-libre-3.12.60-gnu/net/decnet/dn_route.c
--- linux-libre-3.12.59-gnu/net/decnet/dn_route.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/decnet/dn_route.c	2016-05-19 05:02:51.000000000 -0400
@@ -1030,10 +1030,13 @@ source_ok:
 	if (!fld.daddr) {
 		fld.daddr = fld.saddr;
 
-		err = -EADDRNOTAVAIL;
 		if (dev_out)
 			dev_put(dev_out);
+		err = -EINVAL;
 		dev_out = init_net.loopback_dev;
+		if (!dev_out->dn_ptr)
+			goto out;
+		err = -EADDRNOTAVAIL;
 		dev_hold(dev_out);
 		if (!fld.daddr) {
 			fld.daddr =
@@ -1106,6 +1109,8 @@ source_ok:
 		if (dev_out == NULL)
 			goto out;
 		dn_db = rcu_dereference_raw(dev_out->dn_ptr);
+		if (!dn_db)
+			goto e_inval;
 		/* Possible improvement - check all devices for local addr */
 		if (dn_dev_islocal(dev_out, fld.daddr)) {
 			dev_put(dev_out);
@@ -1147,6 +1152,8 @@ select_source:
 			dev_put(dev_out);
 		dev_out = init_net.loopback_dev;
 		dev_hold(dev_out);
+		if (!dev_out->dn_ptr)
+			goto e_inval;
 		fld.flowidn_oif = dev_out->ifindex;
 		if (res.fi)
 			dn_fib_info_put(res.fi);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/ipv4/fib_frontend.c linux-libre-3.12.60-gnu/net/ipv4/fib_frontend.c
--- linux-libre-3.12.59-gnu/net/ipv4/fib_frontend.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/ipv4/fib_frontend.c	2016-05-19 05:02:51.000000000 -0400
@@ -797,7 +797,11 @@ void fib_del_ifaddr(struct in_ifaddr *if
 	if (ifa->ifa_flags & IFA_F_SECONDARY) {
 		prim = inet_ifa_byprefix(in_dev, any, ifa->ifa_mask);
 		if (prim == NULL) {
-			pr_warn("%s: bug: prim == NULL\n", __func__);
+			/* if the device has been deleted, we don't perform
+			 * address promotion
+			 */
+			if (!in_dev->dead)
+				pr_warn("%s: bug: prim == NULL\n", __func__);
 			return;
 		}
 		if (iprim && iprim != prim) {
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/ipv4/fib_semantics.c linux-libre-3.12.60-gnu/net/ipv4/fib_semantics.c
--- linux-libre-3.12.59-gnu/net/ipv4/fib_semantics.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/ipv4/fib_semantics.c	2016-05-19 05:02:51.000000000 -0400
@@ -860,6 +860,8 @@ struct fib_info *fib_create_info(struct
 					val = 65535 - 40;
 				if (type == RTAX_MTU && val > 65535 - 15)
 					val = 65535 - 15;
+				if (type == RTAX_HOPLIMIT && val > 255)
+					val = 255;
 				fi->fib_metrics[type - 1] = val;
 			}
 		}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/ipv4/route.c linux-libre-3.12.60-gnu/net/ipv4/route.c
--- linux-libre-3.12.59-gnu/net/ipv4/route.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/ipv4/route.c	2016-05-19 05:02:51.000000000 -0400
@@ -1968,6 +1968,18 @@ static struct rtable *__mkroute_output(c
 		 */
 		if (fi && res->prefixlen < 4)
 			fi = NULL;
+	} else if ((type == RTN_LOCAL) && (orig_oif != 0) &&
+		   (orig_oif != dev_out->ifindex)) {
+		/* For local routes that require a particular output interface
+		 * we do not want to cache the result.  Caching the result
+		 * causes incorrect behaviour when there are multiple source
+		 * addresses on the interface, the end result being that if the
+		 * intended recipient is waiting on that interface for the
+		 * packet he won't receive it because it will be delivered on
+		 * the loopback interface and the IP_PKTINFO ipi_ifindex will
+		 * be set to the loopback interface as well.
+		 */
+		fi = NULL;
 	}
 
 	fnhe = NULL;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/ipv6/route.c linux-libre-3.12.60-gnu/net/ipv6/route.c
--- linux-libre-3.12.59-gnu/net/ipv6/route.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/ipv6/route.c	2016-05-19 05:02:51.000000000 -0400
@@ -1670,7 +1670,11 @@ install_route:
 					goto out;
 				}
 
-				dst_metric_set(&rt->dst, type, nla_get_u32(nla));
+				if (type == RTAX_HOPLIMIT && nla_get_u32(nla) > 255)
+					dst_metric_set(&rt->dst, type, 255);
+				else
+					dst_metric_set(&rt->dst, type,
+						nla_get_u32(nla));
 			}
 		}
 	}
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/llc/af_llc.c linux-libre-3.12.60-gnu/net/llc/af_llc.c
--- linux-libre-3.12.59-gnu/net/llc/af_llc.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/llc/af_llc.c	2016-05-19 05:02:51.000000000 -0400
@@ -626,6 +626,7 @@ static void llc_cmsg_rcv(struct msghdr *
 	if (llc->cmsg_flags & LLC_CMSG_PKTINFO) {
 		struct llc_pktinfo info;
 
+		memset(&info, 0, sizeof(info));
 		info.lpi_ifindex = llc_sk(skb->sk)->dev->ifindex;
 		llc_pdu_decode_dsap(skb, &info.lpi_sap);
 		llc_pdu_decode_da(skb, info.lpi_mac);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/netfilter/ipvs/ip_vs_pe_sip.c linux-libre-3.12.60-gnu/net/netfilter/ipvs/ip_vs_pe_sip.c
--- linux-libre-3.12.59-gnu/net/netfilter/ipvs/ip_vs_pe_sip.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/netfilter/ipvs/ip_vs_pe_sip.c	2016-05-19 05:02:51.000000000 -0400
@@ -88,7 +88,7 @@ ip_vs_sip_fill_param(struct ip_vs_conn_p
 	dptr = skb->data + dataoff;
 	datalen = skb->len - dataoff;
 
-	if (get_callid(dptr, dataoff, datalen, &matchoff, &matchlen))
+	if (get_callid(dptr, 0, datalen, &matchoff, &matchlen))
 		return -EINVAL;
 
 	/* N.B: pe_data is only set on success,
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/packet/af_packet.c linux-libre-3.12.60-gnu/net/packet/af_packet.c
--- linux-libre-3.12.59-gnu/net/packet/af_packet.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/packet/af_packet.c	2016-05-19 05:02:51.000000000 -0400
@@ -2977,6 +2977,7 @@ static int packet_mc_add(struct sock *sk
 	i->ifindex = mreq->mr_ifindex;
 	i->alen = mreq->mr_alen;
 	memcpy(i->addr, mreq->mr_address, i->alen);
+	memset(i->addr + i->alen, 0, sizeof(i->addr) - i->alen);
 	i->count = 1;
 	i->next = po->mclist;
 	po->mclist = i;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/sched/sch_netem.c linux-libre-3.12.60-gnu/net/sched/sch_netem.c
--- linux-libre-3.12.59-gnu/net/sched/sch_netem.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/sched/sch_netem.c	2016-05-19 05:02:51.000000000 -0400
@@ -394,6 +394,25 @@ static void tfifo_enqueue(struct sk_buff
 	sch->q.qlen++;
 }
 
+/* netem can't properly corrupt a megapacket (like we get from GSO), so instead
+ * when we statistically choose to corrupt one, we instead segment it, returning
+ * the first packet to be corrupted, and re-enqueue the remaining frames
+ */
+static struct sk_buff *netem_segment(struct sk_buff *skb, struct Qdisc *sch)
+{
+	struct sk_buff *segs;
+	netdev_features_t features = netif_skb_features(skb);
+
+	segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
+
+	if (IS_ERR_OR_NULL(segs)) {
+		qdisc_reshape_fail(skb, sch);
+		return NULL;
+	}
+	consume_skb(skb);
+	return segs;
+}
+
 /*
  * Insert one skb into qdisc.
  * Note: parent depends on return value to account for queue length.
@@ -406,7 +425,11 @@ static int netem_enqueue(struct sk_buff
 	/* We don't fill cb now as skb_unshare() may invalidate it */
 	struct netem_skb_cb *cb;
 	struct sk_buff *skb2;
+	struct sk_buff *segs = NULL;
+	unsigned int len = 0, last_len;
+	int nb = 0;
 	int count = 1;
+	int rc = NET_XMIT_SUCCESS;
 
 	/* Random duplication */
 	if (q->duplicate && q->duplicate >= get_crandom(&q->dup_cor))
@@ -452,10 +475,23 @@ static int netem_enqueue(struct sk_buff
 	 * do it now in software before we mangle it.
 	 */
 	if (q->corrupt && q->corrupt >= get_crandom(&q->corrupt_cor)) {
+		if (skb_is_gso(skb)) {
+			segs = netem_segment(skb, sch);
+			if (!segs)
+				return NET_XMIT_DROP;
+		} else {
+			segs = skb;
+		}
+
+		skb = segs;
+		segs = segs->next;
+
 		if (!(skb = skb_unshare(skb, GFP_ATOMIC)) ||
 		    (skb->ip_summed == CHECKSUM_PARTIAL &&
-		     skb_checksum_help(skb)))
-			return qdisc_drop(skb, sch);
+		     skb_checksum_help(skb))) {
+			rc = qdisc_drop(skb, sch);
+			goto finish_segs;
+		}
 
 		skb->data[net_random() % skb_headlen(skb)] ^= 1<<(net_random() % 8);
 	}
@@ -514,6 +550,27 @@ static int netem_enqueue(struct sk_buff
 		sch->qstats.requeues++;
 	}
 
+finish_segs:
+	if (segs) {
+		while (segs) {
+			skb2 = segs->next;
+			segs->next = NULL;
+			qdisc_skb_cb(segs)->pkt_len = segs->len;
+			last_len = segs->len;
+			rc = qdisc_enqueue(segs, sch);
+			if (rc != NET_XMIT_SUCCESS) {
+				if (net_xmit_drop_count(rc))
+					sch->qstats.drops++;
+			} else {
+				nb++;
+				len += last_len;
+			}
+			segs = skb2;
+		}
+		sch->q.qlen += nb;
+		if (nb > 1)
+			qdisc_tree_decrease_qlen(sch, 1 - nb);
+	}
 	return NET_XMIT_SUCCESS;
 }
 
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/sunrpc/cache.c linux-libre-3.12.60-gnu/net/sunrpc/cache.c
--- linux-libre-3.12.59-gnu/net/sunrpc/cache.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/sunrpc/cache.c	2016-05-19 05:02:51.000000000 -0400
@@ -1189,14 +1189,14 @@ int sunrpc_cache_pipe_upcall(struct cach
 	}
 
 	crq->q.reader = 0;
-	crq->item = cache_get(h);
 	crq->buf = buf;
 	crq->len = 0;
 	crq->readers = 0;
 	spin_lock(&queue_lock);
-	if (test_bit(CACHE_PENDING, &h->flags))
+	if (test_bit(CACHE_PENDING, &h->flags)) {
+		crq->item = cache_get(h);
 		list_add_tail(&crq->q.list, &detail->queue);
-	else
+	} else
 		/* Lost a race, no longer PENDING, so don't enqueue */
 		ret = -EAGAIN;
 	spin_unlock(&queue_lock);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/vmw_vsock/af_vsock.c linux-libre-3.12.60-gnu/net/vmw_vsock/af_vsock.c
--- linux-libre-3.12.59-gnu/net/vmw_vsock/af_vsock.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/vmw_vsock/af_vsock.c	2016-05-19 05:02:51.000000000 -0400
@@ -1796,27 +1796,8 @@ vsock_stream_recvmsg(struct kiocb *kiocb
 	else if (sk->sk_shutdown & RCV_SHUTDOWN)
 		err = 0;
 
-	if (copied > 0) {
-		/* We only do these additional bookkeeping/notification steps
-		 * if we actually copied something out of the queue pair
-		 * instead of just peeking ahead.
-		 */
-
-		if (!(flags & MSG_PEEK)) {
-			/* If the other side has shutdown for sending and there
-			 * is nothing more to read, then modify the socket
-			 * state.
-			 */
-			if (vsk->peer_shutdown & SEND_SHUTDOWN) {
-				if (vsock_stream_has_data(vsk) <= 0) {
-					sk->sk_state = SS_UNCONNECTED;
-					sock_set_flag(sk, SOCK_DONE);
-					sk->sk_state_change(sk);
-				}
-			}
-		}
+	if (copied > 0)
 		err = copied;
-	}
 
 out_wait:
 	finish_wait(sk_sleep(sk), &wait);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/wireless/nl80211.c linux-libre-3.12.60-gnu/net/wireless/nl80211.c
--- linux-libre-3.12.59-gnu/net/wireless/nl80211.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/wireless/nl80211.c	2016-05-19 05:02:51.000000000 -0400
@@ -11156,7 +11156,7 @@ static int nl80211_netlink_notify(struct
 	struct wireless_dev *wdev;
 	struct cfg80211_beacon_registration *reg, *tmp;
 
-	if (state != NETLINK_URELEASE)
+	if (state != NETLINK_URELEASE || notify->protocol != NETLINK_GENERIC)
 		return NOTIFY_DONE;
 
 	rcu_read_lock();
diff -druNp --no-dereference linux-libre-3.12.59-gnu/net/x25/x25_facilities.c linux-libre-3.12.60-gnu/net/x25/x25_facilities.c
--- linux-libre-3.12.59-gnu/net/x25/x25_facilities.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/net/x25/x25_facilities.c	2016-05-19 05:02:51.000000000 -0400
@@ -275,6 +275,7 @@ int x25_negotiate_facilities(struct sk_b
 
 	memset(&theirs, 0, sizeof(theirs));
 	memcpy(new, ours, sizeof(*new));
+	memset(dte, 0, sizeof(*dte));
 
 	len = x25_parse_facilities(skb, &theirs, dte, &x25->vc_facil_mask);
 	if (len < 0)
diff -druNp --no-dereference linux-libre-3.12.59-gnu/scripts/asn1_compiler.c linux-libre-3.12.60-gnu/scripts/asn1_compiler.c
--- linux-libre-3.12.59-gnu/scripts/asn1_compiler.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/scripts/asn1_compiler.c	2016-05-19 05:02:51.000000000 -0400
@@ -1353,6 +1353,8 @@ static void render_out_of_line_list(FILE
 			render_opcode(out, "ASN1_OP_END_SET_OF%s,\n", act);
 			render_opcode(out, "_jump_target(%u),\n", entry);
 			break;
+		default:
+			break;
 		}
 		if (e->action)
 			render_opcode(out, "_action(ACT_%s),\n",
diff -druNp --no-dereference linux-libre-3.12.59-gnu/sound/soc/codecs/rt5640.c linux-libre-3.12.60-gnu/sound/soc/codecs/rt5640.c
--- linux-libre-3.12.59-gnu/sound/soc/codecs/rt5640.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/sound/soc/codecs/rt5640.c	2016-05-19 05:02:51.000000000 -0400
@@ -358,7 +358,7 @@ static unsigned int bst_tlv[] = {
 
 /* Interface data select */
 static const char * const rt5640_data_select[] = {
-	"Normal", "left copy to right", "right copy to left", "Swap"};
+	"Normal", "Swap", "left copy to right", "right copy to left"};
 
 static const SOC_ENUM_SINGLE_DECL(rt5640_if1_dac_enum, RT5640_DIG_INF_DATA,
 				RT5640_IF1_DAC_SEL_SFT, rt5640_data_select);
diff -druNp --no-dereference linux-libre-3.12.59-gnu/sound/soc/codecs/rt5640.h linux-libre-3.12.60-gnu/sound/soc/codecs/rt5640.h
--- linux-libre-3.12.59-gnu/sound/soc/codecs/rt5640.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/sound/soc/codecs/rt5640.h	2016-05-19 05:02:51.000000000 -0400
@@ -435,39 +435,39 @@
 #define RT5640_IF1_DAC_SEL_MASK			(0x3 << 14)
 #define RT5640_IF1_DAC_SEL_SFT			14
 #define RT5640_IF1_DAC_SEL_NOR			(0x0 << 14)
-#define RT5640_IF1_DAC_SEL_L2R			(0x1 << 14)
-#define RT5640_IF1_DAC_SEL_R2L			(0x2 << 14)
-#define RT5640_IF1_DAC_SEL_SWAP			(0x3 << 14)
+#define RT5640_IF1_DAC_SEL_SWAP			(0x1 << 14)
+#define RT5640_IF1_DAC_SEL_L2R			(0x2 << 14)
+#define RT5640_IF1_DAC_SEL_R2L			(0x3 << 14)
 #define RT5640_IF1_ADC_SEL_MASK			(0x3 << 12)
 #define RT5640_IF1_ADC_SEL_SFT			12
 #define RT5640_IF1_ADC_SEL_NOR			(0x0 << 12)
-#define RT5640_IF1_ADC_SEL_L2R			(0x1 << 12)
-#define RT5640_IF1_ADC_SEL_R2L			(0x2 << 12)
-#define RT5640_IF1_ADC_SEL_SWAP			(0x3 << 12)
+#define RT5640_IF1_ADC_SEL_SWAP			(0x1 << 12)
+#define RT5640_IF1_ADC_SEL_L2R			(0x2 << 12)
+#define RT5640_IF1_ADC_SEL_R2L			(0x3 << 12)
 #define RT5640_IF2_DAC_SEL_MASK			(0x3 << 10)
 #define RT5640_IF2_DAC_SEL_SFT			10
 #define RT5640_IF2_DAC_SEL_NOR			(0x0 << 10)
-#define RT5640_IF2_DAC_SEL_L2R			(0x1 << 10)
-#define RT5640_IF2_DAC_SEL_R2L			(0x2 << 10)
-#define RT5640_IF2_DAC_SEL_SWAP			(0x3 << 10)
+#define RT5640_IF2_DAC_SEL_SWAP			(0x1 << 10)
+#define RT5640_IF2_DAC_SEL_L2R			(0x2 << 10)
+#define RT5640_IF2_DAC_SEL_R2L			(0x3 << 10)
 #define RT5640_IF2_ADC_SEL_MASK			(0x3 << 8)
 #define RT5640_IF2_ADC_SEL_SFT			8
 #define RT5640_IF2_ADC_SEL_NOR			(0x0 << 8)
-#define RT5640_IF2_ADC_SEL_L2R			(0x1 << 8)
-#define RT5640_IF2_ADC_SEL_R2L			(0x2 << 8)
-#define RT5640_IF2_ADC_SEL_SWAP			(0x3 << 8)
+#define RT5640_IF2_ADC_SEL_SWAP			(0x1 << 8)
+#define RT5640_IF2_ADC_SEL_L2R			(0x2 << 8)
+#define RT5640_IF2_ADC_SEL_R2L			(0x3 << 8)
 #define RT5640_IF3_DAC_SEL_MASK			(0x3 << 6)
 #define RT5640_IF3_DAC_SEL_SFT			6
 #define RT5640_IF3_DAC_SEL_NOR			(0x0 << 6)
-#define RT5640_IF3_DAC_SEL_L2R			(0x1 << 6)
-#define RT5640_IF3_DAC_SEL_R2L			(0x2 << 6)
-#define RT5640_IF3_DAC_SEL_SWAP			(0x3 << 6)
+#define RT5640_IF3_DAC_SEL_SWAP			(0x1 << 6)
+#define RT5640_IF3_DAC_SEL_L2R			(0x2 << 6)
+#define RT5640_IF3_DAC_SEL_R2L			(0x3 << 6)
 #define RT5640_IF3_ADC_SEL_MASK			(0x3 << 4)
 #define RT5640_IF3_ADC_SEL_SFT			4
 #define RT5640_IF3_ADC_SEL_NOR			(0x0 << 4)
-#define RT5640_IF3_ADC_SEL_L2R			(0x1 << 4)
-#define RT5640_IF3_ADC_SEL_R2L			(0x2 << 4)
-#define RT5640_IF3_ADC_SEL_SWAP			(0x3 << 4)
+#define RT5640_IF3_ADC_SEL_SWAP			(0x1 << 4)
+#define RT5640_IF3_ADC_SEL_L2R			(0x2 << 4)
+#define RT5640_IF3_ADC_SEL_R2L			(0x3 << 4)
 
 /* REC Left Mixer Control 1 (0x3b) */
 #define RT5640_G_HP_L_RM_L_MASK			(0x7 << 13)
diff -druNp --no-dereference linux-libre-3.12.59-gnu/sound/soc/samsung/s3c-i2s-v2.c linux-libre-3.12.60-gnu/sound/soc/samsung/s3c-i2s-v2.c
--- linux-libre-3.12.59-gnu/sound/soc/samsung/s3c-i2s-v2.c	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/sound/soc/samsung/s3c-i2s-v2.c	2016-05-19 05:02:51.000000000 -0400
@@ -730,7 +730,7 @@ static int s3c2412_i2s_resume(struct snd
 #endif
 
 int s3c_i2sv2_register_component(struct device *dev, int id,
-			   struct snd_soc_component_driver *cmp_drv,
+			   const struct snd_soc_component_driver *cmp_drv,
 			   struct snd_soc_dai_driver *dai_drv)
 {
 	struct snd_soc_dai_ops *ops = drv->ops;
diff -druNp --no-dereference linux-libre-3.12.59-gnu/sound/soc/samsung/s3c-i2s-v2.h linux-libre-3.12.60-gnu/sound/soc/samsung/s3c-i2s-v2.h
--- linux-libre-3.12.59-gnu/sound/soc/samsung/s3c-i2s-v2.h	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/sound/soc/samsung/s3c-i2s-v2.h	2016-05-19 05:02:51.000000000 -0400
@@ -101,7 +101,7 @@ extern int s3c_i2sv2_probe(struct snd_so
  * soc core.
  */
 extern int s3c_i2sv2_register_component(struct device *dev, int id,
-					struct snd_soc_component_driver *cmp_drv,
+					const struct snd_soc_component_driver *cmp_drv,
 					struct snd_soc_dai_driver *dai_drv);
 
 #endif /* __SND_SOC_S3C24XX_S3C_I2SV2_I2S_H */
diff -druNp --no-dereference linux-libre-3.12.59-gnu/tools/perf/Documentation/perf-stat.txt linux-libre-3.12.60-gnu/tools/perf/Documentation/perf-stat.txt
--- linux-libre-3.12.59-gnu/tools/perf/Documentation/perf-stat.txt	2016-04-23 03:24:44.000000000 -0400
+++ linux-libre-3.12.60-gnu/tools/perf/Documentation/perf-stat.txt	2016-05-19 05:02:51.000000000 -0400
@@ -50,6 +50,14 @@ OPTIONS
 --scale::
 	scale/normalize counter values
 
+-d::
+--detailed::
+	print more detailed statistics, can be specified up to 3 times
+
+	   -d:          detailed events, L1 and LLC data cache
+        -d -d:     more detailed events, dTLB and iTLB events
+     -d -d -d:     very detailed events, adding prefetch events
+
 -r::
 --repeat=<n>::
 	repeat command and print average + stddev (max: 100). 0 means forever.
