[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [qemu-xen staging-4.18] hw/char/riscv_htif: Fix the console syscall on big endian hosts
commit a57e4cc6fe81a0b2ca8a32db91ca45df205c4a8f Author: Thomas Huth <thuth@xxxxxxxxxx> AuthorDate: Fri Jul 21 11:47:20 2023 +0200 Commit: Michael Tokarev <mjt@xxxxxxxxxx> CommitDate: Wed Sep 20 10:18:14 2023 +0300 hw/char/riscv_htif: Fix the console syscall on big endian hosts Values that have been read via cpu_physical_memory_read() from the guest's memory have to be swapped in case the host endianess differs from the guest. Fixes: a6e13e31d5 ("riscv_htif: Support console output via proxy syscall") Signed-off-by: Thomas Huth <thuth@xxxxxxxxxx> Reviewed-by: Alistair Francis <alistair.francis@xxxxxxx> Reviewed-by: Bin Meng <bmeng@xxxxxxxxxxx> Reviewed-by: Daniel Henrique Barboza <dbarboza@xxxxxxxxxxxxxxxx> Message-Id: <20230721094720.902454-3-thuth@xxxxxxxxxx> Signed-off-by: Alistair Francis <alistair.francis@xxxxxxx> (cherry picked from commit 058096f1c55ab688db7e1d6814aaefc1bcd87f7a) Signed-off-by: Michael Tokarev <mjt@xxxxxxxxxx> (Mjt: context fix in hw/char/riscv_htif.c for #include) --- hw/char/riscv_htif.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hw/char/riscv_htif.c b/hw/char/riscv_htif.c index e6e0fa3015..198175e232 100644 --- a/hw/char/riscv_htif.c +++ b/hw/char/riscv_htif.c @@ -29,6 +29,7 @@ #include "chardev/char-fe.h" #include "qemu/timer.h" #include "qemu/error-report.h" +#include "exec/tswap.h" #define RISCV_DEBUG_HTIF 0 #define HTIF_DEBUG(fmt, ...) \ @@ -167,11 +168,11 @@ static void htif_handle_tohost_write(HTIFState *s, uint64_t val_written) } else { uint64_t syscall[8]; cpu_physical_memory_read(payload, syscall, sizeof(syscall)); - if (syscall[0] == PK_SYS_WRITE && - syscall[1] == HTIF_DEV_CONSOLE && - syscall[3] == HTIF_CONSOLE_CMD_PUTC) { + if (tswap64(syscall[0]) == PK_SYS_WRITE && + tswap64(syscall[1]) == HTIF_DEV_CONSOLE && + tswap64(syscall[3]) == HTIF_CONSOLE_CMD_PUTC) { uint8_t ch; - cpu_physical_memory_read(syscall[2], &ch, 1); + cpu_physical_memory_read(tswap64(syscall[2]), &ch, 1); qemu_chr_fe_write(&s->chr, &ch, 1); resp = 0x100 | (uint8_t)payload; } else { -- generated by git-patchbot for /home/xen/git/qemu-xen.git#staging-4.18
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |