On 08/07, Lu Qiuwen wrote: >The ops pointers in fm10k_stats_get() are set up from primary >process, when secondary process call these ops pointers, >a segment fault will happen. > >Fixes: 7223d200c227 ("fm10k: add base driver") >Cc: jeffrey.b.s...@intel.com > >Signed-off-by: Lu Qiuwen <luqiu...@iie.ac.cn> >Acked-by: Xiao Wang <xiao.w.w...@intel.com> >--- >V5 - fix grammar problems in the commit messages. >V4 - fix the misspelled word in the commit message. >V3 - add patch version, fixes info and make title shorter. >V2 - delete some empty lines after the function declaration. >--- > drivers/net/fm10k/base/fm10k_api.c | 20 ++++++++++++++++---- > drivers/net/fm10k/base/fm10k_pf.c | 4 ++-- > drivers/net/fm10k/base/fm10k_pf.h | 6 ++++++ > drivers/net/fm10k/base/fm10k_vf.c | 4 ++-- > drivers/net/fm10k/base/fm10k_vf.h | 5 +++++ > 5 files changed, 31 insertions(+), 8 deletions(-) > >diff --git a/drivers/net/fm10k/base/fm10k_api.c >b/drivers/net/fm10k/base/fm10k_api.c >index c49d20dfb..e7b2fe710 100644 >--- a/drivers/net/fm10k/base/fm10k_api.c >+++ b/drivers/net/fm10k/base/fm10k_api.c >@@ -234,8 +234,14 @@ s32 fm10k_read_mac_addr(struct fm10k_hw *hw) > * */ > void fm10k_update_hw_stats(struct fm10k_hw *hw, struct fm10k_hw_stats *stats) > { >- if (hw->mac.ops.update_hw_stats) >- hw->mac.ops.update_hw_stats(hw, stats); >+ switch (hw->mac.type) { >+ case fm10k_mac_pf: >+ return fm10k_update_hw_stats_pf(hw, stats); >+ case fm10k_mac_vf: >+ return fm10k_update_hw_stats_vf(hw, stats); >+ default: >+ break; >+ } > } > > /** >@@ -246,8 +252,14 @@ void fm10k_update_hw_stats(struct fm10k_hw *hw, struct >fm10k_hw_stats *stats) > * */ > void fm10k_rebind_hw_stats(struct fm10k_hw *hw, struct fm10k_hw_stats *stats) > { >- if (hw->mac.ops.rebind_hw_stats) >- hw->mac.ops.rebind_hw_stats(hw, stats); >+ switch (hw->mac.type) { >+ case fm10k_mac_pf: >+ return fm10k_rebind_hw_stats_pf(hw, stats); >+ case fm10k_mac_vf: >+ return fm10k_rebind_hw_stats_vf(hw, stats); >+ default: >+ break; >+ } > } > > /** >diff --git a/drivers/net/fm10k/base/fm10k_pf.c >b/drivers/net/fm10k/base/fm10k_pf.c >index db5f4912f..f5b6a9e2e 100644 >--- a/drivers/net/fm10k/base/fm10k_pf.c >+++ b/drivers/net/fm10k/base/fm10k_pf.c >@@ -1511,7 +1511,7 @@ const struct fm10k_msg_data fm10k_iov_msg_data_pf[] = { > * This function collects and aggregates global and per queue hardware > * statistics. > **/ >-STATIC void fm10k_update_hw_stats_pf(struct fm10k_hw *hw, >+void fm10k_update_hw_stats_pf(struct fm10k_hw *hw, > struct fm10k_hw_stats *stats) > { > u32 timeout, ur, ca, um, xec, vlan_drop, loopback_drop, nodesc_drop; >@@ -1584,7 +1584,7 @@ STATIC void fm10k_update_hw_stats_pf(struct fm10k_hw *hw, > * This function resets the base for global and per queue hardware > * statistics. > **/ >-STATIC void fm10k_rebind_hw_stats_pf(struct fm10k_hw *hw, >+void fm10k_rebind_hw_stats_pf(struct fm10k_hw *hw, > struct fm10k_hw_stats *stats) > { > DEBUGFUNC("fm10k_rebind_hw_stats_pf"); >diff --git a/drivers/net/fm10k/base/fm10k_pf.h >b/drivers/net/fm10k/base/fm10k_pf.h >index ca125c273..2c22bdd02 100644 >--- a/drivers/net/fm10k/base/fm10k_pf.h >+++ b/drivers/net/fm10k/base/fm10k_pf.h >@@ -184,4 +184,10 @@ extern const struct fm10k_msg_data >fm10k_iov_msg_data_pf[]; > #endif > > s32 fm10k_init_ops_pf(struct fm10k_hw *hw); >+ >+void fm10k_update_hw_stats_pf(struct fm10k_hw *hw, >+ struct fm10k_hw_stats *stats); >+ >+void fm10k_rebind_hw_stats_pf(struct fm10k_hw *hw, >+ struct fm10k_hw_stats *stats); > #endif /* _FM10K_PF_H */ >diff --git a/drivers/net/fm10k/base/fm10k_vf.c >b/drivers/net/fm10k/base/fm10k_vf.c >index bd449773a..2f4b5f5d2 100644 >--- a/drivers/net/fm10k/base/fm10k_vf.c >+++ b/drivers/net/fm10k/base/fm10k_vf.c >@@ -526,7 +526,7 @@ const struct fm10k_tlv_attr fm10k_1588_msg_attr[] = { > * > * This function collects and aggregates per queue hardware statistics. > **/ >-STATIC void fm10k_update_hw_stats_vf(struct fm10k_hw *hw, >+void fm10k_update_hw_stats_vf(struct fm10k_hw *hw, > struct fm10k_hw_stats *stats) > { > DEBUGFUNC("fm10k_update_hw_stats_vf"); >@@ -541,7 +541,7 @@ STATIC void fm10k_update_hw_stats_vf(struct fm10k_hw *hw, > * > * This function resets the base for queue hardware statistics. > **/ >-STATIC void fm10k_rebind_hw_stats_vf(struct fm10k_hw *hw, >+void fm10k_rebind_hw_stats_vf(struct fm10k_hw *hw, > struct fm10k_hw_stats *stats) > { > DEBUGFUNC("fm10k_rebind_hw_stats_vf"); >diff --git a/drivers/net/fm10k/base/fm10k_vf.h >b/drivers/net/fm10k/base/fm10k_vf.h >index 116c56fcc..d4edd330e 100644 >--- a/drivers/net/fm10k/base/fm10k_vf.h >+++ b/drivers/net/fm10k/base/fm10k_vf.h >@@ -89,4 +89,9 @@ extern const struct fm10k_tlv_attr fm10k_1588_msg_attr[]; > FM10K_MSG_HANDLER(FM10K_VF_MSG_ID_1588, fm10k_1588_msg_attr, func) > > s32 fm10k_init_ops_vf(struct fm10k_hw *hw); >+ >+void fm10k_update_hw_stats_vf(struct fm10k_hw *hw, >+ struct fm10k_hw_stats *stats); >+void fm10k_rebind_hw_stats_vf(struct fm10k_hw *hw, >+ struct fm10k_hw_stats *stats); > #endif /* _FM10K_VF_H */ >-- >2.20.1.windows.1 >
Reviewed-by: Xiaolong Ye <xiaolong...@intel.com> Applied to dpdk-next-net-intel with "Cc: sta...@dpdk.org" added. Thanks, Xiaolong