diff mbox series

[v2,3/4] IB/hw: cleanup of incorrect pd->uobject usage

Message ID 20181014055345.25348-4-shamir.rabinovitch@oracle.com (mailing list archive)
State Superseded
Headers show
Series figure uverbs/kernel ib_pd w/o using ib_pd uobject | expand

Commit Message

Shamir Rabinovitch Oct. 14, 2018, 5:53 a.m. UTC
Next patch will replace usage of pd->uobject with rdma_is_user_pd
function. As suggested by Jason, some of the code was miss using
the pd->uobject pointer in places it should have not been used and
better alternative exists. Fix this just before we do the replace.

Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
---
 drivers/infiniband/hw/hns/hns_roce_hw_v1.c |  2 +-
 drivers/infiniband/hw/i40iw/i40iw_verbs.c  | 42 +++++++++++-----------
 drivers/infiniband/hw/mlx4/qp.c            |  4 +--
 drivers/infiniband/hw/mlx5/qp.c            |  4 +--
 4 files changed, 25 insertions(+), 27 deletions(-)

Comments

Dan Carpenter Oct. 18, 2018, 12:22 p.m. UTC | #1
Hi Shamir,

Thank you for the patch! Perhaps something to improve:

url:    https://github.com/0day-ci/linux/commits/Shamir-Rabinovitch/RDMA-restrack-resource-tracker-should-not-use-uobject-pointers/20181015-015654
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git for-next

New smatch warnings:
drivers/infiniband/hw/mlx5/qp.c:1865 create_qp_common() error: we previously assumed 'udata' could be null (see line 1839)

Old smatch warnings:
drivers/infiniband/hw/mlx5/qp.c:2014 create_qp_common() error: we previously assumed 'pd' could be null (see line 1845)
drivers/infiniband/hw/mlx5/qp.c:2014 create_qp_common() error: we previously assumed 'pd->uobject' could be null (see line 1846)
drivers/infiniband/hw/mlx5/qp.c:2455 mlx5_ib_create_qp() error: we previously assumed 'pd' could be null (see line 2362)

# https://github.com/0day-ci/linux/commit/f643bd9130193eabe24dd3814b42e9f364a3f39c
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout f643bd9130193eabe24dd3814b42e9f364a3f39c
vim +/udata +1865 drivers/infiniband/hw/mlx5/qp.c

