public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7]qedi: Bug fixes.
@ 2017-05-19  8:33 Manish Rangankar
  2017-05-19  8:33 ` [PATCH 1/7] qedi: Fix bad pte call trace when iscsiuio is stopped Manish Rangankar
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

Martin,

Please apply this patch set to next 'scsi-fixes' series.

Thanks,
Manish

Arun Easi (1):
  qedi: Fix bad pte call trace when iscsiuio is stopped.

Manish Rangankar (5):
  qedi: Correctly set firmware max supported BDs.
  qedi: Set dma_boundary to 0xfff.
  qedi: Fix endpoint NULL panic in qedi_set_path.
  qedi: Set firmware tcp msl timer value.
  qedi: Fix endpoint NULL panic during recovery.

Nilesh Javali (1):
  qedi: set max_fin_rt default value

 drivers/scsi/qedi/qedi.h       |  3 ++-
 drivers/scsi/qedi/qedi_fw.c    |  2 ++
 drivers/scsi/qedi/qedi_iscsi.c |  7 ++++++-
 drivers/scsi/qedi/qedi_main.c  | 25 +++++++++++++------------
 4 files changed, 23 insertions(+), 14 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/7] qedi: Fix bad pte call trace when iscsiuio is stopped.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-19  8:33 ` [PATCH 2/7] qedi: Correctly set firmware max supported BDs Manish Rangankar
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

From: Arun Easi <arun.easi@cavium.com>

munmap done by iscsiuio during a stop of the service triggers a "bad
pte" warning sometimes. munmap kernel path goes through the mmapped
pages and has a validation check for mapcount (in struct page) to be
zero or above. kzalloc, which we had used to allocate udev->ctrl, uses
slab allocations, which re-uses mapcount (union) for other purposes that
can make the mapcount look negative. Avoid all these trouble by invoking
one of the __get_free_pages wrappers to be used instead of kzalloc for
udev->ctrl.

 BUG: Bad page map in process iscsiuio  pte:80000000aa624067 pmd:3e6777067
 page:ffffea0002a98900 count:2 mapcount:-2143289280
     mapping: (null) index:0xffff8800aa624e00
 page flags: 0x10075d00000090(dirty|slab)
 page dumped because: bad pte
 addr:00007fcba70a3000 vm_flags:0c0400fb anon_vma: (null)
     mapping:ffff8803edf66e90 index:0

 Call Trace:
     dump_stack+0x19/0x1b
     print_bad_pte+0x1af/0x250
     unmap_page_range+0x7a7/0x8a0
     unmap_single_vma+0x81/0xf0
     unmap_vmas+0x49/0x90
     unmap_region+0xbe/0x140
     ? vma_rb_erase+0x121/0x220
     do_munmap+0x245/0x420
     vm_munmap+0x41/0x60
     SyS_munmap+0x22/0x30
     tracesys+0xdd/0xe2

