* [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE
@ 2023-07-05 13:31 Philippe Mathieu-Daudé
2023-07-05 13:31 ` [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel Philippe Mathieu-Daudé
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-05 13:31 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Joel Stanley, Markus Armbruster, Alistair Francis,
Laurent Vivier, Edgar E. Iglesias, Peter Maydell,
Dr. David Alan Gilbert, Marc-André Lureau, Paolo Bonzini,
Amit Shah, qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé, Philippe Mathieu-Daudé
Improve qio and chardev frontend documentation,
have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE.
Philippe Mathieu-Daudé (4):
io/channel: Explicit QIOChannel doc is based on GLib's IOChannel
chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a
mask
chardev/char-fe: Document FEWatchFunc typedef
hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE
include/chardev/char-fe.h | 18 ++++++++++++++++--
include/io/channel.h | 2 +-
hw/char/cadence_uart.c | 8 ++++----
hw/char/cmsdk-apb-uart.c | 6 +++---
hw/char/ibex_uart.c | 8 ++++----
hw/char/nrf51_uart.c | 4 ++--
hw/char/serial.c | 2 +-
hw/char/virtio-console.c | 2 +-
hw/usb/redirect.c | 2 +-
monitor/monitor.c | 2 +-
net/vhost-user.c | 2 +-
11 files changed, 35 insertions(+), 21 deletions(-)
--
2.38.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel
2023-07-05 13:31 [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
@ 2023-07-05 13:31 ` Philippe Mathieu-Daudé
2023-07-05 14:52 ` Daniel P. Berrangé
2023-07-05 13:31 ` [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask Philippe Mathieu-Daudé
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-05 13:31 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Joel Stanley, Markus Armbruster, Alistair Francis,
Laurent Vivier, Edgar E. Iglesias, Peter Maydell,
Dr. David Alan Gilbert, Marc-André Lureau, Paolo Bonzini,
Amit Shah, qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé, Philippe Mathieu-Daudé
One can get lost looking for "public API docs". Explicit
we are referring to GLib IOChannel documentation.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/io/channel.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/io/channel.h b/include/io/channel.h
index 229bf36910..998718b470 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -97,7 +97,7 @@ struct QIOChannel {
* The first five callbacks are mandatory to support, others
* provide additional optional features.
*
- * Consult the corresponding public API docs for a description
+ * Consult the corresponding GLib IOChannel public API docs for a description
* of the semantics of each callback. io_shutdown in particular
* must be thread-safe, terminate quickly and must not block.
*/
--
2.38.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask
2023-07-05 13:31 [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
2023-07-05 13:31 ` [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel Philippe Mathieu-Daudé
@ 2023-07-05 13:31 ` Philippe Mathieu-Daudé
2023-07-10 11:19 ` Marc-André Lureau
2023-07-05 13:31 ` [PATCH 3/4] chardev/char-fe: Document FEWatchFunc typedef Philippe Mathieu-Daudé
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-05 13:31 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Joel Stanley, Markus Armbruster, Alistair Francis,
Laurent Vivier, Edgar E. Iglesias, Peter Maydell,
Dr. David Alan Gilbert, Marc-André Lureau, Paolo Bonzini,
Amit Shah, qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé, Philippe Mathieu-Daudé
qemu_chr_fe_add_watch() can poll for multiple conditions.
It's @cond argument is a combination of all the condition bits.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/chardev/char-fe.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
index 8c420fa36e..309960046a 100644
--- a/include/chardev/char-fe.h
+++ b/include/chardev/char-fe.h
@@ -179,8 +179,8 @@ typedef gboolean (*FEWatchFunc)(void *do_not_use, GIOCondition condition, void *
/**
* qemu_chr_fe_add_watch:
- * @cond: the condition to poll for
- * @func: the function to call when the condition happens
+ * @cond: bitwise combination of conditions to poll for
+ * @func: the function to call when the conditions are satisfied
* @user_data: the opaque pointer to pass to @func
*
* If the backend is connected, create and add a #GSource that fires
--
2.38.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/4] chardev/char-fe: Document FEWatchFunc typedef
2023-07-05 13:31 [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
2023-07-05 13:31 ` [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel Philippe Mathieu-Daudé
2023-07-05 13:31 ` [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask Philippe Mathieu-Daudé
@ 2023-07-05 13:31 ` Philippe Mathieu-Daudé
2023-07-10 11:22 ` Marc-André Lureau
2023-07-05 13:31 ` [PATCH 4/4] hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
2023-07-10 11:11 ` [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
4 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-05 13:31 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Joel Stanley, Markus Armbruster, Alistair Francis,
Laurent Vivier, Edgar E. Iglesias, Peter Maydell,
Dr. David Alan Gilbert, Marc-André Lureau, Paolo Bonzini,
Amit Shah, qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé, Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/chardev/char-fe.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
index 309960046a..ec3f706a14 100644
--- a/include/chardev/char-fe.h
+++ b/include/chardev/char-fe.h
@@ -175,6 +175,20 @@ void qemu_chr_fe_printf(CharBackend *be, const char *fmt, ...)
G_GNUC_PRINTF(2, 3);
+/**
+ * FEWatchFunc: a #GSourceFunc called when any conditions requested by
+ * qemu_chr_fe_add_watch() is satisfied.
+ * @do_not_use: depending on the underlying chardev, a GIOChannel or a
+ * QIOChannel. DO NOT USE!
+ * @cond: bitwise combination of conditions watched and satisfied
+ * before calling this callback.
+ * @data: user data passed at creation to qemu_chr_fe_add_watch(). Can
+ * be NULL.
+ *
+ * Returns: G_SOURCE_REMOVE if the GSource should be removed from the
+ * main loop, or G_SOURCE_CONTINUE to leave the GSource in
+ * the main loop.
+ */
typedef gboolean (*FEWatchFunc)(void *do_not_use, GIOCondition condition, void *data);
/**
--
2.38.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/4] hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE
2023-07-05 13:31 [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2023-07-05 13:31 ` [PATCH 3/4] chardev/char-fe: Document FEWatchFunc typedef Philippe Mathieu-Daudé
@ 2023-07-05 13:31 ` Philippe Mathieu-Daudé
2023-07-10 11:23 ` Marc-André Lureau
2023-07-10 11:11 ` [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
4 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-05 13:31 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Joel Stanley, Markus Armbruster, Alistair Francis,
Laurent Vivier, Edgar E. Iglesias, Peter Maydell,
Dr. David Alan Gilbert, Marc-André Lureau, Paolo Bonzini,
Amit Shah, qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé, Philippe Mathieu-Daudé
GLib recommend to use G_SOURCE_REMOVE / G_SOURCE_CONTINUE
for GSourceFunc callbacks. Our FEWatchFunc is a GSourceFunc
returning such value. Use such definitions which are
"more memorable" [*].
[*] https://docs.gtk.org/glib/callback.SourceFunc.html#return-value
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/cadence_uart.c | 8 ++++----
hw/char/cmsdk-apb-uart.c | 6 +++---
hw/char/ibex_uart.c | 8 ++++----
hw/char/nrf51_uart.c | 4 ++--
hw/char/serial.c | 2 +-
hw/char/virtio-console.c | 2 +-
hw/usb/redirect.c | 2 +-
monitor/monitor.c | 2 +-
net/vhost-user.c | 2 +-
9 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
index 807e398541..eff0304a18 100644
--- a/hw/char/cadence_uart.c
+++ b/hw/char/cadence_uart.c
@@ -307,11 +307,11 @@ static gboolean cadence_uart_xmit(void *do_not_use, GIOCondition cond,
/* instant drain the fifo when there's no back-end */
if (!qemu_chr_fe_backend_connected(&s->chr)) {
s->tx_count = 0;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
if (!s->tx_count) {
- return FALSE;
+ return G_SOURCE_REMOVE;
}
ret = qemu_chr_fe_write(&s->chr, s->tx_fifo, s->tx_count);
@@ -326,12 +326,12 @@ static gboolean cadence_uart_xmit(void *do_not_use, GIOCondition cond,
cadence_uart_xmit, s);
if (!r) {
s->tx_count = 0;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
}
uart_update_status(s);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static void uart_write_tx_fifo(CadenceUARTState *s, const uint8_t *buf,
diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
index f8dc89ee3d..d466cd93de 100644
--- a/hw/char/cmsdk-apb-uart.c
+++ b/hw/char/cmsdk-apb-uart.c
@@ -199,7 +199,7 @@ static gboolean uart_transmit(void *do_not_use, GIOCondition cond, void *opaque)
s->watch_tag = 0;
if (!(s->ctrl & R_CTRL_TX_EN_MASK) || !(s->state & R_STATE_TXFULL_MASK)) {
- return FALSE;
+ return G_SOURCE_REMOVE;
}
ret = qemu_chr_fe_write(&s->chr, &s->txbuf, 1);
@@ -215,7 +215,7 @@ static gboolean uart_transmit(void *do_not_use, GIOCondition cond, void *opaque)
}
/* Transmit pending */
trace_cmsdk_apb_uart_tx_pending();
- return FALSE;
+ return G_SOURCE_REMOVE;
}
buffer_drained:
@@ -227,7 +227,7 @@ buffer_drained:
s->intstatus |= R_INTSTATUS_TX_MASK;
}
cmsdk_apb_uart_update(s);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static void uart_cancel_transmit(CMSDKAPBUART *s)
diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c
index f70adb5308..51708c0836 100644
--- a/hw/char/ibex_uart.c
+++ b/hw/char/ibex_uart.c
@@ -147,7 +147,7 @@ static gboolean ibex_uart_xmit(void *do_not_use, GIOCondition cond,
/* instant drain the fifo when there's no back-end */
if (!qemu_chr_fe_backend_connected(&s->chr)) {
s->tx_level = 0;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
if (!s->tx_level) {
@@ -156,7 +156,7 @@ static gboolean ibex_uart_xmit(void *do_not_use, GIOCondition cond,
s->uart_intr_state |= R_INTR_STATE_TX_EMPTY_MASK;
s->uart_intr_state &= ~R_INTR_STATE_TX_WATERMARK_MASK;
ibex_uart_update_irqs(s);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
ret = qemu_chr_fe_write(&s->chr, s->tx_fifo, s->tx_level);
@@ -171,7 +171,7 @@ static gboolean ibex_uart_xmit(void *do_not_use, GIOCondition cond,
ibex_uart_xmit, s);
if (!r) {
s->tx_level = 0;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
}
@@ -192,7 +192,7 @@ static gboolean ibex_uart_xmit(void *do_not_use, GIOCondition cond,
}
ibex_uart_update_irqs(s);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static void uart_write_tx_fifo(IbexUartState *s, const uint8_t *buf,
diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c
index 3c6f982de9..dfe2276d71 100644
--- a/hw/char/nrf51_uart.c
+++ b/hw/char/nrf51_uart.c
@@ -93,13 +93,13 @@ static gboolean uart_transmit(void *do_not_use, GIOCondition cond, void *opaque)
*/
goto buffer_drained;
}
- return FALSE;
+ return G_SOURCE_REMOVE;
}
buffer_drained:
s->reg[R_UART_TXDRDY] = 1;
s->pending_tx_byte = false;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static void uart_cancel_transmit(NRF51UARTState *s)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 270e1b1094..f3094f860f 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -226,7 +226,7 @@ static gboolean serial_watch_cb(void *do_not_use, GIOCondition cond,
SerialState *s = opaque;
s->watch_tag = 0;
serial_xmit(s);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static void serial_xmit(SerialState *s)
diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
index dd5a02e339..dbe0b28e60 100644
--- a/hw/char/virtio-console.c
+++ b/hw/char/virtio-console.c
@@ -45,7 +45,7 @@ static gboolean chr_write_unblocked(void *do_not_use, GIOCondition cond,
vcon->watch = 0;
virtio_serial_throttle_port(VIRTIO_SERIAL_PORT(vcon), false);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
/* Callback function that's called when the guest sends us data */
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index 39fbaaab16..4bbf8afb33 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -278,7 +278,7 @@ static gboolean usbredir_write_unblocked(void *do_not_use, GIOCondition cond,
dev->watch = 0;
usbredirparser_do_write(dev->parser);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static int usbredir_write(void *priv, uint8_t *data, int count)
diff --git a/monitor/monitor.c b/monitor/monitor.c
index dc352f9e9d..941f87815a 100644
--- a/monitor/monitor.c
+++ b/monitor/monitor.c
@@ -144,7 +144,7 @@ static gboolean monitor_unblocked(void *do_not_use, GIOCondition cond,
QEMU_LOCK_GUARD(&mon->mon_lock);
mon->out_watch = 0;
monitor_flush_locked(mon);
- return FALSE;
+ return G_SOURCE_REMOVE;
}
/* Caller must hold mon->mon_lock */
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 5993e4afca..12555518e8 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -239,7 +239,7 @@ static gboolean net_vhost_user_watch(void *do_not_use, GIOCondition cond,
qemu_chr_fe_disconnect(&s->chr);
- return TRUE;
+ return G_SOURCE_CONTINUE;
}
static void net_vhost_user_event(void *opaque, QEMUChrEvent event);
--
2.38.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel
2023-07-05 13:31 ` [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel Philippe Mathieu-Daudé
@ 2023-07-05 14:52 ` Daniel P. Berrangé
0 siblings, 0 replies; 11+ messages in thread
From: Daniel P. Berrangé @ 2023-07-05 14:52 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Gerd Hoffmann, Joel Stanley, Markus Armbruster,
Alistair Francis, Laurent Vivier, Edgar E. Iglesias,
Peter Maydell, Dr. David Alan Gilbert, Marc-André Lureau,
Paolo Bonzini, Amit Shah, qemu-riscv, Michael S. Tsirkin,
Jason Wang, qemu-arm
On Wed, Jul 05, 2023 at 03:31:36PM +0200, Philippe Mathieu-Daudé wrote:
> One can get lost looking for "public API docs". Explicit
> we are referring to GLib IOChannel documentation.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/io/channel.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/io/channel.h b/include/io/channel.h
> index 229bf36910..998718b470 100644
> --- a/include/io/channel.h
> +++ b/include/io/channel.h
> @@ -97,7 +97,7 @@ struct QIOChannel {
> * The first five callbacks are mandatory to support, others
> * provide additional optional features.
> *
> - * Consult the corresponding public API docs for a description
> + * Consult the corresponding GLib IOChannel public API docs for a description
This is refering to the public API docs in this very file.
ie for io_writev callback, the qio_channel_io_writev docs define
semantics.
> * of the semantics of each callback. io_shutdown in particular
> * must be thread-safe, terminate quickly and must not block.
> */
> --
> 2.38.1
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE
2023-07-05 13:31 [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2023-07-05 13:31 ` [PATCH 4/4] hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
@ 2023-07-10 11:11 ` Philippe Mathieu-Daudé
4 siblings, 0 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-10 11:11 UTC (permalink / raw)
To: qemu-devel
Cc: Gerd Hoffmann, Joel Stanley, Markus Armbruster, Alistair Francis,
Laurent Vivier, Edgar E. Iglesias, Peter Maydell,
Dr. David Alan Gilbert, Marc-André Lureau, Paolo Bonzini,
Amit Shah, qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé
Hi Paolo & Marc-André,
On 5/7/23 15:31, Philippe Mathieu-Daudé wrote:
> Improve qio and chardev frontend documentation,
> have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE.
>
> Philippe Mathieu-Daudé (4):
> io/channel: Explicit QIOChannel doc is based on GLib's IOChannel
> chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a
> mask
> chardev/char-fe: Document FEWatchFunc typedef
> hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE
Could you Ack patches 2-4?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask
2023-07-05 13:31 ` [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask Philippe Mathieu-Daudé
@ 2023-07-10 11:19 ` Marc-André Lureau
2023-07-10 13:42 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 11+ messages in thread
From: Marc-André Lureau @ 2023-07-10 11:19 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Gerd Hoffmann, Joel Stanley, Markus Armbruster,
Alistair Francis, Laurent Vivier, Edgar E. Iglesias,
Peter Maydell, Dr. David Alan Gilbert, Paolo Bonzini, Amit Shah,
qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé
[-- Attachment #1: Type: text/plain, Size: 1324 bytes --]
On Wed, Jul 5, 2023 at 5:33 PM Philippe Mathieu-Daudé <philmd@linaro.org>
wrote:
> qemu_chr_fe_add_watch() can poll for multiple conditions.
> It's @cond argument is a combination of all the condition bits.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/chardev/char-fe.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
> index 8c420fa36e..309960046a 100644
> --- a/include/chardev/char-fe.h
> +++ b/include/chardev/char-fe.h
> @@ -179,8 +179,8 @@ typedef gboolean (*FEWatchFunc)(void *do_not_use,
> GIOCondition condition, void *
>
> /**
> * qemu_chr_fe_add_watch:
> - * @cond: the condition to poll for
>
- * @func: the function to call when the condition happens
> + * @cond: bitwise combination of conditions to poll for
> + * @func: the function to call when the conditions are satisfied
>
Not really worth imo, do you want to also fix all the io/ docs for
@condition? and probably elsewhere...
The rewording of @func isn't much clearer either... "any of the conditions"?
> * @user_data: the opaque pointer to pass to @func
> *
> * If the backend is connected, create and add a #GSource that fires
> --
> 2.38.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2265 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] chardev/char-fe: Document FEWatchFunc typedef
2023-07-05 13:31 ` [PATCH 3/4] chardev/char-fe: Document FEWatchFunc typedef Philippe Mathieu-Daudé
@ 2023-07-10 11:22 ` Marc-André Lureau
0 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2023-07-10 11:22 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Gerd Hoffmann, Joel Stanley, Markus Armbruster,
Alistair Francis, Laurent Vivier, Edgar E. Iglesias,
Peter Maydell, Dr. David Alan Gilbert, Paolo Bonzini, Amit Shah,
qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé
[-- Attachment #1: Type: text/plain, Size: 1458 bytes --]
Hi
On Wed, Jul 5, 2023 at 5:33 PM Philippe Mathieu-Daudé <philmd@linaro.org>
wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/chardev/char-fe.h | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
> index 309960046a..ec3f706a14 100644
> --- a/include/chardev/char-fe.h
> +++ b/include/chardev/char-fe.h
> @@ -175,6 +175,20 @@ void qemu_chr_fe_printf(CharBackend *be, const char
> *fmt, ...)
> G_GNUC_PRINTF(2, 3);
>
>
> +/**
> + * FEWatchFunc: a #GSourceFunc called when any conditions requested by
> + * qemu_chr_fe_add_watch() is satisfied.
> + * @do_not_use: depending on the underlying chardev, a GIOChannel or a
> + * QIOChannel. DO NOT USE!
> + * @cond: bitwise combination of conditions watched and satisfied
> + * before calling this callback.
> + * @data: user data passed at creation to qemu_chr_fe_add_watch(). Can
> + * be NULL.
> + *
> + * Returns: G_SOURCE_REMOVE if the GSource should be removed from the
> + * main loop, or G_SOURCE_CONTINUE to leave the GSource in
> + * the main loop.
> + */
> typedef gboolean (*FEWatchFunc)(void *do_not_use, GIOCondition condition,
> void *data);
>
> /**
> --
> 2.38.1
>
>
>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2105 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE
2023-07-05 13:31 ` [PATCH 4/4] hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
@ 2023-07-10 11:23 ` Marc-André Lureau
0 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2023-07-10 11:23 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Gerd Hoffmann, Joel Stanley, Markus Armbruster,
Alistair Francis, Laurent Vivier, Edgar E. Iglesias,
Peter Maydell, Dr. David Alan Gilbert, Paolo Bonzini, Amit Shah,
qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé
[-- Attachment #1: Type: text/plain, Size: 7558 bytes --]
On Wed, Jul 5, 2023 at 5:33 PM Philippe Mathieu-Daudé <philmd@linaro.org>
wrote:
> GLib recommend to use G_SOURCE_REMOVE / G_SOURCE_CONTINUE
> for GSourceFunc callbacks. Our FEWatchFunc is a GSourceFunc
> returning such value. Use such definitions which are
> "more memorable" [*].
>
> [*] https://docs.gtk.org/glib/callback.SourceFunc.html#return-value
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/char/cadence_uart.c | 8 ++++----
> hw/char/cmsdk-apb-uart.c | 6 +++---
> hw/char/ibex_uart.c | 8 ++++----
> hw/char/nrf51_uart.c | 4 ++--
> hw/char/serial.c | 2 +-
> hw/char/virtio-console.c | 2 +-
> hw/usb/redirect.c | 2 +-
> monitor/monitor.c | 2 +-
> net/vhost-user.c | 2 +-
> 9 files changed, 18 insertions(+), 18 deletions(-)
>
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index 807e398541..eff0304a18 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -307,11 +307,11 @@ static gboolean cadence_uart_xmit(void *do_not_use,
> GIOCondition cond,
> /* instant drain the fifo when there's no back-end */
> if (!qemu_chr_fe_backend_connected(&s->chr)) {
> s->tx_count = 0;
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> if (!s->tx_count) {
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> ret = qemu_chr_fe_write(&s->chr, s->tx_fifo, s->tx_count);
> @@ -326,12 +326,12 @@ static gboolean cadence_uart_xmit(void *do_not_use,
> GIOCondition cond,
> cadence_uart_xmit, s);
> if (!r) {
> s->tx_count = 0;
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
> }
>
> uart_update_status(s);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> static void uart_write_tx_fifo(CadenceUARTState *s, const uint8_t *buf,
> diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
> index f8dc89ee3d..d466cd93de 100644
> --- a/hw/char/cmsdk-apb-uart.c
> +++ b/hw/char/cmsdk-apb-uart.c
> @@ -199,7 +199,7 @@ static gboolean uart_transmit(void *do_not_use,
> GIOCondition cond, void *opaque)
> s->watch_tag = 0;
>
> if (!(s->ctrl & R_CTRL_TX_EN_MASK) || !(s->state &
> R_STATE_TXFULL_MASK)) {
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> ret = qemu_chr_fe_write(&s->chr, &s->txbuf, 1);
> @@ -215,7 +215,7 @@ static gboolean uart_transmit(void *do_not_use,
> GIOCondition cond, void *opaque)
> }
> /* Transmit pending */
> trace_cmsdk_apb_uart_tx_pending();
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> buffer_drained:
> @@ -227,7 +227,7 @@ buffer_drained:
> s->intstatus |= R_INTSTATUS_TX_MASK;
> }
> cmsdk_apb_uart_update(s);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> static void uart_cancel_transmit(CMSDKAPBUART *s)
> diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c
> index f70adb5308..51708c0836 100644
> --- a/hw/char/ibex_uart.c
> +++ b/hw/char/ibex_uart.c
> @@ -147,7 +147,7 @@ static gboolean ibex_uart_xmit(void *do_not_use,
> GIOCondition cond,
> /* instant drain the fifo when there's no back-end */
> if (!qemu_chr_fe_backend_connected(&s->chr)) {
> s->tx_level = 0;
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> if (!s->tx_level) {
> @@ -156,7 +156,7 @@ static gboolean ibex_uart_xmit(void *do_not_use,
> GIOCondition cond,
> s->uart_intr_state |= R_INTR_STATE_TX_EMPTY_MASK;
> s->uart_intr_state &= ~R_INTR_STATE_TX_WATERMARK_MASK;
> ibex_uart_update_irqs(s);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> ret = qemu_chr_fe_write(&s->chr, s->tx_fifo, s->tx_level);
> @@ -171,7 +171,7 @@ static gboolean ibex_uart_xmit(void *do_not_use,
> GIOCondition cond,
> ibex_uart_xmit, s);
> if (!r) {
> s->tx_level = 0;
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
> }
>
> @@ -192,7 +192,7 @@ static gboolean ibex_uart_xmit(void *do_not_use,
> GIOCondition cond,
> }
>
> ibex_uart_update_irqs(s);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> static void uart_write_tx_fifo(IbexUartState *s, const uint8_t *buf,
> diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c
> index 3c6f982de9..dfe2276d71 100644
> --- a/hw/char/nrf51_uart.c
> +++ b/hw/char/nrf51_uart.c
> @@ -93,13 +93,13 @@ static gboolean uart_transmit(void *do_not_use,
> GIOCondition cond, void *opaque)
> */
> goto buffer_drained;
> }
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> buffer_drained:
> s->reg[R_UART_TXDRDY] = 1;
> s->pending_tx_byte = false;
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> static void uart_cancel_transmit(NRF51UARTState *s)
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index 270e1b1094..f3094f860f 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -226,7 +226,7 @@ static gboolean serial_watch_cb(void *do_not_use,
> GIOCondition cond,
> SerialState *s = opaque;
> s->watch_tag = 0;
> serial_xmit(s);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> static void serial_xmit(SerialState *s)
> diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
> index dd5a02e339..dbe0b28e60 100644
> --- a/hw/char/virtio-console.c
> +++ b/hw/char/virtio-console.c
> @@ -45,7 +45,7 @@ static gboolean chr_write_unblocked(void *do_not_use,
> GIOCondition cond,
>
> vcon->watch = 0;
> virtio_serial_throttle_port(VIRTIO_SERIAL_PORT(vcon), false);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> /* Callback function that's called when the guest sends us data */
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index 39fbaaab16..4bbf8afb33 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -278,7 +278,7 @@ static gboolean usbredir_write_unblocked(void
> *do_not_use, GIOCondition cond,
> dev->watch = 0;
> usbredirparser_do_write(dev->parser);
>
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> static int usbredir_write(void *priv, uint8_t *data, int count)
> diff --git a/monitor/monitor.c b/monitor/monitor.c
> index dc352f9e9d..941f87815a 100644
> --- a/monitor/monitor.c
> +++ b/monitor/monitor.c
> @@ -144,7 +144,7 @@ static gboolean monitor_unblocked(void *do_not_use,
> GIOCondition cond,
> QEMU_LOCK_GUARD(&mon->mon_lock);
> mon->out_watch = 0;
> monitor_flush_locked(mon);
> - return FALSE;
> + return G_SOURCE_REMOVE;
> }
>
> /* Caller must hold mon->mon_lock */
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index 5993e4afca..12555518e8 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -239,7 +239,7 @@ static gboolean net_vhost_user_watch(void *do_not_use,
> GIOCondition cond,
>
> qemu_chr_fe_disconnect(&s->chr);
>
> - return TRUE;
> + return G_SOURCE_CONTINUE;
> }
>
> static void net_vhost_user_event(void *opaque, QEMUChrEvent event);
> --
> 2.38.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 9359 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask
2023-07-10 11:19 ` Marc-André Lureau
@ 2023-07-10 13:42 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-07-10 13:42 UTC (permalink / raw)
To: Marc-André Lureau
Cc: qemu-devel, Gerd Hoffmann, Joel Stanley, Markus Armbruster,
Alistair Francis, Laurent Vivier, Edgar E. Iglesias,
Peter Maydell, Dr. David Alan Gilbert, Paolo Bonzini, Amit Shah,
qemu-riscv, Michael S. Tsirkin, Jason Wang, qemu-arm,
Daniel P. Berrangé
On 10/7/23 13:19, Marc-André Lureau wrote:
>
>
> On Wed, Jul 5, 2023 at 5:33 PM Philippe Mathieu-Daudé <philmd@linaro.org
> <mailto:philmd@linaro.org>> wrote:
>
> qemu_chr_fe_add_watch() can poll for multiple conditions.
> It's @cond argument is a combination of all the condition bits.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org
> <mailto:philmd@linaro.org>>
> ---
> include/chardev/char-fe.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h
> index 8c420fa36e..309960046a 100644
> --- a/include/chardev/char-fe.h
> +++ b/include/chardev/char-fe.h
> @@ -179,8 +179,8 @@ typedef gboolean (*FEWatchFunc)(void
> *do_not_use, GIOCondition condition, void *
>
> /**
> * qemu_chr_fe_add_watch:
> - * @cond: the condition to poll for
>
> - * @func: the function to call when the condition happens
> + * @cond: bitwise combination of conditions to poll for
> + * @func: the function to call when the conditions are satisfied
>
>
> Not really worth imo, do you want to also fix all the io/ docs for
> @condition? and probably elsewhere...
>
> The rewording of @func isn't much clearer either... "any of the conditions"?
Hmm OK I'll just drop this patch for now, thanks.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-07-10 13:42 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-05 13:31 [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
2023-07-05 13:31 ` [PATCH 1/4] io/channel: Explicit QIOChannel doc is based on GLib's IOChannel Philippe Mathieu-Daudé
2023-07-05 14:52 ` Daniel P. Berrangé
2023-07-05 13:31 ` [PATCH 2/4] chardev/char-fe: Clarify qemu_chr_fe_add_watch 'condition' arg is a mask Philippe Mathieu-Daudé
2023-07-10 11:19 ` Marc-André Lureau
2023-07-10 13:42 ` Philippe Mathieu-Daudé
2023-07-05 13:31 ` [PATCH 3/4] chardev/char-fe: Document FEWatchFunc typedef Philippe Mathieu-Daudé
2023-07-10 11:22 ` Marc-André Lureau
2023-07-05 13:31 ` [PATCH 4/4] hw/char: Have FEWatchFunc handlers return G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
2023-07-10 11:23 ` Marc-André Lureau
2023-07-10 11:11 ` [PATCH 0/4] chardev/char-fe: Document FEWatchFunc and use G_SOURCE_CONTINUE/REMOVE Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).