qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 02/14] vl: add qemu_cpu_reset_request()


From: TAKEDA, toshiya
Subject: Re: [Qemu-devel] [PATCH 02/14] vl: add qemu_cpu_reset_request()
Date: Thu, 17 Sep 2009 00:54:32 +0900

Dear Natalia,

>May this as a side-effect solve the problem with the OS/2 cpu-reset- 
>based 80286 protectedmode->realmode switch?

Though I don't know about OS/2, I added this codes to support PC-9821's ioport 
0xf0.
This port resets CPU, as you say, to switch CPU from protect mode to real mode.

Of course there is the case this port is used for other purpose, for example 
fast rebooting.

(In PC-9801, 2 CPU are on-board and this port is also used to switch them, but 
I don't have
the plan to support this function.)

Thanks,
TAKEDA, toshiya

>El 09/09/2009, a las 16:41, 武田 俊也 escribio:
>
>> This patch is to add qemu_cpu_reset_request() function.
>> It is like qemu_syste_reset_request(), but it resets only CPUs
>> and does not reset other devices.
>>
>> diff -ur a/sysemu.h b/sysemu.h
>> --- a/sysemu.h       Tue Sep  8 21:26:50 2009
>> +++ b/sysemu.h       Wed Sep  9 21:49:51 2009
>> @@ -43,13 +43,16 @@
>> void cpu_disable_ticks(void);
>>
>> void qemu_system_reset_request(void);
>> +void qemu_cpu_reset_request(void);
>> void qemu_system_shutdown_request(void);
>> void qemu_system_powerdown_request(void);
>> int qemu_shutdown_requested(void);
>> int qemu_reset_requested(void);
>> +int qemu_cpu_reset_requested(void);
>> int qemu_powerdown_requested(void);
>> extern qemu_irq qemu_system_powerdown;
>> void qemu_system_reset(void);
>> +void qemu_cpu_reset(void);
>>
>> void do_savevm(Monitor *mon, const QDict *qdict);
>> int load_vmstate(Monitor *mon, const char *name);
>> diff -ur a/vl.c b/vl.c
>> --- a/vl.c   Tue Sep  8 21:26:51 2009
>> +++ b/vl.c   Wed Sep  9 21:49:43 2009
>> @@ -3430,6 +3430,7 @@
>> static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
>>     TAILQ_HEAD_INITIALIZER(reset_handlers);
>> static int reset_requested;
>> +static int cpu_reset_requested;
>> static int shutdown_requested;
>> static int powerdown_requested;
>> static int debug_requested;
>> @@ -3449,6 +3450,13 @@
>>     return r;
>> }
>>
>> +int qemu_cpu_reset_requested(void)
>> +{
>> +    int r = cpu_reset_requested;
>> +    cpu_reset_requested = 0;
>> +    return r;
>> +}
>> +
>> int qemu_powerdown_requested(void)
>> {
>>     int r = powerdown_requested;
>> @@ -3512,6 +3520,16 @@
>>     }
>> }
>>
>> +void qemu_cpu_reset(void)
>> +{
>> +    CPUState *env;
>> +
>> +    /* reset all cpus */
>> +    for(env = first_cpu; env != NULL; env = env->next_cpu) {
>> +        cpu_reset(env);
>> +    }
>> +}
>> +
>> void qemu_system_reset_request(void)
>> {
>>     if (no_reboot) {
>> @@ -3522,6 +3540,12 @@
>>     qemu_notify_event();
>> }
>>
>> +void qemu_cpu_reset_request(void)
>> +{
>> +    cpu_reset_requested = 1;
>> +    qemu_notify_event();
>> +}
>> +
>> void qemu_system_shutdown_request(void)
>> {
>>     shutdown_requested = 1;
>> @@ -4285,6 +4309,8 @@
>>         return 0;
>>     if (reset_requested)
>>         return 0;
>> +    if (cpu_reset_requested)
>> +        return 0;
>>     if (shutdown_requested)
>>         return 0;
>>     if (debug_requested)
>> @@ -4332,6 +4358,11 @@
>>         if (qemu_reset_requested()) {
>>             pause_all_vcpus();
>>             qemu_system_reset();
>> +            resume_all_vcpus();
>> +        }
>> +        if (qemu_cpu_reset_requested()) {
>> +            pause_all_vcpus();
>> +            qemu_cpu_reset();
>>             resume_all_vcpus();
>>         }
>>         if (qemu_powerdown_requested()) {
>>
>>
>>
>>
>
>
>
>
>





reply via email to

[Prev in Thread] Current Thread [Next in Thread]