Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
bbdfcf18
Commit
bbdfcf18
authored
Mar 03, 2016
by
Doug Ledford
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'k.o/for-4.5-rc' into HEAD
parents
fc77dbd3
3d943c9d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
22 deletions
+29
-22
drivers/infiniband/core/device.c
drivers/infiniband/core/device.c
+1
-0
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_cmd.c
+6
-3
drivers/infiniband/hw/mlx5/srq.c
drivers/infiniband/hw/mlx5/srq.c
+22
-19
No files found.
drivers/infiniband/core/device.c
View file @
bbdfcf18
...
@@ -358,6 +358,7 @@ int ib_register_device(struct ib_device *device,
...
@@ -358,6 +358,7 @@ int ib_register_device(struct ib_device *device,
ret
=
device
->
query_device
(
device
,
&
device
->
attrs
,
&
uhw
);
ret
=
device
->
query_device
(
device
,
&
device
->
attrs
,
&
uhw
);
if
(
ret
)
{
if
(
ret
)
{
printk
(
KERN_WARNING
"Couldn't query the device attributes
\n
"
);
printk
(
KERN_WARNING
"Couldn't query the device attributes
\n
"
);
ib_cache_cleanup_one
(
device
);
goto
out
;
goto
out
;
}
}
...
...
drivers/infiniband/core/uverbs_cmd.c
View file @
bbdfcf18
...
@@ -1970,7 +1970,8 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file,
...
@@ -1970,7 +1970,8 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file,
resp_size
);
resp_size
);
INIT_UDATA
(
&
uhw
,
buf
+
sizeof
(
cmd
),
INIT_UDATA
(
&
uhw
,
buf
+
sizeof
(
cmd
),
(
unsigned
long
)
cmd
.
response
+
resp_size
,
(
unsigned
long
)
cmd
.
response
+
resp_size
,
in_len
-
sizeof
(
cmd
),
out_len
-
resp_size
);
in_len
-
sizeof
(
cmd
)
-
sizeof
(
struct
ib_uverbs_cmd_hdr
),
out_len
-
resp_size
);
memset
(
&
cmd_ex
,
0
,
sizeof
(
cmd_ex
));
memset
(
&
cmd_ex
,
0
,
sizeof
(
cmd_ex
));
cmd_ex
.
user_handle
=
cmd
.
user_handle
;
cmd_ex
.
user_handle
=
cmd
.
user_handle
;
...
@@ -3413,7 +3414,8 @@ ssize_t ib_uverbs_create_srq(struct ib_uverbs_file *file,
...
@@ -3413,7 +3414,8 @@ ssize_t ib_uverbs_create_srq(struct ib_uverbs_file *file,
INIT_UDATA
(
&
udata
,
buf
+
sizeof
cmd
,
INIT_UDATA
(
&
udata
,
buf
+
sizeof
cmd
,
(
unsigned
long
)
cmd
.
response
+
sizeof
resp
,
(
unsigned
long
)
cmd
.
response
+
sizeof
resp
,
in_len
-
sizeof
cmd
,
out_len
-
sizeof
resp
);
in_len
-
sizeof
cmd
-
sizeof
(
struct
ib_uverbs_cmd_hdr
),
out_len
-
sizeof
resp
);
ret
=
__uverbs_create_xsrq
(
file
,
ib_dev
,
&
xcmd
,
&
udata
);
ret
=
__uverbs_create_xsrq
(
file
,
ib_dev
,
&
xcmd
,
&
udata
);
if
(
ret
)
if
(
ret
)
...
@@ -3439,7 +3441,8 @@ ssize_t ib_uverbs_create_xsrq(struct ib_uverbs_file *file,
...
@@ -3439,7 +3441,8 @@ ssize_t ib_uverbs_create_xsrq(struct ib_uverbs_file *file,
INIT_UDATA
(
&
udata
,
buf
+
sizeof
cmd
,
INIT_UDATA
(
&
udata
,
buf
+
sizeof
cmd
,
(
unsigned
long
)
cmd
.
response
+
sizeof
resp
,
(
unsigned
long
)
cmd
.
response
+
sizeof
resp
,
in_len
-
sizeof
cmd
,
out_len
-
sizeof
resp
);
in_len
-
sizeof
cmd
-
sizeof
(
struct
ib_uverbs_cmd_hdr
),
out_len
-
sizeof
resp
);
ret
=
__uverbs_create_xsrq
(
file
,
ib_dev
,
&
cmd
,
&
udata
);
ret
=
__uverbs_create_xsrq
(
file
,
ib_dev
,
&
cmd
,
&
udata
);
if
(
ret
)
if
(
ret
)
...
...
drivers/infiniband/hw/mlx5/srq.c
View file @
bbdfcf18
...
@@ -75,7 +75,8 @@ static void mlx5_ib_srq_event(struct mlx5_core_srq *srq, enum mlx5_event type)
...
@@ -75,7 +75,8 @@ static void mlx5_ib_srq_event(struct mlx5_core_srq *srq, enum mlx5_event type)
static
int
create_srq_user
(
struct
ib_pd
*
pd
,
struct
mlx5_ib_srq
*
srq
,
static
int
create_srq_user
(
struct
ib_pd
*
pd
,
struct
mlx5_ib_srq
*
srq
,
struct
mlx5_create_srq_mbox_in
**
in
,
struct
mlx5_create_srq_mbox_in
**
in
,
struct
ib_udata
*
udata
,
int
buf_size
,
int
*
inlen
)
struct
ib_udata
*
udata
,
int
buf_size
,
int
*
inlen
,
int
is_xrc
)
{
{
struct
mlx5_ib_dev
*
dev
=
to_mdev
(
pd
->
device
);
struct
mlx5_ib_dev
*
dev
=
to_mdev
(
pd
->
device
);
struct
mlx5_ib_create_srq
ucmd
=
{};
struct
mlx5_ib_create_srq
ucmd
=
{};
...
@@ -87,13 +88,8 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
...
@@ -87,13 +88,8 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
int
ncont
;
int
ncont
;
u32
offset
;
u32
offset
;
u32
uidx
=
MLX5_IB_DEFAULT_UIDX
;
u32
uidx
=
MLX5_IB_DEFAULT_UIDX
;
int
drv_data
=
udata
->
inlen
-
sizeof
(
struct
ib_uverbs_cmd_hdr
);
if
(
drv_data
<
0
)
ucmdlen
=
min
(
udata
->
inlen
,
sizeof
(
ucmd
));
return
-
EINVAL
;
ucmdlen
=
(
drv_data
<
sizeof
(
ucmd
))
?
drv_data
:
sizeof
(
ucmd
);
if
(
ib_copy_from_udata
(
&
ucmd
,
udata
,
ucmdlen
))
{
if
(
ib_copy_from_udata
(
&
ucmd
,
udata
,
ucmdlen
))
{
mlx5_ib_dbg
(
dev
,
"failed copy udata
\n
"
);
mlx5_ib_dbg
(
dev
,
"failed copy udata
\n
"
);
...
@@ -103,15 +99,17 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
...
@@ -103,15 +99,17 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
if
(
ucmd
.
reserved0
||
ucmd
.
reserved1
)
if
(
ucmd
.
reserved0
||
ucmd
.
reserved1
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
drv_data
>
sizeof
(
ucmd
)
&&
if
(
udata
->
inlen
>
sizeof
(
ucmd
)
&&
!
ib_is_udata_cleared
(
udata
,
sizeof
(
ucmd
),
!
ib_is_udata_cleared
(
udata
,
sizeof
(
ucmd
),
drv_data
-
sizeof
(
ucmd
)))
udata
->
inlen
-
sizeof
(
ucmd
)))
return
-
EINVAL
;
return
-
EINVAL
;
err
=
get_srq_user_index
(
to_mucontext
(
pd
->
uobject
->
context
),
if
(
is_xrc
)
{
&
ucmd
,
udata
->
inlen
,
&
uidx
);
err
=
get_srq_user_index
(
to_mucontext
(
pd
->
uobject
->
context
),
if
(
err
)
&
ucmd
,
udata
->
inlen
,
&
uidx
);
return
err
;
if
(
err
)
return
err
;
}
srq
->
wq_sig
=
!!
(
ucmd
.
flags
&
MLX5_SRQ_FLAG_SIGNATURE
);
srq
->
wq_sig
=
!!
(
ucmd
.
flags
&
MLX5_SRQ_FLAG_SIGNATURE
);
...
@@ -151,7 +149,8 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
...
@@ -151,7 +149,8 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
(
*
in
)
->
ctx
.
log_pg_sz
=
page_shift
-
MLX5_ADAPTER_PAGE_SHIFT
;
(
*
in
)
->
ctx
.
log_pg_sz
=
page_shift
-
MLX5_ADAPTER_PAGE_SHIFT
;
(
*
in
)
->
ctx
.
pgoff_cqn
=
cpu_to_be32
(
offset
<<
26
);
(
*
in
)
->
ctx
.
pgoff_cqn
=
cpu_to_be32
(
offset
<<
26
);
if
(
MLX5_CAP_GEN
(
dev
->
mdev
,
cqe_version
)
==
MLX5_CQE_VERSION_V1
)
{
if
((
MLX5_CAP_GEN
(
dev
->
mdev
,
cqe_version
)
==
MLX5_CQE_VERSION_V1
)
&&
is_xrc
){
xsrqc
=
MLX5_ADDR_OF
(
create_xrc_srq_in
,
*
in
,
xsrqc
=
MLX5_ADDR_OF
(
create_xrc_srq_in
,
*
in
,
xrc_srq_context_entry
);
xrc_srq_context_entry
);
MLX5_SET
(
xrc_srqc
,
xsrqc
,
user_index
,
uidx
);
MLX5_SET
(
xrc_srqc
,
xsrqc
,
user_index
,
uidx
);
...
@@ -170,7 +169,7 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
...
@@ -170,7 +169,7 @@ static int create_srq_user(struct ib_pd *pd, struct mlx5_ib_srq *srq,
static
int
create_srq_kernel
(
struct
mlx5_ib_dev
*
dev
,
struct
mlx5_ib_srq
*
srq
,
static
int
create_srq_kernel
(
struct
mlx5_ib_dev
*
dev
,
struct
mlx5_ib_srq
*
srq
,
struct
mlx5_create_srq_mbox_in
**
in
,
int
buf_size
,
struct
mlx5_create_srq_mbox_in
**
in
,
int
buf_size
,
int
*
inlen
)
int
*
inlen
,
int
is_xrc
)
{
{
int
err
;
int
err
;
int
i
;
int
i
;
...
@@ -224,7 +223,8 @@ static int create_srq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_srq *srq,
...
@@ -224,7 +223,8 @@ static int create_srq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_srq *srq,
(
*
in
)
->
ctx
.
log_pg_sz
=
page_shift
-
MLX5_ADAPTER_PAGE_SHIFT
;
(
*
in
)
->
ctx
.
log_pg_sz
=
page_shift
-
MLX5_ADAPTER_PAGE_SHIFT
;
if
(
MLX5_CAP_GEN
(
dev
->
mdev
,
cqe_version
)
==
MLX5_CQE_VERSION_V1
)
{
if
((
MLX5_CAP_GEN
(
dev
->
mdev
,
cqe_version
)
==
MLX5_CQE_VERSION_V1
)
&&
is_xrc
){
xsrqc
=
MLX5_ADDR_OF
(
create_xrc_srq_in
,
*
in
,
xsrqc
=
MLX5_ADDR_OF
(
create_xrc_srq_in
,
*
in
,
xrc_srq_context_entry
);
xrc_srq_context_entry
);
/* 0xffffff means we ask to work with cqe version 0 */
/* 0xffffff means we ask to work with cqe version 0 */
...
@@ -302,10 +302,14 @@ struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd,
...
@@ -302,10 +302,14 @@ struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd,
desc_size
,
init_attr
->
attr
.
max_wr
,
srq
->
msrq
.
max
,
srq
->
msrq
.
max_gs
,
desc_size
,
init_attr
->
attr
.
max_wr
,
srq
->
msrq
.
max
,
srq
->
msrq
.
max_gs
,
srq
->
msrq
.
max_avail_gather
);
srq
->
msrq
.
max_avail_gather
);
is_xrc
=
(
init_attr
->
srq_type
==
IB_SRQT_XRC
);
if
(
pd
->
uobject
)
if
(
pd
->
uobject
)
err
=
create_srq_user
(
pd
,
srq
,
&
in
,
udata
,
buf_size
,
&
inlen
);
err
=
create_srq_user
(
pd
,
srq
,
&
in
,
udata
,
buf_size
,
&
inlen
,
is_xrc
);
else
else
err
=
create_srq_kernel
(
dev
,
srq
,
&
in
,
buf_size
,
&
inlen
);
err
=
create_srq_kernel
(
dev
,
srq
,
&
in
,
buf_size
,
&
inlen
,
is_xrc
);
if
(
err
)
{
if
(
err
)
{
mlx5_ib_warn
(
dev
,
"create srq %s failed, err %d
\n
"
,
mlx5_ib_warn
(
dev
,
"create srq %s failed, err %d
\n
"
,
...
@@ -313,7 +317,6 @@ struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd,
...
@@ -313,7 +317,6 @@ struct ib_srq *mlx5_ib_create_srq(struct ib_pd *pd,
goto
err_srq
;
goto
err_srq
;
}
}
is_xrc
=
(
init_attr
->
srq_type
==
IB_SRQT_XRC
);
in
->
ctx
.
state_log_sz
=
ilog2
(
srq
->
msrq
.
max
);
in
->
ctx
.
state_log_sz
=
ilog2
(
srq
->
msrq
.
max
);
flgs
=
((
srq
->
msrq
.
wqe_shift
-
4
)
|
(
is_xrc
<<
5
)
|
(
srq
->
wq_sig
<<
7
))
<<
24
;
flgs
=
((
srq
->
msrq
.
wqe_shift
-
4
)
|
(
is_xrc
<<
5
)
|
(
srq
->
wq_sig
<<
7
))
<<
24
;
xrcdn
=
0
;
xrcdn
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment