From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: xl/xm save -c fails - set_vcpucontext EOPNOTSUPP (was Re: xl save -c issues with Windows 7 Ultimate) Date: Tue, 24 May 2011 21:09:21 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: AP Xen , rshriram@cs.ubc.ca Cc: "xen-devel@lists.xensource.com" , Keir Fraser , Ian Campbell , Jan Beulich List-Id: xen-devel@lists.xenproject.org It depends on c/s 23142, and I think it isn't even needed in the absence of that other patch. -- Keir On 24/05/2011 20:24, "AP Xen" wrote: > Is is possible for this (23348:3e8e1800d472) to be included in Xen 4.1.1? >=20 > Thanks, > AP >=20 > On Mon, May 16, 2011 at 6:48 PM, Shriram Rajagopalan > wrote: >> On Mon, May 16, 2011 at 8:02 AM, Jan Beulich wrote= : >>>=20 >>>>>> On 15.05.11 at 00:15, Shriram Rajagopalan wrote= : >>>> This one works only for 64-bit domUs. 32bit domU (on 64bit dom0) fails >>>> with >>>> usual EOPNOTSUPP. >>>=20 >>> Next (hopefully final) try below. >>>=20 >>> Jan >>>=20 >>> --- a/xen/arch/x86/domain.c >>> +++ b/xen/arch/x86/domain.c >>> @@ -856,6 +856,15 @@ int arch_set_info_guest( >>> =A0 =A0 =A0 =A0 goto out; >>> =A0 =A0 } >>>=20 >>> + =A0 =A0init_int80_direct_trap(v); >>> + >>> + =A0 =A0/* IOPL privileges are virtualised. */ >>> + =A0 =A0v->arch.pv_vcpu.iopl =3D (v->arch.user_regs.eflags >> 12) & 3; >>> + =A0 =A0v->arch.user_regs.eflags &=3D ~X86_EFLAGS_IOPL; >>> + >>> + =A0 =A0/* Ensure real hardware interrupts are enabled. */ >>> + =A0 =A0v->arch.user_regs.eflags |=3D X86_EFLAGS_IF; >>> + >>> =A0 =A0 if ( !v->is_initialised ) >>> =A0 =A0 { >>> =A0 =A0 =A0 =A0 v->arch.pv_vcpu.ldt_base =3D c(ldt_base); >>> @@ -863,11 +872,27 @@ int arch_set_info_guest( >>> =A0 =A0 } >>> =A0 =A0 else >>> =A0 =A0 { >>> - =A0 =A0 =A0 =A0bool_t fail =3D v->arch.pv_vcpu.ctrlreg[3] !=3D c(ctrlreg[3]); >>> + =A0 =A0 =A0 =A0unsigned long pfn =3D pagetable_get_pfn(v->arch.guest_table); >>> + =A0 =A0 =A0 =A0bool_t fail; >>>=20 >>> + =A0 =A0 =A0 =A0if ( !compat ) >>> + =A0 =A0 =A0 =A0{ >>> + =A0 =A0 =A0 =A0 =A0 =A0fail =3D xen_pfn_to_cr3(pfn) !=3D c.nat->ctrlreg[3]; >>> =A0#ifdef CONFIG_X86_64 >>> - =A0 =A0 =A0 =A0fail |=3D v->arch.pv_vcpu.ctrlreg[1] !=3D c(ctrlreg[1]); >>> + =A0 =A0 =A0 =A0 =A0 =A0if ( pagetable_is_null(v->arch.guest_table_user) ) >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fail |=3D c.nat->ctrlreg[1] || !(flags & VGCF_in_kernel)= ; >>> + =A0 =A0 =A0 =A0 =A0 =A0else >>> + =A0 =A0 =A0 =A0 =A0 =A0{ >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pfn =3D pagetable_get_pfn(v->arch.guest_table_user); >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fail |=3D xen_pfn_to_cr3(pfn) !=3D c.nat->ctrlreg[1]; >>> + =A0 =A0 =A0 =A0 =A0 =A0} >>> + =A0 =A0 =A0 =A0} else { >>> + =A0 =A0 =A0 =A0 =A0 =A0l4_pgentry_t *l4tab =3D __va(pfn_to_paddr(pfn)); >>> + >>> + =A0 =A0 =A0 =A0 =A0 =A0pfn =3D l4e_get_pfn(*l4tab); >>> + =A0 =A0 =A0 =A0 =A0 =A0fail =3D compat_pfn_to_cr3(pfn) !=3D c.cmp->ctrlreg[3]; >>> =A0#endif >>> + =A0 =A0 =A0 =A0} >>>=20 >>> =A0 =A0 =A0 =A0 for ( i =3D 0; i < ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames); ++i ) >>> =A0 =A0 =A0 =A0 =A0 =A0 fail |=3D v->arch.pv_vcpu.gdt_frames[i] !=3D c(gdt_frames[i]); >>> @@ -907,15 +932,6 @@ int arch_set_info_guest( >>> =A0 =A0 v->arch.pv_vcpu.ctrlreg[0] &=3D X86_CR0_TS; >>> =A0 =A0 v->arch.pv_vcpu.ctrlreg[0] |=3D read_cr0() & ~X86_CR0_TS; >>>=20 >>> - =A0 =A0init_int80_direct_trap(v); >>> - >>> - =A0 =A0/* IOPL privileges are virtualised. */ >>> - =A0 =A0v->arch.pv_vcpu.iopl =3D (v->arch.user_regs.eflags >> 12) & 3; >>> - =A0 =A0v->arch.user_regs.eflags &=3D ~X86_EFLAGS_IOPL; >>> - >>> - =A0 =A0/* Ensure real hardware interrupts are enabled. */ >>> - =A0 =A0v->arch.user_regs.eflags |=3D X86_EFLAGS_IF; >>> - >>> =A0 =A0 cr4 =3D v->arch.pv_vcpu.ctrlreg[4]; >>> =A0 =A0 v->arch.pv_vcpu.ctrlreg[4] =3D cr4 ? pv_guest_cr4_fixup(v, cr4) : >>> =A0 =A0 =A0 =A0 real_cr4_to_pv_guest_cr4(mmu_cr4_features); >>>=20 >>>=20 >> ok. this one works :). I ve tested with remus too :P. Can you please ple= ase >> spin out a patch to be pushed into the repo ? thanks for the help. >>=20 >> shriram >>=20 >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com >> http://lists.xensource.com/xen-devel >>=20 >>=20