28d6137008 Yishai Hadas       2016-05-23  1686  
e126ba97db Eli Cohen          2013-07-07  1687  static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
e126ba97db Eli Cohen          2013-07-07  1688  			    struct ib_qp_init_attr *init_attr,
e126ba97db Eli Cohen          2013-07-07  1689  			    struct ib_udata *udata, struct mlx5_ib_qp *qp)
e126ba97db Eli Cohen          2013-07-07  1690  {
e126ba97db Eli Cohen          2013-07-07  1691  	struct mlx5_ib_resources *devr = &dev->devr;
09a7d9eca1 Saeed Mahameed     2016-07-19  1692  	int inlen = MLX5_ST_SZ_BYTES(create_qp_in);
938fe83c8d Saeed Mahameed     2015-05-28  1693  	struct mlx5_core_dev *mdev = dev->mdev;
0625b4ba1a Jason Gunthorpe    2018-08-14  1694  	struct mlx5_ib_create_qp_resp resp = {};
89ea94a7b6 Maor Gottlieb      2016-06-17  1695  	struct mlx5_ib_cq *send_cq;
89ea94a7b6 Maor Gottlieb      2016-06-17  1696  	struct mlx5_ib_cq *recv_cq;
89ea94a7b6 Maor Gottlieb      2016-06-17  1697  	unsigned long flags;
cfb5e088e2 Haggai Abramovsky  2016-01-14  1698  	u32 uidx = MLX5_IB_DEFAULT_UIDX;
09a7d9eca1 Saeed Mahameed     2016-07-19  1699  	struct mlx5_ib_create_qp ucmd;
09a7d9eca1 Saeed Mahameed     2016-07-19  1700  	struct mlx5_ib_qp_base *base;
e7b169f344 Noa Osherovich     2018-02-25  1701  	int mlx5_st;
cfb5e088e2 Haggai Abramovsky  2016-01-14  1702  	void *qpc;
09a7d9eca1 Saeed Mahameed     2016-07-19  1703  	u32 *in;
09a7d9eca1 Saeed Mahameed     2016-07-19  1704  	int err;
e126ba97db Eli Cohen          2013-07-07  1705  
e126ba97db Eli Cohen          2013-07-07  1706  	mutex_init(&qp->mutex);
e126ba97db Eli Cohen          2013-07-07  1707  	spin_lock_init(&qp->sq.lock);
e126ba97db Eli Cohen          2013-07-07  1708  	spin_lock_init(&qp->rq.lock);
e126ba97db Eli Cohen          2013-07-07  1709  
e7b169f344 Noa Osherovich     2018-02-25  1710  	mlx5_st = to_mlx5_st(init_attr->qp_type);
e7b169f344 Noa Osherovich     2018-02-25  1711  	if (mlx5_st < 0)
e7b169f344 Noa Osherovich     2018-02-25  1712  		return -EINVAL;
e7b169f344 Noa Osherovich     2018-02-25  1713  
28d6137008 Yishai Hadas       2016-05-23  1714  	if (init_attr->rwq_ind_tbl) {
28d6137008 Yishai Hadas       2016-05-23  1715  		if (!udata)
28d6137008 Yishai Hadas       2016-05-23  1716  			return -ENOSYS;
28d6137008 Yishai Hadas       2016-05-23  1717  
28d6137008 Yishai Hadas       2016-05-23  1718  		err = create_rss_raw_qp_tir(dev, qp, pd, init_attr, udata);
28d6137008 Yishai Hadas       2016-05-23  1719  		return err;
28d6137008 Yishai Hadas       2016-05-23  1720  	}
28d6137008 Yishai Hadas       2016-05-23  1721  
f360d88a2e Eli Cohen          2014-04-02  1722  	if (init_attr->create_flags & IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK) {
938fe83c8d Saeed Mahameed     2015-05-28  1723  		if (!MLX5_CAP_GEN(mdev, block_lb_mc)) {
f360d88a2e Eli Cohen          2014-04-02  1724  			mlx5_ib_dbg(dev, "block multicast loopback isn't supported\n");
f360d88a2e Eli Cohen          2014-04-02  1725  			return -EINVAL;
f360d88a2e Eli Cohen          2014-04-02  1726  		} else {
f360d88a2e Eli Cohen          2014-04-02  1727  			qp->flags |= MLX5_IB_QP_BLOCK_MULTICAST_LOOPBACK;
f360d88a2e Eli Cohen          2014-04-02  1728  		}
f360d88a2e Eli Cohen          2014-04-02  1729  	}
f360d88a2e Eli Cohen          2014-04-02  1730  
051f263098 Leon Romanovsky    2015-12-20  1731  	if (init_attr->create_flags &
051f263098 Leon Romanovsky    2015-12-20  1732  			(IB_QP_CREATE_CROSS_CHANNEL |
051f263098 Leon Romanovsky    2015-12-20  1733  			 IB_QP_CREATE_MANAGED_SEND |
051f263098 Leon Romanovsky    2015-12-20  1734  			 IB_QP_CREATE_MANAGED_RECV)) {
051f263098 Leon Romanovsky    2015-12-20  1735  		if (!MLX5_CAP_GEN(mdev, cd)) {
051f263098 Leon Romanovsky    2015-12-20  1736  			mlx5_ib_dbg(dev, "cross-channel isn't supported\n");
051f263098 Leon Romanovsky    2015-12-20  1737  			return -EINVAL;
051f263098 Leon Romanovsky    2015-12-20  1738  		}
051f263098 Leon Romanovsky    2015-12-20  1739  		if (init_attr->create_flags & IB_QP_CREATE_CROSS_CHANNEL)
051f263098 Leon Romanovsky    2015-12-20  1740  			qp->flags |= MLX5_IB_QP_CROSS_CHANNEL;
051f263098 Leon Romanovsky    2015-12-20  1741  		if (init_attr->create_flags & IB_QP_CREATE_MANAGED_SEND)
051f263098 Leon Romanovsky    2015-12-20  1742  			qp->flags |= MLX5_IB_QP_MANAGED_SEND;
051f263098 Leon Romanovsky    2015-12-20  1743  		if (init_attr->create_flags & IB_QP_CREATE_MANAGED_RECV)
051f263098 Leon Romanovsky    2015-12-20  1744  			qp->flags |= MLX5_IB_QP_MANAGED_RECV;
051f263098 Leon Romanovsky    2015-12-20  1745  	}
f031396531 Erez Shitrit       2016-02-21  1746  
f031396531 Erez Shitrit       2016-02-21  1747  	if (init_attr->qp_type == IB_QPT_UD &&
f031396531 Erez Shitrit       2016-02-21  1748  	    (init_attr->create_flags & IB_QP_CREATE_IPOIB_UD_LSO))
f031396531 Erez Shitrit       2016-02-21  1749  		if (!MLX5_CAP_GEN(mdev, ipoib_basic_offloads)) {
f031396531 Erez Shitrit       2016-02-21  1750  			mlx5_ib_dbg(dev, "ipoib UD lso qp isn't supported\n");
f031396531 Erez Shitrit       2016-02-21  1751  			return -EOPNOTSUPP;
f031396531 Erez Shitrit       2016-02-21  1752  		}
f031396531 Erez Shitrit       2016-02-21  1753  
358e42ea66 Majd Dibbiny       2016-04-17  1754  	if (init_attr->create_flags & IB_QP_CREATE_SCATTER_FCS) {
358e42ea66 Majd Dibbiny       2016-04-17  1755  		if (init_attr->qp_type != IB_QPT_RAW_PACKET) {
358e42ea66 Majd Dibbiny       2016-04-17  1756  			mlx5_ib_dbg(dev, "Scatter FCS is supported only for Raw Packet QPs");
358e42ea66 Majd Dibbiny       2016-04-17  1757  			return -EOPNOTSUPP;
358e42ea66 Majd Dibbiny       2016-04-17  1758  		}
358e42ea66 Majd Dibbiny       2016-04-17  1759  		if (!MLX5_CAP_GEN(dev->mdev, eth_net_offloads) ||
358e42ea66 Majd Dibbiny       2016-04-17  1760  		    !MLX5_CAP_ETH(dev->mdev, scatter_fcs)) {
358e42ea66 Majd Dibbiny       2016-04-17  1761  			mlx5_ib_dbg(dev, "Scatter FCS isn't supported\n");
358e42ea66 Majd Dibbiny       2016-04-17  1762  			return -EOPNOTSUPP;
358e42ea66 Majd Dibbiny       2016-04-17  1763  		}
358e42ea66 Majd Dibbiny       2016-04-17  1764  		qp->flags |= MLX5_IB_QP_CAP_SCATTER_FCS;
358e42ea66 Majd Dibbiny       2016-04-17  1765  	}
358e42ea66 Majd Dibbiny       2016-04-17  1766  
e126ba97db Eli Cohen          2013-07-07  1767  	if (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR)
e126ba97db Eli Cohen          2013-07-07  1768  		qp->sq_signal_bits = MLX5_WQE_CTRL_CQ_UPDATE;
e126ba97db Eli Cohen          2013-07-07  1769  
e4cc4fa7cc Noa Osherovich     2017-01-18  1770  	if (init_attr->create_flags & IB_QP_CREATE_CVLAN_STRIPPING) {
e4cc4fa7cc Noa Osherovich     2017-01-18  1771  		if (!(MLX5_CAP_GEN(dev->mdev, eth_net_offloads) &&
e4cc4fa7cc Noa Osherovich     2017-01-18  1772  		      MLX5_CAP_ETH(dev->mdev, vlan_cap)) ||
e4cc4fa7cc Noa Osherovich     2017-01-18  1773  		    (init_attr->qp_type != IB_QPT_RAW_PACKET))
e4cc4fa7cc Noa Osherovich     2017-01-18  1774  			return -EOPNOTSUPP;
e4cc4fa7cc Noa Osherovich     2017-01-18  1775  		qp->flags |= MLX5_IB_QP_CVLAN_STRIPPING;
e4cc4fa7cc Noa Osherovich     2017-01-18  1776  	}
e4cc4fa7cc Noa Osherovich     2017-01-18  1777  
f643bd9130 Shamir Rabinovitch 2018-10-14  1778  	if (udata) {
e126ba97db Eli Cohen          2013-07-07  1779  		if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd))) {
e126ba97db Eli Cohen          2013-07-07  1780  			mlx5_ib_dbg(dev, "copy failed\n");
e126ba97db Eli Cohen          2013-07-07  1781  			return -EFAULT;
e126ba97db Eli Cohen          2013-07-07  1782  		}
e126ba97db Eli Cohen          2013-07-07  1783  
cfb5e088e2 Haggai Abramovsky  2016-01-14  1784  		err = get_qp_user_index(to_mucontext(pd->uobject->context),
cfb5e088e2 Haggai Abramovsky  2016-01-14  1785  					&ucmd, udata->inlen, &uidx);
cfb5e088e2 Haggai Abramovsky  2016-01-14  1786  		if (err)
cfb5e088e2 Haggai Abramovsky  2016-01-14  1787  			return err;
cfb5e088e2 Haggai Abramovsky  2016-01-14  1788  
e126ba97db Eli Cohen          2013-07-07  1789  		qp->wq_sig = !!(ucmd.flags & MLX5_QP_FLAG_SIGNATURE);
e126ba97db Eli Cohen          2013-07-07  1790  		qp->scat_cqe = !!(ucmd.flags & MLX5_QP_FLAG_SCATTER_CQE);
f95ef6cbae Maor Gottlieb      2017-10-19  1791  		if (ucmd.flags & MLX5_QP_FLAG_TUNNEL_OFFLOADS) {
f95ef6cbae Maor Gottlieb      2017-10-19  1792  			if (init_attr->qp_type != IB_QPT_RAW_PACKET ||
f95ef6cbae Maor Gottlieb      2017-10-19  1793  			    !tunnel_offload_supported(mdev)) {
f95ef6cbae Maor Gottlieb      2017-10-19  1794  				mlx5_ib_dbg(dev, "Tunnel offload isn't supported\n");
f95ef6cbae Maor Gottlieb      2017-10-19  1795  				return -EOPNOTSUPP;
f95ef6cbae Maor Gottlieb      2017-10-19  1796  			}
175edba856 Mark Bloch         2018-09-17  1797  			qp->flags_en |= MLX5_QP_FLAG_TUNNEL_OFFLOADS;
175edba856 Mark Bloch         2018-09-17  1798  		}
175edba856 Mark Bloch         2018-09-17  1799  
175edba856 Mark Bloch         2018-09-17  1800  		if (ucmd.flags & MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC) {
175edba856 Mark Bloch         2018-09-17  1801  			if (init_attr->qp_type != IB_QPT_RAW_PACKET) {
175edba856 Mark Bloch         2018-09-17  1802  				mlx5_ib_dbg(dev, "Self-LB UC isn't supported\n");
175edba856 Mark Bloch         2018-09-17  1803  				return -EOPNOTSUPP;
175edba856 Mark Bloch         2018-09-17  1804  			}
175edba856 Mark Bloch         2018-09-17  1805  			qp->flags_en |= MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC;
175edba856 Mark Bloch         2018-09-17  1806  		}
175edba856 Mark Bloch         2018-09-17  1807  
175edba856 Mark Bloch         2018-09-17  1808  		if (ucmd.flags & MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC) {
175edba856 Mark Bloch         2018-09-17  1809  			if (init_attr->qp_type != IB_QPT_RAW_PACKET) {
175edba856 Mark Bloch         2018-09-17  1810  				mlx5_ib_dbg(dev, "Self-LB UM isn't supported\n");
175edba856 Mark Bloch         2018-09-17  1811  				return -EOPNOTSUPP;
175edba856 Mark Bloch         2018-09-17  1812  			}
175edba856 Mark Bloch         2018-09-17  1813  			qp->flags_en |= MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC;
f95ef6cbae Maor Gottlieb      2017-10-19  1814  		}
c2e53b2ce1 Yishai Hadas       2017-06-08  1815  
c2e53b2ce1 Yishai Hadas       2017-06-08  1816  		if (init_attr->create_flags & IB_QP_CREATE_SOURCE_QPN) {
c2e53b2ce1 Yishai Hadas       2017-06-08  1817  			if (init_attr->qp_type != IB_QPT_UD ||
c2e53b2ce1 Yishai Hadas       2017-06-08  1818  			    (MLX5_CAP_GEN(dev->mdev, port_type) !=
c2e53b2ce1 Yishai Hadas       2017-06-08  1819  			     MLX5_CAP_PORT_TYPE_IB) ||
c2e53b2ce1 Yishai Hadas       2017-06-08  1820  			    !mlx5_get_flow_namespace(dev->mdev, MLX5_FLOW_NAMESPACE_BYPASS)) {
c2e53b2ce1 Yishai Hadas       2017-06-08  1821  				mlx5_ib_dbg(dev, "Source QP option isn't supported\n");
c2e53b2ce1 Yishai Hadas       2017-06-08  1822  				return -EOPNOTSUPP;
c2e53b2ce1 Yishai Hadas       2017-06-08  1823  			}
c2e53b2ce1 Yishai Hadas       2017-06-08  1824  
c2e53b2ce1 Yishai Hadas       2017-06-08  1825  			qp->flags |= MLX5_IB_QP_UNDERLAY;
c2e53b2ce1 Yishai Hadas       2017-06-08  1826  			qp->underlay_qpn = init_attr->source_qpn;
c2e53b2ce1 Yishai Hadas       2017-06-08  1827  		}
e126ba97db Eli Cohen          2013-07-07  1828  	} else {
e126ba97db Eli Cohen          2013-07-07  1829  		qp->wq_sig = !!wq_signature;
e126ba97db Eli Cohen          2013-07-07  1830  	}
e126ba97db Eli Cohen          2013-07-07  1831  
c2e53b2ce1 Yishai Hadas       2017-06-08  1832  	base = (init_attr->qp_type == IB_QPT_RAW_PACKET ||
c2e53b2ce1 Yishai Hadas       2017-06-08  1833  		qp->flags & MLX5_IB_QP_UNDERLAY) ?
c2e53b2ce1 Yishai Hadas       2017-06-08  1834  	       &qp->raw_packet_qp.rq.base :
c2e53b2ce1 Yishai Hadas       2017-06-08  1835  	       &qp->trans_qp.base;
c2e53b2ce1 Yishai Hadas       2017-06-08  1836  
e126ba97db Eli Cohen          2013-07-07  1837  	qp->has_rq = qp_has_rq(init_attr);
e126ba97db Eli Cohen          2013-07-07  1838  	err = set_rq_size(dev, &init_attr->cap, qp->has_rq,
f643bd9130 Shamir Rabinovitch 2018-10-14 @1839  			  qp, udata ? &ucmd : NULL);
                                                                              ^^^^^^^
