[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] eventfd: making it thread safe
From: |
Avi Kivity |
Subject: |
Re: [Qemu-devel] [PATCH] eventfd: making it thread safe |
Date: |
Mon, 06 Aug 2012 17:05:57 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120717 Thunderbird/14.0 |
On 08/01/2012 07:05 AM, David Gibson wrote:
> From: Alexey Kardashevskiy <address@hidden>
>
> QEMU uses IO handlers to run select() in the main loop.
> The handlers list is managed by qemu_set_fd_handler() helper
> which works fine when called from the main thread as it is
> called when select() is not waiting.
>
> However IO handlers list can be changed in the thread other than
> the main one doing os_host_main_loop_wait(), for example, as a result
> of a hypercall which changes PCI config space (VFIO on POWER is the case)
> and enables/disabled MSI/MSIX which creates eventfd handles.
> As the main loop should be waiting on the newly created eventfds,
> it has to be restarted.
>
> The patch adds the qemu_notify_event() call to interrupt select()
> to make main_loop() restart select() with the updated IO handlers
> list.
>
> Signed-off-by: Alexey Kardashevskiy <address@hidden>
> Reviewed-by: Paolo Bonzini <address@hidden>
> ---
> iohandler.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/iohandler.c b/iohandler.c
> index 3c74de6..dea4355 100644
> --- a/iohandler.c
> +++ b/iohandler.c
> @@ -77,6 +77,7 @@ int qemu_set_fd_handler2(int fd,
> ioh->fd_write = fd_write;
> ioh->opaque = opaque;
> ioh->deleted = 0;
> + qemu_notify_event();
> }
> return 0;
> }
Perhaps it's better to do this unconditionally (on the delete path too)
so that removals are processed without delay and we don't have closed
fds hanging around in select().
--
error compiling committee.c: too many arguments to function