Update documentation on net engine port usage
[fio.git] / smalloc.c
index b0173739b49c18254e5a425d58d09e9369a0792e..d0f732baee6cc6515e26f554432fae87958c0bf6 100644 (file)
--- 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