[Crash-utility] [PATCH] Make runq -g work without RT_GROUP_SCHED

Dave Anderson anderson at redhat.com
Thu Jul 2 19:43:54 UTC 2015



----- Original Message -----
> CONFIG_FAIR_GROUP_SCHED (which provides task_group.cfs_rq) and
> CONFIG_RT_GROUP_SCHED (which provides task_group.rt_rq) need not be both
> enabled in a kernel.  Let's support runq -g even if only one of them is
> enabled.

Rabin,

The patch is queued for crash-7.1.2:

  https://github.com/crash-utility/crash/commit/0ab34ff030db468c219740cac8f94ae623e7cf81

Thanks,
  Dave


  

  
> ---
>  task.c |   46 ++++++++++++++++++++++++++++------------------
>  1 file changed, 28 insertions(+), 18 deletions(-)
> 
> diff --git a/task.c b/task.c
> index 3a88d68..3e6aff4 100644
> --- a/task.c
> +++ b/task.c
> @@ -7747,8 +7747,8 @@ cmd_runq(void)
>  			dump_milliseconds_flag = 1;
>  			break;
>  		case 'g':
> -			if (INVALID_MEMBER(task_group_cfs_rq) ||
> -			    INVALID_MEMBER(task_group_rt_rq) ||
> +			if ((INVALID_MEMBER(task_group_cfs_rq) &&
> +			     INVALID_MEMBER(task_group_rt_rq)) ||
>  			    INVALID_MEMBER(task_group_parent))
>  				option_not_supported(c);
>  			dump_task_group_flag = 1;
> @@ -9134,8 +9134,8 @@ static void
>  dump_tasks_by_task_group(void)
>  {
>  	int cpu, displayed;
> -	ulong root_task_group, cfs_rq, cfs_rq_p;
> -	ulong rt_rq, rt_rq_p;
> +	ulong root_task_group, cfs_rq = 0, cfs_rq_p;
> +	ulong rt_rq = 0, rt_rq_p;
>  	char *buf;
>  	struct task_context *tc;
>  	char *task_group_name;
> @@ -9161,8 +9161,10 @@ dump_tasks_by_task_group(void)
>  	buf = GETBUF(SIZE(task_group));
>  	readmem(root_task_group, KVADDR, buf, SIZE(task_group),
>  		"task_group", FAULT_ON_ERROR);
> -	rt_rq = ULONG(buf + OFFSET(task_group_rt_rq));
> -	cfs_rq = ULONG(buf + OFFSET(task_group_cfs_rq));
> +	if (VALID_MEMBER(task_group_rt_rq))
> +		rt_rq = ULONG(buf + OFFSET(task_group_rt_rq));
> +	if (VALID_MEMBER(task_group_cfs_rq))
> +		cfs_rq = ULONG(buf + OFFSET(task_group_cfs_rq));
>  
>  	fill_task_group_info_array(0, root_task_group, buf, -1);
>  	sort_task_group_info_array();
> @@ -9178,10 +9180,14 @@ dump_tasks_by_task_group(void)
>  		if (cpus && !NUM_IN_BITMAP(cpus, cpu))
>  			continue;
>  
> -		readmem(rt_rq + cpu * sizeof(ulong), KVADDR, &rt_rq_p,
> -			sizeof(ulong), "task_group rt_rq", FAULT_ON_ERROR);
> -		readmem(cfs_rq + cpu * sizeof(ulong), KVADDR, &cfs_rq_p,
> -			sizeof(ulong), "task_group cfs_rq", FAULT_ON_ERROR);
> +		if (rt_rq)
> +			readmem(rt_rq + cpu * sizeof(ulong), KVADDR,
> +				&rt_rq_p, sizeof(ulong), "task_group rt_rq",
> +				FAULT_ON_ERROR);
> +		if (cfs_rq)
> +			readmem(cfs_rq + cpu * sizeof(ulong), KVADDR,
> +				&cfs_rq_p, sizeof(ulong), "task_group cfs_rq",
> +				FAULT_ON_ERROR);
>  		fprintf(fp, "%sCPU %d", displayed++ ? "\n" : "", cpu);
>  
>  		if (hide_offline_cpu(cpu)) {
> @@ -9197,15 +9203,19 @@ dump_tasks_by_task_group(void)
>  		else
>  			fprintf(fp, "%lx\n", tt->active_set[cpu]);
>  
> -		fprintf(fp, "  %s_TASK_GROUP: %lx  RT_RQ: %lx\n",
> -			task_group_name, root_task_group, rt_rq_p);
> -		reuse_task_group_info_array();
> -		dump_tasks_in_task_group_rt_rq(0, rt_rq_p, cpu);
> +		if (rt_rq) {
> +			fprintf(fp, "  %s_TASK_GROUP: %lx  RT_RQ: %lx\n",
> +				task_group_name, root_task_group, rt_rq_p);
> +			reuse_task_group_info_array();
> +			dump_tasks_in_task_group_rt_rq(0, rt_rq_p, cpu);
> +		}
>  
> -		fprintf(fp, "  %s_TASK_GROUP: %lx  CFS_RQ: %lx\n",
> -			task_group_name, root_task_group, cfs_rq_p);
> -		reuse_task_group_info_array();
> -		dump_tasks_in_task_group_cfs_rq(0, cfs_rq_p, cpu, tc);
> +		if (cfs_rq) {
> +			fprintf(fp, "  %s_TASK_GROUP: %lx  CFS_RQ: %lx\n",
> +				task_group_name, root_task_group, cfs_rq_p);
> +			reuse_task_group_info_array();
> +			dump_tasks_in_task_group_cfs_rq(0, cfs_rq_p, cpu, tc);
> +		}
>  	}
>  
>  	FREEBUF(buf);
> --
> 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