1 Star 0 Fork 8

zxk / rk-ethernet

forked from byxlk / rk-ethernet 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0001-net-ethernet-stmmac-Workaround-for-tx-checksum-error.patch 1.67 KB
一键复制 编辑 原始数据 按行查看 历史
iamgeeklike 提交于 2020-08-06 15:05 . Add files via upload
From 330126d68d1ecd63fb8ff10f6e3962a945610faf Mon Sep 17 00:00:00 2001
From: David Wu <david.wu@rock-chips.com>
Date: Wed, 10 Apr 2019 11:43:11 +0800
Subject: [PATCH] net: ethernet: stmmac: Workaround for tx checksum error
Change-Id: Ib0f45ff087e7e7e1c5ef9869b316441314151478
Signed-off-by: David Wu <david.wu@rock-chips.com>
---
.../net/ethernet/stmicro/stmmac/stmmac_main.c | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 22748ea4498f..965a9d6a2c41 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -1942,6 +1942,23 @@ static int stmmac_release(struct net_device *dev)
return 0;
}
+static bool stmmac_tx_skb_need_linearize(struct sk_buff *skb, struct net_device *dev)
+{
+ int nfrags = skb_shinfo(skb)->nr_frags, i;
+
+ if (skb->len != dev->mtu + ETH_HLEN)
+ return false;
+
+ for (i = 0; i < nfrags; i++) {
+ const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
+
+ if (!IS_ALIGNED((unsigned long)frag->page_offset, 4))
+ return true;
+ }
+
+ return false;
+}
+
/**
* stmmac_xmit - Tx entry point of the driver
* @skb : the socket buffer
@@ -1973,6 +1990,16 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_BUSY;
}
+ if (stmmac_tx_skb_need_linearize(skb, dev)) {
+ if (skb_linearize(skb)) {
+ spin_unlock(&priv->tx_lock);
+ return NETDEV_TX_BUSY;
+ } else {
+ nfrags = skb_shinfo(skb)->nr_frags;
+ nopaged_len = skb_headlen(skb);
+ }
+ }
+
if (priv->tx_path_in_lpi_mode)
stmmac_disable_eee_mode(priv);
--
2.19.1
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/feixuezhang/rk-ethernet.git
git@gitee.com:feixuezhang/rk-ethernet.git
feixuezhang
rk-ethernet
rk-ethernet
master

搜索帮助