include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[linux-2.6-block.git] / net / core / netpoll.c
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 #include <linux/moduleparam.h>
13 #include <linux/netdevice.h>
14 #include <linux/etherdevice.h>
15 #include <linux/string.h>
16 #include <linux/if_arp.h>
17 #include <linux/inetdevice.h>
18 #include <linux/inet.h>
19 #include <linux/interrupt.h>
20 #include <linux/netpoll.h>
21 #include <linux/sched.h>
22 #include <linux/delay.h>
23 #include <linux/rcupdate.h>
24 #include <linux/workqueue.h>
25 #include <linux/slab.h>
26 #include <net/tcp.h>
27 #include <net/udp.h>
28 #include <asm/unaligned.h>
29 #include <trace/events/napi.h>
30
31 /*
32  * We maintain a small pool of fully-sized skbs, to make sure the
33  * message gets out even in extreme OOM situations.
34  */
35
36 #define MAX_UDP_CHUNK 1460
37 #define MAX_SKBS 32
38 #define MAX_QUEUE_DEPTH (MAX_SKBS / 2)
39
40 static struct sk_buff_head skb_pool;
41
42 static atomic_t trapped;
43
44 #define USEC_PER_POLL   50
45 #define NETPOLL_RX_ENABLED  1
46 #define NETPOLL_RX_DROP     2
47
48 #define MAX_SKB_SIZE \
49                 (MAX_UDP_CHUNK + sizeof(struct udphdr) + \
50                                 sizeof(struct iphdr) + sizeof(struct ethhdr))
51
52 static void zap_completion_queue(void);
53 static void arp_reply(struct sk_buff *skb);
54
55 static unsigned int carrier_timeout = 4;
56 module_param(carrier_timeout, uint, 0644);
57
58 static void queue_process(struct work_struct *work)
59 {
60         struct netpoll_info *npinfo =
61                 container_of(work, struct netpoll_info, tx_work.work);
62         struct sk_buff *skb;
63         unsigned long flags;
64
65         while ((skb = skb_dequeue(&npinfo->txq))) {
66                 struct net_device *dev = skb->dev;
67                 const struct net_device_ops *ops = dev->netdev_ops;
68                 struct netdev_queue *txq;
69
70                 if (!netif_device_present(dev) || !netif_running(dev)) {
71                         __kfree_skb(skb);
72                         continue;
73                 }
74
75                 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
76
77                 local_irq_save(flags);
78                 __netif_tx_lock(txq, smp_processor_id());
79                 if (netif_tx_queue_stopped(txq) ||
80                     netif_tx_queue_frozen(txq) ||
81                     ops->ndo_start_xmit(skb, dev) != NETDEV_TX_OK) {
82                         skb_queue_head(&npinfo->txq, skb);
83                         __netif_tx_unlock(txq);
84                         local_irq_restore(flags);
85
86                         schedule_delayed_work(&npinfo->tx_work, HZ/10);
87                         return;
88                 }
89                 __netif_tx_unlock(txq);
90                 local_irq_restore(flags);
91         }
92 }
93
94 static __sum16 checksum_udp(struct sk_buff *skb, struct udphdr *uh,
95                             unsigned short ulen, __be32 saddr, __be32 daddr)
96 {
97         __wsum psum;
98
99         if (uh->check == 0 || skb_csum_unnecessary(skb))
100                 return 0;
101
102         psum = csum_tcpudp_nofold(saddr, daddr, ulen, IPPROTO_UDP, 0);
103
104         if (skb->ip_summed == CHECKSUM_COMPLETE &&
105             !csum_fold(csum_add(psum, skb->csum)))
106                 return 0;
107
108         skb->csum = psum;
109
110         return __skb_checksum_complete(skb);
111 }
112
113 /*
114  * Check whether delayed processing was scheduled for our NIC. If so,
115  * we attempt to grab the poll lock and use ->poll() to pump the card.
116  * If this fails, either we've recursed in ->poll() or it's already
117  * running on another CPU.
118  *
119  * Note: we don't mask interrupts with this lock because we're using
120  * trylock here and interrupts are already disabled in the softirq
121  * case. Further, we test the poll_owner to avoid recursion on UP
122  * systems where the lock doesn't exist.
123  *
124  * In cases where there is bi-directional communications, reading only
125  * one message at a time can lead to packets being dropped by the
126  * network adapter, forcing superfluous retries and possibly timeouts.
127  * Thus, we set our budget to greater than 1.
128  */
129 static int poll_one_napi(struct netpoll_info *npinfo,
130                          struct napi_struct *napi, int budget)
131 {
132         int work;
133
134         /* net_rx_action's ->poll() invocations and our's are
135          * synchronized by this test which is only made while
136          * holding the napi->poll_lock.
137          */
138         if (!test_bit(NAPI_STATE_SCHED, &napi->state))
139                 return budget;
140
141         npinfo->rx_flags |= NETPOLL_RX_DROP;
142         atomic_inc(&trapped);
143         set_bit(NAPI_STATE_NPSVC, &napi->state);
144
145         work = napi->poll(napi, budget);
146         trace_napi_poll(napi);
147
148         clear_bit(NAPI_STATE_NPSVC, &napi->state);
149         atomic_dec(&trapped);
150         npinfo->rx_flags &= ~NETPOLL_RX_DROP;
151
152         return budget - work;
153 }
154
155 static void poll_napi(struct net_device *dev)
156 {
157         struct napi_struct *napi;
158         int budget = 16;
159
160         list_for_each_entry(napi, &dev->napi_list, dev_list) {
161                 if (napi->poll_owner != smp_processor_id() &&
162                     spin_trylock(&napi->poll_lock)) {
163                         budget = poll_one_napi(dev->npinfo, napi, budget);
164                         spin_unlock(&napi->poll_lock);
165
166                         if (!budget)
167                                 break;
168                 }
169         }
170 }
171
172 static void service_arp_queue(struct netpoll_info *npi)
173 {
174         if (npi) {
175                 struct sk_buff *skb;
176
177                 while ((skb = skb_dequeue(&npi->arp_tx)))
178                         arp_reply(skb);
179         }
180 }
181
182 void netpoll_poll(struct netpoll *np)
183 {
184         struct net_device *dev = np->dev;
185         const struct net_device_ops *ops;
186
187         if (!dev || !netif_running(dev))
188                 return;
189
190         ops = dev->netdev_ops;
191         if (!ops->ndo_poll_controller)
192                 return;
193
194         /* Process pending work on NIC */
195         ops->ndo_poll_controller(dev);
196
197         poll_napi(dev);
198
199         service_arp_queue(dev->npinfo);
200
201         zap_completion_queue();
202 }
203
204 static void refill_skbs(void)
205 {
206         struct sk_buff *skb;
207         unsigned long flags;
208
209         spin_lock_irqsave(&skb_pool.lock, flags);
210         while (skb_pool.qlen < MAX_SKBS) {
211                 skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
212                 if (!skb)
213                         break;
214
215                 __skb_queue_tail(&skb_pool, skb);
216         }
217         spin_unlock_irqrestore(&skb_pool.lock, flags);
218 }
219
220 static void zap_completion_queue(void)
221 {
222         unsigned long flags;
223         struct softnet_data *sd = &get_cpu_var(softnet_data);
224
225         if (sd->completion_queue) {
226                 struct sk_buff *clist;
227
228                 local_irq_save(flags);
229                 clist = sd->completion_queue;
230                 sd->completion_queue = NULL;
231                 local_irq_restore(flags);
232
233                 while (clist != NULL) {
234                         struct sk_buff *skb = clist;
235                         clist = clist->next;
236                         if (skb->destructor) {
237                                 atomic_inc(&skb->users);
238                                 dev_kfree_skb_any(skb); /* put this one back */
239                         } else {
240                                 __kfree_skb(skb);
241                         }
242                 }
243         }
244
245         put_cpu_var(softnet_data);
246 }
247
248 static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve)
249 {
250         int count = 0;
251         struct sk_buff *skb;
252
253         zap_completion_queue();
254         refill_skbs();
255 repeat:
256
257         skb = alloc_skb(len, GFP_ATOMIC);
258         if (!skb)
259                 skb = skb_dequeue(&skb_pool);
260
261         if (!skb) {
262                 if (++count < 10) {
263                         netpoll_poll(np);
264                         goto repeat;
265                 }
266                 return NULL;
267         }
268
269         atomic_set(&skb->users, 1);
270         skb_reserve(skb, reserve);
271         return skb;
272 }
273
274 static int netpoll_owner_active(struct net_device *dev)
275 {
276         struct napi_struct *napi;
277
278         list_for_each_entry(napi, &dev->napi_list, dev_list) {
279                 if (napi->poll_owner == smp_processor_id())
280                         return 1;
281         }
282         return 0;
283 }
284
285 static void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
286 {
287         int status = NETDEV_TX_BUSY;
288         unsigned long tries;
289         struct net_device *dev = np->dev;
290         const struct net_device_ops *ops = dev->netdev_ops;
291         struct netpoll_info *npinfo = np->dev->npinfo;
292
293         if (!npinfo || !netif_running(dev) || !netif_device_present(dev)) {
294                 __kfree_skb(skb);
295                 return;
296         }
297
298         /* don't get messages out of order, and no recursion */
299         if (skb_queue_len(&npinfo->txq) == 0 && !netpoll_owner_active(dev)) {
300                 struct netdev_queue *txq;
301                 unsigned long flags;
302
303                 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
304
305                 local_irq_save(flags);
306                 /* try until next clock tick */
307                 for (tries = jiffies_to_usecs(1)/USEC_PER_POLL;
308                      tries > 0; --tries) {
309                         if (__netif_tx_trylock(txq)) {
310                                 if (!netif_tx_queue_stopped(txq)) {
311                                         status = ops->ndo_start_xmit(skb, dev);
312                                         if (status == NETDEV_TX_OK)
313                                                 txq_trans_update(txq);
314                                 }
315                                 __netif_tx_unlock(txq);
316
317                                 if (status == NETDEV_TX_OK)
318                                         break;
319
320                         }
321
322                         /* tickle device maybe there is some cleanup */
323                         netpoll_poll(np);
324
325                         udelay(USEC_PER_POLL);
326                 }
327
328                 WARN_ONCE(!irqs_disabled(),
329                         "netpoll_send_skb(): %s enabled interrupts in poll (%pF)\n",
330                         dev->name, ops->ndo_start_xmit);
331
332                 local_irq_restore(flags);
333         }
334
335         if (status != NETDEV_TX_OK) {
336                 skb_queue_tail(&npinfo->txq, skb);
337                 schedule_delayed_work(&npinfo->tx_work,0);
338         }
339 }
340
341 void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
342 {
343         int total_len, eth_len, ip_len, udp_len;
344         struct sk_buff *skb;
345         struct udphdr *udph;
346         struct iphdr *iph;
347         struct ethhdr *eth;
348
349         udp_len = len + sizeof(*udph);
350         ip_len = eth_len = udp_len + sizeof(*iph);
351         total_len = eth_len + ETH_HLEN + NET_IP_ALIGN;
352
353         skb = find_skb(np, total_len, total_len - len);
354         if (!skb)
355                 return;
356
357         skb_copy_to_linear_data(skb, msg, len);
358         skb->len += len;
359
360         skb_push(skb, sizeof(*udph));
361         skb_reset_transport_header(skb);
362         udph = udp_hdr(skb);
363         udph->source = htons(np->local_port);
364         udph->dest = htons(np->remote_port);
365         udph->len = htons(udp_len);
366         udph->check = 0;
367         udph->check = csum_tcpudp_magic(np->local_ip,
368                                         np->remote_ip,
369                                         udp_len, IPPROTO_UDP,
370                                         csum_partial(udph, udp_len, 0));
371         if (udph->check == 0)
372                 udph->check = CSUM_MANGLED_0;
373
374         skb_push(skb, sizeof(*iph));
375         skb_reset_network_header(skb);
376         iph = ip_hdr(skb);
377
378         /* iph->version = 4; iph->ihl = 5; */
379         put_unaligned(0x45, (unsigned char *)iph);
380         iph->tos      = 0;
381         put_unaligned(htons(ip_len), &(iph->tot_len));
382         iph->id       = 0;
383         iph->frag_off = 0;
384         iph->ttl      = 64;
385         iph->protocol = IPPROTO_UDP;
386         iph->check    = 0;
387         put_unaligned(np->local_ip, &(iph->saddr));
388         put_unaligned(np->remote_ip, &(iph->daddr));
389         iph->check    = ip_fast_csum((unsigned char *)iph, iph->ihl);
390
391         eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
392         skb_reset_mac_header(skb);
393         skb->protocol = eth->h_proto = htons(ETH_P_IP);
394         memcpy(eth->h_source, np->dev->dev_addr, ETH_ALEN);
395         memcpy(eth->h_dest, np->remote_mac, ETH_ALEN);
396
397         skb->dev = np->dev;
398
399         netpoll_send_skb(np, skb);
400 }
401
402 static void arp_reply(struct sk_buff *skb)
403 {
404         struct netpoll_info *npinfo = skb->dev->npinfo;
405         struct arphdr *arp;
406         unsigned char *arp_ptr;
407         int size, type = ARPOP_REPLY, ptype = ETH_P_ARP;
408         __be32 sip, tip;
409         unsigned char *sha;
410         struct sk_buff *send_skb;
411         struct netpoll *np, *tmp;
412         unsigned long flags;
413         int hits = 0;
414
415         if (list_empty(&npinfo->rx_np))
416                 return;
417
418         /* Before checking the packet, we do some early
419            inspection whether this is interesting at all */
420         spin_lock_irqsave(&npinfo->rx_lock, flags);
421         list_for_each_entry_safe(np, tmp, &npinfo->rx_np, rx) {
422                 if (np->dev == skb->dev)
423                         hits++;
424         }
425         spin_unlock_irqrestore(&npinfo->rx_lock, flags);
426
427         /* No netpoll struct is using this dev */
428         if (!hits)
429                 return;
430
431         /* No arp on this interface */
432         if (skb->dev->flags & IFF_NOARP)
433                 return;
434
435         if (!pskb_may_pull(skb, arp_hdr_len(skb->dev)))
436                 return;
437
438         skb_reset_network_header(skb);
439         skb_reset_transport_header(skb);
440         arp = arp_hdr(skb);
441
442         if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
443              arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
444             arp->ar_pro != htons(ETH_P_IP) ||
445             arp->ar_op != htons(ARPOP_REQUEST))
446                 return;
447
448         arp_ptr = (unsigned char *)(arp+1);
449         /* save the location of the src hw addr */
450         sha = arp_ptr;
451         arp_ptr += skb->dev->addr_len;
452         memcpy(&sip, arp_ptr, 4);
453         arp_ptr += 4;
454         /* If we actually cared about dst hw addr,
455            it would get copied here */
456         arp_ptr += skb->dev->addr_len;
457         memcpy(&tip, arp_ptr, 4);
458
459         /* Should we ignore arp? */
460         if (ipv4_is_loopback(tip) || ipv4_is_multicast(tip))
461                 return;
462
463         size = arp_hdr_len(skb->dev);
464
465         spin_lock_irqsave(&npinfo->rx_lock, flags);
466         list_for_each_entry_safe(np, tmp, &npinfo->rx_np, rx) {
467                 if (tip != np->local_ip)
468                         continue;
469
470                 send_skb = find_skb(np, size + LL_ALLOCATED_SPACE(np->dev),
471                                     LL_RESERVED_SPACE(np->dev));
472                 if (!send_skb)
473                         continue;
474
475                 skb_reset_network_header(send_skb);
476                 arp = (struct arphdr *) skb_put(send_skb, size);
477                 send_skb->dev = skb->dev;
478                 send_skb->protocol = htons(ETH_P_ARP);
479
480                 /* Fill the device header for the ARP frame */
481                 if (dev_hard_header(send_skb, skb->dev, ptype,
482                                     sha, np->dev->dev_addr,
483                                     send_skb->len) < 0) {
484                         kfree_skb(send_skb);
485                         continue;
486                 }
487
488                 /*
489                  * Fill out the arp protocol part.
490                  *
491                  * we only support ethernet device type,
492                  * which (according to RFC 1390) should
493                  * always equal 1 (Ethernet).
494                  */
495
496                 arp->ar_hrd = htons(np->dev->type);
497                 arp->ar_pro = htons(ETH_P_IP);
498                 arp->ar_hln = np->dev->addr_len;
499                 arp->ar_pln = 4;
500                 arp->ar_op = htons(type);
501
502                 arp_ptr = (unsigned char *)(arp + 1);
503                 memcpy(arp_ptr, np->dev->dev_addr, np->dev->addr_len);
504                 arp_ptr += np->dev->addr_len;
505                 memcpy(arp_ptr, &tip, 4);
506                 arp_ptr += 4;
507                 memcpy(arp_ptr, sha, np->dev->addr_len);
508                 arp_ptr += np->dev->addr_len;
509                 memcpy(arp_ptr, &sip, 4);
510
511                 netpoll_send_skb(np, send_skb);
512
513                 /* If there are several rx_hooks for the same address,
514                    we're fine by sending a single reply */
515                 break;
516         }
517         spin_unlock_irqrestore(&npinfo->rx_lock, flags);
518 }
519
520 int __netpoll_rx(struct sk_buff *skb)
521 {
522         int proto, len, ulen;
523         int hits = 0;
524         struct iphdr *iph;
525         struct udphdr *uh;
526         struct netpoll_info *npinfo = skb->dev->npinfo;
527         struct netpoll *np, *tmp;
528
529         if (list_empty(&npinfo->rx_np))
530                 goto out;
531
532         if (skb->dev->type != ARPHRD_ETHER)
533                 goto out;
534
535         /* check if netpoll clients need ARP */
536         if (skb->protocol == htons(ETH_P_ARP) &&
537             atomic_read(&trapped)) {
538                 skb_queue_tail(&npinfo->arp_tx, skb);
539                 return 1;
540         }
541
542         proto = ntohs(eth_hdr(skb)->h_proto);
543         if (proto != ETH_P_IP)
544                 goto out;
545         if (skb->pkt_type == PACKET_OTHERHOST)
546                 goto out;
547         if (skb_shared(skb))
548                 goto out;
549
550         iph = (struct iphdr *)skb->data;
551         if (!pskb_may_pull(skb, sizeof(struct iphdr)))
552                 goto out;
553         if (iph->ihl < 5 || iph->version != 4)
554                 goto out;
555         if (!pskb_may_pull(skb, iph->ihl*4))
556                 goto out;
557         if (ip_fast_csum((u8 *)iph, iph->ihl) != 0)
558                 goto out;
559
560         len = ntohs(iph->tot_len);
561         if (skb->len < len || len < iph->ihl*4)
562                 goto out;
563
564         /*
565          * Our transport medium may have padded the buffer out.
566          * Now We trim to the true length of the frame.
567          */
568         if (pskb_trim_rcsum(skb, len))
569                 goto out;
570
571         if (iph->protocol != IPPROTO_UDP)
572                 goto out;
573
574         len -= iph->ihl*4;
575         uh = (struct udphdr *)(((char *)iph) + iph->ihl*4);
576         ulen = ntohs(uh->len);
577
578         if (ulen != len)
579                 goto out;
580         if (checksum_udp(skb, uh, ulen, iph->saddr, iph->daddr))
581                 goto out;
582
583         list_for_each_entry_safe(np, tmp, &npinfo->rx_np, rx) {
584                 if (np->local_ip && np->local_ip != iph->daddr)
585                         continue;
586                 if (np->remote_ip && np->remote_ip != iph->saddr)
587                         continue;
588                 if (np->local_port && np->local_port != ntohs(uh->dest))
589                         continue;
590
591                 np->rx_hook(np, ntohs(uh->source),
592                                (char *)(uh+1),
593                                ulen - sizeof(struct udphdr));
594                 hits++;
595         }
596
597         if (!hits)
598                 goto out;
599
600         kfree_skb(skb);
601         return 1;
602
603 out:
604         if (atomic_read(&trapped)) {
605                 kfree_skb(skb);
606                 return 1;
607         }
608
609         return 0;
610 }
611
612 void netpoll_print_options(struct netpoll *np)
613 {
614         printk(KERN_INFO "%s: local port %d\n",
615                          np->name, np->local_port);
616         printk(KERN_INFO "%s: local IP %pI4\n",
617                          np->name, &np->local_ip);
618         printk(KERN_INFO "%s: interface '%s'\n",
619                          np->name, np->dev_name);
620         printk(KERN_INFO "%s: remote port %d\n",
621                          np->name, np->remote_port);
622         printk(KERN_INFO "%s: remote IP %pI4\n",
623                          np->name, &np->remote_ip);
624         printk(KERN_INFO "%s: remote ethernet address %pM\n",
625                          np->name, np->remote_mac);
626 }
627
628 int netpoll_parse_options(struct netpoll *np, char *opt)
629 {
630         char *cur=opt, *delim;
631
632         if (*cur != '@') {
633                 if ((delim = strchr(cur, '@')) == NULL)
634                         goto parse_failed;
635                 *delim = 0;
636                 np->local_port = simple_strtol(cur, NULL, 10);
637                 cur = delim;
638         }
639         cur++;
640
641         if (*cur != '/') {
642                 if ((delim = strchr(cur, '/')) == NULL)
643                         goto parse_failed;
644                 *delim = 0;
645                 np->local_ip = in_aton(cur);
646                 cur = delim;
647         }
648         cur++;
649
650         if (*cur != ',') {
651                 /* parse out dev name */
652                 if ((delim = strchr(cur, ',')) == NULL)
653                         goto parse_failed;
654                 *delim = 0;
655                 strlcpy(np->dev_name, cur, sizeof(np->dev_name));
656                 cur = delim;
657         }
658         cur++;
659
660         if (*cur != '@') {
661                 /* dst port */
662                 if ((delim = strchr(cur, '@')) == NULL)
663                         goto parse_failed;
664                 *delim = 0;
665                 if (*cur == ' ' || *cur == '\t')
666                         printk(KERN_INFO "%s: warning: whitespace"
667                                         "is not allowed\n", np->name);
668                 np->remote_port = simple_strtol(cur, NULL, 10);
669                 cur = delim;
670         }
671         cur++;
672
673         /* dst ip */
674         if ((delim = strchr(cur, '/')) == NULL)
675                 goto parse_failed;
676         *delim = 0;
677         np->remote_ip = in_aton(cur);
678         cur = delim + 1;
679
680         if (*cur != 0) {
681                 /* MAC address */
682                 if ((delim = strchr(cur, ':')) == NULL)
683                         goto parse_failed;
684                 *delim = 0;
685                 np->remote_mac[0] = simple_strtol(cur, NULL, 16);
686                 cur = delim + 1;
687                 if ((delim = strchr(cur, ':')) == NULL)
688                         goto parse_failed;
689                 *delim = 0;
690                 np->remote_mac[1] = simple_strtol(cur, NULL, 16);
691                 cur = delim + 1;
692                 if ((delim = strchr(cur, ':')) == NULL)
693                         goto parse_failed;
694                 *delim = 0;
695                 np->remote_mac[2] = simple_strtol(cur, NULL, 16);
696                 cur = delim + 1;
697                 if ((delim = strchr(cur, ':')) == NULL)
698                         goto parse_failed;
699                 *delim = 0;
700                 np->remote_mac[3] = simple_strtol(cur, NULL, 16);
701                 cur = delim + 1;
702                 if ((delim = strchr(cur, ':')) == NULL)
703                         goto parse_failed;
704                 *delim = 0;
705                 np->remote_mac[4] = simple_strtol(cur, NULL, 16);
706                 cur = delim + 1;
707                 np->remote_mac[5] = simple_strtol(cur, NULL, 16);
708         }
709
710         netpoll_print_options(np);
711
712         return 0;
713
714  parse_failed:
715         printk(KERN_INFO "%s: couldn't parse config at '%s'!\n",
716                np->name, cur);
717         return -1;
718 }
719
720 int netpoll_setup(struct netpoll *np)
721 {
722         struct net_device *ndev = NULL;
723         struct in_device *in_dev;
724         struct netpoll_info *npinfo;
725         struct netpoll *npe, *tmp;
726         unsigned long flags;
727         int err;
728
729         if (np->dev_name)
730                 ndev = dev_get_by_name(&init_net, np->dev_name);
731         if (!ndev) {
732                 printk(KERN_ERR "%s: %s doesn't exist, aborting.\n",
733                        np->name, np->dev_name);
734                 return -ENODEV;
735         }
736
737         np->dev = ndev;
738         if (!ndev->npinfo) {
739                 npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL);
740                 if (!npinfo) {
741                         err = -ENOMEM;
742                         goto put;
743                 }
744
745                 npinfo->rx_flags = 0;
746                 INIT_LIST_HEAD(&npinfo->rx_np);
747
748                 spin_lock_init(&npinfo->rx_lock);
749                 skb_queue_head_init(&npinfo->arp_tx);
750                 skb_queue_head_init(&npinfo->txq);
751                 INIT_DELAYED_WORK(&npinfo->tx_work, queue_process);
752
753                 atomic_set(&npinfo->refcnt, 1);
754         } else {
755                 npinfo = ndev->npinfo;
756                 atomic_inc(&npinfo->refcnt);
757         }
758
759         if (!ndev->netdev_ops->ndo_poll_controller) {
760                 printk(KERN_ERR "%s: %s doesn't support polling, aborting.\n",
761                        np->name, np->dev_name);
762                 err = -ENOTSUPP;
763                 goto release;
764         }
765
766         if (!netif_running(ndev)) {
767                 unsigned long atmost, atleast;
768
769                 printk(KERN_INFO "%s: device %s not up yet, forcing it\n",
770                        np->name, np->dev_name);
771
772                 rtnl_lock();
773                 err = dev_open(ndev);
774                 rtnl_unlock();
775
776                 if (err) {
777                         printk(KERN_ERR "%s: failed to open %s\n",
778                                np->name, ndev->name);
779                         goto release;
780                 }
781
782                 atleast = jiffies + HZ/10;
783                 atmost = jiffies + carrier_timeout * HZ;
784                 while (!netif_carrier_ok(ndev)) {
785                         if (time_after(jiffies, atmost)) {
786                                 printk(KERN_NOTICE
787                                        "%s: timeout waiting for carrier\n",
788                                        np->name);
789                                 break;
790                         }
791                         msleep(1);
792                 }
793
794                 /* If carrier appears to come up instantly, we don't
795                  * trust it and pause so that we don't pump all our
796                  * queued console messages into the bitbucket.
797                  */
798
799                 if (time_before(jiffies, atleast)) {
800                         printk(KERN_NOTICE "%s: carrier detect appears"
801                                " untrustworthy, waiting 4 seconds\n",
802                                np->name);
803                         msleep(4000);
804                 }
805         }
806
807         if (!np->local_ip) {
808                 rcu_read_lock();
809                 in_dev = __in_dev_get_rcu(ndev);
810
811                 if (!in_dev || !in_dev->ifa_list) {
812                         rcu_read_unlock();
813                         printk(KERN_ERR "%s: no IP address for %s, aborting\n",
814                                np->name, np->dev_name);
815                         err = -EDESTADDRREQ;
816                         goto release;
817                 }
818
819                 np->local_ip = in_dev->ifa_list->ifa_local;
820                 rcu_read_unlock();
821                 printk(KERN_INFO "%s: local IP %pI4\n", np->name, &np->local_ip);
822         }
823
824         if (np->rx_hook) {
825                 spin_lock_irqsave(&npinfo->rx_lock, flags);
826                 npinfo->rx_flags |= NETPOLL_RX_ENABLED;
827                 list_add_tail(&np->rx, &npinfo->rx_np);
828                 spin_unlock_irqrestore(&npinfo->rx_lock, flags);
829         }
830
831         /* fill up the skb queue */
832         refill_skbs();
833
834         /* last thing to do is link it to the net device structure */
835         ndev->npinfo = npinfo;
836
837         /* avoid racing with NAPI reading npinfo */
838         synchronize_rcu();
839
840         return 0;
841
842  release:
843         if (!ndev->npinfo) {
844                 spin_lock_irqsave(&npinfo->rx_lock, flags);
845                 list_for_each_entry_safe(npe, tmp, &npinfo->rx_np, rx) {
846                         npe->dev = NULL;
847                 }
848                 spin_unlock_irqrestore(&npinfo->rx_lock, flags);
849
850                 kfree(npinfo);
851         }
852 put:
853         dev_put(ndev);
854         return err;
855 }
856
857 static int __init netpoll_init(void)
858 {
859         skb_queue_head_init(&skb_pool);
860         return 0;
861 }
862 core_initcall(netpoll_init);
863
864 void netpoll_cleanup(struct netpoll *np)
865 {
866         struct netpoll_info *npinfo;
867         unsigned long flags;
868
869         if (np->dev) {
870                 npinfo = np->dev->npinfo;
871                 if (npinfo) {
872                         if (!list_empty(&npinfo->rx_np)) {
873                                 spin_lock_irqsave(&npinfo->rx_lock, flags);
874                                 list_del(&np->rx);
875                                 if (list_empty(&npinfo->rx_np))
876                                         npinfo->rx_flags &= ~NETPOLL_RX_ENABLED;
877                                 spin_unlock_irqrestore(&npinfo->rx_lock, flags);
878                         }
879
880                         if (atomic_dec_and_test(&npinfo->refcnt)) {
881                                 skb_queue_purge(&npinfo->arp_tx);
882                                 skb_queue_purge(&npinfo->txq);
883                                 cancel_rearming_delayed_work(&npinfo->tx_work);
884
885                                 /* clean after last, unfinished work */
886                                 __skb_queue_purge(&npinfo->txq);
887                                 kfree(npinfo);
888                                 np->dev->npinfo = NULL;
889                         }
890                 }
891
892                 dev_put(np->dev);
893         }
894
895         np->dev = NULL;
896 }
897
898 int netpoll_trap(void)
899 {
900         return atomic_read(&trapped);
901 }
902
903 void netpoll_set_trap(int trap)
904 {
905         if (trap)
906                 atomic_inc(&trapped);
907         else
908                 atomic_dec(&trapped);
909 }
910
911 EXPORT_SYMBOL(netpoll_set_trap);
912 EXPORT_SYMBOL(netpoll_trap);
913 EXPORT_SYMBOL(netpoll_print_options);
914 EXPORT_SYMBOL(netpoll_parse_options);
915 EXPORT_SYMBOL(netpoll_setup);
916 EXPORT_SYMBOL(netpoll_cleanup);
917 EXPORT_SYMBOL(netpoll_send_udp);
918 EXPORT_SYMBOL(netpoll_poll);