All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ye Xiaolong <xiaolong.ye@intel.com>
To: Lu Qiuwen <luqiuwen@iie.ac.cn>
Cc: dev@dpdk.org, stable@dpdk.org, qi.z.zhang@intel.com,
	jeffrey.b.shaw@intel.com, Xiao Wang <xiao.w.wang@intel.com>
Subject: Re: [dpdk-dev] [PATCH v5] net/fm10k: fix fm10k stats crash in multi-process
Date: Wed, 21 Aug 2019 14:41:50 +0800	[thread overview]
Message-ID: <20190821064150.GB87622@intel.com> (raw)
In-Reply-To: <20190807082422.20328-1-luqiuwen@iie.ac.cn>

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.shaw@intel.com
>
>Signed-off-by: Lu Qiuwen <luqiuwen@iie.ac.cn>
>Acked-by: Xiao Wang <xiao.w.wang@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.ye@intel.com>

Applied to dpdk-next-net-intel with "Cc: stable@dpdk.org" added. 

Thanks,
Xiaolong

      reply	other threads:[~2019-08-21  6:43 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190807072053.21108-1-luqiuwen>
2019-08-07  8:24 ` [dpdk-dev] [PATCH v5] net/fm10k: fix fm10k stats crash in multi-process Lu Qiuwen
2019-08-21  6:41   ` Ye Xiaolong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190821064150.GB87622@intel.com \
    --to=xiaolong.ye@intel.com \
    --cc=dev@dpdk.org \
    --cc=jeffrey.b.shaw@intel.com \
    --cc=luqiuwen@iie.ac.cn \
    --cc=qi.z.zhang@intel.com \
    --cc=stable@dpdk.org \
    --cc=xiao.w.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.