Bug 213257 - KVM-PR: FPU is broken when single-stepping
Summary: KVM-PR: FPU is broken when single-stepping
Status: NEW
Alias: None
Product: Virtualization
Classification: Unclassified
Component: kvm (show other bugs)
Hardware: PPC-64 Linux
: P1 normal
Assignee: virtualization_kvm
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-05-28 11:20 UTC by Lauri Kasanen
Modified: 2021-06-01 12:34 UTC (History)
1 user (show)

See Also:
Kernel Version: 5.6
Tree: Mainline
Regression: No


Attachments

Description Lauri Kasanen 2021-05-28 11:20:22 UTC
The FPU is completely broken when single-stepping on KVM-PR. Registers stay zeroes, computation results are zeroes. If I disable single-stepping, computation results are correct, but of course then I cannot dump FPRs between every instruction.

HW is POWER9, 18-core Talos II.

5.6 is slightly old, but there are no commits under arch/powerpc/kvm since that mention single stepping.

Program:
https://git.libre-soc.org/?p=kvm-minippc.git;a=summary

Test file:
https://ftp.libre-soc.org/mini-float-test-kvm.bin

Repro instructions:
git clone https://git.libre-soc.org/git/kvm-minippc.git
cd kvm-minippc
make

wget https://ftp.libre-soc.org/mini-float-test-kvm.bin
./kvm-minippc -i mini-float-test-kvm.bin -t trace
less trace
# you will see FPRs stay zeroes. In larger test programs that dump the computed memory, that is wrong too (all zero).
Comment 1 Luke Kenneth Casson Leighton 2021-05-31 10:28:54 UTC
the module being used is kvm_pr not kvm_hv.
Comment 2 Luke Kenneth Casson Leighton 2021-06-01 00:12:59 UTC
out of interest if the bottom half of vs0-vs31 is read (or written),
are those also zero?

completely unrelated i am running into a gdb machine-interface bug
which has been "solved" through the workaround of reading/writing
the lower 64 bits of VSX registers instead of fp0-fp31
Comment 3 Lauri Kasanen 2021-06-01 07:35:40 UTC
That's probably not worth trying, since the computation results were
also wrong. The computation does not rely on register setting, it
loads, computes and saves entirely in code.
Comment 4 Luke Kenneth Casson Leighton 2021-06-01 12:34:08 UTC
(In reply to Lauri Kasanen from comment #3)
> That's probably not worth trying, since the computation results were
> also wrong.

ok. and the initial setup starts from a blank FPU, no host modification of FPRs needed

> The computation does not rely on register setting, it
> loads, computes and saves entirely in code.

i realised i just said this exact thing, above, in a different way.

and is it the case that the minippc kvm host program is not attempting to read (or write) the FPR regfile after each guest singlestep?

not that i would expect reading of the FPR regfile from the host to affect the guest, but it's worth confirming.

trying to think, how else can this be debugged, to find out what's going on?

Note You need to log in before you can comment on or make changes to this bug.