char: Fix initial reset (Jan Kiszka)
Recent changes to the graphical console initialization broke the initial CHR_EVENT_RESET distribution. The reset BHs generated on char device initialization are now already consumed during machine init (ide init ... -> qemu_aio_wait -> qemu_bh_poll). Therefore, this patch moves the initial qemu_chr_reset calls into a separate funtion which is called after machine init. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6700 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
b36d24b6c3
commit
2970a6c943
20
qemu-char.c
20
qemu-char.c
@ -101,6 +101,10 @@
|
||||
/***********************************************************/
|
||||
/* character device */
|
||||
|
||||
static TAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs =
|
||||
TAILQ_HEAD_INITIALIZER(chardevs);
|
||||
static int initial_reset_issued;
|
||||
|
||||
static void qemu_chr_event(CharDriverState *s, int event)
|
||||
{
|
||||
if (!s->chr_event)
|
||||
@ -118,12 +122,23 @@ static void qemu_chr_reset_bh(void *opaque)
|
||||
|
||||
void qemu_chr_reset(CharDriverState *s)
|
||||
{
|
||||
if (s->bh == NULL) {
|
||||
if (s->bh == NULL && initial_reset_issued) {
|
||||
s->bh = qemu_bh_new(qemu_chr_reset_bh, s);
|
||||
qemu_bh_schedule(s->bh);
|
||||
}
|
||||
}
|
||||
|
||||
void qemu_chr_initial_reset(void)
|
||||
{
|
||||
CharDriverState *chr;
|
||||
|
||||
initial_reset_issued = 1;
|
||||
|
||||
TAILQ_FOREACH(chr, &chardevs, next) {
|
||||
qemu_chr_reset(chr);
|
||||
}
|
||||
}
|
||||
|
||||
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
|
||||
{
|
||||
return s->chr_write(s, buf, len);
|
||||
@ -2076,9 +2091,6 @@ static CharDriverState *qemu_chr_open_tcp(const char *host_str,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static TAILQ_HEAD(CharDriverStateHead, CharDriverState) chardevs
|
||||
= TAILQ_HEAD_INITIALIZER(chardevs);
|
||||
|
||||
CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
|
||||
{
|
||||
const char *p;
|
||||
|
@ -74,6 +74,7 @@ void qemu_chr_add_handlers(CharDriverState *s,
|
||||
void *opaque);
|
||||
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
|
||||
void qemu_chr_reset(CharDriverState *s);
|
||||
void qemu_chr_initial_reset(void);
|
||||
int qemu_chr_can_read(CharDriverState *s);
|
||||
void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len);
|
||||
void qemu_chr_accept_input(CharDriverState *s);
|
||||
|
Loading…
Reference in New Issue
Block a user