From: Knut Omang Date: Thu, 2 Jun 2016 08:38:07 +0000 (+0200) Subject: sif: DNE QPs were created even with limited mode X-Git-Tag: v4.1.12-92~129^2~35 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d00a3e0199bf600150331a151d74a281ec13baeb;p=users%2Fjedix%2Flinux-maple.git sif: DNE QPs were created even with limited mode This could potentially lead to situations where it is not possible to upgrade firmware. Also make all QP creation fail in limited mode, otherwise someone might create one and try to run traffic on it. In particular any use of PQPs will lead to kernel null pointer exceptions as they have not been initialized. Signed-off-by: Knut Omang --- diff --git a/drivers/infiniband/hw/sif/sif_qp.c b/drivers/infiniband/hw/sif/sif_qp.c index c7fdfc99ae9b..ab88057f6391 100644 --- a/drivers/infiniband/hw/sif/sif_qp.c +++ b/drivers/infiniband/hw/sif/sif_qp.c @@ -171,6 +171,14 @@ struct sif_qp *create_qp(struct sif_dev *sdev, u32 max_sge; int min_tso_inline; + /* In limited mode QPs are not usable and possibly hazardous as nothing is set up + * avoid any creation of any such: + */ + if (unlikely(sdev->limited_mode)) { + sif_log(sdev, SIF_INFO, "limited mode does not support QP creation!"); + return ERR_PTR(-ENODEV); + } + if (init_attr->send_cq) send_cq = to_scq(init_attr->send_cq); if (init_attr->recv_cq) diff --git a/drivers/infiniband/hw/sif/sif_r3.c b/drivers/infiniband/hw/sif/sif_r3.c index 455025787cf2..06b270d28cc2 100644 --- a/drivers/infiniband/hw/sif/sif_r3.c +++ b/drivers/infiniband/hw/sif/sif_r3.c @@ -36,6 +36,9 @@ int sif_r3_init(struct sif_dev *sdev) int ret; bool dne_qp_alloc = false; + if (sdev->limited_mode) + return 0; + if (eps_fw_version_lt(&sdev->es[sdev->mbox_epsc], 0, 58)) { ret = sif_hw_allocate_dne_qp(sdev); if (ret)