All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: David Rientjes <rientjes@google.com>
Cc: a.p.zijlstra@chello.nl, mingo@kernel.org, pjt@google.com,
	paul@paulmenage.org, akpm@linux-foundation.org, rjw@sisk.pl,
	nacc@us.ibm.com, paulmck@linux.vnet.ibm.com, tglx@linutronix.de,
	seto.hidetoshi@jp.fujitsu.com, tj@kernel.org,
	mschmidt@redhat.com, berrange@redhat.com,
	nikunj@linux.vnet.ibm.com, vatsa@linux.vnet.ibm.com,
	liuj97@gmail.com, linux-kernel@vger.kernel.org,
	linux-pm@vger.kernel.org
Subject: Re: [PATCH v3 1/5] cpusets, hotplug: Implement cpuset tree traversal in a helper function
Date: Tue, 15 May 2012 17:45:23 +0530	[thread overview]
Message-ID: <4FB248DB.90000@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1205141700480.25235@chino.kir.corp.google.com>

On 05/15/2012 05:33 AM, David Rientjes wrote:

> On Mon, 14 May 2012, Srivatsa S. Bhat wrote:
> 
>> diff --git a/kernel/cpuset.c b/kernel/cpuset.c
>> index 14f7070..23e5da6 100644
>> --- a/kernel/cpuset.c
>> +++ b/kernel/cpuset.c
>> @@ -2000,6 +2000,23 @@ static void remove_tasks_in_empty_cpuset(struct cpuset *cs)
>>  	move_member_tasks_to_cpuset(cs, parent);
>>  }
>>  
>> +static struct cpuset *traverse_cpusets(struct list_head *queue)
> 
> I suggest a different name for this, traverse_cpusets() doesn't imply that 
> it will be returning struct cpuset *.


OK, I guess something like cpuset_next() or next_cpuset() should be fine?

