Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c8bb7aa authored by Nitin Gupta's avatar Nitin Gupta Committed by Greg Kroah-Hartman
Browse files

staging: Allow sharing xvmalloc for zram and zcache



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: default avatarNitin Gupta <ngupta@vflare.org>
Acked-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 5caf8fca
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ obj-$(CONFIG_DX_SEP) += sep/
obj-$(CONFIG_IIO)		+= iio/
obj-$(CONFIG_IIO)		+= iio/
obj-$(CONFIG_CS5535_GPIO)	+= cs5535_gpio/
obj-$(CONFIG_CS5535_GPIO)	+= cs5535_gpio/
obj-$(CONFIG_ZRAM)		+= zram/
obj-$(CONFIG_ZRAM)		+= zram/
obj-$(CONFIG_XVMALLOC)		+= zram/
obj-$(CONFIG_ZCACHE)		+= zcache/
obj-$(CONFIG_ZCACHE)		+= zcache/
obj-$(CONFIG_WLAGS49_H2)	+= wlags49_h2/
obj-$(CONFIG_WLAGS49_H2)	+= wlags49_h2/
obj-$(CONFIG_WLAGS49_H25)	+= wlags49_h25/
obj-$(CONFIG_WLAGS49_H25)	+= wlags49_h25/
+3 −1
Original line number Original line Diff line number Diff line
obj-$(CONFIG_ZCACHE)	+=	zcache.o tmem.o
zcache-y	:=	tmem.o

obj-$(CONFIG_ZCACHE)	+=	zcache.o
+5 −0
Original line number Original line Diff line number Diff line
config XVMALLOC
	bool
	default n

config ZRAM
config ZRAM
	tristate "Compressed RAM block device support"
	tristate "Compressed RAM block device support"
	depends on BLOCK && SYSFS
	depends on BLOCK && SYSFS
	select XVMALLOC
	select LZO_COMPRESS
	select LZO_COMPRESS
	select LZO_DECOMPRESS
	select LZO_DECOMPRESS
	default n
	default n
+2 −1
Original line number Original line Diff line number Diff line
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_ZRAM)	+=	zram.o
obj-$(CONFIG_XVMALLOC)	+=	xvmalloc.o
 No newline at end of file
+8 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,8 @@
#define DEBUG
#define DEBUG
#endif
#endif


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/bitops.h>
#include <linux/bitops.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <linux/highmem.h>
#include <linux/highmem.h>
@@ -315,11 +317,13 @@ struct xv_pool *xv_create_pool(void)


	return pool;
	return pool;
}
}
EXPORT_SYMBOL_GPL(xv_create_pool);


void xv_destroy_pool(struct xv_pool *pool)
void xv_destroy_pool(struct xv_pool *pool)
{
{
	kfree(pool);
	kfree(pool);
}
}
EXPORT_SYMBOL_GPL(xv_destroy_pool);


/**
/**
 * xv_malloc - Allocate block of given size from 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;
	return 0;
}
}
EXPORT_SYMBOL_GPL(xv_malloc);


/*
/*
 * Free block identified with <page, offset>
 * 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);
	put_ptr_atomic(page_start, KM_USER0);
	spin_unlock(&pool->lock);
	spin_unlock(&pool->lock);
}
}
EXPORT_SYMBOL_GPL(xv_free);


u32 xv_get_object_size(void *obj)
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);
	blk = (struct block_header *)((char *)(obj) - XV_ALIGN);
	return blk->size;
	return blk->size;
}
}
EXPORT_SYMBOL_GPL(xv_get_object_size);


/*
/*
 * Returns total memory used by allocator (userdata + metadata)
 * 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;
	return pool->total_pages << PAGE_SHIFT;
}
}
EXPORT_SYMBOL_GPL(xv_get_total_size_bytes);