Re: [PATCH] arm64: Add fallback option when vabits_actual is missing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the patch.

On 2022/12/06 19:00, Pavankumar Kondeti wrote:
> After the commit 0d9b1ffefabe ("arm64: mm: make vabits_actual
> a build time constant if possible") introduced in v5.19
> Linux kernel, the crash will not find vabits_actual symbol.

"if VA_BITS <= 48" ?

> Add a fallback option to initialize VA_BITS based on the
> user supplied machdep options.
> 
> Tested ramdumps loading in both 6.0 and 5.15 kernels.

What if kernels < 5.4?  For such old kernels without vabits_actual
introduced, probably we should not set VA_BITS_ACTUAL..

Thanks,
Kazu

> 
> Signed-off-by: Pavankumar Kondeti <quic_pkondeti@xxxxxxxxxxx>
> ---
>   arm64.c | 33 +++++++++++++++++++++++++--------
>   1 file changed, 25 insertions(+), 8 deletions(-)
> 
> diff --git a/arm64.c b/arm64.c
> index c3e26a3..9d5d0bd 100644
> --- a/arm64.c
> +++ b/arm64.c
> @@ -4588,6 +4588,27 @@ arm64_IS_VMALLOC_ADDR(ulong vaddr)
>   
>   /* Return TRUE if we succeed, return FALSE on failure. */
>   static int
> +arm64_set_va_bits_fallback(void)
> +{
> +	if (machdep->machspec->VA_BITS_ACTUAL) {
> +		machdep->machspec->VA_BITS = machdep->machspec->VA_BITS_ACTUAL;
> +		machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
> +		return TRUE;
> +	}
> +
> +	if (machdep->machspec->CONFIG_ARM64_VA_BITS) {
> +		/* guess */
> +		machdep->machspec->VA_BITS_ACTUAL = machdep->machspec->CONFIG_ARM64_VA_BITS;
> +		machdep->machspec->VA_BITS = machdep->machspec->CONFIG_ARM64_VA_BITS;
> +		machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
> +		return TRUE;
> +	}
> +
> +	return FALSE;
> +}
> +
> +/* Return TRUE if we succeed, return FALSE on failure. */
> +static int
>   arm64_set_va_bits_by_tcr(void)
>   {
>   	ulong value;
> @@ -4648,14 +4669,8 @@ arm64_calc_VA_BITS(void)
>   		else {
>   			if (arm64_set_va_bits_by_tcr()) {
>   				/* nothing */
> -			} else if (machdep->machspec->VA_BITS_ACTUAL) {
> -				machdep->machspec->VA_BITS = machdep->machspec->VA_BITS_ACTUAL;
> -				machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
> -			} else if (machdep->machspec->CONFIG_ARM64_VA_BITS) {
> -				/* guess */
> -				machdep->machspec->VA_BITS_ACTUAL = machdep->machspec->CONFIG_ARM64_VA_BITS;
> -				machdep->machspec->VA_BITS = machdep->machspec->CONFIG_ARM64_VA_BITS;
> -				machdep->machspec->VA_START = _VA_START(machdep->machspec->VA_BITS_ACTUAL);
> +			} else if (arm64_set_va_bits_fallback()) {
> +				/* nothing */
>   			} else
>   				error(FATAL, "cannot determine VA_BITS_ACTUAL\n");
>   		}
> @@ -4671,6 +4686,8 @@ arm64_calc_VA_BITS(void)
>   		return;
>   	} else if (arm64_set_va_bits_by_tcr()) {
>   		return;
> +	} else if (arm64_set_va_bits_fallback()) {
> +		return;
>   	}
>   
>   	if (!(sp = symbol_search("swapper_pg_dir")) &&
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux