diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/arch/x86/kvm/lapic.c linux-libre-4.1-gnu/arch/x86/kvm/lapic.c
--- linux-libre-4.1-rc8-gnu/arch/x86/kvm/lapic.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/arch/x86/kvm/lapic.c	2015-06-22 01:05:43.000000000 -0400
@@ -1090,6 +1090,17 @@ static void update_divide_count(struct k
 				   apic->divide_count);
 }
 
+static void apic_update_lvtt(struct kvm_lapic *apic)
+{
+	u32 timer_mode = kvm_apic_get_reg(apic, APIC_LVTT) &
+			apic->lapic_timer.timer_mode_mask;
+
+	if (apic->lapic_timer.timer_mode != timer_mode) {
+		apic->lapic_timer.timer_mode = timer_mode;
+		hrtimer_cancel(&apic->lapic_timer.timer);
+	}
+}
+
 static void apic_timer_expired(struct kvm_lapic *apic)
 {
 	struct kvm_vcpu *vcpu = apic->vcpu;
@@ -1298,6 +1309,7 @@ static int apic_reg_write(struct kvm_lap
 				apic_set_reg(apic, APIC_LVTT + 0x10 * i,
 					     lvt_val | APIC_LVT_MASKED);
 			}
+			apic_update_lvtt(apic);
 			atomic_set(&apic->lapic_timer.pending, 0);
 
 		}
