diff -druNp --no-dereference linux-libre-4.4.48-gnu/arch/arc/kernel/unaligned.c linux-libre-4.4.49-gnu/arch/arc/kernel/unaligned.c
--- linux-libre-4.4.48-gnu/arch/arc/kernel/unaligned.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/arch/arc/kernel/unaligned.c	2017-02-14 18:23:09.000000000 -0500
@@ -243,7 +243,7 @@ int misaligned_fixup(unsigned long addre
 
 	/* clear any remanants of delay slot */
 	if (delay_mode(regs)) {
-		regs->ret = regs->bta ~1U;
+		regs->ret = regs->bta & ~1U;
 		regs->status32 &= ~STATUS_DE_MASK;
 	} else {
 		regs->ret += state.instr_len;
diff -druNp --no-dereference linux-libre-4.4.48-gnu/arch/arm/kernel/ptrace.c linux-libre-4.4.49-gnu/arch/arm/kernel/ptrace.c
--- linux-libre-4.4.48-gnu/arch/arm/kernel/ptrace.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/arch/arm/kernel/ptrace.c	2017-02-14 18:23:09.000000000 -0500
@@ -600,7 +600,7 @@ static int gpr_set(struct task_struct *t
 		   const void *kbuf, const void __user *ubuf)
 {
 	int ret;
-	struct pt_regs newregs;
+	struct pt_regs newregs = *task_pt_regs(target);
 
 	ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
 				 &newregs,
diff -druNp --no-dereference linux-libre-4.4.48-gnu/arch/arm/mm/fault.c linux-libre-4.4.49-gnu/arch/arm/mm/fault.c
--- linux-libre-4.4.48-gnu/arch/arm/mm/fault.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/arch/arm/mm/fault.c	2017-02-14 18:23:09.000000000 -0500
@@ -610,9 +610,9 @@ static int __init early_abort_handler(un
 
 void __init early_abt_enable(void)
 {
-	fsr_info[22].fn = early_abort_handler;
+	fsr_info[FSR_FS_AEA].fn = early_abort_handler;
 	local_abt_enable();
-	fsr_info[22].fn = do_bad;
+	fsr_info[FSR_FS_AEA].fn = do_bad;
 }
 
 #ifndef CONFIG_ARM_LPAE
diff -druNp --no-dereference linux-libre-4.4.48-gnu/arch/arm/mm/fault.h linux-libre-4.4.49-gnu/arch/arm/mm/fault.h
--- linux-libre-4.4.48-gnu/arch/arm/mm/fault.h	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/arch/arm/mm/fault.h	2017-02-14 18:23:09.000000000 -0500
@@ -11,11 +11,15 @@
 #define FSR_FS5_0		(0x3f)
 
 #ifdef CONFIG_ARM_LPAE
+#define FSR_FS_AEA		17
+
 static inline int fsr_fs(unsigned int fsr)
 {
 	return fsr & FSR_FS5_0;
 }
 #else
+#define FSR_FS_AEA		22
+
 static inline int fsr_fs(unsigned int fsr)
 {
 	return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6;
diff -druNp --no-dereference linux-libre-4.4.48-gnu/arch/x86/kernel/apic/io_apic.c linux-libre-4.4.49-gnu/arch/x86/kernel/apic/io_apic.c
--- linux-libre-4.4.48-gnu/arch/x86/kernel/apic/io_apic.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/arch/x86/kernel/apic/io_apic.c	2017-02-14 18:23:09.000000000 -0500
@@ -1875,7 +1875,6 @@ static struct irq_chip ioapic_chip __rea
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
-	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
@@ -1887,7 +1886,6 @@ static struct irq_chip ioapic_ir_chip __
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ir_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
-	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/gpu/drm/i915/intel_display.c linux-libre-4.4.49-gnu/drivers/gpu/drm/i915/intel_display.c
--- linux-libre-4.4.48-gnu/drivers/gpu/drm/i915/intel_display.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/gpu/drm/i915/intel_display.c	2017-02-14 18:23:09.000000000 -0500
@@ -3948,10 +3948,10 @@ static void page_flip_completed(struct i
 	drm_crtc_vblank_put(&intel_crtc->base);
 
 	wake_up_all(&dev_priv->pending_flip_queue);
-	queue_work(dev_priv->wq, &work->work);
-
 	trace_i915_flip_complete(intel_crtc->plane,
 				 work->pending_flip_obj);
+
+	queue_work(dev_priv->wq, &work->work);
 }
 
 void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h linux-libre-4.4.49-gnu/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
--- linux-libre-4.4.48-gnu/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h	2017-02-14 18:23:09.000000000 -0500
@@ -900,9 +900,7 @@
 
 static inline void dsaf_write_reg(void __iomem *base, u32 reg, u32 value)
 {
-	u8 __iomem *reg_addr = ACCESS_ONCE(base);
-
-	writel(value, reg_addr + reg);
+	writel(value, base + reg);
 }
 
 #define dsaf_write_dev(a, reg, value) \
@@ -910,9 +908,7 @@ static inline void dsaf_write_reg(void _
 
 static inline u32 dsaf_read_reg(u8 __iomem *base, u32 reg)
 {
-	u8 __iomem *reg_addr = ACCESS_ONCE(base);
-
-	return readl(reg_addr + reg);
+	return readl(base + reg);
 }
 
 #define dsaf_read_dev(a, reg) \
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/net/hyperv/netvsc_drv.c linux-libre-4.4.49-gnu/drivers/net/hyperv/netvsc_drv.c
--- linux-libre-4.4.48-gnu/drivers/net/hyperv/netvsc_drv.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/net/hyperv/netvsc_drv.c	2017-02-14 18:23:09.000000000 -0500
@@ -854,7 +854,6 @@ static int netvsc_set_channels(struct ne
 		}
 		goto recover;
 	}
-	netif_set_gso_max_size(net, NETVSC_GSO_MAX_SIZE);
 
  out:
 	netvsc_open(net);
@@ -1142,6 +1141,7 @@ static int netvsc_probe(struct hv_device
 	nvdev = hv_get_drvdata(dev);
 	netif_set_real_num_tx_queues(net, nvdev->num_chn);
 	netif_set_real_num_rx_queues(net, nvdev->num_chn);
+	netif_set_gso_max_size(net, NETVSC_GSO_MAX_SIZE);
 
 	ret = register_netdev(net);
 	if (ret != 0) {
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/net/xen-netfront.c linux-libre-4.4.49-gnu/drivers/net/xen-netfront.c
--- linux-libre-4.4.48-gnu/drivers/net/xen-netfront.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/net/xen-netfront.c	2017-02-14 18:23:09.000000000 -0500
@@ -1391,6 +1391,8 @@ static void xennet_disconnect_backend(st
 	for (i = 0; i < num_queues && info->queues; ++i) {
 		struct netfront_queue *queue = &info->queues[i];
 
+		del_timer_sync(&queue->rx_refill_timer);
+
 		if (queue->tx_irq && (queue->tx_irq == queue->rx_irq))
 			unbind_from_irqhandler(queue->tx_irq, queue);
 		if (queue->tx_irq && (queue->tx_irq != queue->rx_irq)) {
@@ -1745,7 +1747,6 @@ static void xennet_destroy_queues(struct
 
 		if (netif_running(info->netdev))
 			napi_disable(&queue->napi);
-		del_timer_sync(&queue->rx_refill_timer);
 		netif_napi_del(&queue->napi);
 	}
 
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/s390/scsi/zfcp_fsf.c linux-libre-4.4.49-gnu/drivers/s390/scsi/zfcp_fsf.c
--- linux-libre-4.4.48-gnu/drivers/s390/scsi/zfcp_fsf.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/s390/scsi/zfcp_fsf.c	2017-02-14 18:23:09.000000000 -0500
@@ -1583,7 +1583,7 @@ out:
 int zfcp_fsf_open_wka_port(struct zfcp_fc_wka_port *wka_port)
 {
 	struct zfcp_qdio *qdio = wka_port->adapter->qdio;
-	struct zfcp_fsf_req *req = NULL;
+	struct zfcp_fsf_req *req;
 	int retval = -EIO;
 
 	spin_lock_irq(&qdio->req_q_lock);
@@ -1612,7 +1612,7 @@ int zfcp_fsf_open_wka_port(struct zfcp_f
 		zfcp_fsf_req_free(req);
 out:
 	spin_unlock_irq(&qdio->req_q_lock);
-	if (req && !IS_ERR(req))
+	if (!retval)
 		zfcp_dbf_rec_run_wka("fsowp_1", wka_port, req->req_id);
 	return retval;
 }
@@ -1638,7 +1638,7 @@ static void zfcp_fsf_close_wka_port_hand
 int zfcp_fsf_close_wka_port(struct zfcp_fc_wka_port *wka_port)
 {
 	struct zfcp_qdio *qdio = wka_port->adapter->qdio;
-	struct zfcp_fsf_req *req = NULL;
+	struct zfcp_fsf_req *req;
 	int retval = -EIO;
 
 	spin_lock_irq(&qdio->req_q_lock);
@@ -1667,7 +1667,7 @@ int zfcp_fsf_close_wka_port(struct zfcp_
 		zfcp_fsf_req_free(req);
 out:
 	spin_unlock_irq(&qdio->req_q_lock);
-	if (req && !IS_ERR(req))
+	if (!retval)
 		zfcp_dbf_rec_run_wka("fscwp_1", wka_port, req->req_id);
 	return retval;
 }
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/scsi/aacraid/comminit.c linux-libre-4.4.49-gnu/drivers/scsi/aacraid/comminit.c
--- linux-libre-4.4.48-gnu/drivers/scsi/aacraid/comminit.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/scsi/aacraid/comminit.c	2017-02-14 18:23:09.000000000 -0500
@@ -50,9 +50,13 @@ struct aac_common aac_config = {
 
 static inline int aac_is_msix_mode(struct aac_dev *dev)
 {
-	u32 status;
+	u32 status = 0;
 
-	status = src_readl(dev, MUnit.OMR);
+	if (dev->pdev->device == PMC_DEVICE_S6 ||
+		dev->pdev->device == PMC_DEVICE_S7 ||
+		dev->pdev->device == PMC_DEVICE_S8) {
+		status = src_readl(dev, MUnit.OMR);
+	}
 	return (status & AAC_INT_MODE_MSIX);
 }
 
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/scsi/mpt3sas/mpt3sas_scsih.c linux-libre-4.4.49-gnu/drivers/scsi/mpt3sas/mpt3sas_scsih.c
--- linux-libre-4.4.48-gnu/drivers/scsi/mpt3sas/mpt3sas_scsih.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/scsi/mpt3sas/mpt3sas_scsih.c	2017-02-14 18:23:09.000000000 -0500
@@ -51,6 +51,7 @@
 #include <linux/workqueue.h>
 #include <linux/delay.h>
 #include <linux/pci.h>
+#include <linux/pci-aspm.h>
 #include <linux/interrupt.h>
 #include <linux/aer.h>
 #include <linux/raid_class.h>
@@ -8483,6 +8484,8 @@ _scsih_probe(struct pci_dev *pdev, const
 
 	switch (hba_mpi_version) {
 	case MPI2_VERSION:
+		pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S |
+			PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
 		/* Use mpt2sas driver host template for SAS 2.0 HBA's */
 		shost = scsi_host_alloc(&mpt2sas_driver_template,
 		  sizeof(struct MPT3SAS_ADAPTER));
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/target/target_core_device.c linux-libre-4.4.49-gnu/drivers/target/target_core_device.c
--- linux-libre-4.4.48-gnu/drivers/target/target_core_device.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/target/target_core_device.c	2017-02-14 18:23:09.000000000 -0500
@@ -362,7 +362,15 @@ int core_enable_device_list_for_node(
 			kfree(new);
 			return -EINVAL;
 		}
-		BUG_ON(orig->se_lun_acl != NULL);
+		if (orig->se_lun_acl != NULL) {
+			pr_warn_ratelimited("Detected existing explicit"
+				" se_lun_acl->se_lun_group reference for %s"
+				" mapped_lun: %llu, failing\n",
+				 nacl->initiatorname, mapped_lun);
+			mutex_unlock(&nacl->lun_entry_mutex);
+			kfree(new);
+			return -EINVAL;
+		}
 
 		rcu_assign_pointer(new->se_lun, lun);
 		rcu_assign_pointer(new->se_lun_acl, lun_acl);
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/target/target_core_sbc.c linux-libre-4.4.49-gnu/drivers/target/target_core_sbc.c
--- linux-libre-4.4.48-gnu/drivers/target/target_core_sbc.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/target/target_core_sbc.c	2017-02-14 18:23:09.000000000 -0500
@@ -442,6 +442,7 @@ static sense_reason_t compare_and_write_
 					     int *post_ret)
 {
 	struct se_device *dev = cmd->se_dev;
+	sense_reason_t ret = TCM_NO_SENSE;
 
 	/*
 	 * Only set SCF_COMPARE_AND_WRITE_POST to force a response fall-through
@@ -449,9 +450,12 @@ static sense_reason_t compare_and_write_
 	 * sent to the backend driver.
 	 */
 	spin_lock_irq(&cmd->t_state_lock);
-	if ((cmd->transport_state & CMD_T_SENT) && !cmd->scsi_status) {
+	if (cmd->transport_state & CMD_T_SENT) {
 		cmd->se_cmd_flags |= SCF_COMPARE_AND_WRITE_POST;
 		*post_ret = 1;
+
+		if (cmd->scsi_status == SAM_STAT_CHECK_CONDITION)
+			ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
 	}
 	spin_unlock_irq(&cmd->t_state_lock);
 
@@ -461,7 +465,7 @@ static sense_reason_t compare_and_write_
 	 */
 	up(&dev->caw_sem);
 
-	return TCM_NO_SENSE;
+	return ret;
 }
 
 static sense_reason_t compare_and_write_callback(struct se_cmd *cmd, bool success,
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/target/target_core_transport.c linux-libre-4.4.49-gnu/drivers/target/target_core_transport.c
--- linux-libre-4.4.48-gnu/drivers/target/target_core_transport.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/target/target_core_transport.c	2017-02-14 18:23:09.000000000 -0500
@@ -3058,7 +3058,6 @@ static void target_tmr_work(struct work_
 		spin_unlock_irqrestore(&cmd->t_state_lock, flags);
 		goto check_stop;
 	}
-	cmd->t_state = TRANSPORT_ISTATE_PROCESSING;
 	spin_unlock_irqrestore(&cmd->t_state_lock, flags);
 
 	cmd->se_tfo->queue_tm_rsp(cmd);
@@ -3071,11 +3070,25 @@ int transport_generic_handle_tmr(
 	struct se_cmd *cmd)
 {
 	unsigned long flags;
+	bool aborted = false;
 
 	spin_lock_irqsave(&cmd->t_state_lock, flags);
-	cmd->transport_state |= CMD_T_ACTIVE;
+	if (cmd->transport_state & CMD_T_ABORTED) {
+		aborted = true;
+	} else {
+		cmd->t_state = TRANSPORT_ISTATE_PROCESSING;
+		cmd->transport_state |= CMD_T_ACTIVE;
+	}
 	spin_unlock_irqrestore(&cmd->t_state_lock, flags);
 
+	if (aborted) {
+		pr_warn_ratelimited("handle_tmr caught CMD_T_ABORTED TMR %d"
+			"ref_tag: %llu tag: %llu\n", cmd->se_tmr_req->function,
+			cmd->se_tmr_req->ref_task_tag, cmd->tag);
+		transport_cmd_check_stop_to_fabric(cmd);
+		return 0;
+	}
+
 	INIT_WORK(&cmd->work, target_tmr_work);
 	queue_work(cmd->se_dev->tmr_wq, &cmd->work);
 	return 0;
diff -druNp --no-dereference linux-libre-4.4.48-gnu/drivers/target/target_core_xcopy.c linux-libre-4.4.49-gnu/drivers/target/target_core_xcopy.c
--- linux-libre-4.4.48-gnu/drivers/target/target_core_xcopy.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/drivers/target/target_core_xcopy.c	2017-02-14 18:23:09.000000000 -0500
@@ -836,7 +836,7 @@ out:
 			" CHECK_CONDITION -> sending response\n", rc);
 		ec_cmd->scsi_status = SAM_STAT_CHECK_CONDITION;
 	}
-	target_complete_cmd(ec_cmd, SAM_STAT_CHECK_CONDITION);
+	target_complete_cmd(ec_cmd, ec_cmd->scsi_status);
 }
 
 sense_reason_t target_do_xcopy(struct se_cmd *se_cmd)
diff -druNp --no-dereference linux-libre-4.4.48-gnu/include/linux/cpumask.h linux-libre-4.4.49-gnu/include/linux/cpumask.h
--- linux-libre-4.4.48-gnu/include/linux/cpumask.h	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/include/linux/cpumask.h	2017-02-14 18:23:09.000000000 -0500
@@ -556,7 +556,7 @@ static inline void cpumask_copy(struct c
 static inline int cpumask_parse_user(const char __user *buf, int len,
 				     struct cpumask *dstp)
 {
-	return bitmap_parse_user(buf, len, cpumask_bits(dstp), nr_cpu_ids);
+	return bitmap_parse_user(buf, len, cpumask_bits(dstp), nr_cpumask_bits);
 }
 
 /**
@@ -571,7 +571,7 @@ static inline int cpumask_parselist_user
 				     struct cpumask *dstp)
 {
 	return bitmap_parselist_user(buf, len, cpumask_bits(dstp),
-				     nr_cpu_ids);
+				     nr_cpumask_bits);
 }
 
 /**
@@ -586,7 +586,7 @@ static inline int cpumask_parse(const ch
 	char *nl = strchr(buf, '\n');
 	unsigned int len = nl ? (unsigned int)(nl - buf) : strlen(buf);
 
-	return bitmap_parse(buf, len, cpumask_bits(dstp), nr_cpu_ids);
+	return bitmap_parse(buf, len, cpumask_bits(dstp), nr_cpumask_bits);
 }
 
 /**
@@ -598,7 +598,7 @@ static inline int cpumask_parse(const ch
  */
 static inline int cpulist_parse(const char *buf, struct cpumask *dstp)
 {
-	return bitmap_parselist(buf, cpumask_bits(dstp), nr_cpu_ids);
+	return bitmap_parselist(buf, cpumask_bits(dstp), nr_cpumask_bits);
 }
 
 /**
diff -druNp --no-dereference linux-libre-4.4.48-gnu/Makefile linux-libre-4.4.49-gnu/Makefile
--- linux-libre-4.4.48-gnu/Makefile	2017-02-09 12:24:39.000000000 -0500
+++ linux-libre-4.4.49-gnu/Makefile	2017-02-15 21:12:18.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 4
-SUBLEVEL = 48
+SUBLEVEL = 49
 EXTRAVERSION = -gnu
 NAME = Blurry Fish Butt
 
diff -druNp --no-dereference linux-libre-4.4.48-gnu/net/mac80211/mesh.c linux-libre-4.4.49-gnu/net/mac80211/mesh.c
--- linux-libre-4.4.48-gnu/net/mac80211/mesh.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/net/mac80211/mesh.c	2017-02-14 18:23:09.000000000 -0500
@@ -355,7 +355,7 @@ int mesh_add_vendor_ies(struct ieee80211
 	/* fast-forward to vendor IEs */
 	offset = ieee80211_ie_split_vendor(ifmsh->ie, ifmsh->ie_len, 0);
 
-	if (offset) {
+	if (offset < ifmsh->ie_len) {
 		len = ifmsh->ie_len - offset;
 		data = ifmsh->ie + offset;
 		if (skb_tailroom(skb) < len)
diff -druNp --no-dereference linux-libre-4.4.48-gnu/security/selinux/hooks.c linux-libre-4.4.49-gnu/security/selinux/hooks.c
--- linux-libre-4.4.48-gnu/security/selinux/hooks.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/security/selinux/hooks.c	2017-02-14 18:23:09.000000000 -0500
@@ -5640,7 +5640,7 @@ static int selinux_setprocattr(struct ta
 		return error;
 
 	/* Obtain a SID for the context, if one was specified. */
-	if (size && str[1] && str[1] != '\n') {
+	if (size && str[0] && str[0] != '\n') {
 		if (str[size-1] == '\n') {
 			str[size-1] = 0;
 			size--;
diff -druNp --no-dereference linux-libre-4.4.48-gnu/sound/core/seq/seq_memory.c linux-libre-4.4.49-gnu/sound/core/seq/seq_memory.c
--- linux-libre-4.4.48-gnu/sound/core/seq/seq_memory.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/sound/core/seq/seq_memory.c	2017-02-14 18:23:09.000000000 -0500
@@ -419,7 +419,6 @@ int snd_seq_pool_done(struct snd_seq_poo
 {
 	unsigned long flags;
 	struct snd_seq_event_cell *ptr;
-	int max_count = 5 * HZ;
 
 	if (snd_BUG_ON(!pool))
 		return -EINVAL;
@@ -432,14 +431,8 @@ int snd_seq_pool_done(struct snd_seq_poo
 	if (waitqueue_active(&pool->output_sleep))
 		wake_up(&pool->output_sleep);
 
-	while (atomic_read(&pool->counter) > 0) {
-		if (max_count == 0) {
-			pr_warn("ALSA: snd_seq_pool_done timeout: %d cells remain\n", atomic_read(&pool->counter));
-			break;
-		}
+	while (atomic_read(&pool->counter) > 0)
 		schedule_timeout_uninterruptible(1);
-		max_count--;
-	}
 	
 	/* release all resources */
 	spin_lock_irqsave(&pool->lock, flags);
diff -druNp --no-dereference linux-libre-4.4.48-gnu/sound/core/seq/seq_queue.c linux-libre-4.4.49-gnu/sound/core/seq/seq_queue.c
--- linux-libre-4.4.48-gnu/sound/core/seq/seq_queue.c	2017-02-09 02:02:59.000000000 -0500
+++ linux-libre-4.4.49-gnu/sound/core/seq/seq_queue.c	2017-02-14 18:23:09.000000000 -0500
@@ -181,6 +181,8 @@ void __exit snd_seq_queues_delete(void)
 	}
 }
 
+static void queue_use(struct snd_seq_queue *queue, int client, int use);
+
 /* allocate a new queue -
  * return queue index value or negative value for error
  */
@@ -192,11 +194,11 @@ int snd_seq_queue_alloc(int client, int
 	if (q == NULL)
 		return -ENOMEM;
 	q->info_flags = info_flags;
+	queue_use(q, client, 1);
 	if (queue_list_add(q) < 0) {
 		queue_delete(q);
 		return -ENOMEM;
 	}
-	snd_seq_queue_use(q->queue, client, 1); /* use this queue */
 	return q->queue;
 }
 
@@ -502,19 +504,9 @@ int snd_seq_queue_timer_set_tempo(int qu
 	return result;
 }
 
-
-/* use or unuse this queue -
- * if it is the first client, starts the timer.
- * if it is not longer used by any clients, stop the timer.
- */
-int snd_seq_queue_use(int queueid, int client, int use)
+/* use or unuse this queue */
+static void queue_use(struct snd_seq_queue *queue, int client, int use)
 {
-	struct snd_seq_queue *queue;
-
-	queue = queueptr(queueid);
-	if (queue == NULL)
-		return -EINVAL;
-	mutex_lock(&queue->timer_mutex);
 	if (use) {
 		if (!test_and_set_bit(client, queue->clients_bitmap))
 			queue->clients++;
@@ -529,6 +521,21 @@ int snd_seq_queue_use(int queueid, int c
 	} else {
 		snd_seq_timer_close(queue);
 	}
+}
+
+/* use or unuse this queue -
+ * if it is the first client, starts the timer.
+ * if it is not longer used by any clients, stop the timer.
+ */
+int snd_seq_queue_use(int queueid, int client, int use)
+{
+	struct snd_seq_queue *queue;
+
+	queue = queueptr(queueid);
+	if (queue == NULL)
+		return -EINVAL;
+	mutex_lock(&queue->timer_mutex);
+	queue_use(queue, client, use);
 	mutex_unlock(&queue->timer_mutex);
 	queuefree(queue);
 	return 0;