The patch adds a check for NULL.

e126ba97db Eli Cohen          2013-07-07  1840  	if (err) {
e126ba97db Eli Cohen          2013-07-07  1841  		mlx5_ib_dbg(dev, "err %d\n", err);
e126ba97db Eli Cohen          2013-07-07  1842  		return err;
e126ba97db Eli Cohen          2013-07-07  1843  	}
e126ba97db Eli Cohen          2013-07-07  1844  
e126ba97db Eli Cohen          2013-07-07  1845  	if (pd) {
e126ba97db Eli Cohen          2013-07-07  1846  		if (pd->uobject) {
938fe83c8d Saeed Mahameed     2015-05-28  1847  			__u32 max_wqes =
938fe83c8d Saeed Mahameed     2015-05-28  1848  				1 << MLX5_CAP_GEN(mdev, log_max_qp_sz);
e126ba97db Eli Cohen          2013-07-07  1849  			mlx5_ib_dbg(dev, "requested sq_wqe_count (%d)\n", ucmd.sq_wqe_count);
e126ba97db Eli Cohen          2013-07-07  1850  			if (ucmd.rq_wqe_shift != qp->rq.wqe_shift ||
e126ba97db Eli Cohen          2013-07-07  1851  			    ucmd.rq_wqe_count != qp->rq.wqe_cnt) {
e126ba97db Eli Cohen          2013-07-07  1852  				mlx5_ib_dbg(dev, "invalid rq params\n");
e126ba97db Eli Cohen          2013-07-07  1853  				return -EINVAL;
e126ba97db Eli Cohen          2013-07-07  1854  			}
938fe83c8d Saeed Mahameed     2015-05-28  1855  			if (ucmd.sq_wqe_count > max_wqes) {
e126ba97db Eli Cohen          2013-07-07  1856  				mlx5_ib_dbg(dev, "requested sq_wqe_count (%d) > max allowed (%d)\n",
938fe83c8d Saeed Mahameed     2015-05-28  1857  					    ucmd.sq_wqe_count, max_wqes);
e126ba97db Eli Cohen          2013-07-07  1858  				return -EINVAL;
e126ba97db Eli Cohen          2013-07-07  1859  			}
b11a4f9cde Haggai Eran        2016-02-29  1860  			if (init_attr->create_flags &
b11a4f9cde Haggai Eran        2016-02-29  1861  			    mlx5_ib_create_qp_sqpn_qp1()) {
b11a4f9cde Haggai Eran        2016-02-29  1862  				mlx5_ib_dbg(dev, "user-space is not allowed to create UD QPs spoofing as QP1\n");
b11a4f9cde Haggai Eran        2016-02-29  1863  				return -EINVAL;
b11a4f9cde Haggai Eran        2016-02-29  1864  			}
0fb2ed66a1 majd@mellanox.com  2016-01-14 @1865  			err = create_user_qp(dev, pd, qp, udata, init_attr, &in,
                                                                                                          ^^^^^
Does this need to be checked as well?

0fb2ed66a1 majd@mellanox.com  2016-01-14  1866  					     &resp, &inlen, base);
e126ba97db Eli Cohen          2013-07-07  1867  			if (err)
e126ba97db Eli Cohen          2013-07-07  1868  				mlx5_ib_dbg(dev, "err %d\n", err);
e126ba97db Eli Cohen          2013-07-07  1869  		} else {
19098df2da majd@mellanox.com  2016-01-14  1870  			err = create_kernel_qp(dev, init_attr, qp, &in, &inlen,
19098df2da majd@mellanox.com  2016-01-14  1871  					       base);
e126ba97db Eli Cohen          2013-07-07  1872  			if (err)
e126ba97db Eli Cohen          2013-07-07  1873  				mlx5_ib_dbg(dev, "err %d\n", err);
e126ba97db Eli Cohen          2013-07-07  1874  		}
e126ba97db Eli Cohen          2013-07-07  1875  
e126ba97db Eli Cohen          2013-07-07  1876  		if (err)
e126ba97db Eli Cohen          2013-07-07  1877  			return err;
e126ba97db Eli Cohen          2013-07-07  1878  	} else {
1b9a07ee25 Leon Romanovsky    2017-05-10  1879  		in = kvzalloc(inlen, GFP_KERNEL);
e126ba97db Eli Cohen          2013-07-07  1880  		if (!in)
e126ba97db Eli Cohen          2013-07-07  1881  			return -ENOMEM;
e126ba97db Eli Cohen          2013-07-07  1882  
e126ba97db Eli Cohen          2013-07-07  1883  		qp->create_type = MLX5_QP_EMPTY;
e126ba97db Eli Cohen          2013-07-07  1884  	}
e126ba97db Eli Cohen          2013-07-07  1885  
e126ba97db Eli Cohen          2013-07-07  1886  	if (is_sqp(init_attr->qp_type))
e126ba97db Eli Cohen          2013-07-07  1887  		qp->port = init_attr->port_num;
e126ba97db Eli Cohen          2013-07-07  1888  
09a7d9eca1 Saeed Mahameed     2016-07-19  1889  	qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
09a7d9eca1 Saeed Mahameed     2016-07-19  1890  
e7b169f344 Noa Osherovich     2018-02-25  1891  	MLX5_SET(qpc, qpc, st, mlx5_st);
09a7d9eca1 Saeed Mahameed     2016-07-19  1892  	MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
e126ba97db Eli Cohen          2013-07-07  1893  
e126ba97db Eli Cohen          2013-07-07  1894  	if (init_attr->qp_type != MLX5_IB_QPT_REG_UMR)
09a7d9eca1 Saeed Mahameed     2016-07-19  1895  		MLX5_SET(qpc, qpc, pd, to_mpd(pd ? pd : devr->p0)->pdn);
e126ba97db Eli Cohen          2013-07-07  1896  	else
09a7d9eca1 Saeed Mahameed     2016-07-19  1897  		MLX5_SET(qpc, qpc, latency_sensitive, 1);
09a7d9eca1 Saeed Mahameed     2016-07-19  1898  
e126ba97db Eli Cohen          2013-07-07  1899  
e126ba97db Eli Cohen          2013-07-07  1900  	if (qp->wq_sig)
09a7d9eca1 Saeed Mahameed     2016-07-19  1901  		MLX5_SET(qpc, qpc, wq_signature, 1);
e126ba97db Eli Cohen          2013-07-07  1902  
f360d88a2e Eli Cohen          2014-04-02  1903  	if (qp->flags & MLX5_IB_QP_BLOCK_MULTICAST_LOOPBACK)
09a7d9eca1 Saeed Mahameed     2016-07-19  1904  		MLX5_SET(qpc, qpc, block_lb_mc, 1);
f360d88a2e Eli Cohen          2014-04-02  1905  
051f263098 Leon Romanovsky    2015-12-20  1906  	if (qp->flags & MLX5_IB_QP_CROSS_CHANNEL)
09a7d9eca1 Saeed Mahameed     2016-07-19  1907  		MLX5_SET(qpc, qpc, cd_master, 1);
051f263098 Leon Romanovsky    2015-12-20  1908  	if (qp->flags & MLX5_IB_QP_MANAGED_SEND)
09a7d9eca1 Saeed Mahameed     2016-07-19  1909  		MLX5_SET(qpc, qpc, cd_slave_send, 1);
051f263098 Leon Romanovsky    2015-12-20  1910  	if (qp->flags & MLX5_IB_QP_MANAGED_RECV)
09a7d9eca1 Saeed Mahameed     2016-07-19  1911  		MLX5_SET(qpc, qpc, cd_slave_receive, 1);
051f263098 Leon Romanovsky    2015-12-20  1912  
e126ba97db Eli Cohen          2013-07-07  1913  	if (qp->scat_cqe && is_connected(init_attr->qp_type)) {
e126ba97db Eli Cohen          2013-07-07  1914  		int rcqe_sz;
e126ba97db Eli Cohen          2013-07-07  1915  		int scqe_sz;
e126ba97db Eli Cohen          2013-07-07  1916  
e126ba97db Eli Cohen          2013-07-07  1917  		rcqe_sz = mlx5_ib_get_cqe_size(dev, init_attr->recv_cq);
e126ba97db Eli Cohen          2013-07-07  1918  		scqe_sz = mlx5_ib_get_cqe_size(dev, init_attr->send_cq);
e126ba97db Eli Cohen          2013-07-07  1919  
e126ba97db Eli Cohen          2013-07-07  1920  		if (rcqe_sz == 128)
09a7d9eca1 Saeed Mahameed     2016-07-19  1921  			MLX5_SET(qpc, qpc, cs_res, MLX5_RES_SCAT_DATA64_CQE);
e126ba97db Eli Cohen          2013-07-07  1922  		else
09a7d9eca1 Saeed Mahameed     2016-07-19  1923  			MLX5_SET(qpc, qpc, cs_res, MLX5_RES_SCAT_DATA32_CQE);
e126ba97db Eli Cohen          2013-07-07  1924  
e126ba97db Eli Cohen          2013-07-07  1925  		if (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR) {
e126ba97db Eli Cohen          2013-07-07  1926  			if (scqe_sz == 128)
09a7d9eca1 Saeed Mahameed     2016-07-19  1927  				MLX5_SET(qpc, qpc, cs_req, MLX5_REQ_SCAT_DATA64_CQE);
e126ba97db Eli Cohen          2013-07-07  1928  			else
09a7d9eca1 Saeed Mahameed     2016-07-19  1929  				MLX5_SET(qpc, qpc, cs_req, MLX5_REQ_SCAT_DATA32_CQE);
e126ba97db Eli Cohen          2013-07-07  1930  		}
e126ba97db Eli Cohen          2013-07-07  1931  	}
e126ba97db Eli Cohen          2013-07-07  1932  
e126ba97db Eli Cohen          2013-07-07  1933  	if (qp->rq.wqe_cnt) {
09a7d9eca1 Saeed Mahameed     2016-07-19  1934  		MLX5_SET(qpc, qpc, log_rq_stride, qp->rq.wqe_shift - 4);
09a7d9eca1 Saeed Mahameed     2016-07-19  1935  		MLX5_SET(qpc, qpc, log_rq_size, ilog2(qp->rq.wqe_cnt));
e126ba97db Eli Cohen          2013-07-07  1936  	}
e126ba97db Eli Cohen          2013-07-07  1937  
09a7d9eca1 Saeed Mahameed     2016-07-19  1938  	MLX5_SET(qpc, qpc, rq_type, get_rx_type(qp, init_attr));
e126ba97db Eli Cohen          2013-07-07  1939  
3fd3307ef3 Artemy Kovalyov    2017-08-17  1940  	if (qp->sq.wqe_cnt) {
09a7d9eca1 Saeed Mahameed     2016-07-19  1941  		MLX5_SET(qpc, qpc, log_sq_size, ilog2(qp->sq.wqe_cnt));
3fd3307ef3 Artemy Kovalyov    2017-08-17  1942  	} else {
09a7d9eca1 Saeed Mahameed     2016-07-19  1943  		MLX5_SET(qpc, qpc, no_sq, 1);
3fd3307ef3 Artemy Kovalyov    2017-08-17  1944  		if (init_attr->srq &&
3fd3307ef3 Artemy Kovalyov    2017-08-17  1945  		    init_attr->srq->srq_type == IB_SRQT_TM)
3fd3307ef3 Artemy Kovalyov    2017-08-17  1946  			MLX5_SET(qpc, qpc, offload_type,
3fd3307ef3 Artemy Kovalyov    2017-08-17  1947  				 MLX5_QPC_OFFLOAD_TYPE_RNDV);
3fd3307ef3 Artemy Kovalyov    2017-08-17  1948  	}
e126ba97db Eli Cohen          2013-07-07  1949  
e126ba97db Eli Cohen          2013-07-07  1950  	/* Set default resources */
e126ba97db Eli Cohen          2013-07-07  1951  	switch (init_attr->qp_type) {
e126ba97db Eli Cohen          2013-07-07  1952  	case IB_QPT_XRC_TGT:
09a7d9eca1 Saeed Mahameed     2016-07-19  1953  		MLX5_SET(qpc, qpc, cqn_rcv, to_mcq(devr->c0)->mcq.cqn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1954  		MLX5_SET(qpc, qpc, cqn_snd, to_mcq(devr->c0)->mcq.cqn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1955  		MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(devr->s0)->msrq.srqn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1956  		MLX5_SET(qpc, qpc, xrcd, to_mxrcd(init_attr->xrcd)->xrcdn);
e126ba97db Eli Cohen          2013-07-07  1957  		break;
e126ba97db Eli Cohen          2013-07-07  1958  	case IB_QPT_XRC_INI:
09a7d9eca1 Saeed Mahameed     2016-07-19  1959  		MLX5_SET(qpc, qpc, cqn_rcv, to_mcq(devr->c0)->mcq.cqn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1960  		MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x1)->xrcdn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1961  		MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(devr->s0)->msrq.srqn);
e126ba97db Eli Cohen          2013-07-07  1962  		break;
e126ba97db Eli Cohen          2013-07-07  1963  	default:
e126ba97db Eli Cohen          2013-07-07  1964  		if (init_attr->srq) {
09a7d9eca1 Saeed Mahameed     2016-07-19  1965  			MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x0)->xrcdn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1966  			MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(init_attr->srq)->msrq.srqn);
e126ba97db Eli Cohen          2013-07-07  1967  		} else {
09a7d9eca1 Saeed Mahameed     2016-07-19  1968  			MLX5_SET(qpc, qpc, xrcd, to_mxrcd(devr->x1)->xrcdn);
09a7d9eca1 Saeed Mahameed     2016-07-19  1969  			MLX5_SET(qpc, qpc, srqn_rmpn_xrqn, to_msrq(devr->s1)->msrq.srqn);
e126ba97db Eli Cohen          2013-07-07  1970  		}
e126ba97db Eli Cohen          2013-07-07  1971  	}
e126ba97db Eli Cohen          2013-07-07  1972  
e126ba97db Eli Cohen          2013-07-07  1973  	if (init_attr->send_cq)
09a7d9eca1 Saeed Mahameed     2016-07-19  1974  		MLX5_SET(qpc, qpc, cqn_snd, to_mcq(init_attr->send_cq)->mcq.cqn);
e126ba97db Eli Cohen          2013-07-07  1975  
e126ba97db Eli Cohen          2013-07-07  1976  	if (init_attr->recv_cq)
09a7d9eca1 Saeed Mahameed     2016-07-19  1977  		MLX5_SET(qpc, qpc, cqn_rcv, to_mcq(init_attr->recv_cq)->mcq.cqn);
e126ba97db Eli Cohen          2013-07-07  1978  
09a7d9eca1 Saeed Mahameed     2016-07-19  1979  	MLX5_SET64(qpc, qpc, dbr_addr, qp->db.dma);
e126ba97db Eli Cohen          2013-07-07  1980  
cfb5e088e2 Haggai Abramovsky  2016-01-14  1981  	/* 0xffffff means we ask to work with cqe version 0 */
09a7d9eca1 Saeed Mahameed     2016-07-19  1982  	if (MLX5_CAP_GEN(mdev, cqe_version) == MLX5_CQE_VERSION_V1)
cfb5e088e2 Haggai Abramovsky  2016-01-14  1983  		MLX5_SET(qpc, qpc, user_index, uidx);
09a7d9eca1 Saeed Mahameed     2016-07-19  1984  
f031396531 Erez Shitrit       2016-02-21  1985  	/* we use IB_QP_CREATE_IPOIB_UD_LSO to indicates ipoib qp */
f031396531 Erez Shitrit       2016-02-21  1986  	if (init_attr->qp_type == IB_QPT_UD &&
f031396531 Erez Shitrit       2016-02-21  1987  	    (init_attr->create_flags & IB_QP_CREATE_IPOIB_UD_LSO)) {
f031396531 Erez Shitrit       2016-02-21  1988  		MLX5_SET(qpc, qpc, ulp_stateless_offload_mode, 1);
f031396531 Erez Shitrit       2016-02-21  1989  		qp->flags |= MLX5_IB_QP_LSO;
f031396531 Erez Shitrit       2016-02-21  1990  	}
cfb5e088e2 Haggai Abramovsky  2016-01-14  1991  
b1383aa641 Noa Osherovich     2017-10-29  1992  	if (init_attr->create_flags & IB_QP_CREATE_PCI_WRITE_END_PADDING) {
b1383aa641 Noa Osherovich     2017-10-29  1993  		if (!MLX5_CAP_GEN(dev->mdev, end_pad)) {
b1383aa641 Noa Osherovich     2017-10-29  1994  			mlx5_ib_dbg(dev, "scatter end padding is not supported\n");
b1383aa641 Noa Osherovich     2017-10-29  1995  			err = -EOPNOTSUPP;
b1383aa641 Noa Osherovich     2017-10-29  1996  			goto err;
b1383aa641 Noa Osherovich     2017-10-29  1997  		} else if (init_attr->qp_type != IB_QPT_RAW_PACKET) {
b1383aa641 Noa Osherovich     2017-10-29  1998  			MLX5_SET(qpc, qpc, end_padding_mode,
b1383aa641 Noa Osherovich     2017-10-29  1999  				 MLX5_WQ_END_PAD_MODE_ALIGN);
b1383aa641 Noa Osherovich     2017-10-29  2000  		} else {
b1383aa641 Noa Osherovich     2017-10-29  2001  			qp->flags |= MLX5_IB_QP_PCI_WRITE_END_PADDING;
b1383aa641 Noa Osherovich     2017-10-29  2002  		}
b1383aa641 Noa Osherovich     2017-10-29  2003  	}
b1383aa641 Noa Osherovich     2017-10-29  2004  
2c292dbb39 Boris Pismenny     2018-03-08  2005  	if (inlen < 0) {
2c292dbb39 Boris Pismenny     2018-03-08  2006  		err = -EINVAL;
2c292dbb39 Boris Pismenny     2018-03-08  2007  		goto err;
2c292dbb39 Boris Pismenny     2018-03-08  2008  	}
2c292dbb39 Boris Pismenny     2018-03-08  2009  
c2e53b2ce1 Yishai Hadas       2017-06-08  2010  	if (init_attr->qp_type == IB_QPT_RAW_PACKET ||
c2e53b2ce1 Yishai Hadas       2017-06-08  2011  	    qp->flags & MLX5_IB_QP_UNDERLAY) {
0fb2ed66a1 majd@mellanox.com  2016-01-14  2012  		qp->raw_packet_qp.sq.ubuffer.buf_addr = ucmd.sq_buf_addr;
0fb2ed66a1 majd@mellanox.com  2016-01-14  2013  		raw_packet_qp_copy_info(qp, &qp->raw_packet_qp);
7f72052cb4 Yishai Hadas       2018-09-20  2014  		err = create_raw_packet_qp(dev, qp, in, inlen, pd, udata,
7f72052cb4 Yishai Hadas       2018-09-20  2015  					   &resp);
0fb2ed66a1 majd@mellanox.com  2016-01-14  2016  	} else {
19098df2da majd@mellanox.com  2016-01-14  2017  		err = mlx5_core_create_qp(dev->mdev, &base->mqp, in, inlen);
0fb2ed66a1 majd@mellanox.com  2016-01-14  2018  	}
0fb2ed66a1 majd@mellanox.com  2016-01-14  2019  
e126ba97db Eli Cohen          2013-07-07  2020  	if (err) {
e126ba97db Eli Cohen          2013-07-07  2021  		mlx5_ib_dbg(dev, "create qp failed\n");
e126ba97db Eli Cohen          2013-07-07  2022  		goto err_create;
e126ba97db Eli Cohen          2013-07-07  2023  	}
e126ba97db Eli Cohen          2013-07-07  2024  
479163f460 Al Viro            2014-11-20  2025  	kvfree(in);
e126ba97db Eli Cohen          2013-07-07  2026  
19098df2da majd@mellanox.com  2016-01-14  2027  	base->container_mibqp = qp;
19098df2da majd@mellanox.com  2016-01-14  2028  	base->mqp.event = mlx5_ib_qp_event;
e126ba97db Eli Cohen          2013-07-07  2029  
89ea94a7b6 Maor Gottlieb      2016-06-17  2030  	get_cqs(init_attr->qp_type, init_attr->send_cq, init_attr->recv_cq,
89ea94a7b6 Maor Gottlieb      2016-06-17  2031  		&send_cq, &recv_cq);
89ea94a7b6 Maor Gottlieb      2016-06-17  2032  	spin_lock_irqsave(&dev->reset_flow_resource_lock, flags);
89ea94a7b6 Maor Gottlieb      2016-06-17  2033  	mlx5_ib_lock_cqs(send_cq, recv_cq);
89ea94a7b6 Maor Gottlieb      2016-06-17  2034  	/* Maintain device to QPs access, needed for further handling via reset
89ea94a7b6 Maor Gottlieb      2016-06-17  2035  	 * flow
89ea94a7b6 Maor Gottlieb      2016-06-17  2036  	 */
89ea94a7b6 Maor Gottlieb      2016-06-17  2037  	list_add_tail(&qp->qps_list, &dev->qp_list);
89ea94a7b6 Maor Gottlieb      2016-06-17  2038  	/* Maintain CQ to QPs access, needed for further handling via reset flow
89ea94a7b6 Maor Gottlieb      2016-06-17  2039  	 */
89ea94a7b6 Maor Gottlieb      2016-06-17  2040  	if (send_cq)
89ea94a7b6 Maor Gottlieb      2016-06-17  2041  		list_add_tail(&qp->cq_send_list, &send_cq->list_send_qp);
89ea94a7b6 Maor Gottlieb      2016-06-17  2042  	if (recv_cq)
89ea94a7b6 Maor Gottlieb      2016-06-17  2043  		list_add_tail(&qp->cq_recv_list, &recv_cq->list_recv_qp);
89ea94a7b6 Maor Gottlieb      2016-06-17  2044  	mlx5_ib_unlock_cqs(send_cq, recv_cq);
89ea94a7b6 Maor Gottlieb      2016-06-17  2045  	spin_unlock_irqrestore(&dev->reset_flow_resource_lock, flags);
89ea94a7b6 Maor Gottlieb      2016-06-17  2046  
e126ba97db Eli Cohen          2013-07-07  2047  	return 0;
e126ba97db Eli Cohen          2013-07-07  2048  
e126ba97db Eli Cohen          2013-07-07  2049  err_create:
e126ba97db Eli Cohen          2013-07-07  2050  	if (qp->create_type == MLX5_QP_USER)
b037c29a80 Eli Cohen          2017-01-03  2051  		destroy_qp_user(dev, pd, qp, base);
e126ba97db Eli Cohen          2013-07-07  2052  	else if (qp->create_type == MLX5_QP_KERNEL)
e126ba97db Eli Cohen          2013-07-07  2053  		destroy_qp_kernel(dev, qp);
e126ba97db Eli Cohen          2013-07-07  2054  
b1383aa641 Noa Osherovich     2017-10-29  2055  err:
479163f460 Al Viro            2014-11-20  2056  	kvfree(in);
e126ba97db Eli Cohen          2013-07-07  2057  	return err;
e126ba97db Eli Cohen          2013-07-07  2058  }
e126ba97db Eli Cohen          2013-07-07  2059  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Shamir Rabinovitch Oct. 21, 2018, 6:26 a.m. UTC | #2
On Thu, Oct 18, 2018 at 03:22:45PM +0300, Dan Carpenter wrote:

