From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: Re: [PATCH] Avoid panic when adjusting sedf parameters Date: Thu, 17 Nov 2011 15:02:46 +0100 Message-ID: <4EC51406.3090008@ts.fujitsu.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com, Jan Beulich List-Id: xen-devel@lists.xenproject.org On 11/17/2011 02:48 PM, Keir Fraser wrote: > On 17/11/2011 13:30, "Jan Beulich" wrote: > >>> +#define for_each_domain_in_cpupool(_d,_c) \ >>> + for ( (_d) = rcu_dereference(domain_list); \ >>> + (_d) != NULL; \ >>> + (_d) = rcu_dereference((_d)->next_in_list )) \ >> Wouldn't this, up to here, simply be for_each_domain()? >> >>> + if ((_d)->cpupool == (_c)) >> This is dangerous - consider code like > I also wonder (and this is true for the existing open-coded versions too) > whether we have sufficient locking around use of d->cpupool? Do these loops > hold enough locks to ensure that d->cpupool doesn't change under their feet? d->cpupool is changed in three functions: I was just preparing a patch for cpupool_unassign_cpu() which is lacking rcu_lock_domain(). cpupool_add_domain() is called only for domains not yet in the domain list. sched_move_domain() is only called with domain lock held. Juergen -- Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: juergen.gross@ts.fujitsu.com Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html