Re: [Qemu-devel] [RFC 2/8] cpus: Move common code out of {async_, }run_on_cpu()

2016-06-27 Thread Alex Bennée

Sergey Fedorov  writes:

> From: Sergey Fedorov 
>
> Move the code common between run_on_cpu() and async_run_on_cpu() into a
> new function queue_work_on_cpu().
>
> Signed-off-by: Sergey Fedorov 
> Signed-off-by: Sergey Fedorov 

Reviewed-by: Alex Bennée 

> ---
>  cpus.c | 42 ++
>  1 file changed, 18 insertions(+), 24 deletions(-)
>
> diff --git a/cpus.c b/cpus.c
> index 049c2d04e150..04687c85bcd4 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -910,6 +910,22 @@ void qemu_init_cpu_loop(void)
>  qemu_thread_get_self(_thread);
>  }
>
> +static void queue_work_on_cpu(CPUState *cpu, struct qemu_work_item *wi)
> +{
> +qemu_mutex_lock(>work_mutex);
> +if (cpu->queued_work_first == NULL) {
> +cpu->queued_work_first = wi;
> +} else {
> +cpu->queued_work_last->next = wi;
> +}
> +cpu->queued_work_last = wi;
> +wi->next = NULL;
> +wi->done = false;
> +qemu_mutex_unlock(>work_mutex);
> +
> +qemu_cpu_kick(cpu);
> +}
> +
>  void run_on_cpu(CPUState *cpu, run_on_cpu_func func, void *data)
>  {
>  struct qemu_work_item wi;
> @@ -923,18 +939,7 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func, 
> void *data)
>  wi.data = data;
>  wi.free = false;
>
> -qemu_mutex_lock(>work_mutex);
> -if (cpu->queued_work_first == NULL) {
> -cpu->queued_work_first = 
> -} else {
> -cpu->queued_work_last->next = 
> -}
> -cpu->queued_work_last = 
> -wi.next = NULL;
> -wi.done = false;
> -qemu_mutex_unlock(>work_mutex);
> -
> -qemu_cpu_kick(cpu);
> +queue_work_on_cpu(cpu, );
>  while (!atomic_mb_read()) {
>  CPUState *self_cpu = current_cpu;
>
> @@ -957,18 +962,7 @@ void async_run_on_cpu(CPUState *cpu, run_on_cpu_func 
> func, void *data)
>  wi->data = data;
>  wi->free = true;
>
> -qemu_mutex_lock(>work_mutex);
> -if (cpu->queued_work_first == NULL) {
> -cpu->queued_work_first = wi;
> -} else {
> -cpu->queued_work_last->next = wi;
> -}
> -cpu->queued_work_last = wi;
> -wi->next = NULL;
> -wi->done = false;
> -qemu_mutex_unlock(>work_mutex);
> -
> -qemu_cpu_kick(cpu);
> +queue_work_on_cpu(cpu, wi);
>  }
>
>  static void qemu_kvm_destroy_vcpu(CPUState *cpu)


--
Alex Bennée



[Qemu-devel] [RFC 2/8] cpus: Move common code out of {async_, }run_on_cpu()

2016-06-19 Thread Sergey Fedorov
From: Sergey Fedorov 

Move the code common between run_on_cpu() and async_run_on_cpu() into a
new function queue_work_on_cpu().

Signed-off-by: Sergey Fedorov 
Signed-off-by: Sergey Fedorov 
---
 cpus.c | 42 ++
 1 file changed, 18 insertions(+), 24 deletions(-)

diff --git a/cpus.c b/cpus.c
index 049c2d04e150..04687c85bcd4 100644
--- a/cpus.c
+++ b/cpus.c
@@ -910,6 +910,22 @@ void qemu_init_cpu_loop(void)
 qemu_thread_get_self(_thread);
 }
 
+static void queue_work_on_cpu(CPUState *cpu, struct qemu_work_item *wi)
+{
+qemu_mutex_lock(>work_mutex);
+if (cpu->queued_work_first == NULL) {
+cpu->queued_work_first = wi;
+} else {
+cpu->queued_work_last->next = wi;
+}
+cpu->queued_work_last = wi;
+wi->next = NULL;
+wi->done = false;
+qemu_mutex_unlock(>work_mutex);
+
+qemu_cpu_kick(cpu);
+}
+
 void run_on_cpu(CPUState *cpu, run_on_cpu_func func, void *data)
 {
 struct qemu_work_item wi;
@@ -923,18 +939,7 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func, void 
*data)
 wi.data = data;
 wi.free = false;
 
-qemu_mutex_lock(>work_mutex);
-if (cpu->queued_work_first == NULL) {
-cpu->queued_work_first = 
-} else {
-cpu->queued_work_last->next = 
-}
-cpu->queued_work_last = 
-wi.next = NULL;
-wi.done = false;
-qemu_mutex_unlock(>work_mutex);
-
-qemu_cpu_kick(cpu);
+queue_work_on_cpu(cpu, );
 while (!atomic_mb_read()) {
 CPUState *self_cpu = current_cpu;
 
@@ -957,18 +962,7 @@ void async_run_on_cpu(CPUState *cpu, run_on_cpu_func func, 
void *data)
 wi->data = data;
 wi->free = true;
 
-qemu_mutex_lock(>work_mutex);
-if (cpu->queued_work_first == NULL) {
-cpu->queued_work_first = wi;
-} else {
-cpu->queued_work_last->next = wi;
-}
-cpu->queued_work_last = wi;
-wi->next = NULL;
-wi->done = false;
-qemu_mutex_unlock(>work_mutex);
-
-qemu_cpu_kick(cpu);
+queue_work_on_cpu(cpu, wi);
 }
 
 static void qemu_kvm_destroy_vcpu(CPUState *cpu)
-- 
1.9.1