From: Wang Xiao W Date: Thu, 10 Sep 2015 04:38:20 +0000 (+0800) Subject: fm10k/base: fix VF queues counting X-Git-Tag: spdx-start~8404 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;ds=sidebyside;h=46e018c50155d30c766d95e9d5016f72f8fa7c92;p=dpdk.git fm10k/base: fix VF queues counting During initialization, the VF counts its rings by walking the TQDLOC registers. This only works if the TQMAP/RQMAP registers are set to map the out-of-bound rings to the first one, so the VF driver can detect when it has run out of queues cleanly. Update the PF to reset the empty TQMAP/RQMAP registers post-VFLR to prevent innocent VF drivers from triggering malicious events. Signed-off-by: Wang Xiao W --- diff --git a/drivers/net/fm10k/base/fm10k_pf.c b/drivers/net/fm10k/base/fm10k_pf.c index 9ed47a9ea4..6c7921ee95 100644 --- a/drivers/net/fm10k/base/fm10k_pf.c +++ b/drivers/net/fm10k/base/fm10k_pf.c @@ -1102,6 +1102,12 @@ STATIC s32 fm10k_iov_reset_resources_pf(struct fm10k_hw *hw, FM10K_WRITE_REG(hw, FM10K_RQMAP(qmap_idx + i), vf_q_idx + i); } + /* repeat the first ring for all of the remaining VF rings */ + for (i = queues_per_pool; i < qmap_stride; i++) { + FM10K_WRITE_REG(hw, FM10K_TQMAP(qmap_idx + i), vf_q_idx); + FM10K_WRITE_REG(hw, FM10K_RQMAP(qmap_idx + i), vf_q_idx); + } + return FM10K_SUCCESS; }