aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2017-10-04 20:45:27 -0400
committerDoug Ledford <dledford@redhat.com>2017-10-09 12:19:41 -0400
commitf0309de91aeb5271c920e768f56e4d2a12be30f5 (patch)
treeb7b67a5d6265a63c868d459ba2f51e9c77ab2748
parent8a5776a5f49812d29fe4b2d0a2d71675c3facf3f (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.h6
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c5
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.c20
-rw-r--r--drivers/infiniband/hw/nes/nes_hw.h1
-rw-r--r--drivers/infiniband/hw/nes/nes_mgt.c9
-rw-r--r--drivers/infiniband/hw/nes/nes_nic.c3
-rw-r--r--drivers/infiniband/hw/nes/nes_utils.c11
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c10
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 *);
536int nes_destroy_cqp(struct nes_device *); 536int nes_destroy_cqp(struct nes_device *);
537int nes_nic_cm_xmit(struct sk_buff *, struct net_device *); 537int nes_nic_cm_xmit(struct sk_buff *, struct net_device *);
538void nes_recheck_link_status(struct work_struct *work); 538void nes_recheck_link_status(struct work_struct *work);
539void nes_terminate_timeout(unsigned long context); 539void nes_terminate_timeout(struct timer_list *t);
540 540
541/* nes_nic.c */ 541/* nes_nic.c */
542struct net_device *nes_netdev_init(struct nes_device *, void __iomem *); 542struct 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);
576void nes_post_cqp_request(struct nes_device *, struct nes_cqp_request *); 576void nes_post_cqp_request(struct nes_device *, struct nes_cqp_request *);
577int nes_arp_table(struct nes_device *, u32, u8 *, u32); 577int nes_arp_table(struct nes_device *, u32, u8 *, u32);
578void nes_mh_fix(unsigned long); 578void nes_mh_fix(struct timer_list *t);
579void nes_clc(unsigned long); 579void nes_clc(struct timer_list *t);
580void nes_dump_mem(unsigned int, void *, int); 580void nes_dump_mem(unsigned int, void *, int);
581u32 nes_crc32(u32, u32, u32, u32, u8 *, u32, u32, u32); 581u32 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 */
843static void nes_cm_timer_tick(unsigned long pass) 843static 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 */
1626static void nes_rq_wqes_timeout(unsigned long parm) 1623static 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 */
3477void nes_terminate_timeout(unsigned long context) 3473void 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 */
125static void nes_mgt_rq_wqes_timeout(unsigned long parm) 125static 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 */
743void nes_mh_fix(unsigned long parm) 743void 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 */
884void nes_clc(unsigned long parm) 884void 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 */
3791static void nes_handle_delayed_event(unsigned long data) 3790static 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 {