Signed-off-by: Arun Easi <arun.easi@cavium.com>
Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi_main.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
index 92775a8..997e305 100644
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -151,6 +151,11 @@ static int qedi_uio_close(struct uio_info *uinfo, struct inode *inode)
 
 static void __qedi_free_uio_rings(struct qedi_uio_dev *udev)
 {
+	if (udev->uctrl) {
+		free_page((unsigned long)udev->uctrl);
+		udev->uctrl = NULL;
+	}
+
 	if (udev->ll2_ring) {
 		free_page((unsigned long)udev->ll2_ring);
 		udev->ll2_ring = NULL;
@@ -169,7 +174,6 @@ static void __qedi_free_uio(struct qedi_uio_dev *udev)
 	__qedi_free_uio_rings(udev);
 
 	pci_dev_put(udev->pdev);
-	kfree(udev->uctrl);
 	kfree(udev);
 }
 
@@ -208,6 +212,11 @@ static int __qedi_alloc_uio_rings(struct qedi_uio_dev *udev)
 	if (udev->ll2_ring || udev->ll2_buf)
 		return rc;
 
+	/* Memory for control area.  */
+	udev->uctrl = (void *)get_zeroed_page(GFP_KERNEL);
+	if (!udev->uctrl)
+		return -ENOMEM;
+
 	/* Allocating memory for LL2 ring  */
 	udev->ll2_ring_size = QEDI_PAGE_SIZE;
 	udev->ll2_ring = (void *)get_zeroed_page(GFP_KERNEL | __GFP_COMP);
@@ -237,7 +246,6 @@ static int __qedi_alloc_uio_rings(struct qedi_uio_dev *udev)
 static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
 {
 	struct qedi_uio_dev *udev = NULL;
-	struct qedi_uio_ctrl *uctrl = NULL;
 	int rc = 0;
 
 	list_for_each_entry(udev, &qedi_udev_list, list) {
@@ -258,21 +266,14 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
 		goto err_udev;
 	}
 
-	uctrl = kzalloc(sizeof(*uctrl), GFP_KERNEL);
-	if (!uctrl) {
-		rc = -ENOMEM;
-		goto err_uctrl;
-	}
-
 	udev->uio_dev = -1;
 
 	udev->qedi = qedi;
 	udev->pdev = qedi->pdev;
-	udev->uctrl = uctrl;
 
 	rc = __qedi_alloc_uio_rings(udev);
 	if (rc)
-		goto err_uio_rings;
+		goto err_uctrl;
 
 	list_add(&udev->list, &qedi_udev_list);
 
@@ -283,8 +284,6 @@ static int qedi_alloc_uio_rings(struct qedi_ctx *qedi)
 	udev->rx_pkt = udev->ll2_buf + LL2_SINGLE_BUF_SIZE;
 	return 0;
 
- err_uio_rings:
-	kfree(uctrl);
  err_uctrl:
 	kfree(udev);
  err_udev:
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/7] qedi: Correctly set firmware max supported BDs.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
  2017-05-19  8:33 ` [PATCH 1/7] qedi: Fix bad pte call trace when iscsiuio is stopped Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-19  8:33 ` [PATCH 3/7] qedi: Set dma_boundary to 0xfff Manish Rangankar
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/qedi/qedi.h b/drivers/scsi/qedi/qedi.h
index 5ca3e8c..269dac6 100644
--- a/drivers/scsi/qedi/qedi.h
+++ b/drivers/scsi/qedi/qedi.h
@@ -38,7 +38,7 @@
 #define QEDI_MAX_ISCSI_TASK		4096
 #define QEDI_MAX_TASK_NUM		0x0FFF
 #define QEDI_MAX_ISCSI_CONNS_PER_HBA	1024
-#define QEDI_ISCSI_MAX_BDS_PER_CMD	256	/* Firmware max BDs is 256 */
+#define QEDI_ISCSI_MAX_BDS_PER_CMD	255	/* Firmware max BDs is 255 */
 #define MAX_OUSTANDING_TASKS_PER_CON	1024
 
 #define QEDI_MAX_BD_LEN		0xffff
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/7] qedi: Set dma_boundary to 0xfff.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
  2017-05-19  8:33 ` [PATCH 1/7] qedi: Fix bad pte call trace when iscsiuio is stopped Manish Rangankar
  2017-05-19  8:33 ` [PATCH 2/7] qedi: Correctly set firmware max supported BDs Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-19  8:33 ` [PATCH 4/7] qedi: Fix endpoint NULL panic in qedi_set_path Manish Rangankar
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi.h       | 1 +
 drivers/scsi/qedi/qedi_iscsi.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/drivers/scsi/qedi/qedi.h b/drivers/scsi/qedi/qedi.h
index 269dac6..32632c9 100644
--- a/drivers/scsi/qedi/qedi.h
+++ b/drivers/scsi/qedi/qedi.h
@@ -63,6 +63,7 @@
 #define QEDI_PAGE_MASK		(~((QEDI_PAGE_SIZE) - 1))
 
 #define QEDI_PAGE_SIZE		4096
+#define QEDI_HW_DMA_BOUNDARY	0xfff
 #define QEDI_PATH_HANDLE	0xFE0000000UL
 
 struct qedi_uio_ctrl {
diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
index 3548d46..1917793 100644
--- a/drivers/scsi/qedi/qedi_iscsi.c
+++ b/drivers/scsi/qedi/qedi_iscsi.c
@@ -59,6 +59,7 @@ struct scsi_host_template qedi_host_template = {
 	.this_id = -1,
 	.sg_tablesize = QEDI_ISCSI_MAX_BDS_PER_CMD,
 	.max_sectors = 0xffff,
+	.dma_boundary = QEDI_HW_DMA_BOUNDARY,
 	.cmd_per_lun = 128,
 	.use_clustering = ENABLE_CLUSTERING,
 	.shost_attrs = qedi_shost_attrs,
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/7] qedi: Fix endpoint NULL panic in qedi_set_path.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
                   ` (2 preceding siblings ...)
  2017-05-19  8:33 ` [PATCH 3/7] qedi: Set dma_boundary to 0xfff Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-19  8:33 ` [PATCH 5/7] qedi: Set firmware tcp msl timer value Manish Rangankar
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

 RIP: 0010:qedi_set_path+0x114/0x570 [qedi]
 Call Trace:
  [<ffffffffa0472923>] iscsi_if_recv_msg+0x623/0x14a0
  [<ffffffff81307de6>] ? rhashtable_lookup_compare+0x36/0x70
  [<ffffffffa047382e>] iscsi_if_rx+0x8e/0x1f0
  [<ffffffff8155983d>] netlink_unicast+0xed/0x1b0
  [<ffffffff81559c30>] netlink_sendmsg+0x330/0x770
  [<ffffffff81510d60>] sock_sendmsg+0xb0/0xf0
  [<ffffffff8101360b>] ? __switch_to+0x17b/0x4b0
  [<ffffffff8163a2c8>] ? __schedule+0x2d8/0x900
  [<ffffffff81511199>] ___sys_sendmsg+0x3a9/0x3c0
  [<ffffffff810e2298>] ? get_futex_key+0x1c8/0x2b0
  [<ffffffff810e25a0>] ? futex_wake+0x80/0x160

Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi_iscsi.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
index 1917793..87f0af3 100644
--- a/drivers/scsi/qedi/qedi_iscsi.c
+++ b/drivers/scsi/qedi/qedi_iscsi.c
@@ -1224,8 +1224,12 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
 
 	iscsi_cid = (u32)path_data->handle;
 	qedi_ep = qedi->ep_tbl[iscsi_cid];
-	QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN,
+	QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
 		  "iscsi_cid=0x%x, qedi_ep=%p\n", iscsi_cid, qedi_ep);
+	if (!qedi_ep) {
+		ret = -EINVAL;
+		goto set_path_exit;
+	}
 
 	if (!is_valid_ether_addr(&path_data->mac_addr[0])) {
 		QEDI_NOTICE(&qedi->dbg_ctx, "dst mac NOT VALID\n");
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/7] qedi: Set firmware tcp msl timer value.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
                   ` (3 preceding siblings ...)
  2017-05-19  8:33 ` [PATCH 4/7] qedi: Fix endpoint NULL panic in qedi_set_path Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-19  8:33 ` [PATCH 6/7] qedi: set max_fin_rt default value Manish Rangankar
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
index 997e305..62ba0550 100644
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -827,6 +827,7 @@ static int qedi_set_iscsi_pf_param(struct qedi_ctx *qedi)
 	qedi->pf_params.iscsi_pf_params.num_uhq_pages_in_ring = num_sq_pages;
 	qedi->pf_params.iscsi_pf_params.num_queues = qedi->num_queues;
 	qedi->pf_params.iscsi_pf_params.debug_mode = qedi_fw_debug;
+	qedi->pf_params.iscsi_pf_params.two_msl_timer = 4000;
 
 	for (log_page_size = 0 ; log_page_size < 32 ; log_page_size++) {
 		if ((1 << log_page_size) == PAGE_SIZE)
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 6/7] qedi: set max_fin_rt default value
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
                   ` (4 preceding siblings ...)
  2017-05-19  8:33 ` [PATCH 5/7] qedi: Set firmware tcp msl timer value Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-19  8:33 ` [PATCH 7/7] qedi: Fix endpoint NULL panic during recovery Manish Rangankar
  2017-05-24  2:17 ` [PATCH 0/7]qedi: Bug fixes Martin K. Petersen
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

From: Nilesh Javali <nilesh.javali@cavium.com>

max_fin_rt is the maximum re-transmission of FIN packets
as part of the termination flow. After reaching this value
the FW will send a single RESET.

Signed-off-by: Nilesh Javali <nilesh.javali@cavium.com>
Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
index 62ba0550..09a2946 100644
--- a/drivers/scsi/qedi/qedi_main.c
+++ b/drivers/scsi/qedi/qedi_main.c
@@ -828,6 +828,7 @@ static int qedi_set_iscsi_pf_param(struct qedi_ctx *qedi)
 	qedi->pf_params.iscsi_pf_params.num_queues = qedi->num_queues;
 	qedi->pf_params.iscsi_pf_params.debug_mode = qedi_fw_debug;
 	qedi->pf_params.iscsi_pf_params.two_msl_timer = 4000;
+	qedi->pf_params.iscsi_pf_params.max_fin_rt = 2;
 
 	for (log_page_size = 0 ; log_page_size < 32 ; log_page_size++) {
 		if ((1 << log_page_size) == PAGE_SIZE)
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 7/7] qedi: Fix endpoint NULL panic during recovery.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
                   ` (5 preceding siblings ...)
  2017-05-19  8:33 ` [PATCH 6/7] qedi: set max_fin_rt default value Manish Rangankar
@ 2017-05-19  8:33 ` Manish Rangankar
  2017-05-24  2:17 ` [PATCH 0/7]qedi: Bug fixes Martin K. Petersen
  7 siblings, 0 replies; 9+ messages in thread
From: Manish Rangankar @ 2017-05-19  8:33 UTC (permalink / raw)
  To: martin.petersen, lduncan, cleech; +Cc: linux-scsi, QLogic-Storage-Upstream

Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
---
 drivers/scsi/qedi/qedi_fw.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/scsi/qedi/qedi_fw.c b/drivers/scsi/qedi/qedi_fw.c
index d6978cb..8bc7ee1 100644
--- a/drivers/scsi/qedi/qedi_fw.c
+++ b/drivers/scsi/qedi/qedi_fw.c
@@ -1494,6 +1494,8 @@ static int qedi_send_iscsi_tmf(struct qedi_conn *qedi_conn,
 	tmf_hdr = (struct iscsi_tm *)mtask->hdr;
 	qedi_cmd = (struct qedi_cmd *)mtask->dd_data;
 	ep = qedi_conn->ep;
+	if (!ep)
+		return -ENODEV;
 
 	tid = qedi_get_task_idx(qedi);
 	if (tid == -1)
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/7]qedi: Bug fixes.
  2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
                   ` (6 preceding siblings ...)
  2017-05-19  8:33 ` [PATCH 7/7] qedi: Fix endpoint NULL panic during recovery Manish Rangankar
@ 2017-05-24  2:17 ` Martin K. Petersen
  7 siblings, 0 replies; 9+ messages in thread
