[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 Mon, Jun 26, 2017 at 3:48 AM, 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 > 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) We already have a vm_event_init_domain function so the naming of this one here is not a particularly good one. It also looks like to me these two functions could simply be merged.. > +{ > + 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); Move this one up before the #ifdef block for MEM_PAGING. > + > +#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 Tamas _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |