Skip to content

Commit

Permalink
staging: Allow sharing xvmalloc for zram and zcache
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nitin Gupta authored and Greg Kroah-Hartman committed Feb 23, 2011
1 parent 5caf8fc commit 3c8bb7a
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 2 deletions.
1 change: 1 addition & 0 deletions drivers/staging/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
4 changes: 3 additions & 1 deletion drivers/staging/zcache/Makefile
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
obj-$(CONFIG_ZCACHE) += zcache.o tmem.o
zcache-y := tmem.o

obj-$(CONFIG_ZCACHE) += zcache.o
5 changes: 5 additions & 0 deletions drivers/staging/zram/Kconfig
Original file line number Diff line number Diff line change
@@ -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
Expand Down
3 changes: 2 additions & 1 deletion drivers/staging/zram/Makefile
Original file line number Diff line number Diff line change
@@ -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
8 changes: 8 additions & 0 deletions drivers/staging/zram/xvmalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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>
Expand Down Expand Up @@ -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)
{
Expand All @@ -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)
Expand All @@ -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);

0 comments on commit 3c8bb7a

Please sign in to comment.