--- /dev/null
+From dfed913e8b55a0c2c4906f1242fd38fd9a116e49 Mon Sep 17 00:00:00 2001
+From: Hangbin Liu <liuhangbin@gmail.com>
+Date: Mon, 25 Apr 2022 09:45:02 +0800
+Subject: net/af_packet: add VLAN support for AF_PACKET SOCK_RAW GSO
+
+From: Hangbin Liu <liuhangbin@gmail.com>
+
+commit dfed913e8b55a0c2c4906f1242fd38fd9a116e49 upstream.
+
+Currently, the kernel drops GSO VLAN tagged packet if it's created with
+socket(AF_PACKET, SOCK_RAW, 0) plus virtio_net_hdr.
+
+The reason is AF_PACKET doesn't adjust the skb network header if there is
+a VLAN tag. Then after virtio_net_hdr_set_proto() called, the skb->protocol
+will be set to ETH_P_IP/IPv6. And in later inet/ipv6_gso_segment() the skb
+is dropped as network header position is invalid.
+
+Let's handle VLAN packets by adjusting network header position in
+packet_parse_headers(). The adjustment is safe and does not affect the
+later xmit as tap device also did that.
+
+In packet_snd(), packet_parse_headers() need to be moved before calling
+virtio_net_hdr_set_proto(), so we can set correct skb->protocol and
+network header first.
+
+There is no need to update tpacket_snd() as it calls packet_parse_headers()
+in tpacket_fill_skb(), which is already before calling virtio_net_hdr_*
+functions.
+
+skb->no_fcs setting is also moved upper to make all skb settings together
+and keep consistency with function packet_sendmsg_spkt().
+
+Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
+Acked-by: Willem de Bruijn <willemb@google.com>
+Acked-by: Michael S. Tsirkin <mst@redhat.com>
+Link: https://lore.kernel.org/r/20220425014502.985464-1-liuhangbin@gmail.com
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/packet/af_packet.c | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -1885,12 +1885,20 @@ oom:
+
+ static void packet_parse_headers(struct sk_buff *skb, struct socket *sock)
+ {
++ int depth;
++
+ if ((!skb->protocol || skb->protocol == htons(ETH_P_ALL)) &&
+ sock->type == SOCK_RAW) {
+ skb_reset_mac_header(skb);
+ skb->protocol = dev_parse_header_protocol(skb);
+ }
+
++ /* Move network header to the right position for VLAN tagged packets */
++ if (likely(skb->dev->type == ARPHRD_ETHER) &&
++ eth_type_vlan(skb->protocol) &&
++ __vlan_get_protocol(skb, skb->protocol, &depth) != 0)
++ skb_set_network_header(skb, depth);
++
+ skb_probe_transport_header(skb);
+ }
+
+@@ -3005,6 +3013,11 @@ static int packet_snd(struct socket *soc
+ skb->mark = sockc.mark;
+ skb->tstamp = sockc.transmit_time;
+
++ if (unlikely(extra_len == 4))
++ skb->no_fcs = 1;
++
++ packet_parse_headers(skb, sock);
++
+ if (has_vnet_hdr) {
+ err = virtio_net_hdr_to_skb(skb, &vnet_hdr, vio_le());
+ if (err)
+@@ -3013,11 +3026,6 @@ static int packet_snd(struct socket *soc
+ virtio_net_hdr_set_proto(skb, &vnet_hdr);
+ }
+
+- packet_parse_headers(skb, sock);
+-
+- if (unlikely(extra_len == 4))
+- skb->no_fcs = 1;
+-
+ err = po->xmit(skb);
+ if (unlikely(err != 0)) {
+ if (err > 0)
--- /dev/null
+From e9d3f80935b6607dcdc5682b00b1d4b28e0a0c5d Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Thu, 2 Jun 2022 09:18:59 -0700
+Subject: net/af_packet: make sure to pull mac header
+
+From: Eric Dumazet <edumazet@google.com>
+
+commit e9d3f80935b6607dcdc5682b00b1d4b28e0a0c5d upstream.
+
+GSO assumes skb->head contains link layer headers.
+
+tun device in some case can provide base 14 bytes,
+regardless of VLAN being used or not.
+
+After blamed commit, we can end up setting a network
+header offset of 18+, we better pull the missing
+bytes to avoid a posible crash in GSO.
+
+syzbot report was:
+kernel BUG at include/linux/skbuff.h:2699!
+invalid opcode: 0000 [#1] PREEMPT SMP KASAN
+CPU: 1 PID: 3601 Comm: syz-executor210 Not tainted 5.18.0-syzkaller-11338-g2c5ca23f7414 #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+RIP: 0010:__skb_pull include/linux/skbuff.h:2699 [inline]
+RIP: 0010:skb_mac_gso_segment+0x48f/0x530 net/core/gro.c:136
+Code: 00 48 c7 c7 00 96 d4 8a c6 05 cb d3 45 06 01 e8 26 bb d0 01 e9 2f fd ff ff 49 c7 c4 ea ff ff ff e9 f1 fe ff ff e8 91 84 19 fa <0f> 0b 48 89 df e8 97 44 66 fa e9 7f fd ff ff e8 ad 44 66 fa e9 48
+RSP: 0018:ffffc90002e2f4b8 EFLAGS: 00010293
+RAX: 0000000000000000 RBX: 0000000000000012 RCX: 0000000000000000
+RDX: ffff88805bb58000 RSI: ffffffff8760ed0f RDI: 0000000000000004
+RBP: 0000000000005dbc R08: 0000000000000004 R09: 0000000000000fe0
+R10: 0000000000000fe4 R11: 0000000000000000 R12: 0000000000000fe0
+R13: ffff88807194d780 R14: 1ffff920005c5e9b R15: 0000000000000012
+FS: 000055555730f300(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000
+CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 00000000200015c0 CR3: 0000000071ff8000 CR4: 0000000000350ee0
+Call Trace:
+ <TASK>
+ __skb_gso_segment+0x327/0x6e0 net/core/dev.c:3411
+ skb_gso_segment include/linux/netdevice.h:4749 [inline]
+ validate_xmit_skb+0x6bc/0xf10 net/core/dev.c:3669
+ validate_xmit_skb_list+0xbc/0x120 net/core/dev.c:3719
+ sch_direct_xmit+0x3d1/0xbe0 net/sched/sch_generic.c:327
+ __dev_xmit_skb net/core/dev.c:3815 [inline]
+ __dev_queue_xmit+0x14a1/0x3a00 net/core/dev.c:4219
+ packet_snd net/packet/af_packet.c:3071 [inline]
+ packet_sendmsg+0x21cb/0x5550 net/packet/af_packet.c:3102
+ sock_sendmsg_nosec net/socket.c:714 [inline]
+ sock_sendmsg+0xcf/0x120 net/socket.c:734
+ ____sys_sendmsg+0x6eb/0x810 net/socket.c:2492
+ ___sys_sendmsg+0xf3/0x170 net/socket.c:2546
+ __sys_sendmsg net/socket.c:2575 [inline]
+ __do_sys_sendmsg net/socket.c:2584 [inline]
+ __se_sys_sendmsg net/socket.c:2582 [inline]
+ __x64_sys_sendmsg+0x132/0x220 net/socket.c:2582
+ do_syscall_x64 arch/x86/entry/common.c:50 [inline]
+ do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
+ entry_SYSCALL_64_after_hwframe+0x46/0xb0
+RIP: 0033:0x7f4b95da06c9
+Code: 28 c3 e8 4a 15 00 00 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
+RSP: 002b:00007ffd7defc4c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
+RAX: ffffffffffffffda RBX: 00007ffd7defc4f0 RCX: 00007f4b95da06c9
+RDX: 0000000000000000 RSI: 0000000020000140 RDI: 0000000000000003
+RBP: 0000000000000003 R08: bb1414ac00000050 R09: bb1414ac00000050
+R10: 0000000000000004 R11: 0000000000000246 R12: 0000000000000000
+R13: 00007ffd7defc4e0 R14: 00007ffd7defc4d8 R15: 00007ffd7defc4d4
+ </TASK>
+
+Fixes: dfed913e8b55 ("net/af_packet: add VLAN support for AF_PACKET SOCK_RAW GSO")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: syzbot <syzkaller@googlegroups.com>
+Acked-by: Hangbin Liu <liuhangbin@gmail.com>
+Acked-by: Willem de Bruijn <willemb@google.com>
+Cc: Michael S. Tsirkin <mst@redhat.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/packet/af_packet.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -1896,8 +1896,10 @@ static void packet_parse_headers(struct
+ /* Move network header to the right position for VLAN tagged packets */
+ if (likely(skb->dev->type == ARPHRD_ETHER) &&
+ eth_type_vlan(skb->protocol) &&
+- __vlan_get_protocol(skb, skb->protocol, &depth) != 0)
+- skb_set_network_header(skb, depth);
++ __vlan_get_protocol(skb, skb->protocol, &depth) != 0) {
++ if (pskb_may_pull(skb, depth))
++ skb_set_network_header(skb, depth);
++ }
+
+ skb_probe_transport_header(skb);
+ }
--- /dev/null
+From fe7738eb3ca3631a75844e790f6cb576c0fe7b00 Mon Sep 17 00:00:00 2001
+From: Dima Chumak <dchumak@nvidia.com>
+Date: Mon, 26 Apr 2021 15:16:26 +0300
+Subject: net/mlx5e: Fix nullptr in mlx5e_tc_add_fdb_flow()
+
+From: Dima Chumak <dchumak@nvidia.com>
+
+commit fe7738eb3ca3631a75844e790f6cb576c0fe7b00 upstream.
+
+The result of __dev_get_by_index() is not checked for NULL, which then
+passed to mlx5e_attach_encap() and gets dereferenced.
+
+Also, in case of a successful lookup, the net_device reference count is
+not incremented, which may result in net_device pointer becoming invalid
+at any time during mlx5e_attach_encap() execution.
+
+Fix by using dev_get_by_index(), which does proper reference counting on
+the net_device pointer. Also, handle nullptr return value when mirred
+device is not found.
+
+It's safe to call dev_put() on the mirred net_device pointer, right
+after mlx5e_attach_encap() call, because it's not being saved/copied
+down the call chain.
+
+Fixes: 3c37745ec614 ("net/mlx5e: Properly deal with encap flows add/del under neigh update")
+Addresses-Coverity: ("Dereference null return value")
+Signed-off-by: Dima Chumak <dchumak@nvidia.com>
+Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
+Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
+Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
++++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+@@ -1344,9 +1344,9 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv
+ struct netlink_ext_ack *extack)
+ {
+ struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
+- struct net_device *out_dev, *encap_dev = NULL;
+ struct mlx5e_tc_flow_parse_attr *parse_attr;
+ struct mlx5_flow_attr *attr = flow->attr;
++ struct net_device *encap_dev = NULL;
+ struct mlx5_esw_flow_attr *esw_attr;
+ struct mlx5_fc *counter = NULL;
+ struct mlx5e_rep_priv *rpriv;
+@@ -1391,16 +1391,22 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv
+ esw_attr = attr->esw_attr;
+
+ for (out_index = 0; out_index < MLX5_MAX_FLOW_FWD_VPORTS; out_index++) {
++ struct net_device *out_dev;
+ int mirred_ifindex;
+
+ if (!(esw_attr->dests[out_index].flags & MLX5_ESW_DEST_ENCAP))
+ continue;
+
+ mirred_ifindex = parse_attr->mirred_ifindex[out_index];
+- out_dev = __dev_get_by_index(dev_net(priv->netdev),
+- mirred_ifindex);
++ out_dev = dev_get_by_index(dev_net(priv->netdev), mirred_ifindex);
++ if (!out_dev) {
++ NL_SET_ERR_MSG_MOD(extack, "Requested mirred device not found");
++ err = -ENODEV;
++ return err;
++ }
+ err = mlx5e_attach_encap(priv, flow, out_dev, out_index,
+ extack, &encap_dev, &encap_valid);
++ dev_put(out_dev);
+ if (err)
+ return err;
+
--- /dev/null
+From 4d60b475f858ebdb06c1339f01a890f287b5e587 Mon Sep 17 00:00:00 2001
+From: "Paul E. McKenney" <paulmck@kernel.org>
+Date: Tue, 13 Oct 2020 12:39:23 -0700
+Subject: rcu: Prevent lockdep-RCU splats on lock acquisition/release
+
+From: Paul E. McKenney <paulmck@kernel.org>
+
+commit 4d60b475f858ebdb06c1339f01a890f287b5e587 upstream.
+
+The rcu_cpu_starting() and rcu_report_dead() functions transition the
+current CPU between online and offline state from an RCU perspective.
+Unfortunately, this means that the rcu_cpu_starting() function's lock
+acquisition and the rcu_report_dead() function's lock releases happen
+while the CPU is offline from an RCU perspective, which can result
+in lockdep-RCU splats about using RCU from an offline CPU. And this
+situation can also result in too-short grace periods, especially in
+guest OSes that are subject to vCPU preemption.
+
+This commit therefore uses sequence-count-like synchronization to forgive
+use of RCU while RCU thinks a CPU is offline across the full extent of
+the rcu_cpu_starting() and rcu_report_dead() function's lock acquisitions
+and releases.
+
+One approach would have been to use the actual sequence-count primitives
+provided by the Linux kernel. Unfortunately, the resulting code looks
+completely broken and wrong, and is likely to result in patches that
+break RCU in an attempt to address this appearance of broken wrongness.
+Plus there is no net savings in lines of code, given the additional
+explicit memory barriers required.
+
+Therefore, this sequence count is instead implemented by a new ->ofl_seq
+field in the rcu_node structure. If this counter's value is an odd
+number, RCU forgives RCU read-side critical sections on other CPUs covered
+by the same rcu_node structure, even if those CPUs are offline from
+an RCU perspective. In addition, if a given leaf rcu_node structure's
+->ofl_seq counter value is an odd number, rcu_gp_init() delays starting
+the grace period until that counter value changes.
+
+[ paulmck: Apply Peter Zijlstra feedback. ]
+Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/rcu/tree.c | 21 ++++++++++++++++++++-
+ kernel/rcu/tree.h | 1 +
+ 2 files changed, 21 insertions(+), 1 deletion(-)
+
+--- a/kernel/rcu/tree.c
++++ b/kernel/rcu/tree.c
+@@ -1157,7 +1157,7 @@ bool rcu_lockdep_current_cpu_online(void
+ preempt_disable_notrace();
+ rdp = this_cpu_ptr(&rcu_data);
+ rnp = rdp->mynode;
+- if (rdp->grpmask & rcu_rnp_online_cpus(rnp))
++ if (rdp->grpmask & rcu_rnp_online_cpus(rnp) || READ_ONCE(rnp->ofl_seq) & 0x1)
+ ret = true;
+ preempt_enable_notrace();
+ return ret;
+@@ -1724,6 +1724,7 @@ static void rcu_strict_gp_boundary(void
+ */
+ static bool rcu_gp_init(void)
+ {
++ unsigned long firstseq;
+ unsigned long flags;
+ unsigned long oldmask;
+ unsigned long mask;
+@@ -1767,6 +1768,12 @@ static bool rcu_gp_init(void)
+ */
+ rcu_state.gp_state = RCU_GP_ONOFF;
+ rcu_for_each_leaf_node(rnp) {
++ smp_mb(); // Pair with barriers used when updating ->ofl_seq to odd values.
++ firstseq = READ_ONCE(rnp->ofl_seq);
++ if (firstseq & 0x1)
++ while (firstseq == READ_ONCE(rnp->ofl_seq))
++ schedule_timeout_idle(1); // Can't wake unless RCU is watching.
++ smp_mb(); // Pair with barriers used when updating ->ofl_seq to even values.
+ raw_spin_lock(&rcu_state.ofl_lock);
+ raw_spin_lock_irq_rcu_node(rnp);
+ if (rnp->qsmaskinit == rnp->qsmaskinitnext &&
+@@ -4107,6 +4114,9 @@ void rcu_cpu_starting(unsigned int cpu)
+
+ rnp = rdp->mynode;
+ mask = rdp->grpmask;
++ WRITE_ONCE(rnp->ofl_seq, rnp->ofl_seq + 1);
++ WARN_ON_ONCE(!(rnp->ofl_seq & 0x1));
++ smp_mb(); // Pair with rcu_gp_cleanup()'s ->ofl_seq barrier().
+ raw_spin_lock_irqsave_rcu_node(rnp, flags);
+ WRITE_ONCE(rnp->qsmaskinitnext, rnp->qsmaskinitnext | mask);
+ newcpu = !(rnp->expmaskinitnext & mask);
+@@ -4124,6 +4134,9 @@ void rcu_cpu_starting(unsigned int cpu)
+ } else {
+ raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
+ }
++ smp_mb(); // Pair with rcu_gp_cleanup()'s ->ofl_seq barrier().
++ WRITE_ONCE(rnp->ofl_seq, rnp->ofl_seq + 1);
++ WARN_ON_ONCE(rnp->ofl_seq & 0x1);
+ smp_mb(); /* Ensure RCU read-side usage follows above initialization. */
+ }
+
+@@ -4150,6 +4163,9 @@ void rcu_report_dead(unsigned int cpu)
+
+ /* Remove outgoing CPU from mask in the leaf rcu_node structure. */
+ mask = rdp->grpmask;
++ WRITE_ONCE(rnp->ofl_seq, rnp->ofl_seq + 1);
++ WARN_ON_ONCE(!(rnp->ofl_seq & 0x1));
++ smp_mb(); // Pair with rcu_gp_cleanup()'s ->ofl_seq barrier().
+ raw_spin_lock(&rcu_state.ofl_lock);
+ raw_spin_lock_irqsave_rcu_node(rnp, flags); /* Enforce GP memory-order guarantee. */
+ rdp->rcu_ofl_gp_seq = READ_ONCE(rcu_state.gp_seq);
+@@ -4162,6 +4178,9 @@ void rcu_report_dead(unsigned int cpu)
+ WRITE_ONCE(rnp->qsmaskinitnext, rnp->qsmaskinitnext & ~mask);
+ raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
+ raw_spin_unlock(&rcu_state.ofl_lock);
++ smp_mb(); // Pair with rcu_gp_cleanup()'s ->ofl_seq barrier().
++ WRITE_ONCE(rnp->ofl_seq, rnp->ofl_seq + 1);
++ WARN_ON_ONCE(rnp->ofl_seq & 0x1);
+
+ rdp->cpu_started = false;
+ }
+--- a/kernel/rcu/tree.h
++++ b/kernel/rcu/tree.h
+@@ -56,6 +56,7 @@ struct rcu_node {
+ /* Initialized from ->qsmaskinitnext at the */
+ /* beginning of each grace period. */
+ unsigned long qsmaskinitnext;
++ unsigned long ofl_seq; /* CPU-hotplug operation sequence count. */
+ /* Online CPUs for next grace period. */
+ unsigned long expmask; /* CPUs or groups that need to check in */
+ /* to allow the current expedited GP */
kcsan-instrument-memcpy-memset-memmove-with-newer-clang.patch
asoc-intel-sof-use-set_stream-instead-of-set_tdm_slots-for-hdaudio.patch
asoc-soundwire-dai-expand-stream-concept-beyond-soundwire.patch
+net-mlx5e-fix-nullptr-in-mlx5e_tc_add_fdb_flow.patch
+wifi-rtlwifi-remove-always-true-condition-pointed-out-by-gcc-12.patch
+wifi-rtlwifi-8192de-correct-checking-of-iqk-reload.patch
+torture-exclude-nohz-tick-stop-error-from-fatal-errors.patch
+rcu-prevent-lockdep-rcu-splats-on-lock-acquisition-release.patch
+net-af_packet-add-vlan-support-for-af_packet-sock_raw-gso.patch
+net-af_packet-make-sure-to-pull-mac-header.patch
--- /dev/null
+From 8d68e68a781db80606c8e8f3e4383be6974878fd Mon Sep 17 00:00:00 2001
+From: "Paul E. McKenney" <paulmck@kernel.org>
+Date: Wed, 16 Sep 2020 10:10:10 -0700
+Subject: torture: Exclude "NOHZ tick-stop error" from fatal errors
+
+From: Paul E. McKenney <paulmck@kernel.org>
+
+commit 8d68e68a781db80606c8e8f3e4383be6974878fd upstream.
+
+The "NOHZ tick-stop error: Non-RCU local softirq work is pending"
+warning happens frequently and appears to be irrelevant to the various
+torture tests. This commit therefore filters it out.
+
+If there proves to be a need to pay attention to it a later commit will
+add an "advice" category to allow the user to immediately see that
+although something happened, it was not an indictment of the system
+being tortured.
+
+Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/testing/selftests/rcutorture/bin/console-badness.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/tools/testing/selftests/rcutorture/bin/console-badness.sh
++++ b/tools/testing/selftests/rcutorture/bin/console-badness.sh
+@@ -13,4 +13,5 @@
+ egrep 'Badness|WARNING:|Warn|BUG|===========|Call Trace:|Oops:|detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state|rcu_.*kthread starved for|!!!' |
+ grep -v 'ODEBUG: ' |
+ grep -v 'This means that this is a DEBUG kernel and it is' |
+-grep -v 'Warning: unable to open an initial console'
++grep -v 'Warning: unable to open an initial console' |
++grep -v 'NOHZ tick-stop error: Non-RCU local softirq work is pending, handler'
--- /dev/null
+From 93fbc1ebd978cf408ef5765e9c1630fce9a8621b Mon Sep 17 00:00:00 2001
+From: Ping-Ke Shih <pkshih@realtek.com>
+Date: Mon, 1 Aug 2022 19:33:45 +0800
+Subject: wifi: rtlwifi: 8192de: correct checking of IQK reload
+
+From: Ping-Ke Shih <pkshih@realtek.com>
+
+commit 93fbc1ebd978cf408ef5765e9c1630fce9a8621b upstream.
+
+Since IQK could spend time, we make a cache of IQK result matrix that looks
+like iqk_matrix[channel_idx].val[x][y], and we can reload the matrix if we
+have made a cache. To determine a cache is made, we check
+iqk_matrix[channel_idx].val[0][0].
+
+The initial commit 7274a8c22980 ("rtlwifi: rtl8192de: Merge phy routines")
+make a mistake that checks incorrect iqk_matrix[channel_idx].val[0] that
+is always true, and this mistake is found by commit ee3db469dd31
+("wifi: rtlwifi: remove always-true condition pointed out by GCC 12"), so
+I recall the vendor driver to find fix and apply the correctness.
+
+Fixes: 7274a8c22980 ("rtlwifi: rtl8192de: Merge phy routines")
+Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/20220801113345.42016-1-pkshih@realtek.com
+Signed-off-by: Semyon Verchenko <semverchenko@factor-ts.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c
++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c
+@@ -2385,11 +2385,10 @@ void rtl92d_phy_reload_iqk_setting(struc
+ rtl_dbg(rtlpriv, COMP_SCAN, DBG_LOUD,
+ "Just Read IQK Matrix reg for channel:%d....\n",
+ channel);
+- _rtl92d_phy_patha_fill_iqk_matrix(hw, true,
+- rtlphy->iqk_matrix[
+- indexforchannel].value, 0,
+- (rtlphy->iqk_matrix[
+- indexforchannel].value[0][2] == 0));
++ if (rtlphy->iqk_matrix[indexforchannel].value[0][0] != 0)
++ _rtl92d_phy_patha_fill_iqk_matrix(hw, true,
++ rtlphy->iqk_matrix[indexforchannel].value, 0,
++ rtlphy->iqk_matrix[indexforchannel].value[0][2] == 0);
+ if (IS_92D_SINGLEPHY(rtlhal->version)) {
+ if ((rtlphy->iqk_matrix[
+ indexforchannel].value[0][4] != 0)
--- /dev/null
+From ee3db469dd317e82f57b13aa3bc61be5cb60c2b4 Mon Sep 17 00:00:00 2001
+From: Jakub Kicinski <kuba@kernel.org>
+Date: Fri, 20 May 2022 12:43:15 -0700
+Subject: wifi: rtlwifi: remove always-true condition pointed out by GCC 12
+
+From: Jakub Kicinski <kuba@kernel.org>
+
+commit ee3db469dd317e82f57b13aa3bc61be5cb60c2b4 upstream.
+
+The .value is a two-dim array, not a pointer.
+
+struct iqk_matrix_regs {
+ bool iqk_done;
+ long value[1][IQK_MATRIX_REG_NUM];
+};
+
+Acked-by: Kalle Valo <kvalo@kernel.org>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Semyon Verchenko <semverchenko@factor-ts.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c
++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c
+@@ -2385,10 +2385,7 @@ void rtl92d_phy_reload_iqk_setting(struc
+ rtl_dbg(rtlpriv, COMP_SCAN, DBG_LOUD,
+ "Just Read IQK Matrix reg for channel:%d....\n",
+ channel);
+- if ((rtlphy->iqk_matrix[indexforchannel].
+- value[0] != NULL)
+- /*&&(regea4 != 0) */)
+- _rtl92d_phy_patha_fill_iqk_matrix(hw, true,
++ _rtl92d_phy_patha_fill_iqk_matrix(hw, true,
+ rtlphy->iqk_matrix[
+ indexforchannel].value, 0,
+ (rtlphy->iqk_matrix[