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
ac8581d4
Commit
ac8581d4
authored
Jan 16, 2009
by
Roland Dreier
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'ehca', 'ipoib' and 'mlx4' into for-linus
parents
ee96aae5
3c209620
0fd7e1d8
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
28 deletions
+46
-28
drivers/infiniband/hw/mlx4/qp.c
drivers/infiniband/hw/mlx4/qp.c
+19
-9
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/infiniband/ulp/ipoib/ipoib_main.c
+15
-12
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+1
-1
drivers/infiniband/ulp/ipoib/ipoib_vlan.c
drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+8
-3
drivers/net/mlx4/profile.c
drivers/net/mlx4/profile.c
+3
-3
No files found.
drivers/infiniband/hw/mlx4/qp.c
View file @
ac8581d4
...
@@ -1462,7 +1462,8 @@ static void __set_data_seg(struct mlx4_wqe_data_seg *dseg, struct ib_sge *sg)
...
@@ -1462,7 +1462,8 @@ static void __set_data_seg(struct mlx4_wqe_data_seg *dseg, struct ib_sge *sg)
}
}
static
int
build_lso_seg
(
struct
mlx4_wqe_lso_seg
*
wqe
,
struct
ib_send_wr
*
wr
,
static
int
build_lso_seg
(
struct
mlx4_wqe_lso_seg
*
wqe
,
struct
ib_send_wr
*
wr
,
struct
mlx4_ib_qp
*
qp
,
unsigned
*
lso_seg_len
)
struct
mlx4_ib_qp
*
qp
,
unsigned
*
lso_seg_len
,
__be32
*
lso_hdr_sz
)
{
{
unsigned
halign
=
ALIGN
(
sizeof
*
wqe
+
wr
->
wr
.
ud
.
hlen
,
16
);
unsigned
halign
=
ALIGN
(
sizeof
*
wqe
+
wr
->
wr
.
ud
.
hlen
,
16
);
...
@@ -1479,12 +1480,8 @@ static int build_lso_seg(struct mlx4_wqe_lso_seg *wqe, struct ib_send_wr *wr,
...
@@ -1479,12 +1480,8 @@ static int build_lso_seg(struct mlx4_wqe_lso_seg *wqe, struct ib_send_wr *wr,
memcpy
(
wqe
->
header
,
wr
->
wr
.
ud
.
header
,
wr
->
wr
.
ud
.
hlen
);
memcpy
(
wqe
->
header
,
wr
->
wr
.
ud
.
header
,
wr
->
wr
.
ud
.
hlen
);
/* make sure LSO header is written before overwriting stamping */
*
lso_hdr_sz
=
cpu_to_be32
((
wr
->
wr
.
ud
.
mss
-
wr
->
wr
.
ud
.
hlen
)
<<
16
|
wmb
();
wqe
->
mss_hdr_size
=
cpu_to_be32
((
wr
->
wr
.
ud
.
mss
-
wr
->
wr
.
ud
.
hlen
)
<<
16
|
wr
->
wr
.
ud
.
hlen
);
wr
->
wr
.
ud
.
hlen
);
*
lso_seg_len
=
halign
;
*
lso_seg_len
=
halign
;
return
0
;
return
0
;
}
}
...
@@ -1518,6 +1515,9 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
...
@@ -1518,6 +1515,9 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
int
uninitialized_var
(
stamp
);
int
uninitialized_var
(
stamp
);
int
uninitialized_var
(
size
);
int
uninitialized_var
(
size
);
unsigned
uninitialized_var
(
seglen
);
unsigned
uninitialized_var
(
seglen
);
__be32
dummy
;
__be32
*
lso_wqe
;
__be32
uninitialized_var
(
lso_hdr_sz
);
int
i
;
int
i
;
spin_lock_irqsave
(
&
qp
->
sq
.
lock
,
flags
);
spin_lock_irqsave
(
&
qp
->
sq
.
lock
,
flags
);
...
@@ -1525,6 +1525,8 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
...
@@ -1525,6 +1525,8 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
ind
=
qp
->
sq_next_wqe
;
ind
=
qp
->
sq_next_wqe
;
for
(
nreq
=
0
;
wr
;
++
nreq
,
wr
=
wr
->
next
)
{
for
(
nreq
=
0
;
wr
;
++
nreq
,
wr
=
wr
->
next
)
{
lso_wqe
=
&
dummy
;
if
(
mlx4_wq_overflow
(
&
qp
->
sq
,
nreq
,
qp
->
ibqp
.
send_cq
))
{
if
(
mlx4_wq_overflow
(
&
qp
->
sq
,
nreq
,
qp
->
ibqp
.
send_cq
))
{
err
=
-
ENOMEM
;
err
=
-
ENOMEM
;
*
bad_wr
=
wr
;
*
bad_wr
=
wr
;
...
@@ -1606,11 +1608,12 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
...
@@ -1606,11 +1608,12 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
size
+=
sizeof
(
struct
mlx4_wqe_datagram_seg
)
/
16
;
size
+=
sizeof
(
struct
mlx4_wqe_datagram_seg
)
/
16
;
if
(
wr
->
opcode
==
IB_WR_LSO
)
{
if
(
wr
->
opcode
==
IB_WR_LSO
)
{
err
=
build_lso_seg
(
wqe
,
wr
,
qp
,
&
seglen
);
err
=
build_lso_seg
(
wqe
,
wr
,
qp
,
&
seglen
,
&
lso_hdr_sz
);
if
(
unlikely
(
err
))
{
if
(
unlikely
(
err
))
{
*
bad_wr
=
wr
;
*
bad_wr
=
wr
;
goto
out
;
goto
out
;
}
}
lso_wqe
=
(
__be32
*
)
wqe
;
wqe
+=
seglen
;
wqe
+=
seglen
;
size
+=
seglen
/
16
;
size
+=
seglen
/
16
;
}
}
...
@@ -1652,6 +1655,14 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
...
@@ -1652,6 +1655,14 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
for
(
i
=
wr
->
num_sge
-
1
;
i
>=
0
;
--
i
,
--
dseg
)
for
(
i
=
wr
->
num_sge
-
1
;
i
>=
0
;
--
i
,
--
dseg
)
set_data_seg
(
dseg
,
wr
->
sg_list
+
i
);
set_data_seg
(
dseg
,
wr
->
sg_list
+
i
);
/*
* Possibly overwrite stamping in cacheline with LSO
* segment only after making sure all data segments
* are written.
*/
wmb
();
*
lso_wqe
=
lso_hdr_sz
;
ctrl
->
fence_size
=
(
wr
->
send_flags
&
IB_SEND_FENCE
?
ctrl
->
fence_size
=
(
wr
->
send_flags
&
IB_SEND_FENCE
?
MLX4_WQE_CTRL_FENCE
:
0
)
|
size
;
MLX4_WQE_CTRL_FENCE
:
0
)
|
size
;
...
@@ -1686,7 +1697,6 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
...
@@ -1686,7 +1697,6 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
stamp_send_wqe
(
qp
,
stamp
,
size
*
16
);
stamp_send_wqe
(
qp
,
stamp
,
size
*
16
);
ind
=
pad_wraparound
(
qp
,
ind
);
ind
=
pad_wraparound
(
qp
,
ind
);
}
}
}
}
out:
out:
...
...
drivers/infiniband/ulp/ipoib/ipoib_main.c
View file @
ac8581d4
...
@@ -106,23 +106,17 @@ int ipoib_open(struct net_device *dev)
...
@@ -106,23 +106,17 @@ int ipoib_open(struct net_device *dev)
ipoib_dbg
(
priv
,
"bringing up interface
\n
"
);
ipoib_dbg
(
priv
,
"bringing up interface
\n
"
);
set_bit
(
IPOIB_FLAG_ADMIN_UP
,
&
priv
->
flags
);
if
(
!
test_and_set_bit
(
IPOIB_FLAG_ADMIN_UP
,
&
priv
->
flags
))
napi_enable
(
&
priv
->
napi
);
if
(
ipoib_pkey_dev_delay_open
(
dev
))
if
(
ipoib_pkey_dev_delay_open
(
dev
))
return
0
;
return
0
;
napi_enable
(
&
priv
->
napi
);
if
(
ipoib_ib_dev_open
(
dev
))
goto
err_disable
;
if
(
ipoib_ib_dev_open
(
dev
))
{
if
(
ipoib_ib_dev_up
(
dev
))
napi_disable
(
&
priv
->
napi
);
goto
err_stop
;
return
-
EINVAL
;
}
if
(
ipoib_ib_dev_up
(
dev
))
{
ipoib_ib_dev_stop
(
dev
,
1
);
napi_disable
(
&
priv
->
napi
);
return
-
EINVAL
;
}
if
(
!
test_bit
(
IPOIB_FLAG_SUBINTERFACE
,
&
priv
->
flags
))
{
if
(
!
test_bit
(
IPOIB_FLAG_SUBINTERFACE
,
&
priv
->
flags
))
{
struct
ipoib_dev_priv
*
cpriv
;
struct
ipoib_dev_priv
*
cpriv
;
...
@@ -144,6 +138,15 @@ int ipoib_open(struct net_device *dev)
...
@@ -144,6 +138,15 @@ int ipoib_open(struct net_device *dev)
netif_start_queue
(
dev
);
netif_start_queue
(
dev
);
return
0
;
return
0
;
err_stop:
ipoib_ib_dev_stop
(
dev
,
1
);
err_disable:
napi_disable
(
&
priv
->
napi
);
clear_bit
(
IPOIB_FLAG_ADMIN_UP
,
&
priv
->
flags
);
return
-
EINVAL
;
}
}
static
int
ipoib_stop
(
struct
net_device
*
dev
)
static
int
ipoib_stop
(
struct
net_device
*
dev
)
...
...
drivers/infiniband/ulp/ipoib/ipoib_multicast.c
View file @
ac8581d4
...
@@ -409,7 +409,7 @@ static int ipoib_mcast_join_complete(int status,
...
@@ -409,7 +409,7 @@ static int ipoib_mcast_join_complete(int status,
}
}
if
(
mcast
->
logcount
++
<
20
)
{
if
(
mcast
->
logcount
++
<
20
)
{
if
(
status
==
-
ETIMEDOUT
)
{
if
(
status
==
-
ETIMEDOUT
||
status
==
-
EAGAIN
)
{
ipoib_dbg_mcast
(
priv
,
"multicast join failed for %pI6, status %d
\n
"
,
ipoib_dbg_mcast
(
priv
,
"multicast join failed for %pI6, status %d
\n
"
,
mcast
->
mcmember
.
mgid
.
raw
,
status
);
mcast
->
mcmember
.
mgid
.
raw
,
status
);
}
else
{
}
else
{
...
...
drivers/infiniband/ulp/ipoib/ipoib_vlan.c
View file @
ac8581d4
...
@@ -61,6 +61,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
...
@@ -61,6 +61,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
ppriv
=
netdev_priv
(
pdev
);
ppriv
=
netdev_priv
(
pdev
);
rtnl_lock
();
mutex_lock
(
&
ppriv
->
vlan_mutex
);
mutex_lock
(
&
ppriv
->
vlan_mutex
);
/*
/*
...
@@ -111,7 +112,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
...
@@ -111,7 +112,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
goto
device_init_failed
;
goto
device_init_failed
;
}
}
result
=
register_netdev
(
priv
->
dev
);
result
=
register_netdev
ice
(
priv
->
dev
);
if
(
result
)
{
if
(
result
)
{
ipoib_warn
(
priv
,
"failed to initialize; error %i"
,
result
);
ipoib_warn
(
priv
,
"failed to initialize; error %i"
,
result
);
goto
register_failed
;
goto
register_failed
;
...
@@ -134,12 +135,13 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
...
@@ -134,12 +135,13 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
list_add_tail
(
&
priv
->
list
,
&
ppriv
->
child_intfs
);
list_add_tail
(
&
priv
->
list
,
&
ppriv
->
child_intfs
);
mutex_unlock
(
&
ppriv
->
vlan_mutex
);
mutex_unlock
(
&
ppriv
->
vlan_mutex
);
rtnl_unlock
();
return
0
;
return
0
;
sysfs_failed:
sysfs_failed:
ipoib_delete_debug_files
(
priv
->
dev
);
ipoib_delete_debug_files
(
priv
->
dev
);
unregister_netdev
(
priv
->
dev
);
unregister_netdev
ice
(
priv
->
dev
);
register_failed:
register_failed:
ipoib_dev_cleanup
(
priv
->
dev
);
ipoib_dev_cleanup
(
priv
->
dev
);
...
@@ -149,6 +151,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
...
@@ -149,6 +151,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
err:
err:
mutex_unlock
(
&
ppriv
->
vlan_mutex
);
mutex_unlock
(
&
ppriv
->
vlan_mutex
);
rtnl_unlock
();
return
result
;
return
result
;
}
}
...
@@ -162,10 +165,11 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
...
@@ -162,10 +165,11 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
ppriv
=
netdev_priv
(
pdev
);
ppriv
=
netdev_priv
(
pdev
);
rtnl_lock
();
mutex_lock
(
&
ppriv
->
vlan_mutex
);
mutex_lock
(
&
ppriv
->
vlan_mutex
);
list_for_each_entry_safe
(
priv
,
tpriv
,
&
ppriv
->
child_intfs
,
list
)
{
list_for_each_entry_safe
(
priv
,
tpriv
,
&
ppriv
->
child_intfs
,
list
)
{
if
(
priv
->
pkey
==
pkey
)
{
if
(
priv
->
pkey
==
pkey
)
{
unregister_netdev
(
priv
->
dev
);
unregister_netdev
ice
(
priv
->
dev
);
ipoib_dev_cleanup
(
priv
->
dev
);
ipoib_dev_cleanup
(
priv
->
dev
);
list_del
(
&
priv
->
list
);
list_del
(
&
priv
->
list
);
free_netdev
(
priv
->
dev
);
free_netdev
(
priv
->
dev
);
...
@@ -175,6 +179,7 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
...
@@ -175,6 +179,7 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
}
}
}
}
mutex_unlock
(
&
ppriv
->
vlan_mutex
);
mutex_unlock
(
&
ppriv
->
vlan_mutex
);
rtnl_unlock
();
return
ret
;
return
ret
;
}
}
drivers/net/mlx4/profile.c
View file @
ac8581d4
...
@@ -107,7 +107,7 @@ u64 mlx4_make_profile(struct mlx4_dev *dev,
...
@@ -107,7 +107,7 @@ u64 mlx4_make_profile(struct mlx4_dev *dev,
profile
[
MLX4_RES_AUXC
].
num
=
request
->
num_qp
;
profile
[
MLX4_RES_AUXC
].
num
=
request
->
num_qp
;
profile
[
MLX4_RES_SRQ
].
num
=
request
->
num_srq
;
profile
[
MLX4_RES_SRQ
].
num
=
request
->
num_srq
;
profile
[
MLX4_RES_CQ
].
num
=
request
->
num_cq
;
profile
[
MLX4_RES_CQ
].
num
=
request
->
num_cq
;
profile
[
MLX4_RES_EQ
].
num
=
min
(
dev_cap
->
max_eqs
,
profile
[
MLX4_RES_EQ
].
num
=
min
_t
(
unsigned
,
dev_cap
->
max_eqs
,
dev_cap
->
reserved_eqs
+
dev_cap
->
reserved_eqs
+
num_possible_cpus
()
+
1
);
num_possible_cpus
()
+
1
);
profile
[
MLX4_RES_DMPT
].
num
=
request
->
num_mpt
;
profile
[
MLX4_RES_DMPT
].
num
=
request
->
num_mpt
;
...
...
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