Add support of NOIO allocations to IPoIB
Subsystems (7)
cover Add support of NOIO allocations to IPoIB
Hi Doug,
These patches adds native support to NOIO allocations during create QP for IPoIB.
In contrast to the commit 09b93088d750 ("IB: Add a QP creation flag to use GFP_NOIO allocations"), which added specific QP create flag, this series uses standard memalloc_noio_* calls to mark GFP_NOIO for all allocations paths below.
This change allows to all drivers benefit from this facitlity and not only mlx4 and qib. As a nice outcome, there is a lot simplification in the mlx4 and qib drivers by removing need to carry GFP flags.
Thanks
Changelog from v0:
* Forgot to add hfi1
Leon Romanovsky (4):
IB/IPoIB: Convert IPoIB to memalloc_noio_* calls IB/{rdmavt, qib, hfi1}: Remove gfp flags argument {net, IB}/mlx4: Remove gfp flags argument IB/core: Remove NOIO QP create flag
drivers/infiniband/hw/hfi1/qp.c | 7 ++-- drivers/infiniband/hw/hfi1/qp.h | 3 +- drivers/infiniband/hw/mlx4/cq.c | 6 +-- drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 - drivers/infiniband/hw/mlx4/qp.c | 40 ++++++++---------- drivers/infiniband/hw/mlx4/srq.c | 8 ++-- drivers/infiniband/hw/qib/qib_qp.c | 15 ++++--- drivers/infiniband/hw/qib/qib_verbs.h | 4 +- drivers/infiniband/sw/rdmavt/qp.c | 48 ++++++---------------- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 16 ++++---- drivers/net/ethernet/mellanox/mlx4/alloc.c | 29 +++++++------ drivers/net/ethernet/mellanox/mlx4/cq.c | 4 +- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 6 +-- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 +- drivers/net/ethernet/mellanox/mlx4/icm.c | 7 ++-- drivers/net/ethernet/mellanox/mlx4/icm.h | 3 +- drivers/net/ethernet/mellanox/mlx4/mlx4.h | 4 +- drivers/net/ethernet/mellanox/mlx4/mr.c | 17 ++++---- drivers/net/ethernet/mellanox/mlx4/qp.c | 20 ++++----- .../net/ethernet/mellanox/mlx4/resource_tracker.c | 4 +- drivers/net/ethernet/mellanox/mlx4/srq.c | 4 +- include/linux/mlx4/device.h | 10 ++--- include/rdma/ib_verbs.h | 2 +- include/rdma/rdma_vt.h | 5 +-- 24 files changed, 112 insertions(+), 153 deletions(-)
--
2.12.2
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170523113816.32657-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/4 IB/IPoIB: Convert IPoIB to memalloc_noio_* calls
From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
Commit 21caf2fc1931 ("mm: teach mm by current context info to not do I/O during memory allocation") added the memalloc_noio_(save|restore) functions to enable people to modify the MM behavior by disabling I/O during memory allocation. This was further extended in Fixes: 934f3072c17c ("mm: clear __GFP_FS when PF_MEMALLOC_NOIO is set"). memalloc_noio_* functions prevent allocation paths recursing back into the filesystem without explicitly changing the flags for every allocation site.
However the IPoIB hasn't been keeping up with the changes and missed completely these memalloc_noio_* calls. This led to update of allocation site with special QP creation flag, see commit 09b93088d750 ("IB: Add a QP creation flag to use GFP_NOIO allocations"), while this flag is supported by small number of drivers in IB stack.
Let's change it by updating to memalloc_noio_* calls and allow for every driver underneath enjoy NOIO allocations.
--- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib_cm.c +7 -9
@@ -39,6 +39,7 @@#include <linux/vmalloc.h> #include <linux/moduleparam.h> #include <linux/sched/signal.h> +#include <linux/sched/mm.h> #include "ipoib.h"
@@ -1047,9 +1048,8 @@ static struct ib_qp *ipoib_cm_create_tx_qp(struct net_device *dev, struct ipoib_ .sq_sig_type = IB_SIGNAL_ALL_WR, .qp_type = IB_QPT_RC, .qp_context = tx, - .create_flags = IB_QP_CREATE_USE_GFP_NOIO + .create_flags = 0 }; -struct ib_qp *tx_qp;if (dev->features &NETIF_F_SG )
@@ -1057,10 +1057,6 @@ static struct ib_qp *ipoib_cm_create_tx_qp(struct net_device *dev, struct ipoib_min_t (u32, priv->ca->attrs.max_sge,MAX_SKB_FRAGS +1 ); tx_qp =ib_create_qp (priv->pd, &attr); -if (PTR_ERR (tx_qp) == -EINVAL ) { - attr.create_flags &= ~IB_QP_CREATE_USE_GFP_NOIO ; - tx_qp =ib_create_qp (priv->pd, &attr); - } tx->max_send_sge = attr.cap.max_send_sge;return tx_qp; }
@@ -1131,10 +1127,11 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, struct sa_path_rec *pathrec) {struct ipoib_dev_priv *priv =ipoib_priv (p->dev); +unsigned int noio_flag;int ret; - p->tx_ring =__vmalloc (ipoib_sendq_size *sizeof *p->tx_ring, -GFP_NOIO ,PAGE_KERNEL ); + noio_flag =memalloc_noio_save (); + p->tx_ring =vzalloc (ipoib_sendq_size *sizeof (*p->tx_ring));if (!p->tx_ring) { ret = -ENOMEM ; goto err_tx;
@@ -1142,9 +1139,10 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn,memset (p->tx_ring,0 , ipoib_sendq_size *sizeof *p->tx_ring); p->qp =ipoib_cm_create_tx_qp (p->dev, p); +memalloc_noio_restore (noio_flag);if (IS_ERR (p->qp)) { ret =PTR_ERR (p->qp); -ipoib_warn (priv,"failed to allocate tx qp: %d\n" , ret); +ipoib_warn (priv,"failed to create tx qp: %d\n" , ret); goto err_qp; }
Signature · 6 lines
2.12.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170523113816.32657-2-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Dennis Dalessandro
Reviewed-byRe: [PATCH rdma-next V1 1/4] IB/IPoIB: Convert IPoIB to memalloc_noio_* calls
Quoted 16 lines · Leon Romanovsky
From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
Commit
21caf2fc1931("mm: teach mm by current context info to not do I/O during memory allocation") added thememalloc_noio_(save|restore)functions to enable people to modify the MM behavior by disabling I/O during memory allocation. This was further extended in Fixes:934f3072c17c("mm: clear__GFP_FSwhenPF_MEMALLOC_NOIOis set"). memalloc_noio_* functions prevent allocation paths recursing back into the filesystem without explicitly changing the flags for every allocation site.However the IPoIB hasn't been keeping up with the changes and missed completely these memalloc_noio_* calls. This led to update of allocation site with special QP creation flag, see commit
09b93088d750("IB: Add a QP creation flag to useGFP_NOIOallocations"), while this flag is supported by small number of drivers in IB stack.
Quoted 5 lines
Let's change it by updating to memalloc_noio_* calls and allow for every driver underneath enjoy NOIO allocations.
Signed-off-by Leon Romanovsky <[email protected]>
drivers/infiniband/ulp/ipoib/ipoib_cm.c static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, · line 1134
Quoted 11 lines
drivers/infiniband/ulp/ipoib/ipoib_cm.c +2
-2@@ -1131,10 +1127,11 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, struct sa_path_rec *pathrec) {struct ipoib_dev_priv *priv =ipoib_priv (p->dev); +unsigned int noio_flag;int ret; - p->tx_ring =__vmalloc (ipoib_sendq_size *sizeof *p->tx_ring, -GFP_NOIO ,PAGE_KERNEL ); + noio_flag =memalloc_noio_save ();
NIT: Maybe just call this "flags" since there could be other flags in current->flags when calling memalloc_noio_save()
-Denny
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 6f8f8d7b-40ba-f0ec-77cd-3c5b20dead23-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
Re: [PATCH rdma-next V1 1/4] IB/IPoIB: Convert IPoIB to memalloc_noio_* calls
Quoted 31 lines · Dennis Dalessandro
Quoted 16 lines · Leon Romanovsky
From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
Commit
21caf2fc1931("mm: teach mm by current context info to not do I/O during memory allocation") added thememalloc_noio_(save|restore)functions to enable people to modify the MM behavior by disabling I/O during memory allocation. This was further extended in Fixes:934f3072c17c("mm: clear__GFP_FSwhenPF_MEMALLOC_NOIOis set"). memalloc_noio_* functions prevent allocation paths recursing back into the filesystem without explicitly changing the flags for every allocation site.However the IPoIB hasn't been keeping up with the changes and missed completely these memalloc_noio_* calls. This led to update of allocation site with special QP creation flag, see commit
09b93088d750("IB: Add a QP creation flag to useGFP_NOIOallocations"), while this flag is supported by small number of drivers in IB stack.Quoted 5 lines
Let's change it by updating to memalloc_noio_* calls and allow for every driver underneath enjoy NOIO allocations.
Signed-off-by Leon Romanovsky <[email protected]>Reviewed-by Dennis Dalessandro <[email protected]>Quoted 5 lines
drivers/infiniband/ulp/ipoib/ipoib_cm.c +1
-0@@ -1131,10 +1127,11 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, struct sa_path_rec *pathrec) {struct ipoib_dev_priv *priv =ipoib_priv (p->dev); +unsigned int noio_flag;
Quoted 7 lines
drivers/infiniband/ulp/ipoib/ipoib_cm.c static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn, · line 1133
Quoted 4 lines
drivers/infiniband/ulp/ipoib/ipoib_cm.c +1
-2int ret; - p->tx_ring =__vmalloc (ipoib_sendq_size *sizeof *p->tx_ring, -GFP_NOIO ,PAGE_KERNEL ); + noio_flag =memalloc_noio_save ();NIT: Maybe just call this "flags" since there could be other flags in
current->flagswhen callingmemalloc_noio_save()
I didn't want to be different from other callers :) ➜ linux-rdma git:(master) ✗ git grep memalloc_noio_save
drivers/base/power/runtime.c: noio_flag = memalloc_noio_save(); drivers/md/dm-bufio.c: noio_flag = memalloc_noio_save(); drivers/md/dm-ioctl.c: noio_flag = memalloc_noio_save(); drivers/usb/core/hub.c: noio_flag = memalloc_noio_save(); fs/ocfs2/cluster/tcp.c: noio_flag = memalloc_noio_save(); fs/ocfs2/cluster/tcp.c: noio_flag = memalloc_noio_save(); include/linux/sched/mm.h:static inline unsigned int memalloc_noio_save(void) net/ceph/crypto.c: noio_flag = memalloc_noio_save(); net/ceph/messenger.c: noio_flag = memalloc_noio_save();
Quoted 2 lines
-Denny
PATCH 2/4 IB/{rdmavt, qib, hfi1}: Remove gfp flags argument
In reply to a message not in the archiveFrom: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
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.
--- drivers/infiniband/hw/hfi1/qp.c | 7 +++-- drivers/infiniband/hw/hfi1/qp.h | 3 +-- drivers/infiniband/hw/qib/qib_qp.c | 15 +++++------ drivers/infiniband/hw/qib/qib_verbs.h | 4 +-- drivers/infiniband/sw/rdmavt/qp.c | 48 ++++++++++------------------------- include/rdma/rdma_vt.h | 5 ++-- 6 files changed, 28 insertions(+), 54 deletions(-)
drivers/infiniband/hw/hfi1/qp.c +3 -4
@@ -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);
drivers/infiniband/hw/hfi1/qp.h +1 -2
@@ -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);
drivers/infiniband/hw/qib/qib_qp.c +7 -8
@@ -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 );
drivers/infiniband/hw/qib/qib_verbs.h +2 -2
@@ -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
drivers/infiniband/sw/rdmavt/qp.c +13 -35
129 lines not on this page · raw message
include/rdma/rdma_vt.h +2 -3
@@ -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,
Signature · 6 lines
2.12.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170523113816.32657-3-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Dennis Dalessandro
Acked-byRe: [PATCH rdma-next V1 2/4] IB/{rdmavt, qib, hfi1}: Remove gfp flags argument
Quoted 10 lines · Leon Romanovsky
From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
The caller to the driver marks
GFP_NOIOallocations with help of memalloc_noio-* calls now. This makes redundant to pass down to the driver gfp flags, which can beGFP_KERNELonly.The patch removes the gfp flags argument and updates all driver paths.
Signed-off-by Leon Romanovsky <[email protected]>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/4 {net, IB}/mlx4: Remove gfp flags argument
In reply to a message not in the archiveFrom: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
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.
--- drivers/infiniband/hw/mlx4/cq.c | 6 ++-- drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 - drivers/infiniband/hw/mlx4/qp.c | 40 +++++++++------------- drivers/infiniband/hw/mlx4/srq.c | 8 ++--- drivers/net/ethernet/mellanox/mlx4/alloc.c | 29 ++++++++-------- drivers/net/ethernet/mellanox/mlx4/cq.c | 4 +-- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 6 ++-- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 +- drivers/net/ethernet/mellanox/mlx4/icm.c | 7 ++-- drivers/net/ethernet/mellanox/mlx4/icm.h | 3 +- drivers/net/ethernet/mellanox/mlx4/mlx4.h | 4 +-- drivers/net/ethernet/mellanox/mlx4/mr.c | 17 +++++---- drivers/net/ethernet/mellanox/mlx4/qp.c | 20 +++++------ .../net/ethernet/mellanox/mlx4/resource_tracker.c | 4 +-- drivers/net/ethernet/mellanox/mlx4/srq.c | 4 +-- include/linux/mlx4/device.h | 10 +++--- 16 files changed, 76 insertions(+), 89 deletions(-)
drivers/infiniband/hw/mlx4/cq.c +3 -3
@@ -102,7 +102,7 @@ static int mlx4_ib_alloc_cq_buf(struct mlx4_ib_dev *dev, struct mlx4_ib_cq_buf *int err; err =mlx4_buf_alloc (dev->dev, nent * dev->dev->caps.cqe_size, -PAGE_SIZE *2 , &buf->buf,GFP_KERNEL ); +PAGE_SIZE *2 , &buf->buf);if (err) goto out;
@@ -113,7 +113,7 @@ static int mlx4_ib_alloc_cq_buf(struct mlx4_ib_dev *dev, struct mlx4_ib_cq_buf *if (err) goto err_buf; - err =mlx4_buf_write_mtt (dev->dev, &buf->mtt, &buf->buf,GFP_KERNEL ); + err =mlx4_buf_write_mtt (dev->dev, &buf->mtt, &buf->buf);if (err) goto err_mtt;
@@ -219,7 +219,7 @@ struct ib_cq *mlx4_ib_create_cq(struct ib_device *ibdev, uar = &to_mucontext (context)->uar; }else { - err =mlx4_db_alloc (dev->dev, &cq->db,1 ,GFP_KERNEL ); + err =mlx4_db_alloc (dev->dev, &cq->db,1 );if (err) goto err_cq;
drivers/infiniband/hw/mlx4/mlx4_ib.h +0 -1
@@ -185,7 +185,6 @@ enum mlx4_ib_qp_flags {MLX4_IB_QP_LSO =IB_QP_CREATE_IPOIB_UD_LSO ,MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK =IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK ,MLX4_IB_QP_NETIF =IB_QP_CREATE_NETIF_QP , -MLX4_IB_QP_CREATE_USE_GFP_NOIO =IB_QP_CREATE_USE_GFP_NOIO ,/* Mellanox specific flags start from IB_QP_CREATE_RESERVED_START */ MLX4_IB_ROCE_V2_GSI_QP = MLX4_IB_QP_CREATE_ROCE_V2_GSI,
drivers/infiniband/hw/mlx4/qp.c +17 -23
@@ -634,8 +634,8 @@ static void mlx4_ib_free_qp_counter(struct mlx4_ib_dev *dev,static int create_qp_common (struct mlx4_ib_dev *dev,struct ib_pd *pd,struct ib_qp_init_attr *init_attr, -struct ib_udata *udata,int sqpn,struct mlx4_ib_qp **caller_qp, -gfp_t gfp) +struct ib_udata *udata,int sqpn, +struct mlx4_ib_qp **caller_qp) {int qpn;int err;
@@ -691,14 +691,14 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,if (qp_type ==MLX4_IB_QPT_SMI || qp_type ==MLX4_IB_QPT_GSI || (qp_type & (MLX4_IB_QPT_PROXY_SMI |MLX4_IB_QPT_PROXY_SMI_OWNER |MLX4_IB_QPT_PROXY_GSI |MLX4_IB_QPT_TUN_SMI_OWNER ))) { - sqp =kzalloc (sizeof (struct mlx4_ib_sqp ), gfp); + sqp =kzalloc (sizeof (struct mlx4_ib_sqp ),GFP_KERNEL );if (!sqp)return -ENOMEM ; qp = &sqp->qp; qp->pri.vid =0xFFFF ; qp->alt.vid =0xFFFF ; }else { - qp =kzalloc (sizeof (struct mlx4_ib_qp ), gfp); + qp =kzalloc (sizeof (struct mlx4_ib_qp ),GFP_KERNEL );if (!qp)return -ENOMEM ; qp->pri.vid =0xFFFF ;
@@ -780,7 +780,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, goto err;if (qp_has_rq (init_attr)) { - err =mlx4_db_alloc (dev->dev, &qp->db,0 , gfp); + err =mlx4_db_alloc (dev->dev, &qp->db,0 );if (err) goto err;
@@ -788,7 +788,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, }if (mlx4_buf_alloc (dev->dev, qp->buf_size, qp->buf_size, - &qp->buf, gfp)) { + &qp->buf)) {memcpy (&init_attr->cap, &backup_cap,sizeof (backup_cap)); err = set_kernel_sq_size(dev, &init_attr->cap, qp_type,
@@ -797,7 +797,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, goto err_db;if (mlx4_buf_alloc (dev->dev, qp->buf_size, -PAGE_SIZE *2 , &qp->buf, gfp)) { +PAGE_SIZE *2 , &qp->buf)) { err = -ENOMEM ; goto err_db; }
@@ -808,20 +808,20 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,if (err) goto err_buf; - err =mlx4_buf_write_mtt (dev->dev, &qp->mtt, &qp->buf, gfp); + err =mlx4_buf_write_mtt (dev->dev, &qp->mtt, &qp->buf);if (err) goto err_mtt; qp->sq.wrid =kmalloc_array (qp->sq.wqe_cnt,sizeof (u64), - gfp | __GFP_NOWARN); +GFP_KERNEL | __GFP_NOWARN);if (!qp->sq.wrid) qp->sq.wrid =__vmalloc (qp->sq.wqe_cnt *sizeof (u64), - gfp,PAGE_KERNEL ); +GFP_KERNEL ,PAGE_KERNEL ); qp->rq.wrid =kmalloc_array (qp->rq.wqe_cnt,sizeof (u64), - gfp | __GFP_NOWARN); +GFP_KERNEL | __GFP_NOWARN);if (!qp->rq.wrid) qp->rq.wrid =__vmalloc (qp->rq.wqe_cnt *sizeof (u64), - gfp,PAGE_KERNEL ); +GFP_KERNEL ,PAGE_KERNEL );if (!qp->sq.wrid || !qp->rq.wrid) { err = -ENOMEM ; goto err_wrid;
@@ -859,7 +859,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,if (init_attr->create_flags &IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK ) qp->flags |=MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK ; - err =mlx4_qp_alloc (dev->dev, qpn, &qp->mqp, gfp); + err =mlx4_qp_alloc (dev->dev, qpn, &qp->mqp);if (err) goto err_qpn;
@@ -1127,10 +1127,7 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd,int err;int sup_u_create_flags =MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK ;u16 xrcdn =0 ; -gfp_t gfp; - gfp = (init_attr->create_flags &MLX4_IB_QP_CREATE_USE_GFP_NOIO ) ? -GFP_NOIO :GFP_KERNEL ;/* * We only support LSO, vendor flag1, and multicast loopback blocking, * and only for kernel UD QPs.
@@ -1140,8 +1137,7 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd, MLX4_IB_SRIOV_TUNNEL_QP | MLX4_IB_SRIOV_SQP | MLX4_IB_QP_NETIF | - MLX4_IB_QP_CREATE_ROCE_V2_GSI | - MLX4_IB_QP_CREATE_USE_GFP_NOIO)) + MLX4_IB_QP_CREATE_ROCE_V2_GSI))return ERR_PTR (-EINVAL );if (init_attr->create_flags &IB_QP_CREATE_NETIF_QP ) {
@@ -1154,7 +1150,6 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd,return ERR_PTR (-EINVAL ); if ((init_attr->create_flags & ~(MLX4_IB_SRIOV_SQP | - MLX4_IB_QP_CREATE_USE_GFP_NOIO | MLX4_IB_QP_CREATE_ROCE_V2_GSI | MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK) && init_attr->qp_type != IB_QPT_UD) ||
@@ -1179,7 +1174,7 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd,case IB_QPT_RC :case IB_QPT_UC :case IB_QPT_RAW_PACKET : - qp =kzalloc (sizeof *qp, gfp); + qp =kzalloc (sizeof (*qp),GFP_KERNEL );if (!qp)return ERR_PTR (-ENOMEM ); qp->pri.vid =0xFFFF ;
@@ -1188,7 +1183,7 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd,case IB_QPT_UD : { err =create_qp_common (to_mdev (pd->device), pd, init_attr, - udata,0 , &qp, gfp); + udata,0 , &qp);if (err) {kfree (qp);return ERR_PTR (err);
@@ -1217,8 +1212,7 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd, } err =create_qp_common (to_mdev (pd->device), pd, init_attr, udata, - sqpn, - &qp, gfp); + sqpn, &qp);if (err)return ERR_PTR (err);
drivers/infiniband/hw/mlx4/srq.c +4 -4
@@ -135,14 +135,14 @@ struct ib_srq *mlx4_ib_create_srq(struct ib_pd *pd,if (err) goto err_mtt; }else { - err =mlx4_db_alloc (dev->dev, &srq->db,0 ,GFP_KERNEL ); + err =mlx4_db_alloc (dev->dev, &srq->db,0 );if (err) goto err_srq; *srq->db.db =0 ; -if (mlx4_buf_alloc (dev->dev, buf_size,PAGE_SIZE *2 , &srq->buf, -GFP_KERNEL )) { +if (mlx4_buf_alloc (dev->dev, buf_size,PAGE_SIZE *2 , + &srq->buf)) { err = -ENOMEM ; goto err_db; }
@@ -167,7 +167,7 @@ struct ib_srq *mlx4_ib_create_srq(struct ib_pd *pd,if (err) goto err_buf; - err =mlx4_buf_write_mtt (dev->dev, &srq->mtt, &srq->buf,GFP_KERNEL ); + err =mlx4_buf_write_mtt (dev->dev, &srq->mtt, &srq->buf);if (err) goto err_mtt;
drivers/net/ethernet/mellanox/mlx4/alloc.c +14 -15
@@ -578,7 +578,7 @@ u32 mlx4_zone_free_entries_unique(struct mlx4_zone_allocator *zones, u32 obj, u3 }static int mlx4_buf_direct_alloc (struct mlx4_dev *dev,int size, -struct mlx4_buf *buf,gfp_t gfp) +struct mlx4_buf *buf) {dma_addr_t t;
@@ -587,7 +587,7 @@ static int mlx4_buf_direct_alloc(struct mlx4_dev *dev, int size, buf->page_shift =get_order (size) +PAGE_SHIFT ; buf->direct.buf =dma_zalloc_coherent (&dev->persist->pdev->dev, - size, &t, gfp); + size, &t,GFP_KERNEL );if (!buf->direct.buf)return -ENOMEM ;
@@ -607,10 +607,10 @@ static int mlx4_buf_direct_alloc(struct mlx4_dev *dev, int size,* multiple pages, so we don't require too much contiguous memory. */ int mlx4_buf_alloc (struct mlx4_dev *dev,int size,int max_direct, -struct mlx4_buf *buf,gfp_t gfp) +struct mlx4_buf *buf) {if (size <= max_direct) { -return mlx4_buf_direct_alloc (dev, size, buf, gfp); +return mlx4_buf_direct_alloc (dev, size, buf); }else {dma_addr_t t;int i;
@@ -620,14 +620,14 @@ int mlx4_buf_alloc(struct mlx4_dev *dev, int size, int max_direct, buf->npages = buf->nbufs; buf->page_shift =PAGE_SHIFT ; buf->page_list =kcalloc (buf->nbufs,sizeof (*buf->page_list), - gfp); +GFP_KERNEL );if (!buf->page_list)return -ENOMEM ;for (i =0 ; i < buf->nbufs; ++i) { buf->page_list[i].buf =dma_zalloc_coherent (&dev->persist->pdev->dev, -PAGE_SIZE , &t, gfp); +PAGE_SIZE , &t,GFP_KERNEL );if (!buf->page_list[i].buf) goto err_free;
@@ -663,12 +663,11 @@ void mlx4_buf_free(struct mlx4_dev *dev, int size, struct mlx4_buf *buf) }EXPORT_SYMBOL_GPL (mlx4_buf_free); -static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir (struct device *dma_device, -gfp_t gfp) +static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir (struct device *dma_device) {struct mlx4_db_pgdir *pgdir; - pgdir =kzalloc (sizeof *pgdir, gfp); + pgdir =kzalloc (sizeof (*pgdir),GFP_KERNEL );if (!pgdir)return NULL ;
@@ -676,7 +675,7 @@ static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir(struct device *dma_device, pgdir->bits[0 ] = pgdir->order0; pgdir->bits[1 ] = pgdir->order1; pgdir->db_page =dma_alloc_coherent (dma_device,PAGE_SIZE , - &pgdir->db_dma, gfp); + &pgdir->db_dma,GFP_KERNEL );if (!pgdir->db_page) {kfree (pgdir);return NULL ;
@@ -716,7 +715,7 @@ static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir,return 0 ; } -int mlx4_db_alloc (struct mlx4_dev *dev,struct mlx4_db *db,int order,gfp_t gfp) +int mlx4_db_alloc (struct mlx4_dev *dev,struct mlx4_db *db,int order) {struct mlx4_priv *priv =mlx4_priv (dev);struct mlx4_db_pgdir *pgdir;
@@ -728,7 +727,7 @@ int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order, gfp_t gfpif (!mlx4_alloc_db_from_pgdir (pgdir, db, order)) goto out; - pgdir =mlx4_alloc_db_pgdir (&dev->persist->pdev->dev, gfp); + pgdir =mlx4_alloc_db_pgdir (&dev->persist->pdev->dev);if (!pgdir) { ret = -ENOMEM ; goto out;
@@ -780,13 +779,13 @@ int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres, {int err; - err =mlx4_db_alloc (dev, &wqres->db,1 ,GFP_KERNEL ); + err =mlx4_db_alloc (dev, &wqres->db,1 );if (err)return err; *wqres->db.db =0 ; - err =mlx4_buf_direct_alloc (dev, size, &wqres->buf,GFP_KERNEL ); + err =mlx4_buf_direct_alloc (dev, size, &wqres->buf);if (err) goto err_db;
@@ -795,7 +794,7 @@ int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,if (err) goto err_buf; - err =mlx4_buf_write_mtt (dev, &wqres->mtt, &wqres->buf,GFP_KERNEL ); + err =mlx4_buf_write_mtt (dev, &wqres->mtt, &wqres->buf);if (err) goto err_mtt;
drivers/net/ethernet/mellanox/mlx4/cq.c +2 -2
@@ -224,11 +224,11 @@ int __mlx4_cq_alloc_icm(struct mlx4_dev *dev, int *cqn)if (*cqn ==-1 )return -ENOMEM ; - err =mlx4_table_get (dev, &cq_table->table, *cqn,GFP_KERNEL ); + err =mlx4_table_get (dev, &cq_table->table, *cqn);if (err) goto err_out; - err =mlx4_table_get (dev, &cq_table->cmpt_table, *cqn,GFP_KERNEL ); + err =mlx4_table_get (dev, &cq_table->cmpt_table, *cqn);if (err) goto err_put;return 0 ;
drivers/net/ethernet/mellanox/mlx4/en_rx.c +3 -3
@@ -1021,7 +1021,7 @@ static int mlx4_en_config_rss_qp(struct mlx4_en_priv *priv, int qpn,if (!context)return -ENOMEM ; - err =mlx4_qp_alloc (mdev->dev, qpn, qp,GFP_KERNEL ); + err =mlx4_qp_alloc (mdev->dev, qpn, qp);if (err) {en_err (priv,"Failed to allocate qp #%x\n" , qpn); goto out;
@@ -1065,7 +1065,7 @@ int mlx4_en_create_drop_qp(struct mlx4_en_priv *priv)en_err (priv,"Failed reserving drop qpn\n" );return err; } - err =mlx4_qp_alloc (priv->mdev->dev, qpn, &priv->drop_qp,GFP_KERNEL ); + err =mlx4_qp_alloc (priv->mdev->dev, qpn, &priv->drop_qp);if (err) {en_err (priv,"Failed allocating drop qp\n" );mlx4_qp_release_range (priv->mdev->dev, qpn,1 );
@@ -1121,7 +1121,7 @@ int mlx4_en_config_rss_steer(struct mlx4_en_priv *priv) }/* Configure RSS indirection qp */ - err =mlx4_qp_alloc (mdev->dev, priv->base_qpn, &rss_map->indir_qp,GFP_KERNEL ); + err =mlx4_qp_alloc (mdev->dev, priv->base_qpn, &rss_map->indir_qp);if (err) {en_err (priv,"Failed to allocate RSS indirection QP\n" ); goto rss_err;
drivers/net/ethernet/mellanox/mlx4/en_tx.c +1 -1
@@ -111,7 +111,7 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv, goto err_hwq_res; } - err =mlx4_qp_alloc (mdev->dev, ring->qpn, &ring->sp_qp,GFP_KERNEL ); + err =mlx4_qp_alloc (mdev->dev, ring->qpn, &ring->sp_qp);if (err) {en_err (priv,"Failed allocating qp %d\n" , ring->qpn); goto err_reserve;
drivers/net/ethernet/mellanox/mlx4/icm.c +3 -4
@@ -251,8 +251,7 @@ int mlx4_UNMAP_ICM_AUX(struct mlx4_dev *dev) MLX4_CMD_TIME_CLASS_B, MLX4_CMD_NATIVE); } -int mlx4_table_get (struct mlx4_dev *dev,struct mlx4_icm_table *table,u32 obj, -gfp_t gfp) +int mlx4_table_get (struct mlx4_dev *dev,struct mlx4_icm_table *table,u32 obj) {u32 i = (obj & (table->num_obj -1 )) / (MLX4_TABLE_CHUNK_SIZE / table->obj_size);
@@ -266,7 +265,7 @@ int mlx4_table_get(struct mlx4_dev *dev, struct mlx4_icm_table *table, u32 obj, } table->icm[i] =mlx4_alloc_icm (dev,MLX4_TABLE_CHUNK_SIZE >>PAGE_SHIFT , - (table->lowmem ? gfp :GFP_HIGHUSER ) | + (table->lowmem ?GFP_KERNEL :GFP_HIGHUSER ) | __GFP_NOWARN, table->coherent);if (!table->icm[i]) { ret = -ENOMEM ;
@@ -363,7 +362,7 @@ int mlx4_table_get_range(struct mlx4_dev *dev, struct mlx4_icm_table *table,u32 i;for (i = start; i <= end; i += inc) { - err =mlx4_table_get (dev, table, i,GFP_KERNEL ); + err =mlx4_table_get (dev, table, i);if (err) goto fail; }
drivers/net/ethernet/mellanox/mlx4/icm.h +1 -2
@@ -71,8 +71,7 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages, gfp_t gfp_mask, int coherent);void mlx4_free_icm (struct mlx4_dev *dev,struct mlx4_icm *icm,int coherent); -int mlx4_table_get (struct mlx4_dev *dev,struct mlx4_icm_table *table,u32 obj, -gfp_t gfp); +int mlx4_table_get (struct mlx4_dev *dev,struct mlx4_icm_table *table,u32 obj);void mlx4_table_put (struct mlx4_dev *dev,struct mlx4_icm_table *table,u32 obj);int mlx4_table_get_range (struct mlx4_dev *dev,struct mlx4_icm_table *table,u32 start,u32 end);
drivers/net/ethernet/mellanox/mlx4/mlx4.h +2 -2
@@ -971,7 +971,7 @@ void mlx4_cleanup_cq_table(struct mlx4_dev *dev);void mlx4_cleanup_qp_table (struct mlx4_dev *dev);void mlx4_cleanup_srq_table (struct mlx4_dev *dev);void mlx4_cleanup_mcg_table (struct mlx4_dev *dev); -int __mlx4_qp_alloc_icm (struct mlx4_dev *dev,int qpn,gfp_t gfp); +int __mlx4_qp_alloc_icm (struct mlx4_dev *dev,int qpn);void __mlx4_qp_free_icm (struct mlx4_dev *dev,int qpn);int __mlx4_cq_alloc_icm (struct mlx4_dev *dev,int *cqn);void __mlx4_cq_free_icm (struct mlx4_dev *dev,int cqn);
@@ -979,7 +979,7 @@ int __mlx4_srq_alloc_icm(struct mlx4_dev *dev, int *srqn);void __mlx4_srq_free_icm (struct mlx4_dev *dev,int srqn);int __mlx4_mpt_reserve (struct mlx4_dev *dev);void __mlx4_mpt_release (struct mlx4_dev *dev,u32 index); -int __mlx4_mpt_alloc_icm (struct mlx4_dev *dev,u32 index,gfp_t gfp); +int __mlx4_mpt_alloc_icm (struct mlx4_dev *dev,u32 index);void __mlx4_mpt_free_icm (struct mlx4_dev *dev,u32 index);u32 __mlx4_alloc_mtt_range (struct mlx4_dev *dev,int order);void __mlx4_free_mtt_range (struct mlx4_dev *dev,u32 first_seg,int order);
drivers/net/ethernet/mellanox/mlx4/mr.c +8 -9
@@ -479,14 +479,14 @@ static void mlx4_mpt_release(struct mlx4_dev *dev, u32 index)__mlx4_mpt_release (dev, index); } -int __mlx4_mpt_alloc_icm (struct mlx4_dev *dev,u32 index,gfp_t gfp) +int __mlx4_mpt_alloc_icm (struct mlx4_dev *dev,u32 index) {struct mlx4_mr_table *mr_table = &mlx4_priv (dev)->mr_table; -return mlx4_table_get (dev, &mr_table->dmpt_table, index, gfp); +return mlx4_table_get (dev, &mr_table->dmpt_table, index); } -static int mlx4_mpt_alloc_icm (struct mlx4_dev *dev,u32 index,gfp_t gfp) +static int mlx4_mpt_alloc_icm (struct mlx4_dev *dev,u32 index) {u64 param =0 ;
@@ -497,7 +497,7 @@ static int mlx4_mpt_alloc_icm(struct mlx4_dev *dev, u32 index, gfp_t gfp)MLX4_CMD_TIME_CLASS_A , MLX4_CMD_WRAPPED); } -return __mlx4_mpt_alloc_icm (dev, index, gfp); +return __mlx4_mpt_alloc_icm (dev, index); }void __mlx4_mpt_free_icm (struct mlx4_dev *dev,u32 index)
@@ -629,7 +629,7 @@ int mlx4_mr_enable(struct mlx4_dev *dev, struct mlx4_mr *mr)struct mlx4_mpt_entry *mpt_entry;int err; - err =mlx4_mpt_alloc_icm (dev,key_to_hw_index (mr->key),GFP_KERNEL ); + err =mlx4_mpt_alloc_icm (dev,key_to_hw_index (mr->key));if (err)return err;
@@ -787,14 +787,13 @@ int mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,EXPORT_SYMBOL_GPL (mlx4_write_mtt);int mlx4_buf_write_mtt (struct mlx4_dev *dev,struct mlx4_mtt *mtt, -struct mlx4_buf *buf,gfp_t gfp) +struct mlx4_buf *buf) {u64 *page_list;int err;int i; - page_list =kmalloc (buf->npages *sizeof *page_list, - gfp); + page_list =kcalloc (buf->npages,sizeof (*page_list),GFP_KERNEL );if (!page_list)return -ENOMEM ;
@@ -841,7 +840,7 @@ int mlx4_mw_enable(struct mlx4_dev *dev, struct mlx4_mw *mw)struct mlx4_mpt_entry *mpt_entry;int err; - err =mlx4_mpt_alloc_icm (dev,key_to_hw_index (mw->key),GFP_KERNEL ); + err =mlx4_mpt_alloc_icm (dev,key_to_hw_index (mw->key));if (err)return err;
drivers/net/ethernet/mellanox/mlx4/qp.c +10 -10
@@ -301,29 +301,29 @@ void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt) }EXPORT_SYMBOL_GPL (mlx4_qp_release_range); -int __mlx4_qp_alloc_icm (struct mlx4_dev *dev,int qpn,gfp_t gfp) +int __mlx4_qp_alloc_icm (struct mlx4_dev *dev,int qpn) {struct mlx4_priv *priv =mlx4_priv (dev);struct mlx4_qp_table *qp_table = &priv->qp_table;int err; - err =mlx4_table_get (dev, &qp_table->qp_table, qpn, gfp); + err =mlx4_table_get (dev, &qp_table->qp_table, qpn);if (err) goto err_out; - err =mlx4_table_get (dev, &qp_table->auxc_table, qpn, gfp); + err =mlx4_table_get (dev, &qp_table->auxc_table, qpn);if (err) goto err_put_qp; - err =mlx4_table_get (dev, &qp_table->altc_table, qpn, gfp); + err =mlx4_table_get (dev, &qp_table->altc_table, qpn);if (err) goto err_put_auxc; - err =mlx4_table_get (dev, &qp_table->rdmarc_table, qpn, gfp); + err =mlx4_table_get (dev, &qp_table->rdmarc_table, qpn);if (err) goto err_put_altc; - err =mlx4_table_get (dev, &qp_table->cmpt_table, qpn, gfp); + err =mlx4_table_get (dev, &qp_table->cmpt_table, qpn);if (err) goto err_put_rdmarc;
@@ -345,7 +345,7 @@ int __mlx4_qp_alloc_icm(struct mlx4_dev *dev, int qpn, gfp_t gfp)return err; } -static int mlx4_qp_alloc_icm (struct mlx4_dev *dev,int qpn,gfp_t gfp) +static int mlx4_qp_alloc_icm (struct mlx4_dev *dev,int qpn) {u64 param =0 ;
@@ -355,7 +355,7 @@ static int mlx4_qp_alloc_icm(struct mlx4_dev *dev, int qpn, gfp_t gfp)MLX4_CMD_ALLOC_RES ,MLX4_CMD_TIME_CLASS_A , MLX4_CMD_WRAPPED); } -return __mlx4_qp_alloc_icm (dev, qpn, gfp); +return __mlx4_qp_alloc_icm (dev, qpn); }void __mlx4_qp_free_icm (struct mlx4_dev *dev,int qpn)
@@ -384,7 +384,7 @@ static void mlx4_qp_free_icm(struct mlx4_dev *dev, int qpn)__mlx4_qp_free_icm (dev, qpn); } -int mlx4_qp_alloc (struct mlx4_dev *dev,int qpn,struct mlx4_qp *qp,gfp_t gfp) +int mlx4_qp_alloc (struct mlx4_dev *dev,int qpn,struct mlx4_qp *qp) {struct mlx4_priv *priv =mlx4_priv (dev);struct mlx4_qp_table *qp_table = &priv->qp_table;
@@ -395,7 +395,7 @@ int mlx4_qp_alloc(struct mlx4_dev *dev, int qpn, struct mlx4_qp *qp, gfp_t gfp) qp->qpn = qpn; - err =mlx4_qp_alloc_icm (dev, qpn, gfp); + err =mlx4_qp_alloc_icm (dev, qpn);if (err)return err;
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +2 -2
@@ -1822,7 +1822,7 @@ static int qp_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd,return err;if (!fw_reserved (dev, qpn)) { - err =__mlx4_qp_alloc_icm (dev, qpn,GFP_KERNEL ); + err =__mlx4_qp_alloc_icm (dev, qpn);if (err) {res_abort_move (dev, slave,RES_QP , qpn);return err;
@@ -1909,7 +1909,7 @@ static int mpt_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd,if (err)return err; - err =__mlx4_mpt_alloc_icm (dev, mpt->key,GFP_KERNEL ); + err =__mlx4_mpt_alloc_icm (dev, mpt->key);if (err) {res_abort_move (dev, slave,RES_MPT , id);return err;
drivers/net/ethernet/mellanox/mlx4/srq.c +2 -2
@@ -100,11 +100,11 @@ int __mlx4_srq_alloc_icm(struct mlx4_dev *dev, int *srqn)if (*srqn ==-1 )return -ENOMEM ; - err =mlx4_table_get (dev, &srq_table->table, *srqn,GFP_KERNEL ); + err =mlx4_table_get (dev, &srq_table->table, *srqn);if (err) goto err_out; - err =mlx4_table_get (dev, &srq_table->cmpt_table, *srqn,GFP_KERNEL ); + err =mlx4_table_get (dev, &srq_table->cmpt_table, *srqn);if (err) goto err_put;return 0 ;
include/linux/mlx4/device.h +4 -6
@@ -1068,7 +1068,7 @@ static inline int mlx4_is_eth(struct mlx4_dev *dev, int port) }int mlx4_buf_alloc (struct mlx4_dev *dev,int size,int max_direct, -struct mlx4_buf *buf,gfp_t gfp); +struct mlx4_buf *buf);void mlx4_buf_free (struct mlx4_dev *dev,int size,struct mlx4_buf *buf);static inline void *mlx4_buf_offset (struct mlx4_buf *buf,int offset) {
@@ -1105,10 +1105,9 @@ int mlx4_mw_enable(struct mlx4_dev *dev, struct mlx4_mw *mw);int mlx4_write_mtt (struct mlx4_dev *dev,struct mlx4_mtt *mtt,int start_index,int npages,u64 *page_list);int mlx4_buf_write_mtt (struct mlx4_dev *dev,struct mlx4_mtt *mtt, -struct mlx4_buf *buf,gfp_t gfp); +struct mlx4_buf *buf); -int mlx4_db_alloc (struct mlx4_dev *dev,struct mlx4_db *db,int order, -gfp_t gfp); +int mlx4_db_alloc (struct mlx4_dev *dev,struct mlx4_db *db,int order);void mlx4_db_free (struct mlx4_dev *dev,struct mlx4_db *db); int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,
@@ -1124,8 +1123,7 @@ int mlx4_qp_reserve_range(struct mlx4_dev *dev, int cnt, int align, int *base, u8 flags);void mlx4_qp_release_range (struct mlx4_dev *dev,int base_qpn,int cnt); -int mlx4_qp_alloc (struct mlx4_dev *dev,int qpn,struct mlx4_qp *qp, -gfp_t gfp); +int mlx4_qp_alloc (struct mlx4_dev *dev,int qpn,struct mlx4_qp *qp);void mlx4_qp_free (struct mlx4_dev *dev,struct mlx4_qp *qp); int mlx4_srq_alloc(struct mlx4_dev *dev, u32 pdn, u32 cqn, u16 xrcdn,
Signature · 6 lines
2.12.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/4 IB/core: Remove NOIO QP create flag
In reply to a message not in the archiveFrom: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>
There are no users for IB_QP_CREATE_USE_GFP_NOIO flag, so let's remove it.
--- include/rdma/ib_verbs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/rdma/ib_verbs.h +1 -1
@@ -1056,7 +1056,7 @@ enum ib_qp_create_flags {IB_QP_CREATE_MANAGED_RECV =1 <<4 ,IB_QP_CREATE_NETIF_QP =1 <<5 ,IB_QP_CREATE_SIGNATURE_EN =1 <<6 , -IB_QP_CREATE_USE_GFP_NOIO =1 <<7 , +/* FREE = 1 << 7, */ IB_QP_CREATE_SCATTER_FCS =1 <<8 , IB_QP_CREATE_CVLAN_STRIPPING = 1 << 9,/* reserve bits 26-31 for low level drivers' internal use */
Signature · 6 lines
2.12.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 15 lines · Leon Romanovsky
Hi Doug,
These patches adds native support to NOIO allocations during create QP for IPoIB.
In contrast to the commit
09b93088d750("IB: Add a QP creation flag to useGFP_NOIOallocations"), which added specific QP create flag, this series uses standard memalloc_noio_* calls to markGFP_NOIOfor all allocations paths below.This change allows to all drivers benefit from this facitlity and not only mlx4 and qib. As a nice outcome, there is a lot simplification in the mlx4 and qib drivers by removing need to carry GFP flags.
Quoted 6 lines
Thanks
Cc Mel Gorman <[email protected]>Cc Jiri Kosina <[email protected]>Cc Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/[email protected]>Cc Dennis Dalessandro <[email protected]>a
Hi Doug,
This series creates simple (context) merge conflict between your's tree and net-next. The easiest and more convenient wayt to avoid is to base this series on commit 4931c6ef04b4 ("net/mlx4_en: Optimized single ring steering") from Dave's net-next.
Thanks
Quoted 43 lines
Changelog from v0:
* Forgot to add hfi1Leon Romanovsky (4):
IB/IPoIB: Convert IPoIB to memalloc_noio_* calls IB/{rdmavt, qib, hfi1}: Remove gfp flags argument {net, IB}/mlx4: Remove gfp flags argument IB/core: Remove NOIO QP create flagdrivers/infiniband/hw/hfi1/qp.c | 7 ++-- drivers/infiniband/hw/hfi1/qp.h | 3 +- drivers/infiniband/hw/mlx4/cq.c | 6 +-- drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 - drivers/infiniband/hw/mlx4/qp.c | 40 ++++++++---------- drivers/infiniband/hw/mlx4/srq.c | 8 ++-- drivers/infiniband/hw/qib/qib_qp.c | 15 ++++--- drivers/infiniband/hw/qib/qib_verbs.h | 4 +- drivers/infiniband/sw/rdmavt/qp.c | 48 ++++++---------------- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 16 ++++---- drivers/net/ethernet/mellanox/mlx4/alloc.c | 29 +++++++------ drivers/net/ethernet/mellanox/mlx4/cq.c | 4 +- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 6 +-- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 +- drivers/net/ethernet/mellanox/mlx4/icm.c | 7 ++-- drivers/net/ethernet/mellanox/mlx4/icm.h | 3 +- drivers/net/ethernet/mellanox/mlx4/mlx4.h | 4 +- drivers/net/ethernet/mellanox/mlx4/mr.c | 17 ++++---- drivers/net/ethernet/mellanox/mlx4/qp.c | 20 ++++----- .../net/ethernet/mellanox/mlx4/resource_tracker.c | 4 +- drivers/net/ethernet/mellanox/mlx4/srq.c | 4 +- include/linux/mlx4/device.h | 10 ++--- include/rdma/ib_verbs.h | 2 +- include/rdma/rdma_vt.h | 5 +-- 24 files changed, 112 insertions(+), 153 deletions(-)--
2.12.2--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 15 lines · Leon Romanovsky
Hi Doug,
These patches adds native support to NOIO allocations during create QP for IPoIB.
In contrast to the commit
09b93088d750("IB: Add a QP creation flag to useGFP_NOIOallocations"), which added specific QP create flag, this series uses standard memalloc_noio_* calls to markGFP_NOIOfor all allocations paths below.This change allows to all drivers benefit from this facitlity and not only mlx4 and qib. As a nice outcome, there is a lot simplification in the mlx4 and qib drivers by removing need to carry GFP flags.
Quoted 6 lines
Thanks
Cc Mel Gorman <[email protected]>Cc Jiri Kosina <[email protected]>Cc Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/[email protected]>Cc Dennis Dalessandro <[email protected]>
This series has been accepted into 4.13-rc, thanks.
Signature · 3 lines
Doug Ledford <[email protected]> GPG Key ID: B826A3330E572FDD Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD