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
Kirill Smelkov
linux
Commits
1e3474d1
Commit
1e3474d1
authored
Oct 23, 2012
by
Roland Dreier
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'cxgb4' and 'mlx4' into for-next
parents
32c631f9
41929ed2
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
55 additions
and
67 deletions
+55
-67
drivers/infiniband/hw/mlx4/alias_GUID.c
drivers/infiniband/hw/mlx4/alias_GUID.c
+1
-1
drivers/infiniband/hw/mlx4/mad.c
drivers/infiniband/hw/mlx4/mad.c
+40
-45
drivers/infiniband/hw/mlx4/mcg.c
drivers/infiniband/hw/mlx4/mcg.c
+10
-8
drivers/net/ethernet/mellanox/mlx4/eq.c
drivers/net/ethernet/mellanox/mlx4/eq.c
+0
-6
drivers/net/ethernet/mellanox/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/main.c
+4
-1
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+0
-6
No files found.
drivers/infiniband/hw/mlx4/alias_GUID.c
View file @
1e3474d1
...
@@ -107,7 +107,7 @@ static __be64 get_cached_alias_guid(struct mlx4_ib_dev *dev, int port, int index
...
@@ -107,7 +107,7 @@ static __be64 get_cached_alias_guid(struct mlx4_ib_dev *dev, int port, int index
{
{
if
(
index
>=
NUM_ALIAS_GUID_PER_PORT
)
{
if
(
index
>=
NUM_ALIAS_GUID_PER_PORT
)
{
pr_err
(
"%s: ERROR: asked for index:%d
\n
"
,
__func__
,
index
);
pr_err
(
"%s: ERROR: asked for index:%d
\n
"
,
__func__
,
index
);
return
(
__force
__be64
)
((
u64
)
0xFFFFFFFFFFFFFFFFUL
)
;
return
(
__force
__be64
)
-
1
;
}
}
return
*
(
__be64
*
)
&
dev
->
sriov
.
demux
[
port
-
1
].
guid_cache
[
index
];
return
*
(
__be64
*
)
&
dev
->
sriov
.
demux
[
port
-
1
].
guid_cache
[
index
];
}
}
...
...
drivers/infiniband/hw/mlx4/mad.c
View file @
1e3474d1
...
@@ -409,38 +409,45 @@ int mlx4_ib_find_real_gid(struct ib_device *ibdev, u8 port, __be64 guid)
...
@@ -409,38 +409,45 @@ int mlx4_ib_find_real_gid(struct ib_device *ibdev, u8 port, __be64 guid)
}
}
static
int
get_pkey_phys_indices
(
struct
mlx4_ib_dev
*
ibdev
,
u8
port
,
u8
ph_pkey_ix
,
static
int
find_slave_port_pkey_ix
(
struct
mlx4_ib_dev
*
dev
,
int
slave
,
u8
*
full_pk_ix
,
u8
*
partial_pk_ix
,
u8
port
,
u16
pkey
,
u16
*
ix
)
int
*
is_full_member
)
{
{
u16
search_pkey
;
int
i
,
ret
;
int
fm
;
u8
unassigned_pkey_ix
,
pkey_ix
,
partial_ix
=
0xFF
;
int
err
=
0
;
u16
slot_pkey
;
u16
pk
;
err
=
ib_get_cached_pkey
(
&
ibdev
->
ib_dev
,
port
,
ph_pkey_ix
,
&
search_pkey
);
if
(
slave
==
mlx4_master_func_num
(
dev
->
dev
))
if
(
err
)
return
ib_find_cached_pkey
(
&
dev
->
ib_dev
,
port
,
pkey
,
ix
);
return
err
;
fm
=
(
search_pkey
&
0x8000
)
?
1
:
0
;
unassigned_pkey_ix
=
dev
->
dev
->
phys_caps
.
pkey_phys_table_len
[
port
]
-
1
;
if
(
fm
)
{
*
full_pk_ix
=
ph_pkey_ix
;
search_pkey
&=
0x7FFF
;
}
else
{
*
partial_pk_ix
=
ph_pkey_ix
;
search_pkey
|=
0x8000
;
}
if
(
ib_find_exact_cached_pkey
(
&
ibdev
->
ib_dev
,
port
,
search_pkey
,
&
pk
))
for
(
i
=
0
;
i
<
dev
->
dev
->
caps
.
pkey_table_len
[
port
];
i
++
)
{
pk
=
0xFFFF
;
if
(
dev
->
pkeys
.
virt2phys_pkey
[
slave
][
port
-
1
][
i
]
==
unassigned_pkey_ix
)
continue
;
if
(
fm
)
pkey_ix
=
dev
->
pkeys
.
virt2phys_pkey
[
slave
][
port
-
1
][
i
];
*
partial_pk_ix
=
(
pk
&
0xFF
);
else
*
full_pk_ix
=
(
pk
&
0xFF
);
*
is_full_member
=
fm
;
ret
=
ib_get_cached_pkey
(
&
dev
->
ib_dev
,
port
,
pkey_ix
,
&
slot_pkey
);
return
err
;
if
(
ret
)
continue
;
if
((
slot_pkey
&
0x7FFF
)
==
(
pkey
&
0x7FFF
))
{
if
(
slot_pkey
&
0x8000
)
{
*
ix
=
(
u16
)
pkey_ix
;
return
0
;
}
else
{
/* take first partial pkey index found */
if
(
partial_ix
==
0xFF
)
partial_ix
=
pkey_ix
;
}
}
}
if
(
partial_ix
<
0xFF
)
{
*
ix
=
(
u16
)
partial_ix
;
return
0
;
}
return
-
EINVAL
;
}
}
int
mlx4_ib_send_to_slave
(
struct
mlx4_ib_dev
*
dev
,
int
slave
,
u8
port
,
int
mlx4_ib_send_to_slave
(
struct
mlx4_ib_dev
*
dev
,
int
slave
,
u8
port
,
...
@@ -458,10 +465,8 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
...
@@ -458,10 +465,8 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
unsigned
tun_tx_ix
=
0
;
unsigned
tun_tx_ix
=
0
;
int
dqpn
;
int
dqpn
;
int
ret
=
0
;
int
ret
=
0
;
int
i
;
int
is_full_member
=
0
;
u16
tun_pkey_ix
;
u16
tun_pkey_ix
;
u
8
ph_pkey_ix
,
full_pk_ix
=
0
,
partial_pk_ix
=
0
;
u
16
cached_pkey
;
if
(
dest_qpt
>
IB_QPT_GSI
)
if
(
dest_qpt
>
IB_QPT_GSI
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -481,27 +486,17 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
...
@@ -481,27 +486,17 @@ int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port,
else
else
tun_qp
=
&
tun_ctx
->
qp
[
1
];
tun_qp
=
&
tun_ctx
->
qp
[
1
];
/* compute pkey index for slave */
/* compute P_Key index to put in tunnel header for slave */
/* get physical pkey -- virtualized Dom0 pkey to phys*/
if
(
dest_qpt
)
{
if
(
dest_qpt
)
{
ph_pkey_ix
=
u16
pkey_ix
;
dev
->
pkeys
.
virt2phys_pkey
[
mlx4_master_func_num
(
dev
->
dev
)][
port
-
1
][
wc
->
pkey_index
];
ret
=
ib_get_cached_pkey
(
&
dev
->
ib_dev
,
port
,
wc
->
pkey_index
,
&
cached_pkey
);
/* now, translate this to the slave pkey index */
ret
=
get_pkey_phys_indices
(
dev
,
port
,
ph_pkey_ix
,
&
full_pk_ix
,
&
partial_pk_ix
,
&
is_full_member
);
if
(
ret
)
if
(
ret
)
return
-
EINVAL
;
return
-
EINVAL
;
for
(
i
=
0
;
i
<
dev
->
dev
->
caps
.
pkey_table_len
[
port
];
i
++
)
{
ret
=
find_slave_port_pkey_ix
(
dev
,
slave
,
port
,
cached_pkey
,
&
pkey_ix
);
if
((
dev
->
pkeys
.
virt2phys_pkey
[
slave
][
port
-
1
][
i
]
==
full_pk_ix
)
||
if
(
ret
)
(
is_full_member
&&
(
dev
->
pkeys
.
virt2phys_pkey
[
slave
][
port
-
1
][
i
]
==
partial_pk_ix
)))
break
;
}
if
(
i
==
dev
->
dev
->
caps
.
pkey_table_len
[
port
])
return
-
EINVAL
;
return
-
EINVAL
;
tun_pkey_ix
=
i
;
tun_pkey_ix
=
pkey_ix
;
}
else
}
else
tun_pkey_ix
=
dev
->
pkeys
.
virt2phys_pkey
[
slave
][
port
-
1
][
0
];
tun_pkey_ix
=
dev
->
pkeys
.
virt2phys_pkey
[
slave
][
port
-
1
][
0
];
...
...
drivers/infiniband/hw/mlx4/mcg.c
View file @
1e3474d1
...
@@ -233,7 +233,8 @@ static int send_mad_to_slave(int slave, struct mlx4_ib_demux_ctx *ctx,
...
@@ -233,7 +233,8 @@ static int send_mad_to_slave(int slave, struct mlx4_ib_demux_ctx *ctx,
ib_query_ah
(
dev
->
sm_ah
[
ctx
->
port
-
1
],
&
ah_attr
);
ib_query_ah
(
dev
->
sm_ah
[
ctx
->
port
-
1
],
&
ah_attr
);
wc
.
pkey_index
=
0
;
if
(
ib_find_cached_pkey
(
&
dev
->
ib_dev
,
ctx
->
port
,
IB_DEFAULT_PKEY_FULL
,
&
wc
.
pkey_index
))
return
-
EINVAL
;
wc
.
sl
=
0
;
wc
.
sl
=
0
;
wc
.
dlid_path_bits
=
0
;
wc
.
dlid_path_bits
=
0
;
wc
.
port_num
=
ctx
->
port
;
wc
.
port_num
=
ctx
->
port
;
...
@@ -1074,10 +1075,6 @@ static void _mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy
...
@@ -1074,10 +1075,6 @@ static void _mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy
unsigned
long
end
;
unsigned
long
end
;
int
count
;
int
count
;
if
(
ctx
->
flushing
)
return
;
ctx
->
flushing
=
1
;
for
(
i
=
0
;
i
<
MAX_VFS
;
++
i
)
for
(
i
=
0
;
i
<
MAX_VFS
;
++
i
)
clean_vf_mcast
(
ctx
,
i
);
clean_vf_mcast
(
ctx
,
i
);
...
@@ -1107,9 +1104,6 @@ static void _mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy
...
@@ -1107,9 +1104,6 @@ static void _mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy
force_clean_group
(
group
);
force_clean_group
(
group
);
}
}
mutex_unlock
(
&
ctx
->
mcg_table_lock
);
mutex_unlock
(
&
ctx
->
mcg_table_lock
);
if
(
!
destroy_wq
)
ctx
->
flushing
=
0
;
}
}
struct
clean_work
{
struct
clean_work
{
...
@@ -1123,6 +1117,7 @@ static void mcg_clean_task(struct work_struct *work)
...
@@ -1123,6 +1117,7 @@ static void mcg_clean_task(struct work_struct *work)
struct
clean_work
*
cw
=
container_of
(
work
,
struct
clean_work
,
work
);
struct
clean_work
*
cw
=
container_of
(
work
,
struct
clean_work
,
work
);
_mlx4_ib_mcg_port_cleanup
(
cw
->
ctx
,
cw
->
destroy_wq
);
_mlx4_ib_mcg_port_cleanup
(
cw
->
ctx
,
cw
->
destroy_wq
);
cw
->
ctx
->
flushing
=
0
;
kfree
(
cw
);
kfree
(
cw
);
}
}
...
@@ -1130,13 +1125,20 @@ void mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy_wq)
...
@@ -1130,13 +1125,20 @@ void mlx4_ib_mcg_port_cleanup(struct mlx4_ib_demux_ctx *ctx, int destroy_wq)
{
{
struct
clean_work
*
work
;
struct
clean_work
*
work
;
if
(
ctx
->
flushing
)
return
;
ctx
->
flushing
=
1
;
if
(
destroy_wq
)
{
if
(
destroy_wq
)
{
_mlx4_ib_mcg_port_cleanup
(
ctx
,
destroy_wq
);
_mlx4_ib_mcg_port_cleanup
(
ctx
,
destroy_wq
);
ctx
->
flushing
=
0
;
return
;
return
;
}
}
work
=
kmalloc
(
sizeof
*
work
,
GFP_KERNEL
);
work
=
kmalloc
(
sizeof
*
work
,
GFP_KERNEL
);
if
(
!
work
)
{
if
(
!
work
)
{
ctx
->
flushing
=
0
;
mcg_warn
(
"failed allocating work for cleanup
\n
"
);
mcg_warn
(
"failed allocating work for cleanup
\n
"
);
return
;
return
;
}
}
...
...
drivers/net/ethernet/mellanox/mlx4/eq.c
View file @
1e3474d1
...
@@ -329,9 +329,6 @@ int set_and_calc_slave_port_state(struct mlx4_dev *dev, int slave,
...
@@ -329,9 +329,6 @@ int set_and_calc_slave_port_state(struct mlx4_dev *dev, int slave,
ctx
=
&
priv
->
mfunc
.
master
.
slave_state
[
slave
];
ctx
=
&
priv
->
mfunc
.
master
.
slave_state
[
slave
];
spin_lock_irqsave
(
&
ctx
->
lock
,
flags
);
spin_lock_irqsave
(
&
ctx
->
lock
,
flags
);
mlx4_dbg
(
dev
,
"%s: slave: %d, current state: %d new event :%d
\n
"
,
__func__
,
slave
,
cur_state
,
event
);
switch
(
cur_state
)
{
switch
(
cur_state
)
{
case
SLAVE_PORT_DOWN
:
case
SLAVE_PORT_DOWN
:
if
(
MLX4_PORT_STATE_DEV_EVENT_PORT_UP
==
event
)
if
(
MLX4_PORT_STATE_DEV_EVENT_PORT_UP
==
event
)
...
@@ -366,9 +363,6 @@ int set_and_calc_slave_port_state(struct mlx4_dev *dev, int slave,
...
@@ -366,9 +363,6 @@ int set_and_calc_slave_port_state(struct mlx4_dev *dev, int slave,
goto
out
;
goto
out
;
}
}
ret
=
mlx4_get_slave_port_state
(
dev
,
slave
,
port
);
ret
=
mlx4_get_slave_port_state
(
dev
,
slave
,
port
);
mlx4_dbg
(
dev
,
"%s: slave: %d, current state: %d new event"
" :%d gen_event: %d
\n
"
,
__func__
,
slave
,
cur_state
,
event
,
*
gen_event
);
out:
out:
spin_unlock_irqrestore
(
&
ctx
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
ctx
->
lock
,
flags
);
...
...
drivers/net/ethernet/mellanox/mlx4/main.c
View file @
1e3474d1
...
@@ -1405,7 +1405,10 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
...
@@ -1405,7 +1405,10 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
unmap_bf_area
(
dev
);
unmap_bf_area
(
dev
);
err_close:
err_close:
mlx4_close_hca
(
dev
);
if
(
mlx4_is_slave
(
dev
))
mlx4_slave_exit
(
dev
);
else
mlx4_CLOSE_HCA
(
dev
,
0
);
err_free_icm:
err_free_icm:
if
(
!
mlx4_is_slave
(
dev
))
if
(
!
mlx4_is_slave
(
dev
))
...
...
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
View file @
1e3474d1
...
@@ -330,9 +330,6 @@ static void update_pkey_index(struct mlx4_dev *dev, int slave,
...
@@ -330,9 +330,6 @@ static void update_pkey_index(struct mlx4_dev *dev, int slave,
new_index
=
priv
->
virt2phys_pkey
[
slave
][
port
-
1
][
orig_index
];
new_index
=
priv
->
virt2phys_pkey
[
slave
][
port
-
1
][
orig_index
];
*
(
u8
*
)(
inbox
->
buf
+
35
)
=
new_index
;
*
(
u8
*
)(
inbox
->
buf
+
35
)
=
new_index
;
mlx4_dbg
(
dev
,
"port = %d, orig pkey index = %d, "
"new pkey index = %d
\n
"
,
port
,
orig_index
,
new_index
);
}
}
static
void
update_gid
(
struct
mlx4_dev
*
dev
,
struct
mlx4_cmd_mailbox
*
inbox
,
static
void
update_gid
(
struct
mlx4_dev
*
dev
,
struct
mlx4_cmd_mailbox
*
inbox
,
...
@@ -351,9 +348,6 @@ static void update_gid(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *inbox,
...
@@ -351,9 +348,6 @@ static void update_gid(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *inbox,
if
(
optpar
&
MLX4_QP_OPTPAR_ALT_ADDR_PATH
)
if
(
optpar
&
MLX4_QP_OPTPAR_ALT_ADDR_PATH
)
qp_ctx
->
alt_path
.
mgid_index
=
slave
&
0x7F
;
qp_ctx
->
alt_path
.
mgid_index
=
slave
&
0x7F
;
}
}
mlx4_dbg
(
dev
,
"slave %d, new gid index: 0x%x "
,
slave
,
qp_ctx
->
pri_path
.
mgid_index
);
}
}
static
int
mpt_mask
(
struct
mlx4_dev
*
dev
)
static
int
mpt_mask
(
struct
mlx4_dev
*
dev
)
...
...
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