提交 f22eb4d3 编写于 作者: K Kees Cook

scsi: lpfc: Convert timers to use timer_setup()

In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly.

Cc: James Smart <james.smart@broadcom.com>
Cc: Dick Kennedy <dick.kennedy@broadcom.com>
Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org
Signed-off-by: NKees Cook <keescook@chromium.org>
Reviewed-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 738c6ec5
...@@ -113,7 +113,7 @@ void lpfc_disc_list_loopmap(struct lpfc_vport *); ...@@ -113,7 +113,7 @@ void lpfc_disc_list_loopmap(struct lpfc_vport *);
void lpfc_disc_start(struct lpfc_vport *); void lpfc_disc_start(struct lpfc_vport *);
void lpfc_cleanup_discovery_resources(struct lpfc_vport *); void lpfc_cleanup_discovery_resources(struct lpfc_vport *);
void lpfc_cleanup(struct lpfc_vport *); void lpfc_cleanup(struct lpfc_vport *);
void lpfc_disc_timeout(unsigned long); void lpfc_disc_timeout(struct timer_list *);
int lpfc_unregister_fcf_prep(struct lpfc_hba *); int lpfc_unregister_fcf_prep(struct lpfc_hba *);
struct lpfc_nodelist *__lpfc_findnode_rpi(struct lpfc_vport *, uint16_t); struct lpfc_nodelist *__lpfc_findnode_rpi(struct lpfc_vport *, uint16_t);
...@@ -154,7 +154,7 @@ int lpfc_els_rsp_adisc_acc(struct lpfc_vport *, struct lpfc_iocbq *, ...@@ -154,7 +154,7 @@ int lpfc_els_rsp_adisc_acc(struct lpfc_vport *, struct lpfc_iocbq *,
int lpfc_els_rsp_prli_acc(struct lpfc_vport *, struct lpfc_iocbq *, int lpfc_els_rsp_prli_acc(struct lpfc_vport *, struct lpfc_iocbq *,
struct lpfc_nodelist *); struct lpfc_nodelist *);
void lpfc_cancel_retry_delay_tmo(struct lpfc_vport *, struct lpfc_nodelist *); void lpfc_cancel_retry_delay_tmo(struct lpfc_vport *, struct lpfc_nodelist *);
void lpfc_els_retry_delay(unsigned long); void lpfc_els_retry_delay(struct timer_list *);
void lpfc_els_retry_delay_handler(struct lpfc_nodelist *); void lpfc_els_retry_delay_handler(struct lpfc_nodelist *);
void lpfc_els_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *, void lpfc_els_unsol_event(struct lpfc_hba *, struct lpfc_sli_ring *,
struct lpfc_iocbq *); struct lpfc_iocbq *);
...@@ -165,7 +165,7 @@ void lpfc_els_flush_all_cmd(struct lpfc_hba *); ...@@ -165,7 +165,7 @@ void lpfc_els_flush_all_cmd(struct lpfc_hba *);
void lpfc_els_flush_cmd(struct lpfc_vport *); void lpfc_els_flush_cmd(struct lpfc_vport *);
int lpfc_els_disc_adisc(struct lpfc_vport *); int lpfc_els_disc_adisc(struct lpfc_vport *);
int lpfc_els_disc_plogi(struct lpfc_vport *); int lpfc_els_disc_plogi(struct lpfc_vport *);
void lpfc_els_timeout(unsigned long); void lpfc_els_timeout(struct timer_list *);
void lpfc_els_timeout_handler(struct lpfc_vport *); void lpfc_els_timeout_handler(struct lpfc_vport *);
struct lpfc_iocbq *lpfc_prep_els_iocb(struct lpfc_vport *, uint8_t, uint16_t, struct lpfc_iocbq *lpfc_prep_els_iocb(struct lpfc_vport *, uint8_t, uint16_t,
uint8_t, struct lpfc_nodelist *, uint8_t, struct lpfc_nodelist *,
...@@ -180,7 +180,7 @@ int lpfc_get_gidft_type(struct lpfc_vport *vport, struct lpfc_iocbq *iocbq); ...@@ -180,7 +180,7 @@ int lpfc_get_gidft_type(struct lpfc_vport *vport, struct lpfc_iocbq *iocbq);
int lpfc_ns_cmd(struct lpfc_vport *, int, uint8_t, uint32_t); int lpfc_ns_cmd(struct lpfc_vport *, int, uint8_t, uint32_t);
int lpfc_fdmi_cmd(struct lpfc_vport *, struct lpfc_nodelist *, int, uint32_t); int lpfc_fdmi_cmd(struct lpfc_vport *, struct lpfc_nodelist *, int, uint32_t);
void lpfc_fdmi_num_disc_check(struct lpfc_vport *); void lpfc_fdmi_num_disc_check(struct lpfc_vport *);
void lpfc_delayed_disc_tmo(unsigned long); void lpfc_delayed_disc_tmo(struct timer_list *);
void lpfc_delayed_disc_timeout_handler(struct lpfc_vport *); void lpfc_delayed_disc_timeout_handler(struct lpfc_vport *);
int lpfc_config_port_prep(struct lpfc_hba *); int lpfc_config_port_prep(struct lpfc_hba *);
...@@ -279,9 +279,9 @@ void lpfc_mem_free(struct lpfc_hba *); ...@@ -279,9 +279,9 @@ void lpfc_mem_free(struct lpfc_hba *);
void lpfc_mem_free_all(struct lpfc_hba *); void lpfc_mem_free_all(struct lpfc_hba *);
void lpfc_stop_vport_timers(struct lpfc_vport *); void lpfc_stop_vport_timers(struct lpfc_vport *);
void lpfc_poll_timeout(unsigned long ptr); void lpfc_poll_timeout(struct timer_list *t);
void lpfc_poll_start_timer(struct lpfc_hba *); void lpfc_poll_start_timer(struct lpfc_hba *);
void lpfc_poll_eratt(unsigned long); void lpfc_poll_eratt(struct timer_list *);
int int
lpfc_sli_handle_fast_ring_event(struct lpfc_hba *, lpfc_sli_handle_fast_ring_event(struct lpfc_hba *,
struct lpfc_sli_ring *, uint32_t); struct lpfc_sli_ring *, uint32_t);
...@@ -351,7 +351,7 @@ int ...@@ -351,7 +351,7 @@ int
lpfc_sli_abort_taskmgmt(struct lpfc_vport *, struct lpfc_sli_ring *, lpfc_sli_abort_taskmgmt(struct lpfc_vport *, struct lpfc_sli_ring *,
uint16_t, uint64_t, lpfc_ctx_cmd); uint16_t, uint64_t, lpfc_ctx_cmd);
void lpfc_mbox_timeout(unsigned long); void lpfc_mbox_timeout(struct timer_list *t);
void lpfc_mbox_timeout_handler(struct lpfc_hba *); void lpfc_mbox_timeout_handler(struct lpfc_hba *);
struct lpfc_nodelist *lpfc_findnode_did(struct lpfc_vport *, uint32_t); struct lpfc_nodelist *lpfc_findnode_did(struct lpfc_vport *, uint32_t);
...@@ -445,7 +445,7 @@ extern unsigned int lpfc_fcp_look_ahead; ...@@ -445,7 +445,7 @@ extern unsigned int lpfc_fcp_look_ahead;
/* Interface exported by fabric iocb scheduler */ /* Interface exported by fabric iocb scheduler */
void lpfc_fabric_abort_nport(struct lpfc_nodelist *); void lpfc_fabric_abort_nport(struct lpfc_nodelist *);
void lpfc_fabric_abort_hba(struct lpfc_hba *); void lpfc_fabric_abort_hba(struct lpfc_hba *);
void lpfc_fabric_block_timeout(unsigned long); void lpfc_fabric_block_timeout(struct timer_list *);
void lpfc_unblock_fabric_iocbs(struct lpfc_hba *); void lpfc_unblock_fabric_iocbs(struct lpfc_hba *);
void lpfc_rampdown_queue_depth(struct lpfc_hba *); void lpfc_rampdown_queue_depth(struct lpfc_hba *);
void lpfc_ramp_down_queue_handler(struct lpfc_hba *); void lpfc_ramp_down_queue_handler(struct lpfc_hba *);
......
...@@ -2884,9 +2884,9 @@ lpfc_fdmi_cmd(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, ...@@ -2884,9 +2884,9 @@ lpfc_fdmi_cmd(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
* the worker thread. * the worker thread.
**/ **/
void void
lpfc_delayed_disc_tmo(unsigned long ptr) lpfc_delayed_disc_tmo(struct timer_list *t)
{ {
struct lpfc_vport *vport = (struct lpfc_vport *)ptr; struct lpfc_vport *vport = from_timer(vport, t, delayed_disc_tmo);
struct lpfc_hba *phba = vport->phba; struct lpfc_hba *phba = vport->phba;
uint32_t tmo_posted; uint32_t tmo_posted;
unsigned long iflag; unsigned long iflag;
......
...@@ -3131,9 +3131,9 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_vport *vport, struct lpfc_nodelist *nlp) ...@@ -3131,9 +3131,9 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_vport *vport, struct lpfc_nodelist *nlp)
* to the event associated with the ndlp. * to the event associated with the ndlp.
**/ **/
void void
lpfc_els_retry_delay(unsigned long ptr) lpfc_els_retry_delay(struct timer_list *t)
{ {
struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) ptr; struct lpfc_nodelist *ndlp = from_timer(ndlp, t, nlp_delayfunc);
struct lpfc_vport *vport = ndlp->vport; struct lpfc_vport *vport = ndlp->vport;
struct lpfc_hba *phba = vport->phba; struct lpfc_hba *phba = vport->phba;
unsigned long flags; unsigned long flags;
...@@ -7385,9 +7385,9 @@ lpfc_els_rcv_fan(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, ...@@ -7385,9 +7385,9 @@ lpfc_els_rcv_fan(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb,
* lpfc_els_timeout_handler() to work on the posted event WORKER_ELS_TMO. * lpfc_els_timeout_handler() to work on the posted event WORKER_ELS_TMO.
**/ **/
void void
lpfc_els_timeout(unsigned long ptr) lpfc_els_timeout(struct timer_list *t)
{ {
struct lpfc_vport *vport = (struct lpfc_vport *) ptr; struct lpfc_vport *vport = from_timer(vport, t, els_tmofunc);
struct lpfc_hba *phba = vport->phba; struct lpfc_hba *phba = vport->phba;
uint32_t tmo_posted; uint32_t tmo_posted;
unsigned long iflag; unsigned long iflag;
...@@ -9017,9 +9017,9 @@ lpfc_issue_els_npiv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) ...@@ -9017,9 +9017,9 @@ lpfc_issue_els_npiv_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
* posted event WORKER_FABRIC_BLOCK_TMO. * posted event WORKER_FABRIC_BLOCK_TMO.
**/ **/
void void
lpfc_fabric_block_timeout(unsigned long ptr) lpfc_fabric_block_timeout(struct timer_list *t)
{ {
struct lpfc_hba *phba = (struct lpfc_hba *) ptr; struct lpfc_hba *phba = from_timer(phba, t, fabric_block_timer);
unsigned long iflags; unsigned long iflags;
uint32_t tmo_posted; uint32_t tmo_posted;
......
...@@ -4370,8 +4370,7 @@ lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, ...@@ -4370,8 +4370,7 @@ lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
{ {
INIT_LIST_HEAD(&ndlp->els_retry_evt.evt_listp); INIT_LIST_HEAD(&ndlp->els_retry_evt.evt_listp);
INIT_LIST_HEAD(&ndlp->dev_loss_evt.evt_listp); INIT_LIST_HEAD(&ndlp->dev_loss_evt.evt_listp);
setup_timer(&ndlp->nlp_delayfunc, lpfc_els_retry_delay, timer_setup(&ndlp->nlp_delayfunc, lpfc_els_retry_delay, 0);
(unsigned long)ndlp);
ndlp->nlp_DID = did; ndlp->nlp_DID = did;
ndlp->vport = vport; ndlp->vport = vport;
ndlp->phba = vport->phba; ndlp->phba = vport->phba;
...@@ -5508,9 +5507,9 @@ lpfc_cleanup_discovery_resources(struct lpfc_vport *vport) ...@@ -5508,9 +5507,9 @@ lpfc_cleanup_discovery_resources(struct lpfc_vport *vport)
*/ */
/*****************************************************************************/ /*****************************************************************************/
void void
lpfc_disc_timeout(unsigned long ptr) lpfc_disc_timeout(struct timer_list *t)
{ {
struct lpfc_vport *vport = (struct lpfc_vport *) ptr; struct lpfc_vport *vport = from_timer(vport, t, fc_disctmo);
struct lpfc_hba *phba = vport->phba; struct lpfc_hba *phba = vport->phba;
uint32_t tmo_posted; uint32_t tmo_posted;
unsigned long flags = 0; unsigned long flags = 0;
......
...@@ -1138,13 +1138,13 @@ lpfc_hba_down_post(struct lpfc_hba *phba) ...@@ -1138,13 +1138,13 @@ lpfc_hba_down_post(struct lpfc_hba *phba)
* be cleared by the worker thread after it has taken the event bitmap out. * be cleared by the worker thread after it has taken the event bitmap out.
**/ **/
static void static void
lpfc_hb_timeout(unsigned long ptr) lpfc_hb_timeout(struct timer_list *t)
{ {
struct lpfc_hba *phba; struct lpfc_hba *phba;
uint32_t tmo_posted; uint32_t tmo_posted;
unsigned long iflag; unsigned long iflag;
phba = (struct lpfc_hba *)ptr; phba = from_timer(phba, t, hb_tmofunc);
/* Check for heart beat timeout conditions */ /* Check for heart beat timeout conditions */
spin_lock_irqsave(&phba->pport->work_port_lock, iflag); spin_lock_irqsave(&phba->pport->work_port_lock, iflag);
...@@ -1172,12 +1172,12 @@ lpfc_hb_timeout(unsigned long ptr) ...@@ -1172,12 +1172,12 @@ lpfc_hb_timeout(unsigned long ptr)
* be cleared by the worker thread after it has taken the event bitmap out. * be cleared by the worker thread after it has taken the event bitmap out.
**/ **/
static void static void
lpfc_rrq_timeout(unsigned long ptr) lpfc_rrq_timeout(struct timer_list *t)
{ {
struct lpfc_hba *phba; struct lpfc_hba *phba;
unsigned long iflag; unsigned long iflag;
phba = (struct lpfc_hba *)ptr; phba = from_timer(phba, t, rrq_tmr);
spin_lock_irqsave(&phba->pport->work_port_lock, iflag); spin_lock_irqsave(&phba->pport->work_port_lock, iflag);
if (!(phba->pport->load_flag & FC_UNLOADING)) if (!(phba->pport->load_flag & FC_UNLOADING))
phba->hba_flag |= HBA_RRQ_ACTIVE; phba->hba_flag |= HBA_RRQ_ACTIVE;
...@@ -3937,14 +3937,11 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev) ...@@ -3937,14 +3937,11 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
INIT_LIST_HEAD(&vport->rcv_buffer_list); INIT_LIST_HEAD(&vport->rcv_buffer_list);
spin_lock_init(&vport->work_port_lock); spin_lock_init(&vport->work_port_lock);
setup_timer(&vport->fc_disctmo, lpfc_disc_timeout, timer_setup(&vport->fc_disctmo, lpfc_disc_timeout, 0);
(unsigned long)vport);
setup_timer(&vport->els_tmofunc, lpfc_els_timeout, timer_setup(&vport->els_tmofunc, lpfc_els_timeout, 0);
(unsigned long)vport);
setup_timer(&vport->delayed_disc_tmo, lpfc_delayed_disc_tmo, timer_setup(&vport->delayed_disc_tmo, lpfc_delayed_disc_tmo, 0);
(unsigned long)vport);
error = scsi_add_host_with_dma(shost, dev, &phba->pcidev->dev); error = scsi_add_host_with_dma(shost, dev, &phba->pcidev->dev);
if (error) if (error)
...@@ -4210,9 +4207,9 @@ lpfc_fcf_redisc_wait_start_timer(struct lpfc_hba *phba) ...@@ -4210,9 +4207,9 @@ lpfc_fcf_redisc_wait_start_timer(struct lpfc_hba *phba)
* worker thread context. * worker thread context.
**/ **/
static void static void
lpfc_sli4_fcf_redisc_wait_tmo(unsigned long ptr) lpfc_sli4_fcf_redisc_wait_tmo(struct timer_list *t)
{ {
struct lpfc_hba *phba = (struct lpfc_hba *)ptr; struct lpfc_hba *phba = from_timer(phba, t, fcf.redisc_wait);
/* Don't send FCF rediscovery event if timer cancelled */ /* Don't send FCF rediscovery event if timer cancelled */
spin_lock_irq(&phba->hbalock); spin_lock_irq(&phba->hbalock);
...@@ -5624,15 +5621,13 @@ lpfc_setup_driver_resource_phase1(struct lpfc_hba *phba) ...@@ -5624,15 +5621,13 @@ lpfc_setup_driver_resource_phase1(struct lpfc_hba *phba)
INIT_LIST_HEAD(&phba->luns); INIT_LIST_HEAD(&phba->luns);
/* MBOX heartbeat timer */ /* MBOX heartbeat timer */
setup_timer(&psli->mbox_tmo, lpfc_mbox_timeout, (unsigned long)phba); timer_setup(&psli->mbox_tmo, lpfc_mbox_timeout, 0);
/* Fabric block timer */ /* Fabric block timer */
setup_timer(&phba->fabric_block_timer, lpfc_fabric_block_timeout, timer_setup(&phba->fabric_block_timer, lpfc_fabric_block_timeout, 0);
(unsigned long)phba);
/* EA polling mode timer */ /* EA polling mode timer */
setup_timer(&phba->eratt_poll, lpfc_poll_eratt, timer_setup(&phba->eratt_poll, lpfc_poll_eratt, 0);
(unsigned long)phba);
/* Heartbeat timer */ /* Heartbeat timer */
setup_timer(&phba->hb_tmofunc, lpfc_hb_timeout, (unsigned long)phba); timer_setup(&phba->hb_tmofunc, lpfc_hb_timeout, 0);
return 0; return 0;
} }
...@@ -5658,8 +5653,7 @@ lpfc_sli_driver_resource_setup(struct lpfc_hba *phba) ...@@ -5658,8 +5653,7 @@ lpfc_sli_driver_resource_setup(struct lpfc_hba *phba)
*/ */
/* FCP polling mode timer */ /* FCP polling mode timer */
setup_timer(&phba->fcp_poll_timer, lpfc_poll_timeout, timer_setup(&phba->fcp_poll_timer, lpfc_poll_timeout, 0);
(unsigned long)phba);
/* Host attention work mask setup */ /* Host attention work mask setup */
phba->work_ha_mask = (HA_ERATT | HA_MBATT | HA_LATT); phba->work_ha_mask = (HA_ERATT | HA_MBATT | HA_LATT);
...@@ -5829,11 +5823,10 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba) ...@@ -5829,11 +5823,10 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
* Initialize timers used by driver * Initialize timers used by driver
*/ */
setup_timer(&phba->rrq_tmr, lpfc_rrq_timeout, (unsigned long)phba); timer_setup(&phba->rrq_tmr, lpfc_rrq_timeout, 0);
/* FCF rediscover timer */ /* FCF rediscover timer */
setup_timer(&phba->fcf.redisc_wait, lpfc_sli4_fcf_redisc_wait_tmo, timer_setup(&phba->fcf.redisc_wait, lpfc_sli4_fcf_redisc_wait_tmo, 0);
(unsigned long)phba);
/* /*
* Control structure for handling external multi-buffer mailbox * Control structure for handling external multi-buffer mailbox
......
...@@ -4501,9 +4501,9 @@ void lpfc_poll_start_timer(struct lpfc_hba * phba) ...@@ -4501,9 +4501,9 @@ void lpfc_poll_start_timer(struct lpfc_hba * phba)
* and FCP Ring interrupt is disable. * and FCP Ring interrupt is disable.
**/ **/
void lpfc_poll_timeout(unsigned long ptr) void lpfc_poll_timeout(struct timer_list *t)
{ {
struct lpfc_hba *phba = (struct lpfc_hba *) ptr; struct lpfc_hba *phba = from_timer(phba, t, fcp_poll_timer);
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) { if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
lpfc_sli_handle_fast_ring_event(phba, lpfc_sli_handle_fast_ring_event(phba,
......
...@@ -3004,13 +3004,13 @@ lpfc_sli_rsp_pointers_error(struct lpfc_hba *phba, struct lpfc_sli_ring *pring) ...@@ -3004,13 +3004,13 @@ lpfc_sli_rsp_pointers_error(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
* and wake up worker thread to process it. Otherwise, it will set up the * and wake up worker thread to process it. Otherwise, it will set up the
* Error Attention polling timer for the next poll. * Error Attention polling timer for the next poll.
**/ **/
void lpfc_poll_eratt(unsigned long ptr) void lpfc_poll_eratt(struct timer_list *t)
{ {
struct lpfc_hba *phba; struct lpfc_hba *phba;
uint32_t eratt = 0; uint32_t eratt = 0;
uint64_t sli_intr, cnt; uint64_t sli_intr, cnt;
phba = (struct lpfc_hba *)ptr; phba = from_timer(phba, t, eratt_poll);
/* Here we will also keep track of interrupts per sec of the hba */ /* Here we will also keep track of interrupts per sec of the hba */
sli_intr = phba->sli.slistat.sli_intr; sli_intr = phba->sli.slistat.sli_intr;
...@@ -7167,9 +7167,9 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba) ...@@ -7167,9 +7167,9 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
* done by the worker thread function lpfc_mbox_timeout_handler. * done by the worker thread function lpfc_mbox_timeout_handler.
**/ **/
void void
lpfc_mbox_timeout(unsigned long ptr) lpfc_mbox_timeout(struct timer_list *t)
{ {
struct lpfc_hba *phba = (struct lpfc_hba *) ptr; struct lpfc_hba *phba = from_timer(phba, t, sli.mbox_tmo);
unsigned long iflag; unsigned long iflag;
uint32_t tmo_posted; uint32_t tmo_posted;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册