/* hardcoded number of CPUs */
#define NR_CPUS 16384
+/* For testing */
+#define POISON_FREE
+
+#ifdef POISON_FREE
+#define poison_free(ptr) \
+ do { \
+ memset(ptr, 0x42, sizeof(*(ptr))); \
+ free(ptr); \
+ } while (0)
+#else
+#define poison_free(ptr) free(ptr)
+#endif
+
+
+
#if defined(_syscall0)
_syscall0(pid_t, gettid)
#elif defined(__NR_gettid)
static unsigned long init_hash_size = DEFAULT_HASH_SIZE;
static unsigned long init_populate;
static unsigned long rand_pool = DEFAULT_RAND_POOL;
+static int opt_auto_resize;
static int add_only, add_unique;
static inline void loop_sleep(unsigned long l)
printf(" [-u] Uniquify add.");
printf(" [-i] Add only (no removal).");
printf(" [-k nr_nodes] Number of nodes to insert initially.");
+ printf(" [-A] Automatically resize hash table.");
printf("\n");
}
case 'k':
init_populate = atol(argv[++i]);
break;
+ case 'A':
+ opt_auto_resize = 1;
+ break;
}
}
count_reader = malloc(sizeof(*count_reader) * nr_readers);
count_writer = malloc(sizeof(*count_writer) * nr_writers);
test_ht = cds_lfht_new(test_hash, test_compare, 0x42UL,
- init_hash_size, call_rcu, synchronize_rcu);
+ init_hash_size,
+ opt_auto_resize ? CDS_LFHT_AUTO_RESIZE : 0,
+ call_rcu, synchronize_rcu, rcu_read_lock,
+ rcu_read_unlock);
ret = populate_hash();
assert(!ret);
err = create_all_cpu_call_rcu_data(0);