Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
7c41765d
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
7c41765d
编写于
8月 03, 2016
作者:
D
Doug Ledford
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'hfi1' and 'sge-limit' into k.o/for-4.8-2
上级
0636e9ab
e6d66e3e
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
35 addition
and
23 deletion
+35
-23
drivers/infiniband/core/rw.c
drivers/infiniband/core/rw.c
+11
-13
drivers/infiniband/core/verbs.c
drivers/infiniband/core/verbs.c
+9
-0
drivers/infiniband/ulp/isert/ib_isert.c
drivers/infiniband/ulp/isert/ib_isert.c
+0
-2
drivers/infiniband/ulp/isert/ib_isert.h
drivers/infiniband/ulp/isert/ib_isert.h
+0
-1
drivers/infiniband/ulp/srpt/ib_srpt.c
drivers/infiniband/ulp/srpt/ib_srpt.c
+4
-6
drivers/infiniband/ulp/srpt/ib_srpt.h
drivers/infiniband/ulp/srpt/ib_srpt.h
+5
-1
include/rdma/ib_verbs.h
include/rdma/ib_verbs.h
+6
-0
未找到文件。
drivers/infiniband/core/rw.c
浏览文件 @
7c41765d
...
...
@@ -58,19 +58,13 @@ static inline bool rdma_rw_io_needs_mr(struct ib_device *dev, u8 port_num,
return
false
;
}
static
inline
u32
rdma_rw_max_sge
(
struct
ib_device
*
dev
,
enum
dma_data_direction
dir
)
{
return
dir
==
DMA_TO_DEVICE
?
dev
->
attrs
.
max_sge
:
dev
->
attrs
.
max_sge_rd
;
}
static
inline
u32
rdma_rw_fr_page_list_len
(
struct
ib_device
*
dev
)
{
/* arbitrary limit to avoid allocating gigantic resources */
return
min_t
(
u32
,
dev
->
attrs
.
max_fast_reg_page_list_len
,
256
);
}
/* Caller must have zero-initialized *reg. */
static
int
rdma_rw_init_one_mr
(
struct
ib_qp
*
qp
,
u8
port_num
,
struct
rdma_rw_reg_ctx
*
reg
,
struct
scatterlist
*
sg
,
u32
sg_cnt
,
u32
offset
)
...
...
@@ -114,6 +108,7 @@ static int rdma_rw_init_mr_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
u8
port_num
,
struct
scatterlist
*
sg
,
u32
sg_cnt
,
u32
offset
,
u64
remote_addr
,
u32
rkey
,
enum
dma_data_direction
dir
)
{
struct
rdma_rw_reg_ctx
*
prev
=
NULL
;
u32
pages_per_mr
=
rdma_rw_fr_page_list_len
(
qp
->
pd
->
device
);
int
i
,
j
,
ret
=
0
,
count
=
0
;
...
...
@@ -125,7 +120,6 @@ static int rdma_rw_init_mr_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
}
for
(
i
=
0
;
i
<
ctx
->
nr_ops
;
i
++
)
{
struct
rdma_rw_reg_ctx
*
prev
=
i
?
&
ctx
->
reg
[
i
-
1
]
:
NULL
;
struct
rdma_rw_reg_ctx
*
reg
=
&
ctx
->
reg
[
i
];
u32
nents
=
min
(
sg_cnt
,
pages_per_mr
);
...
...
@@ -162,9 +156,13 @@ static int rdma_rw_init_mr_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
sg_cnt
-=
nents
;
for
(
j
=
0
;
j
<
nents
;
j
++
)
sg
=
sg_next
(
sg
);
prev
=
reg
;
offset
=
0
;
}
if
(
prev
)
prev
->
wr
.
wr
.
next
=
NULL
;
ctx
->
type
=
RDMA_RW_MR
;
return
count
;
...
...
@@ -181,7 +179,8 @@ static int rdma_rw_init_map_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
u64
remote_addr
,
u32
rkey
,
enum
dma_data_direction
dir
)
{
struct
ib_device
*
dev
=
qp
->
pd
->
device
;
u32
max_sge
=
rdma_rw_max_sge
(
dev
,
dir
);
u32
max_sge
=
dir
==
DMA_TO_DEVICE
?
qp
->
max_write_sge
:
qp
->
max_read_sge
;
struct
ib_sge
*
sge
;
u32
total_len
=
0
,
i
,
j
;
...
...
@@ -205,11 +204,10 @@ static int rdma_rw_init_map_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
rdma_wr
->
wr
.
opcode
=
IB_WR_RDMA_READ
;
rdma_wr
->
remote_addr
=
remote_addr
+
total_len
;
rdma_wr
->
rkey
=
rkey
;
rdma_wr
->
wr
.
num_sge
=
nr_sge
;
rdma_wr
->
wr
.
sg_list
=
sge
;
for
(
j
=
0
;
j
<
nr_sge
;
j
++
,
sg
=
sg_next
(
sg
))
{
rdma_wr
->
wr
.
num_sge
++
;
sge
->
addr
=
ib_sg_dma_address
(
dev
,
sg
)
+
offset
;
sge
->
length
=
ib_sg_dma_len
(
dev
,
sg
)
-
offset
;
sge
->
lkey
=
qp
->
pd
->
local_dma_lkey
;
...
...
@@ -220,8 +218,8 @@ static int rdma_rw_init_map_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
offset
=
0
;
}
if
(
i
+
1
<
ctx
->
nr_ops
)
rdma_wr
->
wr
.
next
=
&
ctx
->
map
.
wrs
[
i
+
1
].
wr
;
rdma_wr
->
wr
.
next
=
i
+
1
<
ctx
->
nr_ops
?
&
ctx
->
map
.
wrs
[
i
+
1
].
wr
:
NULL
;
}
ctx
->
type
=
RDMA_RW_MULTI_WR
;
...
...
drivers/infiniband/core/verbs.c
浏览文件 @
7c41765d
...
...
@@ -814,6 +814,15 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd,
}
}
/*
* Note: all hw drivers guarantee that max_send_sge is lower than
* the device RDMA WRITE SGE limit but not all hw drivers ensure that
* max_send_sge <= max_sge_rd.
*/
qp
->
max_write_sge
=
qp_init_attr
->
cap
.
max_send_sge
;
qp
->
max_read_sge
=
min_t
(
u32
,
qp_init_attr
->
cap
.
max_send_sge
,
device
->
attrs
.
max_sge_rd
);
return
qp
;
}
EXPORT_SYMBOL
(
ib_create_qp
);
...
...
drivers/infiniband/ulp/isert/ib_isert.c
浏览文件 @
7c41765d
...
...
@@ -137,8 +137,6 @@ isert_create_qp(struct isert_conn *isert_conn,
attr
.
cap
.
max_recv_wr
=
ISERT_QP_MAX_RECV_DTOS
+
1
;
attr
.
cap
.
max_rdma_ctxs
=
ISCSI_DEF_XMIT_CMDS_MAX
;
attr
.
cap
.
max_send_sge
=
device
->
ib_device
->
attrs
.
max_sge
;
isert_conn
->
max_sge
=
min
(
device
->
ib_device
->
attrs
.
max_sge
,
device
->
ib_device
->
attrs
.
max_sge_rd
);
attr
.
cap
.
max_recv_sge
=
1
;
attr
.
sq_sig_type
=
IB_SIGNAL_REQ_WR
;
attr
.
qp_type
=
IB_QPT_RC
;
...
...
drivers/infiniband/ulp/isert/ib_isert.h
浏览文件 @
7c41765d
...
...
@@ -138,7 +138,6 @@ struct isert_conn {
u32
responder_resources
;
u32
initiator_depth
;
bool
pi_support
;
u32
max_sge
;
struct
iser_rx_desc
*
login_req_buf
;
char
*
login_rsp_buf
;
u64
login_req_dma
;
...
...
drivers/infiniband/ulp/srpt/ib_srpt.c
浏览文件 @
7c41765d
...
...
@@ -1601,6 +1601,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch)
struct
ib_qp_init_attr
*
qp_init
;
struct
srpt_port
*
sport
=
ch
->
sport
;
struct
srpt_device
*
sdev
=
sport
->
sdev
;
const
struct
ib_device_attr
*
attrs
=
&
sdev
->
device
->
attrs
;
u32
srp_sq_size
=
sport
->
port_attrib
.
srp_sq_size
;
int
ret
;
...
...
@@ -1638,7 +1639,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch)
*/
qp_init
->
cap
.
max_send_wr
=
srp_sq_size
/
2
;
qp_init
->
cap
.
max_rdma_ctxs
=
srp_sq_size
/
2
;
qp_init
->
cap
.
max_send_sge
=
SRPT_DEF_SG_PER_WQE
;
qp_init
->
cap
.
max_send_sge
=
min
(
attrs
->
max_sge
,
SRPT_MAX_SG_PER_WQE
)
;
qp_init
->
port_num
=
ch
->
sport
->
port
;
ch
->
qp
=
ib_create_qp
(
sdev
->
pd
,
qp_init
);
...
...
@@ -2261,7 +2262,7 @@ static void srpt_queue_response(struct se_cmd *cmd)
container_of
(
cmd
,
struct
srpt_send_ioctx
,
cmd
);
struct
srpt_rdma_ch
*
ch
=
ioctx
->
ch
;
struct
srpt_device
*
sdev
=
ch
->
sport
->
sdev
;
struct
ib_send_wr
send_wr
,
*
first_wr
=
NULL
,
*
bad_wr
;
struct
ib_send_wr
send_wr
,
*
first_wr
=
&
send_wr
,
*
bad_wr
;
struct
ib_sge
sge
;
enum
srpt_command_state
state
;
unsigned
long
flags
;
...
...
@@ -2302,11 +2303,8 @@ static void srpt_queue_response(struct se_cmd *cmd)
struct
srpt_rw_ctx
*
ctx
=
&
ioctx
->
rw_ctxs
[
i
];
first_wr
=
rdma_rw_ctx_wrs
(
&
ctx
->
rw
,
ch
->
qp
,
ch
->
sport
->
port
,
NULL
,
first_wr
?
first_wr
:
&
send_wr
);
ch
->
sport
->
port
,
NULL
,
first_wr
);
}
}
else
{
first_wr
=
&
send_wr
;
}
if
(
state
!=
SRPT_STATE_MGMT
)
...
...
drivers/infiniband/ulp/srpt/ib_srpt.h
浏览文件 @
7c41765d
...
...
@@ -106,7 +106,11 @@ enum {
SRP_LOGIN_RSP_MULTICHAN_MAINTAINED
=
0x2
,
SRPT_DEF_SG_TABLESIZE
=
128
,
SRPT_DEF_SG_PER_WQE
=
16
,
/*
* An experimentally determined value that avoids that QP creation
* fails due to "swiotlb buffer is full" on systems using the swiotlb.
*/
SRPT_MAX_SG_PER_WQE
=
16
,
MIN_SRPT_SQ_SIZE
=
16
,
DEF_SRPT_SQ_SIZE
=
4096
,
...
...
include/rdma/ib_verbs.h
浏览文件 @
7c41765d
...
...
@@ -1428,6 +1428,10 @@ struct ib_srq {
}
ext
;
};
/*
* @max_write_sge: Maximum SGE elements per RDMA WRITE request.
* @max_read_sge: Maximum SGE elements per RDMA READ request.
*/
struct
ib_qp
{
struct
ib_device
*
device
;
struct
ib_pd
*
pd
;
...
...
@@ -1449,6 +1453,8 @@ struct ib_qp {
void
(
*
event_handler
)(
struct
ib_event
*
,
void
*
);
void
*
qp_context
;
u32
qp_num
;
u32
max_write_sge
;
u32
max_read_sge
;
enum
ib_qp_type
qp_type
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录