diff options
author | Andrei Vagin <avagin@gmail.com> | 2021-03-16 09:15:03 -0700 |
---|---|---|
committer | Andrei Vagin <avagin@gmail.com> | 2021-03-16 21:55:20 -0700 |
commit | 2f3dac78ca9aa1abb9d27570bc9ece0f486ddb60 (patch) | |
tree | 195f9161e491c3f31ac6a1191e651f25f9743976 /pkg/sentry/arch/arch_aarch64.go | |
parent | f7e841c2cede357c4cbd6117605e3f3d54f1961c (diff) |
kvm: prefault a floating point state before restoring it
If physical pages of a memory region are not mapped yet, the kernel will
trigger KVM_EXIT_MMIO and we will map physical pages in bluepillHandler().
An instruction that triggered a fault will not be re-executed, it
will be emulated in the kernel, but it can't emulate complex
instructions like xsave, xrstor. We can touch the memory with
simple instructions to workaround this problem.
Diffstat (limited to 'pkg/sentry/arch/arch_aarch64.go')
-rw-r--r-- | pkg/sentry/arch/arch_aarch64.go | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/pkg/sentry/arch/arch_aarch64.go b/pkg/sentry/arch/arch_aarch64.go index fd73751e7..6b81e9708 100644 --- a/pkg/sentry/arch/arch_aarch64.go +++ b/pkg/sentry/arch/arch_aarch64.go @@ -88,15 +88,15 @@ func (f aarch64FPState) fork() aarch64FPState { } // FloatingPointData returns the raw data pointer. -func (f aarch64FPState) FloatingPointData() *FloatingPointData { - return (*FloatingPointData)(&f[0]) +func (f aarch64FPState) FloatingPointData() FloatingPointData { + return ([]byte)(f) } // NewFloatingPointData returns a new floating point data blob. // // This is primarily for use in tests. -func NewFloatingPointData() *FloatingPointData { - return (*FloatingPointData)(&(newAarch64FPState()[0])) +func NewFloatingPointData() FloatingPointData { + return ([]byte)(newAarch64FPState()) } // State contains the common architecture bits for aarch64 (the build tag of this |