From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5D664468C4 for ; Tue, 10 Jun 2025 11:27:08 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5784642E62; Tue, 10 Jun 2025 11:27:08 +0200 (CEST) Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) by mails.dpdk.org (Postfix) with ESMTP id B0E6042E62 for ; Tue, 10 Jun 2025 11:27:06 +0200 (CEST) X-QQ-mid: zesmtpsz7t1749547624tdecbbb11 X-QQ-Originating-IP: hufKMdrlTTDDBGQWYEoqJU8cg4b8idRbYQKO2zx6xWM= Received: from lap-jiawenwu.trustnetic.com ( [36.20.60.58]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 10 Jun 2025 17:27:03 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 13313767156476626185 EX-QQ-RecipientCnt: 3 From: Jiawen Wu To: mengyuanlou@net-swift.com Cc: Jiawen Wu , stable@dpdk.org Subject: [PATCH 10/12] net/txgbe: restrict VLAN strip configuration on VF Date: Tue, 10 Jun 2025 17:26:37 +0800 Message-Id: <20250610092639.41216-11-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20250610092639.41216-1-jiawenwu@trustnetic.com> References: <20250610092639.41216-1-jiawenwu@trustnetic.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:trustnetic.com:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: M8h+jbcLTiI4Z32jhCqbSIDrcfEtx+32bbbrmf4mPVm/lcDxiPr/0FJr 9da2XdDCXPr1q2QBVTmCSz3LWt7qIA/D5L+IGdMdXjZ2J1WVMKphFzpNNj6t+bH34hgyc+j VXCItEsiHr8jGYSd/w8Yhb1NoSmm/Yd0Azd/JhY0pRXeYfK69f1f9Sn09rsbD5YRg4Uyvi/ x40mM50UyJTpKbnDThcFyr6EO1MNZCmZ4fdh7ydfDvYM+GkdHsu1kEK4bRK21Yg1j7CekjL MT0G4bZeofNbChv95nmLo5YsTE4tEKhuuh8n81rRLf9apMJdXHMyjPkNxZpbdh9yfrh1QGC OTtCXRKJ98bnqWjyMEYmmxhLHNDXW1W5VUl6h2rBn/KYHesZsYjBRAxktA90L+NVfcilGtX qJLmfC+Yt36No97T+j+ORJJ4Z8pd34fO/VU/Pg5pCekKXPkDNWaVVxK2WhxRGm0PLMLWI69 xz8aj/88J076UPvqYQH5O9bjVbKEszlP3r3M3AHVlWXPBbW5FTDFCxyjMSu+1I6eft2jTOi OkuEB6cenr95Mg1E9uONHX4bSuzRfEPWB1qGmDBoYuKNVeZsbsu0djpvP7f3aMDBGcrubOy dU5TECvNvsn2MI+/+PlQga+SNJR5UCf80LqthxVclMTQ9jUN2Ri5EgStSJFQb03yUwUpo1H KFVSMCGa085s2WITf6VJQOMaTI5PS4QZ/pR1vz55vfeVEGtqJoX/Jo1no1a4SL1Mw1y64tv kXPiWI1OldCQ/U5tR+92SNI9DNR09rEz/KQjChIvfEuM716jUL/4JhDb4ThJeZt1AtztMez 4ewPMS5fhWM16I2ziYi5bY9zY0gQPIR87R0tUMKkXpq0U7xJtGlAAaBppUdVBY2lYk3dQEO WBvPR+H2t8MTyCdCSws3Sjzv0100DMOZ4mT6YMeM9rpnw4hFGGQnCQabp9+h1fyHo9ceNH4 lFAVrMfPA4K3c9v6F/ipvJVNLn7frVWcfZiIfxF8v8HkocVLvsczH/f/6UVqrWLb4qIcu0Z BDlr0NmGNZWTPmUIKGvjijt5hebg74VzG8K+KidKPMUF/c7+GxzYgtLqsxNvi+iRGg+gQcM +BwBUXwHf52F+uo35YKObys72B3qOhsRLiNwD5yYQy1gRE4Th5Cul0/DpBv7Ba5Cg== X-QQ-XMRINFO: M/715EihBoGSf6IYSX1iLFg= X-QQ-RECHKSPAM: 0 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Fix the same issue as PF in commit 66364efcf958 ("net/txgbe: restrict configuration of VLAN strip offload"). There is a hardware limitation that Rx ring config register is not writable when Rx ring is enabled, i.e. the TXGBE_RXCFG_ENA bit is set. But disabling the ring when there is traffic will cause ring get stuck. So restrict the configuration of VLAN strip offload only if device is started. Fixes: aa1ae7941e71 ("net/txgbe: support VF VLAN") Cc: stable@dpdk.org Signed-off-by: Jiawen Wu --- drivers/net/txgbe/txgbe_ethdev_vf.c | 31 +++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c index c0d8aa15b2..847febf8c3 100644 --- a/drivers/net/txgbe/txgbe_ethdev_vf.c +++ b/drivers/net/txgbe/txgbe_ethdev_vf.c @@ -935,7 +935,7 @@ txgbevf_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) } static void -txgbevf_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) +txgbevf_vlan_strip_q_set(struct rte_eth_dev *dev, uint16_t queue, int on) { struct txgbe_hw *hw = TXGBE_DEV_HW(dev); uint32_t ctrl; @@ -946,20 +946,28 @@ txgbevf_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) return; ctrl = rd32(hw, TXGBE_RXCFG(queue)); - txgbe_dev_save_rx_queue(hw, queue); if (on) ctrl |= TXGBE_RXCFG_VLAN; else ctrl &= ~TXGBE_RXCFG_VLAN; - wr32(hw, TXGBE_RXCFG(queue), 0); - msec_delay(100); - txgbe_dev_store_rx_queue(hw, queue); - wr32m(hw, TXGBE_RXCFG(queue), - TXGBE_RXCFG_VLAN | TXGBE_RXCFG_ENA, ctrl); + wr32(hw, TXGBE_RXCFG(queue), ctrl); txgbe_vlan_hw_strip_bitmap_set(dev, queue, on); } +static void +txgbevf_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) +{ + struct txgbe_hw *hw = TXGBE_DEV_HW(dev); + + if (!hw->adapter_stopped) { + PMD_DRV_LOG(ERR, "Please stop port first"); + return; + } + + txgbevf_vlan_strip_q_set(dev, queue, on); +} + static int txgbevf_vlan_offload_config(struct rte_eth_dev *dev, int mask) { @@ -972,7 +980,7 @@ txgbevf_vlan_offload_config(struct rte_eth_dev *dev, int mask) for (i = 0; i < dev->data->nb_rx_queues; i++) { rxq = dev->data->rx_queues[i]; on = !!(rxq->offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP); - txgbevf_vlan_strip_queue_set(dev, i, on); + txgbevf_vlan_strip_q_set(dev, i, on); } } @@ -982,6 +990,13 @@ txgbevf_vlan_offload_config(struct rte_eth_dev *dev, int mask) static int txgbevf_vlan_offload_set(struct rte_eth_dev *dev, int mask) { + struct txgbe_hw *hw = TXGBE_DEV_HW(dev); + + if (!hw->adapter_stopped && (mask & RTE_ETH_VLAN_STRIP_MASK)) { + PMD_DRV_LOG(ERR, "Please stop port first"); + return -EPERM; + } + txgbe_config_vlan_strip_on_all_queues(dev, mask); txgbevf_vlan_offload_config(dev, mask); -- 2.48.1