All of lore.kernel.org
 help / color / mirror / Atom feed
From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: Marc Zyngier <marc.zyngier@arm.com>, Will Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	kvmarm@lists.cs.columbia.edu, james.morse@arm.com,
	cdall@kernel.org, eric.auger@redhat.com, julien.grall@arm.com,
	catalin.marinas@arm.com, punit.agrawal@arm.com,
	qemu-devel@nongnu.org, "Peter Maydel" <peter.maydell@linaro.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>
Subject: Re: [PATCH v3 15/20] kvm: arm/arm64: Allow tuning the physical address size for VM
Date: Fri, 6 Jul 2018 17:39:00 +0100	[thread overview]
Message-ID: <f3463d0a-c6a3-c34d-acb3-13c99fc61c5a@arm.com> (raw)
In-Reply-To: <9f1af26e-2913-2b0b-1352-63160096f78f@arm.com>

On 07/06/2018 04:09 PM, Marc Zyngier wrote:
> On 06/07/18 14:49, Suzuki K Poulose wrote:
>> On 04/07/18 23:03, Suzuki K Poulose wrote:
>>> On 07/04/2018 04:51 PM, Will Deacon wrote:
>>>> Hi Suzuki,
>>>>
>>>> On Fri, Jun 29, 2018 at 12:15:35PM +0100, Suzuki K Poulose wrote:
>>>>> Allow specifying the physical address size for a new VM via
>>>>> the kvm_type argument for KVM_CREATE_VM ioctl. This allows
>>>>> us to finalise the stage2 page table format as early as possible
>>>>> and hence perform the right checks on the memory slots without
>>>>> complication. The size is encoded as Log2(PA_Size) in the bits[7:0]
>>>>> of the type field and can encode more information in the future if
>>>>> required. The IPA size is still capped at 40bits.
>>>>>
>>>>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>>>>> Cc: Christoffer Dall <cdall@kernel.org>
>>>>> Cc: Peter Maydel <peter.maydell@linaro.org>
>>>>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>>>>> Cc: Radim Krčmář <rkrcmar@redhat.com>
>>>>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>>>>> ---
>>>>>    arch/arm/include/asm/kvm_mmu.h   |  2 ++
>>>>>    arch/arm64/include/asm/kvm_arm.h | 10 +++-------
>>>>>    arch/arm64/include/asm/kvm_mmu.h |  2 ++
>>>>>    include/uapi/linux/kvm.h         | 10 ++++++++++
>>>>>    virt/kvm/arm/arm.c               | 24 ++++++++++++++++++++++--
>>>>>    5 files changed, 39 insertions(+), 9 deletions(-)
>>>>
>>>> [...]
>>>>
>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>>>> index 4df9bb6..fa4cab0 100644
>>>>> --- a/include/uapi/linux/kvm.h
>>>>> +++ b/include/uapi/linux/kvm.h
>>>>> @@ -751,6 +751,16 @@ struct kvm_ppc_resize_hpt {
>>>>>    #define KVM_S390_SIE_PAGE_OFFSET 1
>>>>>    /*
>>>>> + * On arm/arm64, machine type can be used to request the physical
>>>>> + * address size for the VM. Bits [7-0] have been reserved for the
>>>>> + * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
>>>>> + * value 0 implies the default IPA size, which is 40bits.
>>>>> + */
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK    0xff
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT(x)        \
>>>>> +    ((x) & KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK)
>>>>
>>>> This seems like you're allocating quite a lot of bits in a non-extensible
>>>> interface to a fairly esoteric parameter. Would it be better to add another
>>>> ioctl, or condense the number of sizes you support instead?
>>>
>>> As I explained in the other thread, we need the size as soon as the VM
>>> is created. The major challenge is keeping the backward compatibility by
>>> mapping 0 to 40bits. I will give it a thought.
>>
>> Here is one option. We could re-use the {V}TCR_ELx.{I}PS field format, which
>> occupies 3 bits and has the following definitions. (ID_AA64MMFR0_EL1:PARange
>> also has the field definitions, except that the field is 4bits wide, but
>> only 3bits are used)
>>
>> 000 32 bits, 4GB.
>> 001 36 bits, 64GB.
>> 010 40 bits, 1TB.
>> 011 42 bits, 4TB.
>> 100 44 bits, 16TB.
>> 101 48 bits, 256TB.
>> 110 52 bits, 4PB
>>
>> But we need to map 0 => 40bits IPA to make our ABI backward compatible. So
>> we could use the additional one bit to indicate that IPA size is requested
>> in the 3 bits.
>>
>> i.e,
>>
>> machine_type:
>>
>> Bit [2:0]	- Requested IPA size. Values follow VTCR_EL2.PS format.
>>
>> Bit [3]		- 1 => IPA Size bits (Bits[2:0]) requested.
>> 		0 => Not requested
>>
>> The only minor down side is restricting to the predefined values above,
>> which is not a real issue for a VM.
>>
>> Thoughts ?
> 
> I'd be very wary of using that 4th bit to do something that is not in
> the architecture. We have only a single value left to be used (0b111),
> and then your scheme clashes with the architecture definition.

I agree. However, if we ever go beyond the 3bits in PARange, we have an
issue with {V}TCR counter part. But lets not take that chance.

> 
> I'd rather encode things in a way that is independent from the
> architecture, and be done with it. You can map 0 to 40bits, and we have
> the ability to express all values the architecture has (just in a
> different order).

The other option I can think of is encoding a signed number which is the 
difference of the IPA from 40. But that would need 5 bits if we were to
encode it as it is. And if we want to squeeze it in 4bit, we could store 
half the difference (limiting the IPA limit to even numbers).

i.e IPA = 40 + 2 * sign_extend(bits[3:0);


Suzuki

WARNING: multiple messages have this Message-ID (diff)
From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: Marc Zyngier <marc.zyngier@arm.com>, Will Deacon <will.deacon@arm.com>
Cc: cdall@kernel.org, kvm@vger.kernel.org, catalin.marinas@arm.com,
	punit.agrawal@arm.com, linux-kernel@vger.kernel.org,
	qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 15/20] kvm: arm/arm64: Allow tuning the physical address size for VM
Date: Fri, 6 Jul 2018 17:39:00 +0100	[thread overview]
Message-ID: <f3463d0a-c6a3-c34d-acb3-13c99fc61c5a@arm.com> (raw)
In-Reply-To: <9f1af26e-2913-2b0b-1352-63160096f78f@arm.com>

On 07/06/2018 04:09 PM, Marc Zyngier wrote:
> On 06/07/18 14:49, Suzuki K Poulose wrote:
>> On 04/07/18 23:03, Suzuki K Poulose wrote:
>>> On 07/04/2018 04:51 PM, Will Deacon wrote:
>>>> Hi Suzuki,
>>>>
>>>> On Fri, Jun 29, 2018 at 12:15:35PM +0100, Suzuki K Poulose wrote:
>>>>> Allow specifying the physical address size for a new VM via
>>>>> the kvm_type argument for KVM_CREATE_VM ioctl. This allows
>>>>> us to finalise the stage2 page table format as early as possible
>>>>> and hence perform the right checks on the memory slots without
>>>>> complication. The size is encoded as Log2(PA_Size) in the bits[7:0]
>>>>> of the type field and can encode more information in the future if
>>>>> required. The IPA size is still capped at 40bits.
>>>>>
>>>>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>>>>> Cc: Christoffer Dall <cdall@kernel.org>
>>>>> Cc: Peter Maydel <peter.maydell@linaro.org>
>>>>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>>>>> Cc: Radim Krčmář <rkrcmar@redhat.com>
>>>>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>>>>> ---
>>>>>    arch/arm/include/asm/kvm_mmu.h   |  2 ++
>>>>>    arch/arm64/include/asm/kvm_arm.h | 10 +++-------
>>>>>    arch/arm64/include/asm/kvm_mmu.h |  2 ++
>>>>>    include/uapi/linux/kvm.h         | 10 ++++++++++
>>>>>    virt/kvm/arm/arm.c               | 24 ++++++++++++++++++++++--
>>>>>    5 files changed, 39 insertions(+), 9 deletions(-)
>>>>
>>>> [...]
>>>>
>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>>>> index 4df9bb6..fa4cab0 100644
>>>>> --- a/include/uapi/linux/kvm.h
>>>>> +++ b/include/uapi/linux/kvm.h
>>>>> @@ -751,6 +751,16 @@ struct kvm_ppc_resize_hpt {
>>>>>    #define KVM_S390_SIE_PAGE_OFFSET 1
>>>>>    /*
>>>>> + * On arm/arm64, machine type can be used to request the physical
>>>>> + * address size for the VM. Bits [7-0] have been reserved for the
>>>>> + * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
>>>>> + * value 0 implies the default IPA size, which is 40bits.
>>>>> + */
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK    0xff
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT(x)        \
>>>>> +    ((x) & KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK)
>>>>
>>>> This seems like you're allocating quite a lot of bits in a non-extensible
>>>> interface to a fairly esoteric parameter. Would it be better to add another
>>>> ioctl, or condense the number of sizes you support instead?
>>>
>>> As I explained in the other thread, we need the size as soon as the VM
>>> is created. The major challenge is keeping the backward compatibility by
>>> mapping 0 to 40bits. I will give it a thought.
>>
>> Here is one option. We could re-use the {V}TCR_ELx.{I}PS field format, which
>> occupies 3 bits and has the following definitions. (ID_AA64MMFR0_EL1:PARange
>> also has the field definitions, except that the field is 4bits wide, but
>> only 3bits are used)
>>
>> 000 32 bits, 4GB.
>> 001 36 bits, 64GB.
>> 010 40 bits, 1TB.
>> 011 42 bits, 4TB.
>> 100 44 bits, 16TB.
>> 101 48 bits, 256TB.
>> 110 52 bits, 4PB
>>
>> But we need to map 0 => 40bits IPA to make our ABI backward compatible. So
>> we could use the additional one bit to indicate that IPA size is requested
>> in the 3 bits.
>>
>> i.e,
>>
>> machine_type:
>>
>> Bit [2:0]	- Requested IPA size. Values follow VTCR_EL2.PS format.
>>
>> Bit [3]		- 1 => IPA Size bits (Bits[2:0]) requested.
>> 		0 => Not requested
>>
>> The only minor down side is restricting to the predefined values above,
>> which is not a real issue for a VM.
>>
>> Thoughts ?
> 
> I'd be very wary of using that 4th bit to do something that is not in
> the architecture. We have only a single value left to be used (0b111),
> and then your scheme clashes with the architecture definition.

I agree. However, if we ever go beyond the 3bits in PARange, we have an
issue with {V}TCR counter part. But lets not take that chance.

> 
> I'd rather encode things in a way that is independent from the
> architecture, and be done with it. You can map 0 to 40bits, and we have
> the ability to express all values the architecture has (just in a
> different order).

The other option I can think of is encoding a signed number which is the 
difference of the IPA from 40. But that would need 5 bits if we were to
encode it as it is. And if we want to squeeze it in 4bit, we could store 
half the difference (limiting the IPA limit to even numbers).

i.e IPA = 40 + 2 * sign_extend(bits[3:0);


Suzuki
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: Marc Zyngier <marc.zyngier@arm.com>, Will Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	kvmarm@lists.cs.columbia.edu, james.morse@arm.com,
	cdall@kernel.org, eric.auger@redhat.com, julien.grall@arm.com,
	catalin.marinas@arm.com, punit.agrawal@arm.com,
	qemu-devel@nongnu.org, "Peter Maydel" <peter.maydell@linaro.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 15/20] kvm: arm/arm64: Allow tuning the physical address size for VM
Date: Fri, 6 Jul 2018 17:39:00 +0100	[thread overview]
Message-ID: <f3463d0a-c6a3-c34d-acb3-13c99fc61c5a@arm.com> (raw)
In-Reply-To: <9f1af26e-2913-2b0b-1352-63160096f78f@arm.com>

On 07/06/2018 04:09 PM, Marc Zyngier wrote:
> On 06/07/18 14:49, Suzuki K Poulose wrote:
>> On 04/07/18 23:03, Suzuki K Poulose wrote:
>>> On 07/04/2018 04:51 PM, Will Deacon wrote:
>>>> Hi Suzuki,
>>>>
>>>> On Fri, Jun 29, 2018 at 12:15:35PM +0100, Suzuki K Poulose wrote:
>>>>> Allow specifying the physical address size for a new VM via
>>>>> the kvm_type argument for KVM_CREATE_VM ioctl. This allows
>>>>> us to finalise the stage2 page table format as early as possible
>>>>> and hence perform the right checks on the memory slots without
>>>>> complication. The size is encoded as Log2(PA_Size) in the bits[7:0]
>>>>> of the type field and can encode more information in the future if
>>>>> required. The IPA size is still capped at 40bits.
>>>>>
>>>>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>>>>> Cc: Christoffer Dall <cdall@kernel.org>
>>>>> Cc: Peter Maydel <peter.maydell@linaro.org>
>>>>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>>>>> Cc: Radim Krčmář <rkrcmar@redhat.com>
>>>>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>>>>> ---
>>>>>    arch/arm/include/asm/kvm_mmu.h   |  2 ++
>>>>>    arch/arm64/include/asm/kvm_arm.h | 10 +++-------
>>>>>    arch/arm64/include/asm/kvm_mmu.h |  2 ++
>>>>>    include/uapi/linux/kvm.h         | 10 ++++++++++
>>>>>    virt/kvm/arm/arm.c               | 24 ++++++++++++++++++++++--
>>>>>    5 files changed, 39 insertions(+), 9 deletions(-)
>>>>
>>>> [...]
>>>>
>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>>>> index 4df9bb6..fa4cab0 100644
>>>>> --- a/include/uapi/linux/kvm.h
>>>>> +++ b/include/uapi/linux/kvm.h
>>>>> @@ -751,6 +751,16 @@ struct kvm_ppc_resize_hpt {
>>>>>    #define KVM_S390_SIE_PAGE_OFFSET 1
>>>>>    /*
>>>>> + * On arm/arm64, machine type can be used to request the physical
>>>>> + * address size for the VM. Bits [7-0] have been reserved for the
>>>>> + * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
>>>>> + * value 0 implies the default IPA size, which is 40bits.
>>>>> + */
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK    0xff
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT(x)        \
>>>>> +    ((x) & KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK)
>>>>
>>>> This seems like you're allocating quite a lot of bits in a non-extensible
>>>> interface to a fairly esoteric parameter. Would it be better to add another
>>>> ioctl, or condense the number of sizes you support instead?
>>>
>>> As I explained in the other thread, we need the size as soon as the VM
>>> is created. The major challenge is keeping the backward compatibility by
>>> mapping 0 to 40bits. I will give it a thought.
>>
>> Here is one option. We could re-use the {V}TCR_ELx.{I}PS field format, which
>> occupies 3 bits and has the following definitions. (ID_AA64MMFR0_EL1:PARange
>> also has the field definitions, except that the field is 4bits wide, but
>> only 3bits are used)
>>
>> 000 32 bits, 4GB.
>> 001 36 bits, 64GB.
>> 010 40 bits, 1TB.
>> 011 42 bits, 4TB.
>> 100 44 bits, 16TB.
>> 101 48 bits, 256TB.
>> 110 52 bits, 4PB
>>
>> But we need to map 0 => 40bits IPA to make our ABI backward compatible. So
>> we could use the additional one bit to indicate that IPA size is requested
>> in the 3 bits.
>>
>> i.e,
>>
>> machine_type:
>>
>> Bit [2:0]	- Requested IPA size. Values follow VTCR_EL2.PS format.
>>
>> Bit [3]		- 1 => IPA Size bits (Bits[2:0]) requested.
>> 		0 => Not requested
>>
>> The only minor down side is restricting to the predefined values above,
>> which is not a real issue for a VM.
>>
>> Thoughts ?
> 
> I'd be very wary of using that 4th bit to do something that is not in
> the architecture. We have only a single value left to be used (0b111),
> and then your scheme clashes with the architecture definition.

I agree. However, if we ever go beyond the 3bits in PARange, we have an
issue with {V}TCR counter part. But lets not take that chance.

> 
> I'd rather encode things in a way that is independent from the
> architecture, and be done with it. You can map 0 to 40bits, and we have
> the ability to express all values the architecture has (just in a
> different order).

The other option I can think of is encoding a signed number which is the 
difference of the IPA from 40. But that would need 5 bits if we were to
encode it as it is. And if we want to squeeze it in 4bit, we could store 
half the difference (limiting the IPA limit to even numbers).

i.e IPA = 40 + 2 * sign_extend(bits[3:0);


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 v3 15/20] kvm: arm/arm64: Allow tuning the physical address size for VM
Date: Fri, 6 Jul 2018 17:39:00 +0100	[thread overview]
Message-ID: <f3463d0a-c6a3-c34d-acb3-13c99fc61c5a@arm.com> (raw)
In-Reply-To: <9f1af26e-2913-2b0b-1352-63160096f78f@arm.com>

On 07/06/2018 04:09 PM, Marc Zyngier wrote:
> On 06/07/18 14:49, Suzuki K Poulose wrote:
>> On 04/07/18 23:03, Suzuki K Poulose wrote:
>>> On 07/04/2018 04:51 PM, Will Deacon wrote:
>>>> Hi Suzuki,
>>>>
>>>> On Fri, Jun 29, 2018 at 12:15:35PM +0100, Suzuki K Poulose wrote:
>>>>> Allow specifying the physical address size for a new VM via
>>>>> the kvm_type argument for KVM_CREATE_VM ioctl. This allows
>>>>> us to finalise the stage2 page table format as early as possible
>>>>> and hence perform the right checks on the memory slots without
>>>>> complication. The size is encoded as Log2(PA_Size) in the bits[7:0]
>>>>> of the type field and can encode more information in the future if
>>>>> required. The IPA size is still capped at 40bits.
>>>>>
>>>>> Cc: Marc Zyngier <marc.zyngier@arm.com>
>>>>> Cc: Christoffer Dall <cdall@kernel.org>
>>>>> Cc: Peter Maydel <peter.maydell@linaro.org>
>>>>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>>>>> Cc: Radim Kr?m?? <rkrcmar@redhat.com>
>>>>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>>>>> ---
>>>>>  ? arch/arm/include/asm/kvm_mmu.h?? |? 2 ++
>>>>>  ? arch/arm64/include/asm/kvm_arm.h | 10 +++-------
>>>>>  ? arch/arm64/include/asm/kvm_mmu.h |? 2 ++
>>>>>  ? include/uapi/linux/kvm.h???????? | 10 ++++++++++
>>>>>  ? virt/kvm/arm/arm.c?????????????? | 24 ++++++++++++++++++++++--
>>>>>  ? 5 files changed, 39 insertions(+), 9 deletions(-)
>>>>
>>>> [...]
>>>>
>>>>> diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
>>>>> index 4df9bb6..fa4cab0 100644
>>>>> --- a/include/uapi/linux/kvm.h
>>>>> +++ b/include/uapi/linux/kvm.h
>>>>> @@ -751,6 +751,16 @@ struct kvm_ppc_resize_hpt {
>>>>>  ? #define KVM_S390_SIE_PAGE_OFFSET 1
>>>>>  ? /*
>>>>> + * On arm/arm64, machine type can be used to request the physical
>>>>> + * address size for the VM. Bits [7-0] have been reserved for the
>>>>> + * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
>>>>> + * value 0 implies the default IPA size, which is 40bits.
>>>>> + */
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK??? 0xff
>>>>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT(x)??????? \
>>>>> +??? ((x) & KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK)
>>>>
>>>> This seems like you're allocating quite a lot of bits in a non-extensible
>>>> interface to a fairly esoteric parameter. Would it be better to add another
>>>> ioctl, or condense the number of sizes you support instead?
>>>
>>> As I explained in the other thread, we need the size as soon as the VM
>>> is created. The major challenge is keeping the backward compatibility by
>>> mapping 0 to 40bits. I will give it a thought.
>>
>> Here is one option. We could re-use the {V}TCR_ELx.{I}PS field format, which
>> occupies 3 bits and has the following definitions. (ID_AA64MMFR0_EL1:PARange
>> also has the field definitions, except that the field is 4bits wide, but
>> only 3bits are used)
>>
>> 000 32 bits, 4GB.
>> 001 36 bits, 64GB.
>> 010 40 bits, 1TB.
>> 011 42 bits, 4TB.
>> 100 44 bits, 16TB.
>> 101 48 bits, 256TB.
>> 110 52 bits, 4PB
>>
>> But we need to map 0 => 40bits IPA to make our ABI backward compatible. So
>> we could use the additional one bit to indicate that IPA size is requested
>> in the 3 bits.
>>
>> i.e,
>>
>> machine_type:
>>
>> Bit [2:0]	- Requested IPA size. Values follow VTCR_EL2.PS format.
>>
>> Bit [3]		- 1 => IPA Size bits (Bits[2:0]) requested.
>> 		0 => Not requested
>>
>> The only minor down side is restricting to the predefined values above,
>> which is not a real issue for a VM.
>>
>> Thoughts ?
> 
> I'd be very wary of using that 4th bit to do something that is not in
> the architecture. We have only a single value left to be used (0b111),
> and then your scheme clashes with the architecture definition.

I agree. However, if we ever go beyond the 3bits in PARange, we have an
issue with {V}TCR counter part. But lets not take that chance.

> 
> I'd rather encode things in a way that is independent from the
> architecture, and be done with it. You can map 0 to 40bits, and we have
> the ability to express all values the architecture has (just in a
> different order).

The other option I can think of is encoding a signed number which is the 
difference of the IPA from 40. But that would need 5 bits if we were to
encode it as it is. And if we want to squeeze it in 4bit, we could store 
half the difference (limiting the IPA limit to even numbers).

i.e IPA = 40 + 2 * sign_extend(bits[3:0);


Suzuki

  reply	other threads:[~2018-07-06 16:38 UTC|newest]

Thread overview: 276+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-29 11:15 [PATCH v3 00/20] arm64: Dynamic & 52bit IPA support Suzuki K Poulose
2018-06-29 11:15 ` Suzuki K Poulose
2018-06-29 11:15 ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [PATCH v3 01/20] virtio: mmio-v1: Validate queue PFN Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 17:42   ` Michael S. Tsirkin
2018-06-29 17:42     ` Michael S. Tsirkin
2018-06-29 17:42     ` [Qemu-devel] " Michael S. Tsirkin
2018-07-03  8:04     ` Suzuki K Poulose
2018-07-03  8:04       ` Suzuki K Poulose
2018-07-03  8:04       ` [Qemu-devel] " Suzuki K Poulose
2018-07-04  5:37       ` Michael S. Tsirkin
2018-07-04  5:37         ` Michael S. Tsirkin
2018-07-04  5:37         ` [Qemu-devel] " Michael S. Tsirkin
2018-06-29 11:15 ` [PATCH v3 02/20] virtio: pci-legacy: Validate queue pfn Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 17:42   ` Michael S. Tsirkin
2018-06-29 17:42     ` Michael S. Tsirkin
2018-06-29 17:42     ` [Qemu-devel] " Michael S. Tsirkin
2018-06-29 11:15 ` [PATCH v3 03/20] arm64: Add a helper for PARange to physical shift conversion Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 14:50   ` Auger Eric
2018-06-29 14:50     ` Auger Eric
2018-06-29 14:50     ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [PATCH v3 04/20] kvm: arm64: Clean up VTCR_EL2 initialisation Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 14:50   ` Auger Eric
2018-06-29 14:50     ` Auger Eric
2018-06-29 14:50     ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [PATCH v3 05/20] kvm: arm/arm64: Fix stage2_flush_memslot for 4 level page table Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 14:50   ` Auger Eric
2018-06-29 14:50     ` Auger Eric
2018-06-29 14:50     ` [Qemu-devel] " Auger Eric
2018-07-02  9:59   ` Marc Zyngier
2018-07-02  9:59     ` Marc Zyngier
2018-07-02  9:59     ` [Qemu-devel] " Marc Zyngier
2018-06-29 11:15 ` [PATCH v3 06/20] kvm: arm/arm64: Remove spurious WARN_ON Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 14:51   ` Auger Eric
2018-06-29 14:51     ` Auger Eric
2018-06-29 14:51     ` [Qemu-devel] " Auger Eric
2018-07-02 10:01   ` Marc Zyngier
2018-07-02 10:01     ` Marc Zyngier
2018-07-02 10:01     ` [Qemu-devel] " Marc Zyngier
2018-06-29 11:15 ` [PATCH v3 07/20] kvm: arm/arm64: Prepare for VM specific stage2 translations Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-07-02 10:12   ` Marc Zyngier
2018-07-02 10:12     ` Marc Zyngier
2018-07-02 10:12     ` [Qemu-devel] " Marc Zyngier
2018-07-02 10:12     ` Marc Zyngier
2018-07-02 10:25     ` Suzuki K Poulose
2018-07-02 10:25       ` Suzuki K Poulose
2018-07-02 10:25       ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 10:51   ` Auger Eric
2018-07-02 10:51     ` Auger Eric
2018-07-02 10:51     ` [Qemu-devel] " Auger Eric
2018-07-02 10:59     ` Suzuki K Poulose
2018-07-02 10:59       ` Suzuki K Poulose
2018-07-02 10:59       ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [PATCH v3 08/20] kvm: arm/arm64: Abstract stage2 pgd table allocation Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 15:01   ` Auger Eric
2018-07-02 15:01     ` Auger Eric
2018-07-02 15:01     ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [PATCH v3 09/20] kvm: arm64: Make stage2 page table layout dynamic Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-07-02 10:57   ` Suzuki K Poulose
2018-07-02 10:57     ` Suzuki K Poulose
2018-07-02 10:57     ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 12:14   ` Auger Eric
2018-07-02 12:14     ` Auger Eric
2018-07-02 12:14     ` [Qemu-devel] " Auger Eric
2018-07-02 13:24     ` Suzuki K Poulose
2018-07-02 13:24       ` Suzuki K Poulose
2018-07-02 13:24       ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 14:46       ` Auger Eric
2018-07-02 14:46         ` Auger Eric
2018-06-29 11:15 ` [PATCH v3 10/20] kvm: arm64: Dynamic configuration of VTTBR mask Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 14:41   ` Auger Eric
2018-07-02 14:41     ` Auger Eric
2018-07-02 14:41     ` [Qemu-devel] " Auger Eric
2018-07-03 11:54     ` Suzuki K Poulose
2018-07-03 11:54       ` Suzuki K Poulose
2018-07-03 11:54       ` [Qemu-devel] " Suzuki K Poulose
2018-07-04  8:24       ` Auger Eric
2018-07-04  8:24         ` Auger Eric
2018-07-04  8:24         ` [Qemu-devel] " Auger Eric
2018-07-04  8:29         ` Suzuki K Poulose
2018-07-04  8:29           ` Suzuki K Poulose
2018-07-04  8:29           ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [PATCH v3 11/20] kvm: arm64: Helper for computing VTCR_EL2.SL0 Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 14:59   ` Auger Eric
2018-07-02 14:59     ` Auger Eric
2018-07-02 14:59     ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [PATCH v3 12/20] kvm: arm64: Add helper for loading the stage2 setting for a VM Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 19:13   ` Auger Eric
2018-07-02 19:13     ` Auger Eric
2018-07-02 19:13     ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [PATCH v3 13/20] kvm: arm64: Configure VTCR per VM Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 12:16   ` Marc Zyngier
2018-07-02 12:16     ` Marc Zyngier
2018-07-02 12:16     ` [Qemu-devel] " Marc Zyngier
2018-07-03 10:48     ` Suzuki K Poulose
2018-07-03 10:48       ` Suzuki K Poulose
2018-07-03 10:48       ` [Qemu-devel] " Suzuki K Poulose
2018-07-03 10:58       ` Marc Zyngier
2018-07-03 10:58         ` Marc Zyngier
2018-07-03 10:58         ` [Qemu-devel] " Marc Zyngier
2018-06-29 11:15 ` [PATCH v3 14/20] kvm: arm/arm64: Expose supported physical address limit for VM Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [PATCH v3 15/20] kvm: arm/arm64: Allow tuning the physical address size " Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 13:13   ` Marc Zyngier
2018-07-02 13:13     ` Marc Zyngier
2018-07-02 13:13     ` [Qemu-devel] " Marc Zyngier
2018-07-02 13:31     ` Suzuki K Poulose
2018-07-02 13:31       ` Suzuki K Poulose
2018-07-02 13:31       ` [Qemu-devel] " Suzuki K Poulose
2018-07-04 15:51   ` Will Deacon
2018-07-04 15:51     ` Will Deacon
2018-07-04 15:51     ` [Qemu-devel] " Will Deacon
2018-07-04 22:03     ` Suzuki K Poulose
2018-07-04 22:03       ` Suzuki K Poulose
2018-07-04 22:03       ` [Qemu-devel] " Suzuki K Poulose
2018-07-04 22:03       ` Suzuki K Poulose
2018-07-06 13:49       ` Suzuki K Poulose
2018-07-06 13:49         ` Suzuki K Poulose
2018-07-06 13:49         ` [Qemu-devel] " Suzuki K Poulose
2018-07-06 13:49         ` Suzuki K Poulose
2018-07-06 15:09         ` Marc Zyngier
2018-07-06 15:09           ` Marc Zyngier
2018-07-06 15:09           ` [Qemu-devel] " Marc Zyngier
2018-07-06 15:09           ` Marc Zyngier
2018-07-06 16:39           ` Suzuki K Poulose [this message]
2018-07-06 16:39             ` Suzuki K Poulose
2018-07-06 16:39             ` [Qemu-devel] " Suzuki K Poulose
2018-07-06 16:39             ` Suzuki K Poulose
2018-07-09 11:23             ` Dave Martin
2018-07-09 11:23               ` Dave Martin
2018-07-09 11:23               ` [Qemu-devel] " Dave Martin
2018-07-09 12:29               ` Marc Zyngier
2018-07-09 12:29                 ` Marc Zyngier
2018-07-09 12:29                 ` [Qemu-devel] " Marc Zyngier
2018-07-09 13:37                 ` Dave Martin
2018-07-09 13:37                   ` Dave Martin
2018-07-09 13:37                   ` [Qemu-devel] " Dave Martin
2018-07-10 16:38                   ` Suzuki K Poulose
2018-07-10 16:38                     ` Suzuki K Poulose
2018-07-10 16:38                     ` [Qemu-devel] " Suzuki K Poulose
2018-07-10 16:38                     ` Suzuki K Poulose
2018-07-10 17:03                     ` Dave Martin
2018-07-10 17:03                       ` Dave Martin
2018-07-10 17:03                       ` [Qemu-devel] " Dave Martin
2018-07-10 17:03                       ` Dave Martin
2018-07-11  9:05                       ` Suzuki K Poulose
2018-07-11  9:05                         ` Suzuki K Poulose
2018-07-11  9:05                         ` [Qemu-devel] " Suzuki K Poulose
2018-07-11 10:38                         ` Dave Martin
2018-07-11 10:38                           ` Dave Martin
2018-07-11 10:38                           ` [Qemu-devel] " Dave Martin
2018-06-29 11:15 ` [PATCH v3 16/20] kvm: arm64: Switch to per VM IPA limit Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 13:32   ` Marc Zyngier
2018-07-02 13:32     ` Marc Zyngier
2018-07-02 13:32     ` [Qemu-devel] " Marc Zyngier
2018-07-02 13:53     ` Suzuki K Poulose
2018-07-02 13:53       ` Suzuki K Poulose
2018-07-02 13:53       ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [PATCH v3 17/20] vgic: Add support for 52bit guest physical address Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-04  8:09   ` Auger Eric
2018-07-04  8:09     ` Auger Eric
2018-07-04  8:09     ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [PATCH v3 18/20] kvm: arm64: Add support for handling 52bit IPA Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 13:43   ` Marc Zyngier
2018-07-02 13:43     ` Marc Zyngier
2018-07-02 13:43     ` [Qemu-devel] " Marc Zyngier
2018-06-29 11:15 ` [PATCH v3 19/20] kvm: arm64: Allow IPA size supported by the system Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-02 13:50   ` Marc Zyngier
2018-07-02 13:50     ` Marc Zyngier
2018-07-02 13:50     ` [Qemu-devel] " Marc Zyngier
2018-07-02 13:54     ` Suzuki K Poulose
2018-07-02 13:54       ` Suzuki K Poulose
2018-07-02 13:54       ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [PATCH v3 20/20] kvm: arm64: Fall back to normal stage2 entry level Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [kvmtool test PATCH 21/24] kvmtool: Allow backends to run checks on the KVM device fd Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [kvmtool test PATCH 22/24] kvmtool: arm64: Add support for guest physical address size Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-04 14:09   ` Will Deacon
2018-07-04 14:09     ` Will Deacon
2018-07-04 14:09     ` [Qemu-devel] " Will Deacon
2018-07-04 15:00     ` Julien Grall
2018-07-04 15:00       ` Julien Grall
2018-07-04 15:00       ` [Qemu-devel] " Julien Grall
2018-07-04 15:52       ` Will Deacon
2018-07-04 15:52         ` Will Deacon
2018-07-04 15:52         ` [Qemu-devel] " Will Deacon
2018-07-05 12:47         ` Julien Grall
2018-07-05 12:47           ` Julien Grall
2018-07-05 12:47           ` [Qemu-devel] " Julien Grall
2018-07-05 13:20           ` Marc Zyngier
2018-07-05 13:20             ` Marc Zyngier
2018-07-05 13:20             ` [Qemu-devel] " Marc Zyngier
2018-07-05 13:46             ` Auger Eric
2018-07-05 13:46               ` Auger Eric
2018-07-05 13:46               ` [Qemu-devel] " Auger Eric
2018-07-05 14:12               ` Suzuki K Poulose
2018-07-05 14:12                 ` Suzuki K Poulose
2018-07-05 14:12                 ` [Qemu-devel] " Suzuki K Poulose
2018-07-05 14:15               ` Marc Zyngier
2018-07-05 14:15                 ` Marc Zyngier
2018-07-05 14:15                 ` [Qemu-devel] " Marc Zyngier
2018-07-05 14:37                 ` Auger Eric
2018-07-05 14:37                   ` Auger Eric
2018-07-05 14:37                   ` [Qemu-devel] " Auger Eric
2018-06-29 11:15 ` [kvmtool test PATCH 23/24] kvmtool: arm64: Switch memory layout Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-06-29 11:15 ` [kvmtool test PATCH 24/24] kvmtool: arm: Add support for creating VM with PA size Suzuki K Poulose
2018-06-29 11:15   ` Suzuki K Poulose
2018-06-29 11:15   ` [Qemu-devel] " Suzuki K Poulose
2018-07-04 14:22   ` Will Deacon
2018-07-04 14:22     ` Will Deacon
2018-07-04 14:22     ` [Qemu-devel] " Will Deacon
2018-07-04 14:41     ` Marc Zyngier
2018-07-04 14:41       ` Marc Zyngier
2018-07-04 14:41       ` Marc Zyngier
2018-07-04 14:41       ` [Qemu-devel] " Marc Zyngier
2018-07-04 15:51       ` Will Deacon
2018-07-04 15:51         ` Will Deacon
2018-07-04 15:51         ` [Qemu-devel] " Will Deacon
2018-07-05  7:51         ` Peter Maydell
2018-07-05  7:51           ` Peter Maydell
2018-07-05  7:51           ` [Qemu-devel] " Peter Maydell
2018-07-05  7:58           ` Auger Eric
2018-07-05  7:58             ` Auger Eric
2018-07-05  7:58             ` [Qemu-devel] " Auger Eric
2018-07-04 15:58     ` Suzuki K Poulose
2018-07-04 15:58       ` Suzuki K Poulose
2018-07-04 15:58       ` [Qemu-devel] " 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=f3463d0a-c6a3-c34d-acb3-13c99fc61c5a@arm.com \
    --to=suzuki.poulose@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=cdall@kernel.org \
    --cc=eric.auger@redhat.com \
    --cc=james.morse@arm.com \
    --cc=julien.grall@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=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=punit.agrawal@arm.com \
    --cc=qemu-devel@nongnu.org \
    --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.