All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Jones <drjones@redhat.com>
To: Oliver Upton <oupton@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
	kvm@vger.kernel.org, Will Deacon <will@kernel.org>,
	Marc Zyngier <maz@kernel.org>, Peter Shier <pshier@google.com>,
	linux-kernel@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 14/18] KVM: arm64: selftests: Add host support for vGIC
Date: Thu, 9 Sep 2021 15:34:21 +0200	[thread overview]
Message-ID: <20210909133421.rdkueb627glve6uz@gator> (raw)
In-Reply-To: <YTmce6Xn+ymngA+r@google.com>

On Thu, Sep 09, 2021 at 05:32:43AM +0000, Oliver Upton wrote:
> Hi Raghu,
> 
> On Thu, Sep 09, 2021 at 01:38:14AM +0000, Raghavendra Rao Ananta wrote:
> > Implement a simple library to perform vGIC-v3 setup
> > from a host point of view. This includes creating a
> > vGIC device, setting up distributor and redistributor
> > attributes, and mapping the guest physical addresses.
> > 
> > The definition of REDIST_REGION_ATTR_ADDR is taken
> > from aarch64/vgic_init test.
> >
> 
> Consider dropping the macro from vgic_init.c and have it just include
> vgic.h

Yes, I agree 18/18 should be squashed into this one.

> 
> > Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> > ---
> >  tools/testing/selftests/kvm/Makefile          |  2 +-
> >  .../selftests/kvm/include/aarch64/vgic.h      | 20 +++++++
> >  .../testing/selftests/kvm/lib/aarch64/vgic.c  | 60 +++++++++++++++++++
> >  3 files changed, 81 insertions(+), 1 deletion(-)
> >  create mode 100644 tools/testing/selftests/kvm/include/aarch64/vgic.h
> >  create mode 100644 tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > 
> > diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile
> > index 5476a8ddef60..8342f65c1d96 100644
> > --- a/tools/testing/selftests/kvm/Makefile
> > +++ b/tools/testing/selftests/kvm/Makefile
> > @@ -35,7 +35,7 @@ endif
> >  
> >  LIBKVM = lib/assert.c lib/elf.c lib/io.c lib/kvm_util.c lib/rbtree.c lib/sparsebit.c lib/test_util.c lib/guest_modes.c lib/perf_test_util.c
> >  LIBKVM_x86_64 = lib/x86_64/apic.c lib/x86_64/processor.c lib/x86_64/vmx.c lib/x86_64/svm.c lib/x86_64/ucall.c lib/x86_64/handlers.S
> > -LIBKVM_aarch64 = lib/aarch64/processor.c lib/aarch64/ucall.c lib/aarch64/handlers.S lib/aarch64/spinlock.c lib/aarch64/gic.c lib/aarch64/gic_v3.c
> > +LIBKVM_aarch64 = lib/aarch64/processor.c lib/aarch64/ucall.c lib/aarch64/handlers.S lib/aarch64/spinlock.c lib/aarch64/gic.c lib/aarch64/gic_v3.c lib/aarch64/vgic.c
> >  LIBKVM_s390x = lib/s390x/processor.c lib/s390x/ucall.c lib/s390x/diag318_test_handler.c
> >  
> >  TEST_GEN_PROGS_x86_64 = x86_64/cr4_cpuid_sync_test
> > diff --git a/tools/testing/selftests/kvm/include/aarch64/vgic.h b/tools/testing/selftests/kvm/include/aarch64/vgic.h
> > new file mode 100644
> > index 000000000000..3a776af958a0
> > --- /dev/null
> > +++ b/tools/testing/selftests/kvm/include/aarch64/vgic.h
> > @@ -0,0 +1,20 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * ARM Generic Interrupt Controller (GIC) host specific defines
> > + */
> > +
> > +#ifndef SELFTEST_KVM_VGIC_H
> > +#define SELFTEST_KVM_VGIC_H
> > +
> > +#include <linux/kvm.h>
> > +
> > +#define REDIST_REGION_ATTR_ADDR(count, base, flags, index) \
> > +	(((uint64_t)(count) << 52) | \
> > +	((uint64_t)((base) >> 16) << 16) | \
> > +	((uint64_t)(flags) << 12) | \
> > +	index)
> > +
> > +int vgic_v3_setup(struct kvm_vm *vm,
> > +				uint64_t gicd_base_gpa, uint64_t gicr_base_gpa);
> > +
> > +#endif /* SELFTEST_KVM_VGIC_H */
> > diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > new file mode 100644
> > index 000000000000..2318912ab134
> > --- /dev/null
> > +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > @@ -0,0 +1,60 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * ARM Generic Interrupt Controller (GIC) v3 host support
> > + */
> > +
> > +#include <linux/kvm.h>
> > +#include <linux/sizes.h>
> > +
> > +#include "kvm_util.h"
> > +#include "vgic.h"
> > +
> > +#define VGIC_V3_GICD_SZ		(SZ_64K)
> > +#define VGIC_V3_GICR_SZ		(2 * SZ_64K)
> 
> These values are UAPI, consider dropping them in favor of the
> definitions from asm/kvm.h

Yes, please.

> 
> > +
> > +/*
> > + * vGIC-v3 default host setup
> > + *
> > + * Input args:
> > + *	vm - KVM VM
> > + *	gicd_base_gpa - Guest Physical Address of the Distributor region
> > + *	gicr_base_gpa - Guest Physical Address of the Redistributor region
> > + *
> > + * Output args: None
> > + *
> > + * Return: GIC file-descriptor or negative error code upon failure
> > + *
> > + * The function creates a vGIC-v3 device and maps the distributor and
> > + * redistributor regions of the guest. Since it depends on the number of
> > + * vCPUs for the VM, it must be called after all the vCPUs have been created.
> 
> You could avoid the ordering dependency by explicitly taking nr_vcpus as
> an arg. It would also avoid the need for 12/18.

All the vcpus need to be created prior to calling
KVM_DEV_ARM_VGIC_CTRL_INIT, so even though I don't disagree with
simply passing nr_vcpus to this function, we should still assert
if the VM's idea of the number doesn't match. But, this is a lib
file, so there's no reason not to do

#include "../kvm_util_internal.h"

and just access the vcpu list to get the count or, if we add a
new internal nr_vcpus member, access it directly. IOW, so far
I don't believe we need vm_get_nr_vcpus().

> 
> Also note the required alignment on the GPA arguments you're taking.
> 
> > + */
> > +int vgic_v3_setup(struct kvm_vm *vm,
> > +		uint64_t gicd_base_gpa, uint64_t gicr_base_gpa)
> > +{
> > +	uint64_t redist_attr;
> > +	int gic_fd, nr_vcpus;
> > +	unsigned int nr_gic_pages;
> > +
> > +	nr_vcpus = vm_get_nr_vcpus(vm);
> > +	TEST_ASSERT(nr_vcpus > 0, "Invalid number of CPUs: %u\n", nr_vcpus);
> > +
> > +	/* Distributor setup */
> > +	gic_fd = kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, false);
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> > +			KVM_VGIC_V3_ADDR_TYPE_DIST, &gicd_base_gpa, true);
> > +	nr_gic_pages = vm_calc_num_guest_pages(vm_get_mode(vm), VGIC_V3_GICD_SZ);
> > +	virt_map(vm, gicd_base_gpa, gicd_base_gpa,  nr_gic_pages);
> > +
> > +	/* Redistributor setup */
> > +	redist_attr = REDIST_REGION_ATTR_ADDR(nr_vcpus, gicr_base_gpa, 0, 0);
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> > +			KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &redist_attr, true);
> > +	nr_gic_pages = vm_calc_num_guest_pages(vm_get_mode(vm),
> > +						VGIC_V3_GICR_SZ * nr_vcpus);
> > +	virt_map(vm, gicr_base_gpa, gicr_base_gpa,  nr_gic_pages);
> > +
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
> > +				KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true);
> > +
> > +	return gic_fd;
> > +}
> > -- 
> > 2.33.0.153.gba50c8fa24-goog
> > 
>

Thanks,
drew 

_______________________________________________
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: Andrew Jones <drjones@redhat.com>
To: Oliver Upton <oupton@google.com>
Cc: Raghavendra Rao Ananta <rananta@google.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Peter Shier <pshier@google.com>,
	Ricardo Koller <ricarkol@google.com>,
	Reiji Watanabe <reijiw@google.com>,
	Jing Zhang <jingzhangos@google.com>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v4 14/18] KVM: arm64: selftests: Add host support for vGIC
