kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Fedin <p.fedin@samsung.com>
To: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org
Cc: marc.zyngier@arm.com, 'Christoffer Dall' <christoffer.dall@linaro.org>
Subject: [RFC] Handling CP15 timer without in-kernel irqchip
Date: Fri, 02 Oct 2015 10:28:42 +0300	[thread overview]
Message-ID: <00a001d0fce3$f76e2170$e64a6450$@samsung.com> (raw)

 Hello!

 Since c2f58514cfb374d5368c9da945f1765cd48eb0da ("arm/arm64: KVM: vgic: Check for
!irqchip_in_kernel() when mapping resources") we can run qemu with kernel_irqchip=off option. The
only remaining problem is how to handle CP15 timer in this case.
 I have applied my old experimental patches to kernel 4.2.2. Using them, i can run 'virt' machine
with software-emulated GICv2 on GICv3 hardware without v2 backwards compatibility. Also, i studied
4.3 code, and it seems to be feasible to add this support to 4.3 and on.
 The only main question now is how would we do it. We can actually use two possible approaches:

 1. If there's no in-kernel irqchip, we revert to older timer behavior (ARCH_TIMER_CTRL_IT_MASK
hack), and forward the timer IRQ to userspace using new KVM_EXIT_IRQ return code. Timer IRQ has to
be treated as edge-triggered in this case. This is the approach which my current implementation
uses.

 2. Another possible approach, based on how device tree binding is handled by Linux. It is possible
to remove virtual timer IRQ from the device tree, in this case the kernel reverts to using physical
timer. When running under hypervisor, accesses to physical CP15 timer are trapped into HYP,
therefore we can forward them to userspace using new exit code, something like KVM_EXIT_REG_ACCESS.
In this case the timer would be also emulated by the userspace, which is slower, but allows better
emulation. Also, this could be used in order to run some other guests which just expect physical
timer to be there.

 Both approaches have their own limitations, but anyway this is much better than nothing. What do
you think, and which approach do you like more?

Kind regards,
Pavel Fedin
Expert Engineer
Samsung Electronics Research center Russia



             reply	other threads:[~2015-10-02  7:28 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-02  7:28 Pavel Fedin [this message]
2015-10-02  9:30 ` [RFC] Handling CP15 timer without in-kernel irqchip Paolo Bonzini
2015-10-02  9:41   ` Pavel Fedin
2015-10-02  9:58   ` Peter Maydell
2015-10-02 10:05     ` Paolo Bonzini
2015-10-02 10:16       ` Peter Maydell
2015-10-02 10:18         ` Paolo Bonzini
2015-10-02 10:22           ` Pavel Fedin
2015-10-02 10:23           ` Peter Maydell
2015-10-02 10:18       ` Pavel Fedin
2015-10-02 10:22 ` Marc Zyngier
2015-10-02 10:33   ` Pavel Fedin
2015-10-02 14:54   ` Pavel Fedin
2015-10-02 20:26     ` Christoffer Dall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='00a001d0fce3$f76e2170$e64a6450$@samsung.com' \
    --to=p.fedin@samsung.com \
    --cc=christoffer.dall@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=marc.zyngier@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).