: reduce number of reinjects on ACK
PATCH 1/1 : reduce number of reinjects on ACK
Windows 7 BSODs under load with HAL_RTC_IRQF_WILL_NOT_CLEAR error.
It happens here:
hal!HalpRtcUnmaskClock:
8281b93a 8bff mov edi,edi 8281b93c 56 push esi 8281b93d 33f6 xor esi,esi 8281b93f 6a0c push 0Ch 8281b941 e8b2ffffff call hal!CMOS_READ (8281b8f8) 8281b946 84c0 test al,al 8281b948 7920 jns hal!HalpRtcUnmaskClock+0x30 (8281b96a) 8281b94a 6a0a push 0Ah 8281b94c 46 inc esi 8281b94d e854c8ffff call hal!KeStallExecutionProcessor (828181a6) 8281b952 83fe64 cmp esi,64h 8281b955 72e8 jb hal!HalpRtcUnmaskClock+0x5 (8281b93f) 8281b957 6a00 push 0 8281b959 6a00 push 0 8281b95b 6a00 push 0 8281b95d 680a010000 push 10Ah 8281b962 6a5c push 5Ch 8281b964 ff1500c38082 call dword ptr [hal!_imp__KeBugCheckEx (8280c300)] 8281b96a 5e pop esi 8281b96b c3 ret
So it loops for 100(64h) times reading register C before BSOD. Lets reduce number of immediate reinjection well under this limit.
Signed-off-by Gleb Natapov <[email protected]>
hw/mc146818rtc.c +1 -1
@@ -30,7 +30,7 @@//#define DEBUG_CMOS -#define RTC_REINJECT_ON_ACK_COUNT 1000 +#define RTC_REINJECT_ON_ACK_COUNT 20#define RTC_SECONDS 0#define RTC_SECONDS_ALARM 1
--
Gleb.
Anthony Liguori
AppliedQuoted 25 lines · Gleb Natapov
Windows 7 BSODs under load with
HAL_RTC_IRQF_WILL_NOT_CLEARerror.It happens here:
hal!HalpRtcUnmaskClock:8281b93a 8bff mov edi,edi 8281b93c 56 push esi 8281b93d 33f6 xor esi,esi 8281b93f 6a0c push 0Ch 8281b941 e8b2ffffff call hal!CMOS_READ (8281b8f8) 8281b946 84c0 test al,al 8281b948 7920 jns hal!HalpRtcUnmaskClock+0x30 (8281b96a) 8281b94a 6a0a push 0Ah 8281b94c 46 inc esi 8281b94d e854c8ffff call hal!KeStallExecutionProcessor (828181a6) 8281b952 83fe64 cmp esi,64h 8281b955 72e8 jb hal!HalpRtcUnmaskClock+0x5 (8281b93f) 8281b957 6a00 push 0 8281b959 6a00 push 0 8281b95b 6a00 push 0 8281b95d 680a010000 push 10Ah 8281b962 6a5c push 5Ch 8281b964 ff1500c38082 call dword ptr [hal!_imp__KeBugCheckEx (8280c300)] 8281b96a 5e pop esi 8281b96b c3 ret
Quoted 5 lines
So it loops for 100(64h) times reading register C before BSOD. Lets reduce number of immediate reinjection well under this limit.
Signed-off-by Gleb Natapov<[email protected]>
Applied. Thanks.
Regards,
Anthony Liguori
Quoted 19 lines
hw/mc146818rtc.c +1
-2@@ -30,7 +30,7 @@//#define DEBUG_CMOS -#define RTC_REINJECT_ON_ACK_COUNT 1000 +#define RTC_REINJECT_ON_ACK_COUNT 20#define RTC_SECONDS 0#define RTC_SECONDS_ALARM 1 --Gleb.