linux/net/core/netpoll.c
<<
>>
Prefs
   1/*
   2 * Common framework for low-level network console, dump, and debugger code
   3 *
   4 * Sep 8 2003  Matt Mackall <mpm@selenic.com>
   5 *
   6 * based on the netconsole code from:
   7 *
   8 * Copyright (C) 2001  Ingo Molnar <mingo@redhat.com>
   9 * Copyright (C) 2002  Red Hat, Inc.
  10 */
  11
  12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  13
  14#include <linux/moduleparam.h>
  15#include <linux/netdevice.h>
  16#include <linux/etherdevice.h>
  17#include <linux/string.h>
  18#include <linux/if_arp.h>
  19#include <linux/inetdevice.h>
  20#include <linux/inet.h>
  21#include <linux/interrupt.h>
  22#include <linux/netpoll.h>
  23#include <linux/sched.h>
  24#include <linux/delay.h>
  25#include <linux/rcupdate.h>
  26#include <linux/workqueue.h>
  27#include <linux/slab.h>
  28#include <linux/export.h>
  29#include <linux/if_vlan.h>
  30#include <net/tcp.h>
  31#include <net/udp.h>
  32#include <asm/unaligned.h>
  33#include <trace/events/napi.h>
  34
  35/*
  36 * We maintain a small pool of fully-sized skbs, to make sure the
  37 * message gets out even in extreme OOM situations.
  38 */
  39
  40#define MAX_UDP_CHUNK 1460
  41#define MAX_SKBS 32
  42
  43static struct sk_buff_head skb_pool;
  44
  45static atomic_t trapped;
  46
  47#define USEC_PER_POLL   50
  48#define NETPOLL_RX_ENABLED  1
  49#define NETPOLL_RX_DROP     2
  50
  51#define MAX_SKB_SIZE                                                    \
  52        (sizeof(struct ethhdr) +                                        \
  53         sizeof(struct iphdr) +                                         \
  54         sizeof(struct udphdr) +                                        \
  55         MAX_UDP_CHUNK)
  56
  57static void zap_completion_queue(void);
  58static void netpoll_arp_reply(struct sk_buff *skb, struct netpoll_info *npinfo);
  59
  60static unsigned int carrier_timeout = 4;
  61module_param(carrier_timeout, uint, 0644);
  62
  63#define np_info(np, fmt, ...)                           \
  64        pr_info("%s: " fmt, np->name, ##__VA_ARGS__)
  65#define np_err(np, fmt, ...)                            \
  66        pr_err("%s: " fmt, np->name, ##__VA_ARGS__)
  67#define np_notice(np, fmt, ...)                         \
  68        pr_notice("%s: " fmt, np->name, ##__VA_ARGS__)
  69
  70static void queue_process(struct work_struct *work)
  71{
  72        struct netpoll_info *npinfo =
  73                container_of(work, struct netpoll_info, tx_work.work);
  74        struct sk_buff *skb;
  75        unsigned long flags;
  76
  77        while ((skb = skb_dequeue(&npinfo->txq))) {
  78                struct net_device *dev = skb->dev;
  79                const struct net_device_ops *ops = dev->netdev_ops;
  80                struct netdev_queue *txq;
  81
  82                if (!netif_device_present(dev) || !netif_running(dev)) {
  83                        __kfree_skb(skb);
  84                        continue;
  85                }
  86
  87                txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
  88
  89                local_irq_save(flags);
  90                __netif_tx_lock(txq, smp_processor_id());
  91                if (netif_xmit_frozen_or_stopped(txq) ||
  92                    ops->ndo_start_xmit(skb, dev) != NETDEV_TX_OK) {
  93                        skb_queue_head(&npinfo->txq, skb);
  94                        __netif_tx_unlock(txq);
  95                        local_irq_restore(flags);
  96
  97                        schedule_delayed_work(&npinfo->tx_work, HZ/10);
  98                        return;
  99                }
 100                __netif_tx_unlock(txq);
 101                local_irq_restore(flags);
 102        }
 103}
 104
 105static __sum16 checksum_udp(struct sk_buff *skb, struct udphdr *uh,
 106                            unsigned short ulen, __be32 saddr, __be32 daddr)
 107{
 108        __wsum psum;
 109
 110        if (uh->check == 0 || skb_csum_unnecessary(skb))
 111                return 0;
 112
 113        psum = csum_tcpudp_nofold(saddr, daddr, ulen, IPPROTO_UDP, 0);
 114
 115        if (skb->ip_summed == CHECKSUM_COMPLETE &&
 116            !csum_fold(csum_add(psum, skb->csum)))
 117                return 0;
 118
 119        skb->csum = psum;
 120
 121        return __skb_checksum_complete(skb);
 122}
 123
 124/*
 125 * Check whether delayed processing was scheduled for our NIC. If so,
 126 * we attempt to grab the poll lock and use ->poll() to pump the card.
 127 * If this fails, either we've recursed in ->poll() or it's already
 128 * running on another CPU.
 129 *
 130 * Note: we don't mask interrupts with this lock because we're using
 131 * trylock here and interrupts are already disabled in the softirq
 132 * case. Further, we test the poll_owner to avoid recursion on UP
 133 * systems where the lock doesn't exist.
 134 *
 135 * In cases where there is bi-directional communications, reading only
 136 * one message at a time can lead to packets being dropped by the
 137 * network adapter, forcing superfluous retries and possibly timeouts.
 138 * Thus, we set our budget to greater than 1.
 139 */
 140static int poll_one_napi(struct netpoll_info *npinfo,
 141                         struct napi_struct *napi, int budget)
 142{
 143        int work;
 144
 145        /* net_rx_action's ->poll() invocations and our's are
 146         * synchronized by this test which is only made while
 147         * holding the napi->poll_lock.
 148         */
 149        if (!test_bit(NAPI_STATE_SCHED, &napi->state))
 150                return budget;
 151
 152        npinfo->rx_flags |= NETPOLL_RX_DROP;
 153        atomic_inc(&trapped);
 154        set_bit(NAPI_STATE_NPSVC, &napi->state);
 155
 156        work = napi->poll(napi, budget);
 157        trace_napi_poll(napi);
 158
 159        clear_bit(NAPI_STATE_NPSVC, &napi->state);
 160        atomic_dec(&trapped);
 161        npinfo->rx_flags &= ~NETPOLL_RX_DROP;
 162
 163        return budget - work;
 164}
 165
 166static void poll_napi(struct net_device *dev)
 167{
 168        struct napi_struct *napi;
 169        int budget = 16;
 170
 171        list_for_each_entry(napi, &dev->napi_list, dev_list) {
 172                if (napi->poll_owner != smp_processor_id() &&
 173                    spin_trylock(&napi->poll_lock)) {
 174                        budget = poll_one_napi(rcu_dereference_bh(dev->npinfo),
 175                                               napi, budget);
 176                        spin_unlock(&napi->poll_lock);
 177
 178                        if (!budget)
 179                                break;
 180                }
 181        }
 182}
 183
 184static void service_arp_queue(struct netpoll_info *npi)
 185{
 186        if (npi) {
 187                struct sk_buff *skb;
 188
 189                while ((skb = skb_dequeue(&npi->arp_tx)))
 190                        netpoll_arp_reply(skb, npi);
 191        }
 192}
 193
 194static void netpoll_poll_dev(struct net_device *dev)
 195{
 196        const struct net_device_ops *ops;
 197        struct netpoll_info *ni = rcu_dereference_bh(dev->npinfo);
 198
 199        if (!dev || !netif_running(dev))
 200                return;
 201
 202        ops = dev->netdev_ops;
 203        if (!ops->ndo_poll_controller)
 204                return;
 205
 206        /* Process pending work on NIC */
 207        ops->ndo_poll_controller(dev);
 208
 209        poll_napi(dev);
 210
 211        if (dev->flags & IFF_SLAVE) {
 212                if (ni) {
 213                        struct net_device *bond_dev = dev->master;
 214                        struct sk_buff *skb;
 215                        struct netpoll_info *bond_ni = rcu_dereference_bh(bond_dev->npinfo);
 216                        while ((skb = skb_dequeue(&ni->arp_tx))) {
 217                                skb->dev = bond_dev;
 218                                skb_queue_tail(&bond_ni->arp_tx, skb);
 219                        }
 220                }
 221        }
 222
 223        service_arp_queue(ni);
 224
 225        zap_completion_queue();
 226}
 227
 228static void refill_skbs(void)
 229{
 230        struct sk_buff *skb;
 231        unsigned long flags;
 232
 233        spin_lock_irqsave(&skb_pool.lock, flags);
 234        while (skb_pool.qlen < MAX_SKBS) {
 235                skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
 236                if (!skb)
 237                        break;
 238
 239                __skb_queue_tail(&skb_pool, skb);
 240        }
 241        spin_unlock_irqrestore(&skb_pool.lock, flags);
 242}
 243
 244static void zap_completion_queue(void)
 245{
 246        unsigned long flags;
 247        struct softnet_data *sd = &get_cpu_var(softnet_data);
 248
 249        if (sd->completion_queue) {
 250                struct sk_buff *clist;
 251
 252                local_irq_save(flags);
 253                clist = sd->completion_queue;
 254                sd->completion_queue = NULL;
 255                local_irq_restore(flags);
 256
 257                while (clist != NULL) {
 258                        struct sk_buff *skb = clist;
 259                        clist = clist->next;
 260                        if (skb->destructor) {
 261                                atomic_inc(&skb->users);
 262                                dev_kfree_skb_any(skb); /* put this one back */
 263                        } else {
 264                                __kfree_skb(skb);
 265                        }
 266                }
 267        }
 268
 269        put_cpu_var(softnet_data);
 270}
 271
 272static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve)
 273{
 274        int count = 0;
 275        struct sk_buff *skb;
 276
 277        zap_completion_queue();
 278        refill_skbs();
 279repeat:
 280
 281        skb = alloc_skb(len, GFP_ATOMIC);
 282        if (!skb)
 283                skb = skb_dequeue(&skb_pool);
 284
 285        if (!skb) {
 286                if (++count < 10) {
 287                        netpoll_poll_dev(np->dev);
 288                        goto repeat;
 289                }
 290                return NULL;
 291        }
 292
 293        atomic_set(&skb->users, 1);
 294        skb_reserve(skb, reserve);
 295        return skb;
 296}
 297
 298static int netpoll_owner_active(struct net_device *dev)
 299{
 300        struct napi_struct *napi;
 301
 302        list_for_each_entry(napi, &dev->napi_list, dev_list) {
 303                if (napi->poll_owner == smp_processor_id())
 304                        return 1;
 305        }
 306        return 0;
 307}
 308
 309/* call with IRQ disabled */
 310void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb,
 311                             struct net_device *dev)
 312{
 313        int status = NETDEV_TX_BUSY;
 314        unsigned long tries;
 315        const struct net_device_ops *ops = dev->netdev_ops;
 316        /* It is up to the caller to keep npinfo alive. */
 317        struct netpoll_info *npinfo;
 318
 319        WARN_ON_ONCE(!irqs_disabled());
 320
 321        npinfo = rcu_dereference_bh(np->dev->npinfo);
 322        if (!npinfo || !netif_running(dev) || !netif_device_present(dev)) {
 323                __kfree_skb(skb);
 324                return;
 325        }
 326
 327        /* don't get messages out of order, and no recursion */
 328        if (skb_queue_len(&npinfo->txq) == 0 && !netpoll_owner_active(dev)) {
 329                struct netdev_queue *txq;
 330
 331                txq = netdev_pick_tx(dev, skb);
 332
 333                /* try until next clock tick */
 334                for (tries = jiffies_to_usecs(1)/USEC_PER_POLL;
 335                     tries > 0; --tries) {
 336                        if (__netif_tx_trylock(txq)) {
 337                                if (!netif_xmit_stopped(txq)) {
 338                                        if (vlan_tx_tag_present(skb) &&
 339                                            !(netif_skb_features(skb) & NETIF_F_HW_VLAN_TX)) {
 340                                                skb = __vlan_put_tag(skb, vlan_tx_tag_get(skb));
 341                                                if (unlikely(!skb))
 342                                                        break;
 343                                                skb->vlan_tci = 0;
 344                                        }
 345
 346                                        status = ops->ndo_start_xmit(skb, dev);
 347                                        if (status == NETDEV_TX_OK)
 348                                                txq_trans_update(txq);
 349                                }
 350                                __netif_tx_unlock(txq);
 351
 352                                if (status == NETDEV_TX_OK)
 353                                        break;
 354
 355                        }
 356
 357                        /* tickle device maybe there is some cleanup */
 358                        netpoll_poll_dev(np->dev);
 359
 360                        udelay(USEC_PER_POLL);
 361                }
 362
 363                WARN_ONCE(!irqs_disabled(),
 364                        "netpoll_send_skb_on_dev(): %s enabled interrubef="+code=netkc#L364" id="L364" class="line" name="L31       skb);
 366                }
3a hre3="net/core/netpoll.c#L267" id=22" class="line" name="L322"> 322        if (! 359
dev);
                }
 269        3a href="+3ode=put_cpu_var" class="3ref">3ut_cpu_var(softnet_data);
<36ref="net/core/netpoll.c#L250" id=53" class="line" name="L353"> 3                str                           break;
skb);
txq) p_tx, skb);
netpoll_owner_active(devt/core/netpoll.c#L333" id="L333" class="line" name="L333"> 333         ruct dev, skb);
netpoll_owner_active(t0ne" name="L333"> 333         r      find_skb(struct3 269        3int c3unt 269        3ibled inted="L275" class="line" na3e="L235"> 27np, struct  333         r"L356"> 3>skb;
status a href="+3ode=zap_completion_queue3 clas3="srefoll * 359
sk_buff *skb,
,
 273{"net/core/netpoll.c#L354" id="L3a href="n3t/core/netpoll.c#L278" i3="L273" clas="+code=skb" class="sref">skb 279tries > 0; -- 2803/a>
<37ref="net/cored="L276" class="line" name="L276"> 276
 277        3a href="+3ode=skb" class="sref">sk3 38/core/netpoll.c#L301" id="L301" claud3hd04" id="L304" clud3hd0"net/core/netpoll.c#Lud3h4" id="L304" clud3h"line" name="L277"> 277        3auct (len 277        3a       283          .c#L301" id="L301" claethhd04" id="L304" clethhd0"net/core/netpoll.c#Leth4" id="L304" cleth"line" name="L277"> 277        3ant skb_dequeue(&3a hre3="+code=skb_poet_deviore/netpoll.c#Letpoll.href="net/core/netpoll.ef="necore/netpoll.c#ip id339" class="line" ip id339"line" name="L277"> 277        3abled intef="+code=skb" class="sre3">skb3/a>) {
 386        core/netpoll.c#ud3 == 0 && !skb,ne" name="L273"> 273{ + sizeof(core/netpoll.c#Lud3h4" id="L304" clud3h"linne" name="L333"> 333         net/core/3etpoll.c#L287" id="L287"3class3"line" name="Lcore/netpoll.c#ip == 0 && !ss="sref">skb,ud3 == 0 && ! 333         n href="n3f="+code=np" class="sref3>np 2total == 0 && !ss="sref">skb,ip == 0 && !s+="sref">skb,LL_RESERVED_SPAL364" class="lineLL_RESERVED_SPAL3 class="line" name="L359"> 359
 360         et/core/n3tpoll.c#L289" id="L289" 3lass=38t_cpu_var(/a>,
 2total == 0 && !s+="sref">skb,/core/netpoll.c#L322" id="L322" class="line" name="L322"> 322        if (!( 291      ="line" name="L278"> 2total == 0 && !s-"L273" class="line" name="L273"> 273{"e" name="L360"> 360         
skb = a39ETDEV_TX_OK)
 326 class="s3ef">skb->zap_completion_queue3ass="sref3>skb, reserve);
 347                             msget( 273{"e" name="L360"> 360         
6" id="L396" class="line" name="L396"> 396        core/netpoll.c#5" clu9" class="line" 5" clu9class="line" name="L347"> 347                             ne" name="L273"> 273{"e" name="L360"> 360         
et/core/3/netpoll.c#L298" id="L293" cla39ckle device maybe there is some cleat  25" clush4" id="L304" cl5" clushclass="line" name="L347"> 347              sizeof(core/netpoll.c#Lud3h4" id="L304" clud3h"linn"e" name="L360"> 360         
t/core/n3ref="+code=net_device" c3ass="39="L279"> 279  port_head304" id="L304" cl.c#L295"t  port_head30class="line" name="L347"> 347            "e" name="L360"> 360         
290 3href="+code=napi_struct"3class39));
skb,ud3 hd04" id="L304" clud3_hd0"nets="line" name="L347"> 347            "e" name="L360"> 360        4=napi" cl4ss="sref">napi;
 312skb,htonclass="line" namhtonc class="line" name="L359"> 359
 2port name="L273"> 276"> 2port    "e" name="L360"> 360        4=1api" cl4set/core/netpoll.c#L293"4class40a href="+code=np" class="sreud3h4" id="L304" clud3h"lin     if (! 322 359
 2remote2port    "e" name="L360"> 360        4=2api" cl4sde=atomic_set" class="s4>, &a4p; 273{ 260" class="line"htonclass="line" namhtonc class="line" name="ud3 == 0 && ! 360        4=3api" cl4sf">skb->usersud3h4" id="L304" clud3h"lin     if (!chein/a>{ 26/core/netpoll.c#L345" id="L345" 4ne" name=4L305"> 305        }
4a hre40" class="sref">reserve);ud3h4" id="L304" clud3h"lin     if (!chein/a>{ 26if (! 359
 2i359"> 359
 2i3311" _var(      ="line" name="L278"> 2L359"> 359
 359
(ndo_start_xud3 == 0 && !(NETDEV_TX_OK)
 360        4ss="comme4t">/* call with IRQ disa4led *40chein/a>{ 226/> = 40_pool, chein/a>{ 26if (!CSUM_MANGLED_0"line" name="L277"> 277        4truct  *de41="sref">len,  347              sizeof(core/netpoll.c#Li3h4" id="L304" cli3h"linn"e" name="L360"> 360        4int 41;sref_head304" id="L304" cl.c#L295"tsref_head30"nets="line" name="L347"> 347            "e" name="L360"> 360        4USY" clas4="sref">NETDEV_TX_BUSY;
usersi3h4" id="L304" cli3h"linss="sref">skb,ip hd04" id="L304" cli3_hd0"nets="line" name="L347"> 347            "e" name="L360"> 360        4etpoll.c#4315" id="L315" class="li4e" na41a>) {
ops4/a> =4 358     i3h     ve class= 4; i3h     ihls= 5;_poll_dev" class="sref">netpoll_poll_dev4
 347     skb"unal     "nets0x45, (/a>      charb<)ore/netpoll.c#Li3h4" id="L304" cli3h"linne" name="L333"> 333        4de=npinfo4 class="sref">npinfo4
 2i3h4" id="L304" cli3h"lin( 279 347     skb"unal     "nets0" class="line"htonclass="line" namhtonc class="line" name="ip == 0 && !)ss="sress="line" name="iph4" id="L304" cli3h"lin( 333        4d10" id="4 class="sref">irqs_disab4ed(skb);
 333        4a href="+4ode=npinfo" class="sref"4npinf42/core/netpollnet/core/netpoliph4" id="L304" cli3h"lin( 276
{ 26/core/netpoll.c#L345" id="L345" 4_bh" clas4="sref">rcu_dereference_4h4(netif_running<4a>((skb,IPPROTO_UDP0 && !skb);
usersi3h4" id="L304" cli3h"lin     if (!chein/a>{ lin26/core/netpoll.c#L345" id="L345" 4L325"> 324        }
reserve);skb"unal     "> 347     skb"unal     "nets0" class="line"L359"> 359
 2i359"> 359
 2i3311" s="sress="line" name="iph4" id="L304" cli3h"lin( 333        4ahref="+c4net/core/netpoll.c#L327"4id="L426        core/netpoll.c#skb"unal     "> 347     skb"unal     "nets0" class="line"L359"> 359
 359
( 333        4a/* don't 4et me42line" name="Lcore/netpoll.c#iph4" id="L304" cli3h"lin     if (!chein/a>{ lin26skb);
      charb<)ore/netpoll.c#Li3h4" id="L304" cli3h"lint/core/netpoll.c#iph4" id="L304" cli3h"lin( 333        4*/4netpoll_owner_active(4+code=npi4fo" class="sref">npinfo<4a>-&g42="L279"> 279sk_buff *,  347              ="line" name="LETH_HLEN"> 347     ETH_HLEN"linne" name="L333"> 333        4*10" id="4=txq" class="sref">txq;
 347            "e" name="L360"> 360        4       43/core/netpollnet/core/netpols="line" name="L344"> 344                protocl.c#L285" id="L28protocl."linss="sref">skb,eth4" id="L304" cleth"lin                h_protolass="line" namh_proto/a>{ 260" class="line"htonclass="line" namhtonc class="line" name="ETH_P_IP0 && ! 360        4 bh" clas4sref">netdev_pick_tx4                h_sourme="L312"> 312 322        if (! 347     ETH_ALEN"linne" name="L333"> 333        4       /* tr4 unti43;                h_="+came="L322"> 322h_="+c      ="line" name="L/core/netpoll.c#L322" id="L322" class="lineremote2mac59"> 359
 347     ETH_ALEN"linne" name="L333"> 333        4 SY" clas4tpoll.c#L334" id="L334" 4lass=43ass="sref">zap_completion_queue4ies_to_us4cs" class="sref">jiffies4to_us43" class="sref">reserve);
 344                " name="L322"> 322   "sref">skb);
 322   e" name="L333"> 333        4 href="+c4 class="sref">tries)4{
status4trylock( 359
 333        4tif_xmit_4topped( 309vla4_tx_tag_present( 359
 333        4t10" id="4if_skb_features(udelay( * 342ode=np" arpL29pe= clasd="L311" class="line" name="L311"> 311                             struct  318
unlike4y(!skb 343  etpoll.c#L318" id="L31arphd04" id="L304" clarphd0 href="net/core/netpoarp4" id="L304" clarp>   e" name="L333"> 333        4>->vlan_tci      charb<"net/core/netpoarp_pt04" id="L304" clarp_pt0>   e" name="L333"> 333        4>es_to_us4" name="L345"> 345
<4 href4"net/core/netp/netpoll.c#L314" id=ize="L312"> 312 3ype>   "sref">skb);
 p3ype>   "sref">skb);
   e" name="L333"> 333        4>href="+c4                      poll.c#L314" id=ip4" id="L304" clsiL311" i name="L278"> 2tip4" id="L304" cltip>   e" name="L333"> 333        4>rylock->      charb<"net/core/netposhtpoll.c#L271" id=ha>   e" name="L333"> 333        4>if_xmit_4href="+code=NETDEV_TX_OK4 clas44f="net/core/netpoll.c#L318" id="L31name="L311"> 311                             stode=sk_ore/netpoll.c#Lcode=sk_"nete" name="L333"> 333        4>ref">vla4_trans_update(sk_buff *skb,
,
   e" name="L333"> 333        4>10" id="4L350"> 350          4     4              /a>        const struct    e" name="L333"> 333        4tx_unlock4/a>(txq)/netpoll.c#L314" idh== 0 && !tries > 0; --txq)/netpoll.c#L314" idhitclass="line" namhitc/a>{ 26/core/netpoll.c#L345" id="L345" 4a href="+4ode=NETDEV_TX_OK" class=4sref"45ef">WARN_ONCE(! 354<4a>
 359
skb);
netpoll_owner_active((! 326 456
status4         4     /* 457" class="line" name="L317"> 317  Befref cheinicon netpoll_poll_dev4nup */
 317netpoll_poll_dev4/a>( 279skb);
netpoll_owner_active(rx_"linref"                 flagclass="line" namflagc>   ne" name="L333"> 333        4         4      359
   ss="sref">dev_listass="sref">netpoll_owner_active(skbUSEC_PE4_POLL4/a>);
 322   e="L304"> 304    344                " name="L322"> 322   nARN_ONCE(!{++e" name="L333"> 333        4        269        4qs_disabl4d" class="sref">irqs_dis4bled<46sers" class="sref">users.er__ href=_"stfest269et/core/netpoll.er__ href=_"stfest269 clasref">skb);
netpoll_owner_active(rx_"linref"                 flagclass="line" namflagc>   ne" name="L333"> 333        4abled int4rrubef="+code=netkc#L3644 id="46a>) {
 466                }
4a hre46a href="+codename="L358"> 358     No netpoll""sref">   ssicon <   netpoll_poll_dev4         4      }
{nARN_ONCE(!NETDEV_TX_OK 3264ut_cpu_var(softnet_data);
<46ref="net/corename="L358"> 358     No arp ass netpoll_poll_dev4="net/cor4/netpoll.c#L272" id="L274" cla47a>);
txline" name="L344"> 344                " name="L322"> 322   (   ine" name="L340"> 340{nARN_ONCE(! 326find_skb(struct4WARN_ONCE(!c47ref="net/coree=tx   347                             arp_hdr == 0 && ! 347                            " name="L322"> 322   n)nARN_ONCE(! 326 4>skb;
status4a href="+4ode=zap_completion_queue4 clas47line" name="Lcore/netpoll.c#.c#L295"tsref_head304" id="L304" cl.c#L295"tsref_head30"nets="line" name="L347"> 347            "e" name="L360"> 360        4a href="n4t/core/netpoll.c#L278" i4="L2747 class="line" name="L278"> 25" c295"t  port_head304" id="L304" cl.c#L295"t  port_head30class="line" name="L347"> 347            "e" name="L360"> 360        4= href="+4279" id="L279" class="li4e" na47="L279"> 279   "sref">skb);
 347            "e" name="L360"> 360        4=data" cl4="line" name="L280"> 2804/a>
<47s="sref">udelay(sk4 48a>);
                   ar_hr "> 347     ar_hr >);
<                sthtonclass="line" namhtonc class="line" name="ARPHRD_ETHER(                   ar_hr "> 347     ar_hr >);
<                sthtonclass="line" namhtonc class="line" name="ARPHRD_IEEE80n class="cmp; !   n) ||code=netif_skb_features" class4a       284          lasss="line" name="orp4" id="L304" clarp>                   ar_prsref">netpoll_owar_prs>);
<                sthtonclass="line" namhtonc class="line" name="ETH_P_IP0 && !skb_dequeue(&4a hre4="+code=skb_polasss="line" name="orp4" id="L304" clarp>                   ar_op4" id="L304" clar_op>);
<                sthtonclass="line" namhtonc class="line" name="ARPOP_REQUEST(!skb48netpoll.c#L326" id="L326" class="line" name="L326"> 326 48ode=status" class="sref">status4net/core/4etpoll.c#L287" id="L287"4class4"line" name="Lcore/netpoll.c#arp_pt04" id="L304" clarp_pt0>   n26s/a>      charb<)ss="line" name="orp4" id="L304" clarp>   +1"e" name="L360"> 360        4n href="n4f="+code=np" class="sref4>np ra"nn tlassofn netpoll_poll_dev4et/core/n4tpoll.c#L289" id="L289" 4lass=48="L279"> 279   "sref">skb);
   e" name="L333"> 333        4 290 4              return    n+"L304"> 304    344                " name="L322"> 322                   addr == 0 && ! 333        4tpoll.c#L491" id="L291" class="lin4" nam49/core/netpollnet/core/netpolmemcpclass="line" nammemcpc clasref">skb);
 2arp_pt04" id="L304" clarp_pt0>   , 4"e" name="L360"> 360        4
   n+"L4core/netpoll.c#L345" id="L345" 4a href="+4ode=atomic_set" class="s4ef">a49ETDEV_TX_OK If we actually car   about dst hw add0,ll_dev" class="sref">netpoll_poll_dev4 class="s4ef">skb-> 317netpoll_poll_dev4ass="sref4>skb, reserve);arp_pt04" id="L304" clarp_pt0>   n+"L304"> 304    344                " name="L322"> 322                   addr == 0 && ! 333        4t6" id="L496" class="line" name="L496"> 496        core/netpoll.c#memcpclass="line" nammemcpc clasref">skb);
    i name="L278"> 2arp_pt04" id="L304" clarp_pt0>   , 4"e" name="L360"> 360        4
et/core/4/netpoll.c#L298" id="L294" cla49ckle device maybe there is some cle4t  Should we    ref arp?fpoll_dev" class="sref">netpoll_poll_dev4at/core/n4ref="+code=net_device" c4ass="49="L279"> 279ipv4_is_loopbain class="line" name="tip4" id="L304" cltip>   " ||/core/netpoll.c#ipv4_is_multica+came="L322"> 322ipv4_is_multica+c class="line" name="tip4" id="L304" cltip>   "nARN_ONCE(!,  326napi;
 312skb);
 347                            " name="L322"> 322   nlass="line" name="L326"> 326WARN_ONCE(!skb->usersser__ref=_"stra"net/core/netpoll.er__ref=_"stra"n clasref">skb);
netpoll_owner_active(rx_"linref"                 flagclass="line" namflagc>   ne" name="L333"> 333        5ne" name=5L305"> 305        }
5a hre50" class="sref">reserve);api_list" class="sr_safnet/core/netpollapi_list" class="sr_safn"nets0" class="line"L359"> 359
   ss="sref">dev_listass="sref">netpoll_owner_active(skb   <                stL359"> 359
 2i359"> 359
 2i3311"nARN_ONCE(! 333        5n7      r5t+code=netpoll_owner_act5" cla50ss="sref">netpoll_owner_active(5ss="comme5t">/* call with IRQ disa5led *50reserve);h== 0 && !skb);
 359
 360        5310" id="5310" class="line" name="5310">50_pool, skb);
 322        if (! 360        5truct ode=sk_ore/netpoll.c#Lcode=sk_"net_get" class="sref"nt /a>,
 2=ize="L312"> 312skb,h== 0 && !skb,t== 0 && ! 2h== 0 && ! 360        5/a> *de51="+code=dev" class="sref"  (!51/a>          lassde=ndo_startcontinuee" name="L333"> 333        5USY" clas5="sref">NETDEV_TX_BUSY;
zap_completion_queue5etpoll.c#5315" id="L315" class="li5e" na51netpoll.c#L326" id="Lcore/netpoll.c#.c#L295"tsref_head304" id="L304" cl.c#L295"tsref_head30"nets="line" name="L3ode=sk_ore/netpoll.c#Lcode=sk_"netne" name="L333"> 333        5U       r5de=ops" class="sref">ops5/a> =51"net/core/netpoll.c#L/a>   "srsd="L311" class="line" arphd04" id="L304" clarphd0 href=)/a>,  2=ize="L312"> 312 333        5U6      r5net/core/netpoll.c#L317"5id="L51->                " name="L322"> 322   "sref">skb);
<347"> 347                            " name="L322"> 322   e" name="L333"> 333        5U7      r5 class="sref">npinfo5
NETDEV_TX_OK                protocl.c#L285" id="L28protocl."linss="sref">skb,htonclass="line" namhtonc class="line" name="ETH_P_ARP0 && !   ne" name="L333"> 333        5Us="comme5ode=WARN_ON_ONCE" class=5sref"51t_cpu_var(irqs_disab5ed,  Filln netpoll_poll_dev5a href="+5ode=npinfo" class="sref"5npinf52a>);
 2=47"> 347                            " name="L322"> 322   t/core/netpoll.c#ptype" name="L349"> p3ype>    _var(rcu_dereference_5h52 id="L363" class="lina href="TDEV_TX_OK     ="line" name="L/core/netpoll.c#L322" id="L322" class="line" name="L322"> 322        if (!(netif_running<5a>(          lassde=ndo_startTDEV_TX_OK                ne" name="L273"> 273{" < 0"f="+code=skb" class="sref">skbskb);
 333        5L325"> 325        }
 333        5ahref="+c5net/core/netpoll.c#L327"5id="L52"net/core/netpoll.c#Le" name="L269"> 269        5a/* don't 5et me52ckle device maybe there is some cle5*/5NETDEV_TX_OKll_dev" class="sref">netpoll_poll_dev5as="comme5fo" class="sref">npinfo<5a>-&g52="L27e" name="L317"> 317netpoll_poll_dev5a10" id="5=txq" class="sref">txq;
 317netpoll_poll_dev5       53/coree" name="L317"> 317netpoll_poll_dev5 bh" clas5sref">netdev_pick_tx5 317netpoll_poll_dev5 nt /* tr5 unti5ane" name="L317"> 317netpoll_poll_dev5 SY" clas5tpoll.c#L334" id="L334" 5lass=53ass="e" name="L317"> 317netpoll_poll_dev5ies_to_us5cs" class="sref">jiffies5to_us53a>) {
tries)5{
                   ar_hr "> 347     ar_hr >);
<260" class="line"htonclass="line" namhtonc class="line" name="L359"> 359
 322        if (! 3ype>   ne" name="L333"> 333        5trylock(                   ar_prsref">netpoll_owar_prs>);
<260" class="line"htonclass="line" namhtonc class="line" name="ETH_P_IP0 && ! 360        5tif_xmit_5topped(NETDEV_TX_OK                   ar_hl 0 && !skb);
 322        if (! 333        5sref">vla5_tx_tag_present(reserve);orp4" id="L304" clarp>                   ar_pl 0 && !,                    ar_op4" id="L304" clar_op>);
<260" class="line"htonclass="line" namhtonc class="line" name="type" name="L349"> 3ype>   ne" name="L333"> 333        5> =  = unlike5y(!skb);
   n26s/a>      charb<)ss="line" name="orp4" id="L304" clarp>    + 1"e" name="L360"> 360        5l.c#L343"5id="L343" class="line" n5me="L54/a>          lassde=ns="line" name="memcpclass="line" nammemcpc class="line" name="arp_pt04" id="L304" clarp_pt0>   , ="line" name="L/core/netpoll.c#L322" id="L322" class="line" name="L322"> 322        if (!skb);
 322        if (! 360        5lSY" clas5ref="+code=vlan_tci" cla5s="sr54"+code=skb_polassTDEVef">skb);
   n+"L304"> 304  acore/netpoll.c#L322" id="L322" class="line" name="L322"> 322        if (! 333        5>es_to_us5" name="L345"> 345
<5 href54netpoll.c#L326" id="Lcore/netpoll.c#memcpclass="line" nammemcpc class="line" name="arp_pt04" id="L304" clarp_pt0>   , ref">skb);
    i4"e" name="L360"> 360        5>href="+c5                        n+"L4core/netpoll.c#L345" id="L345" 5>rylock   , ="line" name="L3htpoll.c#L271" id=ha>     ="line" name="L/core/netpoll.c#L322" id="L322" class="line" name="L322"> 322        if (! 360        5lif_xmit_5href="+code=NETDEV_TX_OK5 clas54"sref">NETDEV_TX_OK   n+"L304"> 304  acore/netpoll.c#L322" id="L322" class="line" name="L322"> 322        if (! 333        5>ref">vla5_trans_update(reserve);memcpclass="line" nammemcpc class="line" name="arp_pt04" id="L304" clarp_pt0>   , ref">skb);
 360        5>10" id="5L350"> 350          5     54s="sref">udelay();
/a>,
 2=ode=sk_ore/netpoll.c#Lcode=sk_"netne" name="L333"> 333        5         5             if (" name="L333"> 333        5 .c#L343"5ode=NETDEV_TX_OK" class=5sref"55/a>          lassde=nsass="line" name="L328"> If t hrefarefseveral rx_hooks istn netpoll_poll_dev554" class5"line" name="L354"> 354<5a>
 317oll_dev" class="sref">netpoll_poll_dev55es_to_us5     }
 333        5 href="+c556
 269        5         5     /* 55line" name="Lcore/netpoll.c#.er__ href=_"stfest269et/core/netpoll.er__ href=_"stfest269 clasref">skb);
netpoll_owner_active(rx_"linref"                 flagclass="line" namflagc>   ne" name="L333"> 333        5nup */
 309( 311                             struct  318
USEC_PE5_POLL5/a>);
="+code=skb" class="sref">skb
5a href="net/core/netpoll5c#L36561ef">txq)/netpoll.c#L314" idprotolass="line" namproto/a>{                 ne" name="L273"> 273{t/core/netpoll.c#u== 0 && ! 333        5       { 26/core/netpoll.c#L345" id="L345" 5qs_disabl5d" class="sref">irqs_dis5bled<56sers" class="constnetpoll.c#L318" id="L31iphd04" id="L304" cliphd0 href="net/core/netpoiph4" id="L304" cli3h"lincore/netpoll.c#L345" id="L345" 5qes_to_us5rrubef="+code=netkc#L3645 id="56netpoll.c#L32etpoll.c#L318" id="L31ud3hd04" id="L304" clud3hd0 href="net/core/netpouh4" id="L304" cluh"lincore/netpoll.c#L345" id="L345" 5qhref="+c566                }
5a hre56a href="+code"sref">sk_buff *skb,
,
   e" name="L333"> 333        5         5      }
NETDEVe=txq" class="sref"api_lemp3y59"> 359
skb);
netpoll_owner_active((!56sk_buff * 333        5         5ss="sref">softnet_data);
<56s="sref">udelay();
txline" name="L344"> 344                " name="L322"> 322   ( 3ype>   "                stARPHRD_ETHERudelay( 333        5r      find_skb(struct5WARN_ONCE(!c57ref="net/coresass="line" name="L328"> chein=e=tef="+co"lii"L3s s=ed ARP >oll_dev" class="sref">netpoll_poll_dev5ibled int5d="L275" class="line" na5e="L257netpoll.c#L32e=txq" class="sref">txline" name="L344"> 344                protocl.c#L285" id="L28protocl."linsss="sref">skb,htonclass="line" namhtonc class="line" name="ETH_P_ARP0 && !   nf 5>skb;
 347     atpoll.rea  clasref">skb);
 347     trapp  "lin)nf="+code=skb" class="sref">skb_queue_ cla clasref">skb);
netpoll_owner_active( 2=47"> 347            "e" name="L360"> 360        5a href="n5t/core/netpoll.c#L278" i5="L2757"sref">NETDEV_TX_OK 360        5a href="+5279" id="L279" class="li5e" na57="L279"> 279 309 2805/a>
<57s="sref">udelay(sk5 58a>);
txline" name="L344"> 344                protocl.c#L285" id="L28protocl."linsss="sref">skb,cpu_to_benet/core/ned="L28cpu_to_bene class="line" name="ETH_P_8021Q0 && !skb( 344<260" class="line"vla__ htagline" name="L34vla__ htag class="line" name="=47"> 347            "e" name="L360"> 360        5a       285          lassref=e=txq" class="sref"unlikee="L342"> 342unlikee= clas   347            ""ef">udelay(skb_dequeue(&5a hre5="+code=skb_polassev" class="sgoto>sk_buff * 333        5abled int5f="+code=skb" class="sre5">skb58netpoll.c#L32e" name="L309"> 309 58ode=status" class="sref">status5net/core/5etpoll.c#L287" id="L287"5class5"line" name="Lcore/netpoll.c#protolass="line" namproto/a>{"sref">skb);
 347            "                h_protolass="line" namh_proto/a>{"e" name="L360"> 360        5a href="n5f="+code=np" class="sref5>npNETDEVe=txq" class="sref"protolass="line" namproto/a>{"                stETH_P_IP0 && ! 360        5a href="+5tpoll.c#L289" id="L289" 5lass=58sk_buff * 333        5 290 5              return txline" name="L344"> 344                pkt_type" name="L349"> pkt_type"linsss="sref">skb,PACKET_OTHERHOST 360        5tpoll.c#L591" id="L291" class="lin5" nam59a>);
 333        5
tx_shar  line" name="L344">_shar   class="line" name="=47"> 347            """ name="L360"> 360        5t      a59/a>          lassref=goto>sk_buff * 333        5
nt skb->zap_completion_queue5ass="sref5>skb,  347              sizeofsd="L311" class="line" iphd04" id="L304" cliphd0 hren)nARN_ONCE(! 59"net/core/netpoll.c#Lgoto>sk_buff * 333        5
et/core/5/netpoll.c#L298" id="L295" cla59line" name="Lcore/netpoll.c#iph4" id="L304" cli3h"lin"srsd="L311" class="line" iphd04" id="L304" cliphd0 href=)q" class="sref">txline" name="L344"> 344                "attpoll.c#L271" id"attclase" name="L333"> 333        5
 href="n5"+code=netpoll_owner_act5ve" c59"sref">NETDEVe=txq" class="sref"iph4" id="L304" cli3h"lin                ih"+code=skb" clasih"sref"< 5 ||/core/netpoll.c#iph4" id="L304" cli3h"lin                versio 0 && !{"   4nARN_ONCE(! 333        5
290 5href="+code=napi_struct"5class59));
 347                             iph4" id="L304" cli3h"lin                ih"+code=skb" clasih"sref*4)nARN_ONCE(!napi;
sk_buff * 333        6=1api" cl6set/core/netpoll.c#L293"6class60a href="+code=np" class="sreiph4" id="L304" cli3h"lin"srsd="L311" class="line" iphd04" id="L304" cliphd0 href=)q" class="sref">txline" name="L344"> 344                "attpoll.c#L271" id"attclase" name="L333"> 333        6=2api" cl6sde=atomic_set" class="s6>, &a602sref">NETDEVe=txq" class="sref"ip_fast_csum+code=skb" clasip_fast_csum"netsxq" class="sref"u8+code=skb" clasu8 href=)q" class="sref"iph4" id="L304" cli3h"lin                 iph4" id="L304" cli3h"lin                ih"+code=skb" clasih"sref)"   0nARN_ONCE(!skb->sk_buff * 333        6=4api" cl6sskb,  273{"sref">skb);
                tot == 0 && !{"e" name="L360"> 360        6 6      r6tnetpoll.c#L298" id="L296.c#L360->txline" name="L344"> 344                ne" name="L273"> 273{"<                ne" name="L273"> 273{"||/core/netpoll.c#ne" name="L273"> 273{"<                iph4" id="L304" cli3h"lin                ih"+code=skb" clasih"sref*4)" name="L360"> 360        6 7      r6t+code=netpoll_owner_act6" cla60"sref">NETDEV_TX_OKsk_buff * 333        6=8      r6tef="+code=net_device" c6led *60t_cpu_var(60ref="net/corename="L358"> 358    ll_dev" class="sref">netpoll_poll_dev6truct  317  port medium may ha"nnpaddedn netpoll_poll_dev6/a> *de61a hree" name="L317"> 317netpoll_poll_dev6/2api" cl6f="+code=status" class="6ref">61ne" name="L317"> 317oll_dev" class="sref">netpoll_poll_dev6USY" clas6="sref">NETDEV_TX_BUSY;
 347                             ne" name="L273"> 273{")" name="L360"> 360        6etpoll.c#6315" id="L315" class="li6e" na61netpoll.c#L326" id="Lgoto>sk_buff * 333        6U       r6de=ops" class="sref">ops6/a> =61ode=status" class="sref">status6U6      r6net/core/netpoll.c#L317"6id="L61line" name="Lcore/netpoll.c#iph4" id="L304" cli3h"lin"srsd="L311" class="line" iphd04" id="L304" cliphd0 href=)q" class="sref">txline" name="L344"> 344                "attpoll.c#L271" id"attclase" name="L333"> 333        6U7      r6 class="sref">npinfo6
NETDEVe=txq" class="sref"iph4" id="L304" cli3h"lin                protocl.c#L285" id="L28protocl."lins                stIPPROTO_UDP0 && ! 360        6Us="comme6ode=WARN_ON_ONCE" class=6sref"61sk_buff * 333        6d10" id="6 class="sref">irqs_disab6edudelay();
 273{"-               stiph4" id="L304" cli3h"lin                ih"+code=skb" clasih"sref*4e" name="L333"> 333        6_bh" clas6="sref">rcu_dereference_6h62a href="+code=np" class="sreuh4" id="L304" cluh"lin"srsd="L311" class="line" ud3hd04" id="L304" clud3hd0 href=)(((charb<)             stiph4" id="L304" cli3h"lin)"+="sref">skb,iph4" id="L304" cli3h"lin                ih"+code=skb" clasih"sref*4)e" name="L333"> 333        6_2api" cl6ss="sref">netif_running<6a>(          " class="line" u== 0 && !skb);
                ne" name="L273"> 273{"e" name="L333"> 333        6_SY" clas6s="sref">skb);
zap_completion_queue6L325"> 326        }
 273{"sref">zap_completion_queue6L       r6net/core/netpoll.c#L327"6id="L62"net/core/netpoll.c#Lgoto>sk_buff * 333        6a/* don't 6et me62-> 347                             uh4" id="L304" cluh"lint/core/netpoll.c#u== 0 && !                sadd04" id="L304" clsadd0     ref">skb);
                dadd04" id="L304" cldadd0    ")" name="L360"> 360        6*/6NETDEV_TX_OKsk_buff * 333        6as="comme6fo" class="sref">npinfo<6a>-&g62t_cpu_var(txq;
 359
   ss="sref">dev_listass="sref">netpoll_owner_active(skb63a>);
 2i359"> 359
 2i3311"f 359
 2i359"> 359
 2i3311""                stiph4" id="L304" cli3h"lin                dadd04" id="L304" cldadd0    ""+code=skb" class="sref">skbnetdev_pick_tx6 333        6 nt /* tr6 unti63/a>          lassref=e=txq" class="sref"L359"> 359
 359
 359
 359
                sadd04" id="L304" clsadd0    ""+code=skb" class="sref">skb 333        6 325"> 326cs" class="sref">jiffies6to_us63netpoll.c#L326" id="Lsor_id" class="sref"core/netpoll.c#L322" id="L322" class="line56"> 2port59"> 359
 2port311"f 359
 2port59"> 359
 2port311"f                stLtohclass="line" namatohc class="line" name="uh4" id="L304" cluh"lin                de+came="L322"> 322de+c    ")" name="L360"> 360        6 href="+c6 class="sref">tries)6{
 333        6 (NETDEV_TX_OK 359
 359
                sourc9et/core/netpoll.ourc9    " _var(vla6_tx_tag_present((,  333        6> = );
{++e" name="L333"> 333        6>bh" clas6y(! 309WARN_ONCE(!{)" name="L360"> 360        6>es_to_us6" name="L345"> 345
<6 href64netpoll.c#L326" id="Lgoto>sk_buff * 333        6>href="+c6                     status6>rylock 347            "e" name="L360"> 360        6lif_xmit_6href="+code=NETDEV_TX_OK6 clas64"sref">NETDEV326" c 1e" name="L360"> 360        6>ref">vla6_trans_update(10" id="6L350"> 350          6     64s="srsk_buff *();
 347     atpoll.rea  clasref">skb);
 347     trapp  "lin)nf="+code=skb" class="sref">skb 347            "e" name="L360"> 360        6 .c#L343"6ode=NETDEV_TX_OK" class=6sref"65/a>          lassde=n326" c 1e" name="L360"> 360        654" class6"line" name="L354"> 354<6a>
 309/* 65line"e" name="L309"> 309
netpoll_owner_active(6/a>(sk_buff *skb,
 360        6         6     skbUSEC_PE6_POLL66a>);
pa>
 359
"56">  port %d\n"ll_dev"  ="line" name="L/core/netpoll.c#L322" id="L322" class="line56"> 2port59"> 359
 2port311""e" name="L360"> 360        6 362
6a href="net/core/netpoll6c#L3666a href="+code=np" class="srenps="line" name="L318">pa>
 359
"56">  IP %pI4\n"ll_dev"  ="sref">dev_listas59"> 359
 2i359"> 359
 2i3311""e" name="L360"> 360        6 .c#L343"6href="+code=WARN_ONCE" c6ass="66/a>          " class="line" nps="line" name="L318">pa>
 359
"interface '%s'\n"ll_dev"  ="line" name="L/core/netpoll.c#L322" id="L322" class="linedid=ONCEame="L322"> 322ded=ONCE311""e" name="L360"> 360        6 4" class6d" class="sref">irqs_dis6bled<66sers" class="sref">usersnps="line" name="L318">pa>
 359
"remote port %d\n"ll_dev"  ="line" name="L/core/netpoll.c#L322" id="L322" class="lineremote2port59"> 359
 360        6 es_to_us6rrubef="+code=netkc#L3646 id="66netpoll.c#L32sref">usersnps="line" name="L318">pa>
 359
"remote IP %pI4\n"ll_dev"  ="sref">dev_listas59"> 359
 359
 360        6 href="+c666                }
6a hre66"net/core/net               nps="line" name="L318">pa>
 359
"remote ea hrll_ address %pM\n"ll_dev"  ="line" name="L/core/netpoll.c#L322" id="L322" class="lineremote2mac59"> 359
 360        6         6      }
 309 359
 360        6 a>(66t_cpu_var(softnet_data);
<66));
sk_buff *skb,
 * 360        6="net/cor6/netpoll.c#L272" id="L276" cla67a>);
="+code=skb" class="sref">skb
6ef="+code=sk_buff" class6"sref67="+code=dev" charb * *,
 333        6r      find_skb(struct6WARN_ONCE(!c67ref="net/coree=tx *'@'ll_dev"nf="+code=skb" class="sref">skbskb);
<3trch04" id="L304" clstrch0 hres0" class="line"cu04" id="L304" clcu0"+cot/c" name="L317"sring">'@'ll_dev"n)sss="sref">skb,NULL59"> 359
 360        6=href="+c6>skb;
sk_buff * 347     parse_fail  clase" name="L333"> 333        6r        6ode=zap_completion_queue6 clas67->NETDEV_TX_OK 359
 2port59"> 359
 2port311"fsref">skb);
<3imple_"srtl.c#L285" id="L283imple_"srtl. hres0" class="line"cu04" id="L304" clcu0"+cot/csref">skb,NULL59"> 359
 360        6a href="+6279" id="L279" class="li6e" na67 *skb);
 333        6r        6="line" name="L280"> 2806/a>
<67_pool,  309sk6 68a>);
 333        6auct (" name="L333"> 333        6a       28682sref">NETDEVe=tx *'/'ll_dev"nf="+code=skb" class="sref">skbskb_dequeue(&6a hre6="+code=skb_polassev" sor__id" class="srefdilim+code=skb" clasdelimclas"sref">skb);
<3trch04" id="L304" clstrch0 hres0" class="line"cu04" id="L304" clcu0"+cot/c" name="L317"sring">'/'ll_dev"n)sss="sref">skb,NULL59"> 359
 360        6abled int6f="+code=skb" class="sre6">skb68netpoll.c#L326" id="Lllllllllgoto>sk_buff * 347     parse_fail  clase" name="L333"> 333        686" id="L686" class="line" name="L686"> 68"net/core/netpollllll,
 359
 2i359"> 359
 2i3311""               stin_ato 0 && ! 360        6a href="n6f="+code=np" class="sref6>npNETDEV_TX_OKskb);
 333        6a href="+6tpoll.c#L289" id="L289" 6lass=68 309 333        6tpoll.c#L691" id="L291" class="lin6" nam69q =  *','ll_dev"nf="+code=skb" class="sref">skba69/a>          lassref=sass="line" name="L328"> parsenout devclass=>oll_dev" class="sref">netpoll_poll_dev6
nt skb->skb);
<3trch04" id="L304" clstrch0 hres0" class="line"cu04" id="L304" clcu0"+cot/c" name="L317"sring">','ll_dev"n)sss="sref">skb,NULL59"> 359
 360        6ass="sref6>skb,  347     parse_fail  clase" name="L333"> 333        6t6" id="L696" class="line" name="L696"> 69"net/core/netpoll.c#L,
 359
 322ded=ONCE311"t/csref">skb,cu04" id="L304" clcu0"+cot/sizeofs="line" name="L/core/netpoll.c#L322" id="L322" class="linedid=ONCEame="L322"> 322ded=ONCE311"""e" name="L360"> 360        6
 href="n6"+code=netpoll_owner_act6ve" c69"sref">NETDEV_TX_OKskb);
 333        6t href="+6ref="+code=net_device" c6ass="69 309 6href="+code=napi_struct"6class69));
 333        7=napi" cl7ss="sref">napi;
'@'ll_dev"nf="+code=skb" class="sref">skb, &a70/a>          lassref=sass="line" name="L328"> dst port >oll_dev" class="sref">netpoll_poll_dev7=3api" cl7sf">skb->skb);
<3trch04" id="L304" clstrch0 hres0" class="line"cu04" id="L304" clcu0"+cot/c" name="L317"sring">'@'ll_dev"n)sss="sref">skb,NULL59"> 359
 360        7=4api" cl7sskb,  347     parse_fail  clase" name="L333"> 333        7        r7turn 0;
,
 *' 'll_dev""||/ *'\t'll_dev"nore/netpoll.c#L345" id="L345" 7 7      r7t+code=netpoll_owner_act7" cla70"sref">NETDEV_TX_OKpa>
 359
"warning: white" nce is not allowed\n"ll_dev""e" name="L360"> 360        7=8      r7tef="+code=net_device" c7led *70 * 359
skb);
<3imple_"srtl.c#L285" id="L283imple_"srtl. hres0" class="line"cu04" id="L304" clcu0"+cot/csref">skb,NULL59"> 359
 360        7310" id="7310" class="line" name="7310">70_pool, skb);
 333        7truct  309 *de71a href="+code=np" class="srecu04" id="L304" clcu0"+co++e" name="L333"> 333        7/2api" cl7f="+code=status" class="7ref">71ef">WARN_ONCE(!NETDEV_TX_BUSY;
 dst ip >oll_dev" class="sref">netpoll_poll_dev7etpoll.c#7315" id="L315" class="li7e" na71netpoll.c#L32e=tx_id" class="srefdilim+code=skb" clasdelimclas"sref">skb);
<3trch04" id="L304" clstrch0 hres0" class="line"cu04" id="L304" clcu0"+cot/c" name="L317"sring">'/'ll_dev"n)sss="sref">skb,NULL59"> 359
 360        7U       r7de=ops" class="sref">ops7/a> =71"net/core/netpoll.c#Lgoto>sk_buff * 347     parse_fail  clase" name="L333"> 333        7U6      r7net/core/netpoll.c#L317"7id="L71line" name="L,
npinfo7
NETDEVsk_buff * 359
 360        7Us="comme7ode=WARN_ON_ONCE" class=7sref"71skb);
 360        7d10" id="7 class="sref">irqs_disab7edudelay();
 *skbrcu_dereference_7h72="+code=dev" classe=n=ass="line" name="L328"> MAC address >oll_dev" class="sref">netpoll_poll_dev7_2api" cl7ss="sref">netif_running<7a>(          lassref=e=tx  skb,/core/netpoll.c#L322" id="L322" class="lineremote2mac59"> 359
 360        7_SY" clas7s="sref">skb);
 347     parse_fail  clase" name="L333"> 333        7L325"> 327        }
 309status7a/* don't 7et me72line" name="Lcore/netpoll.c#L" classprint_optlasclass="line" nama" classprint_optlasc"nets0" class="line"L359"> 359
 360        7*/7netpoll_owner_active(7as="comme7fo" class="sref">npinfo<7a>-&g72txq;
udelay(73a>);
 * 347     parse_fail  clas:_var(netdev_pick_tx7pa>
 359
"couldn't parsenconfig at '%s'!\n"ll_dev"  ="line" name="Lcu04" id="L304" clcu0"+co"e" name="L360"> 360        7 nt /* tr7 unti73/a>          326" c -1e" name="L360"> 360        7 SY" clas7tpoll.c#L334" id="L334" 7lass=73"+code" name="L309"> 309 327cs" class="sref">jiffies7to_us73netpo="line" name="LEXPORT_SYMBOL59"> 359
 360        7        r7 class="sref">tries)7{
status7 ( 359
sk_buff *skb,
sk_buff *skb,
 322n     ="line" name="Lgfp_t59"> 359
);
 * 359
 360        7tif_xmit_7topped(skbvla7_tx_tag_present( 318
 360        7 10" id="7if_skb_features( 360        7> = );
 360        7>bh" clas7y(! 360        7>nt WARN_ONCE(!usersnpore/netpoll.c#L322" id="L322" class="linedidame="L322"> 322ded"+cofsref">skb);
 322n   e" name="L360"> 360        7>325"> 327" name="L345"> 345
<7 href74netpoll.c#L32sref">users3trlcpclass="line" nam3trlcpc hres0" class="line"L359"> 359
 322ded=ONCE311"t/csref">skb,e" name="L322"> 322n   d="L322" class="lineONCEame="L322"> 322ONCE311"t/csref">skb,IFNAMSIZame="L322"> 322IFNAMSIZ"net"e" name="L360"> 360        7>href="+c7                     status7>rylock 322n   d="L322" class="linepriv_flagclass="line" nampriv_flagc> 359
status7>if_xmit_7href="+code=NETDEV_TX_OK7 clas74"sref">NETDEV_TX_   322n   d="L322" class="lineOetded=opclass="line" nama" ded=opc>   d="L322" class="lineOdo_18skbref">vla7_trans_update( 359
"%s doesn't support f">sing, aborting\n"ll_dev" "+code=skb" class="sref">skb10" id="7L350"> 350          7     74_pool,  359
 322ded=ONCE311""e" name="L360"> 360        7tx_unlock7/a>();
NETDEV0" class="line"err0 && ! 360        7         7             if (sk_buff * 333        7 .c#L343"7ode=NETDEV_TX_OK" class=7sref"75/a>          e" name="L309"> 309 354<7a>
zap_completion_queue75es_to_us7     }
 322n   d="L322" class="lineOl.c#L319" id="L319" class="lin" ="+code=skb" class="sref">skb
skb);
 359
 359
 333        7 rylock/* 75->skb
NETDEV_TX_OK 333        7 ref">vla7f="+code=np" class="sref7>npsk_buff * 333        7 10" id="7     ,  309USEC_PE7_POLL76q = netpoll_owner_active( 359
dev_listass="sref">netpoll_owner_active( 333        7 4" class7d" class="sref">irqs_dis7bled<76ass="sref">zap_completion_queue7 es_to_us7rrubef="+code=netkc#L3647 id="76netpoll.c#L326" id="Lsref">users3er__lock_ini9" class="line" 3er__lock_ini9 hres="sref">dev_listass="sref">netpoll_owner_active( 333        7 href="+c766                }
7a hre76"net/core/netpoll.c#L22" class="line.c#Lqueue_head_ini9" class="line" 3c#Lqueue_head_ini9 hres="sref">dev_listass="sref">netpoll_owner_active( 333        7 rylockdev_listass="sref">netpoll_owner_active(netpoll_owtxq"lin)e" name="L333"> 333        7 if_xmit_7net/core/netpoll.c#L269"7id="L76"sref">NETDEV_TX_OK 359
dev_listass="sref">netpoll_owner_active(skb,queue_procesclass="line" namqueue_procesc"lin)e" name="L333"> 333        7 ref">vla7ode=put_cpu_var" class="7ref">76t_cpu_var(softnet_data);
<76_pool, dev_listass="sref">netpoll_owner_active( 359
 333        7="net/cor7/netpoll.c#L272" id="L277" cla77q = skb);
 322ded"+cod="L322" class="lineOetded=opclass="line" nama" ded=opc>   e" name="L333"> 333        7=.c#L343"7ref">find_skb(struct7          lassref=e=txq" class="sref"opclass="line" namopc hred="L322" class="lineOdo_3href="+s26"359"> 359
skbc77"+code=skb_polassev" class="snet/core/netpolerr0 && ! 359
 322n   t/csref">skb,/cs="sref">netpoll_owner_active  ="line" name="Lgfp59"> 359
 333        7ibled int7d="L275" class="line" na7e="L277netpoll.c#L326" id="Llassref=e=txq" class="sref"err0 && ! 360        7=href="+c7>skb;
sk_buff *netpoll_owfree=/cs="s>   e" name="L333"> 333        7=rylock 309NETDEV} else ="+code=skb" class="sref">skbvla7279" id="L279" class="li7e" na77 *skb);
 322n   d="L322" class="lineOl.c#L319" id="L319" class="line" name="L333"> 333        7=        7="line" name="L280"> 2807/a>
<77_pool,  359
dev_listass="sref">netpoll_owner_active( 359
 333        7a href="+7ode=skb" class="sref">sk7 780a href="+code" name="L309"> 309(" name="L333"> 333        7a       28782sref">NETDEVf">dev_listass="sref">netpoll_owner_active(skbsref">skb);
 333        7ant skb_dequeue(&7a hre78ass="sref">zap_completion_queue7abled int7f="+code=skb" class="sre7">skb78netpoll.c#L32e=txef">skb);
skb 78"net/core/netpollllllsref">users3er__lock_irqsavEame="L322"> 3223er__lock_irqsavE hres="sref">dev_listass="sref">netpoll_owner_active( 333        7arylocknetpoll_owner_active(skb,NETPOLL_RX_ENABLED59"> 359
 333        7a href="n7f="+code=np" class="sref7>npNETDEV_TX_OKdev_listasore/netpoll.c#L322" id="L322" class="linerxlass="line" namrx"lin  ="sref">dev_listass="sref">netpoll_owner_active( 333        7a href="+7tpoll.c#L289" id="L289" 7lass=78 * 3223er__unlock_irqrest333 hres="sref">dev_listass="sref">netpoll_owner_active( 333        7a        7              return  309 =  inet thing to>do is tpok it to>the etd devic9netpollurs=>oll_dev" class="sref">netpoll_poll_dev7t      a792sref">NETDEVf">dev_listrcu_omiign_pointer/cor>netpoll_owrcu_omiign_pointer"lins0" class="line"L" name="L322"> 322n   d="L322" class="lineOl.c#L319" id="L319" class="lint/csref">skb,/cs="sref">netpoll_owner_active)e" name="L333"> 333        7
nt skb->zap_completion_queue7ass="sref7>skb,  79ode=status" class="sref">status7
et/core/7/netpoll.c#L298" id="L297" cla79->sk_buff *netpoll_owfree=/cs="s>   :_var(NETDEVsk_buff * 359
netpoll_owner_active)e" name="L333"> 333        7
 href="+7ref="+code=net_device" c7ass="79 *( 333        8=napi" cl8ss="sref">napi;
 309 359
 359
 333        8=2api" cl8sde=atomic_set" class="s8>, &a80ef">WARN_ONCE(!skb-> 359
sk_buff *skb,
 360        8=4api" cl8sskb, skbsk_buff *skb,
 322n   bsref">skb);
 359
 333        8=6      r8tnetpoll.c#L298" id="L298.c#L380->sk_buff *skb,
 333        8=7      r8t+code=netpoll_owner_act8" cla80"sref">NETDEV/netpoll.c#L314" iderr0 && ! 360        8=8      r8tef="+code=net_device" c8led *80t_cpu_var(80_pool, skb);
 322ded=ONCE311""_var( 322n   bsref">skb);
 322ded=ghr_by=ONCE hres="sref">dev_listini9_3hret/core/netpollr_i9_3hr"lint/csref">skb,/core/netpoll.c#L322" id="L322" class="linedid=ONCEame="L322"> 322ded=ONCE311""e" name="L360"> 360        8/a> *de81a href="+codee=tx   322n   " ="+code=skb" class="sref">skb81/a>          lassref=s            st/c_err0 && ! 359
"%s doesn't exist, aborting\n"ll_dev" /csref">skb,/core/netpoll.c#L322" id="L322" class="linedid=ONCEame="L322"> 322ded=ONCE311""e" name="L360"> 360        8/3api" cl8="sref">NETDEV_TX_BUSY;
 359
 360        8etpoll.c#8315" id="L315" class="li8e" na81netpoll.c#L32e" name="L309"> 309ops8/a> =81ode=status" class="sref">status8U6      r8net/core/netpoll.c#L317"8id="L81-> 322n   d="L322" class="linemneter/cor>netpoll_owmneter>   " ="+code=skb" class="sref">skbnpinfo8
NETDEV_TX_OK 359
"%s is a slave devic9, aborting\n"ll_dev" /csref">skb,/core/netpoll.c#L322" id="L322" class="linedid=ONCEame="L322"> 322ded=ONCE311""e" name="L360"> 360        8/8      r8ode=WARN_ON_ONCE" class=8sref"81 * 359
 360        8e10" id="8 class="sref">irqs_disab8ed,  333        8a href="+8ode=npinfo" class="sref"8npinf820a href="+code" name="L309"> 309rcu_dereference_8h821ef">" name="L333"> 333        8_2api" cl8ss="sref">netif_running<8a>(          e=tx   322n   )nf="+code=skb" class="sref">skbskb);
skb,atleas9" class="line" atleas9clase" name="L333"> 333        8atpoll.c#8        }
pa>
 359
"devic9n%s not up yet, forcing it\n"ll_dev" /csref">skb,/core/netpoll.c#L322" id="L322" class="linedid=ONCEame="L322"> 322ded=ONCE311""e" name="L360"> 360        8a/* don't 8et me82line"" name="L360"> 360        8a7      r8NETDEV_TX_OKnetpoll_owrtnl_lock hres"e" name="L360"> 360        8a8      r8fo" class="sref">npinfo<8a>-&g82 * 322n   )e" name="L360"> 360        8a10" id="8=txq" class="sref">txq;
, netpoll_owrtnl_unlock hres"e" name="L360"> 360        8       83q = netdev_pick_tx8skb/* tr8 unti83/a>          lassref=poll.c#L22" class="lineOlserr0 && ! 359
"fail   to>ope n%s\n"ll_dev" /csref">skb,/" name="L322"> 322n   d="L322" class="lineONCEame="L322"> 322ONCE311""e" name="L360"> 360        8 SY" clas8tpoll.c#L334" id="L334" 8lass=83"+code=skb_polassev" class="sgoto>sk_buff * 333        8 325"> 328cs" class="sref">jiffies8to_us83netpoll.c#L326" id="Le" name="L309"> 309tries)8{
status8 ( 322HZ"net/1/core/netpoll.c#L345" id="L345" 8tif_xmit_8topped(NETDEV_TX_OKskb 322HZ"netcore/netpoll.c#L345" id="L345" 8t8      r8_tx_tag_present(netpoll_oweetif_carrier_ok"lins0" class="line"L" name="L322"> 322n   )nf="+code=skb" class="sref">skb(NETDEVne=txq" class="sref"time_after/cor>netpoll_owtime_after"lins0" class="line"jiffieclass="line" namjiffiecclast/csref">skb,atmos9" class="line" atmos9"lin)nf="+code=skb" class="sref">skb = );
NETDEV">NETDEV_TX_OK 359
"timeou9 waiting for carrier\n"ll_dev""e" name="L360"> 360        8>bh" clas8y(! 360        8>nt  309 359
 333        8>325"> 328" name="L345"> 345
<8 href84netpoll.c#L326" id="Le" name="L309"> 309href="+c8                     status8>rylock If carrier appears to>amee up instantly, we don'tll_dev" class="sref">netpoll_poll_dev8>if_xmit_8href="+code=NETDEV_TX_OK8 clas84"sref=ass="line" name="L328olassev" class="s* trust it and pause so>that we don't pump all ou0"+_dev" class="sref">netpoll_poll_dev8>8      r8_trans_update(netpoll_poll_dev8>10" id="8L350"> 350          8     84_pool=ass="line" name="L328olassev" class="s*oll_dev" class="sref">netpoll_poll_dev8tx_unlock8/a>( =  322time_bef333"lins0" class="line"jiffieclass="line" namjiffiecclast/csref">skb,atleas9" class="line" atleas9clas)nf="+code=skb" class="sref">skb          lassref=poll.c#L22" class="lineOlsnotic9et/core/netpoll c_notic9 hres0" class="line"L359"> 359
"carrier detect appears untrustworthy, waiting 4 seconds\n"ll_dev")e" name="L333"> 333        854" class8"line" name="L354"> 354<8a>
 359
 360        85es_to_us8     }
 309 309/* 85line"" name="L360"> 360        8 if_xmit_8an>
NETDEVe=tx   2i359"> 359
 2i3311"nf="+code=skb" class="sref">skbnpnetpoll_owrcu_read_lock hres"e" name="L360"> 360        8 10" id="8     ,  322n   )e" name="L360"> 360        8SEC_PER_P8LL" class="sref">USEC_PE8_POLL86q = skb          lassref=ss="srefcode=skb" classrcu_read_unlock/cor>netpoll_owrcu_read_unlock hres"e" name="L360"> 360        8 4" class8d" class="sref">irqs_dis8bled<86"+code=skb_polassev" class="snet/core/netpolOlserr0 && ! 359
"no IP address for %s, aborting\n"ll_dev" "+code=skb" class="sref">skb 322ded=ONCE311""e" name="L360"> 360        8 href="+c866                }
8a hre86"net/core/netpoll.c#Lclass="snet/core/netpolerr0 && ! 359
sk_buff * 333        8 if_xmit_8net/core/netpoll.c#L269"8id="L86"sref">NETDEV_TX_OK 309vla8ode=put_cpu_var" class="8ref">86t_cpu_var(softnet_data);
<86_pool,  359
 2i359"> 359
 2i3311""               stin_devet/core/netpollr__dev311"d="L322" class="lineifa_api_et/core/netpollrfa_api_311"d="L322" class="lineifa_a6"> et/core/netpollrfa_a6"> clase" name="L333"> 333        8="net/cor8/netpoll.c#L272" id="L278" cla87a>);
NETDEV0" class="line"rcu_read_unlock/cor>netpoll_owrcu_read_unlock hres"e" name="L360"> 360        8=362
8ef="+code=sk_buff" class8"sref87="+code=dev" classe=n="line" name="LOls="line" name="L318">pa>
 359
"a6">  IP %pI4\n"ll_dev" /="sref">dev_listasore/netpoll.c#L322" id="L322" class="line56"> 2i359"> 359
 2i3311"ne" name="L360"> 360        8=.c#L343"8ref">find_skb(struct8          e" name="L309"> 309c87ass="sref">zap_completion_queue8ibled int8d="L275" class="line" na8e="L287netpoll.c#L32=ass="line" name="L328"> fill up the skb queues*oll_dev" class="sref">netpoll_poll_dev8=href="+c8>skb;
 360        8=rylock 360        8a href="n8t/core/netpoll.c#L278" i8="L2787"sref">NETDEVsk_buff *netpoll_owrtnl_lock hres"e" name="L360"> 360        8iref">vla8279" id="L279" class="li8e" na87 359
 359
 322n   t/c" class="line"GFP_KERNEL59"> 359
 360        8=        8="line" name="L280"> 2808/a>
<87));
 360        8a href="+8ode=skb" class="sref">sk8 88q =  2888/a>          lassref=goto>sk_buff * 333        8ant skb_dequeue(&8a hre88ass="sref">zap_completion_queue8abled int8f="+code=skb" class="sre8">skb88netpoll.c#L32326" c /core/netpoll.c#L345" id="L345" 886" id="L886" class="line" name="L886"> 88ode=status" class="sref">status8arylock *(NETDEVsk_buff * 322n   )e" name="L360"> 360        8a href="+8tpoll.c#L289" id="L289" 8lass=88 360        8a        8              return  309="line" name="LEXPORT_SYMBOL59"> 359
 359
 360        8
" name="L333"> 333        8t      a892srefstaticV/netpoll.c#L314" id__ini9" class="line" __ini9 hre.c#L318" id="L318" class="i9" class="line" 8" class="i9 hresvoid) = skb->skbskb, dev_list3c#Lpol.c#L285" id="L283c#Lpol. hre)e" name="L360"> 360        8
6" id="L896" class="line" name="L896"> 895etpoll.c#L32326" c /core/netpoll.c#L345" id="L345" 8
et/core/8/netpoll.c#L298" id="L298" cla89->e" name="L309"> 309 .c#L285" id="L28c309_ini9"> . hres0" class="line"L" class="i9" class="line" 8" class="i9 hre)e" name="L360"> 360        8
 href="+8ref="+code=net_device" c8ass="89t_cpu_var(sk_buff *skb *sk) = napi;
skb 318
skb, &a90/a>          lassref=ss="srefcode=skb" classcontaet"r_ofc#L285" id="L28c3ntaet"r_of hres0" class="line"rcu_headne" name="L318"rcu_head">sk, "sref">sk_buff * 318
 360        9=3api" cl9sf">skb->zap_completion_queue9=4api" cl9sskb,  3223c#Lqueue_purgE hres="sref">dev_listass="sref">netpoll_owner_active( 333        9        r9turn 0;
 3223c#Lqueue_purgE hres="sref">dev_listass="sref">netpoll_owner_active(netpoll_owtxq"lin)e" name="L333"> 333        9=6      r9tnetpoll.c#L298" id="L299.c#L390line"" name="L360"> 360        9=7      r9t+code=netpoll_owner_act9" cla90"sref">NETDEV=ass="line" name="L328"> we can't "> . cancel_delayed_work_sync her9, as we areV/n softirqs*oll_dev" class="sref">netpoll_poll_dev9=8      r9tef="+code=net_device" c9led *90dev_listass="sref">netpoll_owner_active( 333        9=9      r9tref="+code=napi_struct"9310">90s="sref">udelay( clean after inet, unf="ished works*oll_dev" class="sref">netpoll_poll_dev9/a> *de91a href="+code=np" class="sre__3c#Lqueue_purgEame="L322"> 322__3c#Lqueue_purgE hres="sref">dev_listass="sref">netpoll_owner_active(netpoll_owtxq"lin)e" name="L333"> 333        9/2api" cl9f="+code=status" class="9ref">91/a>          =ass="line" name="L328"> now cancel it agaets*oll_dev" class="sref">netpoll_poll_dev9/3api" cl9="sref">NETDEV_TX_BUSY;
dev_listass="sref">netpoll_owner_active( 333        9etpoll.c#9315" id="L315" class="li9e" na91netpoll.c#L32c#L318" id="L31kfree59"> 359
netpoll_owner_active)e" name="L333"> 333        9U       r9de=ops" class="sref">ops9/a> =91ode=se" name="L309"> 309 360        9/7      r9 class="sref">npinfo9
 359
sk_buff * 318 359
skbirqs_disab9ed,  318
 360        9a href="+9ode=npinfo" class="sref"9npinf920a href="+codunsigned long.c#L318" id="L31flagclass="line" namflagc hree" name="L360"> 360        9_bh" clas9="sref">rcu_dereference_9h921ef">" name="L333"> 333        9_2api" cl9ss="sref">netif_running<9a>(NETDEVf">dev_listass="sref">netpoll_owner_activefsref">skb);
 322ded"+cod="L322" class="lineOl.c#L319" id="L319" class="line" name="L360"> 360        9a3api" cl9s="sref">skb);
 360        9atpoll.c#9        }
 360        9a       r9net/core/netpoll.c#L327"9id="L92ode=status" class="sref">status9a/* don't 9et me92->dev_listass="sref">netpoll_owner_active(skbNETDEV_TX_OK 3223er__lock_irqsavE hres="sref">dev_listass="sref">netpoll_owner_active( 333        9a8      r9fo" class="sref">npinfo<9a>-&g92 *dev_listasore/netpoll.c#L322" id="L322" class="linerxlass="line" namrx"lin)e" name="L333"> 333        9a10" id="9=txq" class="sref">txq;
, dev_listass="sref">netpoll_owner_active( 333        9       93a>);
NETDEV">NETDEVf">dev_listass="sref">netpoll_owner_active( 359
 333        9 bh" clas9sref">netdev_pick_tx9 3223er__unlock_irqrest333 hres="sref">dev_listass="sref">netpoll_owner_active( 333        9 nt /* tr9 unti93/a>          e" name="L309"> 309zap_completion_queue9 325"> 329cs" class="sref">jiffies9to_us93netpoll.c#L32e=txq" class="sref"atpoll.dec_and_tes9" class="line" atpoll.dec_and_tes9 hres="sref">dev_listass="sref">netpoll_owner_active( 359
skbtries)9{
sk_buff * 333        9 ( 360        9tif_xmit_9topped(NETDEV_TX_OKskb);
 322ded"+cod="L322" class="lineOetded=opclass="line" nama" ded=opc>   e" name="L333"> 333        9t8      r9_tx_tag_present( 359
 360        9 10" id="9if_skb_features(NETDEVnq" class="sref"opclass="line" namopc hred="L322" class="lineOdo_3href="+cleanup59"> 359
skb);
 322ded"+co)e" name="L333"> 333        9> =  = (! 322RCU_INIT_POINTER"linxef">skb);
 322ded"+cod="L322" class="lineOl.c#L319" id="L319" class="lint/csref">skb,NULL59"> 359
 333        9>nt dev_listass="sref">netpoll_owner_active( 333        9>SY" clas9ref="+code=vlan_tci" cla9s="sr94"+code=skb_poe" name="L309"> 309325"> 329" name="L345"> 345
<9 href94netpoe" name="L309"> 309       r9                      359
 359
 333        9> 360        9>if_xmit_9href="+code=NETDEV_TX_OK9 clas94"srefstaticVvoidV0" class="line"rcu_cleanup_8" clasne" name="L318"rcu_cleanup_8" clas hres"sref">sk_buff *skb *sk) = skb10" id="9L350"> 350          9     94_pool,  318 359
skb);
sk, "sref">sk_buff * 318 360        9tx_unlock9/a>( =  359
 359
 360        9tnt NETDEVf">dev_listkfree59"> 359
 359
 360        9tSY" clas9"line" name="L354"> 354<9a>
 309sk_buff * 318 359
/* 95line"="+code=skb" class="sref">skb
NETDEVsk_buff *dev_listasore/netpoll.c#L322" id="L322" class="linercuet/core/netpollrcu"lint/c" class="line"rcu_cleanup_8" clasne" name="L318"rcu_cleanup_8" clas hre)e" name="L360"> 360        9t8      r9f="+code=np" class="sref9>np 309 359
 360        9SEC_PER_P9LL" class="sref">USEC_PE9_POLL96q =  359
sk_buff * 318 359
skbirqs_dis9bled<96"+code=skb_poe=tx   322ded"+co)"+code=skb" class="sref">skb 360        9 href="+c966                }
9a hre96ode=status" class="sref">status9 rylocknetpoll_owrtnl_lock hres"e" name="L360"> 360        9 if_xmit_9net/core/netpoll.c#L269"9id="L96"sref">NETDEVsk_buff * 359
 359
 360        9 ref">vla9ode=put_cpu_var" class="9ref">96netpoll_owrtnl_unlock hres"e" name="L360"> 360        9         9ss="sref">softnet_data);
<96s="sref">udelay();
 322ded"+co)e" name="L333"> 333        9=362
9ef="+code=sk_buff" class9"sref97a href="+code=np" class="sreLpore/netpoll.c#L322" id="L322" class="linedidame="L322"> 322ded"+cobsref">skb);
 359
 333        9=.c#L343"9ref">find_skb(struct9  e" name="L309"> 309c97ass="c" class="line"EXPORT_SYMBOL59"> 359
 359
 333        9=es_to_us9d="L275" class="line" na9e="L297a>) {
skb;
 359
skbNETDEV326" c q" class="sref"atpoll.readne" name="L318"atpoll.read hres="sref">dev_listtrappedne" name="L318"trapped hre)e" name="L333"> 333        9=ref">vla9279" id="L279" class="li9e" na97 309 2809/a>
<97_poolc" class="line"EXPORT_SYMBOL59"> 359
 359
 333        9a href="+9ode=skb" class="sref">sk9 98q =  359
 359
 2898/a>  ="+code=skb" class="sref">skbskb_dequeue(&9a hre98"+code=skb_poe=txpoll.c#L314" idtrap59"> 359
skb98netpoll.c#L326" id="Lq" class="sref"atpoll.incne" name="L318"atpoll.inc hres="sref">dev_listtrappedne" name="L318"trapped hre)e" name="L333"> 333        986" id="L986" class="line" name="L986"> 98"net/core/netelse" name="L333"> 333        98rylockdev_listtrappedne" name="L318"trapped hre)e" name="L333"> 333        98 href="n9f="+code=np" class="sref9>np 309 * 359
 359
 333        98        9              return projects/lxr/>LXR ame=unitc hre, this experi="L3al versionVby  name="L3mailto:lxr@   ux.no">lxr@   ux.no hre.
lxr. ux.no kindly hostedVby name="L3http://www.redpill- pro.no">Redpill L pro AS hre, provider of L uxLconsulting and operations servic9s since 1995.