* [dpdk-dev] [PATCH v3] net/fm10k: fix fm10k stats crash in multi-process [not found] <b062a6a6-907a-4186-9951-08058ece5b69> @ 2019-08-07 7:15 ` Lu Qiuwen 2019-08-07 7:20 ` [dpdk-dev] [PATCH v4] " Lu Qiuwen 1 sibling, 0 replies; 3+ messages in thread From: Lu Qiuwen @ 2019-08-07 7:15 UTC (permalink / raw) To: dev; +Cc: jeffrey.b.shaw, Xiao Wang The ops pointers in fm10k_stats_get() is setup from primary process, when secondary process call these function pointers, a segment fault will happend. v2 - delete some empty lines after the function declaration. v3 - add patch version, fixes and make title shorter. Fixes: 7223d200c227 ("fm10k: add base driver") Cc: jeffrey.b.shaw@intel.com Signed-off-by: Lu Qiuwen <luqiuwen@iie.ac.cn> Acked-by: Xiao Wang <xiao.w.wang@intel.com> --- 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [PATCH v4] net/fm10k: fix fm10k stats crash in multi-process [not found] <b062a6a6-907a-4186-9951-08058ece5b69> 2019-08-07 7:15 ` [dpdk-dev] [PATCH v3] net/fm10k: fix fm10k stats crash in multi-process Lu Qiuwen @ 2019-08-07 7:20 ` Lu Qiuwen 2019-08-07 7:36 ` Wang, Xiao W 1 sibling, 1 reply; 3+ messages in thread From: Lu Qiuwen @ 2019-08-07 7:20 UTC (permalink / raw) To: dev; +Cc: jeffrey.b.shaw, Xiao Wang The ops pointers in fm10k_stats_get() is setup from primary process, when secondary process call these function pointers, a segment fault will happened. v2 - delete some empty lines after the function declaration. v3 - add patch version, fixes and make title shorter. v4 - fix the misspelled word in the commit message. Fixes: 7223d200c227 ("fm10k: add base driver") Cc: jeffrey.b.shaw@intel.com Signed-off-by: Lu Qiuwen <luqiuwen@iie.ac.cn> Acked-by: Xiao Wang <xiao.w.wang@intel.com> --- 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH v4] net/fm10k: fix fm10k stats crash in multi-process 2019-08-07 7:20 ` [dpdk-dev] [PATCH v4] " Lu Qiuwen @ 2019-08-07 7:36 ` Wang, Xiao W 0 siblings, 0 replies; 3+ messages in thread From: Wang, Xiao W @ 2019-08-07 7:36 UTC (permalink / raw) To: Lu Qiuwen, dev; +Cc: Shaw, Jeffrey B Hi Qiuwen, > -----Original Message----- > From: Lu Qiuwen [mailto:luqiuwen@iie.ac.cn] > Sent: Wednesday, August 7, 2019 3:21 PM > To: dev@dpdk.org > Cc: Shaw, Jeffrey B <jeffrey.b.shaw@intel.com>; Wang, Xiao W > <xiao.w.wang@intel.com> > Subject: [PATCH v4] net/fm10k: fix fm10k stats crash in multi-process > > The ops pointers in fm10k_stats_get() is setup from primary process, s/setup/set up s/is/are > when secondary process call these function pointers, a segment fault > will happened. s/happened/happen Please check the words carefully :) > > v2 - delete some empty lines after the function declaration. > v3 - add patch version, fixes and make title shorter. > v4 - fix the misspelled word in the commit message. Do not put these change log into commit log directly. Make it like below, or use a cover-letter. Signed-off-by: Lu Qiuwen <luqiuwen@iie.ac.cn> Acked-by: Xiao Wang <xiao.w.wang@intel.com> --- V4: - *.. V3: - *.. V2: - *.. --- drivers/net/fm10k/base/fm10k_api.c | 20 ++++++++++++++++---- > > Fixes: 7223d200c227 ("fm10k: add base driver") Cc: stable@dpdk.com, as this is a fix patch. Also, cc Qi Zhang who is also the maintainer. -Xiao > Cc: jeffrey.b.shaw@intel.com > > Signed-off-by: Lu Qiuwen <luqiuwen@iie.ac.cn> > Acked-by: Xiao Wang <xiao.w.wang@intel.com> > --- > 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-08-07 7:36 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <b062a6a6-907a-4186-9951-08058ece5b69> 2019-08-07 7:15 ` [dpdk-dev] [PATCH v3] net/fm10k: fix fm10k stats crash in multi-process Lu Qiuwen 2019-08-07 7:20 ` [dpdk-dev] [PATCH v4] " Lu Qiuwen 2019-08-07 7:36 ` Wang, Xiao W
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).