Skip to contentSkip to conversation

FAIL about apic testcase

question kvm-unit-tests Zhu Yijun 3 participants 4 messages Apr 12, 2016 – Apr 13, 2016 KVM

lore
Share & tools
lore

Zhu Yijun

author
#0 lore raw

Hi all,

I run kvm-unit-tests on rhel_7.0, and the apic unittest failed. test.log file showed as follow:

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? and what's mean about the statement "(__set_exception_jmpbuf(&(jmpbuf)), 0)"?

Thanks in advance!

Zhu Yijun

maintainer
#1 lore raw
Quoted 1 line · Zhu Yijun

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.

Quoted 23 lines

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

Quoted 8 lines

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

#2 lore raw
Quoted 11 lines · Paolo Bonzini
Quoted 1 line · Zhu Yijun

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.

Quoted 55 lines
Quoted 24 lines

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

Quoted 8 lines

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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

Signature · 2 lines
best regards
yang
author
#3 lore raw

Get it! Thanks paolo and Yang Zhang.

Quoted 72 lines · Yang Zhang
Quoted 11 lines · Paolo Bonzini
Quoted 1 line · Zhu Yijun

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.

Quoted 55 lines
Quoted 24 lines

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

Quoted 8 lines

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

Signature · 3 lines
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html