Commit 2d22959d61fa866d2bbe310b61539da98bb47917
Committed by
Anthony Liguori
1 parent
759754f0
mux-term: Localize timestamps
As we can have multiple multiplexed terminals, timestamp control and tracking should better take place per MuxDriver. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
10 additions
and
10 deletions
qemu-char.c
| @@ -219,8 +219,6 @@ static CharDriverState *qemu_chr_open_null(void) | @@ -219,8 +219,6 @@ static CharDriverState *qemu_chr_open_null(void) | ||
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | /* MUX driver for serial I/O splitting */ | 221 | /* MUX driver for serial I/O splitting */ |
| 222 | -static int term_timestamps; | ||
| 223 | -static int64_t term_timestamps_start; | ||
| 224 | #define MAX_MUX 4 | 222 | #define MAX_MUX 4 |
| 225 | #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */ | 223 | #define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */ |
| 226 | #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1) | 224 | #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1) |
| @@ -239,6 +237,8 @@ typedef struct { | @@ -239,6 +237,8 @@ typedef struct { | ||
| 239 | unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE]; | 237 | unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE]; |
| 240 | int prod[MAX_MUX]; | 238 | int prod[MAX_MUX]; |
| 241 | int cons[MAX_MUX]; | 239 | int cons[MAX_MUX]; |
| 240 | + int timestamps; | ||
| 241 | + int64_t timestamps_start; | ||
| 242 | } MuxDriver; | 242 | } MuxDriver; |
| 243 | 243 | ||
| 244 | 244 | ||
| @@ -246,7 +246,7 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len) | @@ -246,7 +246,7 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len) | ||
| 246 | { | 246 | { |
| 247 | MuxDriver *d = chr->opaque; | 247 | MuxDriver *d = chr->opaque; |
| 248 | int ret; | 248 | int ret; |
| 249 | - if (!term_timestamps) { | 249 | + if (!d->timestamps) { |
| 250 | ret = d->drv->chr_write(d->drv, buf, len); | 250 | ret = d->drv->chr_write(d->drv, buf, len); |
| 251 | } else { | 251 | } else { |
| 252 | int i; | 252 | int i; |
| @@ -260,9 +260,9 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len) | @@ -260,9 +260,9 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len) | ||
| 260 | int secs; | 260 | int secs; |
| 261 | 261 | ||
| 262 | ti = qemu_get_clock(rt_clock); | 262 | ti = qemu_get_clock(rt_clock); |
| 263 | - if (term_timestamps_start == -1) | ||
| 264 | - term_timestamps_start = ti; | ||
| 265 | - ti -= term_timestamps_start; | 263 | + if (d->timestamps_start == -1) |
| 264 | + d->timestamps_start = ti; | ||
| 265 | + ti -= d->timestamps_start; | ||
| 266 | secs = ti / 1000; | 266 | secs = ti / 1000; |
| 267 | snprintf(buf1, sizeof(buf1), | 267 | snprintf(buf1, sizeof(buf1), |
| 268 | "[%02d:%02d:%02d.%03d] ", | 268 | "[%02d:%02d:%02d.%03d] ", |
| @@ -357,10 +357,10 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch) | @@ -357,10 +357,10 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch) | ||
| 357 | chr->focus = 0; | 357 | chr->focus = 0; |
| 358 | mux_chr_send_event(d, chr->focus, CHR_EVENT_MUX_IN); | 358 | mux_chr_send_event(d, chr->focus, CHR_EVENT_MUX_IN); |
| 359 | break; | 359 | break; |
| 360 | - case 't': | ||
| 361 | - term_timestamps = !term_timestamps; | ||
| 362 | - term_timestamps_start = -1; | ||
| 363 | - break; | 360 | + case 't': |
| 361 | + d->timestamps = !d->timestamps; | ||
| 362 | + d->timestamps_start = -1; | ||
| 363 | + break; | ||
| 364 | } | 364 | } |
| 365 | } else if (ch == term_escape_char) { | 365 | } else if (ch == term_escape_char) { |
| 366 | d->term_got_escape = 1; | 366 | d->term_got_escape = 1; |