Messages in this thread | | | From | David Laight <> | Subject | RE: [PATCH v2] powerpc/32: Don't use a struct based type for pte_t | Date | Fri, 17 Sep 2021 14:32:22 +0000 |
| |
From: Christophe Leroy > Sent: 17 September 2021 14:58 > > Long time ago we had a config item called STRICT_MM_TYPECHECKS > to build the kernel with pte_t defined as a structure in order > to perform additional build checks or build it with pte_t > defined as a simple type in order to get simpler generated code. > ... > diff --git a/arch/powerpc/include/asm/pgtable-types.h b/arch/powerpc/include/asm/pgtable-types.h > index d11b4c61d686..c60199fc6fa6 100644 > --- a/arch/powerpc/include/asm/pgtable-types.h > +++ b/arch/powerpc/include/asm/pgtable-types.h > @@ -5,14 +5,26 @@ > /* PTE level */ > #if defined(CONFIG_PPC_8xx) && defined(CONFIG_PPC_16K_PAGES) > typedef struct { pte_basic_t pte, pte1, pte2, pte3; } pte_t; > -#else > +#elif defined(__CHECKER__) || !defined(CONFIG_PPC32) > typedef struct { pte_basic_t pte; } pte_t; > +#else > +typedef pte_basic_t pte_t; > #endif > + > +#if defined(__CHECKER__) || !defined(CONFIG_PPC32) || \ > + (defined(CONFIG_PPC_8xx) && defined(CONFIG_PPC_16K_PAGES)) > #define __pte(x) ((pte_t) { (x) }) > static inline pte_basic_t pte_val(pte_t x) > { > return x.pte; > } > +#else > +#define __pte(x) ((pte_t)(x)) > +static inline pte_basic_t pte_val(pte_t x) > +{ > + return x; > +} > +#endif
Would it be better to define: static inline pte_basic_*pte_basic(pte_t *x) { #if xxx return x; #else return &x->pte; #endif }
Then pte_val(x) is always *pt_basic(x) and the casts like:
> - pte_basic_t *entry = &ptep->pte; > + pte_basic_t *entry = (pte_basic_t *)ptep;
can go away.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |