diff options
author | Kees Cook <keescook@chromium.org> | 2017-10-04 20:45:27 -0400 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-10-09 12:19:41 -0400 |
commit | f0309de91aeb5271c920e768f56e4d2a12be30f5 (patch) | |
tree | b7b67a5d6265a63c868d459ba2f51e9c77ab2748 | |
parent | 8a5776a5f49812d29fe4b2d0a2d71675c3facf3f (diff) |
RDMA/nes: 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. A pointer from nesadapter back to
nesdev was added.
Cc: Faisal Latif <faisal.latif@intel.com>
Cc: Doug Ledford <dledford@redhat.com>
Cc: Sean Hefty <sean.hefty@intel.com>
Cc: Hal Rosenstock <hal.rosenstock@gmail.com>
Cc: linux-rdma@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r-- | drivers/infiniband/hw/nes/nes.h | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 5 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.c | 20 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.h | 1 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_mgt.c | 9 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_nic.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_utils.c | 11 | ||||
-rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 10 |
8 files changed, 29 insertions, 36 deletions
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h index 3f9e56e8b379..00c27291dc26 100644 --- a/drivers/infiniband/hw/nes/nes.h +++ b/drivers/infiniband/hw/nes/nes.h | |||
@@ -536,7 +536,7 @@ void nes_iwarp_ce_handler(struct nes_device *, struct nes_hw_cq *); | |||
536 | int nes_destroy_cqp(struct nes_device *); | 536 | int nes_destroy_cqp(struct nes_device *); |
537 | int nes_nic_cm_xmit(struct sk_buff *, struct net_device *); | 537 | int nes_nic_cm_xmit(struct sk_buff *, struct net_device *); |
538 | void nes_recheck_link_status(struct work_struct *work); | 538 | void nes_recheck_link_status(struct work_struct *work); |
539 | void nes_terminate_timeout(unsigned long context); | 539 | void nes_terminate_timeout(struct timer_list *t); |
540 | 540 | ||
541 | /* nes_nic.c */ | 541 | /* nes_nic.c */ |
542 | struct net_device *nes_netdev_init(struct nes_device *, void __iomem *); | 542 | struct net_device *nes_netdev_init(struct nes_device *, void __iomem *); |
@@ -575,8 +575,8 @@ void nes_put_cqp_request(struct nes_device *nesdev, | |||
575 | struct nes_cqp_request *cqp_request); | 575 | struct nes_cqp_request *cqp_request); |
576 | void nes_post_cqp_request(struct nes_device *, struct nes_cqp_request *); | 576 | void nes_post_cqp_request(struct nes_device *, struct nes_cqp_request *); |
577 | int nes_arp_table(struct nes_device *, u32, u8 *, u32); | 577 | int nes_arp_table(struct nes_device *, u32, u8 *, u32); |
578 | void nes_mh_fix(unsigned long); | 578 | void nes_mh_fix(struct timer_list *t); |
579 | void nes_clc(unsigned long); | 579 | void nes_clc(struct timer_list *t); |
580 | void nes_dump_mem(unsigned int, void *, int); | 580 | void nes_dump_mem(unsigned int, void *, int); |
581 | u32 nes_crc32(u32, u32, u32, u32, u8 *, u32, u32, u32); | 581 | u32 nes_crc32(u32, u32, u32, u32, u8 *, u32, u32, u32); |
582 | 582 | ||
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index de4025deaa4a..4961e80dcf95 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c | |||
@@ -840,7 +840,7 @@ static void handle_recv_entry(struct nes_cm_node *cm_node, u32 rem_node) | |||
840 | /** | 840 | /** |
841 | * nes_cm_timer_tick | 841 | * nes_cm_timer_tick |
842 | */ | 842 | */ |
843 | static void nes_cm_timer_tick(unsigned long pass) | 843 | static void nes_cm_timer_tick(struct timer_list *unused) |
844 | { | 844 | { |
845 | unsigned long flags; | 845 | unsigned long flags; |
846 | unsigned long nexttimeout = jiffies + NES_LONG_TIME; | 846 | unsigned long nexttimeout = jiffies + NES_LONG_TIME; |
@@ -2670,8 +2670,7 @@ static struct nes_cm_core *nes_cm_alloc_core(void) | |||
2670 | return NULL; | 2670 | return NULL; |
2671 | 2671 | ||
2672 | INIT_LIST_HEAD(&cm_core->connected_nodes); | 2672 | INIT_LIST_HEAD(&cm_core->connected_nodes); |
2673 | init_timer(&cm_core->tcp_timer); | 2673 | timer_setup(&cm_core->tcp_timer, nes_cm_timer_tick, 0); |
2674 | cm_core->tcp_timer.function = nes_cm_timer_tick; | ||
2675 | 2674 | ||
2676 | cm_core->mtu = NES_CM_DEFAULT_MTU; | 2675 | cm_core->mtu = NES_CM_DEFAULT_MTU; |
2677 | cm_core->state = NES_CM_STATE_INITED; | 2676 | cm_core->state = NES_CM_STATE_INITED; |
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c index b0adf65e4bdb..48398b460d5c 100644 --- a/drivers/infiniband/hw/nes/nes_hw.c +++ b/drivers/infiniband/hw/nes/nes_hw.c | |||
@@ -381,6 +381,7 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { | |||
381 | sizeof nesadapter->pft_mcast_map); | 381 | sizeof nesadapter->pft_mcast_map); |
382 | 382 | ||
383 | /* populate the new nesadapter */ | 383 | /* populate the new nesadapter */ |
384 | nesadapter->nesdev = nesdev; | ||
384 | nesadapter->devfn = nesdev->pcidev->devfn; | 385 | nesadapter->devfn = nesdev->pcidev->devfn; |
385 | nesadapter->bus_number = nesdev->pcidev->bus->number; | 386 | nesadapter->bus_number = nesdev->pcidev->bus->number; |
386 | nesadapter->ref_count = 1; | 387 | nesadapter->ref_count = 1; |
@@ -598,19 +599,15 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { | |||
598 | } | 599 | } |
599 | 600 | ||
600 | if (nesadapter->hw_rev == NE020_REV) { | 601 | if (nesadapter->hw_rev == NE020_REV) { |
601 | init_timer(&nesadapter->mh_timer); | 602 | timer_setup(&nesadapter->mh_timer, nes_mh_fix, 0); |
602 | nesadapter->mh_timer.function = nes_mh_fix; | ||
603 | nesadapter->mh_timer.expires = jiffies + (HZ/5); /* 1 second */ | 603 | nesadapter->mh_timer.expires = jiffies + (HZ/5); /* 1 second */ |
604 | nesadapter->mh_timer.data = (unsigned long)nesdev; | ||
605 | add_timer(&nesadapter->mh_timer); | 604 | add_timer(&nesadapter->mh_timer); |
606 | } else { | 605 | } else { |
607 | nes_write32(nesdev->regs+NES_INTF_INT_STAT, 0x0f000000); | 606 | nes_write32(nesdev->regs+NES_INTF_INT_STAT, 0x0f000000); |
608 | } | 607 | } |
609 | 608 | ||
610 | init_timer(&nesadapter->lc_timer); | 609 | timer_setup(&nesadapter->lc_timer, nes_clc, 0); |
611 | nesadapter->lc_timer.function = nes_clc; | ||
612 | nesadapter->lc_timer.expires = jiffies + 3600 * HZ; /* 1 hour */ | 610 | nesadapter->lc_timer.expires = jiffies + 3600 * HZ; /* 1 hour */ |
613 | nesadapter->lc_timer.data = (unsigned long)nesdev; | ||
614 | add_timer(&nesadapter->lc_timer); | 611 | add_timer(&nesadapter->lc_timer); |
615 | 612 | ||
616 | list_add_tail(&nesadapter->list, &nes_adapter_list); | 613 | list_add_tail(&nesadapter->list, &nes_adapter_list); |
@@ -1623,9 +1620,9 @@ static void nes_replenish_nic_rq(struct nes_vnic *nesvnic) | |||
1623 | /** | 1620 | /** |
1624 | * nes_rq_wqes_timeout | 1621 | * nes_rq_wqes_timeout |
1625 | */ | 1622 | */ |
1626 | static void nes_rq_wqes_timeout(unsigned long parm) | 1623 | static void nes_rq_wqes_timeout(struct timer_list *t) |
1627 | { | 1624 | { |
1628 | struct nes_vnic *nesvnic = (struct nes_vnic *)parm; | 1625 | struct nes_vnic *nesvnic = from_timer(nesvnic, t, rq_wqes_timer); |
1629 | printk("%s: Timer fired.\n", __func__); | 1626 | printk("%s: Timer fired.\n", __func__); |
1630 | atomic_set(&nesvnic->rx_skb_timer_running, 0); | 1627 | atomic_set(&nesvnic->rx_skb_timer_running, 0); |
1631 | if (atomic_read(&nesvnic->rx_skbs_needed)) | 1628 | if (atomic_read(&nesvnic->rx_skbs_needed)) |
@@ -1849,8 +1846,7 @@ int nes_init_nic_qp(struct nes_device *nesdev, struct net_device *netdev) | |||
1849 | wqe_count -= counter; | 1846 | wqe_count -= counter; |
1850 | nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter << 24) | nesvnic->nic.qp_id); | 1847 | nes_write32(nesdev->regs+NES_WQE_ALLOC, (counter << 24) | nesvnic->nic.qp_id); |
1851 | } while (wqe_count); | 1848 | } while (wqe_count); |
1852 | setup_timer(&nesvnic->rq_wqes_timer, nes_rq_wqes_timeout, | 1849 | timer_setup(&nesvnic->rq_wqes_timer, nes_rq_wqes_timeout, 0); |
1853 | (unsigned long)nesvnic); | ||
1854 | nes_debug(NES_DBG_INIT, "NAPI support Enabled\n"); | 1850 | nes_debug(NES_DBG_INIT, "NAPI support Enabled\n"); |
1855 | if (nesdev->nesadapter->et_use_adaptive_rx_coalesce) | 1851 | if (nesdev->nesadapter->et_use_adaptive_rx_coalesce) |
1856 | { | 1852 | { |
@@ -3474,9 +3470,9 @@ static void nes_terminate_received(struct nes_device *nesdev, | |||
3474 | } | 3470 | } |
3475 | 3471 | ||
3476 | /* Timeout routine in case terminate fails to complete */ | 3472 | /* Timeout routine in case terminate fails to complete */ |
3477 | void nes_terminate_timeout(unsigned long context) | 3473 | void nes_terminate_timeout(struct timer_list *t) |
3478 | { | 3474 | { |
3479 | struct nes_qp *nesqp = (struct nes_qp *)(unsigned long)context; | 3475 | struct nes_qp *nesqp = from_timer(nesqp, t, terminate_timer); |
3480 | 3476 | ||
3481 | nes_terminate_done(nesqp, 1); | 3477 | nes_terminate_done(nesqp, 1); |
3482 | } | 3478 | } |
diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h index 1b66ef1e9937..3c56470816a8 100644 --- a/drivers/infiniband/hw/nes/nes_hw.h +++ b/drivers/infiniband/hw/nes/nes_hw.h | |||
@@ -1164,6 +1164,7 @@ struct nes_adapter { | |||
1164 | u8 log_port; | 1164 | u8 log_port; |
1165 | 1165 | ||
1166 | /* PCI information */ | 1166 | /* PCI information */ |
1167 | struct nes_device *nesdev; | ||
1167 | unsigned int devfn; | 1168 | unsigned int devfn; |
1168 | unsigned char bus_number; | 1169 | unsigned char bus_number; |
1169 | unsigned char OneG_Mode; | 1170 | unsigned char OneG_Mode; |
diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c index 77226cf4ea02..21e0ebd39a05 100644 --- a/drivers/infiniband/hw/nes/nes_mgt.c +++ b/drivers/infiniband/hw/nes/nes_mgt.c | |||
@@ -122,9 +122,10 @@ static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic) | |||
122 | /** | 122 | /** |
123 | * nes_mgt_rq_wqes_timeout | 123 | * nes_mgt_rq_wqes_timeout |
124 | */ | 124 | */ |
125 | static void nes_mgt_rq_wqes_timeout(unsigned long parm) | 125 | static void nes_mgt_rq_wqes_timeout(struct timer_list *t) |
126 | { | 126 | { |
127 | struct nes_vnic_mgt *mgtvnic = (struct nes_vnic_mgt *)parm; | 127 | struct nes_vnic_mgt *mgtvnic = from_timer(mgtvnic, t, |
128 | rq_wqes_timer); | ||
128 | 129 | ||
129 | atomic_set(&mgtvnic->rx_skb_timer_running, 0); | 130 | atomic_set(&mgtvnic->rx_skb_timer_running, 0); |
130 | if (atomic_read(&mgtvnic->rx_skbs_needed)) | 131 | if (atomic_read(&mgtvnic->rx_skbs_needed)) |
@@ -1040,8 +1041,8 @@ int nes_init_mgt_qp(struct nes_device *nesdev, struct net_device *netdev, struct | |||
1040 | mgtvnic->mgt.rx_skb[counter] = skb; | 1041 | mgtvnic->mgt.rx_skb[counter] = skb; |
1041 | } | 1042 | } |
1042 | 1043 | ||
1043 | setup_timer(&mgtvnic->rq_wqes_timer, nes_mgt_rq_wqes_timeout, | 1044 | timer_setup(&mgtvnic->rq_wqes_timer, nes_mgt_rq_wqes_timeout, |
1044 | (unsigned long)mgtvnic); | 1045 | 0); |
1045 | 1046 | ||
1046 | wqe_count = NES_MGT_WQ_COUNT - 1; | 1047 | wqe_count = NES_MGT_WQ_COUNT - 1; |
1047 | mgtvnic->mgt.rq_head = wqe_count; | 1048 | mgtvnic->mgt.rq_head = wqe_count; |
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index 5921ea3d50ae..448a8e7d0963 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c | |||
@@ -1746,8 +1746,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, | |||
1746 | nesvnic->rdma_enabled = 0; | 1746 | nesvnic->rdma_enabled = 0; |
1747 | } | 1747 | } |
1748 | nesvnic->nic_cq.cq_number = nesvnic->nic.qp_id; | 1748 | nesvnic->nic_cq.cq_number = nesvnic->nic.qp_id; |
1749 | init_timer(&nesvnic->event_timer); | 1749 | timer_setup(&nesvnic->event_timer, NULL, 0); |
1750 | nesvnic->event_timer.function = NULL; | ||
1751 | spin_lock_init(&nesvnic->tx_lock); | 1750 | spin_lock_init(&nesvnic->tx_lock); |
1752 | spin_lock_init(&nesvnic->port_ibevent_lock); | 1751 | spin_lock_init(&nesvnic->port_ibevent_lock); |
1753 | nesdev->netdev[nesdev->netdev_count] = netdev; | 1752 | nesdev->netdev[nesdev->netdev_count] = netdev; |
diff --git a/drivers/infiniband/hw/nes/nes_utils.c b/drivers/infiniband/hw/nes/nes_utils.c index 37331e2fdc5f..1dc0527e5a05 100644 --- a/drivers/infiniband/hw/nes/nes_utils.c +++ b/drivers/infiniband/hw/nes/nes_utils.c | |||
@@ -740,11 +740,11 @@ int nes_arp_table(struct nes_device *nesdev, u32 ip_addr, u8 *mac_addr, u32 acti | |||
740 | /** | 740 | /** |
741 | * nes_mh_fix | 741 | * nes_mh_fix |
742 | */ | 742 | */ |
743 | void nes_mh_fix(unsigned long parm) | 743 | void nes_mh_fix(struct timer_list *t) |
744 | { | 744 | { |
745 | struct nes_adapter *nesadapter = from_timer(nesadapter, t, mh_timer); | ||
746 | struct nes_device *nesdev = nesadapter->nesdev; | ||
745 | unsigned long flags; | 747 | unsigned long flags; |
746 | struct nes_device *nesdev = (struct nes_device *)parm; | ||
747 | struct nes_adapter *nesadapter = nesdev->nesadapter; | ||
748 | struct nes_vnic *nesvnic; | 748 | struct nes_vnic *nesvnic; |
749 | u32 used_chunks_tx; | 749 | u32 used_chunks_tx; |
750 | u32 temp_used_chunks_tx; | 750 | u32 temp_used_chunks_tx; |
@@ -881,11 +881,10 @@ no_mh_work: | |||
881 | /** | 881 | /** |
882 | * nes_clc | 882 | * nes_clc |
883 | */ | 883 | */ |
884 | void nes_clc(unsigned long parm) | 884 | void nes_clc(struct timer_list *t) |
885 | { | 885 | { |
886 | struct nes_adapter *nesadapter = from_timer(nesadapter, t, lc_timer); | ||
886 | unsigned long flags; | 887 | unsigned long flags; |
887 | struct nes_device *nesdev = (struct nes_device *)parm; | ||
888 | struct nes_adapter *nesadapter = nesdev->nesadapter; | ||
889 | 888 | ||
890 | spin_lock_irqsave(&nesadapter->phy_lock, flags); | 889 | spin_lock_irqsave(&nesadapter->phy_lock, flags); |
891 | nesadapter->link_interrupt_count[0] = 0; | 890 | nesadapter->link_interrupt_count[0] = 0; |
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c index 442b9bdc0f03..fac59cd1db71 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c | |||
@@ -1304,8 +1304,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, | |||
1304 | init_completion(&nesqp->rq_drained); | 1304 | init_completion(&nesqp->rq_drained); |
1305 | 1305 | ||
1306 | nesqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR); | 1306 | nesqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR); |
1307 | setup_timer(&nesqp->terminate_timer, nes_terminate_timeout, | 1307 | timer_setup(&nesqp->terminate_timer, nes_terminate_timeout, 0); |
1308 | (unsigned long)nesqp); | ||
1309 | 1308 | ||
1310 | /* update the QP table */ | 1309 | /* update the QP table */ |
1311 | nesdev->nesadapter->qp_table[nesqp->hwqp.qp_id-NES_FIRST_QPN] = nesqp; | 1310 | nesdev->nesadapter->qp_table[nesqp->hwqp.qp_id-NES_FIRST_QPN] = nesqp; |
@@ -3788,9 +3787,9 @@ struct nes_ib_device *nes_init_ofa_device(struct net_device *netdev) | |||
3788 | /** | 3787 | /** |
3789 | * nes_handle_delayed_event | 3788 | * nes_handle_delayed_event |
3790 | */ | 3789 | */ |
3791 | static void nes_handle_delayed_event(unsigned long data) | 3790 | static void nes_handle_delayed_event(struct timer_list *t) |
3792 | { | 3791 | { |
3793 | struct nes_vnic *nesvnic = (void *) data; | 3792 | struct nes_vnic *nesvnic = from_timer(nesvnic, t, event_timer); |
3794 | 3793 | ||
3795 | if (nesvnic->delayed_event != nesvnic->last_dispatched_event) { | 3794 | if (nesvnic->delayed_event != nesvnic->last_dispatched_event) { |
3796 | struct ib_event event; | 3795 | struct ib_event event; |
@@ -3820,8 +3819,7 @@ void nes_port_ibevent(struct nes_vnic *nesvnic) | |||
3820 | if (!nesvnic->event_timer.function) { | 3819 | if (!nesvnic->event_timer.function) { |
3821 | ib_dispatch_event(&event); | 3820 | ib_dispatch_event(&event); |
3822 | nesvnic->last_dispatched_event = event.event; | 3821 | nesvnic->last_dispatched_event = event.event; |
3823 | nesvnic->event_timer.function = nes_handle_delayed_event; | 3822 | nesvnic->event_timer.function = (TIMER_FUNC_TYPE)nes_handle_delayed_event; |
3824 | nesvnic->event_timer.data = (unsigned long) nesvnic; | ||
3825 | nesvnic->event_timer.expires = jiffies + NES_EVENT_DELAY; | 3823 | nesvnic->event_timer.expires = jiffies + NES_EVENT_DELAY; |
3826 | add_timer(&nesvnic->event_timer); | 3824 | add_timer(&nesvnic->event_timer); |
3827 | } else { | 3825 | } else { |