[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [PATCH v4 2/4] hw/intc/arm_gicv3_its: Implement a minimal
From: |
Peter Maydell |
Subject: |
Re: [Qemu-arm] [PATCH v4 2/4] hw/intc/arm_gicv3_its: Implement a minimalist reset |
Date: |
Fri, 24 Nov 2017 13:34:52 +0000 |
On 24 November 2017 at 13:30, Eric Auger <address@hidden> wrote:
> At the moment the ITS is not properly reset and this causes
> various bugs on save/restore. We implement a minimalist reset
> through individual register writes but for kernel versions
> before v4.15 this fails voiding the vITS cache. We cannot
> claim we have a comprehensive reset (hence the error message)
> but that's better than nothing.
>
> Signed-off-by: Eric Auger <address@hidden>
>
> ---
>
> v2 -> v3:
> - individual register writes performed in kvm_arm_its_reset
> - check KVM_DEV_ARM_VGIC_GRP_ITS_REGS support
> ---
> hw/intc/arm_gicv3_its_kvm.c | 41 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 41 insertions(+)
>
> diff --git a/hw/intc/arm_gicv3_its_kvm.c b/hw/intc/arm_gicv3_its_kvm.c
> index b1b322b..83e5268 100644
> --- a/hw/intc/arm_gicv3_its_kvm.c
> +++ b/hw/intc/arm_gicv3_its_kvm.c
> @@ -28,6 +28,16 @@
>
> #define TYPE_KVM_ARM_ITS "arm-its-kvm"
> #define KVM_ARM_ITS(obj) OBJECT_CHECK(GICv3ITSState, (obj), TYPE_KVM_ARM_ITS)
> +#define KVM_ARM_ITS_CLASS(klass) \
> + OBJECT_CLASS_CHECK(KVMARMITSClass, (klass), TYPE_KVM_ARM_ITS)
> +#define KVM_ARM_ITS_GET_CLASS(obj) \
> + OBJECT_GET_CLASS(KVMARMITSClass, (obj), TYPE_KVM_ARM_ITS)
> +
> +typedef struct KVMARMITSClass {
> + GICv3ITSCommonClass parent_class;
> + void (*parent_reset)(DeviceState *dev);
> +} KVMARMITSClass;
> +
>
> static int kvm_its_send_msi(GICv3ITSState *s, uint32_t value, uint16_t devid)
> {
> @@ -186,6 +196,34 @@ static void kvm_arm_its_post_load(GICv3ITSState *s)
> GITS_CTLR, &s->ctlr, true, &error_abort);
> }
>
> +static void kvm_arm_its_reset(DeviceState *dev)
> +{
> + GICv3ITSState *s = ARM_GICV3_ITS_COMMON(dev);
> + KVMARMITSClass *c = KVM_ARM_ITS_GET_CLASS(s);
> + int i;
> +
> + c->parent_reset(dev);
> +
> + error_report("ITS KVM: full reset is not supported by the host kernel");
This message claims that we have a problem because of the host
kernel version, but I can't see where we do the check on the
host kernel that lets us avoid the error message when it's
new enough ?
thanks
-- PMM