Re: XP machine freeze

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

 




On 13/04/2015 15:34, Nadav Amit wrote:
> Paolo,
> 
> I hope I am not misleading or interrupting, and I am obviously very biased —
> but couldn’t it be related to the issue that patch f210f7572bed ("KVM: x86:
> Fix lost interrupt on irr_pending race”) deals with?
> 
> I got this issue first when I upgraded to 3.17 in my testing environment,
> since apparently a race got worse due to patch 56cc2406d68c. Did anyone try
> 3.19 that has this fix?

That's a much better guess than mine.  Especially because it would also
explain how Saso is reproducing it on CentOS 6 (but still less easily
than Brad who has 56cc2406d68c0f09505c389e276f27a99f495cbd.

Paolo

> Regards,
> Nadav
> 
> Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote:
> 
>>
>>
>> On 13/04/2015 06:07, Brad Campbell wrote:
>>> On 31/03/15 05:11, Paolo Bonzini wrote:
>>>> On 22/03/2015 16:31, Brad Campbell wrote:
>>>>> No help I'm afraid, but at least I can conclusively say that 3.16 is
>>>>> good, and 3.17 is bad.
>>>> Can you try more specifically around the first KVM pull request?  That
>>>> would be between c9b88e958182 (presumed good) and 8533ce727188 (presumed
>>>> bad)?
>>>
>>>
>>> G'day Paolo.
>>>
>>> I can confirm that the fault appears to lie between good and bad as
>>> specified above.
>>> Bad failed before 48 hours, good ran for 143 hours. I'm bisecting now.
>>
>> Thanks!  Remember to bisect only with arch/x86/kvm.
>>
>> Also:
>>
>> 1) Brad, I see you are on AMD.  Have you ever reproduced it on Intel?
>> Saso, are you on AMD as well?
>>
>> If so, the most likely culprit is this:
>>
>> commit 6addfc42992be4b073c39137ecfdf4b2aa2d487f
>> Author: Paolo Bonzini <pbonzini@xxxxxxxxxx>
>> Date:   Thu Mar 27 11:29:28 2014 +0100
>>
>>    KVM: x86: avoid useless set of KVM_REQ_EVENT after emulation
>>
>>    Despite the provisions to emulate up to 130 consecutive instructions, in
>>    practice KVM will emulate just one before exiting handle_invalid_guest_state,
>>    because x86_emulate_instruction always sets KVM_REQ_EVENT.
>>
>>    However, we only need to do this if an interrupt could be injected,
>>    which happens a) if an interrupt shadow bit (STI or MOV SS) has gone
>>    away; b) if the interrupt flag has just been set (other instructions
>>    than STI can set it without enabling an interrupt shadow).
>>
>>    This cuts another 700-900 cycles from the cost of emulating an
>>    instruction (measured on a Sandy Bridge Xeon: 1650-2600 cycles
>>    before the patch on kvm-unit-tests, 925-1700 afterwards).
>>
>>    Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
>>
>> I would first try this one, and see if it is bad.
>>
>> Radim, do you think this could cause a missed interrupt injection
>> after Windows does a TPR write?
>>
>> 2) For bisection feel free to "git bisect skip" the following:
>>
>> 03916db9348c079d8d214f971cc114bb51c6b869 Replace NR_VMX_MSR with its definition
>> 9a2a05b9ed618b1bb6d4cbec0c2e1f80d6636609 KVM: nVMX: clean up nested_release_vmcs12 and code around it
>> 4fa7734c62cdd8c07edd54fa5a5e91482273071a KVM: nVMX: fix lifetime issues for vmcs02
>> c9cdd085bb75226879fd468b88e2e7eb467325b7 KVM: x86: Defining missing x86 vectors
>> 0123be429fef40f067e5b1811576c3994229f59e KVM: x86: Assertions to check no overrun in MSR lists
>> 296f047502f1b3ddfd63adbc192624ce80740081 KVM: vmx: remove duplicate vmx_mpx_supported() prototype
>> 963fee1656603ce2e91ebb988cd5a92f2af41369 KVM: nVMX: Fix virtual interrupt delivery injection
>> 6cbc5f5a80a9ae5a80bc81efc574b5a85bfd4a84 KVM: nSVM: Set correct port for IOIO interception evaluation
>> 6493f1574e898b46370e2b2315836d76a1980f2c KVM: nSVM: Fix IOIO size reported on emulation
>> 9bf418335e24da995ea682a028926d7e1036be6f KVM: nSVM: Fix IOIO bitmap evaluation
>> 62baf44cad3bc6b37115cc21e4228fe53d4f3474 KVM: nSVM: Do not report CLTS via SVM_EXIT_WRITE_CR0 to L1
>> 5381417f6a51293e7b8af1eb18aefa5d47976a71 KVM: nVMX: Fix returned value of MSR_IA32_VMX_VMCS_ENUM
>> 2996fca0690f03a5220203588f4a0d8c5acba2b0 KVM: nVMX: Allow to disable VM_{ENTRY_LOAD,EXIT_SAVE}_DEBUG_CONTROLS
>> 560b7ee12ca5e1ebc1675d7eb4008bb22708277a KVM: nVMX: Fix returned value of MSR_IA32_VMX_PROCBASED_CTLS
>> 3dcdf3ec6e48d918741ea11349d4436d0c5aac93 KVM: nVMX: Allow to disable CR3 access interception
>> 3dbcd8da7b564194f93271b003a1c46ef404cbdb KVM: nVMX: Advertise support for MSR_IA32_VMX_TRUE_*_CTLS
>> bc39c4db7110f88f338cbbabe53d3e43c7400a59 arch/x86/kvm/vmx.c: use PAGE_ALIGNED instead of IS_ALIGNED(PAGE_SIZE
>> e4aa5288ff07766d101751de9a8420d666c61735 KVM: x86: Fix constant value of VM_{EXIT_SAVE,ENTRY_LOAD}_DEBUG_CONTROLS
>> 42cbc04fd3b5e3f9b011bf9fa3ce0b3d1e10b58b x86/kvm: Resolve shadow warnings in macro expansion
>> b55a8144d1807f9e74c51cb584f0dd198483d86c x86/kvm: Resolve shadow warning from min macro
>> 98eff52ab5c0ff5cb96940a93e99a1aeb2f11c89 KVM: x86: Fix lapic.c debug prints
>> 9f6226a762c7ae02f6a23a3d4fc552dafa57ea23 arch: x86: kvm: x86.c: Cleaning up variable is set more than once
>> 80112c89ed872c725e7dc39ccf6c37d1a585e161 KVM: Synthesize G bit for all segments.
>> 27e6fb5dae2819d17f38dc9224692b771e989981 KVM: vmx: vmx instructions handling does not consider cs.l
>> bdc907222c5e4edd848da0c031deb55b59f1cf9a KVM: emulate: fix harmless typo in MMX decoding
>> 10e38fc7cabc668738e6a7b7b57cbcddb2234440 KVM: x86: Emulator flag for instruction that only support 16-bit addresses in real mode
>> 68efa764f3429f2bd71f431e91c04b0bcb7d34f1 KVM: x86: Emulator support for #UD on CPL>0
>>
>> The following can be skipped assuming you are on 32-bit XP:
>>
>> 1e32c07955b43e7f827174bf320ed35971117275 KVM: vmx: handle_cr ignores 32/64-bit mode
>> a449c7aa51e10c9bde0ea9bee4e682d6d067ebab KVM: x86: Hypercall handling does not considers opsize correctly
>> 5777392e83c96e3a0799dd2985598e0fc76cf4aa KVM: x86: check DR6/7 high-bits are clear only on long-mode
>> a825f5cc4a8455663562809748240169cb9bc2c0 KVM: x86: NOP emulation clears (incorrectly) the high 32-bits of RAX
>> 140bad89fd25db1aab60f80ed7874e9a9bdbae3b KVM: x86: emulation of dword cmov on long-mode should clear [63:32]
>> 7dec5603b6b8dc4c3e1c65d318bd2a5a8c62a424 KVM: x86: bit-ops emulation ignores offset on 64-bit
>> 2eedcac8a97cef43c9c5236398fc8c9d0fd9cc0c KVM: x86: Loading segments on 64-bit mode may be wrong
>> e37a75a13cdae5deaa2ea2cbf8d55b5dd08638b6 KVM: x86: Emulator ignores LDTR/TR extended base on LLDT/LTR
>>
>> And I think the following can be skipped safely too:
>>
>> 9e8919ae793f4edfaa29694a70f71a515ae9942a KVM: x86: Inter-privilege level ret emulation is not implemeneted
>> 3b32004a66e96e17d2a031c08d3304245c506dfc KVM: x86: movnti minimum op size of 32-bit is not kept
>> 606b1c3e87597c2d6c9f3eb833a7251262390295 KVM: x86: sgdt and sidt are not privilaged
>> 7fe864dc942c041cc4f56e287c4025d54a8e6c1e KVM: x86: Mark VEX-prefix instructions emulation as unimplemented
>> 22d48b2d2aa0b078816eaa1e15e485811a2d03fa KVM: svm: writes to MSR_K7_HWCR generates GPE in guest
>>
>> and if on AMD:
>>
>> 98eb2f8b145cee711984d42eff5d6f19b6b1df69 KVM: vmx: speed up emulation of invalid guest state
>>
>>
>>
>> This is the remaining set of commits.  Unfortunately I couldn't get it
>> down to 32 or less, but at least it cleans up the picture a bit.  And
>> I do not see anything except the commit I mentioned above:
>>
>> d6e8c8545651b05a86c5b9d29d2fe11ad4cbb9aa KVM: x86: set rflags.rf during fault injection
>> b9a1ecb909e8f772934cc4bf1f164124c9fbb0d0 KVM: x86: Setting rflags.rf during rep-string emulation
>> 6f43ed01e87c8a8dbd8c826eaf0f714c1342c039 KVM: x86: DR6/7.RTM cannot be written
>> 4161a569065b17954848069d5209182083ce876b KVM: x86: emulator injects #DB when RFLAGS.RF is set
>> 6c6cb69b8e974049cca2cc4480052fb9e7df767b KVM: x86: Cleanup of rflags.rf cleaning
>> 4467c3f1ad16e3640e2b61e1a5e0bd55281a925d KVM: x86: Clear rflags.rf on emulated instructions
>> 163b135e7b09e9158f7eb0aa74e716865e3005d2 KVM: x86: popf emulation should not change RF
>> bb663c7ada380f3c89c2f83fdbe2b3626621385d KVM: x86: Clearing rflags.rf upon skipped emulated instruction
>> 44583cba9188b29b20ceeefe8ae23ad19e26d9a4 KVM: x86: use kvm_read_guest_page for emulator accesses
>> 719d5a9b2487e0562f178f61e323c3dc18a8b200 KVM: x86: ensure emulator fetches do not span multiple pages
>> 17052f16a51af6d8f4b7eee0631af675ac204f65 KVM: emulate: put pointers in the fetch_cache
>> 9506d57de3bc8277a4e306e0d439976862f68c6d KVM: emulate: avoid per-byte copying in instruction fetches
>> 5cfc7e0f5e5e1adf998df94f8e36edaf5d30d38e KVM: emulate: avoid repeated calls to do_insn_fetch_bytes
>> 285ca9e948fa047e51fe47082528034de5369e8d KVM: emulate: speed up do_insn_fetch
>> 41061cdb98a0bec464278b4db8e894a3121671f5 KVM: emulate: do not initialize memopp
>> 573e80fe04db1aa44e8303037f65716ba5c3a343 KVM: emulate: rework seg_override
>> c44b4c6ab80eef3a9c52c7b3f0c632942e6489aa KVM: emulate: clean up initializations in init_decode_cache
>> 02357bdc8c30a60cd33dd438f851c1306c34f435 KVM: emulate: cleanup decode_modrm
>> 685bbf4ac406364a84a1d4237b4970dc570fd4cb KVM: emulate: Remove ctxt->intercept and ctxt->check_perm checks
>> 1498507a47867596de158d4db8728e92385a4919 KVM: emulate: move init_decode_cache to emulate.c
>> f5f87dfbc777f89148c3c66438741139845d3ac6 KVM: emulate: simplify writeback
>> 54cfdb3e95d4f70409a7d3432a42cffc9a232be7 KVM: emulate: speed up emulated moves
>> d40a6898e50c2589ca3d345ef5ca6671e2b35b1a KVM: emulate: protect checks on ctxt->d by a common "if (unlikely())"
>> e24186e097b80c5995ff75e1bbcd541d09c9e42b KVM: emulate: move around some checks
>> 6addfc42992be4b073c39137ecfdf4b2aa2d487f KVM: x86: avoid useless set of KVM_REQ_EVENT after emulation
>> 37ccdcbe0757196ec98c0dcf9754bec8423807a5 KVM: x86: return all bits from get_interrupt_shadow
>> 5f7552d4a56c21a882c9854ac63c6eb73ca7d7c8 KVM: x86: Pending interrupt may be delivered after INIT
>> 0d3da0d26e3c3515997c99451ce3b0ad1a69a36c KVM: x86: fix TSC matching
>> ee212297cd425620867d4398d55d068c4203768c KVM: x86: Wrong emulation on 'xadd X, X'
>> 968889771749d8e730d794deed2bd2e363a98a54 KVM: emulate: simplify BitOp handling
>> a5457e7bcf9a76ec5c2de5d311d9b0d3b724edc6 KVM: emulate: POP SS triggers a MOV SS shadow too
>> 32e94d0696c26c6ba4f3ff53e70f6e0e825979bc KVM: x86: smsw emulation is incorrect in 64-bit mode
>> aaa05f2437b9450f30b301db962ec4d45ec90fbb KVM: x86: Return error on cmpxchg16b emulation
>> 67f4d4288c353734d29c45f6725971c71af96791 KVM: x86: rdpmc emulation checks the counter incorrectly
>> 37c564f2854bf75969d0ac26e03f5cf2bb7d639f KVM: x86: cmpxchg emulation should compare in reverse order
>>
>> Thanks,
>>
>> Paolo
>> --
>> To unsubscribe from this list: send the line "unsubscribe kvm" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux