[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] common/vm_event: Initialize vm_event lists on domain creation



On June 26, 2017 5:48:17 AM EDT, Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx> 
wrote:
>Pending livepatch code wants to check if the vm_event wait queues
>are active, and this is made harder by the fact that they were


Hmm, it wants to? Is there an missing patch that hasn't been posted for this?

If you mean to post this _before_ the other one please adjust the commit 
description.

>previously only initialized some time after the domain was created,
>in vm_event_enable(). This patch initializes the lists immediately
>after xzalloc()ating the vm_event memory, in domain_create(), in
>the newly added init_domain_vm_event() function.
>
>Signed-off-by: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx>
>---
> xen/common/domain.c        |  5 ++---
> xen/common/vm_event.c      | 23 ++++++++++++++++++++---
> xen/include/xen/vm_event.h |  2 ++
> 3 files changed, 24 insertions(+), 6 deletions(-)
>
>diff --git a/xen/common/domain.c b/xen/common/domain.c
>index b22aacc..89a8f1d 100644
>--- a/xen/common/domain.c
>+++ b/xen/common/domain.c
>@@ -362,11 +362,10 @@ struct domain *domain_create(domid_t domid,
>unsigned int domcr_flags,
> 
>         poolid = 0;
> 
>-        err = -ENOMEM;
>-        d->vm_event = xzalloc(struct vm_event_per_domain);
>-        if ( !d->vm_event )
>+        if ( (err = init_domain_vm_event(d)) != 0 )
>             goto fail;
> 
>+        err = -ENOMEM;
>         d->pbuf = xzalloc_array(char, DOMAIN_PBUF_SIZE);
>         if ( !d->pbuf )
>             goto fail;
>diff --git a/xen/common/vm_event.c b/xen/common/vm_event.c
>index 9291db6..294ddd7 100644
>--- a/xen/common/vm_event.c
>+++ b/xen/common/vm_event.c
>@@ -39,6 +39,26 @@
> #define vm_event_ring_lock(_ved)       spin_lock(&(_ved)->ring_lock)
> #define vm_event_ring_unlock(_ved)     spin_unlock(&(_ved)->ring_lock)
> 
>+int init_domain_vm_event(struct domain *d)
>+{
>+    d->vm_event = xzalloc(struct vm_event_per_domain);
>+
>+    if ( !d->vm_event )
>+        return -ENOMEM;
>+
>+#ifdef CONFIG_HAS_MEM_PAGING
>+    init_waitqueue_head(&d->vm_event->paging.wq);
>+#endif
>+
>+    init_waitqueue_head(&d->vm_event->monitor.wq);
>+
>+#ifdef CONFIG_HAS_MEM_SHARING
>+    init_waitqueue_head(&d->vm_event->share.wq);
>+#endif
>+
>+    return 0;
>+}
>+
> static int vm_event_enable(
>     struct domain *d,
>     xen_domctl_vm_event_op_t *vec,
>@@ -93,9 +113,6 @@ static int vm_event_enable(
>     /* Save the pause flag for this particular ring. */
>     ved->pause_flag = pause_flag;
> 
>-    /* Initialize the last-chance wait queue. */
>-    init_waitqueue_head(&ved->wq);
>-
>     vm_event_ring_unlock(ved);
>     return 0;
> 
>diff --git a/xen/include/xen/vm_event.h b/xen/include/xen/vm_event.h
>index 2fb3951..482243e 100644
>--- a/xen/include/xen/vm_event.h
>+++ b/xen/include/xen/vm_event.h
>@@ -80,6 +80,8 @@ void vm_event_set_registers(struct vcpu *v,
>vm_event_response_t *rsp);
> 
> void vm_event_monitor_next_interrupt(struct vcpu *v);
> 
>+int init_domain_vm_event(struct domain *d);
>+
> #endif /* __VM_EVENT_H__ */
> 
> /*
>-- 
>1.9.1
>
>
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@xxxxxxxxxxxxx
>https://lists.xen.org/xen-devel


Thanks!

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.