staging: Allow sharing xvmalloc for zram and zcache
authorNitin Gupta <ngupta@vflare.org>
Fri, 18 Feb 2011 22:33:18 +0000 (17:33 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 23 Feb 2011 22:02:56 +0000 (14:02 -0800)
Both zram and zcache use xvmalloc allocator. If xvmalloc
is compiled separately for both of them, we will get linker
error if they are both selected as "built-in". We can also
get linker error regarding missing xvmalloc symbols if zram
is not built.

So, we now compile xvmalloc separately and export its symbols
which are then used by both of zram and zcache.

Signed-off-by: Nitin Gupta <ngupta@vflare.org>
Acked-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/Makefile
drivers/staging/zcache/Makefile
drivers/staging/zram/Kconfig
drivers/staging/zram/Makefile
drivers/staging/zram/xvmalloc.c

index 3519e5703d8581742333738f2590383f0392a697..dcd47dba0e9ae3b62871cf0662db4071fc5e02c2 100644 (file)
@@ -45,6 +45,7 @@ obj-$(CONFIG_DX_SEP)            += sep/
 obj-$(CONFIG_IIO)              += iio/
 obj-$(CONFIG_CS5535_GPIO)      += cs5535_gpio/
 obj-$(CONFIG_ZRAM)             += zram/
+obj-$(CONFIG_XVMALLOC)         += zram/
 obj-$(CONFIG_ZCACHE)           += zcache/
 obj-$(CONFIG_WLAGS49_H2)       += wlags49_h2/
 obj-$(CONFIG_WLAGS49_H25)      += wlags49_h25/
index 7f64de4dff3bf9db80e8c40f6c952541feac3f0c..f5ec64f94470f7311989a2d4c503934986a6df3b 100644 (file)
@@ -1 +1,3 @@
-obj-$(CONFIG_ZCACHE)   +=      zcache.o tmem.o
+zcache-y       :=      tmem.o
+
+obj-$(CONFIG_ZCACHE)   +=      zcache.o
index 2f3b484ce5a453f2324230981a5b825ec7546f79..3bec4dba3fe5d656681e8365734beb172a27ac12 100644 (file)
@@ -1,6 +1,11 @@
+config XVMALLOC
+       bool
+       default n
+
 config ZRAM
        tristate "Compressed RAM block device support"
        depends on BLOCK && SYSFS
+       select XVMALLOC
        select LZO_COMPRESS
        select LZO_DECOMPRESS
        default n
index b1709c57f636ac3704fd54259bfb5cc7ef2fcb5f..2a6d3213a75644f2e3df419e8680b64b3b540fec 100644 (file)
@@ -1,3 +1,4 @@
-zram-y :=      zram_drv.o zram_sysfs.o xvmalloc.o
+zram-y :=      zram_drv.o zram_sysfs.o
 
 obj-$(CONFIG_ZRAM)     +=      zram.o
+obj-$(CONFIG_XVMALLOC) +=      xvmalloc.o
\ No newline at end of file
index ae0623a65ab9c2306dd097c4f3fb93ed53090a2f..1f9c5082b6d5dc7ac9e8c47422fa574e7961ebf6 100644 (file)
@@ -14,6 +14,8 @@
 #define DEBUG
 #endif
 
+#include <linux/module.h>
+#include <linux/kernel.h>
 #include <linux/bitops.h>
 #include <linux/errno.h>
 #include <linux/highmem.h>
@@ -315,11 +317,13 @@ struct xv_pool *xv_create_pool(void)
 
        return pool;
 }
+EXPORT_SYMBOL_GPL(xv_create_pool);
 
 void xv_destroy_pool(struct xv_pool *pool)
 {
        kfree(pool);
 }
+EXPORT_SYMBOL_GPL(xv_destroy_pool);
 
 /**
  * xv_malloc - Allocate block of given size from pool.
@@ -408,6 +412,7 @@ int xv_malloc(struct xv_pool *pool, u32 size, struct page **page,
 
        return 0;
 }
+EXPORT_SYMBOL_GPL(xv_malloc);
 
 /*
  * Free block identified with <page, offset>
@@ -484,6 +489,7 @@ void xv_free(struct xv_pool *pool, struct page *page, u32 offset)
        put_ptr_atomic(page_start, KM_USER0);
        spin_unlock(&pool->lock);
 }
+EXPORT_SYMBOL_GPL(xv_free);
 
 u32 xv_get_object_size(void *obj)
 {
@@ -492,6 +498,7 @@ u32 xv_get_object_size(void *obj)
        blk = (struct block_header *)((char *)(obj) - XV_ALIGN);
        return blk->size;
 }
+EXPORT_SYMBOL_GPL(xv_get_object_size);
 
 /*
  * Returns total memory used by allocator (userdata + metadata)
@@ -500,3 +507,4 @@ u64 xv_get_total_size_bytes(struct xv_pool *pool)
 {
        return pool->total_pages << PAGE_SHIFT;
 }
+EXPORT_SYMBOL_GPL(xv_get_total_size_bytes);