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

Commit 7163ea81 authored by Anirban Chakraborty's avatar Anirban Chakraborty Committed by James Bottomley
Browse files

[SCSI] qla2xxx: Fix to ensure driver works in sinlge queue mode if multiqueue fails



When the multiqueue mode fails to work, the driver falls back on single
queue mode. This ensures that the firmware is reinitialized with single
queue options and all the resources are readjusted accordingly.

Signed-off-by: default avatarAnirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 09ccbcc6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1670,7 +1670,7 @@ qla24xx_vport_create(struct fc_vport *fc_vport, bool disable)

	qla24xx_vport_disable(fc_vport, disable);

	if (ql2xmultique_tag) {
	if (ha->flags.cpu_affinity_enabled) {
		req = ha->req_q_map[1];
		goto vport_queue;
	} else if (ql2xmaxqueues == 1 || !ha->npiv_info)
@@ -1743,7 +1743,7 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
		    vha->host_no, vha->vp_idx, vha));
        }

	if (vha->req->id && !ql2xmultique_tag) {
	if (vha->req->id && !ha->flags.cpu_affinity_enabled) {
		if (qla25xx_delete_req_que(vha, vha->req) != QLA_SUCCESS)
			qla_printk(KERN_WARNING, ha,
				"Queue delete failed.\n");
+1 −0
Original line number Diff line number Diff line
@@ -2224,6 +2224,7 @@ struct qla_hw_data {
		uint32_t	chip_reset_done		:1;
		uint32_t	port0			:1;
		uint32_t	running_gold_fw		:1;
		uint32_t	cpu_affinity_enabled	:1;
	} flags;

	/* This spinlock is used to protect "io transactions", you must
+2 −3
Original line number Diff line number Diff line
@@ -987,7 +987,6 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
				    ha->phy_version);
				if (rval != QLA_SUCCESS)
					goto failed;

				ha->flags.npiv_supported = 0;
				if (IS_QLA2XXX_MIDTYPE(ha) &&
					 (ha->fw_attributes & BIT_2)) {
@@ -3244,7 +3243,7 @@ qla2x00_loop_resync(scsi_qla_host_t *vha)
	struct req_que *req;
	struct rsp_que *rsp;

	if (ql2xmultique_tag)
	if (vha->hw->flags.cpu_affinity_enabled)
		req = vha->hw->req_q_map[0];
	else
		req = vha->req;
@@ -4264,7 +4263,7 @@ qla24xx_configure_vhba(scsi_qla_host_t *vha)
		return -EINVAL;

	rval = qla2x00_fw_ready(base_vha);
	if (ql2xmultique_tag)
	if (ha->flags.cpu_affinity_enabled)
		req = ha->req_q_map[0];
	else
		req = vha->req;
+1 −1
Original line number Diff line number Diff line
@@ -852,7 +852,7 @@ static void qla25xx_set_que(srb_t *sp, struct rsp_que **rsp)
	struct qla_hw_data *ha = sp->fcport->vha->hw;
	int affinity = cmd->request->cpu;

	if (ql2xmultique_tag && affinity >= 0 &&
	if (ha->flags.cpu_affinity_enabled && affinity >= 0 &&
		affinity < ha->max_rsp_queues - 1)
		*rsp = ha->rsp_q_map[affinity + 1];
	 else
+2 −2
Original line number Diff line number Diff line
@@ -1507,7 +1507,7 @@ qla24xx_login_fabric(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,

	DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));

	if (ql2xmultique_tag)
	if (ha->flags.cpu_affinity_enabled)
		req = ha->req_q_map[0];
	else
		req = vha->req;
@@ -2324,7 +2324,7 @@ __qla24xx_issue_tmf(char *name, uint32_t type, struct fc_port *fcport,
	vha = fcport->vha;
	ha = vha->hw;
	req = vha->req;
	if (ql2xmultique_tag)
	if (ha->flags.cpu_affinity_enabled)
		rsp = ha->rsp_q_map[tag + 1];
	else
		rsp = req->rsp;
Loading