@@ -1330,20 +1342,13 @@ static int apic_reg_write(struct kvm_lap
 
 		break;
 
-	case APIC_LVTT: {
-		u32 timer_mode = val & apic->lapic_timer.timer_mode_mask;
-
-		if (apic->lapic_timer.timer_mode != timer_mode) {
-			apic->lapic_timer.timer_mode = timer_mode;
-			hrtimer_cancel(&apic->lapic_timer.timer);
-		}
-
+	case APIC_LVTT:
 		if (!kvm_apic_sw_enabled(apic))
 			val |= APIC_LVT_MASKED;
 		val &= (apic_lvt_mask[0] | apic->lapic_timer.timer_mode_mask);
 		apic_set_reg(apic, APIC_LVTT, val);
+		apic_update_lvtt(apic);
 		break;
-	}
 
 	case APIC_TMICT:
 		if (apic_lvtt_tscdeadline(apic))
@@ -1576,7 +1581,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vc
 
 	for (i = 0; i < APIC_LVT_NUM; i++)
 		apic_set_reg(apic, APIC_LVTT + 0x10 * i, APIC_LVT_MASKED);
-	apic->lapic_timer.timer_mode = 0;
+	apic_update_lvtt(apic);
 	apic_set_reg(apic, APIC_LVT0,
 		     SET_APIC_DELIVERY_MODE(0, APIC_MODE_EXTINT));
 
@@ -1802,6 +1807,7 @@ void kvm_apic_post_state_restore(struct
 
 	apic_update_ppr(apic);
 	hrtimer_cancel(&apic->lapic_timer.timer);
+	apic_update_lvtt(apic);
 	update_divide_count(apic);
 	start_apic_timer(apic);
 	apic->irr_pending = true;
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/Documentation/devicetree/bindings/clock/at91-clock.txt linux-libre-4.1-gnu/Documentation/devicetree/bindings/clock/at91-clock.txt
--- linux-libre-4.1-rc8-gnu/Documentation/devicetree/bindings/clock/at91-clock.txt	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/Documentation/devicetree/bindings/clock/at91-clock.txt	2015-06-22 01:05:43.000000000 -0400
@@ -248,7 +248,7 @@ Required properties for peripheral clock
 - #address-cells : shall be 1 (reg is used to encode clk id).
 - clocks : shall be the master clock phandle.
 	e.g. clocks = <&mck>;
-- name: device tree node describing a specific system clock.
+- name: device tree node describing a specific peripheral clock.
 	* #clock-cells : from common clock binding; shall be set to 0.
 	* reg: peripheral id. See Atmel's datasheets to get a full
 	  list of peripheral ids.
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/Documentation/i2c/slave-interface linux-libre-4.1-gnu/Documentation/i2c/slave-interface
--- linux-libre-4.1-rc8-gnu/Documentation/i2c/slave-interface	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/Documentation/i2c/slave-interface	2015-06-22 01:05:43.000000000 -0400
@@ -31,10 +31,10 @@ User manual
 ===========
 
 I2C slave backends behave like standard I2C clients. So, you can instantiate
-them like described in the document 'instantiating-devices'. A quick example
-for instantiating the slave-eeprom driver from userspace:
+them as described in the document 'instantiating-devices'. A quick example for
+instantiating the slave-eeprom driver from userspace at address 0x64 on bus 1:
 
-  # echo 0-0064 > /sys/bus/i2c/drivers/i2c-slave-eeprom/bind
+  # echo slave-24c02 0x64 > /sys/bus/i2c/devices/i2c-1/new_device
 
 Each backend should come with separate documentation to describe its specific
 behaviour and setup.
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/clk/at91/clk-peripheral.c linux-libre-4.1-gnu/drivers/clk/at91/clk-peripheral.c
--- linux-libre-4.1-rc8-gnu/drivers/clk/at91/clk-peripheral.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/clk/at91/clk-peripheral.c	2015-06-22 01:05:43.000000000 -0400
@@ -29,7 +29,7 @@
 #define PERIPHERAL_RSHIFT_MASK	0x3
 #define PERIPHERAL_RSHIFT(val)	(((val) >> 16) & PERIPHERAL_RSHIFT_MASK)
 
-#define PERIPHERAL_MAX_SHIFT	4
+#define PERIPHERAL_MAX_SHIFT	3
 
 struct clk_peripheral {
 	struct clk_hw hw;
@@ -242,7 +242,7 @@ static long clk_sam9x5_peripheral_round_
 		return *parent_rate;
 
 	if (periph->range.max) {
-		for (; shift < PERIPHERAL_MAX_SHIFT; shift++) {
+		for (; shift <= PERIPHERAL_MAX_SHIFT; shift++) {
 			cur_rate = *parent_rate >> shift;
 			if (cur_rate <= periph->range.max)
 				break;
@@ -254,7 +254,7 @@ static long clk_sam9x5_peripheral_round_
 
 	best_diff = cur_rate - rate;
 	best_rate = cur_rate;
-	for (; shift < PERIPHERAL_MAX_SHIFT; shift++) {
+	for (; shift <= PERIPHERAL_MAX_SHIFT; shift++) {
 		cur_rate = *parent_rate >> shift;
 		if (cur_rate < rate)
 			cur_diff = rate - cur_rate;
@@ -289,7 +289,7 @@ static int clk_sam9x5_peripheral_set_rat
 	if (periph->range.max && rate > periph->range.max)
 		return -EINVAL;
 
-	for (shift = 0; shift < PERIPHERAL_MAX_SHIFT; shift++) {
+	for (shift = 0; shift <= PERIPHERAL_MAX_SHIFT; shift++) {
 		if (parent_rate >> shift == rate) {
 			periph->auto_div = false;
 			periph->div = shift;
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/clk/at91/clk-pll.c linux-libre-4.1-gnu/drivers/clk/at91/clk-pll.c
--- linux-libre-4.1-rc8-gnu/drivers/clk/at91/clk-pll.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/clk/at91/clk-pll.c	2015-06-22 01:05:43.000000000 -0400
@@ -173,8 +173,7 @@ static long clk_pll_get_best_div_mul(str
 	int i = 0;
 
 	/* Check if parent_rate is a valid input rate */
-	if (parent_rate < characteristics->input.min ||
-	    parent_rate > characteristics->input.max)
+	if (parent_rate < characteristics->input.min)
 		return -ERANGE;
 
 	/*
@@ -187,6 +186,15 @@ static long clk_pll_get_best_div_mul(str
 	if (!mindiv)
 		mindiv = 1;
 
+	if (parent_rate > characteristics->input.max) {
+		tmpdiv = DIV_ROUND_UP(parent_rate, characteristics->input.max);
+		if (tmpdiv > PLL_DIV_MAX)
+			return -ERANGE;
+
+		if (tmpdiv > mindiv)
+			mindiv = tmpdiv;
+	}
+
 	/*
 	 * Calculate the maximum divider which is limited by PLL register
 	 * layout (limited by the MUL or DIV field size).
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/clk/at91/pmc.h linux-libre-4.1-gnu/drivers/clk/at91/pmc.h
--- linux-libre-4.1-rc8-gnu/drivers/clk/at91/pmc.h	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/clk/at91/pmc.h	2015-06-22 01:05:43.000000000 -0400
@@ -121,7 +121,7 @@ extern void __init of_at91sam9x5_clk_smd
 					       struct at91_pmc *pmc);
 #endif
 
-#if defined(CONFIG_HAVE_AT91_SMD)
+#if defined(CONFIG_HAVE_AT91_H32MX)
 extern void __init of_sama5d4_clk_h32mx_setup(struct device_node *np,
 					      struct at91_pmc *pmc);
 #endif
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/crypto/caam/caamhash.c linux-libre-4.1-gnu/drivers/crypto/caam/caamhash.c
--- linux-libre-4.1-rc8-gnu/drivers/crypto/caam/caamhash.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/crypto/caam/caamhash.c	2015-06-22 01:05:43.000000000 -0400
@@ -1544,6 +1544,8 @@ static int ahash_init(struct ahash_reque
 
 	state->current_buf = 0;
 	state->buf_dma = 0;
+	state->buflen_0 = 0;
+	state->buflen_1 = 0;
 
 	return 0;
 }
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/crypto/caam/caamrng.c linux-libre-4.1-gnu/drivers/crypto/caam/caamrng.c
--- linux-libre-4.1-rc8-gnu/drivers/crypto/caam/caamrng.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/crypto/caam/caamrng.c	2015-06-22 01:05:43.000000000 -0400
@@ -56,7 +56,7 @@
 
 /* Buffer, its dma address and lock */
 struct buf_data {
-	u8 buf[RN_BUF_SIZE];
+	u8 buf[RN_BUF_SIZE] ____cacheline_aligned;
 	dma_addr_t addr;
 	struct completion filled;
 	u32 hw_desc[DESC_JOB_O_LEN];
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/gpu/drm/i915/i915_gem.c linux-libre-4.1-gnu/drivers/gpu/drm/i915/i915_gem.c
--- linux-libre-4.1-rc8-gnu/drivers/gpu/drm/i915/i915_gem.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/gpu/drm/i915/i915_gem.c	2015-06-22 01:05:43.000000000 -0400
@@ -2656,6 +2656,9 @@ void i915_gem_reset(struct drm_device *d
 void
 i915_gem_retire_requests_ring(struct intel_engine_cs *ring)
 {
+	if (list_empty(&ring->request_list))
+		return;
+
 	WARN_ON(i915_verify_lists(ring->dev));
 
 	/* Retire requests first as we use it above for the early return.
@@ -3000,8 +3003,8 @@ int i915_vma_unbind(struct i915_vma *vma
 		} else if (vma->ggtt_view.pages) {
 			sg_free_table(vma->ggtt_view.pages);
 			kfree(vma->ggtt_view.pages);
-			vma->ggtt_view.pages = NULL;
 		}
+		vma->ggtt_view.pages = NULL;
 	}
 
 	drm_mm_remove_node(&vma->node);
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/gpu/drm/mgag200/mgag200_mode.c linux-libre-4.1-gnu/drivers/gpu/drm/mgag200/mgag200_mode.c
--- linux-libre-4.1-rc8-gnu/drivers/gpu/drm/mgag200/mgag200_mode.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/gpu/drm/mgag200/mgag200_mode.c	2015-06-22 01:05:43.000000000 -0400
@@ -1526,6 +1526,11 @@ static int mga_vga_mode_valid(struct drm
 		return MODE_BANDWIDTH;
 	}
 
+	if ((mode->hdisplay % 8) != 0 || (mode->hsync_start % 8) != 0 ||
+	    (mode->hsync_end % 8) != 0 || (mode->htotal % 8) != 0) {
+		return MODE_H_ILLEGAL;
+	}
+
 	if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 ||
 	    mode->crtc_hsync_end > 4096 || mode->crtc_htotal > 4096 ||
 	    mode->crtc_vdisplay > 2048 || mode->crtc_vsync_start > 4096 ||
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/gpu/drm/radeon/radeon_dp_mst.c linux-libre-4.1-gnu/drivers/gpu/drm/radeon/radeon_dp_mst.c
--- linux-libre-4.1-rc8-gnu/drivers/gpu/drm/radeon/radeon_dp_mst.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/gpu/drm/radeon/radeon_dp_mst.c	2015-06-22 01:05:43.000000000 -0400
@@ -663,12 +663,17 @@ int
 radeon_dp_mst_probe(struct radeon_connector *radeon_connector)
 {
 	struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv;
+	struct drm_device *dev = radeon_connector->base.dev;
+	struct radeon_device *rdev = dev->dev_private;
 	int ret;
 	u8 msg[1];
 
 	if (!radeon_mst)
 		return 0;
 
+	if (!ASIC_IS_DCE5(rdev))
+		return 0;
+
 	if (dig_connector->dpcd[DP_DPCD_REV] < 0x12)
 		return 0;
 
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/gpu/drm/radeon/radeon_kms.c linux-libre-4.1-gnu/drivers/gpu/drm/radeon/radeon_kms.c
--- linux-libre-4.1-rc8-gnu/drivers/gpu/drm/radeon/radeon_kms.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/gpu/drm/radeon/radeon_kms.c	2015-06-22 01:05:43.000000000 -0400
@@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_
 		if (radeon_get_allowed_info_register(rdev, *value, value))
 			return -EINVAL;
 		break;
+	case RADEON_INFO_VA_UNMAP_WORKING:
+		*value = true;
+		break;
 	default:
 		DRM_DEBUG_KMS("Invalid request %d\n", info->request);
 		return -EINVAL;
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/infiniband/ulp/isert/ib_isert.c linux-libre-4.1-gnu/drivers/infiniband/ulp/isert/ib_isert.c
--- linux-libre-4.1-rc8-gnu/drivers/infiniband/ulp/isert/ib_isert.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/infiniband/ulp/isert/ib_isert.c	2015-06-22 01:05:43.000000000 -0400
@@ -65,6 +65,8 @@ static int
 isert_rdma_accept(struct isert_conn *isert_conn);
 struct rdma_cm_id *isert_setup_id(struct isert_np *isert_np);
 
+static void isert_release_work(struct work_struct *work);
+
 static inline bool
 isert_prot_cmd(struct isert_conn *conn, struct se_cmd *cmd)
 {
@@ -648,6 +650,7 @@ isert_init_conn(struct isert_conn *isert
 	mutex_init(&isert_conn->mutex);
 	spin_lock_init(&isert_conn->pool_lock);
 	INIT_LIST_HEAD(&isert_conn->fr_pool);
+	INIT_WORK(&isert_conn->release_work, isert_release_work);
 }
 
 static void
@@ -925,6 +928,7 @@ isert_disconnected_handler(struct rdma_c
 {
 	struct isert_np *isert_np = cma_id->context;
 	struct isert_conn *isert_conn;
+	bool terminating = false;
 
 	if (isert_np->np_cm_id == cma_id)
 		return isert_np_cma_handler(cma_id->context, event);
@@ -932,12 +936,25 @@ isert_disconnected_handler(struct rdma_c
 	isert_conn = cma_id->qp->qp_context;
 
 	mutex_lock(&isert_conn->mutex);
+	terminating = (isert_conn->state == ISER_CONN_TERMINATING);
 	isert_conn_terminate(isert_conn);
 	mutex_unlock(&isert_conn->mutex);
 
 	isert_info("conn %p completing wait\n", isert_conn);
 	complete(&isert_conn->wait);
 
+	if (terminating)
+		goto out;
+
+	mutex_lock(&isert_np->np_accept_mutex);
+	if (!list_empty(&isert_conn->accept_node)) {
+		list_del_init(&isert_conn->accept_node);
+		isert_put_conn(isert_conn);
+		queue_work(isert_release_wq, &isert_conn->release_work);
+	}
+	mutex_unlock(&isert_np->np_accept_mutex);
+
+out:
 	return 0;
 }
 
@@ -2380,7 +2397,6 @@ isert_build_rdma_wr(struct isert_conn *i
 	page_off = offset % PAGE_SIZE;
 
 	send_wr->sg_list = ib_sge;
-	send_wr->num_sge = sg_nents;
 	send_wr->wr_id = (uintptr_t)&isert_cmd->tx_desc;
 	/*
 	 * Perform mapping of TCM scatterlist memory ib_sge dma_addr.
@@ -2400,14 +2416,17 @@ isert_build_rdma_wr(struct isert_conn *i
 			  ib_sge->addr, ib_sge->length, ib_sge->lkey);
 		page_off = 0;
 		data_left -= ib_sge->length;
+		if (!data_left)
+			break;
 		ib_sge++;
 		isert_dbg("Incrementing ib_sge pointer to %p\n", ib_sge);
 	}
 
+	send_wr->num_sge = ++i;
 	isert_dbg("Set outgoing sg_list: %p num_sg: %u from TCM SGLs\n",
 		  send_wr->sg_list, send_wr->num_sge);
 
-	return sg_nents;
+	return send_wr->num_sge;
 }
 
 static int
@@ -3366,7 +3385,6 @@ static void isert_wait_conn(struct iscsi
 	isert_wait4flush(isert_conn);
 	isert_wait4logout(isert_conn);
 
-	INIT_WORK(&isert_conn->release_work, isert_release_work);
 	queue_work(isert_release_wq, &isert_conn->release_work);
 }
 
@@ -3374,6 +3392,7 @@ static void isert_free_conn(struct iscsi
 {
 	struct isert_conn *isert_conn = conn->context;
 
+	isert_wait4flush(isert_conn);
 	isert_put_conn(isert_conn);
 }
 
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/drivers/media/Kconfig linux-libre-4.1-gnu/drivers/media/Kconfig
--- linux-libre-4.1-rc8-gnu/drivers/media/Kconfig	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/drivers/media/Kconfig	2015-06-22 01:05:43.000000000 -0400
@@ -97,6 +97,7 @@ config MEDIA_CONTROLLER
 config MEDIA_CONTROLLER_DVB
 	bool "Enable Media controller for DVB"
 	depends on MEDIA_CONTROLLER
+	depends on BROKEN
 	---help---
 	  Enable the media controller API support for DVB.
 
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/include/uapi/drm/radeon_drm.h linux-libre-4.1-gnu/include/uapi/drm/radeon_drm.h
--- linux-libre-4.1-rc8-gnu/include/uapi/drm/radeon_drm.h	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/include/uapi/drm/radeon_drm.h	2015-06-22 01:05:43.000000000 -0400
@@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
 #define RADEON_INFO_CURRENT_GPU_SCLK	0x22
 #define RADEON_INFO_CURRENT_GPU_MCLK	0x23
 #define RADEON_INFO_READ_REG		0x24
+#define RADEON_INFO_VA_UNMAP_WORKING	0x25
 
 struct drm_radeon_info {
 	uint32_t		request;
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/kernel/trace/trace_events_filter.c linux-libre-4.1-gnu/kernel/trace/trace_events_filter.c
--- linux-libre-4.1-rc8-gnu/kernel/trace/trace_events_filter.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/kernel/trace/trace_events_filter.c	2015-06-22 01:05:43.000000000 -0400
@@ -1369,19 +1369,26 @@ static int check_preds(struct filter_par
 {
 	int n_normal_preds = 0, n_logical_preds = 0;
 	struct postfix_elt *elt;
+	int cnt = 0;
 
 	list_for_each_entry(elt, &ps->postfix, list) {
-		if (elt->op == OP_NONE)
+		if (elt->op == OP_NONE) {
+			cnt++;
 			continue;
+		}
 
 		if (elt->op == OP_AND || elt->op == OP_OR) {
 			n_logical_preds++;
+			cnt--;
 			continue;
 		}
+		if (elt->op != OP_NOT)
+			cnt--;
 		n_normal_preds++;
+		WARN_ON_ONCE(cnt < 0);
 	}
 
-	if (!n_normal_preds || n_logical_preds >= n_normal_preds) {
+	if (cnt != 1 || !n_normal_preds || n_logical_preds >= n_normal_preds) {
 		parse_error(ps, FILT_ERR_INVALID_FILTER, 0);
 		return -EINVAL;
 	}
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/lib/cpumask.c linux-libre-4.1-gnu/lib/cpumask.c
--- linux-libre-4.1-rc8-gnu/lib/cpumask.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/lib/cpumask.c	2015-06-22 01:05:43.000000000 -0400
@@ -16,11 +16,10 @@
 int cpumask_next_and(int n, const struct cpumask *src1p,
 		     const struct cpumask *src2p)
 {
-	struct cpumask tmp;
-
-	if (cpumask_and(&tmp, src1p, src2p))
-		return cpumask_next(n, &tmp);
-	return nr_cpu_ids;
+	while ((n = cpumask_next(n, src1p)) < nr_cpu_ids)
+		if (cpumask_test_cpu(n, src2p))
+			break;
+	return n;
 }
 EXPORT_SYMBOL(cpumask_next_and);
 
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/Makefile linux-libre-4.1-gnu/Makefile
--- linux-libre-4.1-rc8-gnu/Makefile	2015-06-14 22:44:34.000000000 -0400
+++ linux-libre-4.1-gnu/Makefile	2015-06-22 01:47:29.000000000 -0400
@@ -1,7 +1,7 @@
 VERSION = 4
 PATCHLEVEL = 1
 SUBLEVEL = 0
-EXTRAVERSION = -rc8-gnu
+EXTRAVERSION = -gnu
 NAME = Hurr durr I'ma sheep
 
 # *DOCUMENTATION*
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/mm/shmem.c linux-libre-4.1-gnu/mm/shmem.c
--- linux-libre-4.1-rc8-gnu/mm/shmem.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/mm/shmem.c	2015-06-22 01:05:43.000000000 -0400
@@ -3401,7 +3401,13 @@ int shmem_zero_setup(struct vm_area_stru
 	struct file *file;
 	loff_t size = vma->vm_end - vma->vm_start;
 
-	file = shmem_file_setup("dev/zero", size, vma->vm_flags);
+	/*
+	 * Cloning a new file under mmap_sem leads to a lock ordering conflict
+	 * between XFS directory reading and selinux: since this file is only
+	 * accessible to the user through its mapping, use S_PRIVATE flag to
+	 * bypass file security, in the same way as shmem_kernel_file_setup().
+	 */
+	file = __shmem_file_setup("dev/zero", size, vma->vm_flags, S_PRIVATE);
 	if (IS_ERR(file))
 		return PTR_ERR(file);
 
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/sound/mips/Kconfig linux-libre-4.1-gnu/sound/mips/Kconfig
--- linux-libre-4.1-rc8-gnu/sound/mips/Kconfig	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/sound/mips/Kconfig	2015-06-22 01:05:43.000000000 -0400
@@ -12,12 +12,14 @@ if SND_MIPS
 config SND_SGI_O2
 	tristate "SGI O2 Audio"
 	depends on SGI_IP32
+	select SND_PCM
         help
                 Sound support for the SGI O2 Workstation. 
 
 config SND_SGI_HAL2
         tristate "SGI HAL2 Audio"
         depends on SGI_HAS_HAL2
+	select SND_PCM
         help
                 Sound support for the SGI Indy and Indigo2 Workstation.
 
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/sound/pci/hda/hda_intel.c linux-libre-4.1-gnu/sound/pci/hda/hda_intel.c
--- linux-libre-4.1-rc8-gnu/sound/pci/hda/hda_intel.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/sound/pci/hda/hda_intel.c	2015-06-22 01:05:43.000000000 -0400
@@ -1879,7 +1879,9 @@ static int azx_probe_continue(struct azx
 #endif
 	}
 
+#ifdef CONFIG_SND_HDA_I915
  skip_i915:
+#endif
 	err = azx_first_init(chip);
 	if (err < 0)
 		goto out_free;
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/sound/pci/hda/patch_realtek.c linux-libre-4.1-gnu/sound/pci/hda/patch_realtek.c
--- linux-libre-4.1-rc8-gnu/sound/pci/hda/patch_realtek.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/sound/pci/hda/patch_realtek.c	2015-06-22 01:05:43.000000000 -0400
@@ -4515,6 +4515,8 @@ enum {
 	ALC288_FIXUP_DELL_HEADSET_MODE,
 	ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
 	ALC288_FIXUP_DELL_XPS_13_GPIO6,
+	ALC292_FIXUP_DELL_E7X,
+	ALC292_FIXUP_DISABLE_AAMIX,
 };
 
 static const struct hda_fixup alc269_fixups[] = {
@@ -5037,6 +5039,16 @@ static const struct hda_fixup alc269_fix
 		.chained = true,
 		.chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
 	},
+	[ALC292_FIXUP_DISABLE_AAMIX] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc_fixup_disable_aamix,
+	},
+	[ALC292_FIXUP_DELL_E7X] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc_fixup_dell_xps13,
+		.chained = true,
+		.chain_id = ALC292_FIXUP_DISABLE_AAMIX
+	},
 };
 
 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -5049,6 +5061,8 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
 	SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
 	SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
+	SND_PCI_QUIRK(0x1028, 0x05ca, "Dell Latitude E7240", ALC292_FIXUP_DELL_E7X),
+	SND_PCI_QUIRK(0x1028, 0x05cb, "Dell Latitude E7440", ALC292_FIXUP_DELL_E7X),
 	SND_PCI_QUIRK(0x1028, 0x05da, "Dell Vostro 5460", ALC290_FIXUP_SUBWOOFER),
 	SND_PCI_QUIRK(0x1028, 0x05f4, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1028, 0x05f5, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
@@ -5058,6 +5072,7 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
 	SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
+	SND_PCI_QUIRK(0x1028, 0x0665, "Dell XPS 13", ALC292_FIXUP_DELL_E7X),
 	SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
@@ -5637,8 +5652,7 @@ static int patch_alc269(struct hda_codec
 
 	spec = codec->spec;
 	spec->gen.shared_mic_vref_pin = 0x18;
-	if (codec->core.vendor_id != 0x10ec0292)
-		codec->power_save_node = 1;
+	codec->power_save_node = 1;
 
 	snd_hda_pick_fixup(codec, alc269_fixup_models,
 		       alc269_fixup_tbl, alc269_fixups);
diff -druNp --no-dereference linux-libre-4.1-rc8-gnu/sound/pci/hda/patch_sigmatel.c linux-libre-4.1-gnu/sound/pci/hda/patch_sigmatel.c
--- linux-libre-4.1-rc8-gnu/sound/pci/hda/patch_sigmatel.c	2015-06-14 21:51:10.000000000 -0400
+++ linux-libre-4.1-gnu/sound/pci/hda/patch_sigmatel.c	2015-06-22 01:05:43.000000000 -0400
@@ -100,6 +100,7 @@ enum {
 	STAC_HP_ENVY_BASS,
 	STAC_HP_BNB13_EQ,
 	STAC_HP_ENVY_TS_BASS,
+	STAC_HP_ENVY_TS_DAC_BIND,
 	STAC_92HD83XXX_GPIO10_EAPD,
 	STAC_92HD83XXX_MODELS
 };
@@ -2171,6 +2172,22 @@ static void stac92hd83xxx_fixup_gpio10_e
 	spec->eapd_switch = 0;
 }
 
+static void hp_envy_ts_fixup_dac_bind(struct hda_codec *codec,
+					    const struct hda_fixup *fix,
+					    int action)
+{
+	struct sigmatel_spec *spec = codec->spec;
+	static hda_nid_t preferred_pairs[] = {
+		0xd, 0x13,
+		0
+	};
+
+	if (action != HDA_FIXUP_ACT_PRE_PROBE)
+		return;
+
+	spec->gen.preferred_dacs = preferred_pairs;
+}
+
 static const struct hda_verb hp_bnb13_eq_verbs[] = {
 	/* 44.1KHz base */
 	{ 0x22, 0x7A6, 0x3E },
@@ -2686,6 +2703,12 @@ static const struct hda_fixup stac92hd83
 			{}
 		},
 	},
+	[STAC_HP_ENVY_TS_DAC_BIND] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = hp_envy_ts_fixup_dac_bind,
+		.chained = true,
+		.chain_id = STAC_HP_ENVY_TS_BASS,
+	},
 	[STAC_92HD83XXX_GPIO10_EAPD] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = stac92hd83xxx_fixup_gpio10_eapd,
@@ -2764,6 +2787,8 @@ static const struct snd_pci_quirk stac92
 			  "HP bNB13", STAC_HP_BNB13_EQ),
 	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x190e,
 			  "HP ENVY TS", STAC_HP_ENVY_TS_BASS),
+	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1967,
+			  "HP ENVY TS", STAC_HP_ENVY_TS_DAC_BIND),
 	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1940,
 			  "HP bNB13", STAC_HP_BNB13_EQ),
 	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1941,
