Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
306a2782
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
306a2782
编写于
6月 28, 2013
作者:
B
Ben Hutchings
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sfc: Separate out queue-empty check from efx_nic_may_push_tx_desc()
Signed-off-by:
N
Ben Hutchings
<
bhutchings@solarflare.com
>
上级
183233be
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
6 deletion
+22
-6
drivers/net/ethernet/sfc/nic.h
drivers/net/ethernet/sfc/nic.h
+22
-6
未找到文件。
drivers/net/ethernet/sfc/nic.h
浏览文件 @
306a2782
...
...
@@ -71,6 +71,26 @@ efx_tx_desc(struct efx_tx_queue *tx_queue, unsigned int index)
return
((
efx_qword_t
*
)
(
tx_queue
->
txd
.
buf
.
addr
))
+
index
;
}
/* Report whether the NIC considers this TX queue empty, given the
* write_count used for the last doorbell push. May return false
* negative.
*/
static
inline
bool
__efx_nic_tx_is_empty
(
struct
efx_tx_queue
*
tx_queue
,
unsigned
int
write_count
)
{
unsigned
int
empty_read_count
=
ACCESS_ONCE
(
tx_queue
->
empty_read_count
);
if
(
empty_read_count
==
0
)
return
false
;
return
((
empty_read_count
^
write_count
)
&
~
EFX_EMPTY_COUNT_VALID
)
==
0
;
}
static
inline
bool
efx_nic_tx_is_empty
(
struct
efx_tx_queue
*
tx_queue
)
{
return
__efx_nic_tx_is_empty
(
tx_queue
,
tx_queue
->
write_count
);
}
/* Decide whether to push a TX descriptor to the NIC vs merely writing
* the doorbell. This can reduce latency when we are adding a single
* descriptor to an empty queue, but is otherwise pointless. Further,
...
...
@@ -80,14 +100,10 @@ efx_tx_desc(struct efx_tx_queue *tx_queue, unsigned int index)
static
inline
bool
efx_nic_may_push_tx_desc
(
struct
efx_tx_queue
*
tx_queue
,
unsigned
int
write_count
)
{
unsigned
empty_read_count
=
ACCESS_ONCE
(
tx_queue
->
empty_read_count
);
if
(
empty_read_count
==
0
)
return
false
;
bool
was_empty
=
__efx_nic_tx_is_empty
(
tx_queue
,
write_count
);
tx_queue
->
empty_read_count
=
0
;
return
((
empty_read_count
^
write_count
)
&
~
EFX_EMPTY_COUNT_VALID
)
==
0
&&
tx_queue
->
write_count
-
write_count
==
1
;
return
was_empty
&&
tx_queue
->
write_count
-
write_count
==
1
;
}
/* Returns a pointer to the specified descriptor in the RX descriptor queue */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录