@@ -122,7 +122,6 @@ struct chanstat {
122
122
* @n_rcv_packets_not_accepted: # bogs rcv packets.
123
123
* @queuefullmsg_logged:
124
124
* @struct chstat:
125
- * @struct irq_poll_timer:
126
125
* @struct napi:
127
126
* @struct cmdrsp:
128
127
*/
@@ -183,7 +182,6 @@ struct visornic_devdata {
183
182
184
183
int queuefullmsg_logged ;
185
184
struct chanstat chstat ;
186
- struct timer_list irq_poll_timer ;
187
185
struct napi_struct napi ;
188
186
struct uiscmdrsp cmdrsp [SIZEOF_CMDRSP ];
189
187
};
@@ -341,7 +339,7 @@ static void visornic_serverdown_complete(struct visornic_devdata *devdata)
341
339
struct net_device * netdev = devdata -> netdev ;
342
340
343
341
/* Stop polling for interrupts */
344
- del_timer_sync ( & devdata -> irq_poll_timer );
342
+ visorbus_disable_channel_interrupts ( devdata -> dev );
345
343
346
344
rtnl_lock ();
347
345
dev_close (netdev );
@@ -1749,17 +1747,17 @@ static int visornic_poll(struct napi_struct *napi, int budget)
1749
1747
return rx_count ;
1750
1748
}
1751
1749
1752
- /* poll_for_irq - checks the status of the response queue
1753
- * @t: pointer to the 'struct timer_list' from which we can retrieve the
1754
- * the visornic devdata struct.
1750
+ /* visornic_channel_interrupt - checks the status of the response queue
1755
1751
*
1756
1752
* Main function of the vnic_incoming thread. Periodically check the response
1757
1753
* queue and drain it if needed.
1758
1754
*/
1759
- static void poll_for_irq (struct timer_list * t )
1755
+ static void visornic_channel_interrupt (struct visor_device * dev )
1760
1756
{
1761
- struct visornic_devdata * devdata = from_timer (devdata , t ,
1762
- irq_poll_timer );
1757
+ struct visornic_devdata * devdata = dev_get_drvdata (& dev -> device );
1758
+
1759
+ if (!devdata )
1760
+ return ;
1763
1761
1764
1762
if (!visorchannel_signalempty (
1765
1763
devdata -> dev -> visorchannel ,
@@ -1768,7 +1766,6 @@ static void poll_for_irq(struct timer_list *t)
1768
1766
1769
1767
atomic_set (& devdata -> interrupt_rcvd , 0 );
1770
1768
1771
- mod_timer (& devdata -> irq_poll_timer , msecs_to_jiffies (2 ));
1772
1769
}
1773
1770
1774
1771
/* visornic_probe - probe function for visornic devices
@@ -1890,13 +1887,6 @@ static int visornic_probe(struct visor_device *dev)
1890
1887
/* Let's start our threads to get responses */
1891
1888
netif_napi_add (netdev , & devdata -> napi , visornic_poll , NAPI_WEIGHT );
1892
1889
1893
- timer_setup (& devdata -> irq_poll_timer , poll_for_irq , 0 );
1894
- /* Note: This time has to start running before the while
1895
- * loop below because the napi routine is responsible for
1896
- * setting enab_dis_acked
1897
- */
1898
- mod_timer (& devdata -> irq_poll_timer , msecs_to_jiffies (2 ));
1899
-
1900
1890
channel_offset = offsetof(struct visor_io_channel ,
1901
1891
channel_header .features );
1902
1892
err = visorbus_read_channel (dev , channel_offset , & features , 8 );
@@ -1949,7 +1939,7 @@ static int visornic_probe(struct visor_device *dev)
1949
1939
unregister_netdev (netdev );
1950
1940
1951
1941
cleanup_napi_add :
1952
- del_timer_sync ( & devdata -> irq_poll_timer );
1942
+ visorbus_disable_channel_interrupts ( dev );
1953
1943
netif_napi_del (& devdata -> napi );
1954
1944
1955
1945
cleanup_xmit_cmdrsp :
@@ -2017,7 +2007,7 @@ static void visornic_remove(struct visor_device *dev)
2017
2007
/* this will call visornic_close() */
2018
2008
unregister_netdev (netdev );
2019
2009
2020
- del_timer_sync ( & devdata -> irq_poll_timer );
2010
+ visorbus_disable_channel_interrupts ( devdata -> dev );
2021
2011
netif_napi_del (& devdata -> napi );
2022
2012
2023
2013
dev_set_drvdata (& dev -> device , NULL );
@@ -2091,7 +2081,7 @@ static int visornic_resume(struct visor_device *dev,
2091
2081
* we can start using the device again.
2092
2082
* TODO: State transitions
2093
2083
*/
2094
- mod_timer ( & devdata -> irq_poll_timer , msecs_to_jiffies ( 2 ) );
2084
+ visorbus_enable_channel_interrupts ( dev );
2095
2085
2096
2086
rtnl_lock ();
2097
2087
dev_open (netdev , NULL );
@@ -2113,7 +2103,7 @@ static struct visor_driver visornic_driver = {
2113
2103
.remove = visornic_remove ,
2114
2104
.pause = visornic_pause ,
2115
2105
.resume = visornic_resume ,
2116
- .channel_interrupt = NULL ,
2106
+ .channel_interrupt = visornic_channel_interrupt ,
2117
2107
};
2118
2108
2119
2109
/* visornic_init - init function
0 commit comments