From: Lu Qiuwen <luqiuwen@iie.ac.cn>
To: stable@dpdk.org; dev@dpdk.org
Cc: qi.z.zhang@intel.com; xiao.w.wang@intel.com; yskoh@mellanox.com
Subject: [dpdk-dev] [v2] net/fm10k: fix segment fault at calling fm10k_stats_get()
Date: Tue, 6 Aug 2019 14:34:19 +0800 [thread overview]
Message-ID: <b062a6a6-907a-4186-9951-08058ece5b69@DESKTOP-S1AP1MR.local> (raw)
From 5658ee7d69023cc4b22315cd9f8e10a832aafdb0 Mon Sep 17 00:00:00 2001
From: Lu Qiuwen <luqiuwen@iie.ac.cn>
Date: Sat, 15 Jun 2019 14:28:01 +0800
Subject: [PATCH] net/fm10k: fix segment fault at calling fm10k_stats_get()
from secondary process.
The function pointers in fm10k_stats_get() which setup from primary process, when secondary process call these function pointers, a segment fault will happend.
Signed-off-by: Lu Qiuwen <luqiuwen@iie.ac.cn>
---
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
next reply other threads:[~2019-08-06 7:41 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-06 6:34 Lu Qiuwen [this message]
2019-08-07 2:20 ` Wang, Xiao W
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=b062a6a6-907a-4186-9951-08058ece5b69@DESKTOP-S1AP1MR.local \
--to=luqiuwen@iie.ac.cn \
--cc=qi.z.zhang@intel.com \
--cc=stable@dpdk.org \
/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 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).