Dong, Eddie wrote:
> Avi Kivity wrote:
>   
>> Dong, Eddie wrote:
>>     
>>> Avi Kivity wrote:
>>>
>>>       
>>>> But, for an ungraceful reset, nothing prevents an AP from
>>>> issuing a reset?
>>>>
>>>>         
>>> Mmm, Yes, but I think current architecture can't handle this.
>>> The thread where AP issues "RESET" will continue run, which
>>> means it becomes BSP now and wake up other APs later on.
>>> Or We can block that AP first and then inform BSP to do
>>> RESET job. Here we need to block the AP in kernel
>>> so that we can wake up.
>>>
>>>       
>> It should call vcpu_halt() immediately after reset.
>>     
>
> ?? Can user level be able to enter kernel HALT state.
>
>   

It's just like the guest kernel executing hlt.  Why is there a difference?

>>> It can be a future task which is not that high priority IMO.
>>> I will focus on SMP boot 1st. Your opnion?
>>>
>>>       
>> Agree.  But let's make it close to the complete solution.
>>
>>     
>
> Yes, halt all APs and let BSP do reset ops in user level. 
> Will post patch to Qemu to support SMP reboot some time later.
>
>   

Wait, that's a big change.  Need to think about this...

>> The test for vcpu->requests already exists (and is needed for tlb
>> flushes) so there is no additional performance hit.
>>     
>
> OK, that makes sense. changed. please verify.
> User level is split into libkvm and qemu.
>
>  /*
>   * Address types:
> diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
> index 0b2894a..33f16bd 100644
> --- a/drivers/kvm/kvm_main.c
> +++ b/drivers/kvm/kvm_main.c
> @@ -2189,9 +2189,17 @@ again:
>  
>       vcpu->guest_mode = 1;
>  
> -     if (vcpu->requests)
> +     if (vcpu->requests) {
>               if (test_and_clear_bit(KVM_TLB_FLUSH, &vcpu->requests))
>                       kvm_x86_ops->tlb_flush(vcpu);
> +             if (test_and_clear_bit(KVM_FROZEN, &vcpu->requests)) {
> +                     local_irq_enable();
> +                     preempt_enable();
> +                     r = -EINTR;
> +                     kvm_run->exit_reason = KVM_EXIT_FROZEN;
> +                     goto out;
> +             }
> +     }
>   


Why not just call vcpu_reset() here, then call vcpu_halt() if we're an AP?

>  
> +/*
> + * Kernel side VM Reset.
> + * NOTE here: User level code must guarantee only the BSP
> + * thread can do this call.
> + *
> + */
> +int kvm_vm_reset(struct kvm *kvm)
> +{
> +     struct kvm_vcpu *vcpu;
> +     int i;
> +
> +     for (i = 0; i < KVM_MAX_VCPUS; i++) {
> +             vcpu = kvm->vcpus[i];
> +             if (!vcpu)
> +                     continue;
> +             /* active VCPU */
> +             if (vcpu->vcpu_id) {
> +                     vcpu->mp_state = VCPU_MP_STATE_UNINITIALIZED;
> +                     set_bit(KVM_FROZEN, &vcpu->requests);
> +                     kvm_vcpu_kick(vcpu);
> +                     /*
> +                      * Wait till the AP entered waiting for
> +                      * INIT/SIPI state
> +                      */
> +                     while (test_bit(KVM_FROZEN, &vcpu->requests))
> +                             schedule();
>   

I don't think we need to wait here.

> +             }
> +             else {
> +                     vcpu->mp_state = VCPU_MP_STATE_RUNNABLE;
> +                     kvm_lapic_reset(vcpu);
> +             }
> +     }
> +     /* Now only BSP is running... */
> +     kvm_reset_devices(kvm);
>   

But now you're reseting the devices while vcpu 0 may be running.  If in 
the first stage you halt all vcpus, and then restart vcpu 0 after the 
reset, you avoid the race.


-- 
error compiling committee.c: too many arguments to function


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to