|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH 25/49] ARM: new VGIC: Add GICv2 world switch backend
Hi,
forgot to mention:
On 13/02/18 14:31, Julien Grall wrote:
> Hi,
>
> On 09/02/18 14:39, Andre Przywara wrote:
>> Processing maintenance interrupts and accessing the list registers
>> are dependent on the host's GIC version.
>> Introduce vgic-v2.c to contain GICv2 specific functions.
>> Implement the GICv2 specific code for syncing the emulation state
>> into the VGIC registers.
>> This also adds the hook to let Xen setup the host GIC addresses.
>>
>> This is based on Linux commit 140b086dd197, written by Marc Zyngier.
>>
>> Signed-off-by: Andre Przywara <andre.przywara@xxxxxxxxxx>
>> ---
>> xen/arch/arm/vgic/vgic-v2.c | 261
>> ++++++++++++++++++++++++++++++++++++++++++++
>> xen/arch/arm/vgic/vgic.c | 20 ++++
>> xen/arch/arm/vgic/vgic.h | 8 ++
>> 3 files changed, 289 insertions(+)
>> create mode 100644 xen/arch/arm/vgic/vgic-v2.c
>>
>> diff --git a/xen/arch/arm/vgic/vgic-v2.c b/xen/arch/arm/vgic/vgic-v2.c
>> new file mode 100644
>> index 0000000000..10fc467ffa
>> --- /dev/null
>> +++ b/xen/arch/arm/vgic/vgic-v2.c
....
>> +void vgic_v2_save_state(struct vcpu *vcpu)
>> +{
>> + u64 used_lrs = vcpu->arch.vgic_cpu.used_lrs;
>> +
>> + if ( used_lrs )
>> + {
>> + save_lrs(vcpu, gic_v2_hw_data.hbase);
>> + writel_relaxed(0, gic_v2_hw_data.hbase + GICH_HCR);
>> + }
>> +}
>
> I am not entirely convinced that have a separate function to save the
> LRs is necessary. This could be done in fold_lr_state().
>
>> +
>> +void vgic_v2_restore_state(struct vcpu *vcpu)
>> +{
>> + struct vgic_v2_cpu_if *cpu_if = &vcpu->arch.vgic_cpu.vgic_v2;
>> + u64 used_lrs = vcpu->arch.vgic_cpu.used_lrs;
>> + int i;
>> +
>> + if ( used_lrs )
>> + {
>> + writel_relaxed(cpu_if->vgic_hcr,
>> + gic_v2_hw_data.hbase + GICH_HCR);
>> + for ( i = 0; i < used_lrs; i++ )
>> + writel_relaxed(cpu_if->vgic_lr[i],
>> + gic_v2_hw_data.hbase + GICH_LR0 + (i * 4));
>> + }
>
> Same here but with populate_lr_state(). This would make the code easier
> to follow and also avoid a lot ifery in the vgic.c code.
This is mostly due to KVM's inability to directly access the GICv3 LRs
when running in EL1. I will take a look whether what it would take to
merge this. Sounds tempting, but there might be side effects.
Cheers,
Andre.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |