@@ -67,7 +67,7 @@ static void port_r_cnt(struct ksz_device *dev, int port)
6767static void ksz_mib_read_work (struct work_struct * work )
6868{
6969 struct ksz_device * dev = container_of (work , struct ksz_device ,
70- mib_read );
70+ mib_read . work );
7171 struct ksz_port_mib * mib ;
7272 struct ksz_port * p ;
7373 int i ;
@@ -93,32 +93,24 @@ static void ksz_mib_read_work(struct work_struct *work)
9393 p -> read = false;
9494 mutex_unlock (& mib -> cnt_mutex );
9595 }
96- }
97-
98- static void mib_monitor (struct timer_list * t )
99- {
100- struct ksz_device * dev = from_timer (dev , t , mib_read_timer );
10196
102- mod_timer (& dev -> mib_read_timer , jiffies + dev -> mib_read_interval );
103- schedule_work (& dev -> mib_read );
97+ schedule_delayed_work (& dev -> mib_read , dev -> mib_read_interval );
10498}
10599
106100void ksz_init_mib_timer (struct ksz_device * dev )
107101{
108102 int i ;
109103
104+ INIT_DELAYED_WORK (& dev -> mib_read , ksz_mib_read_work );
105+
110106 /* Read MIB counters every 30 seconds to avoid overflow. */
111107 dev -> mib_read_interval = msecs_to_jiffies (30000 );
112108
113- INIT_WORK (& dev -> mib_read , ksz_mib_read_work );
114- timer_setup (& dev -> mib_read_timer , mib_monitor , 0 );
115-
116109 for (i = 0 ; i < dev -> mib_port_cnt ; i ++ )
117110 dev -> dev_ops -> port_init_cnt (dev , i );
118111
119112 /* Start the timer 2 seconds later. */
120- dev -> mib_read_timer .expires = jiffies + msecs_to_jiffies (2000 );
121- add_timer (& dev -> mib_read_timer );
113+ schedule_delayed_work (& dev -> mib_read , msecs_to_jiffies (2000 ));
122114}
123115EXPORT_SYMBOL_GPL (ksz_init_mib_timer );
124116
@@ -152,7 +144,7 @@ void ksz_adjust_link(struct dsa_switch *ds, int port,
152144 /* Read all MIB counters when the link is going down. */
153145 if (!phydev -> link ) {
154146 p -> read = true;
155- schedule_work (& dev -> mib_read );
147+ schedule_delayed_work (& dev -> mib_read , 0 );
156148 }
157149 mutex_lock (& dev -> dev_mutex );
158150 if (!phydev -> link )
@@ -477,10 +469,8 @@ EXPORT_SYMBOL(ksz_switch_register);
477469void ksz_switch_remove (struct ksz_device * dev )
478470{
479471 /* timer started */
480- if (dev -> mib_read_timer .expires ) {
481- del_timer_sync (& dev -> mib_read_timer );
482- flush_work (& dev -> mib_read );
483- }
472+ if (dev -> mib_read_interval )
473+ cancel_delayed_work_sync (& dev -> mib_read );
484474
485475 dev -> dev_ops -> exit (dev );
486476 dsa_unregister_switch (dev -> ds );
0 commit comments