[...]

> c2e53b2ce1 Yishai Hadas       2017-06-08  1836  
> e126ba97db Eli Cohen          2013-07-07  1837  	qp->has_rq = qp_has_rq(init_attr);
> e126ba97db Eli Cohen          2013-07-07  1838  	err = set_rq_size(dev, &init_attr->cap, qp->has_rq,
> f643bd9130 Shamir Rabinovitch 2018-10-14 @1839  			  qp, udata ? &ucmd : NULL);
>                                                                               ^^^^^^^
> The patch adds a check for NULL.

if udata is not null then the function was called from uverbs. if we are
called from uverbs then ucmd is valid. infect the original test that use
pd->uobject is less correct because if pd has uobject it it was created
from uverbs but it is actually property of the pd and not the flow. 

[...]

> 
> b11a4f9cde Haggai Eran        2016-02-29  1863  				return -EINVAL;
> b11a4f9cde Haggai Eran        2016-02-29  1864  			}
> 0fb2ed66a1 majd@mellanox.com  2016-01-14 @1865  			err = create_user_qp(dev, pd, qp, udata, init_attr, &in,
>                                                                                                           ^^^^^
> Does this need to be checked as well?

no. the only purpose of this patch is to remove some incorrect tests
arounfd pd->uobject that later patch will have to deal with them. this
line is not falling under the patch definition.

> 
> 0fb2ed66a1 majd@mellanox.com  2016-01-14  1866  					     &resp, &inlen, base);
> e126ba97db Eli Cohen          2013-07-07  1867  			if (err)
> e126ba97db Eli Cohen          2013-07-07  1868  				mlx5_ib_dbg(dev, "err %d\n", err);
> e126ba97db Eli Cohen          2013-07-07  1869  		} else {
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
index ca05810c92dc..00170aad4792 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
@@ -3926,7 +3926,7 @@  int hns_roce_v1_destroy_qp(struct ib_qp *ibqp)
 	struct hns_roce_qp_work *qp_work;
 	struct hns_roce_v1_priv *priv;
 	struct hns_roce_cq *send_cq, *recv_cq;
-	int is_user = !!ibqp->pd->uobject;
+	bool is_user = ibqp->pd->uobject;
 	int is_timeout = 0;
 	int ret;
 
diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
index cb2aef874ca8..8c3ac4b31932 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
@@ -673,28 +673,26 @@  static struct ib_qp *i40iw_create_qp(struct ib_pd *ibpd,
 			goto error;
 		}
 		iwqp->ctx_info.qp_compl_ctx = req.user_compl_ctx;
-		if (ibpd->uobject && ibpd->uobject->context) {
-			iwqp->user_mode = 1;
-			ucontext = to_ucontext(ibpd->uobject->context);
-
-			if (req.user_wqe_buffers) {
-				struct i40iw_pbl *iwpbl;
-
-				spin_lock_irqsave(
-				    &ucontext->qp_reg_mem_list_lock, flags);
-				iwpbl = i40iw_get_pbl(
-				    (unsigned long)req.user_wqe_buffers,
-				    &ucontext->qp_reg_mem_list);
-				spin_unlock_irqrestore(
-				    &ucontext->qp_reg_mem_list_lock, flags);
-
-				if (!iwpbl) {
-					err_code = -ENODATA;
-					i40iw_pr_err("no pbl info\n");
-					goto error;
-				}
-				memcpy(&iwqp->iwpbl, iwpbl, sizeof(iwqp->iwpbl));
+		iwqp->user_mode = 1;
+		ucontext = to_ucontext(ibpd->uobject->context);
+
+		if (req.user_wqe_buffers) {
+			struct i40iw_pbl *iwpbl;
+
+			spin_lock_irqsave(
+			    &ucontext->qp_reg_mem_list_lock, flags);
+			iwpbl = i40iw_get_pbl(
+			    (unsigned long)req.user_wqe_buffers,
+			    &ucontext->qp_reg_mem_list);
+			spin_unlock_irqrestore(
+			    &ucontext->qp_reg_mem_list_lock, flags);
+
+			if (!iwpbl) {
+				err_code = -ENODATA;
+				i40iw_pr_err("no pbl info\n");
+				goto error;
 			}
+			memcpy(&iwqp->iwpbl, iwpbl, sizeof(iwqp->iwpbl));
 		}
 		err_code = i40iw_setup_virt_qp(iwdev, iwqp, &init_info);
 	} else {
@@ -768,7 +766,7 @@  static struct ib_qp *i40iw_create_qp(struct ib_pd *ibpd,
 	iwdev->qp_table[qp_num] = iwqp;
 	i40iw_add_pdusecount(iwqp->iwpd);
 	i40iw_add_devusecount(iwdev);
-	if (ibpd->uobject && udata) {
+	if (udata) {
 		memset(&uresp, 0, sizeof(uresp));
 		uresp.actual_sq_size = sq_size;
 		uresp.actual_rq_size = rq_size;
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 0711ca1dfb8f..70d96a224da6 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1189,7 +1189,7 @@  static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd,
 	if (qp->mlx4_ib_qp_type == MLX4_IB_QPT_PROXY_GSI)
 		free_proxy_bufs(pd->device, qp);
 err_wrid:
-	if (pd->uobject) {
+	if (qp->umem) {
 		if (qp_has_rq(init_attr))
 			mlx4_ib_db_unmap_user(to_mucontext(pd->uobject->context), &qp->db);
 	} else {
@@ -4044,7 +4044,7 @@  struct ib_wq *mlx4_ib_create_wq(struct ib_pd *pd,
 	struct mlx4_ib_create_wq ucmd;
 	int err, required_cmd_sz;
 
-	if (!(udata && pd->uobject))
+	if (!udata)
 		return ERR_PTR(-EINVAL);
 
 	required_cmd_sz = offsetof(typeof(ucmd), comp_mask) +
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index fa8e5dc65cb4..5e9b95df74ba 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -1775,7 +1775,7 @@  static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
 		qp->flags |= MLX5_IB_QP_CVLAN_STRIPPING;
 	}
 
-	if (pd && pd->uobject) {
+	if (udata) {
 		if (ib_copy_from_udata(&ucmd, udata, sizeof(ucmd))) {
 			mlx5_ib_dbg(dev, "copy failed\n");
 			return -EFAULT;
@@ -1836,7 +1836,7 @@  static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
 
 	qp->has_rq = qp_has_rq(init_attr);
 	err = set_rq_size(dev, &init_attr->cap, qp->has_rq,
-			  qp, (pd && pd->uobject) ? &ucmd : NULL);
+			  qp, udata ? &ucmd : NULL);
 	if (err) {
 		mlx5_ib_dbg(dev, "err %d\n", err);
 		return err;