[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2 of 5] Improve ring management for memory events. Do not lose guest events
On Tue, Nov 29, Andres Lagar-Cavilla wrote: > @@ -133,31 +185,95 @@ static int mem_event_disable(struct mem_ > return 0; > } > > -void mem_event_put_request(struct domain *d, struct mem_event_domain *med, > mem_event_request_t *req) > +static inline int mem_event_ring_free(struct domain *d, struct > mem_event_domain *med) > { > + int free_requests; > + > + free_requests = RING_FREE_REQUESTS(&med->front_ring); > + if ( unlikely(free_requests < d->max_vcpus) ) > + { > + /* This may happen during normal operation (hopefully not often). */ > + gdprintk(XENLOG_INFO, "mem_event request slots for domain %d: %d\n", > + d->domain_id, free_requests); > + } > + > + return free_requests; > +} > + > +/* Return values > + * zero: success > + * -ENOSYS: no ring > + * -EAGAIN: ring is full and the event has not been transmitted. > + * Only foreign vcpu's get EAGAIN > + * -EBUSY: guest vcpu has been paused due to ring congestion > + */ > +int mem_event_put_request(struct domain *d, struct mem_event_domain *med, > mem_event_request_t *req) > +{ > + int ret = 0; > + int foreign = (d != current->domain); > + /* > + * We ensure that each vcpu can put at least *one* event -- because some > + * events are not repeatable, such as dropping a page. This will ensure > no > + * vCPU is left with an event that they must place on the ring, but > cannot. > + * They will be paused after the event is placed. > + * See large comment below in mem_event_unpause_vcpus(). > + */ > + if ( !foreign && mem_event_ring_free(d, med) < d->max_vcpus ) > + { > + mem_event_mark_and_pause(current, med); > + ret = -EBUSY; > + } > > mem_event_ring_unlock(med); > > notify_via_xen_event_channel(d, med->xen_port); > + > + return ret; What will happen if the guest has more vcpus than r->nr_ents in the ring buffer? To me it looks like no event can be placed into the ring and -EBUSY is returned instead. Olaf _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |