···36363737struct suspend_info {3838 int cancelled;3939+ unsigned long arg; /* extra hypercall argument */3940};40414142#ifdef CONFIG_PM_SLEEP···5958 * or the domain was merely checkpointed, and 0 if it6059 * is resuming in a new domain.6160 */6262- si->cancelled = HYPERVISOR_suspend(0UL);6161+ si->cancelled = HYPERVISOR_suspend(si->arg);63626463 xen_hvm_post_suspend(si->cancelled);6564 gnttab_resume();···9897 * or the domain was merely checkpointed, and 0 if it9998 * is resuming in a new domain.10099 */101101- si->cancelled = HYPERVISOR_suspend(virt_to_mfn(xen_start_info));100100+ si->cancelled = HYPERVISOR_suspend(si->arg);102101103102 xen_post_suspend(si->cancelled);104103 gnttab_resume();···149148 }150149151150 si.cancelled = 1;151151+152152+ if (xen_hvm_domain())153153+ si.arg = 0UL;154154+ else155155+ si.arg = virt_to_mfn(xen_start_info);152156153157 if (xen_hvm_domain())154158 err = stop_machine(xen_hvm_suspend, &si, cpumask_of(0));