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: Saurav Kashyap <skashyap@marvell.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
25ad7394c7
commit
3c97b56950
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue