[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 2/5] char: Introduce char_set/remove_fd_handlers
From: |
Amit Shah |
Subject: |
[Qemu-devel] Re: [PATCH 2/5] char: Introduce char_set/remove_fd_handlers() |
Date: |
Tue, 11 Jan 2011 22:53:05 +0530 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On (Tue) Jan 11 2011 [16:54:48], Gerd Hoffmann wrote:
> On 01/11/11 16:38, Amit Shah wrote:
> >On (Tue) Jan 11 2011 [15:39:46], Gerd Hoffmann wrote:
> >>On 01/11/11 12:10, Amit Shah wrote:
> >>>Introduce a char-specific wrapper to qemu_set_fd_handler functions.
> >>>This wrapper is useful to add / remove a write handler easily. Write
> >>>handlers are only used when the backend is blocked and cannot receive
> >>>any more input.
> >>
> >>I'd suggest to add flags to enable/disable handlers to
> >>IOHandlerRecord instead. And helper functions to set/clear them of
> >>course.
> >>
> >>With that in place you also can move the handlers to a separate
> >>struct simliar to the new QemuChrHandlers struct from patch #1.
> >
> >I'm planning to do that later -- when more backends get involved, which
> >have multiple fds (one for in, one for out).
>
> Moving the handlers to a separate struct is clearly a incremental
> cleanup which can follow later. Using enable/disable flags will
> probably simplify the interfaces for the non-blocking mode and thus
> simplify the whole patch series so I think this should be done now.
Agree -- but it looks to be a big patch. I have some initial work done,
and hence am not converting anything other than unix/tcp backends. The
proposed interface here is local to this file, and just a couple of
callers. No big deal to change it once this is in.
(The struct for that will look like:
struct fd_handler {
int fd;
IOHandler *read;
IOHandler *write;
IOCanReadHandler *read_poll;
bool read_enabled, write_enabled, read_poll_enabled;
void (*set_read_handler)(IOHandler *read_handler);
void (*set_write_handler)(IOHandler *write_handler);
void (*set_readpoll_handler)(IOCanReadHandler *read_poll_handler);
}
This has to be embedded in the CharDriverState for each fd for each
backend.
Also: we also want to be able to select() on all fds so that we can
detect disconnection events as they happen. So we also need an array
somewhere.)
Amit
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, (continued)
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, Blue Swirl, 2011/01/11
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, Amit Shah, 2011/01/12
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, Michael Roth, 2011/01/12
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, Blue Swirl, 2011/01/12
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, Amit Shah, 2011/01/13
- Re: [Qemu-devel] [PATCH 1/5] char: Add a QemuChrHandlers struct to initialise chardev handlers, Blue Swirl, 2011/01/13
[Qemu-devel] [PATCH 2/5] char: Introduce char_set/remove_fd_handlers(), Amit Shah, 2011/01/11
[Qemu-devel] [PATCH 3/5] char: Add framework for a 'write unblocked' callback, Amit Shah, 2011/01/11
[Qemu-devel] [PATCH 4/5] char: Update send_all() to handle nonblocking chardev write requests, Amit Shah, 2011/01/11
[Qemu-devel] [PATCH 5/5] char: Equip the unix/tcp backend to handle nonblocking writes, Amit Shah, 2011/01/11