X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=smalloc.c;h=d0f732baee6cc6515e26f554432fae87958c0bf6;hp=b0173739b49c18254e5a425d58d09e9369a0792e;hb=b492fa3238b11ffeb48d4096a7c37495b45d6710;hpb=237cc3b1e297a9b934a424c6271971b07efc7a66 diff --git a/smalloc.c b/smalloc.c index b0173739..d0f732ba 100644 --- a/smalloc.c +++ b/smalloc.c @@ -16,6 +16,7 @@ #include "mutex.h" #include "arch/arch.h" #include "os/os.h" +#include "smalloc.h" #define SMALLOC_REDZONE /* define to detect memory corruption */ @@ -30,7 +31,7 @@ #define SMALLOC_POST_RED 0x5aa55aa5U unsigned int smalloc_pool_size = INITIAL_SIZE; -const int int_mask = sizeof(int) - 1; +static const int int_mask = sizeof(int) - 1; struct pool { struct fio_mutex *lock; /* protects this pool */ @@ -52,7 +53,7 @@ struct block_hdr { static struct pool mp[MAX_POOLS]; static unsigned int nr_pools; static unsigned int last_pool; -static struct fio_mutex *lock; +static struct fio_rwlock *lock; static inline void pool_lock(struct pool *pool) { @@ -66,22 +67,22 @@ static inline void pool_unlock(struct pool *pool) static inline void global_read_lock(void) { - fio_mutex_down_read(lock); + fio_rwlock_read(lock); } static inline void global_read_unlock(void) { - fio_mutex_up_read(lock); + fio_rwlock_unlock(lock); } static inline void global_write_lock(void) { - fio_mutex_down_write(lock); + fio_rwlock_write(lock); } static inline void global_write_unlock(void) { - fio_mutex_up_write(lock); + fio_rwlock_unlock(lock); } static inline int ptr_valid(struct pool *pool, void *ptr) @@ -179,6 +180,7 @@ static int find_next_zero(int word, int start) static int add_pool(struct pool *pool, unsigned int alloc_size) { int bitmap_blocks; + int mmap_flags; void *ptr; #ifdef SMALLOC_REDZONE @@ -197,8 +199,14 @@ static int add_pool(struct pool *pool, unsigned int alloc_size) pool->nr_blocks = bitmap_blocks; pool->free_blocks = bitmap_blocks * SMALLOC_BPB; - ptr = mmap(NULL, alloc_size, PROT_READ|PROT_WRITE, - MAP_SHARED | OS_MAP_ANON, -1, 0); + mmap_flags = OS_MAP_ANON; +#ifdef CONFIG_ESX + mmap_flags |= MAP_PRIVATE; +#else + mmap_flags |= MAP_SHARED; +#endif + ptr = mmap(NULL, alloc_size, PROT_READ|PROT_WRITE, mmap_flags, -1, 0); + if (ptr == MAP_FAILED) goto out_fail; @@ -223,7 +231,7 @@ void sinit(void) { int ret; - lock = fio_mutex_rw_init(); + lock = fio_rwlock_init(); ret = add_pool(&mp[0], INITIAL_SIZE); assert(!ret); } @@ -248,7 +256,7 @@ void scleanup(void) cleanup_pool(&mp[i]); if (lock) - fio_mutex_remove(lock); + fio_rwlock_remove(lock); } #ifdef SMALLOC_REDZONE