* [PATCH net 5/5] be2net: isolate TX workarounds not applicable to Skyhawk-R
@ 2014-02-24 6:51 Somnath Kotur
2014-02-24 19:15 ` Sergei Shtylyov
0 siblings, 1 reply; 2+ messages in thread
From: Somnath Kotur @ 2014-02-24 6:51 UTC (permalink / raw)
To: netdev; +Cc: davem, Vasundhara Volam, Sathya Perla, Somnath Kotur
From: Vasundhara Volam <vasundhara.volam@emulex•com>
Some of TX workarounds in be_xmit_workarounds() routine
are not applicable (and result in HW errors) to Skyhawk-R chip.
Isolate BE3-R/Lancer specific workarounds to a separate routine.
Signed-off-by: Vasundhara Volam <vasundhara.volam@emulex•com>
Signed-off-by: Sathya Perla <sathya.perla@emulex•com>
Signed-off-by: Somnath Kotur <somnath.kotur@emulex•com>
---
drivers/net/ethernet/emulex/benet/be_main.c | 42 ++++++++++++++++++--------
1 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index f6a4481..6cf6e2a 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -913,24 +913,14 @@ static int be_ipv6_tx_stall_chk(struct be_adapter *adapter,
return BE3_chip(adapter) && be_ipv6_exthdr_check(skb);
}
-static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
- struct sk_buff *skb,
- bool *skip_hw_vlan)
+static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter,
+ struct sk_buff *skb,
+ bool *skip_hw_vlan)
{
struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
unsigned int eth_hdr_len;
struct iphdr *ip;
- /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or less
- * may cause a transmit stall on that port. So the work-around is to
- * pad short packets (<= 32 bytes) to a 36-byte length.
- */
- if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
- if (skb_padto(skb, 36))
- goto err;
- skb->len = 36;
- }
-
/* For padded packets, BE HW modifies tot_len field in IP header
* incorrecly when VLAN tag is inserted by HW.
* For padded packets, Lancer computes incorrect checksum.
@@ -991,6 +981,32 @@ err:
return NULL;
}
+static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
+ struct sk_buff *skb,
+ bool *skip_hw_vlan)
+{
+ /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or
+ * less may cause a transmit stall on that port. So the work-around is
+ * to pad short packets (<= 32 bytes) to a 36-byte length.
+ */
+ if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
+ if (skb_padto(skb, 36))
+ goto err;
+ skb->len = 36;
+ }
+
+ if (BEx_chip(adapter) || lancer_chip(adapter)) {
+ skb = be_lancer_xmit_workarounds(adapter, skb, skip_hw_vlan);
+ if (!skb)
+ goto err;
+ }
+
+ return skb;
+
+err:
+ return NULL;
+}
+
static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
{
struct be_adapter *adapter = netdev_priv(netdev);
--
1.5.6.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net 5/5] be2net: isolate TX workarounds not applicable to Skyhawk-R
2014-02-24 6:51 [PATCH net 5/5] be2net: isolate TX workarounds not applicable to Skyhawk-R Somnath Kotur
@ 2014-02-24 19:15 ` Sergei Shtylyov
0 siblings, 0 replies; 2+ messages in thread
From: Sergei Shtylyov @ 2014-02-24 19:15 UTC (permalink / raw)
To: Somnath Kotur, netdev; +Cc: davem, Vasundhara Volam, Sathya Perla
Hello.
On 02/24/2014 09:51 AM, Somnath Kotur wrote:
> From: Vasundhara Volam <vasundhara.volam@emulex•com>
> Some of TX workarounds in be_xmit_workarounds() routine
> are not applicable (and result in HW errors) to Skyhawk-R chip.
> Isolate BE3-R/Lancer specific workarounds to a separate routine.
>
> Signed-off-by: Vasundhara Volam <vasundhara.volam@emulex•com>
> Signed-off-by: Sathya Perla <sathya.perla@emulex•com>
> Signed-off-by: Somnath Kotur <somnath.kotur@emulex•com>
> ---
> drivers/net/ethernet/emulex/benet/be_main.c | 42 ++++++++++++++++++--------
> 1 files changed, 29 insertions(+), 13 deletions(-)
> diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
> index f6a4481..6cf6e2a 100644
> --- a/drivers/net/ethernet/emulex/benet/be_main.c
> +++ b/drivers/net/ethernet/emulex/benet/be_main.c
[...]
> @@ -991,6 +981,32 @@ err:
> return NULL;
> }
>
> +static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
> + struct sk_buff *skb,
> + bool *skip_hw_vlan)
> +{
> + /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or
> + * less may cause a transmit stall on that port. So the work-around is
> + * to pad short packets (<= 32 bytes) to a 36-byte length.
> + */
> + if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
> + if (skb_padto(skb, 36))
> + goto err;
Why not just return NULL?
> + skb->len = 36;
> + }
> +
> + if (BEx_chip(adapter) || lancer_chip(adapter)) {
> + skb = be_lancer_xmit_workarounds(adapter, skb, skip_hw_vlan);
> + if (!skb)
> + goto err;
Likewise...
> + }
> +
> + return skb;
> +
> +err:
> + return NULL;
> +}
> +
WBR, Sergei
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-02-24 18:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-24 6:51 [PATCH net 5/5] be2net: isolate TX workarounds not applicable to Skyhawk-R Somnath Kotur
2014-02-24 19:15 ` Sergei Shtylyov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox