diff mbox series

[RFC,v2,36/48] accel/whpx: Convert to AccelOpsClass::cpu_thread_routine

Message ID 20250620171342.92678-37-philmd@linaro.org
State New
Headers show
Series accel: Preparatory cleanups for split-accel | expand

Commit Message

Philippe Mathieu-Daudé June 20, 2025, 5:13 p.m. UTC
By converting to AccelOpsClass::cpu_thread_routine we can
let the common accel_create_vcpu_thread() create the thread.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 target/i386/whpx/whpx-accel-ops.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

Comments

Richard Henderson June 22, 2025, 2:05 a.m. UTC | #1
On 6/20/25 10:13, Philippe Mathieu-Daudé wrote:
> By converting toAccelOpsClass::cpu_thread_routine we can
> let the common accel_create_vcpu_thread() create the thread.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   target/i386/whpx/whpx-accel-ops.c | 12 +-----------
>   1 file changed, 1 insertion(+), 11 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~
Richard Henderson June 22, 2025, 2:10 a.m. UTC | #2
On 6/20/25 10:13, Philippe Mathieu-Daudé wrote:
> By converting to AccelOpsClass::cpu_thread_routine we can
> let the common accel_create_vcpu_thread() create the thread.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>   target/i386/whpx/whpx-accel-ops.c | 12 +-----------
>   1 file changed, 1 insertion(+), 11 deletions(-)
> 
> diff --git a/target/i386/whpx/whpx-accel-ops.c b/target/i386/whpx/whpx-accel-ops.c
> index b8bebe403c9..c1b27d1b89d 100644
> --- a/target/i386/whpx/whpx-accel-ops.c
> +++ b/target/i386/whpx/whpx-accel-ops.c
> @@ -61,16 +61,6 @@ static void *whpx_cpu_thread_fn(void *arg)
>       return NULL;
>   }
>   
> -static void whpx_start_vcpu_thread(CPUState *cpu)
> -{
> -    char thread_name[VCPU_THREAD_NAME_SIZE];
> -
> -    snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/WHPX",
> -             cpu->cpu_index);
> -    qemu_thread_create(cpu->thread, thread_name, whpx_cpu_thread_fn,
> -                       cpu, QEMU_THREAD_JOINABLE);
> -}
> -
>   static void whpx_kick_vcpu_thread(CPUState *cpu)
>   {
>       if (!qemu_cpu_is_self(cpu)) {
> @@ -87,7 +77,7 @@ static void whpx_accel_ops_class_init(ObjectClass *oc, const void *data)
>   {
>       AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
>   
> -    ops->create_vcpu_thread = whpx_start_vcpu_thread;
> +    ops->cpu_thread_routine = whpx_cpu_thread_fn;
>       ops->kick_vcpu_thread = whpx_kick_vcpu_thread;
>       ops->cpu_thread_is_idle = whpx_vcpu_thread_is_idle;
>   

After this, create_vcpu_thread is unused, correct?


r~
Philippe Mathieu-Daudé June 23, 2025, 12:31 p.m. UTC | #3
On 22/6/25 04:10, Richard Henderson wrote:
> On 6/20/25 10:13, Philippe Mathieu-Daudé wrote:
>> By converting to AccelOpsClass::cpu_thread_routine we can
>> let the common accel_create_vcpu_thread() create the thread.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>>   target/i386/whpx/whpx-accel-ops.c | 12 +-----------
>>   1 file changed, 1 insertion(+), 11 deletions(-)
>>
>> diff --git a/target/i386/whpx/whpx-accel-ops.c b/target/i386/whpx/ 
>> whpx-accel-ops.c
>> index b8bebe403c9..c1b27d1b89d 100644
>> --- a/target/i386/whpx/whpx-accel-ops.c
>> +++ b/target/i386/whpx/whpx-accel-ops.c
>> @@ -61,16 +61,6 @@ static void *whpx_cpu_thread_fn(void *arg)
>>       return NULL;
>>   }
>> -static void whpx_start_vcpu_thread(CPUState *cpu)
>> -{
>> -    char thread_name[VCPU_THREAD_NAME_SIZE];
>> -
>> -    snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/WHPX",
>> -             cpu->cpu_index);
>> -    qemu_thread_create(cpu->thread, thread_name, whpx_cpu_thread_fn,
>> -                       cpu, QEMU_THREAD_JOINABLE);
>> -}
>> -
>>   static void whpx_kick_vcpu_thread(CPUState *cpu)
>>   {
>>       if (!qemu_cpu_is_self(cpu)) {
>> @@ -87,7 +77,7 @@ static void whpx_accel_ops_class_init(ObjectClass 
>> *oc, const void *data)
>>   {
>>       AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
>> -    ops->create_vcpu_thread = whpx_start_vcpu_thread;
>> +    ops->cpu_thread_routine = whpx_cpu_thread_fn;
>>       ops->kick_vcpu_thread = whpx_kick_vcpu_thread;
>>       ops->cpu_thread_is_idle = whpx_vcpu_thread_is_idle;
> 
> After this, create_vcpu_thread is unused, correct?

Only RR left, which is a bit different:

339 void rr_start_vcpu_thread(CPUState *cpu)
340 {
341     char thread_name[VCPU_THREAD_NAME_SIZE];
342     static QemuCond *single_tcg_halt_cond;
343     static QemuThread *single_tcg_cpu_thread;
344
345     tcg_vcpu_thread_precreate(cpu);
346
347     if (!single_tcg_cpu_thread) {
348         single_tcg_halt_cond = cpu->halt_cond;
349         single_tcg_cpu_thread = cpu->thread;
350
351         /* share a single thread for all cpus with TCG */
352         snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG");
353         qemu_thread_create(cpu->thread, thread_name,
354                            rr_cpu_thread_fn,
355                            cpu, QEMU_THREAD_JOINABLE);
356     } else {
357         /* we share the thread, dump spare data */
358         g_free(cpu->thread);
359         qemu_cond_destroy(cpu->halt_cond);
360         g_free(cpu->halt_cond);
361         cpu->thread = single_tcg_cpu_thread;
362         cpu->halt_cond = single_tcg_halt_cond;
363
364         /* copy the stuff done at start of rr_cpu_thread_fn */
365         cpu->thread_id = first_cpu->thread_id;
366         cpu->neg.can_do_io = 1;
367         cpu->created = true;
368     }
369 }
diff mbox series

Patch

diff --git a/target/i386/whpx/whpx-accel-ops.c b/target/i386/whpx/whpx-accel-ops.c
index b8bebe403c9..c1b27d1b89d 100644
--- a/target/i386/whpx/whpx-accel-ops.c
+++ b/target/i386/whpx/whpx-accel-ops.c
@@ -61,16 +61,6 @@  static void *whpx_cpu_thread_fn(void *arg)
     return NULL;
 }
 
-static void whpx_start_vcpu_thread(CPUState *cpu)
-{
-    char thread_name[VCPU_THREAD_NAME_SIZE];
-
-    snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/WHPX",
-             cpu->cpu_index);
-    qemu_thread_create(cpu->thread, thread_name, whpx_cpu_thread_fn,
-                       cpu, QEMU_THREAD_JOINABLE);
-}
-
 static void whpx_kick_vcpu_thread(CPUState *cpu)
 {
     if (!qemu_cpu_is_self(cpu)) {
@@ -87,7 +77,7 @@  static void whpx_accel_ops_class_init(ObjectClass *oc, const void *data)
 {
     AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
 
-    ops->create_vcpu_thread = whpx_start_vcpu_thread;
+    ops->cpu_thread_routine = whpx_cpu_thread_fn;
     ops->kick_vcpu_thread = whpx_kick_vcpu_thread;
     ops->cpu_thread_is_idle = whpx_vcpu_thread_is_idle;