From: Martin K. Petersen @ 2017-05-24  2:17 UTC (permalink / raw)
  To: Manish Rangankar
  Cc: martin.petersen, lduncan, cleech, linux-scsi,
	QLogic-Storage-Upstream


Manish,

> Please apply this patch set to next 'scsi-fixes' series.

Applied to 4.12/scsi-fixes. Thank you!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-05-24  2:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-19  8:33 [PATCH 0/7]qedi: Bug fixes Manish Rangankar
2017-05-19  8:33 ` [PATCH 1/7] qedi: Fix bad pte call trace when iscsiuio is stopped Manish Rangankar
2017-05-19  8:33 ` [PATCH 2/7] qedi: Correctly set firmware max supported BDs Manish Rangankar
2017-05-19  8:33 ` [PATCH 3/7] qedi: Set dma_boundary to 0xfff Manish Rangankar
2017-05-19  8:33 ` [PATCH 4/7] qedi: Fix endpoint NULL panic in qedi_set_path Manish Rangankar
2017-05-19  8:33 ` [PATCH 5/7] qedi: Set firmware tcp msl timer value Manish Rangankar
2017-05-19  8:33 ` [PATCH 6/7] qedi: set max_fin_rt default value Manish Rangankar
2017-05-19  8:33 ` [PATCH 7/7] qedi: Fix endpoint NULL panic during recovery Manish Rangankar
2017-05-24  2:17 ` [PATCH 0/7]qedi: Bug fixes Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox