Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
c35a2549
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c35a2549
编写于
11月 12, 2008
作者:
R
Roland Dreier
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'cxgb3', 'ehca', 'ipath', 'ipoib', 'mlx4' and 'nes' into for-next
上级
b3e123cf
fad96ab6
a8b56f29
ff79ae80
7f3abf5c
63369366
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
106 addition
and
50 deletion
+106
-50
drivers/infiniband/hw/ehca/ehca_irq.c
drivers/infiniband/hw/ehca/ehca_irq.c
+28
-16
drivers/infiniband/hw/ehca/ehca_qp.c
drivers/infiniband/hw/ehca/ehca_qp.c
+5
-0
drivers/infiniband/hw/ipath/ipath_ruc.c
drivers/infiniband/hw/ipath/ipath_ruc.c
+5
-5
drivers/infiniband/hw/mlx4/mr.c
drivers/infiniband/hw/mlx4/mr.c
+1
-0
drivers/infiniband/hw/nes/nes.c
drivers/infiniband/hw/nes/nes.c
+16
-0
drivers/infiniband/hw/nes/nes_hw.h
drivers/infiniband/hw/nes/nes_hw.h
+1
-0
drivers/infiniband/hw/nes/nes_verbs.c
drivers/infiniband/hw/nes/nes_verbs.c
+43
-21
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/infiniband/ulp/ipoib/ipoib_main.c
+4
-2
drivers/net/mlx4/mlx4.h
drivers/net/mlx4/mlx4.h
+3
-6
未找到文件。
drivers/infiniband/hw/ehca/ehca_irq.c
浏览文件 @
c35a2549
...
@@ -359,36 +359,48 @@ static void notify_port_conf_change(struct ehca_shca *shca, int port_num)
...
@@ -359,36 +359,48 @@ static void notify_port_conf_change(struct ehca_shca *shca, int port_num)
*
old_attr
=
new_attr
;
*
old_attr
=
new_attr
;
}
}
/* replay modify_qp for sqps -- return 0 if all is well, 1 if AQP1 destroyed */
static
int
replay_modify_qp
(
struct
ehca_sport
*
sport
)
{
int
aqp1_destroyed
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
sport
->
mod_sqp_lock
,
flags
);
aqp1_destroyed
=
!
sport
->
ibqp_sqp
[
IB_QPT_GSI
];
if
(
sport
->
ibqp_sqp
[
IB_QPT_SMI
])
ehca_recover_sqp
(
sport
->
ibqp_sqp
[
IB_QPT_SMI
]);
if
(
!
aqp1_destroyed
)
ehca_recover_sqp
(
sport
->
ibqp_sqp
[
IB_QPT_GSI
]);
spin_unlock_irqrestore
(
&
sport
->
mod_sqp_lock
,
flags
);
return
aqp1_destroyed
;
}
static
void
parse_ec
(
struct
ehca_shca
*
shca
,
u64
eqe
)
static
void
parse_ec
(
struct
ehca_shca
*
shca
,
u64
eqe
)
{
{
u8
ec
=
EHCA_BMASK_GET
(
NEQE_EVENT_CODE
,
eqe
);
u8
ec
=
EHCA_BMASK_GET
(
NEQE_EVENT_CODE
,
eqe
);
u8
port
=
EHCA_BMASK_GET
(
NEQE_PORT_NUMBER
,
eqe
);
u8
port
=
EHCA_BMASK_GET
(
NEQE_PORT_NUMBER
,
eqe
);
u8
spec_event
;
u8
spec_event
;
struct
ehca_sport
*
sport
=
&
shca
->
sport
[
port
-
1
];
struct
ehca_sport
*
sport
=
&
shca
->
sport
[
port
-
1
];
unsigned
long
flags
;
switch
(
ec
)
{
switch
(
ec
)
{
case
0x30
:
/* port availability change */
case
0x30
:
/* port availability change */
if
(
EHCA_BMASK_GET
(
NEQE_PORT_AVAILABILITY
,
eqe
))
{
if
(
EHCA_BMASK_GET
(
NEQE_PORT_AVAILABILITY
,
eqe
))
{
int
suppress_event
;
/* only replay modify_qp calls in autodetect mode;
/* replay modify_qp for sqps */
* if AQP1 was destroyed, the port is already down
spin_lock_irqsave
(
&
sport
->
mod_sqp_lock
,
flags
);
* again and we can drop the event.
suppress_event
=
!
sport
->
ibqp_sqp
[
IB_QPT_GSI
];
*/
if
(
sport
->
ibqp_sqp
[
IB_QPT_SMI
])
if
(
ehca_nr_ports
<
0
)
ehca_recover_sqp
(
sport
->
ibqp_sqp
[
IB_QPT_SMI
]);
if
(
replay_modify_qp
(
sport
))
if
(
!
suppress_event
)
break
;
ehca_recover_sqp
(
sport
->
ibqp_sqp
[
IB_QPT_GSI
]);
spin_unlock_irqrestore
(
&
sport
->
mod_sqp_lock
,
flags
);
/* AQP1 was destroyed, ignore this event */
if
(
suppress_event
)
break
;
sport
->
port_state
=
IB_PORT_ACTIVE
;
sport
->
port_state
=
IB_PORT_ACTIVE
;
dispatch_port_event
(
shca
,
port
,
IB_EVENT_PORT_ACTIVE
,
dispatch_port_event
(
shca
,
port
,
IB_EVENT_PORT_ACTIVE
,
"is active"
);
"is active"
);
ehca_query_sma_attr
(
shca
,
port
,
ehca_query_sma_attr
(
shca
,
port
,
&
sport
->
saved_attr
);
&
sport
->
saved_attr
);
}
else
{
}
else
{
sport
->
port_state
=
IB_PORT_DOWN
;
sport
->
port_state
=
IB_PORT_DOWN
;
dispatch_port_event
(
shca
,
port
,
IB_EVENT_PORT_ERR
,
dispatch_port_event
(
shca
,
port
,
IB_EVENT_PORT_ERR
,
...
...
drivers/infiniband/hw/ehca/ehca_qp.c
浏览文件 @
c35a2549
...
@@ -860,6 +860,11 @@ static struct ehca_qp *internal_create_qp(
...
@@ -860,6 +860,11 @@ static struct ehca_qp *internal_create_qp(
if
(
qp_type
==
IB_QPT_GSI
)
{
if
(
qp_type
==
IB_QPT_GSI
)
{
h_ret
=
ehca_define_sqp
(
shca
,
my_qp
,
init_attr
);
h_ret
=
ehca_define_sqp
(
shca
,
my_qp
,
init_attr
);
if
(
h_ret
!=
H_SUCCESS
)
{
if
(
h_ret
!=
H_SUCCESS
)
{
kfree
(
my_qp
->
mod_qp_parm
);
my_qp
->
mod_qp_parm
=
NULL
;
/* the QP pointer is no longer valid */
shca
->
sport
[
init_attr
->
port_num
-
1
].
ibqp_sqp
[
qp_type
]
=
NULL
;
ret
=
ehca2ib_return_code
(
h_ret
);
ret
=
ehca2ib_return_code
(
h_ret
);
goto
create_qp_exit6
;
goto
create_qp_exit6
;
}
}
...
...
drivers/infiniband/hw/ipath/ipath_ruc.c
浏览文件 @
c35a2549
...
@@ -156,7 +156,7 @@ int ipath_init_sge(struct ipath_qp *qp, struct ipath_rwqe *wqe,
...
@@ -156,7 +156,7 @@ int ipath_init_sge(struct ipath_qp *qp, struct ipath_rwqe *wqe,
/**
/**
* ipath_get_rwqe - copy the next RWQE into the QP's RWQE
* ipath_get_rwqe - copy the next RWQE into the QP's RWQE
* @qp: the QP
* @qp: the QP
* @wr_id_only: update
wr_id only, not SGEs
* @wr_id_only: update
qp->r_wr_id only, not qp->r_sge
*
*
* Return 0 if no RWQE is available, otherwise return 1.
* Return 0 if no RWQE is available, otherwise return 1.
*
*
...
@@ -173,8 +173,6 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only)
...
@@ -173,8 +173,6 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only)
u32
tail
;
u32
tail
;
int
ret
;
int
ret
;
qp
->
r_sge
.
sg_list
=
qp
->
r_sg_list
;
if
(
qp
->
ibqp
.
srq
)
{
if
(
qp
->
ibqp
.
srq
)
{
srq
=
to_isrq
(
qp
->
ibqp
.
srq
);
srq
=
to_isrq
(
qp
->
ibqp
.
srq
);
handler
=
srq
->
ibsrq
.
event_handler
;
handler
=
srq
->
ibsrq
.
event_handler
;
...
@@ -206,8 +204,10 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only)
...
@@ -206,8 +204,10 @@ int ipath_get_rwqe(struct ipath_qp *qp, int wr_id_only)
wqe
=
get_rwqe_ptr
(
rq
,
tail
);
wqe
=
get_rwqe_ptr
(
rq
,
tail
);
if
(
++
tail
>=
rq
->
size
)
if
(
++
tail
>=
rq
->
size
)
tail
=
0
;
tail
=
0
;
}
while
(
!
wr_id_only
&&
!
ipath_init_sge
(
qp
,
wqe
,
&
qp
->
r_len
,
if
(
wr_id_only
)
&
qp
->
r_sge
));
break
;
qp
->
r_sge
.
sg_list
=
qp
->
r_sg_list
;
}
while
(
!
ipath_init_sge
(
qp
,
wqe
,
&
qp
->
r_len
,
&
qp
->
r_sge
));
qp
->
r_wr_id
=
wqe
->
wr_id
;
qp
->
r_wr_id
=
wqe
->
wr_id
;
wq
->
tail
=
tail
;
wq
->
tail
=
tail
;
...
...
drivers/infiniband/hw/mlx4/mr.c
浏览文件 @
c35a2549
...
@@ -205,6 +205,7 @@ struct ib_mr *mlx4_ib_alloc_fast_reg_mr(struct ib_pd *pd,
...
@@ -205,6 +205,7 @@ struct ib_mr *mlx4_ib_alloc_fast_reg_mr(struct ib_pd *pd,
goto
err_mr
;
goto
err_mr
;
mr
->
ibmr
.
rkey
=
mr
->
ibmr
.
lkey
=
mr
->
mmr
.
key
;
mr
->
ibmr
.
rkey
=
mr
->
ibmr
.
lkey
=
mr
->
mmr
.
key
;
mr
->
umem
=
NULL
;
return
&
mr
->
ibmr
;
return
&
mr
->
ibmr
;
...
...
drivers/infiniband/hw/nes/nes.c
浏览文件 @
c35a2549
...
@@ -95,6 +95,10 @@ unsigned int wqm_quanta = 0x10000;
...
@@ -95,6 +95,10 @@ unsigned int wqm_quanta = 0x10000;
module_param
(
wqm_quanta
,
int
,
0644
);
module_param
(
wqm_quanta
,
int
,
0644
);
MODULE_PARM_DESC
(
wqm_quanta
,
"WQM quanta"
);
MODULE_PARM_DESC
(
wqm_quanta
,
"WQM quanta"
);
static
unsigned
int
limit_maxrdreqsz
;
module_param
(
limit_maxrdreqsz
,
bool
,
0644
);
MODULE_PARM_DESC
(
limit_maxrdreqsz
,
"Limit max read request size to 256 Bytes"
);
LIST_HEAD
(
nes_adapter_list
);
LIST_HEAD
(
nes_adapter_list
);
static
LIST_HEAD
(
nes_dev_list
);
static
LIST_HEAD
(
nes_dev_list
);
...
@@ -588,6 +592,18 @@ static int __devinit nes_probe(struct pci_dev *pcidev, const struct pci_device_i
...
@@ -588,6 +592,18 @@ static int __devinit nes_probe(struct pci_dev *pcidev, const struct pci_device_i
nesdev
->
nesadapter
->
port_count
;
nesdev
->
nesadapter
->
port_count
;
}
}
if
((
limit_maxrdreqsz
||
((
nesdev
->
nesadapter
->
phy_type
[
0
]
==
NES_PHY_TYPE_GLADIUS
)
&&
(
hw_rev
==
NE020_REV1
)))
&&
(
pcie_get_readrq
(
pcidev
)
>
256
))
{
if
(
pcie_set_readrq
(
pcidev
,
256
))
printk
(
KERN_ERR
PFX
"Unable to set max read request"
" to 256 bytes
\n
"
);
else
nes_debug
(
NES_DBG_INIT
,
"Max read request size set"
" to 256 bytes
\n
"
);
}
tasklet_init
(
&
nesdev
->
dpc_tasklet
,
nes_dpc
,
(
unsigned
long
)
nesdev
);
tasklet_init
(
&
nesdev
->
dpc_tasklet
,
nes_dpc
,
(
unsigned
long
)
nesdev
);
/* bring up the Control QP */
/* bring up the Control QP */
...
...
drivers/infiniband/hw/nes/nes_hw.h
浏览文件 @
c35a2549
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
#define NES_PHY_TYPE_ARGUS 4
#define NES_PHY_TYPE_ARGUS 4
#define NES_PHY_TYPE_PUMA_1G 5
#define NES_PHY_TYPE_PUMA_1G 5
#define NES_PHY_TYPE_PUMA_10G 6
#define NES_PHY_TYPE_PUMA_10G 6
#define NES_PHY_TYPE_GLADIUS 7
#define NES_MULTICAST_PF_MAX 8
#define NES_MULTICAST_PF_MAX 8
...
...
drivers/infiniband/hw/nes/nes_verbs.c
浏览文件 @
c35a2549
...
@@ -220,14 +220,14 @@ static int nes_bind_mw(struct ib_qp *ibqp, struct ib_mw *ibmw,
...
@@ -220,14 +220,14 @@ static int nes_bind_mw(struct ib_qp *ibqp, struct ib_mw *ibmw,
if
(
nesqp
->
ibqp_state
>
IB_QPS_RTS
)
if
(
nesqp
->
ibqp_state
>
IB_QPS_RTS
)
return
-
EINVAL
;
return
-
EINVAL
;
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
head
=
nesqp
->
hwqp
.
sq_head
;
head
=
nesqp
->
hwqp
.
sq_head
;
qsize
=
nesqp
->
hwqp
.
sq_tail
;
qsize
=
nesqp
->
hwqp
.
sq_tail
;
/* Check for SQ overflow */
/* Check for SQ overflow */
if
(((
head
+
(
2
*
qsize
)
-
nesqp
->
hwqp
.
sq_tail
)
%
qsize
)
==
(
qsize
-
1
))
{
if
(((
head
+
(
2
*
qsize
)
-
nesqp
->
hwqp
.
sq_tail
)
%
qsize
)
==
(
qsize
-
1
))
{
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
@@ -269,7 +269,7 @@ static int nes_bind_mw(struct ib_qp *ibqp, struct ib_mw *ibmw,
...
@@ -269,7 +269,7 @@ static int nes_bind_mw(struct ib_qp *ibqp, struct ib_mw *ibmw,
nes_write32
(
nesdev
->
regs
+
NES_WQE_ALLOC
,
nes_write32
(
nesdev
->
regs
+
NES_WQE_ALLOC
,
(
1
<<
24
)
|
0x00800000
|
nesqp
->
hwqp
.
qp_id
);
(
1
<<
24
)
|
0x00800000
|
nesqp
->
hwqp
.
qp_id
);
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
return
0
;
return
0
;
}
}
...
@@ -349,7 +349,7 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
...
@@ -349,7 +349,7 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
if
(
nesfmr
->
nesmr
.
pbls_used
>
nesadapter
->
free_4kpbl
)
{
if
(
nesfmr
->
nesmr
.
pbls_used
>
nesadapter
->
free_4kpbl
)
{
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
failed_vpbl_a
lloc
;
goto
failed_vpbl_a
vail
;
}
else
{
}
else
{
nesadapter
->
free_4kpbl
-=
nesfmr
->
nesmr
.
pbls_used
;
nesadapter
->
free_4kpbl
-=
nesfmr
->
nesmr
.
pbls_used
;
}
}
...
@@ -357,7 +357,7 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
...
@@ -357,7 +357,7 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
if
(
nesfmr
->
nesmr
.
pbls_used
>
nesadapter
->
free_256pbl
)
{
if
(
nesfmr
->
nesmr
.
pbls_used
>
nesadapter
->
free_256pbl
)
{
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
failed_vpbl_a
lloc
;
goto
failed_vpbl_a
vail
;
}
else
{
}
else
{
nesadapter
->
free_256pbl
-=
nesfmr
->
nesmr
.
pbls_used
;
nesadapter
->
free_256pbl
-=
nesfmr
->
nesmr
.
pbls_used
;
}
}
...
@@ -391,14 +391,14 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
...
@@ -391,14 +391,14 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
goto
failed_vpbl_alloc
;
goto
failed_vpbl_alloc
;
}
}
nesfmr
->
root_vpbl
.
leaf_vpbl
=
kzalloc
(
sizeof
(
*
nesfmr
->
root_vpbl
.
leaf_vpbl
)
*
1024
,
GFP_KERNEL
);
nesfmr
->
leaf_pbl_cnt
=
nesfmr
->
nesmr
.
pbls_used
-
1
;
nesfmr
->
root_vpbl
.
leaf_vpbl
=
kzalloc
(
sizeof
(
*
nesfmr
->
root_vpbl
.
leaf_vpbl
)
*
1024
,
GFP_ATOMIC
);
if
(
!
nesfmr
->
root_vpbl
.
leaf_vpbl
)
{
if
(
!
nesfmr
->
root_vpbl
.
leaf_vpbl
)
{
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
ret
=
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
failed_leaf_vpbl_alloc
;
goto
failed_leaf_vpbl_alloc
;
}
}
nesfmr
->
leaf_pbl_cnt
=
nesfmr
->
nesmr
.
pbls_used
-
1
;
nes_debug
(
NES_DBG_MR
,
"two level pbl, root_vpbl.pbl_vbase=%p"
nes_debug
(
NES_DBG_MR
,
"two level pbl, root_vpbl.pbl_vbase=%p"
" leaf_pbl_cnt=%d root_vpbl.leaf_vpbl=%p
\n
"
,
" leaf_pbl_cnt=%d root_vpbl.leaf_vpbl=%p
\n
"
,
nesfmr
->
root_vpbl
.
pbl_vbase
,
nesfmr
->
leaf_pbl_cnt
,
nesfmr
->
root_vpbl
.
leaf_vpbl
);
nesfmr
->
root_vpbl
.
pbl_vbase
,
nesfmr
->
leaf_pbl_cnt
,
nesfmr
->
root_vpbl
.
leaf_vpbl
);
...
@@ -519,6 +519,16 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
...
@@ -519,6 +519,16 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
nesfmr
->
root_vpbl
.
pbl_pbase
);
nesfmr
->
root_vpbl
.
pbl_pbase
);
failed_vpbl_alloc:
failed_vpbl_alloc:
if
(
nesfmr
->
nesmr
.
pbls_used
!=
0
)
{
spin_lock_irqsave
(
&
nesadapter
->
pbl_lock
,
flags
);
if
(
nesfmr
->
nesmr
.
pbl_4k
)
nesadapter
->
free_4kpbl
+=
nesfmr
->
nesmr
.
pbls_used
;
else
nesadapter
->
free_256pbl
+=
nesfmr
->
nesmr
.
pbls_used
;
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
}
failed_vpbl_avail:
kfree
(
nesfmr
);
kfree
(
nesfmr
);
failed_fmr_alloc:
failed_fmr_alloc:
...
@@ -534,18 +544,14 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
...
@@ -534,18 +544,14 @@ static struct ib_fmr *nes_alloc_fmr(struct ib_pd *ibpd,
*/
*/
static
int
nes_dealloc_fmr
(
struct
ib_fmr
*
ibfmr
)
static
int
nes_dealloc_fmr
(
struct
ib_fmr
*
ibfmr
)
{
{
unsigned
long
flags
;
struct
nes_mr
*
nesmr
=
to_nesmr_from_ibfmr
(
ibfmr
);
struct
nes_mr
*
nesmr
=
to_nesmr_from_ibfmr
(
ibfmr
);
struct
nes_fmr
*
nesfmr
=
to_nesfmr
(
nesmr
);
struct
nes_fmr
*
nesfmr
=
to_nesfmr
(
nesmr
);
struct
nes_vnic
*
nesvnic
=
to_nesvnic
(
ibfmr
->
device
);
struct
nes_vnic
*
nesvnic
=
to_nesvnic
(
ibfmr
->
device
);
struct
nes_device
*
nesdev
=
nesvnic
->
nesdev
;
struct
nes_device
*
nesdev
=
nesvnic
->
nesdev
;
struct
nes_
mr
temp_nesmr
=
*
nesm
r
;
struct
nes_
adapter
*
nesadapter
=
nesdev
->
nesadapte
r
;
int
i
=
0
;
int
i
=
0
;
temp_nesmr
.
ibmw
.
device
=
ibfmr
->
device
;
temp_nesmr
.
ibmw
.
pd
=
ibfmr
->
pd
;
temp_nesmr
.
ibmw
.
rkey
=
ibfmr
->
rkey
;
temp_nesmr
.
ibmw
.
uobject
=
NULL
;
/* free the resources */
/* free the resources */
if
(
nesfmr
->
leaf_pbl_cnt
==
0
)
{
if
(
nesfmr
->
leaf_pbl_cnt
==
0
)
{
/* single PBL case */
/* single PBL case */
...
@@ -561,8 +567,24 @@ static int nes_dealloc_fmr(struct ib_fmr *ibfmr)
...
@@ -561,8 +567,24 @@ static int nes_dealloc_fmr(struct ib_fmr *ibfmr)
pci_free_consistent
(
nesdev
->
pcidev
,
8192
,
nesfmr
->
root_vpbl
.
pbl_vbase
,
pci_free_consistent
(
nesdev
->
pcidev
,
8192
,
nesfmr
->
root_vpbl
.
pbl_vbase
,
nesfmr
->
root_vpbl
.
pbl_pbase
);
nesfmr
->
root_vpbl
.
pbl_pbase
);
}
}
nesmr
->
ibmw
.
device
=
ibfmr
->
device
;
nesmr
->
ibmw
.
pd
=
ibfmr
->
pd
;
nesmr
->
ibmw
.
rkey
=
ibfmr
->
rkey
;
nesmr
->
ibmw
.
uobject
=
NULL
;
return
nes_dealloc_mw
(
&
temp_nesmr
.
ibmw
);
if
(
nesfmr
->
nesmr
.
pbls_used
!=
0
)
{
spin_lock_irqsave
(
&
nesadapter
->
pbl_lock
,
flags
);
if
(
nesfmr
->
nesmr
.
pbl_4k
)
{
nesadapter
->
free_4kpbl
+=
nesfmr
->
nesmr
.
pbls_used
;
WARN_ON
(
nesadapter
->
free_4kpbl
>
nesadapter
->
max_4kpbl
);
}
else
{
nesadapter
->
free_256pbl
+=
nesfmr
->
nesmr
.
pbls_used
;
WARN_ON
(
nesadapter
->
free_256pbl
>
nesadapter
->
max_256pbl
);
}
spin_unlock_irqrestore
(
&
nesadapter
->
pbl_lock
,
flags
);
}
return
nes_dealloc_mw
(
&
nesmr
->
ibmw
);
}
}
...
@@ -1595,7 +1617,7 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
...
@@ -1595,7 +1617,7 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,
nes_ucontext
->
mcrqf
=
req
.
mcrqf
;
nes_ucontext
->
mcrqf
=
req
.
mcrqf
;
if
(
nes_ucontext
->
mcrqf
)
{
if
(
nes_ucontext
->
mcrqf
)
{
if
(
nes_ucontext
->
mcrqf
&
0x80000000
)
if
(
nes_ucontext
->
mcrqf
&
0x80000000
)
nescq
->
hw_cq
.
cq_number
=
nesvnic
->
nic
.
qp_id
+
12
+
(
nes_ucontext
->
mcrqf
&
0xf
)
-
1
;
nescq
->
hw_cq
.
cq_number
=
nesvnic
->
nic
.
qp_id
+
28
+
2
*
((
nes_ucontext
->
mcrqf
&
0xf
)
-
1
)
;
else
if
(
nes_ucontext
->
mcrqf
&
0x40000000
)
else
if
(
nes_ucontext
->
mcrqf
&
0x40000000
)
nescq
->
hw_cq
.
cq_number
=
nes_ucontext
->
mcrqf
&
0xffff
;
nescq
->
hw_cq
.
cq_number
=
nes_ucontext
->
mcrqf
&
0xffff
;
else
else
...
@@ -3212,7 +3234,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
...
@@ -3212,7 +3234,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
if
(
nesqp
->
ibqp_state
>
IB_QPS_RTS
)
if
(
nesqp
->
ibqp_state
>
IB_QPS_RTS
)
return
-
EINVAL
;
return
-
EINVAL
;
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
head
=
nesqp
->
hwqp
.
sq_head
;
head
=
nesqp
->
hwqp
.
sq_head
;
...
@@ -3337,7 +3359,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
...
@@ -3337,7 +3359,7 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,
(
counter
<<
24
)
|
0x00800000
|
nesqp
->
hwqp
.
qp_id
);
(
counter
<<
24
)
|
0x00800000
|
nesqp
->
hwqp
.
qp_id
);
}
}
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
if
(
err
)
if
(
err
)
*
bad_wr
=
ib_wr
;
*
bad_wr
=
ib_wr
;
...
@@ -3368,7 +3390,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
...
@@ -3368,7 +3390,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
if
(
nesqp
->
ibqp_state
>
IB_QPS_RTS
)
if
(
nesqp
->
ibqp_state
>
IB_QPS_RTS
)
return
-
EINVAL
;
return
-
EINVAL
;
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
spin_lock_irqsave
(
&
nesqp
->
lock
,
flags
);
head
=
nesqp
->
hwqp
.
rq_head
;
head
=
nesqp
->
hwqp
.
rq_head
;
...
@@ -3421,7 +3443,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
...
@@ -3421,7 +3443,7 @@ static int nes_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,
nes_write32
(
nesdev
->
regs
+
NES_WQE_ALLOC
,
(
counter
<<
24
)
|
nesqp
->
hwqp
.
qp_id
);
nes_write32
(
nesdev
->
regs
+
NES_WQE_ALLOC
,
(
counter
<<
24
)
|
nesqp
->
hwqp
.
qp_id
);
}
}
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
nesqp
->
lock
,
flags
);
if
(
err
)
if
(
err
)
*
bad_wr
=
ib_wr
;
*
bad_wr
=
ib_wr
;
...
@@ -3453,7 +3475,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
...
@@ -3453,7 +3475,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
nes_debug
(
NES_DBG_CQ
,
"
\n
"
);
nes_debug
(
NES_DBG_CQ
,
"
\n
"
);
spin_lock_irqsave
(
&
nescq
->
lock
,
flags
);
spin_lock_irqsave
(
&
nescq
->
lock
,
flags
);
head
=
nescq
->
hw_cq
.
cq_head
;
head
=
nescq
->
hw_cq
.
cq_head
;
cq_size
=
nescq
->
hw_cq
.
cq_size
;
cq_size
=
nescq
->
hw_cq
.
cq_size
;
...
@@ -3562,7 +3584,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
...
@@ -3562,7 +3584,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry)
nes_debug
(
NES_DBG_CQ
,
"Reporting %u completions for CQ%u.
\n
"
,
nes_debug
(
NES_DBG_CQ
,
"Reporting %u completions for CQ%u.
\n
"
,
cqe_count
,
nescq
->
hw_cq
.
cq_number
);
cqe_count
,
nescq
->
hw_cq
.
cq_number
);
spin_unlock_irqrestore
(
&
nescq
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
nescq
->
lock
,
flags
);
return
cqe_count
;
return
cqe_count
;
}
}
...
...
drivers/infiniband/ulp/ipoib/ipoib_main.c
浏览文件 @
c35a2549
...
@@ -106,12 +106,13 @@ int ipoib_open(struct net_device *dev)
...
@@ -106,12 +106,13 @@ int ipoib_open(struct net_device *dev)
ipoib_dbg
(
priv
,
"bringing up interface
\n
"
);
ipoib_dbg
(
priv
,
"bringing up interface
\n
"
);
napi_enable
(
&
priv
->
napi
);
set_bit
(
IPOIB_FLAG_ADMIN_UP
,
&
priv
->
flags
);
set_bit
(
IPOIB_FLAG_ADMIN_UP
,
&
priv
->
flags
);
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
))
{
if
(
ipoib_ib_dev_open
(
dev
))
{
napi_disable
(
&
priv
->
napi
);
napi_disable
(
&
priv
->
napi
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -546,6 +547,7 @@ static int path_rec_start(struct net_device *dev,
...
@@ -546,6 +547,7 @@ static int path_rec_start(struct net_device *dev,
if
(
path
->
query_id
<
0
)
{
if
(
path
->
query_id
<
0
)
{
ipoib_warn
(
priv
,
"ib_sa_path_rec_get failed: %d
\n
"
,
path
->
query_id
);
ipoib_warn
(
priv
,
"ib_sa_path_rec_get failed: %d
\n
"
,
path
->
query_id
);
path
->
query
=
NULL
;
path
->
query
=
NULL
;
complete
(
&
path
->
done
);
return
path
->
query_id
;
return
path
->
query_id
;
}
}
...
@@ -662,7 +664,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
...
@@ -662,7 +664,7 @@ static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
skb_push
(
skb
,
sizeof
*
phdr
);
skb_push
(
skb
,
sizeof
*
phdr
);
__skb_queue_tail
(
&
path
->
queue
,
skb
);
__skb_queue_tail
(
&
path
->
queue
,
skb
);
if
(
path_rec_start
(
dev
,
path
))
{
if
(
!
path
->
query
&&
path_rec_start
(
dev
,
path
))
{
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
priv
->
lock
,
flags
);
path_free
(
dev
,
path
);
path_free
(
dev
,
path
);
return
;
return
;
...
...
drivers/net/mlx4/mlx4.h
浏览文件 @
c35a2549
...
@@ -87,6 +87,9 @@ enum {
...
@@ -87,6 +87,9 @@ enum {
#ifdef CONFIG_MLX4_DEBUG
#ifdef CONFIG_MLX4_DEBUG
extern
int
mlx4_debug_level
;
extern
int
mlx4_debug_level
;
#else
/* CONFIG_MLX4_DEBUG */
#define mlx4_debug_level (0)
#endif
/* CONFIG_MLX4_DEBUG */
#define mlx4_dbg(mdev, format, arg...) \
#define mlx4_dbg(mdev, format, arg...) \
do { \
do { \
...
@@ -94,12 +97,6 @@ extern int mlx4_debug_level;
...
@@ -94,12 +97,6 @@ extern int mlx4_debug_level;
dev_printk(KERN_DEBUG, &mdev->pdev->dev, format, ## arg); \
dev_printk(KERN_DEBUG, &mdev->pdev->dev, format, ## arg); \
} while (0)
} while (0)
#else
/* CONFIG_MLX4_DEBUG */
#define mlx4_dbg(mdev, format, arg...) do { (void) mdev; } while (0)
#endif
/* CONFIG_MLX4_DEBUG */
#define mlx4_err(mdev, format, arg...) \
#define mlx4_err(mdev, format, arg...) \
dev_err(&mdev->pdev->dev, format, ## arg)
dev_err(&mdev->pdev->dev, format, ## arg)
#define mlx4_info(mdev, format, arg...) \
#define mlx4_info(mdev, format, arg...) \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录