Get it! Thanks paolo and Yang Zhang. On 2016/4/13 9:35, Yang Zhang wrote: > On 2016/4/13 5:16, Paolo Bonzini wrote: >> >> >> On 12/04/2016 15:34, Zhu Yijun wrote: >>> I run kvm-unit-tests on rhel_7.0, and the apic unittest failed. >> >> kvm-unit-tests always corresponds to the latest kernel version >> (sometimes even the _next_ kernel version). If you want to use it in >> RHEL, you have to look at the failures one by one, find the patch that >> fixed it and confirm that it is not present in RHEL (it might be present >> in RHEL 7.1 for example). You will then get a set of known failures, and >> you can patch kvm-unit-tests to remove those tests. > > Yes, Paolo is right. Even for RHEL7u2, I also saw some failures when running km-unit-tests. All the failures are due to lack of corresponding patch which already in upstream KVM. You need to figure out it one by one and backport the patch manually. > >> >>> qemu-kvm -enable-kvm -device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4 -vnc none -serial stdio -device pci-testdev -kernel x86/apic.flat -smp 2 -cpu qemu64,+x2apic,+tsc-deadline >>> enabling apic >>> enabling apic >>> paging enabled >>> cr0 = 80010011 >>> cr3 = 7fff000 >>> cr4 = 20 >>> apic version: 1050014 >>> PASS: apic existence >>> x2apic enabled >>> FAIL: x2apic enabled to invalid state >>> FAIL: x2apic enabled to apic enabled >>> FAIL: disabled to invalid state >>> FAIL: disabled to x2apic enabled >>> FAIL: apic enabled to invalid state >>> PASS: apicbase: relocate apic >>> FAIL: apicbase: reserved physaddr bits >>> FAIL: apicbase: reserved low bits >>> PASS: self ipi >>> PASS: nmi-after-sti >>> PASS: multiple nmi >>> tsc deadline timer not detected >>> >>> SUMMARY: 12 tests, 7 unexpected failures >>> >>> I found that all the tests with "test_for_exception()" failed. After looking at this function, I cannot understand the macro: >>> >>> "#define set_exception_jmpbuf(jmpbuf) \ >>> (setjmp(jmpbuf) ? : (__set_exception_jmpbuf(&(jmpbuf)), 0))" >>> >>> So it it always return 0? >> >> If setjmp(jmpbuf) returns non-zero, it returns the non-zero value that >> setjmp returned. >> >> If it returns zero, it calls __set_exception_jmpbuf(&jmpbuf) and then >> returns zero. The source for the function is in lib/x86/desc.c, and it >> is simply this: >> >> static jmp_buf *exception_jmpbuf; >> >> void __set_exception_jmpbuf(jmp_buf *addr) >> { >> exception_jmpbuf = addr; >> } >> >> 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