forked from luck/tmp_suning_uos_patched
IB/{rdmavt, qib, hfi1}: Remove gfp flags argument
The caller to the driver marks GFP_NOIO allocations with help of memalloc_noio-* calls now. This makes redundant to pass down to the driver gfp flags, which can be GFP_KERNEL only. The patch removes the gfp flags argument and updates all driver paths. Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Acked-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
d83187dda9
commit
0f4d027c3b
|
@ -647,18 +647,17 @@ void qp_iter_print(struct seq_file *s, struct qp_iter *iter)
|
|||
qp->pid);
|
||||
}
|
||||
|
||||
void *qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp,
|
||||
gfp_t gfp)
|
||||
void *qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp)
|
||||
{
|
||||
struct hfi1_qp_priv *priv;
|
||||
|
||||
priv = kzalloc_node(sizeof(*priv), gfp, rdi->dparms.node);
|
||||
priv = kzalloc_node(sizeof(*priv), GFP_KERNEL, rdi->dparms.node);
|
||||
if (!priv)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
priv->owner = qp;
|
||||
|
||||
priv->s_ahg = kzalloc_node(sizeof(*priv->s_ahg), gfp,
|
||||
priv->s_ahg = kzalloc_node(sizeof(*priv->s_ahg), GFP_KERNEL,
|
||||
rdi->dparms.node);
|
||||
if (!priv->s_ahg) {
|
||||
kfree(priv);
|
||||
|
|
|
@ -123,8 +123,7 @@ void hfi1_migrate_qp(struct rvt_qp *qp);
|
|||
/*
|
||||
* Functions provided by hfi1 driver for rdmavt to use
|
||||
*/
|
||||
void *qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp,
|
||||
gfp_t gfp);
|
||||
void *qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp);
|
||||
void qp_priv_free(struct rvt_dev_info *rdi, struct rvt_qp *qp);
|
||||
unsigned free_all_qps(struct rvt_dev_info *rdi);
|
||||
void notify_qp_reset(struct rvt_qp *qp);
|
||||
|
|
|
@ -104,10 +104,9 @@ const struct rvt_operation_params qib_post_parms[RVT_OPERATION_MAX] = {
|
|||
|
||||
};
|
||||
|
||||
static void get_map_page(struct rvt_qpn_table *qpt, struct rvt_qpn_map *map,
|
||||
gfp_t gfp)
|
||||
static void get_map_page(struct rvt_qpn_table *qpt, struct rvt_qpn_map *map)
|
||||
{
|
||||
unsigned long page = get_zeroed_page(gfp);
|
||||
unsigned long page = get_zeroed_page(GFP_KERNEL);
|
||||
|
||||
/*
|
||||
* Free the page if someone raced with us installing it.
|
||||
|
@ -126,7 +125,7 @@ static void get_map_page(struct rvt_qpn_table *qpt, struct rvt_qpn_map *map,
|
|||
* zero/one for QP type IB_QPT_SMI/IB_QPT_GSI.
|
||||
*/
|
||||
int qib_alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
|
||||
enum ib_qp_type type, u8 port, gfp_t gfp)
|
||||
enum ib_qp_type type, u8 port)
|
||||
{
|
||||
u32 i, offset, max_scan, qpn;
|
||||
struct rvt_qpn_map *map;
|
||||
|
@ -160,7 +159,7 @@ int qib_alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
|
|||
max_scan = qpt->nmaps - !offset;
|
||||
for (i = 0;;) {
|
||||
if (unlikely(!map->page)) {
|
||||
get_map_page(qpt, map, gfp);
|
||||
get_map_page(qpt, map);
|
||||
if (unlikely(!map->page))
|
||||
break;
|
||||
}
|
||||
|
@ -317,16 +316,16 @@ u32 qib_mtu_from_qp(struct rvt_dev_info *rdi, struct rvt_qp *qp, u32 pmtu)
|
|||
return ib_mtu_enum_to_int(pmtu);
|
||||
}
|
||||
|
||||
void *qib_qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp, gfp_t gfp)
|
||||
void *qib_qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp)
|
||||
{
|
||||
struct qib_qp_priv *priv;
|
||||
|
||||
priv = kzalloc(sizeof(*priv), gfp);
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
priv->owner = qp;
|
||||
|
||||
priv->s_hdr = kzalloc(sizeof(*priv->s_hdr), gfp);
|
||||
priv->s_hdr = kzalloc(sizeof(*priv->s_hdr), GFP_KERNEL);
|
||||
if (!priv->s_hdr) {
|
||||
kfree(priv);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
|
|
@ -274,11 +274,11 @@ int qib_get_counters(struct qib_pportdata *ppd,
|
|||
* Functions provided by qib driver for rdmavt to use
|
||||
*/
|
||||
unsigned qib_free_all_qps(struct rvt_dev_info *rdi);
|
||||
void *qib_qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp, gfp_t gfp);
|
||||
void *qib_qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp);
|
||||
void qib_qp_priv_free(struct rvt_dev_info *rdi, struct rvt_qp *qp);
|
||||
void qib_notify_qp_reset(struct rvt_qp *qp);
|
||||
int qib_alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
|
||||
enum ib_qp_type type, u8 port, gfp_t gfp);
|
||||
enum ib_qp_type type, u8 port);
|
||||
void qib_restart_rc(struct rvt_qp *qp, u32 psn, int wait);
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
|
||||
|
|
|
@ -118,10 +118,9 @@ const int ib_rvt_state_ops[IB_QPS_ERR + 1] = {
|
|||
EXPORT_SYMBOL(ib_rvt_state_ops);
|
||||
|
||||
static void get_map_page(struct rvt_qpn_table *qpt,
|
||||
struct rvt_qpn_map *map,
|
||||
gfp_t gfp)
|
||||
struct rvt_qpn_map *map)
|
||||
{
|
||||
unsigned long page = get_zeroed_page(gfp);
|
||||
unsigned long page = get_zeroed_page(GFP_KERNEL);
|
||||
|
||||
/*
|
||||
* Free the page if someone raced with us installing it.
|
||||
|
@ -173,7 +172,7 @@ static int init_qpn_table(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt)
|
|||
rdi->dparms.qpn_res_start, rdi->dparms.qpn_res_end);
|
||||
for (i = rdi->dparms.qpn_res_start; i <= rdi->dparms.qpn_res_end; i++) {
|
||||
if (!map->page) {
|
||||
get_map_page(qpt, map, GFP_KERNEL);
|
||||
get_map_page(qpt, map);
|
||||
if (!map->page) {
|
||||
ret = -ENOMEM;
|
||||
break;
|
||||
|
@ -342,14 +341,14 @@ static inline unsigned mk_qpn(struct rvt_qpn_table *qpt,
|
|||
* Return: The queue pair number
|
||||
*/
|
||||
static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
|
||||
enum ib_qp_type type, u8 port_num, gfp_t gfp)
|
||||
enum ib_qp_type type, u8 port_num)
|
||||
{
|
||||
u32 i, offset, max_scan, qpn;
|
||||
struct rvt_qpn_map *map;
|
||||
u32 ret;
|
||||
|
||||
if (rdi->driver_f.alloc_qpn)
|
||||
return rdi->driver_f.alloc_qpn(rdi, qpt, type, port_num, gfp);
|
||||
return rdi->driver_f.alloc_qpn(rdi, qpt, type, port_num);
|
||||
|
||||
if (type == IB_QPT_SMI || type == IB_QPT_GSI) {
|
||||
unsigned n;
|
||||
|
@ -374,7 +373,7 @@ static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
|
|||
max_scan = qpt->nmaps - !offset;
|
||||
for (i = 0;;) {
|
||||
if (unlikely(!map->page)) {
|
||||
get_map_page(qpt, map, gfp);
|
||||
get_map_page(qpt, map);
|
||||
if (unlikely(!map->page))
|
||||
break;
|
||||
}
|
||||
|
@ -672,7 +671,6 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
struct ib_qp *ret = ERR_PTR(-ENOMEM);
|
||||
struct rvt_dev_info *rdi = ib_to_rvt(ibpd->device);
|
||||
void *priv = NULL;
|
||||
gfp_t gfp;
|
||||
size_t sqsize;
|
||||
|
||||
if (!rdi)
|
||||
|
@ -680,18 +678,9 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
|
||||
if (init_attr->cap.max_send_sge > rdi->dparms.props.max_sge ||
|
||||
init_attr->cap.max_send_wr > rdi->dparms.props.max_qp_wr ||
|
||||
init_attr->create_flags & ~(IB_QP_CREATE_USE_GFP_NOIO))
|
||||
init_attr->create_flags)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
/* GFP_NOIO is applicable to RC QP's only */
|
||||
|
||||
if (init_attr->create_flags & IB_QP_CREATE_USE_GFP_NOIO &&
|
||||
init_attr->qp_type != IB_QPT_RC)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
gfp = init_attr->create_flags & IB_QP_CREATE_USE_GFP_NOIO ?
|
||||
GFP_NOIO : GFP_KERNEL;
|
||||
|
||||
/* Check receive queue parameters if no SRQ is specified. */
|
||||
if (!init_attr->srq) {
|
||||
if (init_attr->cap.max_recv_sge > rdi->dparms.props.max_sge ||
|
||||
|
@ -719,14 +708,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
sz = sizeof(struct rvt_sge) *
|
||||
init_attr->cap.max_send_sge +
|
||||
sizeof(struct rvt_swqe);
|
||||
if (gfp == GFP_NOIO)
|
||||
swq = __vmalloc(
|
||||
sqsize * sz,
|
||||
gfp | __GFP_ZERO, PAGE_KERNEL);
|
||||
else
|
||||
swq = vzalloc_node(
|
||||
sqsize * sz,
|
||||
rdi->dparms.node);
|
||||
swq = vzalloc_node(sqsize * sz, rdi->dparms.node);
|
||||
if (!swq)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
|
@ -741,7 +723,8 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
} else if (init_attr->cap.max_recv_sge > 1)
|
||||
sg_list_sz = sizeof(*qp->r_sg_list) *
|
||||
(init_attr->cap.max_recv_sge - 1);
|
||||
qp = kzalloc_node(sz + sg_list_sz, gfp, rdi->dparms.node);
|
||||
qp = kzalloc_node(sz + sg_list_sz, GFP_KERNEL,
|
||||
rdi->dparms.node);
|
||||
if (!qp)
|
||||
goto bail_swq;
|
||||
|
||||
|
@ -751,7 +734,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
kzalloc_node(
|
||||
sizeof(*qp->s_ack_queue) *
|
||||
rvt_max_atomic(rdi),
|
||||
gfp,
|
||||
GFP_KERNEL,
|
||||
rdi->dparms.node);
|
||||
if (!qp->s_ack_queue)
|
||||
goto bail_qp;
|
||||
|
@ -766,7 +749,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
* Driver needs to set up it's private QP structure and do any
|
||||
* initialization that is needed.
|
||||
*/
|
||||
priv = rdi->driver_f.qp_priv_alloc(rdi, qp, gfp);
|
||||
priv = rdi->driver_f.qp_priv_alloc(rdi, qp);
|
||||
if (IS_ERR(priv)) {
|
||||
ret = priv;
|
||||
goto bail_qp;
|
||||
|
@ -786,11 +769,6 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
qp->r_rq.wq = vmalloc_user(
|
||||
sizeof(struct rvt_rwq) +
|
||||
qp->r_rq.size * sz);
|
||||
else if (gfp == GFP_NOIO)
|
||||
qp->r_rq.wq = __vmalloc(
|
||||
sizeof(struct rvt_rwq) +
|
||||
qp->r_rq.size * sz,
|
||||
gfp | __GFP_ZERO, PAGE_KERNEL);
|
||||
else
|
||||
qp->r_rq.wq = vzalloc_node(
|
||||
sizeof(struct rvt_rwq) +
|
||||
|
@ -824,7 +802,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
|
|||
|
||||
err = alloc_qpn(rdi, &rdi->qp_dev->qpn_table,
|
||||
init_attr->qp_type,
|
||||
init_attr->port_num, gfp);
|
||||
init_attr->port_num);
|
||||
if (err < 0) {
|
||||
ret = ERR_PTR(err);
|
||||
goto bail_rq_wq;
|
||||
|
|
|
@ -229,8 +229,7 @@ struct rvt_driver_provided {
|
|||
* ERR_PTR(err). The driver is free to return NULL or a valid
|
||||
* pointer.
|
||||
*/
|
||||
void * (*qp_priv_alloc)(struct rvt_dev_info *rdi, struct rvt_qp *qp,
|
||||
gfp_t gfp);
|
||||
void * (*qp_priv_alloc)(struct rvt_dev_info *rdi, struct rvt_qp *qp);
|
||||
|
||||
/*
|
||||
* Free the driver's private qp structure.
|
||||
|
@ -319,7 +318,7 @@ struct rvt_driver_provided {
|
|||
|
||||
/* Let the driver pick the next queue pair number*/
|
||||
int (*alloc_qpn)(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
|
||||
enum ib_qp_type type, u8 port_num, gfp_t gfp);
|
||||
enum ib_qp_type type, u8 port_num);
|
||||
|
||||
/* Determine if its safe or allowed to modify the qp */
|
||||
int (*check_modify_qp)(struct rvt_qp *qp, struct ib_qp_attr *attr,
|
||||
|
|
Loading…
Reference in New Issue
Block a user