[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 00/12] RCU, scsi, modules, icount changes for 2015
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL v2 00/12] RCU, scsi, modules, icount changes for 2015-01-30 |
Date: |
Mon, 2 Feb 2015 17:29:57 +0100 |
The following changes since commit 83761b9244ad2ed39d3cfabe8a0e901ab906f7bf:
Merge remote-tracking branch 'remotes/riku/tags/pull-linux-user-20150127'
into staging (2015-01-27 22:25:56 +0000)
are available in the git repository at:
git://github.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to 42b5c7a09801805278e5ac40c0ccaf137981ecb6:
configure: Default to enable module build (2015-02-02 16:55:11 +0100)
----------------------------------------------------------------
The important bits here are the first part of RCU and enabling
modules by default. They have been tested with Travis for a few
days now, and things seem okay.
v1->v2 changes are the new qemu-thread patch to fix Mac OS X,
and cleaning up warnings.
----------------------------------------------------------------
Fam Zheng (2):
scsi: Fix scsi_req_cancel_async for no aiocb req
configure: Default to enable module build
Jan Kiszka (1):
memory: remove assertion on memory_region_destroy
Paolo Bonzini (9):
qemu-thread: fix qemu_event without futexes
rcu: add rcu library
rcu: add rcutorture
rcu: allow nesting of rcu_read_lock/rcu_read_unlock
rcu: add call_rcu
memory: protect current_map by RCU
memory: avoid ref/unref in memory_region_find
cpu-exec: simplify align_clocks
cpu-exec: simplify init_delay_params
.travis.yml | 2 +-
configure | 95 +++++++---
cpu-exec.c | 9 +-
cpus.c | 17 --
docs/rcu.txt | 387 +++++++++++++++++++++++++++++++++++++++
hw/9pfs/virtio-9p-synth.c | 1 +
hw/scsi/scsi-bus.c | 2 +
include/exec/memory.h | 5 +
include/qemu/atomic.h | 61 +++++++
include/qemu/queue.h | 13 ++
include/qemu/rcu.h | 147 +++++++++++++++
include/qemu/thread.h | 3 -
include/qemu/timer.h | 1 -
memory.c | 65 +++----
tests/Makefile | 7 +-
tests/rcutorture.c | 451 ++++++++++++++++++++++++++++++++++++++++++++++
util/Makefile.objs | 1 +
util/qemu-thread-posix.c | 2 +
util/rcu.c | 291 ++++++++++++++++++++++++++++++
19 files changed, 1465 insertions(+), 95 deletions(-)
create mode 100644 docs/rcu.txt
create mode 100644 include/qemu/rcu.h
create mode 100644 tests/rcutorture.c
create mode 100644 util/rcu.c
--
1.8.3.1
diff --git a/configure b/configure
index 2c3a444..a9ae57a 100755
--- a/configure
+++ b/configure
@@ -2733,8 +2733,8 @@ fi
glib_pkg_config()
{
if $pkg_config --atleast-version=$glib_req_ver $1; then
- local probe_cflags=$($pkg_config --cflags $1)
- local probe_libs=$($pkg_config --libs $1)
+ local probe_cflags="$($pkg_config --cflags $1)"
+ local probe_libs="$($pkg_config --libs $1)"
CFLAGS="$probe_cflags $CFLAGS"
LIBS="$probe_libs $LIBS"
libs_qga="$probe_libs $libs_qga"
diff --git a/tests/rcutorture.c b/tests/rcutorture.c
index 93ec1b3..60a2ccf 100644
--- a/tests/rcutorture.c
+++ b/tests/rcutorture.c
@@ -168,7 +168,7 @@ static void perftestrun(int nthreads, int duration, int
nreaders, int nupdaters)
g_usleep(1000);
}
goflag = GOFLAG_RUN;
- sleep(duration);
+ g_usleep(duration * G_USEC_PER_SEC);
goflag = GOFLAG_STOP;
wait_all_threads();
printf("n_reads: %lld n_updates: %ld nreaders: %d nupdaters: %d
duration: %d\n",
@@ -241,7 +241,7 @@ static void *rcu_read_stress_test(void *arg)
struct rcu_stress *p;
int pc;
long long n_reads_local = 0;
- volatile int garbage;
+ volatile int garbage = 0;
rcu_register_thread();
@@ -300,10 +300,11 @@ static void *rcu_update_stress_test(void *arg)
p->mbtest = 1;
atomic_rcu_set(&rcu_stress_current, p);
rcu_stress_idx = i;
- for (i = 0; i < RCU_STRESS_PIPE_LEN; i++)
+ for (i = 0; i < RCU_STRESS_PIPE_LEN; i++) {
if (i != rcu_stress_idx) {
rcu_stress_array[i].pipe_count++;
}
+ }
synchronize_rcu();
n_updates++;
}
@@ -344,7 +345,7 @@ static void stresstest(int nreaders, int duration)
create_thread(rcu_fake_update_stress_test);
}
goflag = GOFLAG_RUN;
- sleep(duration);
+ g_usleep(duration * G_USEC_PER_SEC);
goflag = GOFLAG_STOP;
wait_all_threads();
printf("n_reads: %lld n_updates: %ld n_mberror: %d\n",
@@ -374,7 +375,7 @@ static void gtest_stress(int nreaders, int duration)
create_thread(rcu_fake_update_stress_test);
}
goflag = GOFLAG_RUN;
- sleep(duration);
+ g_usleep(duration * G_USEC_PER_SEC);
goflag = GOFLAG_STOP;
wait_all_threads();
g_assert_cmpint(n_mberror, ==, 0);
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 41cb23d..50a29d8 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -307,11 +307,13 @@ static inline void futex_wait(QemuEvent *ev, unsigned val)
#else
static inline void futex_wake(QemuEvent *ev, int n)
{
+ pthread_mutex_lock(&ev->lock);
if (n == 1) {
pthread_cond_signal(&ev->cond);
} else {
pthread_cond_broadcast(&ev->cond);
}
+ pthread_mutex_unlock(&ev->lock);
}
static inline void futex_wait(QemuEvent *ev, unsigned val)
- [Qemu-devel] [PULL v2 00/12] RCU, scsi, modules, icount changes for 2015-01-30,
Paolo Bonzini <=