Skip to contentSkip to conversation

HVM save restore: save restore dev in HV

PATCH In review Zhai, Edwin 1 participant 1 message Jan 11, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 3/8 HVM save restore: save restore dev in HV

[PATCH 3/8] HVM save restore: save restore dev in HV

save/restore all dev state in HV such as PIT/PIC/APIC

xen/arch/x86/hvm/hvm.c +3 -0
diff -r 90a50191ade2 xen/arch/x86/hvm/hvm.c
@@ -197,6 +197,9 @@ int hvm_vcpu_initialise(struct vcpu *v)
     rtc_init(v, RTC_PORT(0), RTC_IRQ);
     pmtimer_init(v, ACPI_PM_TMR_BLK_ADDRESS);
     hpet_init(v);
+ 
+    /* init hvm sharepage */
+    shpage_init(v->domain, get_sp(v->domain));
 
     /* Init guest TSC to start from zero. */
     hvm_set_guest_time(v, 0);
xen/arch/x86/hvm/i8254.c +151 -2

174 lines not on this page · raw message

xen/arch/x86/hvm/intercept.c +59 -0

65 lines not on this page · raw message

xen/arch/x86/hvm/rtc.c +1 -1
diff -r 90a50191ade2 xen/arch/x86/hvm/rtc.c
@@ -62,7 +62,7 @@ static void rtc_timer_update(RTCState *s
 #ifdef DEBUG_RTC
         printk("HVM_RTC: period = %uns\n", period);
 #endif
-        create_periodic_time(&s->pt, period, RTC_IRQ, 0, rtc_periodic_cb, s);
+        create_periodic_time(current, &s->pt, period, RTC_IRQ, 0, rtc_periodic_cb, s);
     } 
     else
         destroy_periodic_time(&s->pt);
xen/arch/x86/hvm/vioapic.c +128 -0

138 lines not on this page · raw message

xen/arch/x86/hvm/vlapic.c +73 -1

92 lines not on this page · raw message

xen/arch/x86/hvm/vpic.c +83 -0

101 lines not on this page · raw message

xen/arch/x86/hvm/vpt.c +3 -3
diff -r 90a50191ade2 xen/arch/x86/hvm/vpt.c
@@ -195,7 +195,7 @@ void pt_reset(struct vcpu *v)
     }
 }
 
-void create_periodic_time(struct periodic_time *pt, uint64_t period,
+void create_periodic_time(struct vcpu *v, struct periodic_time *pt, uint64_t period,
                           uint8_t irq, char one_shot, time_cb *cb, void *data)
 {
     destroy_periodic_time(pt);
@@ -209,7 +209,7 @@ void create_periodic_time(struct periodi
         period = 900000; /* force to 0.9ms */
     }
     pt->period = period;
-    pt->vcpu = current;
+    pt->vcpu = v;
     pt->last_plt_gtime = hvm_get_guest_time(pt->vcpu);
     pt->irq = irq;
     pt->period_cycles = (u64)period * cpu_khz / 1000000L;
@@ -218,7 +218,7 @@ void create_periodic_time(struct periodi
     pt->cb = cb;
     pt->priv = data;
 
-    list_add(&pt->list, &current->arch.hvm_vcpu.tm_list);
+    list_add(&pt->list, &v->arch.hvm_vcpu.tm_list);
     set_timer(&pt->timer, pt->scheduled);
 }
 
xen/include/asm-x86/hvm/support.h +2 -0
diff -r 90a50191ade2 xen/include/asm-x86/hvm/support.h
@@ -246,6 +246,8 @@ extern int arch_sethvm_ctxt(struct vcpu 
 extern int arch_sethvm_ctxt(struct vcpu *v, struct hvm_domain_context *c);
 extern int arch_gethvm_ctxt(struct vcpu *v, struct hvm_domain_context *c);
 
+extern void shpage_init(struct domain *d, shared_iopage_t *sp);
+
 extern int hvm_enabled;
 
 int hvm_copy_to_guest_phys(paddr_t paddr, void *buf, int size);
xen/include/asm-x86/hvm/vpt.h +1 -1
diff -r 90a50191ade2 xen/include/asm-x86/hvm/vpt.h
@@ -152,7 +152,7 @@ struct periodic_time *is_pt_irq(struct v
 struct periodic_time *is_pt_irq(struct vcpu *v, int vector, int type);
 void pt_intr_post(struct vcpu *v, int vector, int type);
 void pt_reset(struct vcpu *v);
-void create_periodic_time(struct periodic_time *pt, uint64_t period,
+void create_periodic_time(struct vcpu *v, struct periodic_time *pt, uint64_t period,
                           uint8_t irq, char one_shot, time_cb *cb, void *data);
 void destroy_periodic_time(struct periodic_time *pt);