|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 6/7] arm/mpu: Provide a constructor for pr_t type
Hi Michal,
>>
>> +/*
>> + * Excute never.
>> + * Stage 1 EL2 translation regime.
>> + * XN[1] determines whether execution of the instruction fetched from the
>> MPU
>> + * memory region is permitted.
>> + * Stage 2 EL1/EL0 translation regime.
>> + * XN[0] determines whether execution of the instruction fetched from the
>> MPU
>> + * memory region is permitted.
>> + */
> Why do we need this comment? If any, why do we need EL1 description if the
> macro
> is EL2?
Uhm yes I think I can remove altogether this comment
>
>> +#define PRBAR_EL2_XN_ENABLED 0x2
>> +
>> #ifndef __ASSEMBLY__
>>
>> /* Protection Region Base Address Register */
>> diff --git a/xen/arch/arm/include/asm/mpu.h b/xen/arch/arm/include/asm/mpu.h
>> index 0e0a7f05ade9..7b82f10d336b 100644
>> --- a/xen/arch/arm/include/asm/mpu.h
>> +++ b/xen/arch/arm/include/asm/mpu.h
>> @@ -24,6 +24,10 @@
>> #define NUM_MPU_REGIONS_MASK (NUM_MPU_REGIONS - 1)
>> #define MAX_MPU_REGION_NR 255
>>
>> +/* Access permission attributes. */
>> +/* Read/Write at EL2, No Access at EL1/EL0. */
>> +#define AP_RW_EL2 0x0
> This macro and the previous one are used only once (I also checked your full
> tree) and cannot be set by the caller. What's the purpose of the macros then?
> Why can't we set these values in pr_of_xenaddr() and add comment next to value
> there?
Sure, I’ll do that
>
>> +
>> #ifndef __ASSEMBLY__
>>
>> #ifdef CONFIG_ARM_64
>> diff --git a/xen/arch/arm/include/asm/mpu/mm.h
>> b/xen/arch/arm/include/asm/mpu/mm.h
>> index e2235e568e81..296fe74c5d61 100644
>> --- a/xen/arch/arm/include/asm/mpu/mm.h
>> +++ b/xen/arch/arm/include/asm/mpu/mm.h
>> @@ -75,6 +75,16 @@ extern void read_protection_region(pr_t *pr_read, uint8_t
>> sel);
>> */
>> extern void write_protection_region(const pr_t *pr_write, uint8_t sel);
> Here and ...
>
>>
>> +/*
>> + * Creates a pr_t structure describing a protection region.
>> + *
>> + * @base: base address as base of the protection region.
>> + * @limit: exclusive address as limit of the protection region.
>> + * @attr: attribute index for the memory type.
>> + * @return: pr_t structure describing a protection region.
>> + */
>> +extern pr_t pr_of_xenaddr(paddr_t base, paddr_t limit, unsigned int
>> attr_idx);
> here. Please don't use extern in prototypes. It's not needed.
I see we have a mixed usage of this in arch/arm and it’s not documented to do
otherwise
in the code style, in this case I would prefer to be explicit unless it’s a
strong objection on your side,
let me know.
>>
>> +pr_t pr_of_xenaddr(paddr_t base, paddr_t limit, unsigned int attr_idx)
>> +{
>> + prbar_t prbar;
>> + prlar_t prlar;
>> + pr_t region;
>> +
>> + /* Build up value for PRBAR_EL2. */
>> + prbar = (prbar_t) {
>> + .reg = {
>> + .ap = AP_RW_EL2, /* Read/Write at EL2, no access at
>> EL1/EL0. */
>> + .xn = PRBAR_EL2_XN_ENABLED, /* No need to execute outside
>> .text */
>> + }};
>> +
>> + switch ( attr_idx )
>> + {
>> + case MT_NORMAL_NC:
>> + /*
>> + * ARM ARM: Overlaying the shareability attribute (DDI
>> + * 0406C.b B3-1376 to 1377)
> It's a bit odd to provide here the manual for Armv7.
> Also, our general advice is to use the latest revision.
I suspect this was copied from mfn_to_xen_entry, I’ll try to find the latest
reference to this.
>
>> + *
>> + * A memory region with a resultant memory type attribute of normal,
>> + * and a resultant cacheability attribute of Inner non-cacheable,
>> + * outer non-cacheable, must have a resultant shareability attribute
>> + * of outer shareable, otherwise shareability is UNPREDICTABLE.
>> + *
>> + * On ARMv8 sharability is ignored and explicitly treated as outer
>> + * shareable for normal inner non-cacheable, outer non-cacheable.
>> + */
>> + prbar.reg.sh = LPAE_SH_OUTER;
>> + break;
>> + case MT_DEVICE_nGnRnE:
>> + case MT_DEVICE_nGnRE:
>> + /*
>> + * Shareability is ignored for non-normal memory, Outer is as
>> + * good as anything.
>> + *
>> + * On ARMv8 sharability is ignored and explicitly treated as outer
> Does this Armv8 comments make sense? We don't support Armv7 MPU.
>
>> + * shareable for any device memory type.
>> + */
>> + prbar.reg.sh = LPAE_SH_OUTER;
>> + break;
>> + default:
>> + /* Xen mappings are SMP coherent */
>> + prbar.reg.sh = LPAE_SH_INNER;
> AFAIR MISRA C requires every clause to be terminated with break.
> That said I don't remember if we accepted this rule...
I’ll add a break, it doesn’t hurt.
Cheers,
Luca
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |