[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 44/53] semihosting: Cleanup chardev init
From: |
Luc Michel |
Subject: |
Re: [PATCH v4 44/53] semihosting: Cleanup chardev init |
Date: |
Fri, 24 Jun 2022 11:07:47 +0200 |
User-agent: |
Mutt/1.9.4 (2018-02-28) |
On 13:45 Tue 07 Jun , Richard Henderson wrote:
> Rename qemu_semihosting_connect_chardevs to
> qemu_semihosting_chardev_init; pass the result
> directly to qemu_semihosting_console_init.
>
> Store the chardev in SemihostingConsole instead
> of SemihostingConfig, which lets us drop
> semihosting_get_chardev.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Luc Michel <lmichel@kalray.eu>
> ---
> include/semihosting/semihost.h | 13 ++-----------
> semihosting/config.c | 17 +++++++----------
> semihosting/console.c | 31 +++++++++++++++----------------
> softmmu/vl.c | 3 +--
> stubs/semihost.c | 6 +-----
> 5 files changed, 26 insertions(+), 44 deletions(-)
>
> diff --git a/include/semihosting/semihost.h b/include/semihosting/semihost.h
> index 0c55ade3ac..5b36a76f08 100644
> --- a/include/semihosting/semihost.h
> +++ b/include/semihosting/semihost.h
> @@ -51,14 +51,6 @@ static inline const char *semihosting_get_cmdline(void)
> {
> return NULL;
> }
> -
> -static inline Chardev *semihosting_get_chardev(void)
> -{
> - return NULL;
> -}
> -static inline void qemu_semihosting_console_init(void)
> -{
> -}
> #else /* !CONFIG_USER_ONLY */
> bool semihosting_enabled(void);
> SemihostingTarget semihosting_get_target(void);
> @@ -66,12 +58,11 @@ const char *semihosting_get_arg(int i);
> int semihosting_get_argc(void);
> const char *semihosting_get_cmdline(void);
> void semihosting_arg_fallback(const char *file, const char *cmd);
> -Chardev *semihosting_get_chardev(void);
> /* for vl.c hooks */
> void qemu_semihosting_enable(void);
> int qemu_semihosting_config_options(const char *opt);
> -void qemu_semihosting_connect_chardevs(void);
> -void qemu_semihosting_console_init(void);
> +void qemu_semihosting_chardev_init(void);
> +void qemu_semihosting_console_init(Chardev *);
> #endif /* CONFIG_USER_ONLY */
>
> #endif /* SEMIHOST_H */
> diff --git a/semihosting/config.c b/semihosting/config.c
> index 50d82108e6..4bca769fad 100644
> --- a/semihosting/config.c
> +++ b/semihosting/config.c
> @@ -50,7 +50,6 @@ QemuOptsList qemu_semihosting_config_opts = {
> typedef struct SemihostingConfig {
> bool enabled;
> SemihostingTarget target;
> - Chardev *chardev;
> char **argv;
> int argc;
> const char *cmdline; /* concatenated argv */
> @@ -121,11 +120,6 @@ void semihosting_arg_fallback(const char *file, const
> char *cmd)
> }
> }
>
> -Chardev *semihosting_get_chardev(void)
> -{
> - return semihosting.chardev;
> -}
> -
> void qemu_semihosting_enable(void)
> {
> semihosting.enabled = true;
> @@ -171,16 +165,19 @@ int qemu_semihosting_config_options(const char *optarg)
> return 0;
> }
>
> -void qemu_semihosting_connect_chardevs(void)
> +/* We had to defer this until chardevs were created */
> +void qemu_semihosting_chardev_init(void)
> {
> - /* We had to defer this until chardevs were created */
> + Chardev *chr = NULL;
> +
> if (semihost_chardev) {
> - Chardev *chr = qemu_chr_find(semihost_chardev);
> + chr = qemu_chr_find(semihost_chardev);
> if (chr == NULL) {
> error_report("semihosting chardev '%s' not found",
> semihost_chardev);
> exit(1);
> }
> - semihosting.chardev = chr;
> }
> +
> + qemu_semihosting_console_init(chr);
> }
> diff --git a/semihosting/console.c b/semihosting/console.c
> index df618a28a4..4088192842 100644
> --- a/semihosting/console.c
> +++ b/semihosting/console.c
> @@ -27,11 +27,21 @@
> #include "qapi/error.h"
> #include "qemu/fifo8.h"
>
> +/* Access to this structure is protected by the BQL */
> +typedef struct SemihostingConsole {
> + CharBackend backend;
> + Chardev *chr;
> + GSList *sleeping_cpus;
> + bool got;
> + Fifo8 fifo;
> +} SemihostingConsole;
> +
> +static SemihostingConsole console;
> +
> int qemu_semihosting_log_out(const char *s, int len)
> {
> - Chardev *chardev = semihosting_get_chardev();
> - if (chardev) {
> - return qemu_chr_write_all(chardev, (uint8_t *) s, len);
> + if (console.chr) {
> + return qemu_chr_write_all(console.chr, (uint8_t *) s, len);
> } else {
> return write(STDERR_FILENO, s, len);
> }
> @@ -106,16 +116,6 @@ void qemu_semihosting_console_outc(CPUArchState *env,
> target_ulong addr)
>
> #define FIFO_SIZE 1024
>
> -/* Access to this structure is protected by the BQL */
> -typedef struct SemihostingConsole {
> - CharBackend backend;
> - GSList *sleeping_cpus;
> - bool got;
> - Fifo8 fifo;
> -} SemihostingConsole;
> -
> -static SemihostingConsole console;
> -
> static int console_can_read(void *opaque)
> {
> SemihostingConsole *c = opaque;
> @@ -169,10 +169,9 @@ int qemu_semihosting_console_read(CPUState *cs, void
> *buf, int len)
> return ret;
> }
>
> -void qemu_semihosting_console_init(void)
> +void qemu_semihosting_console_init(Chardev *chr)
> {
> - Chardev *chr = semihosting_get_chardev();
> -
> + console.chr = chr;
> if (chr) {
> fifo8_create(&console.fifo, FIFO_SIZE);
> qemu_chr_fe_init(&console.backend, chr, &error_abort);
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 4c1e94b00e..83e2af4eab 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -1944,8 +1944,7 @@ static void qemu_create_late_backends(void)
> exit(1);
>
> /* now chardevs have been created we may have semihosting to connect */
> - qemu_semihosting_connect_chardevs();
> - qemu_semihosting_console_init();
> + qemu_semihosting_chardev_init();
> }
>
> static void cxl_set_opts(void)
> diff --git a/stubs/semihost.c b/stubs/semihost.c
> index 4bf2cf71b9..f486651afb 100644
> --- a/stubs/semihost.c
> +++ b/stubs/semihost.c
> @@ -65,10 +65,6 @@ void semihosting_arg_fallback(const char *file, const char
> *cmd)
> {
> }
>
> -void qemu_semihosting_connect_chardevs(void)
> -{
> -}
> -
> -void qemu_semihosting_console_init(void)
> +void qemu_semihosting_chardev_init(void)
> {
> }
> --
> 2.34.1
>
>
>
>
> To declare a filtering error, please use the following link :
> https://www.security-mail.net/reporter.php?mid=f3b8.629fd419.cecd0.0&r=lmichel%40kalrayinc.com&s=qemu-devel-bounces%2Blmichel%3Dkalrayinc.com%40nongnu.org&o=%5BPATCH+v4+44%2F53%5D+semihosting%3A+Cleanup+chardev+init&verdict=C&c=10d71a2e8353924e95ea4f98e698ba376e5bb76b
>
--
- Re: [PATCH v4 40/53] gdbstub: Adjust gdb_syscall_complete_cb declaration, (continued)
- [PATCH v4 49/53] semihosting: Use console_out_gf for SYS_WRITEC, Richard Henderson, 2022/06/07
- [PATCH v4 46/53] semihosting: Add GuestFDConsole, Richard Henderson, 2022/06/07
- [PATCH v4 43/53] semihosting: Expand qemu_semihosting_console_inc to read, Richard Henderson, 2022/06/07
- [PATCH v4 51/53] semihosting: Use console_out_gf for SYS_WRITE0, Richard Henderson, 2022/06/07
- [PATCH v4 50/53] semihosting: Remove qemu_semihosting_console_outc, Richard Henderson, 2022/06/07
- [PATCH v4 52/53] semihosting: Remove qemu_semihosting_console_outs, Richard Henderson, 2022/06/07
- [PATCH v4 53/53] semihosting: Create semihost_sys_poll_one, Richard Henderson, 2022/06/07
- [PATCH v4 44/53] semihosting: Cleanup chardev init, Richard Henderson, 2022/06/07
- Re: [PATCH v4 44/53] semihosting: Cleanup chardev init,
Luc Michel <=