X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fxen%2Fcore%2Fskbuff.c;h=eebcb4adcb278acdc648e976841fdff7c278e063;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=f38f3cffedecb93e6ff4aeb658ff5f4d2a93fb56;hpb=1db395853d4f30d6120458bd279ede1f882a8525;p=linux-2.6.git diff --git a/drivers/xen/core/skbuff.c b/drivers/xen/core/skbuff.c index f38f3cffe..eebcb4adc 100644 --- a/drivers/xen/core/skbuff.c +++ b/drivers/xen/core/skbuff.c @@ -1,5 +1,4 @@ -#include #include #include #include @@ -15,22 +14,27 @@ #include /* 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);