mirror of https://github.com/xemu-project/xemu.git
target/arm: Enable TARGET_PAGE_BITS_VARY for AArch64 user-only
Since aarch64 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> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Acked-by: Helge Deller <deller@gmx.de> Message-Id: <20240102015808.132373-31-richard.henderson@linaro.org>
This commit is contained in:
parent
ff8a8bbc2a
commit
a575230f95
|
@ -19,9 +19,13 @@
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_USER_ONLY
|
||||
#define TARGET_PAGE_BITS 12
|
||||
# ifdef TARGET_AARCH64
|
||||
# define TARGET_TAGGED_ADDRESSES
|
||||
/* Allow user-only to vary page size from 4k */
|
||||
# define TARGET_PAGE_BITS_VARY
|
||||
# define TARGET_PAGE_BITS_MIN 12
|
||||
# else
|
||||
# define TARGET_PAGE_BITS 12
|
||||
# endif
|
||||
#else
|
||||
/*
|
||||
|
|
|
@ -1809,7 +1809,6 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
|
|||
ARMCPU *cpu = ARM_CPU(dev);
|
||||
ARMCPUClass *acc = ARM_CPU_GET_CLASS(dev);
|
||||
CPUARMState *env = &cpu->env;
|
||||
int pagebits;
|
||||
Error *local_err = NULL;
|
||||
|
||||
#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
|
||||
|
@ -2100,28 +2099,36 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
|
|||
!cpu_isar_feature(aa32_vfp_simd, cpu) ||
|
||||
!arm_feature(env, ARM_FEATURE_XSCALE));
|
||||
|
||||
if (arm_feature(env, ARM_FEATURE_V7) &&
|
||||
!arm_feature(env, ARM_FEATURE_M) &&
|
||||
!arm_feature(env, ARM_FEATURE_PMSA)) {
|
||||
/* v7VMSA drops support for the old ARMv5 tiny pages, so we
|
||||
* can use 4K pages.
|
||||
*/
|
||||
pagebits = 12;
|
||||
} else {
|
||||
/* For CPUs which might have tiny 1K pages, or which have an
|
||||
* MPU and might have small region sizes, stick with 1K pages.
|
||||
*/
|
||||
pagebits = 10;
|
||||
}
|
||||
if (!set_preferred_target_page_bits(pagebits)) {
|
||||
/* This can only ever happen for hotplugging a CPU, or if
|
||||
* the board code incorrectly creates a CPU which it has
|
||||
* promised via minimum_page_size that it will not.
|
||||
*/
|
||||
error_setg(errp, "This CPU requires a smaller page size than the "
|
||||
"system is using");
|
||||
return;
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
{
|
||||
int pagebits;
|
||||
if (arm_feature(env, ARM_FEATURE_V7) &&
|
||||
!arm_feature(env, ARM_FEATURE_M) &&
|
||||
!arm_feature(env, ARM_FEATURE_PMSA)) {
|
||||
/*
|
||||
* v7VMSA drops support for the old ARMv5 tiny pages,
|
||||
* so we can use 4K pages.
|
||||
*/
|
||||
pagebits = 12;
|
||||
} else {
|
||||
/*
|
||||
* For CPUs which might have tiny 1K pages, or which have an
|
||||
* MPU and might have small region sizes, stick with 1K pages.
|
||||
*/
|
||||
pagebits = 10;
|
||||
}
|
||||
if (!set_preferred_target_page_bits(pagebits)) {
|
||||
/*
|
||||
* This can only ever happen for hotplugging a CPU, or if
|
||||
* the board code incorrectly creates a CPU which it has
|
||||
* promised via minimum_page_size that it will not.
|
||||
*/
|
||||
error_setg(errp, "This CPU requires a smaller page size "
|
||||
"than the system is using");
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* This cpu-id-to-MPIDR affinity is used only for TCG; KVM will override it.
|
||||
* We don't support setting cluster ID ([16..23]) (known as Aff2
|
||||
|
|
Loading…
Reference in New Issue