On Tue, 29 Aug 2017 14:05:40 +0200 David Hildenbrand <david@xxxxxxxxxx> wrote: > On 29.08.2017 13:23, Cornelia Huck wrote: > > On Tue, 22 Aug 2017 13:31:27 +0200 > > David Hildenbrand <david@xxxxxxxxxx> wrote: > > > >> On 21.08.2017 22:35, Radim Krčmář wrote: > >>> We can add a variable instead of scanning all online VCPUs to know how > >>> many are started. We can't trivially tell which VCPU is the last one, > >>> though. > >> > >> You could keep the started vcpus in a list. Then you might drop unsigned > >> started_vcpus; > >> > >> No started vcpus: Start pointer NULL > >> Single started vcpu: Only one element in the list (easy to check) > >>> 1 started vcpus: More than one element int he list (easy to check) > > > > I'm not sure the added complication of keeping a list buys us much > > here: We only have the "look for the last vcpu not stopped" operation > > for the 2->1 transition. > > > > That is wrong, we also have to know the last remaining (started) VCPU. > For that, right now we have to iterate over all VCPUs. Yes, but that's only for the 2->1 transition... and all in all that is still much better that before. > > There shouldn't be much complexity. We already perform changes under a > lock, so it is as simple as adding/removing from the list. > > Detecting the transitions boils down to looking at two pointers. Having a private vcpu list feels a bit wrong... and I don't really see much benefit.