This commit was generated by cvs2svn to compensate for changes in r925,
[linux-2.6.git] / arch / xen / kernel / skbuff.c
1
2 #include <linux/config.h>
3 #include <linux/module.h>
4 #include <linux/version.h>
5 #include <linux/kernel.h>
6 #include <linux/sched.h>
7 #include <linux/slab.h>
8 #include <linux/string.h>
9 #include <linux/errno.h>
10 #include <linux/netdevice.h>
11 #include <linux/inetdevice.h>
12 #include <linux/etherdevice.h>
13 #include <linux/skbuff.h>
14 #include <linux/init.h>
15 #include <asm/io.h>
16 #include <asm/page.h>
17
18 EXPORT_SYMBOL(__dev_alloc_skb);
19
20 /* Referenced in netback.c. */
21 /*static*/ kmem_cache_t *skbuff_cachep;
22
23 /* Size must be cacheline-aligned (alloc_skb uses SKB_DATA_ALIGN). */
24 #define XEN_SKB_SIZE \
25     ((PAGE_SIZE - sizeof(struct skb_shared_info)) & ~(SMP_CACHE_BYTES - 1))
26
27 struct sk_buff *__dev_alloc_skb(unsigned int length, int gfp_mask)
28 {
29     struct sk_buff *skb;
30     skb = alloc_skb_from_cache(skbuff_cachep, length + 16, gfp_mask);
31     if ( likely(skb != NULL) )
32         skb_reserve(skb, 16);
33     return skb;
34 }
35
36 static void skbuff_ctor(void *buf, kmem_cache_t *cachep, unsigned long unused)
37 {
38     scrub_pages(buf, 1);
39 }
40
41 static int __init skbuff_init(void)
42 {
43     skbuff_cachep = kmem_cache_create(
44         "xen-skb", PAGE_SIZE, PAGE_SIZE, 0, skbuff_ctor, NULL);
45     return 0;
46 }
47 __initcall(skbuff_init);