Date: Thu, 9 Sep 2021 15:34:21 +0200	[thread overview]
Message-ID: <20210909133421.rdkueb627glve6uz@gator> (raw)
In-Reply-To: <YTmce6Xn+ymngA+r@google.com>

On Thu, Sep 09, 2021 at 05:32:43AM +0000, Oliver Upton wrote:
> Hi Raghu,
> 
> On Thu, Sep 09, 2021 at 01:38:14AM +0000, Raghavendra Rao Ananta wrote:
> > Implement a simple library to perform vGIC-v3 setup
> > from a host point of view. This includes creating a
> > vGIC device, setting up distributor and redistributor
> > attributes, and mapping the guest physical addresses.
> > 
> > The definition of REDIST_REGION_ATTR_ADDR is taken
> > from aarch64/vgic_init test.
> >
> 
> Consider dropping the macro from vgic_init.c and have it just include
> vgic.h

Yes, I agree 18/18 should be squashed into this one.

> 
> > Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> > ---
> >  tools/testing/selftests/kvm/Makefile          |  2 +-
> >  .../selftests/kvm/include/aarch64/vgic.h      | 20 +++++++
> >  .../testing/selftests/kvm/lib/aarch64/vgic.c  | 60 +++++++++++++++++++
> >  3 files changed, 81 insertions(+), 1 deletion(-)
> >  create mode 100644 tools/testing/selftests/kvm/include/aarch64/vgic.h
> >  create mode 100644 tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > 
> > diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile
> > index 5476a8ddef60..8342f65c1d96 100644
> > --- a/tools/testing/selftests/kvm/Makefile
> > +++ b/tools/testing/selftests/kvm/Makefile
> > @@ -35,7 +35,7 @@ endif
> >  
> >  LIBKVM = lib/assert.c lib/elf.c lib/io.c lib/kvm_util.c lib/rbtree.c lib/sparsebit.c lib/test_util.c lib/guest_modes.c lib/perf_test_util.c
> >  LIBKVM_x86_64 = lib/x86_64/apic.c lib/x86_64/processor.c lib/x86_64/vmx.c lib/x86_64/svm.c lib/x86_64/ucall.c lib/x86_64/handlers.S
> > -LIBKVM_aarch64 = lib/aarch64/processor.c lib/aarch64/ucall.c lib/aarch64/handlers.S lib/aarch64/spinlock.c lib/aarch64/gic.c lib/aarch64/gic_v3.c
> > +LIBKVM_aarch64 = lib/aarch64/processor.c lib/aarch64/ucall.c lib/aarch64/handlers.S lib/aarch64/spinlock.c lib/aarch64/gic.c lib/aarch64/gic_v3.c lib/aarch64/vgic.c
> >  LIBKVM_s390x = lib/s390x/processor.c lib/s390x/ucall.c lib/s390x/diag318_test_handler.c
> >  
> >  TEST_GEN_PROGS_x86_64 = x86_64/cr4_cpuid_sync_test
> > diff --git a/tools/testing/selftests/kvm/include/aarch64/vgic.h b/tools/testing/selftests/kvm/include/aarch64/vgic.h
> > new file mode 100644
> > index 000000000000..3a776af958a0
> > --- /dev/null
> > +++ b/tools/testing/selftests/kvm/include/aarch64/vgic.h
> > @@ -0,0 +1,20 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * ARM Generic Interrupt Controller (GIC) host specific defines
> > + */
> > +
> > +#ifndef SELFTEST_KVM_VGIC_H
> > +#define SELFTEST_KVM_VGIC_H
> > +
> > +#include <linux/kvm.h>
> > +
> > +#define REDIST_REGION_ATTR_ADDR(count, base, flags, index) \
> > +	(((uint64_t)(count) << 52) | \
> > +	((uint64_t)((base) >> 16) << 16) | \
> > +	((uint64_t)(flags) << 12) | \
> > +	index)
> > +
> > +int vgic_v3_setup(struct kvm_vm *vm,
> > +				uint64_t gicd_base_gpa, uint64_t gicr_base_gpa);
> > +
> > +#endif /* SELFTEST_KVM_VGIC_H */
> > diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > new file mode 100644
> > index 000000000000..2318912ab134
> > --- /dev/null
> > +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > @@ -0,0 +1,60 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * ARM Generic Interrupt Controller (GIC) v3 host support
> > + */
> > +
> > +#include <linux/kvm.h>
> > +#include <linux/sizes.h>
> > +
> > +#include "kvm_util.h"
> > +#include "vgic.h"
> > +
> > +#define VGIC_V3_GICD_SZ		(SZ_64K)
> > +#define VGIC_V3_GICR_SZ		(2 * SZ_64K)
> 
> These values are UAPI, consider dropping them in favor of the
> definitions from asm/kvm.h

Yes, please.

> 
> > +
> > +/*
> > + * vGIC-v3 default host setup
> > + *
> > + * Input args:
> > + *	vm - KVM VM
> > + *	gicd_base_gpa - Guest Physical Address of the Distributor region
> > + *	gicr_base_gpa - Guest Physical Address of the Redistributor region
> > + *
> > + * Output args: None
> > + *
> > + * Return: GIC file-descriptor or negative error code upon failure
> > + *
> > + * The function creates a vGIC-v3 device and maps the distributor and
> > + * redistributor regions of the guest. Since it depends on the number of
> > + * vCPUs for the VM, it must be called after all the vCPUs have been created.
> 
> You could avoid the ordering dependency by explicitly taking nr_vcpus as
> an arg. It would also avoid the need for 12/18.

All the vcpus need to be created prior to calling
KVM_DEV_ARM_VGIC_CTRL_INIT, so even though I don't disagree with
simply passing nr_vcpus to this function, we should still assert
if the VM's idea of the number doesn't match. But, this is a lib
file, so there's no reason not to do

#include "../kvm_util_internal.h"

and just access the vcpu list to get the count or, if we add a
new internal nr_vcpus member, access it directly. IOW, so far
I don't believe we need vm_get_nr_vcpus().

> 
> Also note the required alignment on the GPA arguments you're taking.
> 
> > + */
> > +int vgic_v3_setup(struct kvm_vm *vm,
> > +		uint64_t gicd_base_gpa, uint64_t gicr_base_gpa)
> > +{
> > +	uint64_t redist_attr;
> > +	int gic_fd, nr_vcpus;
> > +	unsigned int nr_gic_pages;
> > +
> > +	nr_vcpus = vm_get_nr_vcpus(vm);
> > +	TEST_ASSERT(nr_vcpus > 0, "Invalid number of CPUs: %u\n", nr_vcpus);
> > +
> > +	/* Distributor setup */
> > +	gic_fd = kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, false);
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> > +			KVM_VGIC_V3_ADDR_TYPE_DIST, &gicd_base_gpa, true);
> > +	nr_gic_pages = vm_calc_num_guest_pages(vm_get_mode(vm), VGIC_V3_GICD_SZ);
> > +	virt_map(vm, gicd_base_gpa, gicd_base_gpa,  nr_gic_pages);
> > +
> > +	/* Redistributor setup */
> > +	redist_attr = REDIST_REGION_ATTR_ADDR(nr_vcpus, gicr_base_gpa, 0, 0);
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> > +			KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &redist_attr, true);
> > +	nr_gic_pages = vm_calc_num_guest_pages(vm_get_mode(vm),
> > +						VGIC_V3_GICR_SZ * nr_vcpus);
> > +	virt_map(vm, gicr_base_gpa, gicr_base_gpa,  nr_gic_pages);
> > +
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
> > +				KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true);
> > +
> > +	return gic_fd;
> > +}
> > -- 
> > 2.33.0.153.gba50c8fa24-goog
> > 
>

Thanks,
drew 


WARNING: multiple messages have this Message-ID (diff)
From: Andrew Jones <drjones@redhat.com>
To: Oliver Upton <oupton@google.com>
Cc: Raghavendra Rao Ananta <rananta@google.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Peter Shier <pshier@google.com>,
	Ricardo Koller <ricarkol@google.com>,
	Reiji Watanabe <reijiw@google.com>,
	Jing Zhang <jingzhangos@google.com>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v4 14/18] KVM: arm64: selftests: Add host support for vGIC
Date: Thu, 9 Sep 2021 15:34:21 +0200	[thread overview]
Message-ID: <20210909133421.rdkueb627glve6uz@gator> (raw)
In-Reply-To: <YTmce6Xn+ymngA+r@google.com>

On Thu, Sep 09, 2021 at 05:32:43AM +0000, Oliver Upton wrote:
> Hi Raghu,
> 
> On Thu, Sep 09, 2021 at 01:38:14AM +0000, Raghavendra Rao Ananta wrote:
> > Implement a simple library to perform vGIC-v3 setup
> > from a host point of view. This includes creating a
> > vGIC device, setting up distributor and redistributor
> > attributes, and mapping the guest physical addresses.
> > 
> > The definition of REDIST_REGION_ATTR_ADDR is taken
> > from aarch64/vgic_init test.
> >
> 
> Consider dropping the macro from vgic_init.c and have it just include
> vgic.h

Yes, I agree 18/18 should be squashed into this one.

> 
> > Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> > ---
> >  tools/testing/selftests/kvm/Makefile          |  2 +-
> >  .../selftests/kvm/include/aarch64/vgic.h      | 20 +++++++
> >  .../testing/selftests/kvm/lib/aarch64/vgic.c  | 60 +++++++++++++++++++
> >  3 files changed, 81 insertions(+), 1 deletion(-)
> >  create mode 100644 tools/testing/selftests/kvm/include/aarch64/vgic.h
> >  create mode 100644 tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > 
> > diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile
> > index 5476a8ddef60..8342f65c1d96 100644
> > --- a/tools/testing/selftests/kvm/Makefile
> > +++ b/tools/testing/selftests/kvm/Makefile
> > @@ -35,7 +35,7 @@ endif
> >  
> >  LIBKVM = lib/assert.c lib/elf.c lib/io.c lib/kvm_util.c lib/rbtree.c lib/sparsebit.c lib/test_util.c lib/guest_modes.c lib/perf_test_util.c
> >  LIBKVM_x86_64 = lib/x86_64/apic.c lib/x86_64/processor.c lib/x86_64/vmx.c lib/x86_64/svm.c lib/x86_64/ucall.c lib/x86_64/handlers.S
> > -LIBKVM_aarch64 = lib/aarch64/processor.c lib/aarch64/ucall.c lib/aarch64/handlers.S lib/aarch64/spinlock.c lib/aarch64/gic.c lib/aarch64/gic_v3.c
> > +LIBKVM_aarch64 = lib/aarch64/processor.c lib/aarch64/ucall.c lib/aarch64/handlers.S lib/aarch64/spinlock.c lib/aarch64/gic.c lib/aarch64/gic_v3.c lib/aarch64/vgic.c
> >  LIBKVM_s390x = lib/s390x/processor.c lib/s390x/ucall.c lib/s390x/diag318_test_handler.c
> >  
> >  TEST_GEN_PROGS_x86_64 = x86_64/cr4_cpuid_sync_test
> > diff --git a/tools/testing/selftests/kvm/include/aarch64/vgic.h b/tools/testing/selftests/kvm/include/aarch64/vgic.h
> > new file mode 100644
> > index 000000000000..3a776af958a0
> > --- /dev/null
> > +++ b/tools/testing/selftests/kvm/include/aarch64/vgic.h
> > @@ -0,0 +1,20 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * ARM Generic Interrupt Controller (GIC) host specific defines
> > + */
> > +
> > +#ifndef SELFTEST_KVM_VGIC_H
> > +#define SELFTEST_KVM_VGIC_H
> > +
> > +#include <linux/kvm.h>
> > +
> > +#define REDIST_REGION_ATTR_ADDR(count, base, flags, index) \
> > +	(((uint64_t)(count) << 52) | \
> > +	((uint64_t)((base) >> 16) << 16) | \
> > +	((uint64_t)(flags) << 12) | \
> > +	index)
> > +
> > +int vgic_v3_setup(struct kvm_vm *vm,
> > +				uint64_t gicd_base_gpa, uint64_t gicr_base_gpa);
> > +
> > +#endif /* SELFTEST_KVM_VGIC_H */
> > diff --git a/tools/testing/selftests/kvm/lib/aarch64/vgic.c b/tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > new file mode 100644
> > index 000000000000..2318912ab134
> > --- /dev/null
> > +++ b/tools/testing/selftests/kvm/lib/aarch64/vgic.c
> > @@ -0,0 +1,60 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * ARM Generic Interrupt Controller (GIC) v3 host support
> > + */
> > +
> > +#include <linux/kvm.h>
> > +#include <linux/sizes.h>
> > +
> > +#include "kvm_util.h"
> > +#include "vgic.h"
> > +
> > +#define VGIC_V3_GICD_SZ		(SZ_64K)
> > +#define VGIC_V3_GICR_SZ		(2 * SZ_64K)
> 
> These values are UAPI, consider dropping them in favor of the
> definitions from asm/kvm.h

Yes, please.

> 
> > +
> > +/*
> > + * vGIC-v3 default host setup
> > + *
> > + * Input args:
> > + *	vm - KVM VM
> > + *	gicd_base_gpa - Guest Physical Address of the Distributor region
> > + *	gicr_base_gpa - Guest Physical Address of the Redistributor region
> > + *
> > + * Output args: None
> > + *
> > + * Return: GIC file-descriptor or negative error code upon failure
> > + *
> > + * The function creates a vGIC-v3 device and maps the distributor and
> > + * redistributor regions of the guest. Since it depends on the number of
> > + * vCPUs for the VM, it must be called after all the vCPUs have been created.
> 
> You could avoid the ordering dependency by explicitly taking nr_vcpus as
> an arg. It would also avoid the need for 12/18.

All the vcpus need to be created prior to calling
KVM_DEV_ARM_VGIC_CTRL_INIT, so even though I don't disagree with
simply passing nr_vcpus to this function, we should still assert
if the VM's idea of the number doesn't match. But, this is a lib
file, so there's no reason not to do

#include "../kvm_util_internal.h"

and just access the vcpu list to get the count or, if we add a
new internal nr_vcpus member, access it directly. IOW, so far
I don't believe we need vm_get_nr_vcpus().

> 
> Also note the required alignment on the GPA arguments you're taking.
> 
> > + */
> > +int vgic_v3_setup(struct kvm_vm *vm,
> > +		uint64_t gicd_base_gpa, uint64_t gicr_base_gpa)
> > +{
> > +	uint64_t redist_attr;
> > +	int gic_fd, nr_vcpus;
> > +	unsigned int nr_gic_pages;
> > +
> > +	nr_vcpus = vm_get_nr_vcpus(vm);
> > +	TEST_ASSERT(nr_vcpus > 0, "Invalid number of CPUs: %u\n", nr_vcpus);
> > +
> > +	/* Distributor setup */
> > +	gic_fd = kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3, false);
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> > +			KVM_VGIC_V3_ADDR_TYPE_DIST, &gicd_base_gpa, true);
> > +	nr_gic_pages = vm_calc_num_guest_pages(vm_get_mode(vm), VGIC_V3_GICD_SZ);
> > +	virt_map(vm, gicd_base_gpa, gicd_base_gpa,  nr_gic_pages);
> > +
> > +	/* Redistributor setup */
> > +	redist_attr = REDIST_REGION_ATTR_ADDR(nr_vcpus, gicr_base_gpa, 0, 0);
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
> > +			KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &redist_attr, true);
> > +	nr_gic_pages = vm_calc_num_guest_pages(vm_get_mode(vm),
> > +						VGIC_V3_GICR_SZ * nr_vcpus);
> > +	virt_map(vm, gicr_base_gpa, gicr_base_gpa,  nr_gic_pages);
> > +
> > +	kvm_device_access(gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
> > +				KVM_DEV_ARM_VGIC_CTRL_INIT, NULL, true);
> > +
> > +	return gic_fd;
> > +}
> > -- 
> > 2.33.0.153.gba50c8fa24-goog
> > 
>

Thanks,
drew 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-09-09 13:34 UTC|newest]

Thread overview: 189+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-09  1:38 [PATCH v4 00/18] KVM: arm64: selftests: Introduce arch_timer selftest Raghavendra Rao Ananta
2021-09-09  1:38 ` Raghavendra Rao Ananta
2021-09-09  1:38 ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 01/18] KVM: arm64: selftests: Add MMIO readl/writel support Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 02/18] KVM: arm64: selftests: Add sysreg.h Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  2:47   ` Oliver Upton
2021-09-09  2:47     ` Oliver Upton
2021-09-09  2:47     ` Oliver Upton
2021-09-09  6:53     ` Andrew Jones
2021-09-09  6:53       ` Andrew Jones
2021-09-09  6:53       ` Andrew Jones
2021-09-09 16:42       ` Raghavendra Rao Ananta
2021-09-09 16:42         ` Raghavendra Rao Ananta
2021-09-09 16:42         ` Raghavendra Rao Ananta
2021-09-09 17:17   ` Mark Brown
2021-09-09 17:17     ` Mark Brown
2021-09-09 17:17     ` Mark Brown
2021-09-09 20:06     ` Raghavendra Rao Ananta
2021-09-09 20:06       ` Raghavendra Rao Ananta
2021-09-09 20:06       ` Raghavendra Rao Ananta
2021-09-10  8:30       ` Mark Brown
2021-09-10  8:30         ` Mark Brown
2021-09-10  8:30         ` Mark Brown
2021-09-13 23:38         ` Raghavendra Rao Ananta
2021-09-13 23:38           ` Raghavendra Rao Ananta
2021-09-13 23:38           ` Raghavendra Rao Ananta
2021-09-14 10:39           ` Mark Brown
2021-09-14 10:39             ` Mark Brown
2021-09-14 10:39             ` Mark Brown
2021-09-09  1:38 ` [PATCH v4 03/18] KVM: arm64: selftests: Use read/write definitions from sysreg.h Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  2:55   ` Oliver Upton
2021-09-09  2:55     ` Oliver Upton
2021-09-09  2:55     ` Oliver Upton
2021-09-09  6:56   ` Andrew Jones
2021-09-09  6:56     ` Andrew Jones
2021-09-09  6:56     ` Andrew Jones
2021-09-09 16:43     ` Raghavendra Rao Ananta
2021-09-09 16:43       ` Raghavendra Rao Ananta
2021-09-09 16:43       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 04/18] KVM: arm64: selftests: Introduce ARM64_SYS_KVM_REG Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  3:02   ` Oliver Upton
2021-09-09  3:02     ` Oliver Upton
2021-09-09  3:02     ` Oliver Upton
2021-09-09 16:48     ` Raghavendra Rao Ananta
2021-09-09 16:48       ` Raghavendra Rao Ananta
2021-09-09 16:48       ` Raghavendra Rao Ananta
2021-09-09  7:04   ` Andrew Jones
2021-09-09  7:04     ` Andrew Jones
2021-09-09  7:04     ` Andrew Jones
2021-09-09 16:49     ` Raghavendra Rao Ananta
2021-09-09 16:49       ` Raghavendra Rao Ananta
2021-09-09 16:49       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 05/18] KVM: arm64: selftests: Add support for cpu_relax Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 06/18] KVM: arm64: selftests: Add basic support for arch_timers Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  7:07   ` Andrew Jones
2021-09-09  7:07     ` Andrew Jones
2021-09-09  7:07     ` Andrew Jones
2021-09-09  1:38 ` [PATCH v4 07/18] KVM: arm64: selftests: Add basic support to generate delays Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 08/18] KVM: arm64: selftests: Add support to disable and enable local IRQs Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 09/18] KVM: arm64: selftests: Add guest support to get the vcpuid Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:09   ` Oliver Upton
2021-09-09  5:09     ` Oliver Upton
2021-09-09  5:09     ` Oliver Upton
2021-09-09 16:59     ` Raghavendra Rao Ananta
2021-09-09 16:59       ` Raghavendra Rao Ananta
2021-09-09 16:59       ` Raghavendra Rao Ananta
2021-09-09 17:04       ` Oliver Upton
2021-09-09 17:04         ` Oliver Upton
2021-09-09 17:04         ` Oliver Upton
2021-09-09  7:56   ` Andrew Jones
2021-09-09  7:56     ` Andrew Jones
2021-09-09  7:56     ` Andrew Jones
2021-09-09 17:10     ` Raghavendra Rao Ananta
2021-09-09 17:10       ` Raghavendra Rao Ananta
2021-09-09 17:10       ` Raghavendra Rao Ananta
2021-09-10  8:10       ` Andrew Jones
2021-09-10  8:10         ` Andrew Jones
2021-09-10  8:10         ` Andrew Jones
2021-09-10 18:03         ` Raghavendra Rao Ananta
2021-09-10 18:03           ` Raghavendra Rao Ananta
2021-09-10 18:03           ` Raghavendra Rao Ananta
2021-09-13  7:25           ` Andrew Jones
2021-09-13  7:25             ` Andrew Jones
2021-09-13  7:25             ` Andrew Jones
2021-09-12  7:05   ` Reiji Watanabe
2021-09-12  7:05     ` Reiji Watanabe
2021-09-12  7:05     ` Reiji Watanabe
2021-09-13  7:35     ` Andrew Jones
2021-09-13  7:35       ` Andrew Jones
2021-09-13  7:35       ` Andrew Jones
2021-09-13 16:51       ` Raghavendra Rao Ananta
2021-09-13 16:51         ` Raghavendra Rao Ananta
2021-09-13 16:51         ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 10/18] KVM: arm64: selftests: Add light-weight spinlock support Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 11/18] KVM: arm64: selftests: Add basic GICv3 support Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:18   ` Oliver Upton
2021-09-09  5:18     ` Oliver Upton
2021-09-09  5:18     ` Oliver Upton
2021-09-09 16:38     ` Raghavendra Rao Ananta
2021-09-09 16:38       ` Raghavendra Rao Ananta
2021-09-09 16:38       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 12/18] KVM: selftests: Keep track of the number of vCPUs for a VM Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:22   ` Oliver Upton
2021-09-09  5:22     ` Oliver Upton
2021-09-09  5:22     ` Oliver Upton
2021-09-09 13:20   ` Andrew Jones
2021-09-09 13:20     ` Andrew Jones
2021-09-09 13:20     ` Andrew Jones
2021-09-09  1:38 ` [PATCH v4 13/18] KVM: selftests: Add support to get the VM's mode Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 14/18] KVM: arm64: selftests: Add host support for vGIC Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:32   ` Oliver Upton
2021-09-09  5:32     ` Oliver Upton
2021-09-09  5:32     ` Oliver Upton
2021-09-09 13:34     ` Andrew Jones [this message]
2021-09-09 13:34       ` Andrew Jones
2021-09-09 13:34       ` Andrew Jones
2021-09-09 17:25       ` Raghavendra Rao Ananta
2021-09-09 17:25         ` Raghavendra Rao Ananta
2021-09-09 17:25         ` Raghavendra Rao Ananta
2021-09-09 17:20     ` Raghavendra Rao Ananta
2021-09-09 17:20       ` Raghavendra Rao Ananta
2021-09-09 17:20       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 15/18] KVM: arm64: selftests: Add arch_timer test Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:51   ` Oliver Upton
2021-09-09  5:51     ` Oliver Upton
2021-09-09  5:51     ` Oliver Upton
2021-09-09 18:03     ` Raghavendra Rao Ananta
2021-09-09 18:03       ` Raghavendra Rao Ananta
2021-09-09 18:03       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 16/18] KVM: arm64: selftests: arch_timer: Support vCPU migration Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09 13:45   ` Andrew Jones
2021-09-09 13:45     ` Andrew Jones
2021-09-09 13:45     ` Andrew Jones
2021-09-09 17:33     ` Raghavendra Rao Ananta
2021-09-09 17:33       ` Raghavendra Rao Ananta
2021-09-09 17:33       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 17/18] KVM: arm64: selftests: Replace ARM64_SYS_REG with ARM64_SYS_KVM_REG Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:34   ` Oliver Upton
2021-09-09  5:34     ` Oliver Upton
2021-09-09  5:34     ` Oliver Upton
2021-09-09 13:38   ` Andrew Jones
2021-09-09 13:38     ` Andrew Jones
2021-09-09 13:38     ` Andrew Jones
2021-09-09 17:29     ` Raghavendra Rao Ananta
2021-09-09 17:29       ` Raghavendra Rao Ananta
2021-09-09 17:29       ` Raghavendra Rao Ananta
2021-09-09  1:38 ` [PATCH v4 18/18] KVM: selftests: vgic_init: Pull REDIST_REGION_ATTR_ADDR from vgic.h Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  1:38   ` Raghavendra Rao Ananta
2021-09-09  5:36   ` Oliver Upton
2021-09-09  5:36     ` Oliver Upton
2021-09-09  5:36     ` Oliver Upton
2021-09-09 16:41     ` Raghavendra Rao Ananta
2021-09-09 16:41       ` Raghavendra Rao Ananta
2021-09-09 16:41       ` Raghavendra Rao Ananta

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=20210909133421.rdkueb627glve6uz@gator \
    --to=drjones@redhat.com \
    --cc=catalin.marinas@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=maz@kernel.org \
    --cc=oupton@google.com \
    --cc=pbonzini@redhat.com \
    --cc=pshier@google.com \
    --cc=will@kernel.org \
    /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.