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 @@ -1559,37 +1559,32 @@ EXPORT_SYMBOL(call_netdevice_notifiers);
15591559
15601560static struct static_key netstamp_needed __read_mostly ;
15611561#ifdef HAVE_JUMP_LABEL
1562- /* We are not allowed to call static_key_slow_dec() from irq context
1563- * If net_disable_timestamp() is called from irq context, defer the
1564- * static_key_slow_dec() calls.
1565- */
15661562static atomic_t netstamp_needed_deferred ;
1567- #endif
1568-
1569- void net_enable_timestamp (void )
1563+ static void netstamp_clear (struct work_struct * work )
15701564{
1571- #ifdef HAVE_JUMP_LABEL
15721565 int deferred = atomic_xchg (& netstamp_needed_deferred , 0 );
15731566
1574- if (deferred ) {
1575- while (-- deferred )
1576- static_key_slow_dec (& netstamp_needed );
1577- return ;
1578- }
1567+ while (deferred -- )
1568+ static_key_slow_dec (& netstamp_needed );
1569+ }
1570+ static DECLARE_WORK (netstamp_work , netstamp_clear );
15791571#endif
1572+
1573+ void net_enable_timestamp (void )
1574+ {
15801575 static_key_slow_inc (& netstamp_needed );
15811576}
15821577EXPORT_SYMBOL (net_enable_timestamp );
15831578
15841579void net_disable_timestamp (void )
15851580{
15861581#ifdef HAVE_JUMP_LABEL
1587- if (in_interrupt ()) {
1588- atomic_inc (& netstamp_needed_deferred );
1589- return ;
1590- }
1591- #endif
1582+ /* net_disable_timestamp() can be called from non process context */
1583+ atomic_inc (& netstamp_needed_deferred );
1584+ schedule_work (& netstamp_work );
1585+ #else
15921586 static_key_slow_dec (& netstamp_needed );
1587+ #endif
15931588}
15941589EXPORT_SYMBOL (net_disable_timestamp );
15951590
You can’t perform that action at this time.
0 commit comments