Hello, I''m reading live migration related code and got a simple question in function hvm_context_save: static int hvm_save_cpu_ctxt(struct domain *d, hvm_domain_context_t *h) { blah... /* We don''t need to save state for a vcpu that is down; the restore * code will leave it down if there is nothing saved. */ if ( test_bit(_VPF_down, &v->pause_flags) ) continue; blah... In the above, if the vcpu is paused, we don''t need to store cpu registers (since vcpu structure already stored them). But, as far as I know, before we save the hvm context, we suspend the domain, which calls shutdown sched_op, and the vcpu is paused. Then, I guess testing pause_flags always returns down and we don''t need to store cpu ctxts. Do I miss something here? best, Jaeyong
On Fri, 2013-05-31 at 10:46 +0000, Jaeyong Yoo wrote:> Hello, > I''m reading live migration related code and got a simple question > in function hvm_context_save: > > static int hvm_save_cpu_ctxt(struct domain *d, hvm_domain_context_t *h) > { > blah... > /* We don''t need to save state for a vcpu that is down; the restore > * code will leave it down if there is nothing saved. */ > if ( test_bit(_VPF_down, &v->pause_flags) ) > continue; > blah... > > In the above, if the vcpu is paused, we don''t need to store cpu registers > (since vcpu structure already stored them). But, as far as I know, before > we save the hvm context, we suspend the domain, which calls shutdown > sched_op, and the vcpu is paused. > Then, I guess testing pause_flags always returns down and we don''t > need to store cpu ctxts. Do I miss something here?I don''t think _VPF_down == paused. Rather it indicates that the VCPU is "down" in the sense of having been hot unplugged. In other words we only skip saving the CPU state if the CPU is not actually in use by the guest, otherwise it does need saving. Pausing a domain changes the vcpu''s runstate, but doesn''t affect pause_flags. Or at least I think that is the case, I''ve only had a quick look. Ian.
On 31/05/13 11:46, Jaeyong Yoo wrote:> Hello, > I''m reading live migration related code and got a simple question > in function hvm_context_save: > > static int hvm_save_cpu_ctxt(struct domain *d, hvm_domain_context_t *h) > { > blah... > /* We don''t need to save state for a vcpu that is down; the restore > * code will leave it down if there is nothing saved. */ > if ( test_bit(_VPF_down, &v->pause_flags) ) > continue; > blah... > > In the above, if the vcpu is paused, we don''t need to store cpu registers > (since vcpu structure already stored them). But, as far as I know, before > we save the hvm context, we suspend the domain, which calls shutdown > sched_op, and the vcpu is paused._VPF_down is only one possible pause reason. See xen/include/xen/sched.h for all of them. In particular, _VPF_migrating is a different pause reason. If a VCPU is down, the guest is required to reinitialise it from scratch. This is why the state does not need saving. ~Andrew> Then, I guess testing pause_flags always returns down and we don''t > need to store cpu ctxts. Do I miss something here? > > best, > Jaeyong > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel