fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / xen / core / skbuff.c
index f38f3cf..eebcb4a 100644 (file)
@@ -1,5 +1,4 @@
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/version.h>
 #include <linux/kernel.h>
 #include <asm/hypervisor.h>
 
 /* Referenced in netback.c. */
-/*static*/ kmem_cache_t *skbuff_cachep;
+/*static*/ struct kmem_cache *skbuff_cachep;
 EXPORT_SYMBOL(skbuff_cachep);
 
-#define MAX_SKBUFF_ORDER 4
-static kmem_cache_t *skbuff_order_cachep[MAX_SKBUFF_ORDER + 1];
+/* Allow up to 64kB or page-sized packets (whichever is greater). */
+#if PAGE_SHIFT < 16
+#define MAX_SKBUFF_ORDER (16 - PAGE_SHIFT)
+#else
+#define MAX_SKBUFF_ORDER 0
+#endif
+static struct kmem_cache *skbuff_order_cachep[MAX_SKBUFF_ORDER + 1];
 
 static struct {
        int size;
-       kmem_cache_t *cachep;
+       struct kmem_cache *cachep;
 } skbuff_small[] = { { 512, NULL }, { 2048, NULL } };
 
 struct sk_buff *__alloc_skb(unsigned int length, gfp_t gfp_mask,
-                           int fclone)
+                           int fclone, int node)
 {
        int order, i;
-       kmem_cache_t *cachep;
+       struct kmem_cache *cachep;
 
        length = SKB_DATA_ALIGN(length) + sizeof(struct skb_shared_info);
 
@@ -74,7 +78,7 @@ struct sk_buff *__dev_alloc_skb(unsigned int length, gfp_t gfp_mask)
        return skb;
 }
 
-static void skbuff_ctor(void *buf, kmem_cache_t *cachep, unsigned long unused)
+static void skbuff_ctor(void *buf, struct kmem_cache *cachep, unsigned long unused)
 {
        int order = 0;
 
@@ -89,7 +93,7 @@ static void skbuff_ctor(void *buf, kmem_cache_t *cachep, unsigned long unused)
        scrub_pages(buf, 1 << order);
 }
 
-static void skbuff_dtor(void *buf, kmem_cache_t *cachep, unsigned long unused)
+static void skbuff_dtor(void *buf, struct kmem_cache *cachep, unsigned long unused)
 {
        int order = 0;
 
@@ -121,8 +125,7 @@ static int __init skbuff_init(void)
        for (order = 0; order <= MAX_SKBUFF_ORDER; order++) {
                size = PAGE_SIZE << order;
                sprintf(name[order], "xen-skb-%lu", size);
-               if (is_running_on_xen() &&
-                   (xen_start_info->flags & SIF_PRIVILEGED))
+               if (is_running_on_xen() && is_initial_xendomain())
                        skbuff_order_cachep[order] = kmem_cache_create(
                                name[order], size, size, 0,
                                skbuff_ctor, skbuff_dtor);