All of lore.kernel.org
 help / color / mirror / Atom feed
From: Suzuki K Poulose <Suzuki.Poulose@arm.com>
To: James Morse <james.morse@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
	kvm@vger.kernel.org, cdall@kernel.org, marc.zyngier@arm.com,
	punit.agrawal@arm.com, will.deacon@arm.com,
	catalin.marinas@arm.com, pbonzini@redhat.com, rkrcmar@redhat.com,
	ard.biesheuvel@linaro.org, peter.maydell@linaro.org,
	kristina.martsenko@arm.com, mark.rutland@arm.com
Subject: Re: [PATCH v2 11/17] kvm: arm64: Configure VTCR per VM
Date: Tue, 3 Apr 2018 16:44:07 +0100	[thread overview]
Message-ID: <f3ea2a6c-6c98-1768-0eef-b57b74ab91fa@arm.com> (raw)
In-Reply-To: <be9e8c47-8366-2d8f-8d8d-b8d2f978107b@arm.com>

On 03/04/18 15:58, James Morse wrote:
> Hi Suzuki,
> 
> On 27/03/18 14:15, Suzuki K Poulose wrote:
>> We set VTCR_EL2 very early during the stage2 init and don't
>> touch it ever. This is fine as we had a fixed IPA size. This
>> patch changes the behavior to set the VTCR for a given VM,
>> depending on its stage2 table. The common configuration for
>> VTCR is still performed during the early init as we have to
>> retain the hardware access flag update bits (VTCR_EL2_HA)
>> per CPU (as they are only set for the CPUs which are capabile).
> 
> (Nit: capable)
> 

Thanks for spotting, will fix it.

> 
>> The bits defining the number of levels in the page table (SL0)
>> and and the size of the Input address to the translation (T0SZ)
>> are programmed for each VM upon entry to the guest.
> 
>> diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
>> index 870f4b1..5ccd3ae 100644
>> --- a/arch/arm64/kvm/hyp/switch.c
>> +++ b/arch/arm64/kvm/hyp/switch.c
>> @@ -164,6 +164,12 @@ static void __hyp_text __deactivate_traps(struct kvm_vcpu *vcpu)
>>   static void __hyp_text __activate_vm(struct kvm_vcpu *vcpu)
>>   {
>>   	struct kvm *kvm = kern_hyp_va(vcpu->kvm);
>> +	u64 vtcr = read_sysreg(vtcr_el2);
>> +
>> +	vtcr &= ~VTCR_EL2_PRIVATE_MASK;
>> +	vtcr |= VTCR_EL2_SL0(kvm_stage2_levels(kvm)) |
>> +		VTCR_EL2_T0SZ(kvm_phys_shift(kvm));
>> +	write_sysreg(vtcr, vtcr_el2);
>>   	write_sysreg(kvm->arch.vttbr, vttbr_el2);
>>   }
> 
> Do we need to set this register for tlb maintenance too?
> e.g. tlbi for a 3-level-stage2 vm when a 2-level-stage2 vm's vtcr is loaded...
> 
> (The ARM-ARM has 'Any of the bits of VTCR_EL2 are permitted to be cached in a TLB'.)

You're right. We need to set the VTCR for the tlb operations. I think
we can do this by hooking it to the __tlb_switch_to_guest() routine.
Will address it in the next version.

Cheers
Suzuki

WARNING: multiple messages have this Message-ID (diff)
From: Suzuki.Poulose@arm.com (Suzuki K Poulose)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 11/17] kvm: arm64: Configure VTCR per VM
Date: Tue, 3 Apr 2018 16:44:07 +0100	[thread overview]
Message-ID: <f3ea2a6c-6c98-1768-0eef-b57b74ab91fa@arm.com> (raw)
In-Reply-To: <be9e8c47-8366-2d8f-8d8d-b8d2f978107b@arm.com>

On 03/04/18 15:58, James Morse wrote:
> Hi Suzuki,
> 
> On 27/03/18 14:15, Suzuki K Poulose wrote:
>> We set VTCR_EL2 very early during the stage2 init and don't
>> touch it ever. This is fine as we had a fixed IPA size. This
>> patch changes the behavior to set the VTCR for a given VM,
>> depending on its stage2 table. The common configuration for
>> VTCR is still performed during the early init as we have to
>> retain the hardware access flag update bits (VTCR_EL2_HA)
>> per CPU (as they are only set for the CPUs which are capabile).
> 
> (Nit: capable)
> 

Thanks for spotting, will fix it.

> 
>> The bits defining the number of levels in the page table (SL0)
>> and and the size of the Input address to the translation (T0SZ)
>> are programmed for each VM upon entry to the guest.
> 
>> diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
>> index 870f4b1..5ccd3ae 100644
>> --- a/arch/arm64/kvm/hyp/switch.c
>> +++ b/arch/arm64/kvm/hyp/switch.c
>> @@ -164,6 +164,12 @@ static void __hyp_text __deactivate_traps(struct kvm_vcpu *vcpu)
>>   static void __hyp_text __activate_vm(struct kvm_vcpu *vcpu)
>>   {
>>   	struct kvm *kvm = kern_hyp_va(vcpu->kvm);
>> +	u64 vtcr = read_sysreg(vtcr_el2);
>> +
>> +	vtcr &= ~VTCR_EL2_PRIVATE_MASK;
>> +	vtcr |= VTCR_EL2_SL0(kvm_stage2_levels(kvm)) |
>> +		VTCR_EL2_T0SZ(kvm_phys_shift(kvm));
>> +	write_sysreg(vtcr, vtcr_el2);
>>   	write_sysreg(kvm->arch.vttbr, vttbr_el2);
>>   }
> 
> Do we need to set this register for tlb maintenance too?
> e.g. tlbi for a 3-level-stage2 vm when a 2-level-stage2 vm's vtcr is loaded...
> 
> (The ARM-ARM has 'Any of the bits of VTCR_EL2 are permitted to be cached in a TLB'.)

You're right. We need to set the VTCR for the tlb operations. I think
we can do this by hooking it to the __tlb_switch_to_guest() routine.
Will address it in the next version.

Cheers
Suzuki

  reply	other threads:[~2018-04-03 15:44 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-27 13:15 [PATCH v2 00/17] kvm: arm64: Dynamic & 52bit IPA support Suzuki K Poulose
2018-03-27 13:15 ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 01/17] virtio: mmio-v1: Validate queue PFN Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 14:07   ` Michael S. Tsirkin
2018-03-27 14:07     ` Michael S. Tsirkin
2018-03-27 13:15 ` [PATCH v2 02/17] virtio: pci-legacy: Validate queue pfn Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 14:11   ` Michael S. Tsirkin
2018-03-27 14:11     ` Michael S. Tsirkin
2018-07-13  0:36     ` Michael S. Tsirkin
2018-07-13  0:36       ` Michael S. Tsirkin
2018-07-13  8:54       ` Suzuki K Poulose
2018-07-13  8:54         ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 03/17] arm64: Make page table helpers reusable Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-26 10:54   ` Julien Grall
2018-04-26 10:54     ` Julien Grall
2018-03-27 13:15 ` [PATCH v2 04/17] arm64: Refactor pud_huge for reusability Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-26 10:55   ` Julien Grall
2018-04-26 10:55     ` Julien Grall
2018-03-27 13:15 ` [PATCH v2 05/17] arm64: Helper for parange to PASize Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-26 10:58   ` Julien Grall
2018-04-26 10:58     ` Julien Grall
2018-04-27 15:18     ` Suzuki K Poulose
2018-04-27 15:18       ` Suzuki K Poulose
2018-04-27 15:18       ` Julien Grall
2018-04-27 15:18         ` Julien Grall
2018-05-03 14:39   ` James Morse
2018-05-03 14:39     ` James Morse
2018-05-08 13:47     ` Suzuki K Poulose
2018-05-08 13:47       ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 06/17] kvm: arm/arm64: Fix stage2_flush_memslot for 4 level page table Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 07/17] kvm: arm/arm64: Remove spurious WARN_ON Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 08/17] kvm: arm/arm64: Prepare for VM specific stage2 translations Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-26 13:35   ` Julien Grall
2018-04-26 13:35     ` Julien Grall
2018-04-27 15:22     ` Suzuki K Poulose
2018-04-27 15:22       ` Suzuki K Poulose
2018-04-27 15:58       ` Suzuki K Poulose
2018-04-27 15:58         ` Suzuki K Poulose
2018-04-27 16:04         ` Julien Grall
2018-04-27 16:04           ` Julien Grall
2018-03-27 13:15 ` [PATCH v2 09/17] kvm: arm64: Make stage2 page table layout dynamic Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-25 16:35   ` Julien Grall
2018-04-25 16:35     ` Julien Grall
2018-04-25 16:37     ` Suzuki K Poulose
2018-04-25 16:37       ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 10/17] kvm: arm64: Dynamic configuration of VTCR and VTTBR mask Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-30 11:14   ` Julien Grall
2018-04-30 11:14     ` Julien Grall
2018-03-27 13:15 ` [PATCH v2 11/17] kvm: arm64: Configure VTCR per VM Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-03 14:58   ` James Morse
2018-04-03 14:58     ` James Morse
2018-04-03 15:44     ` Suzuki K Poulose [this message]
2018-04-03 15:44       ` Suzuki K Poulose
2018-05-03 14:39   ` James Morse
2018-05-03 14:39     ` James Morse
2018-05-08 11:16     ` Suzuki K Poulose
2018-05-08 11:16       ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 12/17] kvm: arm/arm64: Expose supported physical address limit for VM Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-13 13:21   ` Peter Maydell
2018-04-13 13:21     ` Peter Maydell
2018-04-16 10:23     ` Suzuki K Poulose
2018-04-16 10:23       ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 13/17] kvm: arm/arm64: Allow tuning the physical address size " Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-25 16:10   ` Julien Grall
2018-04-25 16:10     ` Julien Grall
2018-04-25 16:22     ` Suzuki K Poulose
2018-04-25 16:22       ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 14/17] kvm: arm64: Switch to per VM IPA limit Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-13 16:27   ` Punit Agrawal
2018-04-13 16:27     ` Punit Agrawal
2018-04-16 10:25     ` Suzuki K Poulose
2018-04-16 10:25       ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 15/17] vgic: Add support for 52bit guest physical address Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 16/17] kvm: arm64: Add support for handling 52bit IPA Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [PATCH v2 17/17] kvm: arm64: Allow IPA size supported by the system Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [kvmtool PATCH 18/17] kvmtool: Allow backends to run checks on the KVM device fd Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [kvmtool PATCH 19/17] kvmtool: arm64: Add support for guest physical address size Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-03-27 13:15 ` [kvmtool PATCH 20/17] kvmtool: arm64: Switch memory layout Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-03 12:34   ` Jean-Philippe Brucker
2018-04-03 12:34     ` Jean-Philippe Brucker
2018-03-27 13:15 ` [kvmtool PATCH 21/17] kvmtool: arm: Add support for creating VM with PA size Suzuki K Poulose
2018-03-27 13:15   ` Suzuki K Poulose
2018-04-26 14:08   ` Julien Grall
2018-04-26 14:08     ` Julien Grall
2018-04-30 14:17   ` Julien Grall
2018-04-30 14:17     ` Julien Grall
2018-04-30 14:18     ` Suzuki K Poulose
2018-04-30 14:18       ` Suzuki K Poulose

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=f3ea2a6c-6c98-1768-0eef-b57b74ab91fa@arm.com \
    --to=suzuki.poulose@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=catalin.marinas@arm.com \
    --cc=cdall@kernel.org \
    --cc=james.morse@arm.com \
    --cc=kristina.martsenko@arm.com \
    --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=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=punit.agrawal@arm.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.