|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 03/25] arm/altp2m: Add struct vttbr.
Hi Julien,
>> Hello Sergej,
>>
>> Title: s/altp2m/p2m/
I will adapt the titles of all patches, thank you.
>>
>> On 01/08/16 18:10, Sergej Proskurin wrote:
>>> The struct vttbr introduces a simple way to precisely access the
>>> individual fields of the vttbr.
>>
>> I am not sure whether this is really helpful. You don't seem to take
>> often advantage of those fields and the actual accesses don't seem
>> necessary (I will comment on the usage).
>>
>>> ---
>>> xen/arch/arm/p2m.c | 8 ++++----
>>> xen/arch/arm/traps.c | 2 +-
>>> xen/include/asm-arm/p2m.h | 2 +-
>>> xen/include/asm-arm/processor.h | 16 ++++++++++++++++
>>> 4 files changed, 22 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
>>> index 40a0b80..cbc64a1 100644
>>> --- a/xen/arch/arm/p2m.c
>>> +++ b/xen/arch/arm/p2m.c
>>> @@ -122,7 +122,7 @@ void p2m_restore_state(struct vcpu *n)
>>> WRITE_SYSREG(hcr & ~HCR_VM, HCR_EL2);
>>> isb();
>>>
>>> - WRITE_SYSREG64(p2m->vttbr, VTTBR_EL2);
>>> + WRITE_SYSREG64(p2m->vttbr.vttbr, VTTBR_EL2);
>>> isb();
>>>
>>> if ( is_32bit_domain(n->domain) )
>>> @@ -147,10 +147,10 @@ static void p2m_flush_tlb(struct p2m_domain *p2m)
>>> * VMID. So switch to the VTTBR of a given P2M if different.
>>> */
>>> ovttbr = READ_SYSREG64(VTTBR_EL2);
>>> - if ( ovttbr != p2m->vttbr )
>>> + if ( ovttbr != p2m->vttbr.vttbr )
>>> {
>>> local_irq_save(flags);
>>> - WRITE_SYSREG64(p2m->vttbr, VTTBR_EL2);
>>> + WRITE_SYSREG64(p2m->vttbr.vttbr, VTTBR_EL2);
>>> isb();
>>> }
>>>
>>> @@ -1293,7 +1293,7 @@ static int p2m_alloc_table(struct domain *d)
>>>
>>> p2m->root = page;
>>>
>>> - p2m->vttbr = page_to_maddr(p2m->root) | ((uint64_t)p2m->vmid &
>>> 0xff) << 48;
>>> + p2m->vttbr.vttbr = page_to_maddr(p2m->root) |
>>> ((uint64_t)p2m->vmid & 0xff) << 48;
>>>
>>> /*
>>> * Make sure that all TLBs corresponding to the new VMID are
>>> flushed
>>> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
>>> index 06f06e3..12be7c9 100644
>>> --- a/xen/arch/arm/traps.c
>>> +++ b/xen/arch/arm/traps.c
>>> @@ -881,7 +881,7 @@ void vcpu_show_registers(const struct vcpu *v)
>>> ctxt.ifsr32_el2 = v->arch.ifsr;
>>> #endif
>>>
>>> - ctxt.vttbr_el2 = v->domain->arch.p2m.vttbr;
>>> + ctxt.vttbr_el2 = v->domain->arch.p2m.vttbr.vttbr;
>>>
>>> _show_registers(&v->arch.cpu_info->guest_cpu_user_regs, &ctxt, 1,
>>> v);
>>> }
>>> diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
>>> index 53c4d78..5c7cd1a 100644
>>> --- a/xen/include/asm-arm/p2m.h
>>> +++ b/xen/include/asm-arm/p2m.h
>>> @@ -33,7 +33,7 @@ struct p2m_domain {
>>> uint8_t vmid;
>>>
>>> /* Current Translation Table Base Register for the p2m */
>>> - uint64_t vttbr;
>>> + struct vttbr vttbr;
>>>
>>> /*
>>> * Highest guest frame that's ever been mapped in the p2m
>>> diff --git a/xen/include/asm-arm/processor.h
>>> b/xen/include/asm-arm/processor.h
>>> index 15bf890..f8ca18c 100644
>>> --- a/xen/include/asm-arm/processor.h
>>> +++ b/xen/include/asm-arm/processor.h
>>> @@ -529,6 +529,22 @@ union hsr {
>>>
>>>
>>> };
>>> +
>>> +/* VTTBR: Virtualization Translation Table Base Register */
>>> +struct vttbr {
>>> + union {
>>> + struct {
>>> + u64 baddr :40, /* variable res0: from 0-(x-1) bit */
>>
>> As mentioned on the previous series, this field is 48 bits for ARMv8
>> (see ARM D7.2.102 in DDI 0487A.j).
>>
I must have missed it during refactoring. At this point, I will
distinguish between __arm__ and __aarch64__, thank you.
>>> + res1 :8,
>>> + vmid :8,
>>> + res2 :8;
>>> + };
>>> + u64 vttbr;
>>> + };
>>> +};
>>> +
>>> +#define INVALID_VTTBR (0UL)
>>> +
>>> #endif
>>>
>>> /* HSR.EC == HSR_CP{15,14,10}_32 */
>>>
>>
>> Regards,
>>
>
Best regards,
~Sergej
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |