Index: uspace/lib/c/generic/fibril.c
===================================================================
--- uspace/lib/c/generic/fibril.c	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/generic/fibril.c	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -51,7 +51,4 @@
 #include "private/fibril.h"
 
-#ifdef FUTEX_UPGRADABLE
-#include <rcu.h>
-#endif
 
 /**
@@ -78,8 +75,4 @@
 
 	fibril_t *fibril = fibril_self();
-
-#ifdef FUTEX_UPGRADABLE
-	rcu_register_fibril();
-#endif
 
 	/* Call the implementing function. */
@@ -203,10 +196,4 @@
 		break;
 	}
-
-#ifdef FUTEX_UPGRADABLE
-	if (stype == FIBRIL_FROM_DEAD) {
-		rcu_deregister_fibril();
-	}
-#endif
 
 	/* Swap to the next fibril. */
Index: uspace/lib/c/generic/futex.c
===================================================================
--- uspace/lib/c/generic/futex.c	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/generic/futex.c	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -47,24 +47,4 @@
 }
 
-
-#ifdef FUTEX_UPGRADABLE
-
-int _upgrade_futexes = 0;
-static futex_t upg_and_wait_futex = FUTEX_INITIALIZER;
-
-void futex_upgrade_all_and_wait(void)
-{
-	futex_down(&upg_and_wait_futex);
-
-	if (!_upgrade_futexes) {
-		rcu_assign(_upgrade_futexes, 1);
-		_rcu_synchronize(BM_BLOCK_THREAD);
-	}
-
-	futex_up(&upg_and_wait_futex);
-}
-
-#endif
-
 /** @}
  */
Index: uspace/lib/c/generic/libc.c
===================================================================
--- uspace/lib/c/generic/libc.c	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/generic/libc.c	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -57,8 +57,4 @@
 #include "private/fibril.h"
 
-#ifdef FUTEX_UPGRADABLE
-#include <rcu.h>
-#endif
-
 #ifdef CONFIG_RTLD
 #include <rtld/rtld.h>
@@ -90,9 +86,4 @@
 
 	__tcb_set(fibril->tcb);
-
-
-#ifdef FUTEX_UPGRADABLE
-	rcu_register_fibril();
-#endif
 
 	__async_server_init();
Index: uspace/lib/c/generic/rcu.c
===================================================================
--- uspace/lib/c/generic/rcu.c	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/generic/rcu.c	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -150,11 +150,11 @@
 
 
-static void wait_for_readers(size_t reader_group, blocking_mode_t blocking_mode);
+static void wait_for_readers(size_t reader_group);
 static void force_mb_in_all_threads(void);
 static bool is_preexisting_reader(const fibril_rcu_data_t *fib, size_t group);
 
-static void lock_sync(blocking_mode_t blocking_mode);
+static void lock_sync(void);
 static void unlock_sync(void);
-static void sync_sleep(blocking_mode_t blocking_mode);
+static void sync_sleep(void);
 
 static bool is_in_group(size_t nesting_cnt, size_t group);
@@ -242,5 +242,5 @@
 
 /** Blocks until all preexisting readers exit their critical sections. */
-void _rcu_synchronize(blocking_mode_t blocking_mode)
+void rcu_synchronize(void)
 {
 	assert(!rcu_read_locked());
@@ -252,5 +252,5 @@
 	size_t gp_in_progress = ACCESS_ONCE(rcu.cur_gp);
 
-	lock_sync(blocking_mode);
+	lock_sync();
 
 	/*
@@ -300,5 +300,5 @@
 
 	size_t new_reader_group = get_other_group(rcu.reader_group);
-	wait_for_readers(new_reader_group, blocking_mode);
+	wait_for_readers(new_reader_group);
 
 	/* Separates waiting for readers in new_reader_group from group flip. */
@@ -312,5 +312,5 @@
 	memory_barrier();
 
-	wait_for_readers(old_reader_group, blocking_mode);
+	wait_for_readers(old_reader_group);
 
 	/* MB_FORCE_U  */
@@ -332,5 +332,5 @@
 
 /** Waits for readers of reader_group to exit their readers sections. */
-static void wait_for_readers(size_t reader_group, blocking_mode_t blocking_mode)
+static void wait_for_readers(size_t reader_group)
 {
 	futex_down(&rcu.list_futex);
@@ -346,5 +346,5 @@
 			if (is_preexisting_reader(fib, reader_group)) {
 				futex_up(&rcu.list_futex);
-				sync_sleep(blocking_mode);
+				sync_sleep();
 				futex_down(&rcu.list_futex);
 				/* Break to while loop. */
@@ -361,29 +361,22 @@
 }
 
-static void lock_sync(blocking_mode_t blocking_mode)
+static void lock_sync(void)
 {
 	futex_down(&rcu.sync_lock.futex);
 	if (rcu.sync_lock.locked) {
-		if (blocking_mode == BM_BLOCK_FIBRIL) {
-			blocked_fibril_t blocked_fib;
-			blocked_fib.id = fibril_get_id();
-
-			list_append(&blocked_fib.link, &rcu.sync_lock.blocked_fibrils);
-
-			do {
-				blocked_fib.is_ready = false;
-				futex_up(&rcu.sync_lock.futex);
-				fibril_switch(FIBRIL_TO_MANAGER);
-				futex_down(&rcu.sync_lock.futex);
-			} while (rcu.sync_lock.locked);
-
-			list_remove(&blocked_fib.link);
-			rcu.sync_lock.locked = true;
-		} else {
-			assert(blocking_mode == BM_BLOCK_THREAD);
-			rcu.sync_lock.blocked_thread_cnt++;
+		blocked_fibril_t blocked_fib;
+		blocked_fib.id = fibril_get_id();
+
+		list_append(&blocked_fib.link, &rcu.sync_lock.blocked_fibrils);
+
+		do {
+			blocked_fib.is_ready = false;
 			futex_up(&rcu.sync_lock.futex);
-			futex_down(&rcu.sync_lock.futex_blocking_threads);
-		}
+			fibril_switch(FIBRIL_TO_MANAGER);
+			futex_down(&rcu.sync_lock.futex);
+		} while (rcu.sync_lock.locked);
+
+		list_remove(&blocked_fib.link);
+		rcu.sync_lock.locked = true;
 	} else {
 		rcu.sync_lock.locked = true;
@@ -420,5 +413,5 @@
 }
 
-static void sync_sleep(blocking_mode_t blocking_mode)
+static void sync_sleep(void)
 {
 	assert(rcu.sync_lock.locked);
@@ -428,11 +421,5 @@
 	 */
 	futex_up(&rcu.sync_lock.futex);
-
-	if (blocking_mode == BM_BLOCK_FIBRIL) {
-		async_usleep(RCU_SLEEP_MS * 1000);
-	} else {
-		thread_usleep(RCU_SLEEP_MS * 1000);
-	}
-
+	async_usleep(RCU_SLEEP_MS * 1000);
 	futex_down(&rcu.sync_lock.futex);
 }
Index: uspace/lib/c/generic/thread.c
===================================================================
--- uspace/lib/c/generic/thread.c	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/generic/thread.c	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -48,9 +48,4 @@
 #include "private/fibril.h"
 
-#ifdef FUTEX_UPGRADABLE
-#include <rcu.h>
-#endif
-
-
 /** Main thread function.
  *
@@ -69,9 +64,4 @@
 
 	__tcb_set(fibril->tcb);
-
-#ifdef FUTEX_UPGRADABLE
-	rcu_register_fibril();
-	futex_upgrade_all_and_wait();
-#endif
 
 	uarg->uspace_thread_function(uarg->uspace_thread_arg);
@@ -85,8 +75,4 @@
 	/* If there is a manager, destroy it */
 	async_destroy_manager();
-
-#ifdef FUTEX_UPGRADABLE
-	rcu_deregister_fibril();
-#endif
 
 	fibril_teardown(fibril, false);
Index: uspace/lib/c/include/futex.h
===================================================================
--- uspace/lib/c/include/futex.h	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/include/futex.h	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -42,65 +42,14 @@
 typedef struct futex {
 	atomic_t val;
-#ifdef FUTEX_UPGRADABLE
-	int upgraded;
-#endif
 } futex_t;
-
 
 extern void futex_initialize(futex_t *futex, int value);
 
-#ifdef FUTEX_UPGRADABLE
-#include <rcu.h>
-
-#define FUTEX_INITIALIZE(val) {{ (val) }, 0}
-
-#define futex_lock(fut) \
-({ \
-	rcu_read_lock(); \
-	(fut)->upgraded = rcu_access(_upgrade_futexes); \
-	if ((fut)->upgraded) \
-		(void) futex_down((fut)); \
-})
-
-#define futex_trylock(fut) \
-({ \
-	rcu_read_lock(); \
-	int _upgraded = rcu_access(_upgrade_futexes); \
-	if (_upgraded) { \
-		int _acquired = futex_trydown((fut)); \
-		if (!_acquired) { \
-			rcu_read_unlock(); \
-		} else { \
-			(fut)->upgraded = true; \
-		} \
-		_acquired; \
-	} else { \
-		(fut)->upgraded = false; \
-		1; \
-	} \
-})
-
-#define futex_unlock(fut) \
-({ \
-	if ((fut)->upgraded) \
-		(void) futex_up((fut)); \
-	rcu_read_unlock(); \
-})
-
-extern int _upgrade_futexes;
-
-extern void futex_upgrade_all_and_wait(void);
-
-#else
-
 #define FUTEX_INITIALIZE(val) {{ (val) }}
+#define FUTEX_INITIALIZER     FUTEX_INITIALIZE(1)
 
 #define futex_lock(fut)     (void) futex_down((fut))
 #define futex_trylock(fut)  futex_trydown((fut))
 #define futex_unlock(fut)   (void) futex_up((fut))
-
-#endif
-
-#define FUTEX_INITIALIZER     FUTEX_INITIALIZE(1)
 
 /** Try to down the futex.
Index: uspace/lib/c/include/rcu.h
===================================================================
--- uspace/lib/c/include/rcu.h	(revision d73d9925e37d2f6e26c02f1e021df7095a2d51ac)
+++ uspace/lib/c/include/rcu.h	(revision 3679f51aebe627821a6aa4bbaf7cce97a839ef82)
@@ -92,9 +92,4 @@
 #define rcu_access(ptr) ACCESS_ONCE(ptr)
 
-typedef enum blocking_mode {
-	BM_BLOCK_FIBRIL,
-	BM_BLOCK_THREAD
-} blocking_mode_t;
-
 extern void rcu_register_fibril(void);
 extern void rcu_deregister_fibril(void);
@@ -105,7 +100,5 @@
 extern bool rcu_read_locked(void);
 
-#define rcu_synchronize() _rcu_synchronize(BM_BLOCK_FIBRIL)
-
-extern void _rcu_synchronize(blocking_mode_t);
+extern void rcu_synchronize(void);
 
 #endif
