]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 18 Apr 2021 12:30:36 +0000 (14:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 18 Apr 2021 12:30:36 +0000 (14:30 +0200)
added patches:
i40e-fix-the-panic-when-running-bpf-in-xdpdrv-mode.patch

queue-4.4/i40e-fix-the-panic-when-running-bpf-in-xdpdrv-mode.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/i40e-fix-the-panic-when-running-bpf-in-xdpdrv-mode.patch b/queue-4.4/i40e-fix-the-panic-when-running-bpf-in-xdpdrv-mode.patch
new file mode 100644 (file)
index 0000000..781de38
--- /dev/null
@@ -0,0 +1,68 @@
+From 4e39a072a6a0fc422ba7da5e4336bdc295d70211 Mon Sep 17 00:00:00 2001
+From: Jason Xing <xingwanli@kuaishou.com>
+Date: Wed, 14 Apr 2021 10:34:28 +0800
+Subject: i40e: fix the panic when running bpf in xdpdrv mode
+
+From: Jason Xing <xingwanli@kuaishou.com>
+
+commit 4e39a072a6a0fc422ba7da5e4336bdc295d70211 upstream.
+
+Fix this panic by adding more rules to calculate the value of @rss_size_max
+which could be used in allocating the queues when bpf is loaded, which,
+however, could cause the failure and then trigger the NULL pointer of
+vsi->rx_rings. Prio to this fix, the machine doesn't care about how many
+cpus are online and then allocates 256 queues on the machine with 32 cpus
+online actually.
+
+Once the load of bpf begins, the log will go like this "failed to get
+tracking for 256 queues for VSI 0 err -12" and this "setup of MAIN VSI
+failed".
+
+Thus, I attach the key information of the crash-log here.
+
+BUG: unable to handle kernel NULL pointer dereference at
+0000000000000000
+RIP: 0010:i40e_xdp+0xdd/0x1b0 [i40e]
+Call Trace:
+[2160294.717292]  ? i40e_reconfig_rss_queues+0x170/0x170 [i40e]
+[2160294.717666]  dev_xdp_install+0x4f/0x70
+[2160294.718036]  dev_change_xdp_fd+0x11f/0x230
+[2160294.718380]  ? dev_disable_lro+0xe0/0xe0
+[2160294.718705]  do_setlink+0xac7/0xe70
+[2160294.719035]  ? __nla_parse+0xed/0x120
+[2160294.719365]  rtnl_newlink+0x73b/0x860
+
+Fixes: 41c445ff0f48 ("i40e: main driver core")
+Co-developed-by: Shujin Li <lishujin@kuaishou.com>
+Signed-off-by: Shujin Li <lishujin@kuaishou.com>
+Signed-off-by: Jason Xing <xingwanli@kuaishou.com>
+Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Acked-by: Jesper Dangaard Brouer <brouer@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/ethernet/intel/i40e/i40e_main.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
+@@ -8148,6 +8148,7 @@ static int i40e_sw_init(struct i40e_pf *
+ {
+       int err = 0;
+       int size;
++      u16 pow;
+       pf->msg_enable = netif_msg_init(I40E_DEFAULT_MSG_ENABLE,
+                               (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK));
+@@ -8182,6 +8183,11 @@ static int i40e_sw_init(struct i40e_pf *
+       pf->rss_table_size = pf->hw.func_caps.rss_table_size;
+       pf->rss_size_max = min_t(int, pf->rss_size_max,
+                                pf->hw.func_caps.num_tx_qp);
++
++      /* find the next higher power-of-2 of num cpus */
++      pow = roundup_pow_of_two(num_online_cpus());
++      pf->rss_size_max = min_t(int, pf->rss_size_max, pow);
++
+       if (pf->hw.func_caps.rss) {
+               pf->flags |= I40E_FLAG_RSS_ENABLED;
+               pf->rss_size = min_t(int, pf->rss_size_max, num_online_cpus());
index c712fa9e725279833311d64c7dad30692137f949..ae142697d47c6510323927c56e4b1ac4a15581f1 100644 (file)
@@ -19,3 +19,4 @@ net-tipc-fix-spelling-errors-in-net-tipc-module.patch
 input-i8042-fix-pegatron-c15b-id-entry.patch
 scsi-libsas-reset-num_scatter-if-libata-marks-qc-as-nodata.patch
 net-davicom-fix-regulator-not-turned-off-on-failed-probe.patch
+i40e-fix-the-panic-when-running-bpf-in-xdpdrv-mode.patch