|
From: | Paul Durrant |
Subject: | Re: [PATCH v6 12/51] i386/xen: Implement SCHEDOP_poll and SCHEDOP_yield |
Date: | Mon, 16 Jan 2023 16:36:30 +0000 |
User-agent: | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 |
On 10/01/2023 12:20, David Woodhouse wrote:
From: David Woodhouse <dwmw@amazon.co.uk> They both do the same thing and just call sched_yield. This is enough to stop the Linux guest panicking when running on a host kernel which doesn't intercept SCHEDOP_poll and lets it reach userspace. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org> ... with some observations...
--- target/i386/kvm/xen-emu.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/i386/kvm/xen-emu.c b/target/i386/kvm/xen-emu.c index 5f2b55ef10..80005ea527 100644 --- a/target/i386/kvm/xen-emu.c +++ b/target/i386/kvm/xen-emu.c @@ -227,6 +227,18 @@ static bool kvm_xen_hcall_sched_op(struct kvm_xen_exit *exit, X86CPU *cpu, err = schedop_shutdown(cs, arg); break;+ case SCHEDOP_poll:+ /* + * Linux will panic if this doesn't work. Just yield; it's not + * worth overthinking it because wWith event channel handling
Typo 'wWith'. Also possibly worth mentioning that the reason a yield is ok is because the semantics of the hypercall allow for spurious wake-up.
+ * in KVM, the kernel will intercept this and it will never + * reach QEMU anyway. + */ + case SCHEDOP_yield: + sched_yield(); + err = 0; + break; + default: return false; }
[Prev in Thread] | Current Thread | [Next in Thread] |