cmm_smp_mb();
for (;;) {
- /* search */
+ /* search bottom of range */
for (i = 0; i < global_items; i++) {
rcu_read_lock();
node = rcu_rbtree_search(&rbtree,
rcu_read_unlock();
}
- /* search range */
+ /* search end of range */
+ for (i = 0; i < global_items; i++) {
+ rcu_read_lock();
+ node = rcu_rbtree_search(&rbtree,
+ rcu_dereference(rbtree.root),
+ (void*) ((unsigned long) global_key[i] + 3));
+ assert(!rcu_rbtree_is_nil(&rbtree, node));
+ rcu_read_unlock();
+ }
+
+ /* search range (middle) */
for (i = 0; i < global_items; i++) {
rcu_read_lock();
node = rcu_rbtree_search_range(&rbtree,
rcu_dereference(rbtree.root),
- global_key[i],
- (void*) ((unsigned long) global_key[i] + 1));
+ (void*) ((unsigned long) global_key[i] + 1),
+ (void*) ((unsigned long) global_key[i] + 2));
assert(!rcu_rbtree_is_nil(&rbtree, node));
rcu_read_unlock();
}
for (i = 0; i < NR_RAND; i++) {
node = rbtree_alloc();
- key[i] = (void *)(unsigned long)(rand() % 2048);
+ //key[i] = (void *)(unsigned long)(rand() % 2048);
+ key[i] = (void *)(unsigned long)((rand() * 4) % 2048);
//For more collisions
//key[i] = (void *)(unsigned long)(rand() % 6);
node->begin = key[i];
- node->end = (void *)((unsigned long) key[i] + 1);
+ //node->end = (void *)((unsigned long) key[i] + 4);
+ node->end = (void *)((unsigned long) key[i] + 4);
rcu_read_lock();
rcu_rbtree_insert(&rbtree, node);
rcu_read_unlock();
/* Insert items looked up by readers */
for (i = 0; i < global_items; i++) {
node = rbtree_alloc();
- global_key[i] = (void *)(unsigned long)(rand() % 2048);
+ global_key[i] = (void *)(unsigned long)((rand() * 4) % 2048);
+ //global_key[i] = (void *)(unsigned long)(rand() % 2048);
//For more collisions
global_key[i] = (void *)(unsigned long)(rand() % 6);
node->begin = global_key[i];
- node->end = (void *)((unsigned long) global_key[i] + 1);
+ //node->end = (void *)((unsigned long) global_key[i] + 1);
+ node->end = (void *)((unsigned long) global_key[i] + 4);
rcu_rbtree_insert(&rbtree, node);
}
rcu_read_unlock();