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

Commit 08b95a12 authored by Seokmann Ju's avatar Seokmann Ju Committed by James Bottomley
Browse files

[SCSI] qla2xxx: Correct handling of AENs postings for vports.



Initialize all proper structure members in order to support
work-list vport processing.  This code also properly acquires the
correct (physical hardware_lock) lock during work submission.

Signed-off-by: default avatarSeokmann Ju <seokmann.ju@qlogic.com>
Signed-off-by: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 3c397400
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -406,6 +406,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
	INIT_LIST_HEAD(&vha->list);
	INIT_LIST_HEAD(&vha->fcports);
	INIT_LIST_HEAD(&vha->vp_fcports);
	INIT_LIST_HEAD(&vha->work_list);

	vha->dpc_flags = 0L;
	set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
+8 −6
Original line number Diff line number Diff line
@@ -2157,13 +2157,14 @@ static int
qla2x00_post_work(struct scsi_qla_host *ha, struct qla_work_evt *e, int locked)
{
	unsigned long flags;
	scsi_qla_host_t *pha = to_qla_parent(ha);

	if (!locked)
		spin_lock_irqsave(&ha->hardware_lock, flags);
		spin_lock_irqsave(&pha->hardware_lock, flags);
	list_add_tail(&e->list, &ha->work_list);
	qla2xxx_wake_dpc(ha);
	if (!locked)
		spin_unlock_irqrestore(&ha->hardware_lock, flags);
		spin_unlock_irqrestore(&pha->hardware_lock, flags);
	return QLA_SUCCESS;
}

@@ -2203,12 +2204,13 @@ static void
qla2x00_do_work(struct scsi_qla_host *ha)
{
	struct qla_work_evt *e;
	scsi_qla_host_t *pha = to_qla_parent(ha);

	spin_lock_irq(&ha->hardware_lock);
	spin_lock_irq(&pha->hardware_lock);
	while (!list_empty(&ha->work_list)) {
		e = list_entry(ha->work_list.next, struct qla_work_evt, list);
		list_del_init(&e->list);
		spin_unlock_irq(&ha->hardware_lock);
		spin_unlock_irq(&pha->hardware_lock);

		switch (e->type) {
		case QLA_EVT_AEN:
@@ -2222,9 +2224,9 @@ qla2x00_do_work(struct scsi_qla_host *ha)
		}
		if (e->flags & QLA_EVT_FLAG_FREE)
			kfree(e);
		spin_lock_irq(&ha->hardware_lock);
		spin_lock_irq(&pha->hardware_lock);
	}
	spin_unlock_irq(&ha->hardware_lock);
	spin_unlock_irq(&pha->hardware_lock);
}

/**************************************************************************