Hi, beilei > -----Original Message----- > From: Xing, Beilei <beilei.x...@intel.com> > Sent: Thursday, November 19, 2020 2:16 PM > To: dev@dpdk.org > Cc: Guo, Jia <jia....@intel.com>; Xing, Beilei <beilei.x...@intel.com>; > sta...@dpdk.org > Subject: [PATCH] net/i40e: fix conflict with multi-driver >
Seems that this patch both handle multi-driver and none multi-driver. I am not sure if it need to rename to a better name, you choice. " net/i40e: fix global register recovery"? > From: Beilei Xing <beilei.x...@intel.com> > > PMD configures the global register I40E_GLINT_CTL during device > initialization to work around the Rx write back issue. But when a device is > bound from DPDK to kernel, the global register is not recovered to the > original state, it will cause kernel driver performance drop issue. > This patch fixes this issue. > > Fixes: be6c228d4da3 ("i40e: support Rx interrupt") If the issue is root cause that the miss-pair automask configure and automask clear, do you think it will be better to add one more fixes tag as below? Fixes: 4ab831449a1c ("net/i40e: fix interrupt conflict with multi-driver ") > Cc: sta...@dpdk.org > > Signed-off-by: Beilei Xing <beilei.x...@intel.com> > --- > drivers/net/i40e/i40e_ethdev.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index f54769c29d..2cb18ecc03 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -763,6 +763,21 @@ static inline void i40e_config_automask(struct > i40e_pf *pf) > I40E_WRITE_REG(hw, I40E_GLINT_CTL, val); } > > +static inline void i40e_clear_automask(struct i40e_pf *pf) { > + struct i40e_hw *hw = I40E_PF_TO_HW(pf); > + uint32_t val; > + > + val = I40E_READ_REG(hw, I40E_GLINT_CTL); > + val &= ~(I40E_GLINT_CTL_DIS_AUTOMASK_PF0_MASK | > + I40E_GLINT_CTL_DIS_AUTOMASK_VF0_MASK); > + > + if (!pf->support_multi_driver) > + val &= ~I40E_GLINT_CTL_DIS_AUTOMASK_N_MASK; > + > + I40E_WRITE_REG(hw, I40E_GLINT_CTL, val); } > + > #define I40E_FLOW_CONTROL_ETHERTYPE 0x8808 > > /* > @@ -2741,6 +2756,8 @@ i40e_dev_close(struct rte_eth_dev *dev) > /* Remove all Traffic Manager configuration */ > i40e_tm_conf_uninit(dev); > > + i40e_clear_automask(pf); > + > hw->adapter_closed = 1; > return ret; > } > -- > 2.26.2