diff -druNp --no-dereference linux-libre-3.2.85-gnu1/arch/x86/kvm/vmx.c linux-libre-3.2.86-gnu1/arch/x86/kvm/vmx.c
--- linux-libre-3.2.85-gnu1/arch/x86/kvm/vmx.c	2017-02-22 22:51:07.000000000 -0500
+++ linux-libre-3.2.86-gnu1/arch/x86/kvm/vmx.c	2017-02-26 15:01:33.000000000 -0500
@@ -876,10 +876,10 @@ static inline bool nested_cpu_has_virtua
 	return vmcs12->pin_based_vm_exec_control & PIN_BASED_VIRTUAL_NMIS;
 }
 
-static inline bool is_exception(u32 intr_info)
+static inline bool is_nmi(u32 intr_info)
 {
 	return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK))
-		== (INTR_TYPE_HARD_EXCEPTION | INTR_INFO_VALID_MASK);
+		== (INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK);
 }
 
 static void nested_vmx_vmexit(struct kvm_vcpu *vcpu);
@@ -4225,7 +4225,7 @@ static int handle_exception(struct kvm_v
 		return 0;
 	}
 
-	if ((intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR)
+	if (is_nmi(intr_info))
 		return 1;  /* already handled by vmx_vcpu_run() */
 
 	if (is_no_device(intr_info)) {
@@ -5773,7 +5773,7 @@ static bool nested_vmx_exit_handled(stru
 
 	switch (exit_reason) {
 	case EXIT_REASON_EXCEPTION_NMI:
-		if (!is_exception(intr_info))
+		if (is_nmi(intr_info))
 			return 0;
 		else if (is_page_fault(intr_info))
 			return enable_ept;
@@ -5973,8 +5973,7 @@ static void vmx_complete_atomic_exit(str
 		kvm_machine_check();
 
 	/* We need to handle NMIs before interrupts are enabled */
-	if ((exit_intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_NMI_INTR &&
-	    (exit_intr_info & INTR_INFO_VALID_MASK)) {
+	if (is_nmi(exit_intr_info)) {
 		kvm_before_handle_nmi(&vmx->vcpu);
 		asm("int $2");
 		kvm_after_handle_nmi(&vmx->vcpu);
diff -druNp --no-dereference linux-libre-3.2.85-gnu1/drivers/usb/serial/kl5kusb105.c linux-libre-3.2.86-gnu1/drivers/usb/serial/kl5kusb105.c
--- linux-libre-3.2.85-gnu1/drivers/usb/serial/kl5kusb105.c	2017-02-22 22:51:07.000000000 -0500
+++ linux-libre-3.2.86-gnu1/drivers/usb/serial/kl5kusb105.c	2017-02-26 15:01:33.000000000 -0500
@@ -209,10 +209,11 @@ static int klsi_105_get_line_state(struc
 			     status_buf, KLSI_STATUSBUF_LEN,
 			     10000
 			     );
-	if (rc < 0)
-		dev_err(&port->dev, "Reading line status failed (error = %d)\n",
-			rc);
-	else {
+	if (rc != KLSI_STATUSBUF_LEN) {
+		dev_err(&port->dev, "reading line status failed: %d\n", rc);
+		if (rc >= 0)
+			rc = -EIO;
+	} else {
 		status = get_unaligned_le16(status_buf);
 
 		dev_info(&port->serial->dev->dev, "read status %x %x",
diff -druNp --no-dereference linux-libre-3.2.85-gnu1/Makefile linux-libre-3.2.86-gnu1/Makefile
--- linux-libre-3.2.85-gnu1/Makefile	2017-02-23 10:33:08.000000000 -0500
+++ linux-libre-3.2.86-gnu1/Makefile	2017-02-27 03:18:47.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 2
-SUBLEVEL = 85
+SUBLEVEL = 86
 EXTRAVERSION =-gnu1
 NAME = Saber-toothed Squirrel
 
diff -druNp --no-dereference linux-libre-3.2.85-gnu1/net/dccp/input.c linux-libre-3.2.86-gnu1/net/dccp/input.c
--- linux-libre-3.2.85-gnu1/net/dccp/input.c	2017-02-22 22:51:07.000000000 -0500
+++ linux-libre-3.2.86-gnu1/net/dccp/input.c	2017-02-26 15:01:33.000000000 -0500
@@ -606,7 +606,8 @@ int dccp_rcv_state_process(struct sock *
 			if (inet_csk(sk)->icsk_af_ops->conn_request(sk,
 								    skb) < 0)
 				return 1;
-			goto discard;
+			consume_skb(skb);
+			return 0;
 		}
 		if (dh->dccph_type == DCCP_PKT_RESET)
 			goto discard;
diff -druNp --no-dereference linux-libre-3.2.85-gnu1/net/ipv4/tcp.c linux-libre-3.2.86-gnu1/net/ipv4/tcp.c
--- linux-libre-3.2.85-gnu1/net/ipv4/tcp.c	2017-02-22 22:51:07.000000000 -0500
+++ linux-libre-3.2.86-gnu1/net/ipv4/tcp.c	2017-02-26 15:01:33.000000000 -0500
@@ -659,6 +659,12 @@ ssize_t tcp_splice_read(struct socket *s
 				ret = -EAGAIN;
 				break;
 			}
+			/* if __tcp_splice_read() got nothing while we have
+			 * an skb in receive queue, we do not want to loop.
+			 * This might happen with URG data.
+			 */
+			if (!skb_queue_empty(&sk->sk_receive_queue))
+				break;
 			sk_wait_data(sk, &timeo);
 			if (signal_pending(current)) {
 				ret = sock_intr_errno(timeo);
