mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 09:43:59 +08:00
[SCSI] mptfusion: Avoid out of order Event processing due to cpu migration
Driver will now schedule MPI event using "delay_work_queue_on" to specify same CPU to be used to schedule work. Earlier it used "delay_work_queue" which can cause migration of work due to kernel' timer migration feature. Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
e62cca19a9
commit
a38ae37fdc
@ -290,10 +290,11 @@ mptsas_add_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event,
|
|||||||
spin_lock_irqsave(&ioc->fw_event_lock, flags);
|
spin_lock_irqsave(&ioc->fw_event_lock, flags);
|
||||||
list_add_tail(&fw_event->list, &ioc->fw_event_list);
|
list_add_tail(&fw_event->list, &ioc->fw_event_list);
|
||||||
INIT_DELAYED_WORK(&fw_event->work, mptsas_firmware_event_work);
|
INIT_DELAYED_WORK(&fw_event->work, mptsas_firmware_event_work);
|
||||||
devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: add (fw_event=0x%p)\n",
|
devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: add (fw_event=0x%p)"
|
||||||
ioc->name, __func__, fw_event));
|
"on cpuid %d\n", ioc->name, __func__,
|
||||||
queue_delayed_work(ioc->fw_event_q, &fw_event->work,
|
fw_event, smp_processor_id()));
|
||||||
delay);
|
queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q,
|
||||||
|
&fw_event->work, delay);
|
||||||
spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
|
spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,10 +306,11 @@ mptsas_requeue_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event,
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
spin_lock_irqsave(&ioc->fw_event_lock, flags);
|
spin_lock_irqsave(&ioc->fw_event_lock, flags);
|
||||||
devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: reschedule task "
|
devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: reschedule task "
|
||||||
"(fw_event=0x%p)\n", ioc->name, __func__, fw_event));
|
"(fw_event=0x%p)on cpuid %d\n", ioc->name, __func__,
|
||||||
|
fw_event, smp_processor_id()));
|
||||||
fw_event->retries++;
|
fw_event->retries++;
|
||||||
queue_delayed_work(ioc->fw_event_q, &fw_event->work,
|
queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q,
|
||||||
msecs_to_jiffies(delay));
|
&fw_event->work, msecs_to_jiffies(delay));
|
||||||
spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
|
spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user