Message ID | 1523607658-9166-3-git-send-email-eric.auger@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 13 April 2018 at 09:20, Eric Auger <eric.auger@redhat.com> wrote: > We introduce a new KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION attribute in > KVM_DEV_ARM_VGIC_GRP_ADDR group. It allows userspace to provide the > base address and size of a redistributor region > > Compared to KVM_VGIC_V3_ADDR_TYPE_REDIST, this new attribute allows > to declare several separate redistributor regions. > > So the whole redist space does not need to be contiguous anymore. > > Signed-off-by: Eric Auger <eric.auger@redhat.com> > --- Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
On Fri, Apr 13, 2018 at 10:20:48AM +0200, Eric Auger wrote: > We introduce a new KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION attribute in > KVM_DEV_ARM_VGIC_GRP_ADDR group. It allows userspace to provide the > base address and size of a redistributor region > > Compared to KVM_VGIC_V3_ADDR_TYPE_REDIST, this new attribute allows > to declare several separate redistributor regions. > > So the whole redist space does not need to be contiguous anymore. > > Signed-off-by: Eric Auger <eric.auger@redhat.com> > --- > Documentation/virtual/kvm/devices/arm-vgic-v3.txt | 25 ++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > diff --git a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt > index 9293b45..cbc4328 100644 > --- a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt > +++ b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt > @@ -27,9 +27,32 @@ Groups: > VCPU and all of the redistributor pages are contiguous. > Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. > This address needs to be 64K aligned. > + > + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION (rw, 64-bit) > + The attr field of kvm_device_attr encodes 3 values: > + bits: | 63 .... 52 | 51 .... 16 | 15 - 12 |11 - 0 > + values: | count | base | flags | index > + - index encodes the unique redistributor region index I'm not entirely sure I understand the purpose of the index field. Isn't a redistributor region identified uniquely by its base address? Otherwise this looks good. Thanks, -Christoffer > + - flags: reserved for future use, currently 0 > + - base field encodes bits [51:16] of the guest physical base address > + of the first redistributor in the region. > + - count encodes the number of redistributors in the region. Must be > + greater than 0. > + There are two 64K pages for each redistributor in the region and > + redistributors are laid out contiguously within the region. Regions > + are filled with redistributors in the index order. The sum of all > + region count fields must be greater than or equal to the number of > + VCPUs. Redistributor regions must be registered in the incremental > + index order, starting from index 0. > + Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. > + > + It is invalid to mix calls with KVM_VGIC_V3_ADDR_TYPE_REDIST and > + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION attributes. > + > Errors: > -E2BIG: Address outside of addressable IPA range > - -EINVAL: Incorrectly aligned address > + -EINVAL: Incorrectly aligned address, bad redistributor region > + count/index, mixed redistributor region attribute usage > -EEXIST: Address already configured > -ENXIO: The group or attribute is unknown/unsupported for this device > or hardware support is missing. > -- > 2.5.5 >
On 24 April 2018 at 17:46, Christoffer Dall <christoffer.dall@arm.com> wrote: > On Fri, Apr 13, 2018 at 10:20:48AM +0200, Eric Auger wrote: >> --- a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt >> +++ b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt >> @@ -27,9 +27,32 @@ Groups: >> VCPU and all of the redistributor pages are contiguous. >> Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. >> This address needs to be 64K aligned. >> + >> + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION (rw, 64-bit) >> + The attr field of kvm_device_attr encodes 3 values: >> + bits: | 63 .... 52 | 51 .... 16 | 15 - 12 |11 - 0 >> + values: | count | base | flags | index >> + - index encodes the unique redistributor region index > > I'm not entirely sure I understand the purpose of the index field. > Isn't a redistributor region identified uniquely by its base address? You need a way to tell the difference beween: (1) redistributors for CPUs 0..63 at 0x40000000, redistributors for 64..127 at 0x80000000 (2) redistributors for CPUs 0..63 at 0x80000000, redistributors for 64..127 at 0x40000000 The index field tells you which order the redistributor regions go in. thanks -- PMM
Hi Christoffer, Peter, On 04/24/2018 06:50 PM, Peter Maydell wrote: > On 24 April 2018 at 17:46, Christoffer Dall <christoffer.dall@arm.com> wrote: >> On Fri, Apr 13, 2018 at 10:20:48AM +0200, Eric Auger wrote: >>> --- a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt >>> +++ b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt >>> @@ -27,9 +27,32 @@ Groups: >>> VCPU and all of the redistributor pages are contiguous. >>> Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. >>> This address needs to be 64K aligned. >>> + >>> + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION (rw, 64-bit) >>> + The attr field of kvm_device_attr encodes 3 values: >>> + bits: | 63 .... 52 | 51 .... 16 | 15 - 12 |11 - 0 >>> + values: | count | base | flags | index >>> + - index encodes the unique redistributor region index >> >> I'm not entirely sure I understand the purpose of the index field. >> Isn't a redistributor region identified uniquely by its base address? > > You need a way to tell the difference beween: > (1) redistributors for CPUs 0..63 at 0x40000000, redistributors > for 64..127 at 0x80000000 > (2) redistributors for CPUs 0..63 at 0x80000000, redistributors > for 64..127 at 0x40000000 > > The index field tells you which order the redistributor > regions go in. Yes redistributors are filled in the index order. This matches DT description (Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt): <0x0 0x2d000000 0 0x800000>, // GICR 1: CPUs 0-31 <0x0 0x2e000000 0 0x800000>; // GICR 2: CPUs 32-63 Thanks Eric > > thanks > -- PMM >
On Tue, Apr 24, 2018 at 05:50:37PM +0100, Peter Maydell wrote: > On 24 April 2018 at 17:46, Christoffer Dall <christoffer.dall@arm.com> wrote: > > On Fri, Apr 13, 2018 at 10:20:48AM +0200, Eric Auger wrote: > >> --- a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt > >> +++ b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt > >> @@ -27,9 +27,32 @@ Groups: > >> VCPU and all of the redistributor pages are contiguous. > >> Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. > >> This address needs to be 64K aligned. > >> + > >> + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION (rw, 64-bit) > >> + The attr field of kvm_device_attr encodes 3 values: > >> + bits: | 63 .... 52 | 51 .... 16 | 15 - 12 |11 - 0 > >> + values: | count | base | flags | index > >> + - index encodes the unique redistributor region index > > > > I'm not entirely sure I understand the purpose of the index field. > > Isn't a redistributor region identified uniquely by its base address? > > You need a way to tell the difference beween: > (1) redistributors for CPUs 0..63 at 0x40000000, redistributors > for 64..127 at 0x80000000 > (2) redistributors for CPUs 0..63 at 0x80000000, redistributors > for 64..127 at 0x40000000 > > The index field tells you which order the redistributor > regions go in. ah, right. This could be implied by the order creating the regions though, but ok, in that case it's nicer for userspace to state it explicitly. Thanks, -Christoffer
diff --git a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt index 9293b45..cbc4328 100644 --- a/Documentation/virtual/kvm/devices/arm-vgic-v3.txt +++ b/Documentation/virtual/kvm/devices/arm-vgic-v3.txt @@ -27,9 +27,32 @@ Groups: VCPU and all of the redistributor pages are contiguous. Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. This address needs to be 64K aligned. + + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION (rw, 64-bit) + The attr field of kvm_device_attr encodes 3 values: + bits: | 63 .... 52 | 51 .... 16 | 15 - 12 |11 - 0 + values: | count | base | flags | index + - index encodes the unique redistributor region index + - flags: reserved for future use, currently 0 + - base field encodes bits [51:16] of the guest physical base address + of the first redistributor in the region. + - count encodes the number of redistributors in the region. Must be + greater than 0. + There are two 64K pages for each redistributor in the region and + redistributors are laid out contiguously within the region. Regions + are filled with redistributors in the index order. The sum of all + region count fields must be greater than or equal to the number of + VCPUs. Redistributor regions must be registered in the incremental + index order, starting from index 0. + Only valid for KVM_DEV_TYPE_ARM_VGIC_V3. + + It is invalid to mix calls with KVM_VGIC_V3_ADDR_TYPE_REDIST and + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION attributes. + Errors: -E2BIG: Address outside of addressable IPA range - -EINVAL: Incorrectly aligned address + -EINVAL: Incorrectly aligned address, bad redistributor region + count/index, mixed redistributor region attribute usage -EEXIST: Address already configured -ENXIO: The group or attribute is unknown/unsupported for this device or hardware support is missing.
We introduce a new KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION attribute in KVM_DEV_ARM_VGIC_GRP_ADDR group. It allows userspace to provide the base address and size of a redistributor region Compared to KVM_VGIC_V3_ADDR_TYPE_REDIST, this new attribute allows to declare several separate redistributor regions. So the whole redist space does not need to be contiguous anymore. Signed-off-by: Eric Auger <eric.auger@redhat.com> --- Documentation/virtual/kvm/devices/arm-vgic-v3.txt | 25 ++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-)