From 9a53099fd8c805efb5128615779444eb988ddd6a Mon Sep 17 00:00:00 2001 From: Nobuhiro MIKI Date: Fri, 19 Nov 2021 05:53:57 +0000 Subject: [PATCH] kvm: ignore EAGAIN & EINTR I did it! With the fixes I've made so far, I can now boot on multi-core. / # dmesg | grep -i smp: [ 0.649012][ T1] smp: Bringing up secondary CPUs ... [ 0.674250][ T1] smp: Brought up 1 node, 2 CPUs / # cat /proc/cpuinfo | grep -i processor processor : 0 processor : 1 Signed-off-by: Nobuhiro MIKI --- kvm/kvm.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kvm/kvm.go b/kvm/kvm.go index 4b88dd7..9d0b0da 100644 --- a/kvm/kvm.go +++ b/kvm/kvm.go @@ -184,6 +184,12 @@ func CreateVCPU(vmFd uintptr, vcpuID int) (uintptr, error) { func Run(vcpuFd uintptr) error { _, err := ioctl(vcpuFd, uintptr(kvmRun), uintptr(0)) + if err != nil { + // refs: https://github.com/kvmtool/kvmtool/blob/415f92c33a227c02f6719d4594af6fad10f07abf/kvm-cpu.c#L44 + if errors.Is(err, syscall.EAGAIN) || errors.Is(err, syscall.EINTR) { + return nil + } + } return err }