The new flag PCI_DEV_FLAGS_NO_RELAXED_ORDERING has been added
to indicate that Relaxed Ordering Attributes (RO) should not
be used for Transaction Layer Packets (TLP) targeted toward
these affected Root Port, it will clear the bit4 in the PCIe
Device Control register, so the PCIe device drivers could
query PCIe configuration space to determine if it can send
TLPs to Root Port with the Relaxed Ordering Attributes set.
The ixgbe driver could use this flag to determine if it can
send TLPs to Root Port with the Relaxed Ordering Attributes set.
v2: Simplify the original program according Alex's suggestion,
remove the new ixgbe flag2 and only check the bit4 in the
PCIe Device Control register.
Ding Tianhong (2):
Revert commit 1a8b6d76dc5b ("net:add one common config...")
net: ixgbe: Use new PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag
arch/Kconfig | 3 --
arch/sparc/Kconfig | 1 -
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 37 ++++++++++++-------------
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 32 +++++++++++----------
4 files changed, 35 insertions(+), 38 deletions(-)
--
1.8.3.1
The new flag PCI_DEV_FLAGS_NO_RELAXED_ORDERING has been added
to indicate that Relaxed Ordering Attributes (RO) should not
be used for Transaction Layer Packets (TLP) targeted toward
these affected Root Port, it will clear the bit4 in the PCIe
Device Control register, so the PCIe device drivers could
query PCIe configuration space to determine if it can send
TLPs to Root Port with the Relaxed Ordering Attributes set.
With this new flag we don't need the config ARCH_WANT_RELAX_ORDER
to control the Relaxed Ordering Attributes for the ixgbe drivers
just like the commit 1a8b6d76dc5b ("net:add one common config...") did,
so revert this commit.
Signed-off-by: Ding Tianhong <redacted>
---
arch/Kconfig | 3 ---
arch/sparc/Kconfig | 1 -
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 2 +-
3 files changed, 1 insertion(+), 5 deletions(-)
@@ -928,9 +928,6 @@ config STRICT_MODULE_RWXandnon-textmemorywillbemadenon-executable.Thisprovidesprotectionagainstcertainsecurityexploits(e.g.writingtotext)-configARCH_WANT_RELAX_ORDER-bool-configREFCOUNT_FULLbool"Perform full reference count validation at the expense of speed"help
The ixgbe driver use the compile check to determine if it can
send TLPs to Root Port with the Relaxed Ordering Attribute set,
this is too inconvenient, now the new flag PCI_DEV_FLAGS_NO_RELAXED_ORDERING
has been added to the kernel and we could check the bit4 in the PCIe
Device Control register to determine whether we should use the Relaxed
Ordering Attributes or not, so use this new way in the ixgbe driver.
Signed-off-by: Ding Tianhong <redacted>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 37 ++++++++++++-------------
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 32 +++++++++++----------
2 files changed, 35 insertions(+), 34 deletions(-)
From: Tantilov, Emil S <hidden> Date: 2017-08-17 14:18:06
quoted hunk
-----Original Message-----
From: linux-kernel-owner@vger.kernel.org [mailto:linux-kernel-
owner@vger.kernel.org] On Behalf Of Ding Tianhong
Sent: Wednesday, August 16, 2017 8:25 PM
To: davem@davemloft.net; Kirsher, Jeffrey T <redacted>;
keescook@chromium.org; linux-kernel@vger.kernel.org;
sparclinux@vger.kernel.org; intel-wired-lan@lists.osuosl.org;
alexander.duyck@gmail.com; netdev@vger.kernel.org; linuxarm@huawei.com
Cc: Ding Tianhong <redacted>
Subject: [PATCH net v2 2/2] net: ixgbe: Use new
PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag
The ixgbe driver use the compile check to determine if it can
send TLPs to Root Port with the Relaxed Ordering Attribute set,
this is too inconvenient, now the new flag
PCI_DEV_FLAGS_NO_RELAXED_ORDERING
has been added to the kernel and we could check the bit4 in the PCIe
Device Control register to determine whether we should use the Relaxed
Ordering Attributes or not, so use this new way in the ixgbe driver.
Signed-off-by: Ding Tianhong <redacted>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c | 37 ++++++++++++---------
----
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 32 +++++++++++----------
2 files changed, 35 insertions(+), 34 deletions(-)
As Alex mentioned there is no need for this check in any form.
The HW defaults to Relaxed Ordering enabled unless it is disabled in
the PCIe Device Control Register. So the above logic is already done by HW.
All you have to do is strip the code disabling relaxed ordering.
Thanks,
Emil
As Alex mentioned there is no need for this check in any form.
The HW defaults to Relaxed Ordering enabled unless it is disabled in
the PCIe Device Control Register. So the above logic is already done by HW.
All you have to do is strip the code disabling relaxed ordering.
Hi Tantilov:
I misunderstood Alex's suggestion, But I still couldn't find the logic where
the HW disable the Relaxed Ordering when the PCIe Device Control Register
disable it, can you point it out?
Thanks
Ding
From: Tantilov, Emil S <hidden> Date: 2017-08-18 05:04:09
-----Original Message-----
From: Ding Tianhong [mailto:dingtianhong@huawei.com]
Sent: Thursday, August 17, 2017 5:39 PM
To: Tantilov, Emil S <redacted>; davem@davemloft.net;
Kirsher, Jeffrey T [off-list ref]; keescook@chromium.org;
linux-kernel@vger.kernel.org; sparclinux@vger.kernel.org; intel-wired-
lan@lists.osuosl.org; alexander.duyck@gmail.com; netdev@vger.kernel.org;
linuxarm@huawei.com
Subject: Re: [PATCH net v2 2/2] net: ixgbe: Use new
PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag
On 2017/8/17 22:17, Tantilov, Emil S wrote:
As Alex mentioned there is no need for this check in any form.
The HW defaults to Relaxed Ordering enabled unless it is disabled in
the PCIe Device Control Register. So the above logic is already done by
HW.
quoted
All you have to do is strip the code disabling relaxed ordering.
Hi Tantilov:
I misunderstood Alex's suggestion, But I still couldn't find the logic
where
the HW disable the Relaxed Ordering when the PCIe Device Control Register
disable it, can you point it out?
If you look at the datasheet (82599) - the description of CTRL_EXT.RO_DIS (bit 17, 0b):
Relaxed Ordering Disable. When set to 1b, the device does not request any relaxed
ordering transactions. When this bit is cleared and the Enable Relaxed Ordering bit in
the Device Control register is set, the device requests relaxed ordering transactions per queues as configured in the DCA_RXCTRL[n] and DCA_TXCTRL[n] registers.
So if you remove the code that clears the bits in DCA_T/RXCTRL relaxed ordering should
be enabled by HW when the bus allows it.
Thanks,
Emil
-----Original Message-----
From: Ding Tianhong [mailto:dingtianhong@huawei.com]
Sent: Thursday, August 17, 2017 5:39 PM
To: Tantilov, Emil S <redacted>; davem@davemloft.net;
Kirsher, Jeffrey T [off-list ref]; keescook@chromium.org;
linux-kernel@vger.kernel.org; sparclinux@vger.kernel.org; intel-wired-
lan@lists.osuosl.org; alexander.duyck@gmail.com; netdev@vger.kernel.org;
linuxarm@huawei.com
Subject: Re: [PATCH net v2 2/2] net: ixgbe: Use new
PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag
On 2017/8/17 22:17, Tantilov, Emil S wrote:
As Alex mentioned there is no need for this check in any form.
The HW defaults to Relaxed Ordering enabled unless it is disabled in
the PCIe Device Control Register. So the above logic is already done by
HW.
quoted
All you have to do is strip the code disabling relaxed ordering.
Hi Tantilov:
I misunderstood Alex's suggestion, But I still couldn't find the logic
where
the HW disable the Relaxed Ordering when the PCIe Device Control Register
disable it, can you point it out?
If you look at the datasheet (82599) - the description of CTRL_EXT.RO_DIS (bit 17, 0b):
Relaxed Ordering Disable. When set to 1b, the device does not request any relaxed
ordering transactions. When this bit is cleared and the Enable Relaxed Ordering bit in
the Device Control register is set, the device requests relaxed ordering transactions per queues as configured in the DCA_RXCTRL[n] and DCA_TXCTRL[n] registers.
So if you remove the code that clears the bits in DCA_T/RXCTRL relaxed ordering should
be enabled by HW when the bus allows it.
drivers/net//ethernet/intel/ixgbe/ixgbe_common.c:354:7: error: implicit declaration of function 'pcie_relaxed_ordering_enabled' [-Werror=implicit-function-declaration]
if (!pcie_relaxed_ordering_enabled(adapter->pdev)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
--
drivers/net//ethernet/intel/ixgbe/ixgbe_82598.c: In function 'ixgbe_start_hw_82598':
quoted
drivers/net//ethernet/intel/ixgbe/ixgbe_82598.c:184:7: error: implicit declaration of function 'pcie_relaxed_ordering_enabled' [-Werror=implicit-function-declaration]
if (!pcie_relaxed_ordering_enabled(adapter->pdev)) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/pcie_relaxed_ordering_enabled +354 drivers/net//ethernet/intel/ixgbe/ixgbe_common.c
331
332 /**
333 * ixgbe_start_hw_gen2 - Init sequence for common device family
334 * @hw: pointer to hw structure
335 *
336 * Performs the init sequence common to the second generation
337 * of 10 GbE devices.
338 * Devices in the second generation:
339 * 82599
340 * X540
341 **/
342 s32 ixgbe_start_hw_gen2(struct ixgbe_hw *hw)
343 {
344 u32 i;
345 struct ixgbe_adapter *adapter = hw->back;
346
347 /* Clear the rate limiters */
348 for (i = 0; i < hw->mac.max_tx_queues; i++) {
349 IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, i);
350 IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0);
351 }
352 IXGBE_WRITE_FLUSH(hw);
353
> 354 if (!pcie_relaxed_ordering_enabled(adapter->pdev)) {
355 /* Disable relaxed ordering */
356 for (i = 0; i < hw->mac.max_tx_queues; i++) {
357 u32 regval;
358
359 regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
360 regval &= ~IXGBE_DCA_TXCTRL_DESC_WRO_EN;
361 IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
362 }
363
364 for (i = 0; i < hw->mac.max_rx_queues; i++) {
365 u32 regval;
366
367 regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
368 regval &= ~(IXGBE_DCA_RXCTRL_DATA_WRO_EN |
369 IXGBE_DCA_RXCTRL_HEAD_WRO_EN);
370 IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
371 }
372 }
373
374 return 0;
375 }
376
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation