All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jintack Lim <jintack@cs.columbia.edu>
To: Marc Zyngier <marc.zyngier@arm.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>,
	"Christoffer Dall" <christoffer.dall@linaro.org>,
	linux@armlinux.org.uk,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	"Will Deacon" <will.deacon@arm.com>,
	"Andre Przywara" <andre.przywara@arm.com>,
	"KVM General" <kvm@vger.kernel.org>,
	arm-mail-list <linux-arm-kernel@lists.infradead.org>,
	kvmarm@lists.cs.columbia.edu,
	"lkml - Kernel Mailing List" <linux-kernel@vger.kernel.org>
Subject: Re: [RFC v2 00/10] Provide the EL1 physical timer to the VM
Date: Mon, 30 Jan 2017 14:02:28 -0500	[thread overview]
Message-ID: <CAHyh4xiErc288_bj=YmtADcZj5rUG8ryMrW+dP428gxDuOJCUQ@mail.gmail.com> (raw)
In-Reply-To: <86h94h97yn.fsf@arm.com>

Hi Marc,

On Sun, Jan 29, 2017 at 10:55 AM, Marc Zyngier <marc.zyngier@arm.com> wrote:
> Hi Jintack,
>
> On Fri, Jan 27 2017 at 01:04:50 AM, Jintack Lim <jintack@cs.columbia.edu> wrote:
>> The ARM architecture defines the EL1 physical timer and the virtual timer,
>> and it is reasonable for an OS to expect to be able to access both.
>> However, the current KVM implementation does not provide the EL1 physical
>> timer to VMs but terminates VMs on access to the timer.
>>
>> This patch series enables VMs to use the EL1 physical timer through
>> trap-and-emulate.  The KVM host emulates each EL1 physical timer register
>> access and sets up the background timer accordingly.  When the background
>> timer expires, the KVM host injects EL1 physical timer interrupts to the
>> VM.  Alternatively, it's also possible to allow VMs to access the EL1
>> physical timer without trapping.  However, this requires somehow using the
>> EL2 physical timer for the Linux host while running the VM instead of the
>> EL1 physical timer.  Right now I just implemented trap-and-emulate because
>> this was straightforward to do, and I leave it to future work to determine
>> if transferring the EL1 physical timer state to the EL2 timer provides any
>> performance benefit.
>>
>> This feature will be useful for any OS that wishes to access the EL1
>> physical timer. Nested virtualization is one of those use cases. A nested
>> hypervisor running inside a VM would think it has full access to the
>> hardware and naturally tries to use the EL1 physical timer as Linux would
>> do. Other nested hypervisors may try to use the EL2 physical timer as Xen
>> would do, but supporting the EL2 physical timer to the VM is out of scope
>> of this patch series. This patch series will make it easy to add the EL2
>> timer support in the future, though.
>>
>> Note that Linux VMs booting in EL1 will be unaffected by this patch series
>> and will continue to use only the virtual timer and this patch series will
>> therefore not introduce any performance degredation as a result of
>> trap-and-emulate.
>
> Thanks for respining this series. Overall, this looks quite good, and
> the couple of comments I have should be easy to address.

Thanks for the review!

>
> My main concern is that we do expose a timer that doesn't hide
> CNTVOFF. I appreciate that that was already the case, since CNTPCT was
> always available (and this avoided trapping the counter), but maybe we
> should have a way for userspace to ask for a mode where CNTPCT=CNTVCT,
> byt trapping the physical counter and taking CNTVOFF in all physical
> timer calculations.

As discussed in the other thread, I think we can expose CNTVOFF to the
guest OS. I have a patch that lets the guest hypervisor observe CNTVCT
= CNTPCT - offset (virtual CNTVOFF_EL2) and I will include it in the
next nesting patch series.

Thanks,
Jintack

>
> I'm pretty sure you've addressed this one way or another in your nested
> virt series, so maybe extracting the relevant patches and adding them on
> top of this series could be an option?
>
> Thanks,
>
>         M.
> --
> Jazz is not dead. It just smells funny.
>

WARNING: multiple messages have this Message-ID (diff)
From: Jintack Lim <jintack@cs.columbia.edu>
To: Marc Zyngier <marc.zyngier@arm.com>
Cc: KVM General <kvm@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux@armlinux.org.uk,
	lkml - Kernel Mailing List <linux-kernel@vger.kernel.org>,
	arm-mail-list <linux-arm-kernel@lists.infradead.org>,
	Andre Przywara <andre.przywara@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	kvmarm@lists.cs.columbia.edu
Subject: Re: [RFC v2 00/10] Provide the EL1 physical timer to the VM
Date: Mon, 30 Jan 2017 14:02:28 -0500	[thread overview]
Message-ID: <CAHyh4xiErc288_bj=YmtADcZj5rUG8ryMrW+dP428gxDuOJCUQ@mail.gmail.com> (raw)
In-Reply-To: <86h94h97yn.fsf@arm.com>

Hi Marc,

On Sun, Jan 29, 2017 at 10:55 AM, Marc Zyngier <marc.zyngier@arm.com> wrote:
> Hi Jintack,
>
> On Fri, Jan 27 2017 at 01:04:50 AM, Jintack Lim <jintack@cs.columbia.edu> wrote:
>> The ARM architecture defines the EL1 physical timer and the virtual timer,
>> and it is reasonable for an OS to expect to be able to access both.
>> However, the current KVM implementation does not provide the EL1 physical
>> timer to VMs but terminates VMs on access to the timer.
>>
>> This patch series enables VMs to use the EL1 physical timer through
>> trap-and-emulate.  The KVM host emulates each EL1 physical timer register
>> access and sets up the background timer accordingly.  When the background
>> timer expires, the KVM host injects EL1 physical timer interrupts to the
>> VM.  Alternatively, it's also possible to allow VMs to access the EL1
>> physical timer without trapping.  However, this requires somehow using the
>> EL2 physical timer for the Linux host while running the VM instead of the
>> EL1 physical timer.  Right now I just implemented trap-and-emulate because
>> this was straightforward to do, and I leave it to future work to determine
>> if transferring the EL1 physical timer state to the EL2 timer provides any
>> performance benefit.
>>
>> This feature will be useful for any OS that wishes to access the EL1
>> physical timer. Nested virtualization is one of those use cases. A nested
>> hypervisor running inside a VM would think it has full access to the
>> hardware and naturally tries to use the EL1 physical timer as Linux would
>> do. Other nested hypervisors may try to use the EL2 physical timer as Xen
>> would do, but supporting the EL2 physical timer to the VM is out of scope
>> of this patch series. This patch series will make it easy to add the EL2
>> timer support in the future, though.
>>
>> Note that Linux VMs booting in EL1 will be unaffected by this patch series
>> and will continue to use only the virtual timer and this patch series will
>> therefore not introduce any performance degredation as a result of
>> trap-and-emulate.
>
> Thanks for respining this series. Overall, this looks quite good, and
> the couple of comments I have should be easy to address.

Thanks for the review!

>
> My main concern is that we do expose a timer that doesn't hide
> CNTVOFF. I appreciate that that was already the case, since CNTPCT was
> always available (and this avoided trapping the counter), but maybe we
> should have a way for userspace to ask for a mode where CNTPCT=CNTVCT,
> byt trapping the physical counter and taking CNTVOFF in all physical
> timer calculations.

As discussed in the other thread, I think we can expose CNTVOFF to the
guest OS. I have a patch that lets the guest hypervisor observe CNTVCT
= CNTPCT - offset (virtual CNTVOFF_EL2) and I will include it in the
next nesting patch series.

Thanks,
Jintack

>
> I'm pretty sure you've addressed this one way or another in your nested
> virt series, so maybe extracting the relevant patches and adding them on
> top of this series could be an option?
>
> Thanks,
>
>         M.
> --
> Jazz is not dead. It just smells funny.
>

WARNING: multiple messages have this Message-ID (diff)
From: jintack@cs.columbia.edu (Jintack Lim)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC v2 00/10] Provide the EL1 physical timer to the VM
Date: Mon, 30 Jan 2017 14:02:28 -0500	[thread overview]
Message-ID: <CAHyh4xiErc288_bj=YmtADcZj5rUG8ryMrW+dP428gxDuOJCUQ@mail.gmail.com> (raw)
In-Reply-To: <86h94h97yn.fsf@arm.com>

Hi Marc,

On Sun, Jan 29, 2017 at 10:55 AM, Marc Zyngier <marc.zyngier@arm.com> wrote:
> Hi Jintack,
>
> On Fri, Jan 27 2017 at 01:04:50 AM, Jintack Lim <jintack@cs.columbia.edu> wrote:
>> The ARM architecture defines the EL1 physical timer and the virtual timer,
>> and it is reasonable for an OS to expect to be able to access both.
>> However, the current KVM implementation does not provide the EL1 physical
>> timer to VMs but terminates VMs on access to the timer.
>>
>> This patch series enables VMs to use the EL1 physical timer through
>> trap-and-emulate.  The KVM host emulates each EL1 physical timer register
>> access and sets up the background timer accordingly.  When the background
>> timer expires, the KVM host injects EL1 physical timer interrupts to the
>> VM.  Alternatively, it's also possible to allow VMs to access the EL1
>> physical timer without trapping.  However, this requires somehow using the
>> EL2 physical timer for the Linux host while running the VM instead of the
>> EL1 physical timer.  Right now I just implemented trap-and-emulate because
>> this was straightforward to do, and I leave it to future work to determine
>> if transferring the EL1 physical timer state to the EL2 timer provides any
>> performance benefit.
>>
>> This feature will be useful for any OS that wishes to access the EL1
>> physical timer. Nested virtualization is one of those use cases. A nested
>> hypervisor running inside a VM would think it has full access to the
>> hardware and naturally tries to use the EL1 physical timer as Linux would
>> do. Other nested hypervisors may try to use the EL2 physical timer as Xen
>> would do, but supporting the EL2 physical timer to the VM is out of scope
>> of this patch series. This patch series will make it easy to add the EL2
>> timer support in the future, though.
>>
>> Note that Linux VMs booting in EL1 will be unaffected by this patch series
>> and will continue to use only the virtual timer and this patch series will
>> therefore not introduce any performance degredation as a result of
>> trap-and-emulate.
>
> Thanks for respining this series. Overall, this looks quite good, and
> the couple of comments I have should be easy to address.

