|
[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 |