mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
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 XENCONSOLE_DISCONNECTED (1) when a domain is built, and xenconsoled will set it to XENCONSOLE_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 XENCONSOLE_DISCONNECTED (1) to try for maximum compatibility. The Xen toolstack has historically zero initialized the console, so it should see XENCONSOLE_CONNECTED (0) by default. If an implemenation used uninitialized memory, only checking for XENCONSOLE_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. Paritally sync console.h from xen.git to bring in the new field. Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com> Signed-off-by: Juergen Gross <jgross@suse.com> Message-ID: <20260318235326.14568-1-jason.andryuk@amd.com>
38 lines
957 B
C
38 lines
957 B
C
/* SPDX-License-Identifier: MIT */
|
|
/******************************************************************************
|
|
* console.h
|
|
*
|
|
* Console I/O interface for Xen guest OSes.
|
|
*
|
|
* Copyright (c) 2005, Keir Fraser
|
|
*/
|
|
|
|
#ifndef __XEN_PUBLIC_IO_CONSOLE_H__
|
|
#define __XEN_PUBLIC_IO_CONSOLE_H__
|
|
|
|
typedef uint32_t XENCONS_RING_IDX;
|
|
|
|
#define MASK_XENCONS_IDX(idx, ring) ((idx) & (sizeof(ring)-1))
|
|
|
|
struct xencons_interface {
|
|
char in[1024];
|
|
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__ */
|