At the moment of idpf_vport_queues_alloc() when an interface gets opened
for the first time, rxq->q_vector is NULL yet. But
idpf_xdp_rxq_assign_prog() dereferences it in case of enabled lockdep.

Just move idpf_xdp_copy_prog_to_rqs() from the abovementioned function
to idpf_rx_bufs_init_all(), where rxq->q_vector is always initialized
already.

Signed-off-by: Alexander Lobakin <aleksander.loba...@intel.com>
---
To Tony: this is a hotfix for

"idpf: implement XDP_SETUP_PROG in ndo_bpf for splitq"

where this call was introduced, please squash.
---
 drivers/net/ethernet/intel/idpf/idpf_txrx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c 
b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
index ed1736e52b1c..d50516abb7fb 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
@@ -832,6 +832,8 @@ int idpf_rx_bufs_init_all(struct idpf_vport *vport)
        bool split = idpf_is_queue_model_split(vport->rxq_model);
        int i, j, err;
 
+       idpf_xdp_copy_prog_to_rqs(vport, vport->xdp_prog);
+
        for (i = 0; i < vport->num_rxq_grp; i++) {
                struct idpf_rxq_group *rx_qgrp = &vport->rxq_grps[i];
                u32 truesize = 0;
@@ -1680,8 +1682,6 @@ int idpf_vport_queues_alloc(struct idpf_vport *vport)
        if (err)
                goto err_out;
 
-       idpf_xdp_copy_prog_to_rqs(vport, vport->xdp_prog);
-
        return 0;
 
 err_out:
-- 
2.50.0

Reply via email to