From 12cae596e9fded94a561ebf5bcc55f7b3f873fba Mon Sep 17 00:00:00 2001 From: chenjiji09 Date: Tue, 31 Jan 2023 14:35:47 +0800 Subject: [PATCH] net/hns3: fix inaccurate RTC time to read The sequence of reading current RTC time register doesn't meet the hardware requirements, which causes this time obtained is the one before modifying RTC time. --- 0216-igb-uio-fix-build-with-Linux-6.1.patch | 100 ------------------ ...hns3-fix-inaccurate-RTC-time-to-read.patch | 53 ++++++++++ dpdk.spec | 6 +- 3 files changed, 58 insertions(+), 101 deletions(-) delete mode 100644 0216-igb-uio-fix-build-with-Linux-6.1.patch create mode 100644 0220-net-hns3-fix-inaccurate-RTC-time-to-read.patch diff --git a/0216-igb-uio-fix-build-with-Linux-6.1.patch b/0216-igb-uio-fix-build-with-Linux-6.1.patch deleted file mode 100644 index 04ef043..0000000 --- a/0216-igb-uio-fix-build-with-Linux-6.1.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 9312bf5b08a1f4532d7aeb702fd59f794cca9044 Mon Sep 17 00:00:00 2001 -From: jiangheng -Date: Wed, 18 Jan 2023 19:29:17 +0800 -Subject: [PATCH] igb_uio: fix build whit Linux 6.1 - ---- - kernel/linux/igb_uio/igb_uio.c | 10 +++++----- - 3 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/kernel/linux/igb_uio/igb_uio.c b/kernel/linux/igb_uio/igb_uio.c -index ea439d1..311cc87 100644 ---- a/kernel/linux/igb_uio/igb_uio.c -+++ b/kernel/linux/igb_uio/igb_uio.c -@@ -250,7 +250,7 @@ igbuio_pci_enable_interrupts(struct rte_uio_pci_dev *udev) - } - #endif - -- /* falls through - to MSI */ -+ /* fall through */ - case RTE_INTR_MODE_MSI: - #ifndef HAVE_ALLOC_IRQ_VECTORS - if (pci_enable_msi(udev->pdev) == 0) { -@@ -269,7 +269,7 @@ igbuio_pci_enable_interrupts(struct rte_uio_pci_dev *udev) - break; - } - #endif -- /* falls through - to INTX */ -+ /* fall through */ - case RTE_INTR_MODE_LEGACY: - if (pci_intx_mask_supported(udev->pdev)) { - dev_dbg(&udev->pdev->dev, "using INTX"); -@@ -279,7 +279,7 @@ igbuio_pci_enable_interrupts(struct rte_uio_pci_dev *udev) - break; - } - dev_notice(&udev->pdev->dev, "PCI INTX mask not supported\n"); -- /* falls through - to no IRQ */ -+ /* fall through */ - case RTE_INTR_MODE_NONE: - udev->mode = RTE_INTR_MODE_NONE; - udev->info.irq = UIO_IRQ_NONE; -@@ -512,13 +512,13 @@ igbuio_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) - goto fail_release_iomem; - - /* set 64-bit DMA mask */ -- err = pci_set_dma_mask(dev, DMA_BIT_MASK(64)); -+ err = dma_set_mask_and_coherent(&dev->dev, DMA_BIT_MASK(64)); - if (err != 0) { - dev_err(&dev->dev, "Cannot set DMA mask\n"); - goto fail_release_iomem; - } - -- err = pci_set_consistent_dma_mask(dev, DMA_BIT_MASK(64)); -+ err = dma_set_mask_and_coherent(&dev->dev, DMA_BIT_MASK(64)); - if (err != 0) { - dev_err(&dev->dev, "Cannot set consistent DMA mask\n"); - goto fail_release_iomem; -diff --git a/kernel/linux/kni/kni_misc.c b/kernel/linux/kni/kni_misc.c -index ad1582d..c5a20e7 100644 ---- a/kernel/linux/kni/kni_misc.c -+++ b/kernel/linux/kni/kni_misc.c -@@ -405,10 +405,10 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, - - /* if user has provided a valid mac address */ - if (is_valid_ether_addr(dev_info.mac_addr)) -- memcpy(net_dev->dev_addr, dev_info.mac_addr, ETH_ALEN); -+ memcpy((void *)net_dev->dev_addr, (void *)dev_info.mac_addr, ETH_ALEN); - else - /* Generate random MAC address. */ -- eth_random_addr(net_dev->dev_addr); -+ eth_random_addr((u8 *)net_dev->dev_addr); - - if (dev_info.mtu) - net_dev->mtu = dev_info.mtu; -diff --git a/kernel/linux/kni/kni_net.c b/kernel/linux/kni/kni_net.c -index 29e5b9e..32048e6 100644 ---- a/kernel/linux/kni/kni_net.c -+++ b/kernel/linux/kni/kni_net.c -@@ -441,7 +441,7 @@ kni_net_rx_normal(struct kni_dev *kni) - skb->ip_summed = CHECKSUM_UNNECESSARY; - - /* Call netif interface */ -- netif_rx_ni(skb); -+ netif_rx(skb); - - /* Update statistics */ - dev->stats.rx_bytes += len; -@@ -778,8 +778,8 @@ kni_net_set_mac(struct net_device *netdev, void *p) - if (!is_valid_ether_addr((unsigned char *)(addr->sa_data))) - return -EADDRNOTAVAIL; - -- memcpy(req.mac_addr, addr->sa_data, netdev->addr_len); -- memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); -+ memcpy((void *)req.mac_addr, (void *)addr->sa_data, netdev->addr_len); -+ memcpy((void *)netdev->dev_addr, (void *)addr->sa_data, netdev->addr_len); - - ret = kni_net_process_request(netdev, &req); - --- -2.23.0 - diff --git a/0220-net-hns3-fix-inaccurate-RTC-time-to-read.patch b/0220-net-hns3-fix-inaccurate-RTC-time-to-read.patch new file mode 100644 index 0000000..59a0c08 --- /dev/null +++ b/0220-net-hns3-fix-inaccurate-RTC-time-to-read.patch @@ -0,0 +1,53 @@ +From 3cd01cd12d4987b76be0ff1b25bc21a558aab6f1 Mon Sep 17 00:00:00 2001 +From: Huisong Li +Date: Mon, 9 Jan 2023 16:23:44 +0800 +Subject: net/hns3: fix inaccurate RTC time to read + +[ upstream commit 4243282181f38d387188af5fd38a5428864a94a2 ] + +The sequence of reading current RTC time register doesn't meet +the hardware requirements, which causes this time obtained is +the one before modifying RTC time. + +Fixes: 38b539d96eb6 ("net/hns3: support IEEE 1588 PTP") +Cc: stable@dpdk.org + +Signed-off-by: Huisong Li +Acked-by: Dongdong Liu +--- + drivers/net/hns3/hns3_ptp.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/hns3/hns3_ptp.c b/drivers/net/hns3/hns3_ptp.c +index 6bbd85ba23..db3c007b12 100644 +--- a/drivers/net/hns3/hns3_ptp.c ++++ b/drivers/net/hns3/hns3_ptp.c +@@ -216,17 +216,21 @@ hns3_timesync_read_tx_timestamp(struct rte_eth_dev *dev, + int + hns3_timesync_read_time(struct rte_eth_dev *dev, struct timespec *ts) + { ++#define HNS3_PTP_SEC_H_OFFSET 32 ++#define HNS3_PTP_SEC_H_MASK 0xFFFF ++ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); ++ uint32_t sec_hi, sec_lo; + uint64_t ns, sec; + + if (!hns3_dev_get_support(hw, PTP)) + return -ENOTSUP; + +- sec = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_L); +- sec |= (uint64_t)(hns3_read_dev(hw, HNS3_CURR_TIME_OUT_H) & 0xFFFF) +- << 32; +- + ns = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_NS); ++ sec_hi = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_H) & HNS3_PTP_SEC_H_MASK; ++ sec_lo = hns3_read_dev(hw, HNS3_CURR_TIME_OUT_L); ++ sec = ((uint64_t)sec_hi << HNS3_PTP_SEC_H_OFFSET) | sec_lo; ++ + ns += sec * NSEC_PER_SEC; + *ts = rte_ns_to_timespec(ns); + +-- +2.23.0 + diff --git a/dpdk.spec b/dpdk.spec index 30ede1c..649f53e 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -1,6 +1,6 @@ Name: dpdk Version: 21.11 -Release: 28 +Release: 29 Packager: packaging@6wind.com URL: http://dpdk.org %global source_version 21.11 @@ -237,6 +237,7 @@ Patch9216: 0216-kni-use-dedicated-function-to-set-random-MAC-address.patch Patch9217: 0217-kni-use-dedicated-function-to-set-MAC-address.patch Patch9218: 0218-linux-igb_uio-fix-build-for-switch-fall-through.patch Patch9219: 0219-linux-igb_uio-fix-build-with-liux-5.18.patch +Patch9220: 0220-net-hns3-fix-inaccurate-RTC-time-to-read.patch Summary: Data Plane Development Kit core Group: System Environment/Libraries @@ -379,6 +380,9 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko /usr/sbin/depmod %changelog +* Tue Jan 31 2023 chenjiji - 21.11-29 +- net/hns3: fix inaccurate RTC time to read + * Wed Jan 18 2023 jiangheng - 21.11-28 - fix build failed due to kernel upgrate to 6.1 -- Gitee