> 
>> +{
>> +	struct cpuset *cp;
>> +	struct cpuset *child;	/* scans child cpusets of cp */
>> +	struct cgroup *cont;
>> +
>> +	cp = list_first_entry(queue, struct cpuset, stack_list);
>> +	list_del(queue->next);
>> +	list_for_each_entry(cont, &cp->css.cgroup->children, sibling) {
>> +		child = cgroup_cs(cont);
>> +		list_add_tail(&child->stack_list, queue);
>> +	}
>> +
>> +	return cp;
> 
> Eek, what happens if queue is empty?  It can't happen with only this 
> patch applied, but since you're doing this to be used in other places then 
> you'd need to check for list_empty().
> 


Actually, I didn't intend this to be used in other places because their
traversals are a little bit different anyway.. But yes, having a check for
list_empty() would be good. I'll add it and change the loop to something like:

while (cpuset_next(&queue) {
	...
}

Thanks for pointing this out!

>> +}
>> +
>> +
>>  /*
>>   * Walk the specified cpuset subtree and look for empty cpusets.
>>   * The tasks of such cpuset must be moved to a parent cpuset.
>> @@ -2019,19 +2036,12 @@ static void scan_for_empty_cpusets(struct cpuset *root)
>>  {
>>  	LIST_HEAD(queue);
>>  	struct cpuset *cp;	/* scans cpusets being updated */
>> -	struct cpuset *child;	/* scans child cpusets of cp */
>> -	struct cgroup *cont;
>>  	static nodemask_t oldmems;	/* protected by cgroup_mutex */
>>  
>>  	list_add_tail((struct list_head *)&root->stack_list, &queue);
>>  
>>  	while (!list_empty(&queue)) {
>> -		cp = list_first_entry(&queue, struct cpuset, stack_list);
>> -		list_del(queue.next);
>> -		list_for_each_entry(cont, &cp->css.cgroup->children, sibling) {
>> -			child = cgroup_cs(cont);
>> -			list_add_tail(&child->stack_list, &queue);
>> -		}
>> +		cp = traverse_cpusets(&queue);
>>  
>>  		/* Continue past cpusets with all cpus, mems online */
>>  		if (cpumask_subset(cp->cpus_allowed, cpu_active_mask) &&
> 
> Otherwise, looks good.
> 


Thanks a lot!

Regards,
Srivatsa S. Bhat


  reply	other threads:[~2012-05-15 12:16 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-13 23:14 [PATCH v3 0/5] CPU hotplug, cpusets: Fix issues with cpusets handling during suspend/resume Srivatsa S. Bhat
2012-05-13 23:15 ` [PATCH v3 1/5] cpusets, hotplug: Implement cpuset tree traversal in a helper function Srivatsa S. Bhat
2012-05-15  0:03   ` David Rientjes
2012-05-15 12:15     ` Srivatsa S. Bhat [this message]
2012-05-15 18:04       ` David Rientjes
2012-05-13 23:15 ` [PATCH v3 2/5] cpusets, hotplug: Restructure functions that are invoked during hotplug Srivatsa S. Bhat
2012-05-15  0:27   ` David Rientjes
2012-05-15 12:25     ` Srivatsa S. Bhat
2012-05-13 23:16 ` [PATCH v3 3/5] cpusets: Update tasks' cpus_allowed mask upon updates to root cpuset Srivatsa S. Bhat
2012-05-15  0:31   ` David Rientjes
2012-05-13 23:16 ` [PATCH v3 4/5] cpusets: Add provisions for distinguishing CPU Hotplug in suspend/resume path Srivatsa S. Bhat
2012-05-15  0:33   ` David Rientjes
2012-05-15 12:29     ` Srivatsa S. Bhat
2012-05-15 18:34       ` David Rientjes
2012-05-15 19:17         ` Srivatsa S. Bhat
2012-05-15 20:39           ` David Rientjes
2012-05-13 23:17 ` [PATCH v3 5/5] cpusets, suspend: Save and restore cpusets during suspend/resume Srivatsa S. Bhat
2012-05-15  0:37   ` David Rientjes
2012-05-15  1:40     ` Nishanth Aravamudan
2012-05-15  4:04       ` David Rientjes
2012-05-15  4:45         ` Nishanth Aravamudan
2012-05-15 18:31           ` David Rientjes
2012-05-15 20:10             ` Peter Zijlstra
2012-05-15 21:05               ` David Rientjes
2012-05-15 21:08                 ` Peter Zijlstra
2012-05-15 21:21                   ` Srivatsa S. Bhat
2012-05-15 21:24                     ` Peter Zijlstra
2012-05-15 21:24                   ` David Rientjes
2012-05-15 21:42                     ` Srivatsa S. Bhat
2012-05-15 21:49                       ` David Rientjes
2012-05-15 22:16                         ` Srivatsa S. Bhat
2012-05-15 22:32                           ` David Rientjes
2012-05-16  8:20                             ` Srivatsa S. Bhat
2012-05-16  8:42                               ` Srivatsa S. Bhat
2012-05-16 21:24                           ` Peter Zijlstra
2012-05-17  9:57                             ` Srivatsa S. Bhat
2012-05-15 21:13                 ` Peter Zijlstra
2012-05-15 21:37                   ` David Rientjes
2012-05-15  9:24       ` Srivatsa S. Bhat
2012-05-14 23:58 ` [PATCH v3 0/5] CPU hotplug, cpusets: Fix issues with cpusets handling " David Rientjes
2012-05-15 12:10   ` Srivatsa S. Bhat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FB248DB.90000@linux.vnet.ibm.com \
    --to=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=berrange@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=liuj97@gmail.com \
    --cc=mingo@kernel.org \
    --cc=mschmidt@redhat.com \
    --cc=nacc@us.ibm.com \
    --cc=nikunj@linux.vnet.ibm.com \
    --cc=paul@paulmenage.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=pjt@google.com \
    --cc=rientjes@google.com \
    --cc=rjw@sisk.pl \
    --cc=seto.hidetoshi@jp.fujitsu.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=vatsa@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.