Thanks for the review!

>
> My main concern is that we do expose a timer that doesn't hide
> CNTVOFF. I appreciate that that was already the case, since CNTPCT was
> always available (and this avoided trapping the counter), but maybe we
> should have a way for userspace to ask for a mode where CNTPCT=CNTVCT,
> byt trapping the physical counter and taking CNTVOFF in all physical
> timer calculations.

As discussed in the other thread, I think we can expose CNTVOFF to the
guest OS. I have a patch that lets the guest hypervisor observe CNTVCT
= CNTPCT - offset (virtual CNTVOFF_EL2) and I will include it in the
next nesting patch series.

Thanks,
Jintack

>
> I'm pretty sure you've addressed this one way or another in your nested
> virt series, so maybe extracting the relevant patches and adding them on
> top of this series could be an option?
>
> Thanks,
>
>         M.
> --
> Jazz is not dead. It just smells funny.
>

  reply	other threads:[~2017-01-30 19:19 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-27  1:04 [RFC v2 00/10] Provide the EL1 physical timer to the VM Jintack Lim
2017-01-27  1:04 ` Jintack Lim
2017-01-27  1:04 ` [RFC v2 01/10] KVM: arm/arm64: Abstract virtual timer context into separate structure Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-29 11:44   ` Marc Zyngier
2017-01-29 11:44     ` Marc Zyngier
2017-01-29 11:44     ` Marc Zyngier
2017-01-27  1:04 ` [RFC v2 02/10] KVM: arm/arm64: Move cntvoff to each timer context Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-29 11:54   ` Marc Zyngier
2017-01-29 11:54     ` Marc Zyngier
2017-01-29 11:54     ` Marc Zyngier
2017-01-30 14:45     ` Christoffer Dall
2017-01-30 14:45       ` Christoffer Dall
2017-01-30 14:45       ` Christoffer Dall
2017-01-30 14:51       ` Marc Zyngier
2017-01-30 14:51         ` Marc Zyngier
2017-01-30 14:51         ` Marc Zyngier
2017-01-30 17:40         ` Jintack Lim
2017-01-30 17:40           ` Jintack Lim
2017-01-30 17:40           ` Jintack Lim
2017-01-30 17:58     ` Jintack Lim
2017-01-30 17:58       ` Jintack Lim
2017-01-30 17:58       ` Jintack Lim
2017-01-30 18:05       ` Marc Zyngier
2017-01-30 18:05         ` Marc Zyngier
2017-01-30 18:05         ` Marc Zyngier
2017-01-30 18:45         ` Jintack Lim
2017-01-30 18:45           ` Jintack Lim
2017-01-27  1:04 ` [RFC v2 03/10] KVM: arm/arm64: Decouple kvm timer functions from virtual timer Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-29 12:01   ` Marc Zyngier
2017-01-29 12:01     ` Marc Zyngier
2017-01-29 12:01     ` Marc Zyngier
2017-01-30 17:17     ` Jintack Lim
2017-01-30 17:17       ` Jintack Lim
2017-01-30 14:49   ` Christoffer Dall
2017-01-30 14:49     ` Christoffer Dall
2017-01-30 14:49     ` Christoffer Dall
2017-01-30 17:18     ` Jintack Lim
2017-01-30 17:18       ` Jintack Lim
2017-01-30 17:18       ` Jintack Lim
2017-01-27  1:04 ` [RFC v2 04/10] KVM: arm/arm64: Add the EL1 physical timer context Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-27  1:04 ` [RFC v2 05/10] KVM: arm/arm64: Initialize the emulated EL1 physical timer Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-29 12:07   ` Marc Zyngier
2017-01-29 12:07     ` Marc Zyngier
2017-01-29 12:07     ` Marc Zyngier
2017-01-30 14:58     ` Christoffer Dall
2017-01-30 14:58       ` Christoffer Dall
2017-01-30 14:58       ` Christoffer Dall
2017-01-30 17:44       ` Marc Zyngier
2017-01-30 17:44         ` Marc Zyngier
2017-01-30 19:04         ` Christoffer Dall
2017-01-30 19:04           ` Christoffer Dall
2017-01-30 19:04           ` Christoffer Dall
2017-02-01 10:08           ` Marc Zyngier
2017-02-01 10:08             ` Marc Zyngier
2017-02-01 10:08             ` Marc Zyngier
2017-01-27  1:04 ` [RFC v2 06/10] KVM: arm/arm64: Update the physical timer interrupt level Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-29 15:21   ` Marc Zyngier
2017-01-29 15:21     ` Marc Zyngier
2017-01-29 15:21     ` Marc Zyngier
2017-01-30 15:02     ` Christoffer Dall
2017-01-30 15:02       ` Christoffer Dall
2017-01-30 17:50       ` Marc Zyngier
2017-01-30 17:50         ` Marc Zyngier
2017-01-30 17:50         ` Marc Zyngier
2017-01-30 18:41         ` Christoffer Dall
2017-01-30 18:41           ` Christoffer Dall
2017-01-30 18:48           ` Marc Zyngier
2017-01-30 18:48             ` Marc Zyngier
2017-01-30 18:48             ` Marc Zyngier
2017-01-30 19:06             ` Christoffer Dall
2017-01-30 19:06               ` Christoffer Dall
2017-01-30 19:06               ` Christoffer Dall
2017-01-31 17:00               ` Marc Zyngier
2017-01-31 17:00                 ` Marc Zyngier
2017-01-31 17:00                 ` Marc Zyngier
2017-02-01  8:02                 ` Christoffer Dall
2017-02-01  8:02                   ` Christoffer Dall
2017-02-01  8:02                   ` Christoffer Dall
2017-02-01  8:04     ` Christoffer Dall
2017-02-01  8:04       ` Christoffer Dall
2017-02-01  8:04       ` Christoffer Dall
2017-02-01  8:40       ` Jintack Lim
2017-02-01  8:40         ` Jintack Lim
2017-02-01  8:40         ` Jintack Lim
2017-02-01 10:07         ` Christoffer Dall
2017-02-01 10:07           ` Christoffer Dall
2017-02-01 10:07           ` Christoffer Dall
2017-02-01 10:17           ` Marc Zyngier
2017-02-01 10:17             ` Marc Zyngier
2017-02-01 10:17             ` Marc Zyngier
2017-02-01 10:01       ` Marc Zyngier
2017-02-01 10:01         ` Marc Zyngier
2017-01-27  1:04 ` [RFC v2 07/10] KVM: arm/arm64: Set a background timer to the earliest timer expiration Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-27  1:04 ` [RFC v2 08/10] KVM: arm/arm64: Set up a background timer for the physical timer emulation Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-27  1:04 ` [RFC v2 09/10] KVM: arm64: Add the EL1 physical timer access handler Jintack Lim
2017-01-27  1:04   ` Jintack Lim
2017-01-27  1:05 ` [RFC v2 10/10] KVM: arm/arm64: Emulate the EL1 phys timer register access Jintack Lim
2017-01-27  1:05   ` Jintack Lim
2017-01-29 15:44   ` Marc Zyngier
2017-01-29 15:44     ` Marc Zyngier
2017-01-29 15:44     ` Marc Zyngier
2017-01-30 17:08     ` Jintack Lim
2017-01-30 17:08       ` Jintack Lim
2017-01-30 17:08       ` Jintack Lim
2017-01-30 17:26       ` Peter Maydell
2017-01-30 17:26         ` Peter Maydell
2017-01-30 17:26         ` Peter Maydell
2017-01-30 17:35         ` Marc Zyngier
2017-01-30 17:35           ` Marc Zyngier
2017-01-30 17:35           ` Marc Zyngier
2017-01-30 17:38         ` Jintack Lim
2017-01-30 17:38           ` Jintack Lim
2017-01-30 17:38           ` Jintack Lim
2017-01-29 15:55 ` [RFC v2 00/10] Provide the EL1 physical timer to the VM Marc Zyngier
2017-01-29 15:55   ` Marc Zyngier
2017-01-29 15:55   ` Marc Zyngier
2017-01-30 19:02   ` Jintack Lim [this message]
2017-01-30 19:02     ` Jintack Lim
2017-01-30 19:02     ` Jintack Lim

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='CAHyh4xiErc288_bj=YmtADcZj5rUG8ryMrW+dP428gxDuOJCUQ@mail.gmail.com' \
    --to=jintack@cs.columbia.edu \
    --cc=andre.przywara@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=marc.zyngier@arm.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=will.deacon@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.