mirror of https://github.com/xemu-project/xemu.git
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 */
|
/* 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)
|
static void qemu_chr_event(CharDriverState *s, int event)
|
||||||
{
|
{
|
||||||
if (!s->chr_event)
|
if (!s->chr_event)
|
||||||
|
@ -118,12 +122,23 @@ static void qemu_chr_reset_bh(void *opaque)
|
||||||
|
|
||||||
void qemu_chr_reset(CharDriverState *s)
|
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);
|
s->bh = qemu_bh_new(qemu_chr_reset_bh, s);
|
||||||
qemu_bh_schedule(s->bh);
|
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)
|
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len)
|
||||||
{
|
{
|
||||||
return s->chr_write(s, buf, len);
|
return s->chr_write(s, buf, len);
|
||||||
|
@ -2076,9 +2091,6 @@ static CharDriverState *qemu_chr_open_tcp(const char *host_str,
|
||||||
return NULL;
|
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))
|
CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s))
|
||||||
{
|
{
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
|
@ -74,6 +74,7 @@ void qemu_chr_add_handlers(CharDriverState *s,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
|
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
|
||||||
void qemu_chr_reset(CharDriverState *s);
|
void qemu_chr_reset(CharDriverState *s);
|
||||||
|
void qemu_chr_initial_reset(void);
|
||||||
int qemu_chr_can_read(CharDriverState *s);
|
int qemu_chr_can_read(CharDriverState *s);
|
||||||
void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len);
|
void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len);
|
||||||
void qemu_chr_accept_input(CharDriverState *s);
|
void qemu_chr_accept_input(CharDriverState *s);
|
||||||
|
|
1
vl.c
1
vl.c
|
@ -5693,6 +5693,7 @@ int main(int argc, char **argv, char **envp)
|
||||||
}
|
}
|
||||||
|
|
||||||
text_consoles_set_display(display_state);
|
text_consoles_set_display(display_state);
|
||||||
|
qemu_chr_initial_reset();
|
||||||
|
|
||||||
if (monitor_device && monitor_hd)
|
if (monitor_device && monitor_hd)
|
||||||
monitor_init(monitor_hd, !nographic);
|
monitor_init(monitor_hd, !nographic);
|
||||||
|
|
Loading…
Reference in New Issue