diff -druNp --no-dereference linux-libre-4.9.192-gnu/arch/powerpc/kernel/process.c linux-libre-4.9.193-gnu/arch/powerpc/kernel/process.c
--- linux-libre-4.9.192-gnu/arch/powerpc/kernel/process.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/arch/powerpc/kernel/process.c	2019-09-16 02:19:34.000000000 -0400
@@ -476,13 +476,14 @@ void giveup_all(struct task_struct *tsk)
 	if (!tsk->thread.regs)
 		return;
 
+	check_if_tm_restore_required(tsk);
+
 	usermsr = tsk->thread.regs->msr;
 
 	if ((usermsr & msr_all_available) == 0)
 		return;
 
 	msr_check_and_set(msr_all_available);
-	check_if_tm_restore_required(tsk);
 
 #ifdef CONFIG_PPC_FPU
 	if (usermsr & MSR_FP)
diff -druNp --no-dereference linux-libre-4.9.192-gnu/drivers/clk/clk-s2mps11.c linux-libre-4.9.193-gnu/drivers/clk/clk-s2mps11.c
--- linux-libre-4.9.192-gnu/drivers/clk/clk-s2mps11.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/drivers/clk/clk-s2mps11.c	2019-09-16 02:19:34.000000000 -0400
@@ -255,7 +255,7 @@ MODULE_DEVICE_TABLE(platform, s2mps11_cl
  * This requires of_device_id table.  In the same time this will not change the
  * actual *device* matching so do not add .of_match_table.
  */
-static const struct of_device_id s2mps11_dt_match[] = {
+static const struct of_device_id s2mps11_dt_match[] __used = {
 	{
 		.compatible = "samsung,s2mps11-clk",
 		.data = (void *)S2MPS11X,
diff -druNp --no-dereference linux-libre-4.9.192-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c linux-libre-4.9.193-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
--- linux-libre-4.9.192-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c	2019-09-16 02:19:34.000000000 -0400
@@ -264,7 +264,7 @@ static int vmw_recv_msg(struct rpc_chann
 
 		if ((HIGH_WORD(ebx) & MESSAGE_STATUS_SUCCESS) == 0) {
 			kfree(reply);
-
+			reply = NULL;
 			if ((HIGH_WORD(ebx) & MESSAGE_STATUS_CPT) != 0) {
 				/* A checkpoint occurred. Retry. */
 				continue;
@@ -288,7 +288,7 @@ static int vmw_recv_msg(struct rpc_chann
 
 		if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0) {
 			kfree(reply);
-
+			reply = NULL;
 			if ((HIGH_WORD(ecx) & MESSAGE_STATUS_CPT) != 0) {
 				/* A checkpoint occurred. Retry. */
 				continue;
@@ -300,10 +300,8 @@ static int vmw_recv_msg(struct rpc_chann
 		break;
 	}
 
-	if (retries == RETRIES) {
-		kfree(reply);
+	if (!reply)
 		return -EINVAL;
-	}
 
 	*msg_len = reply_len;
 	*msg     = reply;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/drivers/vhost/test.c linux-libre-4.9.193-gnu/drivers/vhost/test.c
--- linux-libre-4.9.192-gnu/drivers/vhost/test.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/drivers/vhost/test.c	2019-09-16 02:19:34.000000000 -0400
@@ -23,6 +23,12 @@
  * Using this limit prevents one virtqueue from starving others. */
 #define VHOST_TEST_WEIGHT 0x80000
 
+/* Max number of packets transferred before requeueing the job.
+ * Using this limit prevents one virtqueue from starving others with
+ * pkts.
+ */
+#define VHOST_TEST_PKT_WEIGHT 256
+
 enum {
 	VHOST_TEST_VQ = 0,
 	VHOST_TEST_VQ_MAX = 1,
@@ -81,10 +87,8 @@ static void handle_vq(struct vhost_test
 		}
 		vhost_add_used_and_signal(&n->dev, vq, head, 0);
 		total_len += len;
-		if (unlikely(total_len >= VHOST_TEST_WEIGHT)) {
-			vhost_poll_queue(&vq->poll);
+		if (unlikely(vhost_exceeds_weight(vq, 0, total_len)))
 			break;
-		}
 	}
 
 	mutex_unlock(&vq->mutex);
@@ -116,7 +120,8 @@ static int vhost_test_open(struct inode
 	dev = &n->dev;
 	vqs[VHOST_TEST_VQ] = &n->vqs[VHOST_TEST_VQ];
 	n->vqs[VHOST_TEST_VQ].handle_kick = handle_vq_kick;
-	vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX);
+	vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX,
+		       VHOST_TEST_PKT_WEIGHT, VHOST_TEST_WEIGHT);
 
 	f->private_data = n;
 
diff -druNp --no-dereference linux-libre-4.9.192-gnu/drivers/vhost/vhost.c linux-libre-4.9.193-gnu/drivers/vhost/vhost.c
--- linux-libre-4.9.192-gnu/drivers/vhost/vhost.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/drivers/vhost/vhost.c	2019-09-16 02:19:34.000000000 -0400
@@ -1987,7 +1987,7 @@ static int get_indirect(struct vhost_vir
 		/* If this is an input descriptor, increment that count. */
 		if (access == VHOST_ACCESS_WO) {
 			*in_num += ret;
-			if (unlikely(log)) {
+			if (unlikely(log && ret)) {
 				log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
 				log[*log_num].len = vhost32_to_cpu(vq, desc.len);
 				++*log_num;
@@ -2123,7 +2123,7 @@ int vhost_get_vq_desc(struct vhost_virtq
 			/* If this is an input descriptor,
 			 * increment that count. */
 			*in_num += ret;
-			if (unlikely(log)) {
+			if (unlikely(log && ret)) {
 				log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
 				log[*log_num].len = vhost32_to_cpu(vq, desc.len);
 				++*log_num;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/include/net/ipv6_frag.h linux-libre-4.9.193-gnu/include/net/ipv6_frag.h
--- linux-libre-4.9.192-gnu/include/net/ipv6_frag.h	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/include/net/ipv6_frag.h	2019-09-16 02:19:34.000000000 -0400
@@ -94,7 +94,6 @@ ip6frag_expire_frag_queue(struct net *ne
 		goto out;
 
 	head->dev = dev;
-	skb_get(head);
 	spin_unlock(&fq->q.lock);
 
 	icmpv6_send(head, ICMPV6_TIME_EXCEED, ICMPV6_EXC_FRAGTIME, 0);
diff -druNp --no-dereference linux-libre-4.9.192-gnu/include/net/xfrm.h linux-libre-4.9.193-gnu/include/net/xfrm.h
--- linux-libre-4.9.192-gnu/include/net/xfrm.h	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/include/net/xfrm.h	2019-09-16 02:19:34.000000000 -0400
@@ -1297,6 +1297,23 @@ static inline int xfrm_state_kern(const
 	return atomic_read(&x->tunnel_users);
 }
 
+static inline bool xfrm_id_proto_valid(u8 proto)
+{
+	switch (proto) {
+	case IPPROTO_AH:
+	case IPPROTO_ESP:
+	case IPPROTO_COMP:
+#if IS_ENABLED(CONFIG_IPV6)
+	case IPPROTO_ROUTING:
+	case IPPROTO_DSTOPTS:
+#endif
+		return true;
+	default:
+		return false;
+	}
+}
+
+/* IPSEC_PROTO_ANY only matches 3 IPsec protocols, 0 could match all. */
 static inline int xfrm_id_proto_match(u8 proto, u8 userproto)
 {
 	return (!userproto || proto == userproto ||
diff -druNp --no-dereference linux-libre-4.9.192-gnu/kernel/sched/fair.c linux-libre-4.9.193-gnu/kernel/sched/fair.c
--- linux-libre-4.9.192-gnu/kernel/sched/fair.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/kernel/sched/fair.c	2019-09-16 02:19:34.000000000 -0400
@@ -3882,6 +3882,8 @@ static void __account_cfs_rq_runtime(str
 	if (likely(cfs_rq->runtime_remaining > 0))
 		return;
 
+	if (cfs_rq->throttled)
+		return;
 	/*
 	 * if we're unable to extend our runtime we resched so that the active
 	 * hierarchy can be throttled
@@ -4077,6 +4079,9 @@ static u64 distribute_cfs_runtime(struct
 		if (!cfs_rq_throttled(cfs_rq))
 			goto next;
 
+		/* By the above check, this should never be true */
+		SCHED_WARN_ON(cfs_rq->runtime_remaining > 0);
+
 		runtime = -cfs_rq->runtime_remaining + 1;
 		if (runtime > remaining)
 			runtime = remaining;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/Makefile linux-libre-4.9.193-gnu/Makefile
--- linux-libre-4.9.192-gnu/Makefile	2019-09-10 15:37:56.000000000 -0400
+++ linux-libre-4.9.193-gnu/Makefile	2019-09-16 06:06:04.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 9
-SUBLEVEL = 192
+SUBLEVEL = 193
 EXTRAVERSION = -gnu
 NAME = Roaring Lionus
 
diff -druNp --no-dereference linux-libre-4.9.192-gnu/net/batman-adv/bat_iv_ogm.c linux-libre-4.9.193-gnu/net/batman-adv/bat_iv_ogm.c
--- linux-libre-4.9.192-gnu/net/batman-adv/bat_iv_ogm.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/net/batman-adv/bat_iv_ogm.c	2019-09-16 02:19:34.000000000 -0400
@@ -450,17 +450,23 @@ static u8 batadv_hop_penalty(u8 tq, cons
  * batadv_iv_ogm_aggr_packet - checks if there is another OGM attached
  * @buff_pos: current position in the skb
  * @packet_len: total length of the skb
- * @tvlv_len: tvlv length of the previously considered OGM
+ * @ogm_packet: potential OGM in buffer
  *
  * Return: true if there is enough space for another OGM, false otherwise.
  */
-static bool batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
-				      __be16 tvlv_len)
+static bool
+batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
+			  const struct batadv_ogm_packet *ogm_packet)
 {
 	int next_buff_pos = 0;
 
-	next_buff_pos += buff_pos + BATADV_OGM_HLEN;
-	next_buff_pos += ntohs(tvlv_len);
+	/* check if there is enough space for the header */
+	next_buff_pos += buff_pos + sizeof(*ogm_packet);
+	if (next_buff_pos > packet_len)
+		return false;
+
+	/* check if there is enough space for the optional TVLV */
+	next_buff_pos += ntohs(ogm_packet->tvlv_len);
 
 	return (next_buff_pos <= packet_len) &&
 	       (next_buff_pos <= BATADV_MAX_AGGREGATION_BYTES);
@@ -488,7 +494,7 @@ static void batadv_iv_ogm_send_to_if(str
 
 	/* adjust all flags and log packets */
 	while (batadv_iv_ogm_aggr_packet(buff_pos, forw_packet->packet_len,
-					 batadv_ogm_packet->tvlv_len)) {
+					 batadv_ogm_packet)) {
 		/* we might have aggregated direct link packets with an
 		 * ordinary base packet
 		 */
@@ -1841,7 +1847,7 @@ static int batadv_iv_ogm_receive(struct
 
 	/* unpack the aggregated packets and process them one by one */
 	while (batadv_iv_ogm_aggr_packet(ogm_offset, skb_headlen(skb),
-					 ogm_packet->tvlv_len)) {
+					 ogm_packet)) {
 		batadv_iv_ogm_process(skb, ogm_offset, if_incoming);
 
 		ogm_offset += BATADV_OGM_HLEN;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/net/batman-adv/netlink.c linux-libre-4.9.193-gnu/net/batman-adv/netlink.c
--- linux-libre-4.9.192-gnu/net/batman-adv/netlink.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/net/batman-adv/netlink.c	2019-09-16 02:19:34.000000000 -0400
@@ -114,7 +114,7 @@ batadv_netlink_get_ifindex(const struct
 {
 	struct nlattr *attr = nlmsg_find_attr(nlh, GENL_HDRLEN, attrtype);
 
-	return attr ? nla_get_u32(attr) : 0;
+	return (attr && nla_len(attr) == sizeof(u32)) ? nla_get_u32(attr) : 0;
 }
 
 /**
diff -druNp --no-dereference linux-libre-4.9.192-gnu/net/key/af_key.c linux-libre-4.9.193-gnu/net/key/af_key.c
--- linux-libre-4.9.192-gnu/net/key/af_key.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/net/key/af_key.c	2019-09-16 02:19:34.000000000 -0400
@@ -1969,8 +1969,10 @@ parse_ipsecrequest(struct xfrm_policy *x
 
 	if (rq->sadb_x_ipsecrequest_mode == 0)
 		return -EINVAL;
+	if (!xfrm_id_proto_valid(rq->sadb_x_ipsecrequest_proto))
+		return -EINVAL;
 
-	t->id.proto = rq->sadb_x_ipsecrequest_proto; /* XXX check proto */
+	t->id.proto = rq->sadb_x_ipsecrequest_proto;
 	if ((mode = pfkey_mode_to_xfrm(rq->sadb_x_ipsecrequest_mode)) < 0)
 		return -EINVAL;
 	t->mode = mode;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/net/xfrm/xfrm_state.c linux-libre-4.9.193-gnu/net/xfrm/xfrm_state.c
--- linux-libre-4.9.192-gnu/net/xfrm/xfrm_state.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/net/xfrm/xfrm_state.c	2019-09-16 02:19:34.000000000 -0400
@@ -2168,7 +2168,7 @@ void xfrm_state_fini(struct net *net)
 	unsigned int sz;
 
 	flush_work(&net->xfrm.state_hash_work);
-	xfrm_state_flush(net, IPSEC_PROTO_ANY, false);
+	xfrm_state_flush(net, 0, false);
 	flush_work(&xfrm_state_gc_work);
 
 	WARN_ON(!list_empty(&net->xfrm.state_all));
diff -druNp --no-dereference linux-libre-4.9.192-gnu/net/xfrm/xfrm_user.c linux-libre-4.9.193-gnu/net/xfrm/xfrm_user.c
--- linux-libre-4.9.192-gnu/net/xfrm/xfrm_user.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/net/xfrm/xfrm_user.c	2019-09-16 02:19:34.000000000 -0400
@@ -1452,20 +1452,8 @@ static int validate_tmpl(int nr, struct
 			return -EINVAL;
 		}
 
-		switch (ut[i].id.proto) {
-		case IPPROTO_AH:
-		case IPPROTO_ESP:
-		case IPPROTO_COMP:
-#if IS_ENABLED(CONFIG_IPV6)
-		case IPPROTO_ROUTING:
-		case IPPROTO_DSTOPTS:
-#endif
-		case IPSEC_PROTO_ANY:
-			break;
-		default:
+		if (!xfrm_id_proto_valid(ut[i].id.proto))
 			return -EINVAL;
-		}
-
 	}
 
 	return 0;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/scripts/decode_stacktrace.sh linux-libre-4.9.193-gnu/scripts/decode_stacktrace.sh
--- linux-libre-4.9.192-gnu/scripts/decode_stacktrace.sh	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/scripts/decode_stacktrace.sh	2019-09-16 02:19:34.000000000 -0400
@@ -77,7 +77,7 @@ parse_symbol() {
 	fi
 
 	# Strip out the base of the path
-	code=${code//^$basepath/""}
+	code=${code#$basepath/}
 
 	# In the case of inlines, move everything to same line
 	code=${code//$'\n'/' '}
diff -druNp --no-dereference linux-libre-4.9.192-gnu/sound/pci/hda/hda_auto_parser.c linux-libre-4.9.193-gnu/sound/pci/hda/hda_auto_parser.c
--- linux-libre-4.9.192-gnu/sound/pci/hda/hda_auto_parser.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/sound/pci/hda/hda_auto_parser.c	2019-09-16 02:19:34.000000000 -0400
@@ -827,6 +827,8 @@ static void apply_fixup(struct hda_codec
 	while (id >= 0) {
 		const struct hda_fixup *fix = codec->fixup_list + id;
 
+		if (++depth > 10)
+			break;
 		if (fix->chained_before)
 			apply_fixup(codec, fix->chain_id, action, depth + 1);
 
@@ -866,8 +868,6 @@ static void apply_fixup(struct hda_codec
 		}
 		if (!fix->chained || fix->chained_before)
 			break;
-		if (++depth > 10)
-			break;
 		id = fix->chain_id;
 	}
 }
diff -druNp --no-dereference linux-libre-4.9.192-gnu/sound/pci/hda/hda_generic.c linux-libre-4.9.193-gnu/sound/pci/hda/hda_generic.c
--- linux-libre-4.9.192-gnu/sound/pci/hda/hda_generic.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/sound/pci/hda/hda_generic.c	2019-09-16 02:19:34.000000000 -0400
@@ -5807,7 +5807,8 @@ int snd_hda_gen_init(struct hda_codec *c
 	if (spec->init_hook)
 		spec->init_hook(codec);
 
-	snd_hda_apply_verbs(codec);
+	if (!spec->skip_verbs)
+		snd_hda_apply_verbs(codec);
 
 	init_multi_out(codec);
 	init_extra_out(codec);
diff -druNp --no-dereference linux-libre-4.9.192-gnu/sound/pci/hda/hda_generic.h linux-libre-4.9.193-gnu/sound/pci/hda/hda_generic.h
--- linux-libre-4.9.192-gnu/sound/pci/hda/hda_generic.h	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/sound/pci/hda/hda_generic.h	2019-09-16 02:19:34.000000000 -0400
@@ -236,6 +236,7 @@ struct hda_gen_spec {
 	unsigned int indep_hp_enabled:1; /* independent HP enabled */
 	unsigned int have_aamix_ctl:1;
 	unsigned int hp_mic_jack_modes:1;
+	unsigned int skip_verbs:1; /* don't apply verbs at snd_hda_gen_init() */
 
 	/* additional mute flags (only effective with auto_mute_via_amp=1) */
 	u64 mute_bits;
diff -druNp --no-dereference linux-libre-4.9.192-gnu/sound/pci/hda/patch_realtek.c linux-libre-4.9.193-gnu/sound/pci/hda/patch_realtek.c
--- linux-libre-4.9.192-gnu/sound/pci/hda/patch_realtek.c	2019-09-10 05:31:05.000000000 -0400
+++ linux-libre-4.9.193-gnu/sound/pci/hda/patch_realtek.c	2019-09-16 02:19:34.000000000 -0400
@@ -773,9 +773,11 @@ static int alc_init(struct hda_codec *co
 	if (spec->init_hook)
 		spec->init_hook(codec);
 
+	spec->gen.skip_verbs = 1; /* applied in below */
 	snd_hda_gen_init(codec);
 	alc_fix_pll(codec);
 	alc_auto_init_amp(codec, spec->init_amp);
+	snd_hda_apply_verbs(codec); /* apply verbs here after own init */
 
 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT);
 
