[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFgQCTujv7Ez23GySc4Bds8x9Pv8Ny59EohpN22de9wicztWrw@mail.gmail.com>
Date: Mon, 5 Dec 2011 13:29:17 +0800
From: Liu ping fan <kernelfans@...il.com>
To: Avi Kivity <avi@...hat.com>
Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org,
aliguori@...ibm.com, gleb@...hat.com, jan.kiszka@....de
Subject: Re: [PATCH] kvm: make vcpu life cycle separated from kvm instance
On Sun, Dec 4, 2011 at 6:23 PM, Avi Kivity <avi@...hat.com> wrote:
> On 12/02/2011 08:26 AM, Liu Ping Fan wrote:
>> From: Liu Ping Fan <pingfank@...ux.vnet.ibm.com>
>>
>> Currently, vcpu can be destructed only when kvm instance destroyed.
>> Change this to vcpu's destruction taken when its refcnt is zero,
>> and then vcpu MUST and CAN be destroyed before kvm's destroy.
>>
>>
>> @@ -315,9 +315,17 @@ static void pit_do_work(struct work_struct *work)
>> * LVT0 to NMI delivery. Other PIC interrupts are just sent to
>> * VCPU0, and only if its LVT0 is in EXTINT mode.
>> */
>> - if (kvm->arch.vapics_in_nmi_mode > 0)
>> - kvm_for_each_vcpu(i, vcpu, kvm)
>> + if (kvm->arch.vapics_in_nmi_mode > 0) {
>> + rcu_read_lock();
>> + kvm_for_each_vcpu(i, cnt, vcpu, kvm) {
>> + vcpu = kvm_get_vcpu(kvm, i);
>> + if (vcpu == NULL)
>> + continue;
>> + cnt++;
>> kvm_apic_nmi_wd_deliver(vcpu);
>> + }
>> + rcu_read_unlock();
>> + }
>> }
>> }
>
> This pattern keeps repeating, please fold it into kvm_for_each_vcpu().
>
What about folding
kvm_for_each_vcpu(i, cnt, vcpu, kvm) {
vcpu = kvm_get_vcpu(kvm, i);
if (vcpu == NULL)
continue;
cnt++;
like this,
#define kvm_for_each_vcpu(idx, cnt, vcpup, kvm) \
for (idx = 0, cnt = 0, vcpup = kvm_get_vcpu(kvm, idx); \
cnt < atomic_read(&kvm->online_vcpus) && \
idx < KVM_MAX_VCPUS; \
idx++, (vcpup == NULL)?:cnt++, vcpup = kvm_get_vcpu(kvm, idx)) \
if (vcpup == NULL) \
continue; \
else
A little ugly, but have not thought a better way out :-)
Thanks,
ping fan
> --
> error compiling committee.c: too many arguments to function
>
Powered by blists - more mailing lists