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 @@ -1696,37 +1696,32 @@ EXPORT_SYMBOL_GPL(net_dec_egress_queue);
16961696
16971697static struct static_key netstamp_needed __read_mostly ;
16981698#ifdef HAVE_JUMP_LABEL
1699- /* We are not allowed to call static_key_slow_dec() from irq context
1700- * If net_disable_timestamp() is called from irq context, defer the
1701- * static_key_slow_dec() calls.
1702- */
17031699static atomic_t netstamp_needed_deferred ;
1704- #endif
1705-
1706- void net_enable_timestamp (void )
1700+ static void netstamp_clear (struct work_struct * work )
17071701{
1708- #ifdef HAVE_JUMP_LABEL
17091702 int deferred = atomic_xchg (& netstamp_needed_deferred , 0 );
17101703
1711- if (deferred ) {
1712- while (-- deferred )
1713- static_key_slow_dec (& netstamp_needed );
1714- return ;
1715- }
1704+ while (deferred -- )
1705+ static_key_slow_dec (& netstamp_needed );
1706+ }
1707+ static DECLARE_WORK (netstamp_work , netstamp_clear );
17161708#endif
1709+
1710+ void net_enable_timestamp (void )
1711+ {
17171712 static_key_slow_inc (& netstamp_needed );
17181713}
17191714EXPORT_SYMBOL (net_enable_timestamp );
17201715
17211716void net_disable_timestamp (void )
17221717{
17231718#ifdef HAVE_JUMP_LABEL
1724- if (in_interrupt ()) {
1725- atomic_inc (& netstamp_needed_deferred );
1726- return ;
1727- }
1728- #endif
1719+ /* net_disable_timestamp() can be called from non process context */
1720+ atomic_inc (& netstamp_needed_deferred );
1721+ schedule_work (& netstamp_work );
1722+ #else
17291723 static_key_slow_dec (& netstamp_needed );
1724+ #endif
17301725}
17311726EXPORT_SYMBOL (net_disable_timestamp );
17321727
You can’t perform that action at this time.
0 commit comments