diff -Naur linux-2.6.28/mm/tmem.c linux-2.6.28-tmem/mm/tmem.c --- linux-2.6.28/mm/tmem.c 1969-12-31 17:00:00.000000000 -0700 +++ linux-2.6.28-tmem/mm/tmem.c 2009-01-08 13:34:50.000000000 -0700 @@ -0,0 +1,47 @@ +/* + * Transcendent memory + * + * Copyright (C) 2008 Dan Magenheimer, Oracle Corp. + */ + +#include +#include /* for xen_pv_domain */ +#include "tmem.h" + +#ifdef CONFIG_XEN +extern int xen_tmem_op(uint32_t tmem_cmd, uint32_t tmem_pool, uint64_t object, + uint32_t index, unsigned long gmfn, uint32_t tmem_offset, + uint32_t pfn_offset, uint32_t len ); +extern int xen_tmem_new_pool(uint32_t tmem_cmd, uint64_t uuid_lo, + uint64_t uuid_hi, uint32_t flags); + +int tmem_op(uint32_t tmem_cmd, uint32_t tmem_pool, uint64_t object, + uint32_t index, unsigned long gmfn, uint32_t tmem_offset, + uint32_t pfn_offset, uint32_t len ) +{ + if (!xen_pv_domain()) return 0; + return xen_tmem_op(tmem_cmd,tmem_pool,object,index,gmfn, + tmem_offset,pfn_offset,len); +} + +int tmem_new_pool(uint64_t uuid_lo, uint64_t uuid_hi, uint32_t flags) +{ +//printk("tmem_new_pool(%llu,%llu,%d) called...",uuid_lo,uuid_hi,flags); + if (!xen_pv_domain()) return 0; + flags |= (PAGE_SHIFT - 12) << TMEM_POOL_PAGESIZE_SHIFT; + return xen_tmem_new_pool(TMEM_NEW_POOL, uuid_lo, uuid_hi, flags); +//printk("returns %d\n",ret); +} +#else +int tmem_op(uint32_t tmem_cmd, uint32_t tmem_pool, uint64_t object, + uint32_t index, unsigned long gmfn, uint32_t tmem_offset, + uint32_t pfn_offset, uint32_t len ); +{ + return 0; +} + +int tmem_new_pool(uint64_t uuid_lo, uint64_t uuid_hi, uint32_t flags) +{ + return 0; +} +#endif diff -Naur linux-2.6.28/mm/tmem.h linux-2.6.28-tmem/mm/tmem.h --- linux-2.6.28/mm/tmem.h 1969-12-31 17:00:00.000000000 -0700 +++ linux-2.6.28-tmem/mm/tmem.h 2009-01-05 16:57:43.000000000 -0700 @@ -0,0 +1,48 @@ +/* + * linux/mm/tmem.h + * + * Copyright (C) 2008 Dan Magenheimer, Oracle Corp. + */ + +extern int tmem_op(uint32_t tmem_cmd, uint32_t pool_id, uint64_t object, + uint32_t index, unsigned long gmfn, uint32_t tmem_offset, + uint32_t pfn_offset, uint32_t len ); +extern int tmem_new_pool(uint64_t uuid_lo,uint64_t uuid_hi,uint32_t flags); + +#define TMEM_CONTROL 0 +#define TMEM_NEW_POOL 1 +#define TMEM_DESTROY_POOL 2 +#define TMEM_NEW_PAGE 3 +#define TMEM_PUT_PAGE 4 +#define TMEM_GET_PAGE 5 +#define TMEM_FLUSH_PAGE 6 +#define TMEM_FLUSH_OBJECT 7 +#define TMEM_READ 8 +#define TMEM_WRITE 9 +#define TMEM_XCHG 10 + +#define TMEM_POOL_PERSIST 1 +#define TMEM_POOL_SHARED 2 + +#define TMEM_POOL_PAGESIZE_SHIFT 4 + +#ifndef CONFIG_XEN +struct tmem_op { + uint32_t cmd; + int32_t pool_id; /* private > 0; shared < 0; 0 is invalid */ + union { + struct { /* for cmd == TMEM_NEW_POOL */ + uint64_t uuid[2]; + uint32_t flags; + }; + struct { + uint64_t object; + uint32_t index; + uint32_t tmem_offset; + uint32_t pfn_offset; + uint32_t len; + unsigned long pfn; /* page frame */ + }; + }; +}; +#endif