sch_pie: schedule the timer after all init succeed
[linux-drm-fsl-dcu.git] / net / core / dev.c
index 4699dcfdc4ab1254f106af5e4ae1451987bff7aa..945bbd0013592634be3bc840544d8b25919ea11d 100644 (file)
@@ -2153,7 +2153,7 @@ static inline void __netif_reschedule(struct Qdisc *q)
        unsigned long flags;
 
        local_irq_save(flags);
-       sd = &__get_cpu_var(softnet_data);
+       sd = this_cpu_ptr(&softnet_data);
        q->next_sched = NULL;
        *sd->output_queue_tailp = q;
        sd->output_queue_tailp = &q->next_sched;
@@ -2675,7 +2675,7 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device
        if (skb->encapsulation)
                features &= dev->hw_enc_features;
 
-       if (netif_needs_gso(skb, features)) {
+       if (netif_needs_gso(dev, skb, features)) {
                struct sk_buff *segs;
 
                segs = skb_gso_segment(skb, features);
@@ -3233,7 +3233,7 @@ static void rps_trigger_softirq(void *data)
 static int rps_ipi_queued(struct softnet_data *sd)
 {
 #ifdef CONFIG_RPS
-       struct softnet_data *mysd = &__get_cpu_var(softnet_data);
+       struct softnet_data *mysd = this_cpu_ptr(&softnet_data);
 
        if (sd != mysd) {
                sd->rps_ipi_next = mysd->rps_ipi_list;
@@ -3260,7 +3260,7 @@ static bool skb_flow_limit(struct sk_buff *skb, unsigned int qlen)
        if (qlen < (netdev_max_backlog >> 1))
                return false;
 
-       sd = &__get_cpu_var(softnet_data);
+       sd = this_cpu_ptr(&softnet_data);
 
        rcu_read_lock();
        fl = rcu_dereference(sd->flow_limit);
@@ -3407,7 +3407,7 @@ EXPORT_SYMBOL(netif_rx_ni);
 
 static void net_tx_action(struct softirq_action *h)
 {
-       struct softnet_data *sd = &__get_cpu_var(softnet_data);
+       struct softnet_data *sd = this_cpu_ptr(&softnet_data);
 
        if (sd->completion_queue) {
                struct sk_buff *clist;
@@ -3832,7 +3832,7 @@ EXPORT_SYMBOL(netif_receive_skb);
 static void flush_backlog(void *arg)
 {
        struct net_device *dev = arg;
-       struct softnet_data *sd = &__get_cpu_var(softnet_data);
+       struct softnet_data *sd = this_cpu_ptr(&softnet_data);
        struct sk_buff *skb, *tmp;
 
        rps_lock(sd);
@@ -4157,6 +4157,10 @@ EXPORT_SYMBOL(napi_gro_receive);
 
 static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
 {
+       if (unlikely(skb->pfmemalloc)) {
+               consume_skb(skb);
+               return;
+       }
        __skb_pull(skb, skb_headlen(skb));
        /* restore the reserve we had after netdev_alloc_skb_ip_align() */
        skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN - skb_headroom(skb));
@@ -4379,7 +4383,7 @@ void __napi_schedule(struct napi_struct *n)
        unsigned long flags;
 
        local_irq_save(flags);
-       ____napi_schedule(&__get_cpu_var(softnet_data), n);
+       ____napi_schedule(this_cpu_ptr(&softnet_data), n);
        local_irq_restore(flags);
 }
 EXPORT_SYMBOL(__napi_schedule);
@@ -4500,7 +4504,7 @@ EXPORT_SYMBOL(netif_napi_del);
 
 static void net_rx_action(struct softirq_action *h)
 {
-       struct softnet_data *sd = &__get_cpu_var(softnet_data);
+       struct softnet_data *sd = this_cpu_ptr(&softnet_data);
        unsigned long time_limit = jiffies + 2;
        int budget = netdev_budget;
        void *have;