Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c97b569 authored by Saurav Kashyap's avatar Saurav Kashyap Committed by Martin K. Petersen
Browse files

scsi: bnx2fc: Limit the IO size according to the FW capability



 - Reduce the sg_tablesize to 255.

 - Reduce the MAX BDs firmware can handle to 255.

 - Return IO to ML if BD goes more then 255 after split.

 - Correct the size of each BD split to 0xffff.

Signed-off-by: default avatarSaurav Kashyap <skashyap@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 25ad7394
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -75,8 +75,9 @@
#define BNX2X_DOORBELL_PCI_BAR		2

#define BNX2FC_MAX_BD_LEN		0xffff
#define BNX2FC_BD_SPLIT_SZ		0x8000
#define BNX2FC_MAX_BDS_PER_CMD		256
#define BNX2FC_BD_SPLIT_SZ		0xffff
#define BNX2FC_MAX_BDS_PER_CMD		255
#define BNX2FC_FW_MAX_BDS_PER_CMD	255

#define BNX2FC_SQ_WQES_MAX	256

+2 −1
Original line number Diff line number Diff line
@@ -2971,7 +2971,8 @@ static struct scsi_host_template bnx2fc_shost_template = {
	.this_id		= -1,
	.cmd_per_lun		= 3,
	.sg_tablesize		= BNX2FC_MAX_BDS_PER_CMD,
	.max_sectors		= 1024,
	.dma_boundary           = 0x7fff,
	.max_sectors		= 0x3fbf,
	.track_queue_depth	= 1,
	.slave_configure	= bnx2fc_slave_configure,
	.shost_attrs		= bnx2fc_host_attrs,
+11 −0
Original line number Diff line number Diff line
@@ -1660,6 +1660,7 @@ static int bnx2fc_map_sg(struct bnx2fc_cmd *io_req)
	u64 addr;
	int i;

	WARN_ON(scsi_sg_count(sc) > BNX2FC_MAX_BDS_PER_CMD);
	/*
	 * Use dma_map_sg directly to ensure we're using the correct
	 * dev struct off of pcidev.
@@ -1707,6 +1708,16 @@ static int bnx2fc_build_bd_list_from_sg(struct bnx2fc_cmd *io_req)
	}
	io_req->bd_tbl->bd_valid = bd_count;

	/*
	 * Return the command to ML if BD count exceeds the max number
	 * that can be handled by FW.
	 */
	if (bd_count > BNX2FC_FW_MAX_BDS_PER_CMD) {
		pr_err("bd_count = %d exceeded FW supported max BD(255), task_id = 0x%x\n",
		       bd_count, io_req->xid);
		return -ENOMEM;
	}

	return 0;
}