[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Avoid panic when adjusting sedf parameters



>>> On 17.11.11 at 15:04, Juergen Gross <juergen.gross@xxxxxxxxxxxxxx> wrote:
> On 11/17/2011 02:52 PM, Keir Fraser wrote:
>> On 17/11/2011 13:30, "Jan Beulich"<JBeulich@xxxxxxxx>  wrote:
>>
>>> which would now associate the else with the wrong (inner) if. One
>>> possible solution that comes to mind would be
>>>
>>> #define for_each_domain_in_cpupool(_d,_c) \
>>>      for_each_domain_in_cpupool (_d) \
>>>          if ((_d)->cpupool != (_c)) \
>>>              continue; \
>>>          else
>>>
>>> but I think I had seen a more clever solution to this problem, but cannot
>>> remember/locate it right now.
>> Given the gcc ({}) construction, you could do a double-loop:
>>   for ( (_d) = rcu_dereference(domain_list);     \
>>         (_d) != NULL;                            \
>>         ({ while ((_d) = rcu_dereference((_d)->next_in_list != NULL)
>>               if ((_d)->cpupool == (_c)) break;
>>            (_d); }) )
>>
>> A bit ugly. ;-) And I still worry about cpupool locking...
> 
> What about:
> 
> static inline struct domain *next_domain_in_cpupool(
>      struct domain *d, struct cpupool *c)
> {
>      for (d = rcu_dereference(d->next_in_list); d && d->cpupool != c;
>           d = rcu_dereference(d->next_in_list));
>      return d;
> }
> 
> #define for_each_domain_in_cpupool(_d,_c)       \
>   for ( (_d) = rcu_dereference(domain_list);     \
>         (_d) != NULL;                            \
>         (_d) = next_domain_in_cpupool((_d), (_c)))

Same problem as with Keir's variant - you'd enter the loop body for
the first domain on the list regardless of its cpupool. But with a
first_domain_in_cpupool() counterpart this might be usable. Or, as
said in the other reply, putting a more complex construct in the
middle clause.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.