[Crash-utility] [RFC/PATCH] s390x: Add live dump detection

Dave Anderson anderson at redhat.com
Mon Apr 23 16:06:14 UTC 2012



----- Original Message -----
> Hello Dave,
> 
> On Mon, 23 Apr 2012 08:50:02 -0400 (EDT)
> Dave Anderson <anderson at redhat.com> wrote:
> 
> [snip]
> 
> > 
> > 
> > Question: how does that code path ever get run?
> 
> Interesting...
> 
> I only tested the patch on a live dump and not on the live system
> with /dev/mem. Therefore I did not see that. On a live system, as you
> described it, the s390x.c code is not used.
> 
> > 
> > If you try a "bt" on an active task on a live system, it would
> > print the "(active)" here in back_trace(), prior to calling into
> > the machine-specific backtrace function:
> > 
> >         if (ACTIVE() && !(bt->flags & BT_EFRAME_SEARCH) &&
> >             ((bt->task == tt->this_task) || is_task_active(bt->task))) {
> > 
> >                 if (BT_REFERENCE_CHECK(bt) ||
> >                     bt->flags & (BT_TEXT_SYMBOLS_PRINT|BT_TEXT_SYMBOLS_NOPRINT))
> >                         return;
> > 
> >                 if (!(bt->flags &
> >                     (BT_KSTACKP|BT_TEXT_SYMBOLS|BT_TEXT_SYMBOLS_ALL)))
> >                         fprintf(fp, "(active)\n");
> > 
> >                 if (!(bt->flags & (BT_TEXT_SYMBOLS|BT_TEXT_SYMBOLS_ALL)))
> >                         return;
> >         }
> > 
> > Note the "bt -[tT]" options should be allowed even if the task is active.
> 
> So the check should be done in kernel.c and not in s390x.c.
> 
> Would the following patch be better?

Right, that's better -- queued for crash-6.0.6.

Thanks,
  Dave

> ---
>  kernel.c |    2 +-
>  s390x.c  |    4 ----
>  2 files changed, 1 insertion(+), 5 deletions(-)
> 
> --- a/kernel.c
> +++ b/kernel.c
> @@ -2245,7 +2245,7 @@ back_trace(struct bt_info *bt)
>  		return;
>  	}
>  
> -	if (ACTIVE() && !(bt->flags & BT_EFRAME_SEARCH) &&
> +	if (LIVE() && !(bt->flags & BT_EFRAME_SEARCH) &&
>              ((bt->task == tt->this_task) ||
>              is_task_active(bt->task))) {
>  
>  		if (BT_REFERENCE_CHECK(bt) ||
> --- a/s390x.c
> +++ b/s390x.c
> @@ -1092,10 +1092,6 @@ static void s390x_back_trace_cmd(struct
>  	 * Print lowcore and print interrupt stacks when task has cpu
>  	 */
>  	if (s390x_has_cpu(bt)) {
> -		if (ACTIVE()) {
> -			fprintf(fp,"(active)\n");
> -			return;
> -		}
>  		s390x_get_lowcore(bt, lowcore);
>  		psw_flags = ULONG(lowcore + OFFSET(s390_lowcore_psw_save_area));
>  
> 
> 




More information about the Crash-utility mailing list