[Crash-utility] The problems when running SuSE 12 on VirtualBox

Dave Anderson anderson at redhat.com
Fri Nov 20 16:34:30 UTC 2015



----- Original Message -----

> I was originally thinking about the same as yourself but decided against
> it due to thinking first that, in English, QUIET is a bit abstract for
> "don't try to switch devmem source" as well as avoid output.
> 
> Plus, if any other readmem() that's QUIET fails READ_ERROR for any
> random reason and devmem_is_restricted() will fail a
> switch_to_proc_kcore() would have resolved it then that caller's use of
> QUIET will prevent devmem_is_restricted() being tried and it won't
> switch_to_proc_kcore(). I admit that means the status of
> devmem_is_restricted() has changed between initialization and now, but
> it's a live environment with it's own behavior.
> 
> Due to the small number of error_handle flags here's one that uses the
> best of your idea without expanding the meaning of the word QUIET. It
> adds another flag for the sole purpose of saying "don't try to switch
> devmem source this time" and it avoids all the overhead I originally had.
> 
> The name for the flag is long enough that the value tab alignment
> doesn't match with the other flags (I can't think of a shorter name for
> the flag but maybe you can). I chose not to appear to make three extra
> lines of changes just to expand the tab alignment on the other flags. It
> also leaves PRINT_ERROR_MESSAGE over-riding QUIET as at present but I
> don't have a preference for that -d8 has it's useful moments:

OK, I'll buy all that -- I like it.  I also added an "NDS" string to 
the error_handle_string() function for the readmem() debug output for 
"crash -d4" and above.  Queued for crash-7.1.4:

  https://github.com/crash-utility/crash/commit/34842b66a121161a91b328f5eab47abd43661248

Thanks,
  Dave

> 
> diff --git a/defs.h b/defs.h
> index b0cdd42..29f46b4 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -328,6 +328,7 @@ struct number_option {
>  #define HEX_BIAS         (0x8)
>  #define LONG_LONG       (0x10)
>  #define RETURN_PARTIAL  (0x20)
> +#define NO_DEVMEM_SWITCH (0x40)
> 
>  #define SEEK_ERROR       (-1)
>  #define READ_ERROR       (-2)
> diff --git a/memory.c b/memory.c
> index 72218e7..b4629a6 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -2204,14 +2204,14 @@ readmem(ulonglong addr, int memtype, void
> *buffer, long size,
>                          goto readmem_error;
> 
>  		case READ_ERROR:
> -                        if (PRINT_ERROR_MESSAGE) {
> -				if ((pc->flags & DEVMEM) && (kt->flags & PRE_KERNEL_INIT) &&
> -				    devmem_is_restricted() && switch_to_proc_kcore())
> -					return(readmem(addr, memtype, bufptr, size,
> -						type, error_handle));
> +                        if (PRINT_ERROR_MESSAGE)
>  				error(INFO, READ_ERRMSG, memtype_string(memtype, 0), addr, type);
> -			}
> -                        goto readmem_error;
> +
> +			if ((pc->flags & DEVMEM) && (kt->flags & PRE_KERNEL_INIT) &&
> +			    !(error_handle & NO_DEVMEM_SWITCH) && devmem_is_restricted() &&
> switch_to_proc_kcore())
> +				return(readmem(addr, memtype, bufptr, size,
> +					type, error_handle));
> +			goto readmem_error;
> 
>  		case PAGE_EXCLUDED:
>  			RETURN_ON_PARTIAL_READ();
> @@ -2410,16 +2410,16 @@ devmem_is_restricted(void)
>  	    	if (machine_type("X86") || machine_type("X86_64")) {
>  			if (readmem(255*PAGESIZE(), PHYSADDR, &tmp,
>  			    sizeof(long), "devmem_is_allowed - pfn 255",
> -			    QUIET|RETURN_ON_ERROR) &&
> +			    QUIET|RETURN_ON_ERROR|NO_DEVMEM_SWITCH) &&
>  			    !(readmem(257*PAGESIZE(), PHYSADDR, &tmp,
>  			    sizeof(long), "devmem_is_allowed - pfn 257",
> -			    QUIET|RETURN_ON_ERROR)))
> +			    QUIET|RETURN_ON_ERROR|NO_DEVMEM_SWITCH)))
>  				restricted = TRUE;
>  		}
>  		if (kernel_symbol_exists("jiffies") &&
>  		    !readmem(symbol_value("jiffies"), KVADDR, &tmp,
>  		    sizeof(ulong), "devmem_is_allowed - jiffies",
> -		    QUIET|RETURN_ON_ERROR))
> +		    QUIET|RETURN_ON_ERROR|NO_DEVMEM_SWITCH))
>  			restricted = TRUE;
> 
>  		if (restricted)
> 
> --
> 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