|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 8/8] evtchn: add FIFO-based event channel hypercalls and port ops
On Mon, Aug 19, 2013 at 11:32:29AM +0100, David Vrabel wrote:
> Can you trim your replies? There's no need to quote the whole patch.
>
Sorry, forgot to do that.
> On 16/08/13 17:33, Wei Liu wrote:
> >> + evtchn_fifo_destroy(d);
> >> +
> >
> > Don't need to put this inside event_lock critical region?
>
> No, but it does need to be reordered to be after freeing all the event
> channel buckets.
>
Yes, please reorder that.
> >> +static int setup_event_array(struct domain *d)
> >> +{
> >> + if ( d->evtchn_fifo )
> >> + return 0;
> >> +
> >> + d->evtchn_fifo = xzalloc(struct evtchn_fifo_domain);
> >
> > struct evtchn_fifo_domain is very big because it contains event_array
> > which has 1024 elements, however most domains will not use all 2^17
> > ports. Could you add in dynamically allocation for event_array?
>
> It has
>
> 2^17 / (PAGE_SIZE / sizeof(event_word_t))
> = 131072 / (4096 / 4)
> = 128 entries.
>
Ah yes, my calculation was wrong (just came back to Cambridge and still
had jet lag when I reviewed your patch, sorry).
> So sizeof(struct evtchn_fifo_domain) == 2052 bytes (so 1 page).
>
> Would realloc'ing this as the number of event channels grows actually
> save a useful amount of memory?
>
It depends on how the allocator works? But I think 1 page is not a big
deal. I raised that based on my wrong calculation so my comment is
effectively void.
> >> +/*
> >> + * Some ports may already be bound, bind them to the correct VCPU so
> >> + * they have a valid queue.
> >> + *
> >> + * Note: any events that are currently pending will not be resent and
> >> + * will be lost.
> >> + */
> >
> > Can this be fixed? I presume you can check the state of the port and set
> > it to pending in the new ABI when necessary? As you've got hold of the
> > event lock at this stage it should be easy to synchronize the state?
>
> Why? Guests should setup the ABI before binding any events if they
> don't want to risk losing any.
>
Then can you please add the above line to the comment?
> >> +static void cleanup_event_array(struct domain *d)
> >> +{
> >> + unsigned i;
> >> +
> >> + if ( d->evtchn_fifo == NULL )
> >> + return;
> >> +
> >> + for ( i = 0; i < EVTCHN_FIFO_MAX_EVENT_ARRAY_PAGES; i++ )
> >> + {
> >> + unmap_guest_page(d->evtchn_fifo->event_array[i].page,
> >> + d->evtchn_fifo->event_array[i].virt);
> >
> > Suggest reset page and virt to NULL / 0, just like you did for
> > cleanup_control_block.
>
> Why? d->evtchn_fifo is about to be freed.
>
> >> + }
> >> + xfree(d->evtchn_fifo);
> >
> > Same for evtchn_fifo.
>
> Why? The domain is being destroyed.
I just prefer everything to be in known state if possible. Just my
$0.02.
Wei.
>
> David
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |