be2net: Apply backported fixes requested by Emulex (Closes: #697479)
svn path=/dists/sid/linux/; revision=19717
This commit is contained in:
parent
6d430f7bfe
commit
4b7276bc07
|
@ -42,6 +42,20 @@ linux (3.2.36-1) UNRELEASED; urgency=low
|
|||
- [armhf/vexpress] Add usb-modules
|
||||
- Add standard set of USB drivers to nic-usb-modules
|
||||
- Add nic-wireless-modules
|
||||
* be2net: Apply backported fixes requested by Emulex (Closes: #697479)
|
||||
- be2net: do not modify PCI MaxReadReq size
|
||||
- be2net: fix reporting number of actual rx queues
|
||||
- be2net: do not use SCRATCHPAD register
|
||||
- be2net: reduce gso_max_size setting to account for ethernet header.
|
||||
- be2net: Increase statistics structure size for skyhawk.
|
||||
- be2net: Explicitly clear the reserved field in the Tx Descriptor
|
||||
- be2net: Regression bug wherein VFs creation broken for multiple cards.
|
||||
- be2net: Fix to trim skb for padded vlan packets to workaround an ASIC Bug
|
||||
- be2net: Fix Endian
|
||||
- be2net: Enable RSS UDP hashing for Lancer and Skyhawk
|
||||
- be2net: dont pull too much data in skb linear part
|
||||
- be2net: Fix to parse RSS hash from Receive completions correctly.
|
||||
- be2net: Avoid disabling BH in be_poll()
|
||||
|
||||
[ Aurelien Jarno ]
|
||||
* [armhf/vexpress] Add kernel udebs.
|
||||
|
|
41
debian/patches/features/all/be2net/0059-be2net-do-not-modify-PCI-MaxReadReq-size.patch
vendored
Normal file
41
debian/patches/features/all/be2net/0059-be2net-do-not-modify-PCI-MaxReadReq-size.patch
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
From 21ba34daa00d71715d5d49740ebc8caac5e522d5 Mon Sep 17 00:00:00 2001
|
||||
From: Sathya Perla <sathya.perla@emulex.com>
|
||||
Date: Tue, 5 Jun 2012 19:37:19 +0000
|
||||
Subject: [PATCH 01/13] be2net: do not modify PCI MaxReadReq size
|
||||
|
||||
commit 0513ac3d2212072c6694430b1003ad4246a35466 upstream.
|
||||
|
||||
Setting the PCI MRRS to a value of 4096 (overriding the system decided
|
||||
value) had provided perf improvement in TX.
|
||||
But, IBM has provided feedback that on POWER platforms, this value is set
|
||||
by the system firmware, and drivers modifying this value can cause
|
||||
unpredictable results (like EEH errors.) So, backing off this change.
|
||||
On POWER7 platforms most slots, it seems, do get a MRRS of 4096.
|
||||
|
||||
This patch reverts the following commit:
|
||||
"be2net: Modified PCI MaxReadReq size to 4096 bytes"
|
||||
commit 5a56eb10babbcd7b3796dc3c28c271260aa3608d.
|
||||
|
||||
Suggested-by: Brian King <bjking1@us.ibm.com>
|
||||
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 8b6ce5b..2cf02d6 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -2745,8 +2745,6 @@ static int be_setup(struct be_adapter *adapter)
|
||||
be_cmd_set_flow_control(adapter, adapter->tx_fc,
|
||||
adapter->rx_fc);
|
||||
|
||||
- pcie_set_readrq(adapter->pdev, 4096);
|
||||
-
|
||||
if (be_physfn(adapter) && num_vfs) {
|
||||
if (adapter->dev_num_vfs)
|
||||
be_vf_setup(adapter);
|
||||
--
|
||||
1.7.10.4
|
||||
|
42
debian/patches/features/all/be2net/0060-be2net-fix-reporting-number-of-actual-rx-queues.patch
vendored
Normal file
42
debian/patches/features/all/be2net/0060-be2net-fix-reporting-number-of-actual-rx-queues.patch
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
From 4df5eb92325bde926fc45d8609a1cac6ceef6bc5 Mon Sep 17 00:00:00 2001
|
||||
From: Sathya Perla <sathya.perla@emulex.com>
|
||||
Date: Tue, 5 Jun 2012 19:37:20 +0000
|
||||
Subject: [PATCH 02/13] be2net: fix reporting number of actual rx queues
|
||||
|
||||
commit 7f6400626631454f5b535eb92c09a35390777a52 upstream.
|
||||
|
||||
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 2cf02d6..4e1305f 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -1890,6 +1890,12 @@ static int be_rx_cqs_create(struct be_adapter *adapter)
|
||||
*/
|
||||
adapter->num_rx_qs = (num_irqs(adapter) > 1) ?
|
||||
num_irqs(adapter) + 1 : 1;
|
||||
+ if (adapter->num_rx_qs != MAX_RX_QS) {
|
||||
+ rtnl_lock();
|
||||
+ netif_set_real_num_rx_queues(adapter->netdev,
|
||||
+ adapter->num_rx_qs);
|
||||
+ rtnl_unlock();
|
||||
+ }
|
||||
|
||||
adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
|
||||
for_all_rx_queues(adapter, rxo, i) {
|
||||
@@ -3640,7 +3646,7 @@ static int __devinit be_probe(struct pci_dev *pdev,
|
||||
goto disable_dev;
|
||||
pci_set_master(pdev);
|
||||
|
||||
- netdev = alloc_etherdev_mq(sizeof(struct be_adapter), MAX_TX_QS);
|
||||
+ netdev = alloc_etherdev_mqs(sizeof(*adapter), MAX_TX_QS, MAX_RX_QS);
|
||||
if (netdev == NULL) {
|
||||
status = -ENOMEM;
|
||||
goto rel_reg;
|
||||
--
|
||||
1.7.10.4
|
||||
|
78
debian/patches/features/all/be2net/0061-be2net-do-not-use-SCRATCHPAD-register.patch
vendored
Normal file
78
debian/patches/features/all/be2net/0061-be2net-do-not-use-SCRATCHPAD-register.patch
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
From 798402055b562b87e4e9a1b6caf5e9e1d685af22 Mon Sep 17 00:00:00 2001
|
||||
From: Sathya Perla <sathya.perla@emulex.com>
|
||||
Date: Tue, 5 Jun 2012 19:37:22 +0000
|
||||
Subject: [PATCH 03/13] be2net: do not use SCRATCHPAD register
|
||||
|
||||
commit d79c0a207aa3be002e1d9473ea98cc4f838e5a8b upstream.
|
||||
|
||||
The CUST_SCRATCHPAD_CSR register is used for marking if FW cleanup is
|
||||
needed. This is used in a crash kernel scenario. Do no use this register as
|
||||
it is not available for some functions. Instead, always issue an FLR when
|
||||
a function is probed *except* when VFs are preset (enabled in the previous
|
||||
PF load).
|
||||
|
||||
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_hw.h | 2 --
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 10 +++-------
|
||||
2 files changed, 3 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_hw.h b/drivers/net/ethernet/emulex/benet/be_hw.h
|
||||
index f38b58c..0949aa6 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_hw.h
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_hw.h
|
||||
@@ -58,8 +58,6 @@
|
||||
|
||||
#define SLI_PORT_CONTROL_IP_MASK 0x08000000
|
||||
|
||||
-#define PCICFG_CUST_SCRATCHPAD_CSR 0x1EC
|
||||
-
|
||||
/********* Memory BAR register ************/
|
||||
#define PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET 0xfc
|
||||
/* Host Interrupt Enable, if set interrupts are enabled although "PCI Interrupt
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 4e1305f..24bd2cb 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -1049,6 +1049,8 @@ static int be_find_vfs(struct be_adapter *adapter, int vf_state)
|
||||
u16 offset, stride;
|
||||
|
||||
pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV);
|
||||
+ if (!pos)
|
||||
+ return 0;
|
||||
pci_read_config_word(pdev, pos + PCI_SRIOV_VF_OFFSET, &offset);
|
||||
pci_read_config_word(pdev, pos + PCI_SRIOV_VF_STRIDE, &stride);
|
||||
|
||||
@@ -2522,7 +2524,6 @@ static int be_clear(struct be_adapter *adapter)
|
||||
be_cmd_fw_clean(adapter);
|
||||
|
||||
be_msix_disable(adapter);
|
||||
- pci_write_config_dword(adapter->pdev, PCICFG_CUST_SCRATCHPAD_CSR, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2764,8 +2765,6 @@ static int be_setup(struct be_adapter *adapter)
|
||||
|
||||
schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
|
||||
adapter->flags |= BE_FLAGS_WORKER_SCHEDULED;
|
||||
-
|
||||
- pci_write_config_dword(adapter->pdev, PCICFG_CUST_SCRATCHPAD_CSR, 1);
|
||||
return 0;
|
||||
err:
|
||||
be_clear(adapter);
|
||||
@@ -3624,10 +3623,7 @@ reschedule:
|
||||
|
||||
static bool be_reset_required(struct be_adapter *adapter)
|
||||
{
|
||||
- u32 reg;
|
||||
-
|
||||
- pci_read_config_dword(adapter->pdev, PCICFG_CUST_SCRATCHPAD_CSR, ®);
|
||||
- return reg;
|
||||
+ return be_find_vfs(adapter, ENABLED) > 0 ? false : true;
|
||||
}
|
||||
|
||||
static int __devinit be_probe(struct pci_dev *pdev,
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From cdabe042d89c1fc8cb8cf7aaaf0d902b1bab5549 Mon Sep 17 00:00:00 2001
|
||||
From: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
|
||||
Date: Wed, 13 Jun 2012 19:51:43 +0000
|
||||
Subject: [PATCH 04/13] be2net: reduce gso_max_size setting to account for
|
||||
ethernet header.
|
||||
|
||||
commit b7e5887e0e414bde0a2f311ae3fbea5611562e29 upstream.
|
||||
|
||||
The maximum size of packet that can be handled by controller including ethernet
|
||||
header is 65535. Reducing gso_max_size accordingly.
|
||||
|
||||
Signed-off-by: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 24bd2cb..9c42942 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -3212,7 +3212,7 @@ static void be_netdev_init(struct net_device *netdev)
|
||||
|
||||
netdev->flags |= IFF_MULTICAST;
|
||||
|
||||
- netif_set_gso_max_size(netdev, 65535);
|
||||
+ netif_set_gso_max_size(netdev, 65535 - ETH_HLEN);
|
||||
|
||||
netdev->netdev_ops = &be_netdev_ops;
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 779671a8948dd9d4c2b1394f7cd3a7608b56488f Mon Sep 17 00:00:00 2001
|
||||
From: Vasundhara Volam <vasundhara.volam@emulex.com>
|
||||
Date: Wed, 13 Jun 2012 19:51:45 +0000
|
||||
Subject: [PATCH 05/13] be2net: Increase statistics structure size for
|
||||
skyhawk.
|
||||
|
||||
commit 0b3f0e7ae0765c81c7d659811595ea5058ae05a7 upstream.
|
||||
|
||||
Increasing the hardware statistics structure to accomodate statistics for skyhawk.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara.volam@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_cmds.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.h b/drivers/net/ethernet/emulex/benet/be_cmds.h
|
||||
index 944f031..c3d881f 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_cmds.h
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.h
|
||||
@@ -1563,7 +1563,7 @@ struct be_hw_stats_v1 {
|
||||
u32 rsvd0[BE_TXP_SW_SZ];
|
||||
struct be_erx_stats_v1 erx;
|
||||
struct be_pmem_stats pmem;
|
||||
- u32 rsvd1[3];
|
||||
+ u32 rsvd1[18];
|
||||
};
|
||||
|
||||
struct be_cmd_req_get_stats_v1 {
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From fcbdb4746284b89d8d81bef4efbbe082b5862fad Mon Sep 17 00:00:00 2001
|
||||
From: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Date: Sun, 24 Jun 2012 19:40:55 +0000
|
||||
Subject: [PATCH 06/13] be2net: Explicitly clear the reserved field in the Tx
|
||||
Descriptor
|
||||
|
||||
commit 89b1f496d2b659eaaac5a8d80b801661ab03854f upstream.
|
||||
|
||||
Signed-off-by: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 9c42942..3041436 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -558,6 +558,7 @@ static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
|
||||
wrb->frag_pa_hi = upper_32_bits(addr);
|
||||
wrb->frag_pa_lo = addr & 0xFFFFFFFF;
|
||||
wrb->frag_len = len & ETH_WRB_FRAG_LEN_MASK;
|
||||
+ wrb->rsvd0 = 0;
|
||||
}
|
||||
|
||||
static inline u16 be_get_tx_vlan_tag(struct be_adapter *adapter,
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From c6edc77cb260e386ccc2d0270bf1dfd6159171a7 Mon Sep 17 00:00:00 2001
|
||||
From: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Date: Sun, 24 Jun 2012 19:42:00 +0000
|
||||
Subject: [PATCH 07/13] be2net: Regression bug wherein VFs creation broken for
|
||||
multiple cards.
|
||||
|
||||
commit 7665de15642dfb1709177517aa0488162727342c upstream.
|
||||
|
||||
Fix be_find_vfs() to check for matching bus number as well along with devfn
|
||||
|
||||
Signed-off-by: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 3041436..dc10904 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -1058,7 +1058,8 @@ static int be_find_vfs(struct be_adapter *adapter, int vf_state)
|
||||
dev = pci_get_device(pdev->vendor, PCI_ANY_ID, NULL);
|
||||
while (dev) {
|
||||
vf_fn = (pdev->devfn + offset + stride * vfs) & 0xFFFF;
|
||||
- if (dev->is_virtfn && dev->devfn == vf_fn) {
|
||||
+ if (dev->is_virtfn && dev->devfn == vf_fn &&
|
||||
+ dev->bus->number == pdev->bus->number) {
|
||||
vfs++;
|
||||
if (dev->dev_flags & PCI_DEV_FLAGS_ASSIGNED)
|
||||
assigned_vfs++;
|
||||
--
|
||||
1.7.10.4
|
||||
|
126
debian/patches/features/all/be2net/0066-be2net-Fix-to-trim-skb-for-padded-vlan-packets-to-wo.patch
vendored
Normal file
126
debian/patches/features/all/be2net/0066-be2net-Fix-to-trim-skb-for-padded-vlan-packets-to-wo.patch
vendored
Normal file
|
@ -0,0 +1,126 @@
|
|||
From 13cc6abaa4635ed09e676a68aeb17e9f62405469 Mon Sep 17 00:00:00 2001
|
||||
From: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Date: Tue, 26 Jun 2012 22:32:10 +0000
|
||||
Subject: [PATCH 08/13] be2net: Fix to trim skb for padded vlan packets to
|
||||
workaround an ASIC Bug
|
||||
|
||||
commit 93040ae5cc8dcc893eca4a4366dc8415af278edf upstream.
|
||||
|
||||
Fixed spelling error in a comment as pointed out by DaveM.
|
||||
Also refactored existing code a bit to provide placeholders for another ASIC
|
||||
Bug workaround that will be checked-in soon after this.
|
||||
|
||||
Signed-off-by: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be.h | 5 +++
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 57 ++++++++++++++++++++-------
|
||||
2 files changed, 48 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
|
||||
index ecf1a81..d1a17dc 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be.h
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be.h
|
||||
@@ -555,6 +555,11 @@ static inline u8 is_udp_pkt(struct sk_buff *skb)
|
||||
return val;
|
||||
}
|
||||
|
||||
+static inline bool is_ipv4_pkt(struct sk_buff *skb)
|
||||
+{
|
||||
+ return skb->protocol == ntohs(ETH_P_IP) && ip_hdr(skb)->version == 4;
|
||||
+}
|
||||
+
|
||||
static inline void be_vf_eth_addr_generate(struct be_adapter *adapter, u8 *mac)
|
||||
{
|
||||
u32 addr;
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index dc10904..ec72318 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -577,6 +577,11 @@ static inline u16 be_get_tx_vlan_tag(struct be_adapter *adapter,
|
||||
return vlan_tag;
|
||||
}
|
||||
|
||||
+static int be_vlan_tag_chk(struct be_adapter *adapter, struct sk_buff *skb)
|
||||
+{
|
||||
+ return vlan_tx_tag_present(skb) || adapter->pvid;
|
||||
+}
|
||||
+
|
||||
static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
|
||||
struct sk_buff *skb, u32 wrb_cnt, u32 len)
|
||||
{
|
||||
@@ -704,33 +709,57 @@ dma_err:
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ u16 vlan_tag = 0;
|
||||
+
|
||||
+ skb = skb_share_check(skb, GFP_ATOMIC);
|
||||
+ if (unlikely(!skb))
|
||||
+ return skb;
|
||||
+
|
||||
+ if (vlan_tx_tag_present(skb)) {
|
||||
+ vlan_tag = be_get_tx_vlan_tag(adapter, skb);
|
||||
+ __vlan_put_tag(skb, vlan_tag);
|
||||
+ skb->vlan_tci = 0;
|
||||
+ }
|
||||
+
|
||||
+ return skb;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static netdev_tx_t be_xmit(struct sk_buff *skb,
|
||||
struct net_device *netdev)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_tx_obj *txo = &adapter->tx_obj[skb_get_queue_mapping(skb)];
|
||||
struct be_queue_info *txq = &txo->q;
|
||||
+ struct iphdr *ip = NULL;
|
||||
u32 wrb_cnt = 0, copied = 0;
|
||||
- u32 start = txq->head;
|
||||
+ u32 start = txq->head, eth_hdr_len;
|
||||
bool dummy_wrb, stopped = false;
|
||||
|
||||
- /* For vlan tagged pkts, BE
|
||||
- * 1) calculates checksum even when CSO is not requested
|
||||
- * 2) calculates checksum wrongly for padded pkt less than
|
||||
- * 60 bytes long.
|
||||
- * As a workaround disable TX vlan offloading in such cases.
|
||||
+ eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ?
|
||||
+ VLAN_ETH_HLEN : ETH_HLEN;
|
||||
+
|
||||
+ /* HW has a bug which considers padding bytes as legal
|
||||
+ * and modifies the IPv4 hdr's 'tot_len' field
|
||||
*/
|
||||
- if (unlikely(vlan_tx_tag_present(skb) &&
|
||||
- (skb->ip_summed != CHECKSUM_PARTIAL || skb->len <= 60))) {
|
||||
- skb = skb_share_check(skb, GFP_ATOMIC);
|
||||
- if (unlikely(!skb))
|
||||
- goto tx_drop;
|
||||
+ if (skb->len <= 60 && be_vlan_tag_chk(adapter, skb) &&
|
||||
+ is_ipv4_pkt(skb)) {
|
||||
+ ip = (struct iphdr *)ip_hdr(skb);
|
||||
+ pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len));
|
||||
+ }
|
||||
|
||||
- skb = __vlan_put_tag(skb, be_get_tx_vlan_tag(adapter, skb));
|
||||
+ /* HW has a bug wherein it will calculate CSUM for VLAN
|
||||
+ * pkts even though it is disabled.
|
||||
+ * Manually insert VLAN in pkt.
|
||||
+ */
|
||||
+ if (skb->ip_summed != CHECKSUM_PARTIAL &&
|
||||
+ be_vlan_tag_chk(adapter, skb)) {
|
||||
+ skb = be_insert_vlan_in_pkt(adapter, skb);
|
||||
if (unlikely(!skb))
|
||||
goto tx_drop;
|
||||
-
|
||||
- skb->vlan_tci = 0;
|
||||
}
|
||||
|
||||
wrb_cnt = wrb_cnt_for_skb(adapter, skb, &dummy_wrb);
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
From 1dbfee7f77c8b507207a89fe576d1cd4485672ca Mon Sep 17 00:00:00 2001
|
||||
From: Li RongQing <roy.qing.li@gmail.com>
|
||||
Date: Wed, 4 Jul 2012 16:05:42 +0000
|
||||
Subject: [PATCH 09/13] be2net: Fix Endian
|
||||
|
||||
commit e8efcec5394cbf7ae67ccb137cb1a45ae3e6f6c8 upstream.
|
||||
|
||||
ETH_P_IP is host Endian, skb->protocol is big Endian, when
|
||||
compare them, we should change ETH_P_IP from host endian
|
||||
to big endian, htons, not ntohs.
|
||||
|
||||
CC: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Signed-off-by: Li RongQing <roy.qing.li@gmail.com>
|
||||
Acked-by: Somnath Kotur <somnath.kotur@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
|
||||
index d1a17dc..75d9b60 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be.h
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be.h
|
||||
@@ -557,7 +557,7 @@ static inline u8 is_udp_pkt(struct sk_buff *skb)
|
||||
|
||||
static inline bool is_ipv4_pkt(struct sk_buff *skb)
|
||||
{
|
||||
- return skb->protocol == ntohs(ETH_P_IP) && ip_hdr(skb)->version == 4;
|
||||
+ return skb->protocol == htons(ETH_P_IP) && ip_hdr(skb)->version == 4;
|
||||
}
|
||||
|
||||
static inline void be_vf_eth_addr_generate(struct be_adapter *adapter, u8 *mac)
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
From 9818fbc76520775e4087141bfa23ede010063ea5 Mon Sep 17 00:00:00 2001
|
||||
From: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
|
||||
Date: Thu, 12 Jul 2012 03:57:47 +0000
|
||||
Subject: [PATCH 10/13] be2net: Enable RSS UDP hashing for Lancer and Skyhawk
|
||||
|
||||
commit d3bd3a5eeb087bf6a06e9bdfc589096608f933a0 upstream.
|
||||
|
||||
Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be.h | 4 ++++
|
||||
drivers/net/ethernet/emulex/benet/be_cmds.c | 7 +++++++
|
||||
drivers/net/ethernet/emulex/benet/be_cmds.h | 2 ++
|
||||
3 files changed, 13 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
|
||||
index 75d9b60..c648a40 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be.h
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be.h
|
||||
@@ -440,6 +440,10 @@ struct be_adapter {
|
||||
#define lancer_chip(adapter) ((adapter->pdev->device == OC_DEVICE_ID3) || \
|
||||
(adapter->pdev->device == OC_DEVICE_ID4))
|
||||
|
||||
+#define skyhawk_chip(adapter) (adapter->pdev->device == OC_DEVICE_ID5)
|
||||
+
|
||||
+
|
||||
+
|
||||
extern const struct ethtool_ops be_ethtool_ops;
|
||||
|
||||
#define msix_enabled(adapter) (adapter->num_msix_vec > 0)
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
|
||||
index 43167e8..0757df4 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
|
||||
@@ -1727,6 +1727,13 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, u16 table_size)
|
||||
req->if_id = cpu_to_le32(adapter->if_handle);
|
||||
req->enable_rss = cpu_to_le16(RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 |
|
||||
RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6);
|
||||
+
|
||||
+ if (lancer_chip(adapter) || skyhawk_chip(adapter)) {
|
||||
+ req->hdr.version = 1;
|
||||
+ req->enable_rss |= cpu_to_le16(RSS_ENABLE_UDP_IPV4 |
|
||||
+ RSS_ENABLE_UDP_IPV6);
|
||||
+ }
|
||||
+
|
||||
req->cpu_table_size_log2 = cpu_to_le16(fls(table_size) - 1);
|
||||
memcpy(req->cpu_table, rsstable, table_size);
|
||||
memcpy(req->hash, myhash, sizeof(myhash));
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.h b/drivers/net/ethernet/emulex/benet/be_cmds.h
|
||||
index c3d881f..d42b3b9 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_cmds.h
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.h
|
||||
@@ -1085,6 +1085,8 @@ struct be_cmd_resp_query_fw_cfg {
|
||||
#define RSS_ENABLE_TCP_IPV4 0x2
|
||||
#define RSS_ENABLE_IPV6 0x4
|
||||
#define RSS_ENABLE_TCP_IPV6 0x8
|
||||
+#define RSS_ENABLE_UDP_IPV4 0x10
|
||||
+#define RSS_ENABLE_UDP_IPV6 0x20
|
||||
|
||||
struct be_cmd_req_rss_config {
|
||||
struct be_cmd_req_hdr hdr;
|
||||
--
|
||||
1.7.10.4
|
||||
|
49
debian/patches/features/all/be2net/0069-be2net-dont-pull-too-much-data-in-skb-linear-part.patch
vendored
Normal file
49
debian/patches/features/all/be2net/0069-be2net-dont-pull-too-much-data-in-skb-linear-part.patch
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
From 6c7d98f7988abe6d28de0acd0ee0eaecea61ac79 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Fri, 13 Jul 2012 03:19:41 +0000
|
||||
Subject: [PATCH 11/13] be2net: dont pull too much data in skb linear part
|
||||
|
||||
commit ac1ae5f33fd225f46da0072e2091962410a0431b upstream.
|
||||
|
||||
skb_fill_rx_data() pulls 64 byte of data in skb->data
|
||||
|
||||
Its too much for TCP (with no options) on IPv4, as total size of headers
|
||||
is 14 + 40 = 54
|
||||
|
||||
This means tcp stack and splice() are suboptimal, since tcp payload
|
||||
is in part in tcp->data, and in part in skb frag.
|
||||
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Acked-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index ec72318..e2e2472 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -1228,16 +1228,16 @@ static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
|
||||
/* Copy data in the first descriptor of this completion */
|
||||
curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
|
||||
|
||||
- /* Copy the header portion into skb_data */
|
||||
- hdr_len = min(BE_HDR_LEN, curr_frag_len);
|
||||
- memcpy(skb->data, start, hdr_len);
|
||||
skb->len = curr_frag_len;
|
||||
if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
|
||||
+ memcpy(skb->data, start, curr_frag_len);
|
||||
/* Complete packet has now been moved to data */
|
||||
put_page(page_info->page);
|
||||
skb->data_len = 0;
|
||||
skb->tail += curr_frag_len;
|
||||
} else {
|
||||
+ hdr_len = ETH_HLEN;
|
||||
+ memcpy(skb->data, start, hdr_len);
|
||||
skb_shinfo(skb)->nr_frags = 1;
|
||||
skb_frag_set_page(skb, 0, page_info->page);
|
||||
skb_shinfo(skb)->frags[0].page_offset =
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
From 3a194352de63562cbc39ad9b394df45cd01c2564 Mon Sep 17 00:00:00 2001
|
||||
From: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
|
||||
Date: Wed, 25 Jul 2012 21:29:50 +0000
|
||||
Subject: [PATCH 12/13] be2net: Fix to parse RSS hash from Receive completions
|
||||
correctly.
|
||||
|
||||
commit c297977ec18deb36b2c0a5ee57101f7ab736ec00 upstream.
|
||||
|
||||
Wrong pointer variable is being used to parse the rss hash from
|
||||
receive completions leading to corrupted rss_hash values filled into skb.
|
||||
|
||||
Signed-off-by: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index e2e2472..19307ad 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -1397,7 +1397,7 @@ static void be_parse_rx_compl_v1(struct be_eth_rx_compl *compl,
|
||||
rxcp->pkt_type =
|
||||
AMAP_GET_BITS(struct amap_eth_rx_compl_v1, cast_enc, compl);
|
||||
rxcp->rss_hash =
|
||||
- AMAP_GET_BITS(struct amap_eth_rx_compl_v1, rsshash, rxcp);
|
||||
+ AMAP_GET_BITS(struct amap_eth_rx_compl_v1, rsshash, compl);
|
||||
if (rxcp->vlanf) {
|
||||
rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtm,
|
||||
compl);
|
||||
@@ -1429,7 +1429,7 @@ static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,
|
||||
rxcp->pkt_type =
|
||||
AMAP_GET_BITS(struct amap_eth_rx_compl_v0, cast_enc, compl);
|
||||
rxcp->rss_hash =
|
||||
- AMAP_GET_BITS(struct amap_eth_rx_compl_v0, rsshash, rxcp);
|
||||
+ AMAP_GET_BITS(struct amap_eth_rx_compl_v0, rsshash, compl);
|
||||
if (rxcp->vlanf) {
|
||||
rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtm,
|
||||
compl);
|
||||
--
|
||||
1.7.10.4
|
||||
|
110
debian/patches/features/all/be2net/0071-netpoll-revert-6bdb7fe3104-and-fix-be_poll-instead.patch
vendored
Normal file
110
debian/patches/features/all/be2net/0071-netpoll-revert-6bdb7fe3104-and-fix-be_poll-instead.patch
vendored
Normal file
|
@ -0,0 +1,110 @@
|
|||
From ecc8aa51db91b113fd17027733636de37f2760e6 Mon Sep 17 00:00:00 2001
|
||||
From: Amerigo Wang <amwang@redhat.com>
|
||||
Date: Fri, 24 Aug 2012 21:41:11 +0000
|
||||
Subject: [PATCH 13/13] netpoll: revert 6bdb7fe3104 and fix be_poll() instead
|
||||
|
||||
commit 072a9c48600409d72aeb0d5b29fbb75861a06631 upstream.
|
||||
|
||||
Against -net.
|
||||
|
||||
In the patch "netpoll: re-enable irq in poll_napi()", I tried to
|
||||
fix the following warning:
|
||||
|
||||
[100718.051041] ------------[ cut here ]------------
|
||||
[100718.051048] WARNING: at kernel/softirq.c:159 local_bh_enable_ip+0x7d/0xb0()
|
||||
(Not tainted)
|
||||
[100718.051049] Hardware name: ProLiant BL460c G7
|
||||
...
|
||||
[100718.051068] Call Trace:
|
||||
[100718.051073] [<ffffffff8106b747>] ? warn_slowpath_common+0x87/0xc0
|
||||
[100718.051075] [<ffffffff8106b79a>] ? warn_slowpath_null+0x1a/0x20
|
||||
[100718.051077] [<ffffffff810747ed>] ? local_bh_enable_ip+0x7d/0xb0
|
||||
[100718.051080] [<ffffffff8150041b>] ? _spin_unlock_bh+0x1b/0x20
|
||||
[100718.051085] [<ffffffffa00ee974>] ? be_process_mcc+0x74/0x230 [be2net]
|
||||
[100718.051088] [<ffffffffa00ea68c>] ? be_poll_tx_mcc+0x16c/0x290 [be2net]
|
||||
[100718.051090] [<ffffffff8144fe76>] ? netpoll_poll_dev+0xd6/0x490
|
||||
[100718.051095] [<ffffffffa01d24a5>] ? bond_poll_controller+0x75/0x80 [bonding]
|
||||
[100718.051097] [<ffffffff8144fde5>] ? netpoll_poll_dev+0x45/0x490
|
||||
[100718.051100] [<ffffffff81161b19>] ? ksize+0x19/0x80
|
||||
[100718.051102] [<ffffffff81450437>] ? netpoll_send_skb_on_dev+0x157/0x240
|
||||
|
||||
by reenabling IRQ before calling ->poll, but it seems more
|
||||
problems are introduced after that patch:
|
||||
|
||||
http://ozlabs.org/~akpm/stuff/IMG_20120824_122054.jpg
|
||||
http://marc.info/?l=linux-netdev&m=134563282530588&w=2
|
||||
|
||||
So it is safe to fix be2net driver code directly.
|
||||
|
||||
This patch reverts the offending commit and fixes be_poll() by
|
||||
avoid disabling BH there, this is okay because be_poll()
|
||||
can be called either by poll_napi() which already disables
|
||||
IRQ, or by net_rx_action() which already disables BH.
|
||||
|
||||
Reported-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Reported-by: Sylvain Munaut <s.munaut@whatever-company.com>
|
||||
Cc: Sylvain Munaut <s.munaut@whatever-company.com>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
Cc: David Miller <davem@davemloft.net>
|
||||
Cc: Sathya Perla <sathya.perla@emulex.com>
|
||||
Cc: Subbu Seetharaman <subbu.seetharaman@emulex.com>
|
||||
Cc: Ajit Khaparde <ajit.khaparde@emulex.com>
|
||||
Signed-off-by: Cong Wang <amwang@redhat.com>
|
||||
Tested-by: Sylvain Munaut <s.munaut@whatever-company.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
[bwh: Restricted to drivers/net/ethernet/emulex/benet/; commit 6bdb7fe3104
|
||||
has not been applied here]
|
||||
---
|
||||
drivers/net/ethernet/emulex/benet/be_cmds.c | 6 ++++--
|
||||
drivers/net/ethernet/emulex/benet/be_main.c | 2 ++
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
|
||||
index 0757df4..5d42468 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
|
||||
@@ -256,7 +256,7 @@ int be_process_mcc(struct be_adapter *adapter)
|
||||
int num = 0, status = 0;
|
||||
struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;
|
||||
|
||||
- spin_lock_bh(&adapter->mcc_cq_lock);
|
||||
+ spin_lock(&adapter->mcc_cq_lock);
|
||||
while ((compl = be_mcc_compl_get(adapter))) {
|
||||
if (compl->flags & CQE_FLAGS_ASYNC_MASK) {
|
||||
/* Interpret flags as an async trailer */
|
||||
@@ -277,7 +277,7 @@ int be_process_mcc(struct be_adapter *adapter)
|
||||
if (num)
|
||||
be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num);
|
||||
|
||||
- spin_unlock_bh(&adapter->mcc_cq_lock);
|
||||
+ spin_unlock(&adapter->mcc_cq_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -292,7 +292,9 @@ static int be_mcc_wait_compl(struct be_adapter *adapter)
|
||||
if (be_error(adapter))
|
||||
return -EIO;
|
||||
|
||||
+ local_bh_disable();
|
||||
status = be_process_mcc(adapter);
|
||||
+ local_bh_enable();
|
||||
|
||||
if (atomic_read(&mcc_obj->q.used) == 0)
|
||||
break;
|
||||
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
index 19307ad..3a21dda 100644
|
||||
--- a/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
|
||||
@@ -3625,7 +3625,9 @@ static void be_worker(struct work_struct *work)
|
||||
/* when interrupts are not yet enabled, just reap any pending
|
||||
* mcc completions */
|
||||
if (!netif_running(adapter->netdev)) {
|
||||
+ local_bh_disable();
|
||||
be_process_mcc(adapter);
|
||||
+ local_bh_enable();
|
||||
goto reschedule;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -262,6 +262,19 @@ features/all/be2net/0055-be2net-Fix-to-apply-duplex-value-as-unknown-when-lin.pa
|
|||
features/all/be2net/0056-be2net-Record-receive-queue-index-in-skb-to-aid-RPS.patch
|
||||
features/all/be2net/0057-be2net-Fix-EEH-error-reset-before-a-flash-dump-compl.patch
|
||||
features/all/be2net/0058-be2net-avoid-disabling-sriov-while-VFs-are-assigned.patch
|
||||
features/all/be2net/0059-be2net-do-not-modify-PCI-MaxReadReq-size.patch
|
||||
features/all/be2net/0060-be2net-fix-reporting-number-of-actual-rx-queues.patch
|
||||
features/all/be2net/0061-be2net-do-not-use-SCRATCHPAD-register.patch
|
||||
features/all/be2net/0062-be2net-reduce-gso_max_size-setting-to-account-for-et.patch
|
||||
features/all/be2net/0063-be2net-Increase-statistics-structure-size-for-skyhaw.patch
|
||||
features/all/be2net/0064-be2net-Explicitly-clear-the-reserved-field-in-the-Tx.patch
|
||||
features/all/be2net/0065-be2net-Regression-bug-wherein-VFs-creation-broken-fo.patch
|
||||
features/all/be2net/0066-be2net-Fix-to-trim-skb-for-padded-vlan-packets-to-wo.patch
|
||||
features/all/be2net/0067-be2net-Fix-Endian.patch
|
||||
features/all/be2net/0068-be2net-Enable-RSS-UDP-hashing-for-Lancer-and-Skyhawk.patch
|
||||
features/all/be2net/0069-be2net-dont-pull-too-much-data-in-skb-linear-part.patch
|
||||
features/all/be2net/0070-be2net-Fix-to-parse-RSS-hash-from-Receive-completion.patch
|
||||
features/all/be2net/0071-netpoll-revert-6bdb7fe3104-and-fix-be_poll-instead.patch
|
||||
|
||||
# Add CoDel from 3.5, and prerequisites
|
||||
features/all/net-introduce-skb_flow_dissect.patch
|
||||
|
|
Loading…
Reference in New Issue