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
1583676d
Commit
1583676d
authored
Jan 04, 2012
by
Roland Dreier
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'cma', 'misc', 'mlx4', 'nes', 'qib' and 'uverbs' into for-next
parents
c89d1bed
6f233d30
9106c410
196f40c8
8d4548f2
e214a0fe
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
99 additions
and
58 deletions
+99
-58
drivers/infiniband/core/cm_msgs.h
drivers/infiniband/core/cm_msgs.h
+1
-0
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/uverbs_cmd.c
+17
-4
drivers/infiniband/hw/mlx4/ah.c
drivers/infiniband/hw/mlx4/ah.c
+1
-1
drivers/infiniband/hw/mlx4/cq.c
drivers/infiniband/hw/mlx4/cq.c
+5
-1
drivers/infiniband/hw/mlx4/qp.c
drivers/infiniband/hw/mlx4/qp.c
+2
-2
drivers/infiniband/hw/nes/nes_cm.c
drivers/infiniband/hw/nes/nes_cm.c
+1
-0
drivers/infiniband/hw/nes/nes_hw.c
drivers/infiniband/hw/nes/nes_hw.c
+1
-5
drivers/infiniband/hw/nes/nes_utils.c
drivers/infiniband/hw/nes/nes_utils.c
+1
-1
drivers/infiniband/hw/qib/qib_7220.h
drivers/infiniband/hw/qib/qib_7220.h
+1
-1
drivers/infiniband/hw/qib/qib_driver.c
drivers/infiniband/hw/qib/qib_driver.c
+1
-2
drivers/infiniband/hw/qib/qib_iba6120.c
drivers/infiniband/hw/qib/qib_iba6120.c
+3
-1
drivers/infiniband/hw/qib/qib_iba7220.c
drivers/infiniband/hw/qib/qib_iba7220.c
+6
-4
drivers/infiniband/hw/qib/qib_iba7322.c
drivers/infiniband/hw/qib/qib_iba7322.c
+20
-20
drivers/infiniband/hw/qib/qib_init.c
drivers/infiniband/hw/qib/qib_init.c
+1
-1
drivers/infiniband/hw/qib/qib_pcie.c
drivers/infiniband/hw/qib/qib_pcie.c
+2
-2
drivers/infiniband/hw/qib/qib_qsfp.h
drivers/infiniband/hw/qib/qib_qsfp.h
+1
-1
drivers/infiniband/hw/qib/qib_sd7220.c
drivers/infiniband/hw/qib/qib_sd7220.c
+1
-1
drivers/infiniband/hw/qib/qib_sysfs.c
drivers/infiniband/hw/qib/qib_sysfs.c
+1
-1
drivers/infiniband/hw/qib/qib_verbs.c
drivers/infiniband/hw/qib/qib_verbs.c
+33
-10
No files found.
drivers/infiniband/core/cm_msgs.h
View file @
1583676d
...
@@ -799,6 +799,7 @@ struct cm_apr_msg {
...
@@ -799,6 +799,7 @@ struct cm_apr_msg {
u8
info_length
;
u8
info_length
;
u8
ap_status
;
u8
ap_status
;
__be16
rsvd
;
u8
info
[
IB_CM_APR_INFO_LENGTH
];
u8
info
[
IB_CM_APR_INFO_LENGTH
];
u8
private_data
[
IB_CM_APR_PRIVATE_DATA_SIZE
];
u8
private_data
[
IB_CM_APR_PRIVATE_DATA_SIZE
];
...
...
drivers/infiniband/core/uverbs_cmd.c
View file @
1583676d
...
@@ -241,11 +241,24 @@ static struct ib_qp *idr_read_qp(int qp_handle, struct ib_ucontext *context)
...
@@ -241,11 +241,24 @@ static struct ib_qp *idr_read_qp(int qp_handle, struct ib_ucontext *context)
return
idr_read_obj
(
&
ib_uverbs_qp_idr
,
qp_handle
,
context
,
0
);
return
idr_read_obj
(
&
ib_uverbs_qp_idr
,
qp_handle
,
context
,
0
);
}
}
static
struct
ib_qp
*
idr_write_qp
(
int
qp_handle
,
struct
ib_ucontext
*
context
)
{
struct
ib_uobject
*
uobj
;
uobj
=
idr_write_uobj
(
&
ib_uverbs_qp_idr
,
qp_handle
,
context
);
return
uobj
?
uobj
->
object
:
NULL
;
}
static
void
put_qp_read
(
struct
ib_qp
*
qp
)
static
void
put_qp_read
(
struct
ib_qp
*
qp
)
{
{
put_uobj_read
(
qp
->
uobject
);
put_uobj_read
(
qp
->
uobject
);
}
}
static
void
put_qp_write
(
struct
ib_qp
*
qp
)
{
put_uobj_write
(
qp
->
uobject
);
}
static
struct
ib_srq
*
idr_read_srq
(
int
srq_handle
,
struct
ib_ucontext
*
context
)
static
struct
ib_srq
*
idr_read_srq
(
int
srq_handle
,
struct
ib_ucontext
*
context
)
{
{
return
idr_read_obj
(
&
ib_uverbs_srq_idr
,
srq_handle
,
context
,
0
);
return
idr_read_obj
(
&
ib_uverbs_srq_idr
,
srq_handle
,
context
,
0
);
...
@@ -2375,7 +2388,7 @@ ssize_t ib_uverbs_attach_mcast(struct ib_uverbs_file *file,
...
@@ -2375,7 +2388,7 @@ ssize_t ib_uverbs_attach_mcast(struct ib_uverbs_file *file,
if
(
copy_from_user
(
&
cmd
,
buf
,
sizeof
cmd
))
if
(
copy_from_user
(
&
cmd
,
buf
,
sizeof
cmd
))
return
-
EFAULT
;
return
-
EFAULT
;
qp
=
idr_
read
_qp
(
cmd
.
qp_handle
,
file
->
ucontext
);
qp
=
idr_
write
_qp
(
cmd
.
qp_handle
,
file
->
ucontext
);
if
(
!
qp
)
if
(
!
qp
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -2404,7 +2417,7 @@ ssize_t ib_uverbs_attach_mcast(struct ib_uverbs_file *file,
...
@@ -2404,7 +2417,7 @@ ssize_t ib_uverbs_attach_mcast(struct ib_uverbs_file *file,
kfree
(
mcast
);
kfree
(
mcast
);
out_put:
out_put:
put_qp_
read
(
qp
);
put_qp_
write
(
qp
);
return
ret
?
ret
:
in_len
;
return
ret
?
ret
:
in_len
;
}
}
...
@@ -2422,7 +2435,7 @@ ssize_t ib_uverbs_detach_mcast(struct ib_uverbs_file *file,
...
@@ -2422,7 +2435,7 @@ ssize_t ib_uverbs_detach_mcast(struct ib_uverbs_file *file,
if
(
copy_from_user
(
&
cmd
,
buf
,
sizeof
cmd
))
if
(
copy_from_user
(
&
cmd
,
buf
,
sizeof
cmd
))
return
-
EFAULT
;
return
-
EFAULT
;
qp
=
idr_
read
_qp
(
cmd
.
qp_handle
,
file
->
ucontext
);
qp
=
idr_
write
_qp
(
cmd
.
qp_handle
,
file
->
ucontext
);
if
(
!
qp
)
if
(
!
qp
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -2441,7 +2454,7 @@ ssize_t ib_uverbs_detach_mcast(struct ib_uverbs_file *file,
...
@@ -2441,7 +2454,7 @@ ssize_t ib_uverbs_detach_mcast(struct ib_uverbs_file *file,
}
}
out_put:
out_put:
put_qp_
read
(
qp
);
put_qp_
write
(
qp
);
return
ret
?
ret
:
in_len
;
return
ret
?
ret
:
in_len
;
}
}
...
...
drivers/infiniband/hw/mlx4/ah.c
View file @
1583676d
...
@@ -126,7 +126,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr
...
@@ -126,7 +126,7 @@ static struct ib_ah *create_iboe_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr
ah
->
av
.
ib
.
dlid
=
cpu_to_be16
(
0xc000
);
ah
->
av
.
ib
.
dlid
=
cpu_to_be16
(
0xc000
);
memcpy
(
ah
->
av
.
eth
.
dgid
,
ah_attr
->
grh
.
dgid
.
raw
,
16
);
memcpy
(
ah
->
av
.
eth
.
dgid
,
ah_attr
->
grh
.
dgid
.
raw
,
16
);
ah
->
av
.
eth
.
sl_tclass_flowlabel
=
cpu_to_be32
(
ah_attr
->
sl
<<
2
8
);
ah
->
av
.
eth
.
sl_tclass_flowlabel
=
cpu_to_be32
(
ah_attr
->
sl
<<
2
9
);
return
&
ah
->
ibah
;
return
&
ah
->
ibah
;
}
}
...
...
drivers/infiniband/hw/mlx4/cq.c
View file @
1583676d
...
@@ -715,13 +715,17 @@ static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,
...
@@ -715,13 +715,17 @@ static int mlx4_ib_poll_one(struct mlx4_ib_cq *cq,
}
}
wc
->
slid
=
be16_to_cpu
(
cqe
->
rlid
);
wc
->
slid
=
be16_to_cpu
(
cqe
->
rlid
);
wc
->
sl
=
be16_to_cpu
(
cqe
->
sl_vid
)
>>
12
;
g_mlpath_rqpn
=
be32_to_cpu
(
cqe
->
g_mlpath_rqpn
);
g_mlpath_rqpn
=
be32_to_cpu
(
cqe
->
g_mlpath_rqpn
);
wc
->
src_qp
=
g_mlpath_rqpn
&
0xffffff
;
wc
->
src_qp
=
g_mlpath_rqpn
&
0xffffff
;
wc
->
dlid_path_bits
=
(
g_mlpath_rqpn
>>
24
)
&
0x7f
;
wc
->
dlid_path_bits
=
(
g_mlpath_rqpn
>>
24
)
&
0x7f
;
wc
->
wc_flags
|=
g_mlpath_rqpn
&
0x80000000
?
IB_WC_GRH
:
0
;
wc
->
wc_flags
|=
g_mlpath_rqpn
&
0x80000000
?
IB_WC_GRH
:
0
;
wc
->
pkey_index
=
be32_to_cpu
(
cqe
->
immed_rss_invalid
)
&
0x7f
;
wc
->
pkey_index
=
be32_to_cpu
(
cqe
->
immed_rss_invalid
)
&
0x7f
;
wc
->
csum_ok
=
mlx4_ib_ipoib_csum_ok
(
cqe
->
status
,
cqe
->
checksum
);
wc
->
csum_ok
=
mlx4_ib_ipoib_csum_ok
(
cqe
->
status
,
cqe
->
checksum
);
if
(
rdma_port_get_link_layer
(
wc
->
qp
->
device
,
(
*
cur_qp
)
->
port
)
==
IB_LINK_LAYER_ETHERNET
)
wc
->
sl
=
be16_to_cpu
(
cqe
->
sl_vid
)
>>
13
;
else
wc
->
sl
=
be16_to_cpu
(
cqe
->
sl_vid
)
>>
12
;
}
}
return
0
;
return
0
;
...
...
drivers/infiniband/hw/mlx4/qp.c
View file @
1583676d
...
@@ -962,7 +962,7 @@ static int mlx4_set_path(struct mlx4_ib_dev *dev, const struct ib_ah_attr *ah,
...
@@ -962,7 +962,7 @@ static int mlx4_set_path(struct mlx4_ib_dev *dev, const struct ib_ah_attr *ah,
if
(
is_eth
)
{
if
(
is_eth
)
{
path
->
sched_queue
=
MLX4_IB_DEFAULT_SCHED_QUEUE
|
path
->
sched_queue
=
MLX4_IB_DEFAULT_SCHED_QUEUE
|
((
port
-
1
)
<<
6
)
|
((
ah
->
sl
&
7
)
<<
3
)
|
((
ah
->
sl
&
8
)
>>
1
)
;
((
port
-
1
)
<<
6
)
|
((
ah
->
sl
&
7
)
<<
3
);
if
(
!
(
ah
->
ah_flags
&
IB_AH_GRH
))
if
(
!
(
ah
->
ah_flags
&
IB_AH_GRH
))
return
-
1
;
return
-
1
;
...
@@ -1437,7 +1437,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
...
@@ -1437,7 +1437,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
u16
pcp
;
u16
pcp
;
sqp
->
ud_header
.
vlan
.
type
=
cpu_to_be16
(
MLX4_IB_IBOE_ETHERTYPE
);
sqp
->
ud_header
.
vlan
.
type
=
cpu_to_be16
(
MLX4_IB_IBOE_ETHERTYPE
);
pcp
=
(
be32_to_cpu
(
ah
->
av
.
ib
.
sl_tclass_flowlabel
)
>>
2
7
&
3
)
<<
13
;
pcp
=
(
be32_to_cpu
(
ah
->
av
.
ib
.
sl_tclass_flowlabel
)
>>
2
9
)
<<
13
;
sqp
->
ud_header
.
vlan
.
tag
=
cpu_to_be16
(
vlan
|
pcp
);
sqp
->
ud_header
.
vlan
.
tag
=
cpu_to_be16
(
vlan
|
pcp
);
}
}
}
else
{
}
else
{
...
...
drivers/infiniband/hw/nes/nes_cm.c
View file @
1583676d
...
@@ -2838,6 +2838,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
...
@@ -2838,6 +2838,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
issue_disconn
=
1
;
issue_disconn
=
1
;
issue_close
=
1
;
issue_close
=
1
;
nesqp
->
cm_id
=
NULL
;
nesqp
->
cm_id
=
NULL
;
del_timer
(
&
nesqp
->
terminate_timer
);
if
(
nesqp
->
flush_issued
==
0
)
{
if
(
nesqp
->
flush_issued
==
0
)
{
nesqp
->
flush_issued
=
1
;
nesqp
->
flush_issued
=
1
;
issue_flush
=
1
;
issue_flush
=
1
;
...
...
drivers/infiniband/hw/nes/nes_hw.c
View file @
1583676d
...
@@ -1529,7 +1529,7 @@ int nes_init_phy(struct nes_device *nesdev)
...
@@ -1529,7 +1529,7 @@ int nes_init_phy(struct nes_device *nesdev)
}
else
{
}
else
{
/* setup 10G MDIO operation */
/* setup 10G MDIO operation */
tx_config
&=
0xFFFFFFE3
;
tx_config
&=
0xFFFFFFE3
;
tx_config
|=
0x1
5
;
tx_config
|=
0x1
D
;
}
}
nes_write_indexed
(
nesdev
,
NES_IDX_MAC_TX_CONFIG
,
tx_config
);
nes_write_indexed
(
nesdev
,
NES_IDX_MAC_TX_CONFIG
,
tx_config
);
...
@@ -3619,10 +3619,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
...
@@ -3619,10 +3619,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
}
}
break
;
break
;
case
NES_AEQE_AEID_LLP_CLOSE_COMPLETE
:
case
NES_AEQE_AEID_LLP_CLOSE_COMPLETE
:
if
(
nesqp
->
term_flags
)
{
nes_terminate_done
(
nesqp
,
0
);
return
;
}
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
nesqp
->
hw_iwarp_state
=
iwarp_state
;
nesqp
->
hw_iwarp_state
=
iwarp_state
;
nesqp
->
hw_tcp_state
=
tcp_state
;
nesqp
->
hw_tcp_state
=
tcp_state
;
...
...
drivers/infiniband/hw/nes/nes_utils.c
View file @
1583676d
...
@@ -56,7 +56,7 @@ static u16 nes_read16_eeprom(void __iomem *addr, u16 offset);
...
@@ -56,7 +56,7 @@ static u16 nes_read16_eeprom(void __iomem *addr, u16 offset);
u32
mh_detected
;
u32
mh_detected
;
u32
mh_pauses_sent
;
u32
mh_pauses_sent
;
u32
nes_set_pau
(
struct
nes_device
*
nesdev
)
static
u32
nes_set_pau
(
struct
nes_device
*
nesdev
)
{
{
u32
ret
=
0
;
u32
ret
=
0
;
u32
counter
;
u32
counter
;
...
...
drivers/infiniband/hw/qib/qib_7220.h
View file @
1583676d
...
@@ -97,7 +97,7 @@ struct qib_chippport_specific {
...
@@ -97,7 +97,7 @@ struct qib_chippport_specific {
u64
iblnkerrsnap
;
u64
iblnkerrsnap
;
u64
ibcctrl
;
/* kr_ibcctrl shadow */
u64
ibcctrl
;
/* kr_ibcctrl shadow */
u64
ibcddrctrl
;
/* kr_ibcddrctrl shadow */
u64
ibcddrctrl
;
/* kr_ibcddrctrl shadow */
u
64
chase_end
;
u
nsigned
long
chase_end
;
u32
last_delay_mult
;
u32
last_delay_mult
;
};
};
...
...
drivers/infiniband/hw/qib/qib_driver.c
View file @
1583676d
...
@@ -371,9 +371,8 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,
...
@@ -371,9 +371,8 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,
lnh
==
QIB_LRH_GRH
,
lnh
==
QIB_LRH_GRH
,
qp
,
qp
,
be32_to_cpu
(
ohdr
->
bth
[
0
]));
be32_to_cpu
(
ohdr
->
bth
[
0
]));
if
(
ruc_res
)
{
if
(
ruc_res
)
goto
unlock
;
goto
unlock
;
}
/* Only deal with RDMA Writes for now */
/* Only deal with RDMA Writes for now */
if
(
opcode
<
if
(
opcode
<
...
...
drivers/infiniband/hw/qib/qib_iba6120.c
View file @
1583676d
...
@@ -2076,9 +2076,11 @@ static void qib_6120_config_ctxts(struct qib_devdata *dd)
...
@@ -2076,9 +2076,11 @@ static void qib_6120_config_ctxts(struct qib_devdata *dd)
static
void
qib_update_6120_usrhead
(
struct
qib_ctxtdata
*
rcd
,
u64
hd
,
static
void
qib_update_6120_usrhead
(
struct
qib_ctxtdata
*
rcd
,
u64
hd
,
u32
updegr
,
u32
egrhd
,
u32
npkts
)
u32
updegr
,
u32
egrhd
,
u32
npkts
)
{
{
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
if
(
updegr
)
if
(
updegr
)
qib_write_ureg
(
rcd
->
dd
,
ur_rcvegrindexhead
,
egrhd
,
rcd
->
ctxt
);
qib_write_ureg
(
rcd
->
dd
,
ur_rcvegrindexhead
,
egrhd
,
rcd
->
ctxt
);
mmiowb
();
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
mmiowb
();
}
}
static
u32
qib_6120_hdrqempty
(
struct
qib_ctxtdata
*
rcd
)
static
u32
qib_6120_hdrqempty
(
struct
qib_ctxtdata
*
rcd
)
...
...
drivers/infiniband/hw/qib/qib_iba7220.c
View file @
1583676d
...
@@ -1051,7 +1051,7 @@ static void reenable_7220_chase(unsigned long opaque)
...
@@ -1051,7 +1051,7 @@ static void reenable_7220_chase(unsigned long opaque)
static
void
handle_7220_chase
(
struct
qib_pportdata
*
ppd
,
u64
ibcst
)
static
void
handle_7220_chase
(
struct
qib_pportdata
*
ppd
,
u64
ibcst
)
{
{
u8
ibclt
;
u8
ibclt
;
u
64
tnow
;
u
nsigned
long
tnow
;
ibclt
=
(
u8
)
SYM_FIELD
(
ibcst
,
IBCStatus
,
LinkTrainingState
);
ibclt
=
(
u8
)
SYM_FIELD
(
ibcst
,
IBCStatus
,
LinkTrainingState
);
...
@@ -1066,9 +1066,9 @@ static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst)
...
@@ -1066,9 +1066,9 @@ static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst)
case
IB_7220_LT_STATE_CFGWAITRMT
:
case
IB_7220_LT_STATE_CFGWAITRMT
:
case
IB_7220_LT_STATE_TXREVLANES
:
case
IB_7220_LT_STATE_TXREVLANES
:
case
IB_7220_LT_STATE_CFGENH
:
case
IB_7220_LT_STATE_CFGENH
:
tnow
=
get_jiffies_64
()
;
tnow
=
jiffies
;
if
(
ppd
->
cpspec
->
chase_end
&&
if
(
ppd
->
cpspec
->
chase_end
&&
time_after
64
(
tnow
,
ppd
->
cpspec
->
chase_end
))
{
time_after
(
tnow
,
ppd
->
cpspec
->
chase_end
))
{
ppd
->
cpspec
->
chase_end
=
0
;
ppd
->
cpspec
->
chase_end
=
0
;
qib_set_ib_7220_lstate
(
ppd
,
qib_set_ib_7220_lstate
(
ppd
,
QLOGIC_IB_IBCC_LINKCMD_DOWN
,
QLOGIC_IB_IBCC_LINKCMD_DOWN
,
...
@@ -2725,9 +2725,11 @@ static int qib_7220_set_loopback(struct qib_pportdata *ppd, const char *what)
...
@@ -2725,9 +2725,11 @@ static int qib_7220_set_loopback(struct qib_pportdata *ppd, const char *what)
static
void
qib_update_7220_usrhead
(
struct
qib_ctxtdata
*
rcd
,
u64
hd
,
static
void
qib_update_7220_usrhead
(
struct
qib_ctxtdata
*
rcd
,
u64
hd
,
u32
updegr
,
u32
egrhd
,
u32
npkts
)
u32
updegr
,
u32
egrhd
,
u32
npkts
)
{
{
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
if
(
updegr
)
if
(
updegr
)
qib_write_ureg
(
rcd
->
dd
,
ur_rcvegrindexhead
,
egrhd
,
rcd
->
ctxt
);
qib_write_ureg
(
rcd
->
dd
,
ur_rcvegrindexhead
,
egrhd
,
rcd
->
ctxt
);
mmiowb
();
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
mmiowb
();
}
}
static
u32
qib_7220_hdrqempty
(
struct
qib_ctxtdata
*
rcd
)
static
u32
qib_7220_hdrqempty
(
struct
qib_ctxtdata
*
rcd
)
...
...
drivers/infiniband/hw/qib/qib_iba7322.c
View file @
1583676d
...
@@ -615,8 +615,8 @@ struct qib_chippport_specific {
...
@@ -615,8 +615,8 @@ struct qib_chippport_specific {
u64
ibmalfsnap
;
u64
ibmalfsnap
;
u64
ibcctrl_a
;
/* krp_ibcctrl_a shadow */
u64
ibcctrl_a
;
/* krp_ibcctrl_a shadow */
u64
ibcctrl_b
;
/* krp_ibcctrl_b shadow */
u64
ibcctrl_b
;
/* krp_ibcctrl_b shadow */
u
64
qdr_dfe_time
;
u
nsigned
long
qdr_dfe_time
;
u
64
chase_end
;
u
nsigned
long
chase_end
;
u32
autoneg_tries
;
u32
autoneg_tries
;
u32
recovery_init
;
u32
recovery_init
;
u32
qdr_dfe_on
;
u32
qdr_dfe_on
;
...
@@ -1672,7 +1672,8 @@ static void reenable_chase(unsigned long opaque)
...
@@ -1672,7 +1672,8 @@ static void reenable_chase(unsigned long opaque)
QLOGIC_IB_IBCC_LINKINITCMD_POLL
);
QLOGIC_IB_IBCC_LINKINITCMD_POLL
);
}
}
static
void
disable_chase
(
struct
qib_pportdata
*
ppd
,
u64
tnow
,
u8
ibclt
)
static
void
disable_chase
(
struct
qib_pportdata
*
ppd
,
unsigned
long
tnow
,
u8
ibclt
)
{
{
ppd
->
cpspec
->
chase_end
=
0
;
ppd
->
cpspec
->
chase_end
=
0
;
...
@@ -1688,7 +1689,7 @@ static void disable_chase(struct qib_pportdata *ppd, u64 tnow, u8 ibclt)
...
@@ -1688,7 +1689,7 @@ static void disable_chase(struct qib_pportdata *ppd, u64 tnow, u8 ibclt)
static
void
handle_serdes_issues
(
struct
qib_pportdata
*
ppd
,
u64
ibcst
)
static
void
handle_serdes_issues
(
struct
qib_pportdata
*
ppd
,
u64
ibcst
)
{
{
u8
ibclt
;
u8
ibclt
;
u
64
tnow
;
u
nsigned
long
tnow
;
ibclt
=
(
u8
)
SYM_FIELD
(
ibcst
,
IBCStatusA_0
,
LinkTrainingState
);
ibclt
=
(
u8
)
SYM_FIELD
(
ibcst
,
IBCStatusA_0
,
LinkTrainingState
);
...
@@ -1703,9 +1704,9 @@ static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst)
...
@@ -1703,9 +1704,9 @@ static void handle_serdes_issues(struct qib_pportdata *ppd, u64 ibcst)
case
IB_7322_LT_STATE_CFGWAITRMT
:
case
IB_7322_LT_STATE_CFGWAITRMT
:
case
IB_7322_LT_STATE_TXREVLANES
:
case
IB_7322_LT_STATE_TXREVLANES
:
case
IB_7322_LT_STATE_CFGENH
:
case
IB_7322_LT_STATE_CFGENH
:
tnow
=
get_jiffies_64
()
;
tnow
=
jiffies
;
if
(
ppd
->
cpspec
->
chase_end
&&
if
(
ppd
->
cpspec
->
chase_end
&&
time_after
64
(
tnow
,
ppd
->
cpspec
->
chase_end
))
time_after
(
tnow
,
ppd
->
cpspec
->
chase_end
))
disable_chase
(
ppd
,
tnow
,
ibclt
);
disable_chase
(
ppd
,
tnow
,
ibclt
);
else
if
(
!
ppd
->
cpspec
->
chase_end
)
else
if
(
!
ppd
->
cpspec
->
chase_end
)
ppd
->
cpspec
->
chase_end
=
tnow
+
QIB_CHASE_TIME
;
ppd
->
cpspec
->
chase_end
=
tnow
+
QIB_CHASE_TIME
;
...
@@ -2714,7 +2715,7 @@ static noinline void unknown_7322_gpio_intr(struct qib_devdata *dd)
...
@@ -2714,7 +2715,7 @@ static noinline void unknown_7322_gpio_intr(struct qib_devdata *dd)
pins
>>=
SYM_LSB
(
EXTStatus
,
GPIOIn
);
pins
>>=
SYM_LSB
(
EXTStatus
,
GPIOIn
);
if
(
!
(
pins
&
mask
))
{
if
(
!
(
pins
&
mask
))
{
++
handled
;
++
handled
;
qd
->
t_insert
=
get_jiffies_64
()
;
qd
->
t_insert
=
jiffies
;
queue_work
(
ib_wq
,
&
qd
->
work
);
queue_work
(
ib_wq
,
&
qd
->
work
);
}
}
}
}
...
@@ -3602,7 +3603,7 @@ static void qib_7322_config_ctxts(struct qib_devdata *dd)
...
@@ -3602,7 +3603,7 @@ static void qib_7322_config_ctxts(struct qib_devdata *dd)
if
(
qib_rcvhdrcnt
)
if
(
qib_rcvhdrcnt
)
dd
->
rcvhdrcnt
=
max
(
dd
->
cspec
->
rcvegrcnt
,
qib_rcvhdrcnt
);
dd
->
rcvhdrcnt
=
max
(
dd
->
cspec
->
rcvegrcnt
,
qib_rcvhdrcnt
);
else
else
dd
->
rcvhdrcnt
=
max
(
dd
->
cspec
->
rcvegrcnt
,
dd
->
rcvhdrcnt
=
2
*
max
(
dd
->
cspec
->
rcvegrcnt
,
dd
->
num_pports
>
1
?
1024U
:
2048U
);
dd
->
num_pports
>
1
?
1024U
:
2048U
);
}
}
...
@@ -4082,10 +4083,12 @@ static void qib_update_7322_usrhead(struct qib_ctxtdata *rcd, u64 hd,
...
@@ -4082,10 +4083,12 @@ static void qib_update_7322_usrhead(struct qib_ctxtdata *rcd, u64 hd,
*/
*/
if
(
hd
>>
IBA7322_HDRHEAD_PKTINT_SHIFT
)
if
(
hd
>>
IBA7322_HDRHEAD_PKTINT_SHIFT
)
adjust_rcv_timeout
(
rcd
,
npkts
);
adjust_rcv_timeout
(
rcd
,
npkts
);
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
if
(
updegr
)
if
(
updegr
)
qib_write_ureg
(
rcd
->
dd
,
ur_rcvegrindexhead
,
egrhd
,
rcd
->
ctxt
);
qib_write_ureg
(
rcd
->
dd
,
ur_rcvegrindexhead
,
egrhd
,
rcd
->
ctxt
);
mmiowb
();
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
qib_write_ureg
(
rcd
->
dd
,
ur_rcvhdrhead
,
hd
,
rcd
->
ctxt
);
mmiowb
();
}
}
static
u32
qib_7322_hdrqempty
(
struct
qib_ctxtdata
*
rcd
)
static
u32
qib_7322_hdrqempty
(
struct
qib_ctxtdata
*
rcd
)
...
@@ -4794,7 +4797,7 @@ static void qib_get_7322_faststats(unsigned long opaque)
...
@@ -4794,7 +4797,7 @@ static void qib_get_7322_faststats(unsigned long opaque)
(
ppd
->
lflags
&
(
QIBL_LINKINIT
|
QIBL_LINKARMED
|
(
ppd
->
lflags
&
(
QIBL_LINKINIT
|
QIBL_LINKARMED
|
QIBL_LINKACTIVE
))
&&
QIBL_LINKACTIVE
))
&&
ppd
->
cpspec
->
qdr_dfe_time
&&
ppd
->
cpspec
->
qdr_dfe_time
&&
time_
after64
(
get_jiffies_64
(),
ppd
->
cpspec
->
qdr_dfe_time
))
{
time_
is_before_jiffies
(
ppd
->
cpspec
->
qdr_dfe_time
))
{
ppd
->
cpspec
->
qdr_dfe_on
=
0
;
ppd
->
cpspec
->
qdr_dfe_on
=
0
;
qib_write_kreg_port
(
ppd
,
krp_static_adapt_dis
(
2
),
qib_write_kreg_port
(
ppd
,
krp_static_adapt_dis
(
2
),
...
@@ -5240,7 +5243,7 @@ static int qib_7322_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs)
...
@@ -5240,7 +5243,7 @@ static int qib_7322_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs)
/* schedule the qsfp refresh which should turn the link
/* schedule the qsfp refresh which should turn the link
off */
off */
if
(
ppd
->
dd
->
flags
&
QIB_HAS_QSFP
)
{
if
(
ppd
->
dd
->
flags
&
QIB_HAS_QSFP
)
{
qd
->
t_insert
=
get_jiffies_64
()
;
qd
->
t_insert
=
jiffies
;
queue_work
(
ib_wq
,
&
qd
->
work
);
queue_work
(
ib_wq
,
&
qd
->
work
);
}
}
spin_lock_irqsave
(
&
ppd
->
sdma_lock
,
flags
);
spin_lock_irqsave
(
&
ppd
->
sdma_lock
,
flags
);
...
@@ -5592,7 +5595,7 @@ static void qsfp_7322_event(struct work_struct *work)
...
@@ -5592,7 +5595,7 @@ static void qsfp_7322_event(struct work_struct *work)
{
{
struct
qib_qsfp_data
*
qd
;
struct
qib_qsfp_data
*
qd
;
struct
qib_pportdata
*
ppd
;
struct
qib_pportdata
*
ppd
;
u
64
pwrup
;
u
nsigned
long
pwrup
;
unsigned
long
flags
;
unsigned
long
flags
;
int
ret
;
int
ret
;
u32
le2
;
u32
le2
;
...
@@ -5620,8 +5623,7 @@ static void qsfp_7322_event(struct work_struct *work)
...
@@ -5620,8 +5623,7 @@ static void qsfp_7322_event(struct work_struct *work)
* to insertion.
* to insertion.
*/
*/
while
(
1
)
{
while
(
1
)
{
u64
now
=
get_jiffies_64
();
if
(
time_is_before_jiffies
(
pwrup
))
if
(
time_after64
(
now
,
pwrup
))
break
;
break
;
msleep
(
20
);
msleep
(
20
);
}
}
...
@@ -7506,7 +7508,7 @@ static int serdes_7322_init_old(struct qib_pportdata *ppd)
...
@@ -7506,7 +7508,7 @@ static int serdes_7322_init_old(struct qib_pportdata *ppd)
static
int
serdes_7322_init_new
(
struct
qib_pportdata
*
ppd
)
static
int
serdes_7322_init_new
(
struct
qib_pportdata
*
ppd
)
{
{
u
64
tstart
;
u
nsigned
long
tend
;
u32
le_val
,
rxcaldone
;
u32
le_val
,
rxcaldone
;
int
chan
,
chan_done
=
(
1
<<
SERDES_CHANS
)
-
1
;
int
chan
,
chan_done
=
(
1
<<
SERDES_CHANS
)
-
1
;
...
@@ -7611,10 +7613,8 @@ static int serdes_7322_init_new(struct qib_pportdata *ppd)
...
@@ -7611,10 +7613,8 @@ static int serdes_7322_init_new(struct qib_pportdata *ppd)
msleep
(
20
);
msleep
(
20
);
/* Start Calibration */
/* Start Calibration */
ibsd_wr_allchans
(
ppd
,
4
,
(
1
<<
10
),
BMASK
(
10
,
10
));
ibsd_wr_allchans
(
ppd
,
4
,
(
1
<<
10
),
BMASK
(
10
,
10
));
tstart
=
get_jiffies_64
();
tend
=
jiffies
+
msecs_to_jiffies
(
500
);
while
(
chan_done
&&
while
(
chan_done
&&
!
time_is_before_jiffies
(
tend
))
{
!
time_after64
(
get_jiffies_64
(),
tstart
+
msecs_to_jiffies
(
500
)))
{
msleep
(
20
);
msleep
(
20
);
for
(
chan
=
0
;
chan
<
SERDES_CHANS
;
++
chan
)
{
for
(
chan
=
0
;
chan
<
SERDES_CHANS
;
++
chan
)
{
rxcaldone
=
ahb_mod
(
ppd
->
dd
,
IBSD
(
ppd
->
hw_pidx
),
rxcaldone
=
ahb_mod
(
ppd
->
dd
,
IBSD
(
ppd
->
hw_pidx
),
...
...
drivers/infiniband/hw/qib/qib_init.c
View file @
1583676d
...
@@ -1015,7 +1015,7 @@ static int __devinit qib_init_one(struct pci_dev *,
...
@@ -1015,7 +1015,7 @@ static int __devinit qib_init_one(struct pci_dev *,
#define DRIVER_LOAD_MSG "QLogic " QIB_DRV_NAME " loaded: "
#define DRIVER_LOAD_MSG "QLogic " QIB_DRV_NAME " loaded: "
#define PFX QIB_DRV_NAME ": "
#define PFX QIB_DRV_NAME ": "
static
const
struct
pci_device_id
qib_pci_tbl
[]
=
{
static
DEFINE_PCI_DEVICE_TABLE
(
qib_pci_tbl
)
=
{
{
PCI_DEVICE
(
PCI_VENDOR_ID_PATHSCALE
,
PCI_DEVICE_ID_QLOGIC_IB_6120
)
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_PATHSCALE
,
PCI_DEVICE_ID_QLOGIC_IB_6120
)
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_QLOGIC
,
PCI_DEVICE_ID_QLOGIC_IB_7220
)
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_QLOGIC
,
PCI_DEVICE_ID_QLOGIC_IB_7220
)
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_QLOGIC
,
PCI_DEVICE_ID_QLOGIC_IB_7322
)
},
{
PCI_DEVICE
(
PCI_VENDOR_ID_QLOGIC
,
PCI_DEVICE_ID_QLOGIC_IB_7322
)
},
...
...
drivers/infiniband/hw/qib/qib_pcie.c
View file @
1583676d
...
@@ -560,9 +560,9 @@ static int qib_tune_pcie_coalesce(struct qib_devdata *dd)
...
@@ -560,9 +560,9 @@ static int qib_tune_pcie_coalesce(struct qib_devdata *dd)
* BIOS may not set PCIe bus-utilization parameters for best performance.
* BIOS may not set PCIe bus-utilization parameters for best performance.
* Check and optionally adjust them to maximize our throughput.
* Check and optionally adjust them to maximize our throughput.
*/
*/
static
int
qib_pcie_caps
;
static
int
qib_pcie_caps
=
0x51
;
module_param_named
(
pcie_caps
,
qib_pcie_caps
,
int
,
S_IRUGO
);
module_param_named
(
pcie_caps
,
qib_pcie_caps
,
int
,
S_IRUGO
);
MODULE_PARM_DESC
(
pcie_caps
,
"Max PCIe tuning: Payload (
4lsb), ReadReq (D
4..7)"
);
MODULE_PARM_DESC
(
pcie_caps
,
"Max PCIe tuning: Payload (
0..3), ReadReq (
4..7)"
);
static
int
qib_tune_pcie_caps
(
struct
qib_devdata
*
dd
)
static
int
qib_tune_pcie_caps
(
struct
qib_devdata
*
dd
)
{
{
...
...
drivers/infiniband/hw/qib/qib_qsfp.h
View file @
1583676d
...
@@ -177,7 +177,7 @@ struct qib_qsfp_data {
...
@@ -177,7 +177,7 @@ struct qib_qsfp_data {
struct
qib_pportdata
*
ppd
;
struct
qib_pportdata
*
ppd
;
struct
work_struct
work
;
struct
work_struct
work
;
struct
qib_qsfp_cache
cache
;
struct
qib_qsfp_cache
cache
;
u
64
t_insert
;
u
nsigned
long
t_insert
;
u8
modpresent
;
u8
modpresent
;
};
};
...
...
drivers/infiniband/hw/qib/qib_sd7220.c
View file @
1583676d
...
@@ -300,7 +300,7 @@ static int qib_ibsd_reset(struct qib_devdata *dd, int assert_rst)
...
@@ -300,7 +300,7 @@ static int qib_ibsd_reset(struct qib_devdata *dd, int assert_rst)
}
}
static
void
qib_sd_trimdone_monitor
(
struct
qib_devdata
*
dd
,
static
void
qib_sd_trimdone_monitor
(
struct
qib_devdata
*
dd
,
const
char
*
where
)
const
char
*
where
)
{
{
int
ret
,
chn
,
baduns
;
int
ret
,
chn
,
baduns
;
u64
val
;
u64
val
;
...
...
drivers/infiniband/hw/qib/qib_sysfs.c
View file @
1583676d
...
@@ -150,7 +150,7 @@ static ssize_t show_status(struct qib_pportdata *ppd, char *buf)
...
@@ -150,7 +150,7 @@ static ssize_t show_status(struct qib_pportdata *ppd, char *buf)
* For userland compatibility, these offsets must remain fixed.
* For userland compatibility, these offsets must remain fixed.
* They are strings for QIB_STATUS_*
* They are strings for QIB_STATUS_*
*/
*/
static
const
char
*
qib_status_str
[]
=
{
static
const
char
*
const
qib_status_str
[]
=
{
"Initted"
,
"Initted"
,
""
,
""
,
""
,
""
,
...
...
drivers/infiniband/hw/qib/qib_verbs.c
View file @
1583676d
...
@@ -913,8 +913,8 @@ static void copy_io(u32 __iomem *piobuf, struct qib_sge_state *ss,
...
@@ -913,8 +913,8 @@ static void copy_io(u32 __iomem *piobuf, struct qib_sge_state *ss,
__raw_writel
(
last
,
piobuf
);
__raw_writel
(
last
,
piobuf
);
}
}
static
struct
qib_verbs_txreq
*
get_txreq
(
struct
qib_ibdev
*
dev
,
static
noinline
struct
qib_verbs_txreq
*
__
get_txreq
(
struct
qib_ibdev
*
dev
,
struct
qib_qp
*
qp
,
int
*
ret
p
)
struct
qib_qp
*
q
p
)
{
{
struct
qib_verbs_txreq
*
tx
;
struct
qib_verbs_txreq
*
tx
;
unsigned
long
flags
;
unsigned
long
flags
;
...
@@ -926,8 +926,9 @@ static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
...
@@ -926,8 +926,9 @@ static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
struct
list_head
*
l
=
dev
->
txreq_free
.
next
;
struct
list_head
*
l
=
dev
->
txreq_free
.
next
;
list_del
(
l
);
list_del
(
l
);
spin_unlock
(
&
dev
->
pending_lock
);
spin_unlock_irqrestore
(
&
qp
->
s_lock
,
flags
);
tx
=
list_entry
(
l
,
struct
qib_verbs_txreq
,
txreq
.
list
);
tx
=
list_entry
(
l
,
struct
qib_verbs_txreq
,
txreq
.
list
);
*
retp
=
0
;
}
else
{
}
else
{
if
(
ib_qib_state_ops
[
qp
->
state
]
&
QIB_PROCESS_RECV_OK
&&
if
(
ib_qib_state_ops
[
qp
->
state
]
&
QIB_PROCESS_RECV_OK
&&
list_empty
(
&
qp
->
iowait
))
{
list_empty
(
&
qp
->
iowait
))
{
...
@@ -935,14 +936,33 @@ static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
...
@@ -935,14 +936,33 @@ static struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
qp
->
s_flags
|=
QIB_S_WAIT_TX
;
qp
->
s_flags
|=
QIB_S_WAIT_TX
;
list_add_tail
(
&
qp
->
iowait
,
&
dev
->
txwait
);
list_add_tail
(
&
qp
->
iowait
,
&
dev
->
txwait
);
}
}
tx
=
NULL
;
qp
->
s_flags
&=
~
QIB_S_BUSY
;
qp
->
s_flags
&=
~
QIB_S_BUSY
;
*
retp
=
-
EBUSY
;
spin_unlock
(
&
dev
->
pending_lock
);
spin_unlock_irqrestore
(
&
qp
->
s_lock
,
flags
);
tx
=
ERR_PTR
(
-
EBUSY
);
}
}
return
tx
;
}
spin_unlock
(
&
dev
->
pending_lock
);
static
inline
struct
qib_verbs_txreq
*
get_txreq
(
struct
qib_ibdev
*
dev
,
spin_unlock_irqrestore
(
&
qp
->
s_lock
,
flags
);
struct
qib_qp
*
qp
)
{
struct
qib_verbs_txreq
*
tx
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
dev
->
pending_lock
,
flags
);
/* assume the list non empty */
if
(
likely
(
!
list_empty
(
&
dev
->
txreq_free
)))
{
struct
list_head
*
l
=
dev
->
txreq_free
.
next
;
list_del
(
l
);
spin_unlock_irqrestore
(
&
dev
->
pending_lock
,
flags
);
tx
=
list_entry
(
l
,
struct
qib_verbs_txreq
,
txreq
.
list
);
}
else
{
/* call slow path to get the extra lock */
spin_unlock_irqrestore
(
&
dev
->
pending_lock
,
flags
);
tx
=
__get_txreq
(
dev
,
qp
);
}
return
tx
;
return
tx
;
}
}
...
@@ -1122,9 +1142,9 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
...
@@ -1122,9 +1142,9 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
goto
bail
;
goto
bail
;
}
}
tx
=
get_txreq
(
dev
,
qp
,
&
ret
);
tx
=
get_txreq
(
dev
,
qp
);
if
(
!
tx
)
if
(
IS_ERR
(
tx
)
)
goto
bail
;
goto
bail
_tx
;
control
=
dd
->
f_setpbc_control
(
ppd
,
plen
,
qp
->
s_srate
,
control
=
dd
->
f_setpbc_control
(
ppd
,
plen
,
qp
->
s_srate
,
be16_to_cpu
(
hdr
->
lrh
[
0
])
>>
12
);
be16_to_cpu
(
hdr
->
lrh
[
0
])
>>
12
);
...
@@ -1195,6 +1215,9 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
...
@@ -1195,6 +1215,9 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
ibp
->
n_unaligned
++
;
ibp
->
n_unaligned
++
;
bail:
bail:
return
ret
;
return
ret
;
bail_tx:
ret
=
PTR_ERR
(
tx
);
goto
bail
;
}
}
/*
/*
...
...
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