[Crash-utility] [PATCH] mips: fix page flags for 4.1

Dave Anderson anderson at redhat.com
Thu Oct 1 20:05:46 UTC 2015



----- Original Message -----
> Since Linux v4.1 (specifically, "MIPS: Rearrange PTE bits into fixed
> positions.", commit be0c37c985eddc46d0d67543898c086f60460e2e), the PTE
> bits are at fixed locations.  Since these are only macros as in the
> kernel, we aren't able to determine them from the vmlinux, so add an
> explicit version check to handle them.

Queued for crash-7.1.4:

  https://github.com/crash-utility/crash/commit/4602d53a0e4e01825492d1e9d02b851cb51ff98e

Thanks,
  Dave

  
> ---
>  mips.c |   43 ++++++++++++++++++++++++++-----------------
>  1 file changed, 26 insertions(+), 17 deletions(-)
> 
> diff --git a/mips.c b/mips.c
> index 4b62d1e..a4fc8b6 100644
> --- a/mips.c
> +++ b/mips.c
> @@ -100,30 +100,39 @@ mips_cmd_mach(void)
>  static void
>  mips_init_page_flags(void)
>  {
> -	ulonglong cpu_options;
> -	int rixi;
>  	ulong shift = 0;
> -	ulong addr;
>  
> -	addr = symbol_value("cpu_data") +
> -	       MEMBER_OFFSET("cpuinfo_mips", "options");
> -	readmem(addr, KVADDR, &cpu_options, sizeof(cpu_options),
> -		"cpu_data[0].options", FAULT_ON_ERROR);
> +	_PAGE_PRESENT = 1UL << shift++;
>  
> -	rixi = cpu_options & MIPS_CPU_RIXI;
> +	if (THIS_KERNEL_VERSION >= LINUX(4,1,0)) {
> +		_PAGE_WRITE = 1UL << shift++;
> +		_PAGE_ACCESSED = 1UL << shift++;
> +		_PAGE_MODIFIED = 1UL << shift++;
> +		_PAGE_NO_EXEC = 1UL << shift++;
> +		_PAGE_READ = _PAGE_NO_READ = 1UL << shift++;
> +	} else {
> +		ulonglong cpu_options;
> +		int rixi;
> +		ulong addr;
>  
> -	_PAGE_PRESENT = 1UL << shift++;
> +		addr = symbol_value("cpu_data") +
> +		       MEMBER_OFFSET("cpuinfo_mips", "options");
> +		readmem(addr, KVADDR, &cpu_options, sizeof(cpu_options),
> +			"cpu_data[0].options", FAULT_ON_ERROR);
>  
> -	if (!rixi)
> -		_PAGE_READ = 1UL << shift++;
> +		rixi = cpu_options & MIPS_CPU_RIXI;
>  
> -	_PAGE_WRITE = 1UL << shift++;
> -	_PAGE_ACCESSED = 1UL << shift++;
> -	_PAGE_MODIFIED = 1UL << shift++;
> +		if (!rixi)
> +			_PAGE_READ = 1UL << shift++;
>  
> -	if (rixi) {
> -		_PAGE_NO_EXEC = 1UL << shift++;
> -		_PAGE_NO_READ = 1UL << shift++;
> +		_PAGE_WRITE = 1UL << shift++;
> +		_PAGE_ACCESSED = 1UL << shift++;
> +		_PAGE_MODIFIED = 1UL << shift++;
> +
> +		if (rixi) {
> +			_PAGE_NO_EXEC = 1UL << shift++;
> +			_PAGE_NO_READ = 1UL << shift++;
> +		}
>  	}
>  
>  	_PAGE_GLOBAL = 1UL << shift++;
> --
> 1.7.10.4
> 
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
> 




More information about the Crash-utility mailing list