Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
c1ebf46c
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c1ebf46c
编写于
8月 22, 2014
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
igb: Support netdev_ops->ndo_xmit_flush()
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
4798248e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
11 deletion
+24
-11
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igb/igb_main.c
+24
-11
未找到文件。
drivers/net/ethernet/intel/igb/igb_main.c
浏览文件 @
c1ebf46c
...
...
@@ -136,6 +136,7 @@ static void igb_update_phy_info(unsigned long);
static
void
igb_watchdog
(
unsigned
long
);
static
void
igb_watchdog_task
(
struct
work_struct
*
);
static
netdev_tx_t
igb_xmit_frame
(
struct
sk_buff
*
skb
,
struct
net_device
*
);
static
void
igb_xmit_flush
(
struct
net_device
*
netdev
,
u16
queue
);
static
struct
rtnl_link_stats64
*
igb_get_stats64
(
struct
net_device
*
dev
,
struct
rtnl_link_stats64
*
stats
);
static
int
igb_change_mtu
(
struct
net_device
*
,
int
);
...
...
@@ -2075,6 +2076,7 @@ static const struct net_device_ops igb_netdev_ops = {
.
ndo_open
=
igb_open
,
.
ndo_stop
=
igb_close
,
.
ndo_start_xmit
=
igb_xmit_frame
,
.
ndo_xmit_flush
=
igb_xmit_flush
,
.
ndo_get_stats64
=
igb_get_stats64
,
.
ndo_set_rx_mode
=
igb_set_rx_mode
,
.
ndo_set_mac_address
=
igb_set_mac
,
...
...
@@ -4915,13 +4917,6 @@ static void igb_tx_map(struct igb_ring *tx_ring,
tx_ring
->
next_to_use
=
i
;
writel
(
i
,
tx_ring
->
tail
);
/* we need this if more than one processor can write to our tail
* at a time, it synchronizes IO on IA64/Altix systems
*/
mmiowb
();
return
;
dma_error:
...
...
@@ -5057,17 +5052,20 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,
return
NETDEV_TX_OK
;
}
static
inline
struct
igb_ring
*
igb_tx_queue_mapping
(
struct
igb_adapter
*
adapter
,
struct
sk_buff
*
skb
)
static
struct
igb_ring
*
__igb_tx_queue_mapping
(
struct
igb_adapter
*
adapter
,
unsigned
int
r_idx
)
{
unsigned
int
r_idx
=
skb
->
queue_mapping
;
if
(
r_idx
>=
adapter
->
num_tx_queues
)
r_idx
=
r_idx
%
adapter
->
num_tx_queues
;
return
adapter
->
tx_ring
[
r_idx
];
}
static
inline
struct
igb_ring
*
igb_tx_queue_mapping
(
struct
igb_adapter
*
adapter
,
struct
sk_buff
*
skb
)
{
return
__igb_tx_queue_mapping
(
adapter
,
skb
->
queue_mapping
);
}
static
netdev_tx_t
igb_xmit_frame
(
struct
sk_buff
*
skb
,
struct
net_device
*
netdev
)
{
...
...
@@ -5096,6 +5094,21 @@ static netdev_tx_t igb_xmit_frame(struct sk_buff *skb,
return
igb_xmit_frame_ring
(
skb
,
igb_tx_queue_mapping
(
adapter
,
skb
));
}
static
void
igb_xmit_flush
(
struct
net_device
*
netdev
,
u16
queue
)
{
struct
igb_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
igb_ring
*
tx_ring
;
tx_ring
=
__igb_tx_queue_mapping
(
adapter
,
queue
);
writel
(
tx_ring
->
next_to_use
,
tx_ring
->
tail
);
/* we need this if more than one processor can write to our tail
* at a time, it synchronizes IO on IA64/Altix systems
*/
mmiowb
();
}
/**
* igb_tx_timeout - Respond to a Tx Hang
* @netdev: network interface device structure
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录