File tree Expand file tree Collapse file tree 1 file changed +13
-18
lines changed Expand file tree Collapse file tree 1 file changed +13
-18
lines changed Original file line number Diff line number Diff line change @@ -1695,37 +1695,32 @@ EXPORT_SYMBOL_GPL(net_dec_egress_queue);
16951695
16961696static struct static_key netstamp_needed __read_mostly ;
16971697#ifdef HAVE_JUMP_LABEL
1698- /* We are not allowed to call static_key_slow_dec() from irq context
1699- * If net_disable_timestamp() is called from irq context, defer the
1700- * static_key_slow_dec() calls.
1701- */
17021698static atomic_t netstamp_needed_deferred ;
1703- #endif
1704-
1705- void net_enable_timestamp (void )
1699+ static void netstamp_clear (struct work_struct * work )
17061700{
1707- #ifdef HAVE_JUMP_LABEL
17081701 int deferred = atomic_xchg (& netstamp_needed_deferred , 0 );
17091702
1710- if (deferred ) {
1711- while (-- deferred )
1712- static_key_slow_dec (& netstamp_needed );
1713- return ;
1714- }
1703+ while (deferred -- )
1704+ static_key_slow_dec (& netstamp_needed );
1705+ }
1706+ static DECLARE_WORK (netstamp_work , netstamp_clear );
17151707#endif
1708+
1709+ void net_enable_timestamp (void )
1710+ {
17161711 static_key_slow_inc (& netstamp_needed );
17171712}
17181713EXPORT_SYMBOL (net_enable_timestamp );
17191714
17201715void net_disable_timestamp (void )
17211716{
17221717#ifdef HAVE_JUMP_LABEL
1723- if (in_interrupt ()) {
1724- atomic_inc (& netstamp_needed_deferred );
1725- return ;
1726- }
1727- #endif
1718+ /* net_disable_timestamp() can be called from non process context */
1719+ atomic_inc (& netstamp_needed_deferred );
1720+ schedule_work (& netstamp_work );
1721+ #else
17281722 static_key_slow_dec (& netstamp_needed );
1723+ #endif
17291724}
17301725EXPORT_SYMBOL (net_disable_timestamp );
17311726
You can’t perform that action at this time.
0 commit comments