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

Re: [Xen-ia64-devel] [PATCH] pal_halt_light emulate for domU TAKE3



Hi, Isaku.

  Thank you for your comments.
  
  As you pointed out, vcpu_pend_timer() is usually used as current. 
This problem does not occur.
But, I am using vcpu_pend_timer in hlt_timer_fn with other vcpu.
(This makes problem)

To avoid this issue
1)vcpu_pend_timer deletes vcpu option.(force to use as vcpu==current)
2)Change the order of send_guest_vcpu_virq(vcpu, VIRQ_ITC)
  PSCBX(vcpu, domain_itm_last) = PSCBX(vcpu, domain_itm);

Thanks
Atsushi SAKAI




>Hi Atsuhi.
>
>On Mon, Aug 21, 2006 at 08:38:33PM +0900, Atsushi SAKAI wrote:
>
>> 2)The VIRQ_ITC cycle is destroyed 
>>   in case vcpu migration occurred when vcpu_pend_timer runs (called by 
>> hlt_timer_fn)
>>   
>>   The VIRQ_ITC cycle is (simple writing)
>>    ia64_get_itc reaches domain_itm at Xen.
>>    send VIRQ_ITC to GuestOS
>>    GuestOS handles and set  next itm by hypercall to Xen
>>    Repeats.
>>    
>>   
>>   Currently, the function order in vcpu_pend_timer is 
>>   a)send VIRQ_ITC(vcpu_pend_timer)
>>   b)then stamp the signal send information.(update domain_itm_last)
>>   In this configuration, 
>>   domain_itm_last update time and hypercall set itm(which comes from 
>> VIRQ_ITC)
>>   is important. 
>>   
>>   This order is problematic in case vcpu_migration occurred as follows
>>   (following event occures nearly 1-2 hour running 
>>   by 2xDomU 3vcpu(total 6vcpu for domU) in 4pcpu Linux Kernel Compile test)
>>   
>>    vcpu_pend_timer@A is started.(GuestOS is not running at this moment) 
>>    interrupts@B
>>    vcpu_pend_timer@A is paused
>>    Credit Scheduler steal vcpu from A to B
>>    vcpu_pend_timer@B is started and ended
>>    
>>    ******The following process should be after vcpu_pend_timer*****
>>    domain_itm is set by GuestOS hypercall. and domain_itm updated.
>>    
>>    vcpu_pend_timer@A is resumed. but domain_itm is already updated.
>> 
>>    
>>   To avoid this, order should be exchanged b) a)
>>   After this fixation, we are free from timing consideration of 
>>   VIRQ_ITC cycle and domain_itm_last update time.
>>   (domain_itm_last update should be before the hypercall set itm)
>
>Could you elaborate more? I don't understand.
>What phenomenan did you observed?
>
>vcpu_pend_timer() is called with its parameter as current.
>It means that test_bit(_VCPUF_running, vcpu->vcpu_flags) is 
>always true becuase vcpu == current.
>On the other hand, scheduler mustn't steal vcpu with _VCPUF_running set.
>(see __csched_vcpu_is_stealable())
>The vcpu stealing doesn't occur so that the above sequence
>doesn't make sense (to me at least.)
>
>
>Thanks.
>-- 
>yamahata
>







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


 


Rackspace

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