dpdk/0300-net-hns3-fix-RTC-time-on-initialization.patch
chenjiji09 6112eef767 net/hns3: fix Rx ring mbuf leakage
Sync some patchs from upstreaming for hns3 pmd and modifies
are as follow:
1. fix RTC time after reset
2. fix Rx ring mbuf leakage at reset process
3. fix uninitialized variable
4. modify the code that violates the coding standards

(cherry picked from commit f98940e02a12dc752a60e786009ee44cb6b32132)
2023-06-06 21:42:16 +08:00

81 lines
2.3 KiB
Diff

From 6896b9dc63327691df470cc7b1d9bac8e8c673fe Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Fri, 2 Jun 2023 19:41:55 +0800
Subject: net/hns3: fix RTC time on initialization
[ upstream commit 27f64ddb711901d06bbe337ab714989e799a36d0 ]
Driver doesn't initialize RTC time during probe phase, which
lead to an inaccurate time.
Fixes: 38b539d96eb6 ("net/hns3: support IEEE 1588 PTP")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
---
drivers/net/hns3/hns3_ptp.c | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/drivers/net/hns3/hns3_ptp.c b/drivers/net/hns3/hns3_ptp.c
index db3c007b12..1e27e4aeca 100644
--- a/drivers/net/hns3/hns3_ptp.c
+++ b/drivers/net/hns3/hns3_ptp.c
@@ -56,9 +56,23 @@ hns3_ptp_int_en(struct hns3_hw *hw, bool en)
return ret;
}
+static void
+hns3_ptp_timesync_write_time(struct hns3_hw *hw, const struct timespec *ts)
+{
+ uint64_t sec = ts->tv_sec;
+ uint64_t ns = ts->tv_nsec;
+
+ /* Set the timecounters to a new value. */
+ hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_H, upper_32_bits(sec));
+ hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_M, lower_32_bits(sec));
+ hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_L, lower_32_bits(ns));
+ hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_RDY, 1);
+}
+
int
hns3_ptp_init(struct hns3_hw *hw)
{
+ struct timespec sys_time;
int ret;
if (!hns3_dev_get_support(hw, PTP))
@@ -71,6 +85,10 @@ hns3_ptp_init(struct hns3_hw *hw)
/* Start PTP timer */
hns3_write_dev(hw, HNS3_CFG_TIME_CYC_EN, 1);
+ /* Initializing the RTC. */
+ clock_gettime(CLOCK_REALTIME, &sys_time);
+ hns3_ptp_timesync_write_time(hw, &sys_time);
+
return 0;
}
@@ -241,17 +259,11 @@ int
hns3_timesync_write_time(struct rte_eth_dev *dev, const struct timespec *ts)
{
struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- uint64_t sec = ts->tv_sec;
- uint64_t ns = ts->tv_nsec;
if (!hns3_dev_get_support(hw, PTP))
return -ENOTSUP;
- /* Set the timecounters to a new value. */
- hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_H, upper_32_bits(sec));
- hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_M, lower_32_bits(sec));
- hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_L, lower_32_bits(ns));
- hns3_write_dev(hw, HNS3_CFG_TIME_SYNC_RDY, 1);
+ hns3_ptp_timesync_write_time(hw, ts);
return 0;
}
--
2.23.0