[SCSI] lpfc 8.2.7 : Rework the worker thread
Rework of the worker thread to make it more efficient. Make a finer-grain notfication of pending work so less time is spent checking conditions. Also made other general cleanups. Signed-off-by: James Smart <james.smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:

committed by
James Bottomley

parent
0d2b6b8303
commit
5e9d9b8276
@@ -551,18 +551,18 @@ static void
|
||||
lpfc_hb_timeout(unsigned long ptr)
|
||||
{
|
||||
struct lpfc_hba *phba;
|
||||
uint32_t tmo_posted;
|
||||
unsigned long iflag;
|
||||
|
||||
phba = (struct lpfc_hba *)ptr;
|
||||
spin_lock_irqsave(&phba->pport->work_port_lock, iflag);
|
||||
if (!(phba->pport->work_port_events & WORKER_HB_TMO))
|
||||
tmo_posted = phba->pport->work_port_events & WORKER_HB_TMO;
|
||||
if (!tmo_posted)
|
||||
phba->pport->work_port_events |= WORKER_HB_TMO;
|
||||
spin_unlock_irqrestore(&phba->pport->work_port_lock, iflag);
|
||||
|
||||
spin_lock_irqsave(&phba->hbalock, iflag);
|
||||
if (phba->work_wait)
|
||||
wake_up(phba->work_wait);
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflag);
|
||||
if (!tmo_posted)
|
||||
lpfc_worker_wake_up(phba);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2104,6 +2104,9 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
|
||||
phba->work_ha_mask = (HA_ERATT|HA_MBATT|HA_LATT);
|
||||
phba->work_ha_mask |= (HA_RXMASK << (LPFC_ELS_RING * 4));
|
||||
|
||||
/* Initialize the wait queue head for the kernel thread */
|
||||
init_waitqueue_head(&phba->work_waitq);
|
||||
|
||||
/* Startup the kernel thread for this host adapter. */
|
||||
phba->worker_thread = kthread_run(lpfc_do_work, phba,
|
||||
"lpfc_worker_%d", phba->brd_no);
|
||||
|
Reference in New Issue
Block a user