Message ID | 20240102015808.132373-34-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | linux-user: Improve host and guest page size handling | expand |
On 1/2/24 05:58, Richard Henderson wrote: > Since alpha binaries are generally built for multiple > page sizes, it is trivial to allow the page size to vary. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/alpha/cpu-param.h | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/target/alpha/cpu-param.h b/target/alpha/cpu-param.h > index 68c46f7998..c969cb016b 100644 > --- a/target/alpha/cpu-param.h > +++ b/target/alpha/cpu-param.h > @@ -9,10 +9,22 @@ > #define ALPHA_CPU_PARAM_H > > #define TARGET_LONG_BITS 64 > -#define TARGET_PAGE_BITS 13 > > /* ??? EV4 has 34 phys addr bits, EV5 has 40, EV6 has 44. */ > #define TARGET_PHYS_ADDR_SPACE_BITS 44 > -#define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS) > + > +#ifdef CONFIG_USER_ONLY > +/* > + * Allow user-only to vary page size. Real hardware allows only 8k and 64k, > + * but since any variance means guests cannot assume a fixed value, allow > + * a 4k minimum to match x86 host, which can minimize emulation issues. > + */ > +# define TARGET_PAGE_BITS_VARY > +# define TARGET_PAGE_BITS_MIN 12 > +# define TARGET_VIRT_ADDR_SPACE_BITS 63 > +#else > +# define TARGET_PAGE_BITS 13 > +# define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS) > +#endif > > #endif Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
On Tue, Jan 02, 2024 at 12:58:08PM +1100, Richard Henderson wrote: > Since alpha binaries are generally built for multiple > page sizes, it is trivial to allow the page size to vary. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/alpha/cpu-param.h | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
diff --git a/target/alpha/cpu-param.h b/target/alpha/cpu-param.h index 68c46f7998..c969cb016b 100644 --- a/target/alpha/cpu-param.h +++ b/target/alpha/cpu-param.h @@ -9,10 +9,22 @@ #define ALPHA_CPU_PARAM_H #define TARGET_LONG_BITS 64 -#define TARGET_PAGE_BITS 13 /* ??? EV4 has 34 phys addr bits, EV5 has 40, EV6 has 44. */ #define TARGET_PHYS_ADDR_SPACE_BITS 44 -#define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS) + +#ifdef CONFIG_USER_ONLY +/* + * Allow user-only to vary page size. Real hardware allows only 8k and 64k, + * but since any variance means guests cannot assume a fixed value, allow + * a 4k minimum to match x86 host, which can minimize emulation issues. + */ +# define TARGET_PAGE_BITS_VARY +# define TARGET_PAGE_BITS_MIN 12 +# define TARGET_VIRT_ADDR_SPACE_BITS 63 +#else +# define TARGET_PAGE_BITS 13 +# define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS) +#endif #endif
Since alpha binaries are generally built for multiple page sizes, it is trivial to allow the page size to vary. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/alpha/cpu-param.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)