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?

Regards,
Nadav

Paolo Bonzini <pbonz...@redhat.com> 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 <pbonz...@redhat.com>
> 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 <pbonz...@redhat.com>
> 
> 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 majord...@vger.kernel.org
> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to