[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] qemu-timer: move timeBeginPeriod/timeEndPer
From: |
Jacob Kroon |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] qemu-timer: move timeBeginPeriod/timeEndPeriod to os-win32 |
Date: |
Thu, 21 Feb 2013 00:49:54 +0100 |
On Wed, Feb 20, 2013 at 9:46 PM, Jacob Kroon <address@hidden> wrote:
> Paolo,
>
> Just a heads up, I tried the patched qemu (1+2+3) on my laptop at
> home, which is running Windows 7 64-bit. I'm seeing qemu "lockups"
> appearing randomly.. Will try to debug it.
> On the other hand, plain vanilla 1.4.0 in Windows 7 seems to run fine
> with my VxWorks image..
So the problem seems to be related to wether I pass --enable-debug to
qemu configure script.
With debug enabled it runs fine in Windows 7 aswell. If I leave it out
I get what appears to be a lockup
a couple of seconds into the guest boot process. Best I could do for
now was to attach to the process
with gdb and get a backtrace:
(gdb) bt
#0 0x76fc000d in ntdll!LdrFindResource_U ()
from /cygdrive/c/Windows/SysWOW64/ntdll.dll
#1 0x7704f896 in ntdll!RtlQueryTimeZoneInformation ()
from /cygdrive/c/Windows/SysWOW64/ntdll.dll
#2 0x6ce2c99b in ?? ()
#3 0x00000000 in ?? ()
> On Wed, Feb 20, 2013 at 2:43 PM, Paolo Bonzini <address@hidden> wrote:
>> These are needed for any of the Win32 alarm timer implementations.
>> They are not tied to mmtimer exclusively.
>>
>> Jacob tested this patch with both mmtimer and Win32 timers.
>>
>> Cc: address@hidden
>> Tested-by: Jacob Kroon <address@hidden>
>> Signed-off-by: Paolo Bonzini <address@hidden>
>> ---
>> Jacob, this is the same as "patch 1" you tested.
>>
>> os-win32.c | 10 ++++++++++
>> qemu-timer.c | 26 ++++++--------------------
>> 2 files changed, 16 insertions(+), 20 deletions(-)
>>
>> diff --git a/os-win32.c b/os-win32.c
>> index 3d43604..a0740ef 100644
>> --- a/os-win32.c
>> +++ b/os-win32.c
>> @@ -23,6 +23,7 @@
>> * THE SOFTWARE.
>> */
>> #include <windows.h>
>> +#include <mmsystem.h>
>> #include <unistd.h>
>> #include <fcntl.h>
>> #include <signal.h>
>> @@ -67,9 +67,19 @@ static BOOL WINAPI qemu_ctrl_handler(DWORD type)
>> return TRUE;
>> }
>>
>> +static TIMECAPS mm_tc;
>> +
>> +static void os_undo_timer_resolution(void)
>> +{
>> + timeEndPeriod(mm_tc.wPeriodMin);
>> +}
>> +
>> void os_setup_early_signal_handling(void)
>> {
>> SetConsoleCtrlHandler(qemu_ctrl_handler, TRUE);
>> + timeGetDevCaps(&mm_tc, sizeof(mm_tc));
>> + timeBeginPeriod(mm_tc.wPeriodMin);
>> + atexit(os_undo_timer_resolution);
>> }
>>
>> /* Look for support files in the same directory as the executable. */
>> diff --git a/qemu-timer.c b/qemu-timer.c
>> index 8fb5c75..50109a1 100644
>> --- a/qemu-timer.c
>> +++ b/qemu-timer.c
>> @@ -623,29 +622,15 @@ static void CALLBACK mm_alarm_handler(UINT uTimerID,
>> UINT uMsg,
>>
>> static int mm_start_timer(struct qemu_alarm_timer *t)
>> {
>> timeGetDevCaps(&mm_tc, sizeof(mm_tc));
>> -
>> - timeBeginPeriod(mm_tc.wPeriodMin);
>> -
>> - mm_timer = timeSetEvent(mm_tc.wPeriodMin, /* interval (ms) */
>> - mm_tc.wPeriodMin, /* resolution */
>> - mm_alarm_handler, /* function */
>> - (DWORD_PTR)t, /* parameter */
>> - TIME_ONESHOT | TIME_CALLBACK_FUNCTION);
>> -
>> - if (!mm_timer) {
>> - fprintf(stderr, "Failed to initialize win32 alarm timer\n");
>> - timeEndPeriod(mm_tc.wPeriodMin);
>> - return -1;
>> - }
>> -
>> return 0;
>> }
>>
>> static void mm_stop_timer(struct qemu_alarm_timer *t)
>> {
>> - timeKillEvent(mm_timer);
>> - timeEndPeriod(mm_tc.wPeriodMin);
>> + if (mm_timer) {
>> + timeKillEvent(mm_timer);
>> + }
>> }
>>
>> static void mm_rearm_timer(struct qemu_alarm_timer *t, int64_t delta)
>> @@ -657,7 +641,9 @@ static void mm_rearm_timer(struct qemu_alarm_timer *t,
>> int64_t delta)
>> nearest_delta_ms = mm_tc.wPeriodMax;
>> }
>>
>> - timeKillEvent(mm_timer);
>> + if (mm_timer) {
>> + timeKillEvent(mm_timer);
>> + }
>> mm_timer = timeSetEvent((UINT)nearest_delta_ms,
>> mm_tc.wPeriodMin,
>> mm_alarm_handler,
>> --
>> 1.8.1.2
>>
>
>
>
> --
> -- Jacob
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, (continued)
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, Roy Tam, 2013/02/20
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, Paolo Bonzini, 2013/02/21
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, Roy Tam, 2013/02/21
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, Roy Tam, 2013/02/21
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, Paolo Bonzini, 2013/02/21
- Re: [Qemu-devel] [PATCH 1/2] win32: do not set CPU affinity, Roy Tam, 2013/02/21
- [Qemu-devel] [PATCH 2/2] qemu-timer: move timeBeginPeriod/timeEndPeriod to os-win32, Paolo Bonzini, 2013/02/20