Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The conflict was an interaction between a bug fix in the netvsc driver in 'net' and an optimization of the RX path in 'net-next'. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1695,24 +1695,19 @@ EXPORT_SYMBOL_GPL(net_dec_egress_queue);
|
||||
|
||||
static struct static_key netstamp_needed __read_mostly;
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
/* We are not allowed to call static_key_slow_dec() from irq context
|
||||
* If net_disable_timestamp() is called from irq context, defer the
|
||||
* static_key_slow_dec() calls.
|
||||
*/
|
||||
static atomic_t netstamp_needed_deferred;
|
||||
static void netstamp_clear(struct work_struct *work)
|
||||
{
|
||||
int deferred = atomic_xchg(&netstamp_needed_deferred, 0);
|
||||
|
||||
while (deferred--)
|
||||
static_key_slow_dec(&netstamp_needed);
|
||||
}
|
||||
static DECLARE_WORK(netstamp_work, netstamp_clear);
|
||||
#endif
|
||||
|
||||
void net_enable_timestamp(void)
|
||||
{
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
int deferred = atomic_xchg(&netstamp_needed_deferred, 0);
|
||||
|
||||
if (deferred) {
|
||||
while (--deferred)
|
||||
static_key_slow_dec(&netstamp_needed);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
static_key_slow_inc(&netstamp_needed);
|
||||
}
|
||||
EXPORT_SYMBOL(net_enable_timestamp);
|
||||
@@ -1720,12 +1715,12 @@ EXPORT_SYMBOL(net_enable_timestamp);
|
||||
void net_disable_timestamp(void)
|
||||
{
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
if (in_interrupt()) {
|
||||
atomic_inc(&netstamp_needed_deferred);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
/* net_disable_timestamp() can be called from non process context */
|
||||
atomic_inc(&netstamp_needed_deferred);
|
||||
schedule_work(&netstamp_work);
|
||||
#else
|
||||
static_key_slow_dec(&netstamp_needed);
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(net_disable_timestamp);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user