chardev: fix CHR_EVENT_OPENED events for mux chardevs
authorMichael Roth <mdroth@linux.vnet.ibm.com>
Tue, 30 Jul 2013 18:04:22 +0000 (13:04 -0500)
committerAnthony Liguori <aliguori@us.ibm.com>
Tue, 30 Jul 2013 23:48:21 +0000 (18:48 -0500)
commit7b7ab18d0b9769b5f39e663fa55caed461b1202e
tree74ae15cdfacae193d2006a580d4f67dccb4666d7
parent5fe0d351b3a7caf77f899db804d09e4553329c84
chardev: fix CHR_EVENT_OPENED events for mux chardevs

As of bd5c51ee6c4f1c79cae5ad2516d711a27b4ea8ec, chardevs no longer use
bottom-halves to issue CHR_EVENT_OPENED events. To maintain past
semantics, we instead defer the CHR_EVENT_OPENED events toward the end
of chardev initialization.

For muxes, this isn't good enough, since a range of FEs must be able
to attach to the mux prior to any CHR_EVENT_OPENED being issued, else
each FE will immediately print it's initial output (prompts, banners,
etc.) just prior to us switching to the next FE as part of
initialization.

The is new and confusing behavior for users, as they'll see output for
things like the HMP monitor, even though their the current mux focus
may be a guest serial port with potentially no output.

We fix this by further deferring CHR_EVENT_OPENED events for FEs
associated with muxes until after machine init by flagging mux chardevs
with 'explicit_be_open', which suppresses emission of CHR_EVENT_OPENED
events until we explicitly set the mux as opened later.

Currently, we must defer till after machine init since we potentially
associate FEs with muxes as part of realize (for instance,
serial_isa_realizefn).

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Message-id: 1375207462-8141-1-git-send-email-mdroth@linux.vnet.ibm.com
Cc: qemu-stable@nongnu.org
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
include/sysemu/char.h
qemu-char.c