* [PATCH] hvc/xen: Check console connection flag
@ 2026-03-12 17:38 Jason Andryuk
2026-03-13 8:33 ` Jiri Slaby
2026-03-13 22:35 ` Stefano Stabellini
0 siblings, 2 replies; 5+ messages in thread
From: Jason Andryuk @ 2026-03-12 17:38 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko
Cc: Jason Andryuk, linuxppc-dev, linux-kernel, linux-serial,
xen-devel
When the console out buffer is filled, __write_console() will return 0
as it cannot send any data. domU_write_console() will then spin in
`while (len)` as len doesn't decrement until xenconsoled attaches. This
would block a domU and nullify the parallelism of Hyperlaunch until dom0
userspace starts xenconsoled, which empties the buffer.
Xen 4.21 added a connection field to the xen console page. This is set
to XENCONSOLED_DISCONNECTED (1) when a domain is built, and xenconsoled
will set it to XENCONSOLED_CONNECTED (0) when it connects.
Update the hvc_xen driver to check the field. When the field is
disconnected, drop the write with -ENOTCONN. We only drop the write
when the field is XENCONSOLED_DISCONNECTED (1) to try for maximum
compatibility. The Xen toolstack has historically zero initialized the
console, so it should see XENCONSOLED_CONNECTED (0) by default. If an
implemenation used uninitialized memory, only checking for
XENCONSOLED_DISCONNECTED could have the lowest chance of not connecting.
This lets the hyperlaunched domU boot without stalling. Once dom0
starts xenconsoled, xl console can be used to access the domU's hvc0.
Update the console.h header to bring in the new field.
Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
---
drivers/tty/hvc/hvc_xen.c | 3 +++
include/xen/interface/io/console.h | 13 +++++++++++++
2 files changed, 16 insertions(+)
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 7f0b6262488c..c407592442cd 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -139,6 +139,9 @@ static ssize_t domU_write_console(uint32_t vtermno, const u8 *data, size_t len)
if (cons == NULL)
return -EINVAL;
+ if (cons->intf->connection == XENCONSOLE_DISCONNECTED)
+ return -ENOTCONN;
+
/*
* Make sure the whole buffer is emitted, polling if
* necessary. We don't ever want to rely on the hvc daemon
diff --git a/include/xen/interface/io/console.h b/include/xen/interface/io/console.h
index cf17e89ed861..687949bdebb1 100644
--- a/include/xen/interface/io/console.h
+++ b/include/xen/interface/io/console.h
@@ -19,6 +19,19 @@ struct xencons_interface {
char out[2048];
XENCONS_RING_IDX in_cons, in_prod;
XENCONS_RING_IDX out_cons, out_prod;
+/*
+ * Flag values signaling from backend to frontend whether the console is
+ * connected. i.e. Whether it will be serviced and emptied.
+ *
+ * The flag starts as disconnected.
+ */
+#define XENCONSOLE_DISCONNECTED 1
+/*
+ * The flag is set to connected when the backend connects and the console
+ * will be serviced.
+ */
+#define XENCONSOLE_CONNECTED 0
+ uint8_t connection;
};
#endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] hvc/xen: Check console connection flag
2026-03-12 17:38 [PATCH] hvc/xen: Check console connection flag Jason Andryuk
@ 2026-03-13 8:33 ` Jiri Slaby
2026-03-13 10:44 ` Andrew Cooper
2026-03-13 22:35 ` Stefano Stabellini
1 sibling, 1 reply; 5+ messages in thread
From: Jiri Slaby @ 2026-03-13 8:33 UTC (permalink / raw)
To: Jason Andryuk, Greg Kroah-Hartman, Juergen Gross,
Stefano Stabellini, Oleksandr Tyshchenko
Cc: linuxppc-dev, linux-kernel, linux-serial, xen-devel
On 12. 03. 26, 18:38, Jason Andryuk wrote:
> --- a/include/xen/interface/io/console.h
> +++ b/include/xen/interface/io/console.h
> @@ -19,6 +19,19 @@ struct xencons_interface {
> char out[2048];
> XENCONS_RING_IDX in_cons, in_prod;
> XENCONS_RING_IDX out_cons, out_prod;
> +/*
> + * Flag values signaling from backend to frontend whether the console is
> + * connected. i.e. Whether it will be serviced and emptied.
> + *
> + * The flag starts as disconnected.
> + */
> +#define XENCONSOLE_DISCONNECTED 1
> +/*
> + * The flag is set to connected when the backend connects and the console
> + * will be serviced.
> + */
> +#define XENCONSOLE_CONNECTED 0
This all should be an enum. And you can document it using kernel-doc
properly then.
> + uint8_t connection;
And type check as well.
thanks,
--
js
suse labs
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] hvc/xen: Check console connection flag
2026-03-13 8:33 ` Jiri Slaby
@ 2026-03-13 10:44 ` Andrew Cooper
2026-03-13 15:36 ` Jason Andryuk
0 siblings, 1 reply; 5+ messages in thread
From: Andrew Cooper @ 2026-03-13 10:44 UTC (permalink / raw)
To: Jiri Slaby, Jason Andryuk, Greg Kroah-Hartman, Juergen Gross,
Stefano Stabellini, Oleksandr Tyshchenko
Cc: Andrew Cooper, linuxppc-dev, linux-kernel, linux-serial,
xen-devel
On 13/03/2026 8:33 am, Jiri Slaby wrote:
> On 12. 03. 26, 18:38, Jason Andryuk wrote:
>> --- a/include/xen/interface/io/console.h
>> +++ b/include/xen/interface/io/console.h
>> @@ -19,6 +19,19 @@ struct xencons_interface {
>> char out[2048];
>> XENCONS_RING_IDX in_cons, in_prod;
>> XENCONS_RING_IDX out_cons, out_prod;
>> +/*
>> + * Flag values signaling from backend to frontend whether the
>> console is
>> + * connected. i.e. Whether it will be serviced and emptied.
>> + *
>> + * The flag starts as disconnected.
>> + */
>> +#define XENCONSOLE_DISCONNECTED 1
>> +/*
>> + * The flag is set to connected when the backend connects and the
>> console
>> + * will be serviced.
>> + */
>> +#define XENCONSOLE_CONNECTED 0
>
> This all should be an enum. And you can document it using kernel-doc
> properly then.
>
>> + uint8_t connection;
>
> And type check as well.
This is a non-Linux header file being re-sync'd with it's original source.
It describes an ABI between VMs, where things like enum are forbidden.
~Andrew
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] hvc/xen: Check console connection flag
2026-03-13 10:44 ` Andrew Cooper
@ 2026-03-13 15:36 ` Jason Andryuk
0 siblings, 0 replies; 5+ messages in thread
From: Jason Andryuk @ 2026-03-13 15:36 UTC (permalink / raw)
To: Andrew Cooper, Jiri Slaby, Greg Kroah-Hartman, Juergen Gross,
Stefano Stabellini, Oleksandr Tyshchenko
Cc: linuxppc-dev, linux-kernel, linux-serial, xen-devel
On 2026-03-13 06:44, Andrew Cooper wrote:
> On 13/03/2026 8:33 am, Jiri Slaby wrote:
>> On 12. 03. 26, 18:38, Jason Andryuk wrote:
>>> --- a/include/xen/interface/io/console.h
>>> +++ b/include/xen/interface/io/console.h
>>> @@ -19,6 +19,19 @@ struct xencons_interface {
>>> char out[2048];
>>> XENCONS_RING_IDX in_cons, in_prod;
>>> XENCONS_RING_IDX out_cons, out_prod;
>>> +/*
>>> + * Flag values signaling from backend to frontend whether the
>>> console is
>>> + * connected. i.e. Whether it will be serviced and emptied.
>>> + *
>>> + * The flag starts as disconnected.
>>> + */
>>> +#define XENCONSOLE_DISCONNECTED 1
>>> +/*
>>> + * The flag is set to connected when the backend connects and the
>>> console
>>> + * will be serviced.
>>> + */
>>> +#define XENCONSOLE_CONNECTED 0
>>
>> This all should be an enum. And you can document it using kernel-doc
>> properly then.
>>
>>> + uint8_t connection;
>>
>> And type check as well.
>
> This is a non-Linux header file being re-sync'd with it's original source.
>
> It describes an ABI between VMs, where things like enum are forbidden.
Yes, it is as Andrew wrote. I included "Update the console.h header to
bring in the new field." in the commit message to try in indicate that.
"Sync console.h from the xen repo to bring in the new field." would
better explain its origin.
I only brought in the needed part. There is an emacs variable block
that is not synced for other headers. There is also an ifdef block for
XEN_WANT_FLEX_CONSOLE_RING that isn't used by linux, which I did not sync.
Thanks,
Jason
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] hvc/xen: Check console connection flag
2026-03-12 17:38 [PATCH] hvc/xen: Check console connection flag Jason Andryuk
2026-03-13 8:33 ` Jiri Slaby
@ 2026-03-13 22:35 ` Stefano Stabellini
1 sibling, 0 replies; 5+ messages in thread
From: Stefano Stabellini @ 2026-03-13 22:35 UTC (permalink / raw)
To: Jason Andryuk
Cc: Greg Kroah-Hartman, Jiri Slaby, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko, linuxppc-dev, linux-kernel, linux-serial,
xen-devel
On Thu, 11 Mar 2026, Jason Andryuk wrote:
> When the console out buffer is filled, __write_console() will return 0
> as it cannot send any data. domU_write_console() will then spin in
> `while (len)` as len doesn't decrement until xenconsoled attaches. This
> would block a domU and nullify the parallelism of Hyperlaunch until dom0
> userspace starts xenconsoled, which empties the buffer.
>
> Xen 4.21 added a connection field to the xen console page. This is set
> to XENCONSOLED_DISCONNECTED (1) when a domain is built, and xenconsoled
> will set it to XENCONSOLED_CONNECTED (0) when it connects.
It should be XENCONSOLE_DISCONNECTED
> Update the hvc_xen driver to check the field. When the field is
> disconnected, drop the write with -ENOTCONN. We only drop the write
> when the field is XENCONSOLED_DISCONNECTED (1) to try for maximum
> compatibility. The Xen toolstack has historically zero initialized the
> console, so it should see XENCONSOLED_CONNECTED (0) by default. If an
> implemenation used uninitialized memory, only checking for
> XENCONSOLED_DISCONNECTED could have the lowest chance of not connecting.
>
> This lets the hyperlaunched domU boot without stalling. Once dom0
> starts xenconsoled, xl console can be used to access the domU's hvc0.
>
> Update the console.h header to bring in the new field.
>
> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
Aside from the minor comment on the commit message:
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> drivers/tty/hvc/hvc_xen.c | 3 +++
> include/xen/interface/io/console.h | 13 +++++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
> index 7f0b6262488c..c407592442cd 100644
> --- a/drivers/tty/hvc/hvc_xen.c
> +++ b/drivers/tty/hvc/hvc_xen.c
> @@ -139,6 +139,9 @@ static ssize_t domU_write_console(uint32_t vtermno, const u8 *data, size_t len)
> if (cons == NULL)
> return -EINVAL;
>
> + if (cons->intf->connection == XENCONSOLE_DISCONNECTED)
> + return -ENOTCONN;
> +
> /*
> * Make sure the whole buffer is emitted, polling if
> * necessary. We don't ever want to rely on the hvc daemon
> diff --git a/include/xen/interface/io/console.h b/include/xen/interface/io/console.h
> index cf17e89ed861..687949bdebb1 100644
> --- a/include/xen/interface/io/console.h
> +++ b/include/xen/interface/io/console.h
> @@ -19,6 +19,19 @@ struct xencons_interface {
> char out[2048];
> XENCONS_RING_IDX in_cons, in_prod;
> XENCONS_RING_IDX out_cons, out_prod;
> +/*
> + * Flag values signaling from backend to frontend whether the console is
> + * connected. i.e. Whether it will be serviced and emptied.
> + *
> + * The flag starts as disconnected.
> + */
> +#define XENCONSOLE_DISCONNECTED 1
> +/*
> + * The flag is set to connected when the backend connects and the console
> + * will be serviced.
> + */
> +#define XENCONSOLE_CONNECTED 0
> + uint8_t connection;
> };
>
> #endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-03-13 23:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-12 17:38 [PATCH] hvc/xen: Check console connection flag Jason Andryuk
2026-03-13 8:33 ` Jiri Slaby
2026-03-13 10:44 ` Andrew Cooper
2026-03-13 15:36 ` Jason Andryuk
2026-03-13 22:35 ` Stefano Stabellini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox