[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 0 of 6] [RFC] Use wait queues for paging, v2
On Sun, Feb 26, Olaf Hering wrote: > On Thu, Feb 23, Tim Deegan wrote: > > > This is v2 of the patch I posted last week, after feedback from Andres. > > Tried this series, but processes in dom0 started to hang in D state > when a paged guest is started. I will see if I can spot the error. This change for patch #5 is needed, especially the first part. Now it appears to work. Olaf # HG changeset patch # Parent c3738598897f5239a72cabde676f5e86fd4c8241 diff -r c3738598897f xen/arch/x86/hvm/hvm.c --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -999,6 +999,10 @@ int hvm_vcpu_initialise(struct vcpu *v) v->arch.hvm_vcpu.inject_trap = -1; +#ifdef CONFIG_X86_64 + init_waitqueue_head(&v->arch.hvm_vcpu.mem_paging_wq); +#endif + #ifdef CONFIG_COMPAT rc = setup_compat_arg_xlat(v); if ( rc != 0 ) diff -r c3738598897f xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -183,8 +183,8 @@ again: p2m_mem_paging_populate(p2m->domain, gfn); /* Wait until the pager finishes paging it in */ - current->arch.mem_paging_gfn = gfn; - wait_event(current->arch.mem_paging_wq, ({ + current->arch.hvm_vcpu.mem_paging_gfn = gfn; + wait_event(current->arch.hvm_vcpu.mem_paging_wq, ({ int done; mfn = p2m->get_entry(p2m, gfn, t, a, 0, page_order); done = (*t != p2m_ram_paging_in); @@ -1190,8 +1190,8 @@ void p2m_mem_paging_resume(struct domain } /* Wake any vcpus that were waiting for this GFN */ for_each_vcpu ( d, v ) - if ( v->arch.mem_paging_gfn == rsp.gfn ) - wake_up_all(&v->arch.mem_paging_wq); + if ( v->arch.hvm_vcpu.mem_paging_gfn == rsp.gfn ) + wake_up_all(&v->arch.hvm_vcpu.mem_paging_wq); } } diff -r c3738598897f xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -494,12 +494,6 @@ struct arch_vcpu struct paging_vcpu paging; -#ifdef CONFIG_X86_64 - /* Mem-paging: this vcpu is waiting for a gfn to be paged in */ - struct waitqueue_head mem_paging_wq; - unsigned long mem_paging_gfn; -#endif - #ifdef CONFIG_X86_32 /* map_domain_page() mapping cache. */ struct mapcache_vcpu mapcache; diff -r c3738598897f xen/include/asm-x86/hvm/vcpu.h --- a/xen/include/asm-x86/hvm/vcpu.h +++ b/xen/include/asm-x86/hvm/vcpu.h @@ -170,6 +170,13 @@ struct hvm_vcpu { unsigned long inject_cr2; struct viridian_vcpu viridian; + +#ifdef CONFIG_X86_64 + /* Mem-paging: this vcpu is waiting for a gfn to be paged in */ + struct waitqueue_head mem_paging_wq; + unsigned long mem_paging_gfn; +#endif + }; #endif /* __ASM_X86_HVM_VCPU_H__ */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |