diff options
Diffstat (limited to 'include/linux/netpoll.h')
-rw-r--r-- | include/linux/netpoll.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index fbfdb9d8d3a7..039dd5df0ef7 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -87,9 +87,21 @@ static inline void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) #ifdef CONFIG_NETPOLL static inline bool netpoll_rx_on(struct sk_buff *skb) { - struct netpoll_info *npinfo = rcu_dereference_bh(skb->dev->npinfo); + struct netpoll_info *npinfo; + bool ret; + +#ifdef CONFIG_PREEMPT_RT_FULL + rcu_read_lock_bh(); +#endif + + npinfo = rcu_dereference_bh(skb->dev->npinfo); + ret = npinfo && (!list_empty(&npinfo->rx_np) || npinfo->rx_flags); + +#ifdef CONFIG_PREEMPT_RT_FULL + rcu_read_unlock_bh(); +#endif - return npinfo && (!list_empty(&npinfo->rx_np) || npinfo->rx_flags); + return ret; } static inline bool netpoll_rx(struct sk_buff *skb) |