scsi: qla2xxx: Add multiple queue pair functionality.
Replaced existing multiple queue functionality with framework that allows for the creation of pairs of request and response queues, either at start of day or dynamically. Queue pair creation depend on module parameter "ql2xmqsupport", which need to be enabled to create queue pair. Signed-off-by: Sawan Chandak <sawan.chandak@cavium.com> Signed-off-by: Michael Hernandez <michael.hernandez@cavium.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Acked-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
4fa1834559
commit
d74595278f
@@ -1988,9 +1988,9 @@ qla24xx_vport_create(struct fc_vport *fc_vport, bool disable)
|
||||
scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost);
|
||||
scsi_qla_host_t *vha = NULL;
|
||||
struct qla_hw_data *ha = base_vha->hw;
|
||||
uint16_t options = 0;
|
||||
int cnt;
|
||||
struct req_que *req = ha->req_q_map[0];
|
||||
struct qla_qpair *qpair;
|
||||
|
||||
ret = qla24xx_vport_create_req_sanity_check(fc_vport);
|
||||
if (ret) {
|
||||
@@ -2075,15 +2075,9 @@ qla24xx_vport_create(struct fc_vport *fc_vport, bool disable)
|
||||
qlt_vport_create(vha, ha);
|
||||
qla24xx_vport_disable(fc_vport, disable);
|
||||
|
||||
if (ha->flags.cpu_affinity_enabled) {
|
||||
req = ha->req_q_map[1];
|
||||
ql_dbg(ql_dbg_multiq, vha, 0xc000,
|
||||
"Request queue %p attached with "
|
||||
"VP[%d], cpu affinity =%d\n",
|
||||
req, vha->vp_idx, ha->flags.cpu_affinity_enabled);
|
||||
goto vport_queue;
|
||||
} else if (ql2xmaxqueues == 1 || !ha->npiv_info)
|
||||
if (!ql2xmqsupport || !ha->npiv_info)
|
||||
goto vport_queue;
|
||||
|
||||
/* Create a request queue in QoS mode for the vport */
|
||||
for (cnt = 0; cnt < ha->nvram_npiv_size; cnt++) {
|
||||
if (memcmp(ha->npiv_info[cnt].port_name, vha->port_name, 8) == 0
|
||||
@@ -2095,20 +2089,20 @@ qla24xx_vport_create(struct fc_vport *fc_vport, bool disable)
|
||||
}
|
||||
|
||||
if (qos) {
|
||||
ret = qla25xx_create_req_que(ha, options, vha->vp_idx, 0, 0,
|
||||
qos);
|
||||
if (!ret)
|
||||
qpair = qla2xxx_create_qpair(vha, qos, vha->vp_idx);
|
||||
if (!qpair)
|
||||
ql_log(ql_log_warn, vha, 0x7084,
|
||||
"Can't create request queue for VP[%d]\n",
|
||||
"Can't create qpair for VP[%d]\n",
|
||||
vha->vp_idx);
|
||||
else {
|
||||
ql_dbg(ql_dbg_multiq, vha, 0xc001,
|
||||
"Request Que:%d Q0s: %d) created for VP[%d]\n",
|
||||
ret, qos, vha->vp_idx);
|
||||
"Queue pair: %d Qos: %d) created for VP[%d]\n",
|
||||
qpair->id, qos, vha->vp_idx);
|
||||
ql_dbg(ql_dbg_user, vha, 0x7085,
|
||||
"Request Que:%d Q0s: %d) created for VP[%d]\n",
|
||||
ret, qos, vha->vp_idx);
|
||||
req = ha->req_q_map[ret];
|
||||
"Queue Pair: %d Qos: %d) created for VP[%d]\n",
|
||||
qpair->id, qos, vha->vp_idx);
|
||||
req = qpair->req;
|
||||
vha->qpair = qpair;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2162,10 +2156,10 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
|
||||
clear_bit(vha->vp_idx, ha->vp_idx_map);
|
||||
mutex_unlock(&ha->vport_lock);
|
||||
|
||||
if (vha->req->id && !ha->flags.cpu_affinity_enabled) {
|
||||
if (qla25xx_delete_req_que(vha, vha->req) != QLA_SUCCESS)
|
||||
if (vha->qpair->vp_idx == vha->vp_idx) {
|
||||
if (qla2xxx_delete_qpair(vha, vha->qpair) != QLA_SUCCESS)
|
||||
ql_log(ql_log_warn, vha, 0x7087,
|
||||
"Queue delete failed.\n");
|
||||
"Queue Pair delete failed.\n");
|
||||
}
|
||||
|
||||
ql_log(ql_log_info, vha, 0x7088, "VP[%d] deleted.\n", id);
|
||||
|
||||
Reference in New Issue
Block a user