[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 14/15] xen/arm: guest_walk_tables: Switch the return to bool
On Mon, 16 Jul 2018, Julien Grall wrote: > At the moment, guest_walk_tables can either return 0, -EFAULT, -EINVAL. > The use of the last 2 are not clearly defined and used inconsistently in > the code. The current only caller does not care about the return > value and the value of it seems very limited (no way to differentiate > between the 15ish error paths). > > So switch to bool to simplify the return and make the developper life a ^ developer > bit easier. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> Aside from the minor typo: Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > xen/arch/arm/guest_walk.c | 50 > ++++++++++++++++++++-------------------- > xen/arch/arm/mem_access.c | 2 +- > xen/include/asm-arm/guest_walk.h | 8 +++---- > 3 files changed, 30 insertions(+), 30 deletions(-) > > diff --git a/xen/arch/arm/guest_walk.c b/xen/arch/arm/guest_walk.c > index 4a1b4cf2c8..7db7a7321b 100644 > --- a/xen/arch/arm/guest_walk.c > +++ b/xen/arch/arm/guest_walk.c > @@ -28,9 +28,9 @@ > * page table on a different vCPU, the following registers would need to be > * loaded: TCR_EL1, TTBR0_EL1, TTBR1_EL1, and SCTLR_EL1. > */ > -static int guest_walk_sd(const struct vcpu *v, > - vaddr_t gva, paddr_t *ipa, > - unsigned int *perms) > +static bool guest_walk_sd(const struct vcpu *v, > + vaddr_t gva, paddr_t *ipa, > + unsigned int *perms) > { > int ret; > bool disabled = true; > @@ -79,7 +79,7 @@ static int guest_walk_sd(const struct vcpu *v, > } > > if ( disabled ) > - return -EFAULT; > + return false; > > /* > * The address of the L1 descriptor for the initial lookup has the > @@ -97,12 +97,12 @@ static int guest_walk_sd(const struct vcpu *v, > /* Access the guest's memory to read only one PTE. */ > ret = access_guest_memory_by_ipa(d, paddr, &pte, sizeof(short_desc_t), > false); > if ( ret ) > - return -EINVAL; > + return false; > > switch ( pte.walk.dt ) > { > case L1DESC_INVALID: > - return -EFAULT; > + return false; > > case L1DESC_PAGE_TABLE: > /* > @@ -122,10 +122,10 @@ static int guest_walk_sd(const struct vcpu *v, > /* Access the guest's memory to read only one PTE. */ > ret = access_guest_memory_by_ipa(d, paddr, &pte, > sizeof(short_desc_t), false); > if ( ret ) > - return -EINVAL; > + return false; > > if ( pte.walk.dt == L2DESC_INVALID ) > - return -EFAULT; > + return false; > > if ( pte.pg.page ) /* Small page. */ > { > @@ -175,7 +175,7 @@ static int guest_walk_sd(const struct vcpu *v, > *perms |= GV2M_EXEC; > } > > - return 0; > + return true; > } > > /* > @@ -355,9 +355,9 @@ static bool check_base_size(unsigned int output_size, > uint64_t base) > * page table on a different vCPU, the following registers would need to be > * loaded: TCR_EL1, TTBR0_EL1, TTBR1_EL1, and SCTLR_EL1. > */ > -static int guest_walk_ld(const struct vcpu *v, > - vaddr_t gva, paddr_t *ipa, > - unsigned int *perms) > +static bool guest_walk_ld(const struct vcpu *v, > + vaddr_t gva, paddr_t *ipa, > + unsigned int *perms) > { > int ret; > bool disabled = true; > @@ -442,7 +442,7 @@ static int guest_walk_ld(const struct vcpu *v, > */ > if ( (input_size > TCR_EL1_IPS_48_BIT_VAL) || > (input_size < TCR_EL1_IPS_MIN_VAL) ) > - return -EFAULT; > + return false; > } > else > { > @@ -487,7 +487,7 @@ static int guest_walk_ld(const struct vcpu *v, > } > > if ( disabled ) > - return -EFAULT; > + return false; > > /* > * The starting level is the number of strides (grainsizes[gran] - 3) > @@ -498,12 +498,12 @@ static int guest_walk_ld(const struct vcpu *v, > /* Get the IPA output_size. */ > ret = get_ipa_output_size(d, tcr, &output_size); > if ( ret ) > - return -EFAULT; > + return false; > > /* Make sure the base address does not exceed its configured size. */ > ret = check_base_size(output_size, ttbr); > if ( !ret ) > - return -EFAULT; > + return false; > > /* > * Compute the base address of the first level translation table that is > @@ -523,12 +523,12 @@ static int guest_walk_ld(const struct vcpu *v, > /* Access the guest's memory to read only one PTE. */ > ret = access_guest_memory_by_ipa(d, paddr, &pte, sizeof(lpae_t), > false); > if ( ret ) > - return -EFAULT; > + return false; > > /* Make sure the base address does not exceed its configured size. */ > ret = check_base_size(output_size, pfn_to_paddr(pte.walk.base)); > if ( !ret ) > - return -EFAULT; > + return false; > > /* > * If page granularity is 64K, make sure the address is aligned > @@ -537,7 +537,7 @@ static int guest_walk_ld(const struct vcpu *v, > if ( (output_size < TCR_EL1_IPS_52_BIT_VAL) && > (gran == GRANULE_SIZE_INDEX_64K) && > (pte.walk.base & 0xf) ) > - return -EFAULT; > + return false; > > /* > * Break if one of the following conditions is true: > @@ -567,7 +567,7 @@ static int guest_walk_ld(const struct vcpu *v, > * maps a memory block at level 3 (PTE<1:0> == 01). > */ > if ( !lpae_is_valid(pte) || !lpae_is_mapping(pte, level) ) > - return -EFAULT; > + return false; > > /* Make sure that the lower bits of the PTE's base address are zero. */ > mask = GENMASK_ULL(47, grainsizes[gran]); > @@ -583,11 +583,11 @@ static int guest_walk_ld(const struct vcpu *v, > if ( !pte.pt.xn && !xn_table ) > *perms |= GV2M_EXEC; > > - return 0; > + return true; > } > > -int guest_walk_tables(const struct vcpu *v, vaddr_t gva, > - paddr_t *ipa, unsigned int *perms) > +bool guest_walk_tables(const struct vcpu *v, vaddr_t gva, > + paddr_t *ipa, unsigned int *perms) > { > uint32_t sctlr = READ_SYSREG(SCTLR_EL1); > register_t tcr = READ_SYSREG(TCR_EL1); > @@ -595,7 +595,7 @@ int guest_walk_tables(const struct vcpu *v, vaddr_t gva, > > /* We assume that the domain is running on the currently active domain. > */ > if ( v != current ) > - return -EFAULT; > + return false; > > /* Allow perms to be NULL. */ > perms = perms ?: &_perms; > @@ -619,7 +619,7 @@ int guest_walk_tables(const struct vcpu *v, vaddr_t gva, > /* Memory can be accessed without any restrictions. */ > *perms = GV2M_READ|GV2M_WRITE|GV2M_EXEC; > > - return 0; > + return true; > } > > if ( is_32bit_domain(v->domain) && !(tcr & TTBCR_EAE) ) > diff --git a/xen/arch/arm/mem_access.c b/xen/arch/arm/mem_access.c > index ae2686ffa2..57ec7872bb 100644 > --- a/xen/arch/arm/mem_access.c > +++ b/xen/arch/arm/mem_access.c > @@ -125,7 +125,7 @@ p2m_mem_access_check_and_get_page(vaddr_t gva, unsigned > long flag, > * The software gva to ipa translation can still fail, e.g., if the > gva > * is not mapped. > */ > - if ( guest_walk_tables(v, gva, &ipa, &perms) < 0 ) > + if ( !guest_walk_tables(v, gva, &ipa, &perms) ) > return NULL; > > /* > diff --git a/xen/include/asm-arm/guest_walk.h > b/xen/include/asm-arm/guest_walk.h > index 4ed8476e08..8768ac9894 100644 > --- a/xen/include/asm-arm/guest_walk.h > +++ b/xen/include/asm-arm/guest_walk.h > @@ -2,10 +2,10 @@ > #define _XEN_GUEST_WALK_H > > /* Walk the guest's page tables in software. */ > -int guest_walk_tables(const struct vcpu *v, > - vaddr_t gva, > - paddr_t *ipa, > - unsigned int *perms); > +bool guest_walk_tables(const struct vcpu *v, > + vaddr_t gva, > + paddr_t *ipa, > + unsigned int *perms); > > #endif /* _XEN_GUEST_WALK_H */ > > -- > 2.11.0 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |