From nobody Fri Oct 31 09:34:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=quarantine dis=quarantine) header.from=proton.me Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748477377124544.0310995492285; Wed, 28 May 2025 17:09:37 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.999630.1380268 (Exim 4.92) (envelope-from ) id 1uKQpf-0001Qv-LA; Thu, 29 May 2025 00:09:15 +0000 Received: by outflank-mailman (output) from mailman id 999630.1380268; Thu, 29 May 2025 00:09:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQpf-0001Qo-ID; Thu, 29 May 2025 00:09:15 +0000 Received: by outflank-mailman (input) for mailman id 999630; Thu, 29 May 2025 00:09:14 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQpe-0001DA-QT for xen-devel@lists.xenproject.org; Thu, 29 May 2025 00:09:14 +0000 Received: from mail-4316.protonmail.ch (mail-4316.protonmail.ch [185.70.43.16]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 273fd3e3-3c21-11f0-a2fe-13f23c93f187; Thu, 29 May 2025 02:09:14 +0200 (CEST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 273fd3e3-3c21-11f0-a2fe-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1748477353; x=1748736553; bh=tw28fhlor8Serb03KD5cH3qsKtDV4rrkKaWcHlVWAj0=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post; b=gDeEiyvYljBZPniWbtkOUGUVP1oVbGUWyPOGYp0yoHc8kS69Qx5eK1XbBP+E/HnPz dXdtG1EgpdO7ak6oX1KqMQO5ssw1+ZOEfuRSYSevRMUu2zKbAtOiZwm8im3AhFrhXN fqiMIhV7wZ4KUNKZf8Hly6jPwOMy34LXDWH3tN0hIKbahkVvett8c8VWqKiBPAz6hF HUGjGzqx0DIy1GUKwTvY1gqhgsNbGt7TFlJpMmqrbvEwz4aJguCM0TB695O4v9GxeR hgJMBGhUOjCVZcv4Dk89GnTnRuvj3JyT/zN7doafCKfK1r/zAYk+6NJjb51vMp991b L10WTihycEjAQ== Date: Thu, 29 May 2025 00:09:07 +0000 To: xen-devel@lists.xenproject.org From: dmkhn@proton.me Cc: andrew.cooper3@citrix.com, anthony.perard@vates.tech, jbeulich@suse.com, julien@xen.org, michal.orzel@amd.com, roger.pau@citrix.com, sstabellini@kernel.org, dmukhin@ford.com, Denis Mukhin Subject: [PATCH v4 1/4] xen/console: rename switch_serial_input() to console_switch_input() Message-ID: <20250529000848.2675903-2-dmukhin@ford.com> In-Reply-To: <20250529000848.2675903-1-dmukhin@ford.com> References: <20250529000848.2675903-1-dmukhin@ford.com> Feedback-ID: 123220910:user:proton X-Pm-Message-ID: f34a96e7af543bd1c1a2afc5a551ab2565a02b8b MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748477378846116600 Content-Type: text/plain; charset="utf-8" From: Denis Mukhin From: Denis Mukhin Update the function name as per naming notation in the console driver. No functional change. Signed-off-by: Denis Mukhin Acked-by: Jan Beulich --- Changes since v3: - added A-b --- xen/drivers/char/console.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index c15987f5bb..30701ae0b0 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -523,7 +523,7 @@ void console_put_domain(struct domain *d) rcu_unlock_domain(d); } =20 -static void switch_serial_input(void) +static void console_switch_input(void) { unsigned int next_rx =3D console_rx; =20 @@ -617,7 +617,7 @@ static void cf_check serial_rx(char c) /* We eat CTRL- in groups of 3 to switch console inpu= t. */ if ( ++switch_code_count =3D=3D 3 ) { - switch_serial_input(); + console_switch_input(); switch_code_count =3D 0; } return; @@ -1171,7 +1171,7 @@ void __init console_endboot(void) "toggle host/guest log level adjustment", 0); =20 /* Serial input is directed to DOM0 by default. */ - switch_serial_input(); + console_switch_input(); } =20 int __init console_has(const char *device) --=20 2.34.1 From nobody Fri Oct 31 09:34:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=quarantine dis=quarantine) header.from=proton.me Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748477380078389.63471122589; Wed, 28 May 2025 17:09:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.999631.1380278 (Exim 4.92) (envelope-from ) id 1uKQpp-0001la-S5; Thu, 29 May 2025 00:09:25 +0000 Received: by outflank-mailman (output) from mailman id 999631.1380278; Thu, 29 May 2025 00:09:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQpp-0001lO-PB; Thu, 29 May 2025 00:09:25 +0000 Received: by outflank-mailman (input) for mailman id 999631; Thu, 29 May 2025 00:09:24 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQpo-0001jK-8V for xen-devel@lists.xenproject.org; Thu, 29 May 2025 00:09:24 +0000 Received: from mail-4322.protonmail.ch (mail-4322.protonmail.ch [185.70.43.22]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 2c133c1b-3c21-11f0-b894-0df219b8e170; Thu, 29 May 2025 02:09:22 +0200 (CEST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 2c133c1b-3c21-11f0-b894-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=lap6eqxgx5h6fdnttjh5rukxzq.protonmail; t=1748477361; x=1748736561; bh=jzf21RiTT8DiWXO5zvxTBJmuSMKUTUDtUbb819XfgDE=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post; b=BI6RG6gEcstpbcW2FLgfjj6FS6OhGEj+yoC8+SRVydf78gd6xTN88jiH5sOF7/FWX 3RZEfgYrwEh7C2ONW11Dj5hnKtf7qrOly0cNA6/1PHJSXmxpfcMouLTafbGwInD5CX 2kMbFKF2wU9OBra8ogt+jTwAAhFEKUcq9Fiq0hszhdMsT6e72438Nssy99NG0cERGU lVAE3sraU2urqsfLMeE8Qrnz7cKlvt9Io+DAR8z4XUwGEgc6wq1AynynOl8OL/O68i 7Cl4i3l0ZEU5Fb243jhYFD0xIoI5ZB4sKcNSrpG1aBmbWRdwKcVi1mnrRRgiQIA62z ErDh+IHKz3eSg== Date: Thu, 29 May 2025 00:09:16 +0000 To: xen-devel@lists.xenproject.org From: dmkhn@proton.me Cc: andrew.cooper3@citrix.com, anthony.perard@vates.tech, jbeulich@suse.com, julien@xen.org, michal.orzel@amd.com, roger.pau@citrix.com, sstabellini@kernel.org, dmukhin@ford.com, Denis Mukhin Subject: [PATCH v4 2/4] xen/console: introduce console input permission Message-ID: <20250529000848.2675903-3-dmukhin@ford.com> In-Reply-To: <20250529000848.2675903-1-dmukhin@ford.com> References: <20250529000848.2675903-1-dmukhin@ford.com> Feedback-ID: 123220910:user:proton X-Pm-Message-ID: 76aefcade98c859c86de15b7c2dd774b89ef8e98 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748477383094116600 Content-Type: text/plain; charset="utf-8" From: Denis Mukhin From: Denis Mukhin Add new flag to domain structure for marking permission to intercept the physical console input by the domain. Update console input switch logic accordingly. No functional change intended. Signed-off-by: Denis Mukhin --- Changes since v3: - rebased --- xen/arch/arm/vpl011.c | 2 ++ xen/arch/x86/pv/shim.c | 2 ++ xen/common/domain.c | 2 ++ xen/drivers/char/console.c | 18 +++++++++++++++++- xen/include/xen/sched.h | 8 +++++++- 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c index 66047bf33c..147958eee8 100644 --- a/xen/arch/arm/vpl011.c +++ b/xen/arch/arm/vpl011.c @@ -737,6 +737,8 @@ int domain_vpl011_init(struct domain *d, struct vpl011_= init_info *info) register_mmio_handler(d, &vpl011_mmio_handler, vpl011->base_addr, GUEST_PL011_SIZE, NULL); =20 + d->console.input_allowed =3D true; + return 0; =20 out1: diff --git a/xen/arch/x86/pv/shim.c b/xen/arch/x86/pv/shim.c index c506cc0bec..bc2a7dd5fa 100644 --- a/xen/arch/x86/pv/shim.c +++ b/xen/arch/x86/pv/shim.c @@ -238,6 +238,8 @@ void __init pv_shim_setup_dom(struct domain *d, l4_pgen= try_t *l4start, * guest from depleting the shim memory pool. */ d->max_pages =3D domain_tot_pages(d); + + d->console.input_allowed =3D true; } =20 static void write_start_info(struct domain *d) diff --git a/xen/common/domain.c b/xen/common/domain.c index 87e5be35e5..9bc66d80c4 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -835,6 +835,8 @@ struct domain *domain_create(domid_t domid, flags |=3D CDF_hardware; if ( old_hwdom ) old_hwdom->cdf &=3D ~CDF_hardware; + + d->console.input_allowed =3D true; } =20 /* Holding CDF_* internal flags. */ diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 30701ae0b0..8a0bcff78f 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -512,9 +512,21 @@ static unsigned int __read_mostly console_rx =3D 0; =20 struct domain *console_get_domain(void) { + struct domain *d; + if ( console_rx =3D=3D 0 ) return NULL; - return rcu_lock_domain_by_id(console_rx - 1); + + d =3D rcu_lock_domain_by_id(console_rx - 1); + if ( !d ) + return NULL; + + if ( d->console.input_allowed ) + return d; + + rcu_unlock_domain(d); + + return NULL; } =20 void console_put_domain(struct domain *d) @@ -551,6 +563,10 @@ static void console_switch_input(void) if ( d ) { rcu_unlock_domain(d); + + if ( !d->console.input_allowed ) + break; + console_rx =3D next_rx; printk("*** Serial input to DOM%u", domid); break; diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 559d201e0c..e91c99a8f3 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -512,7 +512,7 @@ struct domain bool auto_node_affinity; /* Is this guest fully privileged (aka dom0)? */ bool is_privileged; - /* Can this guest access the Xen console? */ + /* XSM: permission to use HYPERCALL_console_io hypercall */ bool is_console; /* Is this guest being debugged by dom0? */ bool debugger_attached; @@ -651,6 +651,12 @@ struct domain unsigned int num_llc_colors; const unsigned int *llc_colors; #endif + + /* Console settings. */ + struct { + /* Permission to take ownership of the physical console input. */ + bool input_allowed; + } console; } __aligned(PAGE_SIZE); =20 static inline struct page_list_head *page_to_list( --=20 2.34.1 From nobody Fri Oct 31 09:34:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=quarantine dis=quarantine) header.from=proton.me Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748477386466804.7547282599078; Wed, 28 May 2025 17:09:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.999635.1380288 (Exim 4.92) (envelope-from ) id 1uKQpz-0002EB-31; Thu, 29 May 2025 00:09:35 +0000 Received: by outflank-mailman (output) from mailman id 999635.1380288; Thu, 29 May 2025 00:09:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQpy-0002E0-Vs; Thu, 29 May 2025 00:09:34 +0000 Received: by outflank-mailman (input) for mailman id 999635; Thu, 29 May 2025 00:09:33 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQpx-0001jK-No for xen-devel@lists.xenproject.org; Thu, 29 May 2025 00:09:33 +0000 Received: from mail-4322.protonmail.ch (mail-4322.protonmail.ch [185.70.43.22]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 320ad958-3c21-11f0-b894-0df219b8e170; Thu, 29 May 2025 02:09:32 +0200 (CEST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 320ad958-3c21-11f0-b894-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1748477371; x=1748736571; bh=0skLNgJFjNJh5aiOVY4PUtt+98l4mBcX8VEDioGrAkY=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post; b=kW0Y1HwSg4EyuYdrjhcKmBHgshW3wy/8GGay0okocuyMibHC9TFAT/knQlLP3pRpD SlUux3jcm4I6C7Fz2QEKQdmsdncMmjA/VdB/XeQLngixhc/quEQ49fRVaMK9wAw1Wa va9tKl8FpdddygOoW/2uYEZuagVYWtiiPKKB3ca56Vue15xn9AUmyZrvyrWTAajFdW 5ofIqtNv9C5++wM1C1IuWH+sUuTx6WX8q6ivJ01/16FOFFMibt6EdPOave3i2vLqWv w9EoiD0fFZ/lUjZQm5gVxuigcQLjOPDNAgVynvYP4SJHcIDSXd+S7IP97Vh7+KPVlO wGHbU9QcV77gQ== Date: Thu, 29 May 2025 00:09:25 +0000 To: xen-devel@lists.xenproject.org From: dmkhn@proton.me Cc: andrew.cooper3@citrix.com, anthony.perard@vates.tech, jbeulich@suse.com, julien@xen.org, michal.orzel@amd.com, roger.pau@citrix.com, sstabellini@kernel.org, dmukhin@ford.com, Denis Mukhin Subject: [PATCH v4 3/4] xen/console: remove max_init_domid dependency Message-ID: <20250529000848.2675903-4-dmukhin@ford.com> In-Reply-To: <20250529000848.2675903-1-dmukhin@ford.com> References: <20250529000848.2675903-1-dmukhin@ford.com> Feedback-ID: 123220910:user:proton X-Pm-Message-ID: 1405eefedef24d684aff73550bf670c2c67bffbe MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748477386968116600 Content-Type: text/plain; charset="utf-8" From: Denis Mukhin From: Denis Mukhin The physical console input rotation depends on max_init_domid symbol, which= is managed differently across architectures. Instead of trying to manage max_init_domid in the arch-common code the cons= ole input rotation code can be reworked by removing dependency on max_init_domid entirely. To do that, introduce domid_find_with_input_allowed() in arch-independent location to find the ID of the next possible console owner domain. The IDs are rotated across non-system domain IDs and DOMID_XEN. Also, introduce helper console_set_domid() for updating identifier of the current console input owner (points to Xen or domain). Use domid_find_with_input_allowed() and console_set_domid() in console_switch_input(). Remove uses of max_init_domid in the code. Signed-off-by: Denis Mukhin --- Changes since v3: - switched to RCU lock in domid_find_with_input_allowed() --- xen/arch/arm/include/asm/setup.h | 2 - xen/arch/arm/setup.c | 2 - xen/arch/ppc/include/asm/setup.h | 2 - xen/arch/riscv/include/asm/setup.h | 2 - xen/arch/x86/include/asm/setup.h | 2 - xen/common/device-tree/dom0less-build.c | 2 - xen/common/domain.c | 29 ++++++++ xen/drivers/char/console.c | 90 +++++++++---------------- xen/include/xen/domain.h | 1 + 9 files changed, 61 insertions(+), 71 deletions(-) diff --git a/xen/arch/arm/include/asm/setup.h b/xen/arch/arm/include/asm/se= tup.h index 6cf272c160..f107e8eebb 100644 --- a/xen/arch/arm/include/asm/setup.h +++ b/xen/arch/arm/include/asm/setup.h @@ -25,8 +25,6 @@ struct map_range_data struct rangeset *irq_ranges; }; =20 -extern domid_t max_init_domid; - void copy_from_paddr(void *dst, paddr_t paddr, unsigned long len); =20 size_t estimate_efi_size(unsigned int mem_nr_banks); diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c index 10b46d0684..53e2f8b537 100644 --- a/xen/arch/arm/setup.c +++ b/xen/arch/arm/setup.c @@ -61,8 +61,6 @@ struct cpuinfo_arm __read_mostly system_cpuinfo; bool __read_mostly acpi_disabled; #endif =20 -domid_t __read_mostly max_init_domid; - static __used void init_done(void) { int rc; diff --git a/xen/arch/ppc/include/asm/setup.h b/xen/arch/ppc/include/asm/se= tup.h index e4f64879b6..956fa6985a 100644 --- a/xen/arch/ppc/include/asm/setup.h +++ b/xen/arch/ppc/include/asm/setup.h @@ -1,6 +1,4 @@ #ifndef __ASM_PPC_SETUP_H__ #define __ASM_PPC_SETUP_H__ =20 -#define max_init_domid (0) - #endif /* __ASM_PPC_SETUP_H__ */ diff --git a/xen/arch/riscv/include/asm/setup.h b/xen/arch/riscv/include/as= m/setup.h index c9d69cdf51..d1fc64b673 100644 --- a/xen/arch/riscv/include/asm/setup.h +++ b/xen/arch/riscv/include/asm/setup.h @@ -5,8 +5,6 @@ =20 #include =20 -#define max_init_domid (0) - void setup_mm(void); =20 void copy_from_paddr(void *dst, paddr_t paddr, unsigned long len); diff --git a/xen/arch/x86/include/asm/setup.h b/xen/arch/x86/include/asm/se= tup.h index ac34c69855..b67de8577f 100644 --- a/xen/arch/x86/include/asm/setup.h +++ b/xen/arch/x86/include/asm/setup.h @@ -69,6 +69,4 @@ extern bool opt_dom0_verbose; extern bool opt_dom0_cpuid_faulting; extern bool opt_dom0_msr_relaxed; =20 -#define max_init_domid (0) - #endif diff --git a/xen/common/device-tree/dom0less-build.c b/xen/common/device-tr= ee/dom0less-build.c index 9a6015f4ce..703f20faed 100644 --- a/xen/common/device-tree/dom0less-build.c +++ b/xen/common/device-tree/dom0less-build.c @@ -977,8 +977,6 @@ void __init create_domUs(void) domid =3D domid_alloc(DOMID_INVALID); if ( domid =3D=3D DOMID_INVALID ) panic("Error allocating ID for domain %s\n", dt_node_name(node= )); - if ( max_init_domid < domid ) - max_init_domid =3D domid; =20 d =3D domain_create(domid, &d_cfg, flags); if ( IS_ERR(d) ) diff --git a/xen/common/domain.c b/xen/common/domain.c index 9bc66d80c4..704e0907e9 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -2463,6 +2463,35 @@ void domid_free(domid_t domid) spin_unlock(&domid_lock); } =20 +/* + * Find the ID of the next possible console owner domain. + * + * @return Domain ID: DOMID_XEN or non-system domain IDs within + * the range of [0..DOMID_FIRST_RESERVED-1]. + */ +domid_t domid_find_with_input_allowed(domid_t hint) +{ + const struct domain *d; + domid_t domid =3D DOMID_XEN; + + rcu_read_lock(&domlist_read_lock); + + for ( d =3D rcu_dereference(domain_list); + d && d->domain_id < DOMID_FIRST_RESERVED; + d =3D rcu_dereference(d->next_in_list) ) + { + if ( d->console.input_allowed ) + { + domid =3D d->domain_id; + break; + } + } + + rcu_read_unlock(&domlist_read_lock); + + return domid; +} + /* * Local variables: * mode: C diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 8a0bcff78f..37289d5558 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -498,26 +498,17 @@ static void cf_check conring_dump_keyhandler(unsigned= char key) =20 /* * CTRL- changes input direction, rotating among Xen, Dom0, - * and the DomUs started from Xen at boot. + * and the DomUs. */ #define switch_code (opt_conswitch[0]-'a'+1) -/* - * console_rx=3D0 =3D> input to xen - * console_rx=3D1 =3D> input to dom0 (or the sole shim domain) - * console_rx=3DN =3D> input to dom(N-1) - */ -static unsigned int __read_mostly console_rx =3D 0; =20 -#define max_console_rx (max_init_domid + 1) +/* Console owner domain identifier. */ +static domid_t __read_mostly console_rx =3D DOMID_XEN; =20 struct domain *console_get_domain(void) { - struct domain *d; + struct domain *d =3D rcu_lock_domain_by_id(console_rx); =20 - if ( console_rx =3D=3D 0 ) - return NULL; - - d =3D rcu_lock_domain_by_id(console_rx - 1); if ( !d ) return NULL; =20 @@ -535,43 +526,14 @@ void console_put_domain(struct domain *d) rcu_unlock_domain(d); } =20 -static void console_switch_input(void) +static void console_set_domid(domid_t domid) { - unsigned int next_rx =3D console_rx; + if ( domid =3D=3D DOMID_XEN ) + printk("*** Serial input to Xen"); + else + printk("*** Serial input to DOM%u", domid); =20 - /* - * Rotate among Xen, dom0 and boot-time created domUs while skipping - * switching serial input to non existing domains. - */ - for ( ; ; ) - { - domid_t domid; - struct domain *d; - - if ( next_rx++ >=3D max_console_rx ) - { - console_rx =3D 0; - printk("*** Serial input to Xen"); - break; - } - - if ( consoled_is_enabled() && next_rx =3D=3D 1 ) - domid =3D get_initial_domain_id(); - else - domid =3D next_rx - 1; - d =3D rcu_lock_domain_by_id(domid); - if ( d ) - { - rcu_unlock_domain(d); - - if ( !d->console.input_allowed ) - break; - - console_rx =3D next_rx; - printk("*** Serial input to DOM%u", domid); - break; - } - } + console_rx =3D domid; =20 if ( switch_code ) printk(" (type 'CTRL-%c' three times to switch input)", @@ -579,12 +541,30 @@ static void console_switch_input(void) printk("\n"); } =20 +/* + * Switch console focus. + * Rotates input focus among Xen and domains with console input permission. + */ +static void console_switch_input(void) +{ + domid_t hint; + + if ( console_rx =3D=3D DOMID_XEN ) + hint =3D get_initial_domain_id(); + else + hint =3D console_rx + 1; + + hint =3D domid_find_with_input_allowed(hint); + + console_set_domid(hint); +} + static void __serial_rx(char c) { struct domain *d; int rc =3D 0; =20 - if ( console_rx =3D=3D 0 ) + if ( console_rx =3D=3D DOMID_XEN ) return handle_keypress(c, false); =20 d =3D console_get_domain(); @@ -1169,14 +1149,6 @@ void __init console_endboot(void) =20 video_endboot(); =20 - /* - * If user specifies so, we fool the switch routine to redirect input - * straight back to Xen. I use this convoluted method so we still print - * a useful 'how to switch' message. - */ - if ( opt_conswitch[1] =3D=3D 'x' ) - console_rx =3D max_console_rx; - register_keyhandler('w', conring_dump_keyhandler, "synchronously dump console ring buffer (dmesg)", = 0); register_irq_keyhandler('+', &do_inc_thresh, @@ -1186,8 +1158,8 @@ void __init console_endboot(void) register_irq_keyhandler('G', &do_toggle_guest, "toggle host/guest log level adjustment", 0); =20 - /* Serial input is directed to DOM0 by default. */ - console_switch_input(); + if ( opt_conswitch[1] !=3D 'x' ) + (void)console_set_domid(get_initial_domain_id()); } =20 int __init console_has(const char *device) diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h index 8aab05ae93..a88eb34f3f 100644 --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -36,6 +36,7 @@ void getdomaininfo(struct domain *d, struct xen_domctl_ge= tdomaininfo *info); void arch_get_domain_info(const struct domain *d, struct xen_domctl_getdomaininfo *info); =20 +domid_t domid_find_with_input_allowed(domid_t hint); domid_t get_initial_domain_id(void); =20 domid_t domid_alloc(domid_t domid); --=20 2.34.1 From nobody Fri Oct 31 09:34:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=quarantine dis=quarantine) header.from=proton.me Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1748477396756835.1555648385794; Wed, 28 May 2025 17:09:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.999641.1380298 (Exim 4.92) (envelope-from ) id 1uKQq8-0002kw-Es; Thu, 29 May 2025 00:09:44 +0000 Received: by outflank-mailman (output) from mailman id 999641.1380298; Thu, 29 May 2025 00:09:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQq8-0002kp-BW; Thu, 29 May 2025 00:09:44 +0000 Received: by outflank-mailman (input) for mailman id 999641; Thu, 29 May 2025 00:09:43 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uKQq7-0001DA-3I for xen-devel@lists.xenproject.org; Thu, 29 May 2025 00:09:43 +0000 Received: from mail-10629.protonmail.ch (mail-10629.protonmail.ch [79.135.106.29]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 37f7b94e-3c21-11f0-a2fe-13f23c93f187; Thu, 29 May 2025 02:09:42 +0200 (CEST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 37f7b94e-3c21-11f0-a2fe-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=ghqaxxcv45cl7fyiznlbczu2yy.protonmail; t=1748477380; x=1748736580; bh=JV3YAPhRyMLPMXyY36U8GAXKlkqRXgyfF9gHz3Sj7r8=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post; b=JkdCKkwAap68hjfQUGsajp7vqjGabcQCW2ufFZX7tEvrwejogKRPzad3cJp2viM3o g4Jbv1wTU9sxneHrALz9Xwwx1VCp6MXLoy6s9BSUhCiqLNN1etiOdi+ZEzlNNQlEvb Rv6aeDf+J7/t26GU1vuSpwldKI+TjXK2Y9VQ1HaU9hbWusTmFgR1iBda8fbvd0o4Dn 724PuqWNQindRpgHrEddrTexKhNVPOK360GIgS4Gn3O/uFa4emeMfOC8r/NYttLbLK IkM5aAaHQ3ImPvSFBIVMZ8zmAKwg3KRHmIV7JMj2GjNioKJan1+vi5+WkHCTpnT7ws XamyBnW1T0sng== Date: Thu, 29 May 2025 00:09:34 +0000 To: xen-devel@lists.xenproject.org From: dmkhn@proton.me Cc: andrew.cooper3@citrix.com, anthony.perard@vates.tech, jbeulich@suse.com, julien@xen.org, michal.orzel@amd.com, roger.pau@citrix.com, sstabellini@kernel.org, dmukhin@ford.com, Denis Mukhin Subject: [PATCH v4 4/4] xen/console: rename console_rx to console_domid Message-ID: <20250529000848.2675903-5-dmukhin@ford.com> In-Reply-To: <20250529000848.2675903-1-dmukhin@ford.com> References: <20250529000848.2675903-1-dmukhin@ford.com> Feedback-ID: 123220910:user:proton X-Pm-Message-ID: a91093b0d86f4203b791c35811867f46e38c951d MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748477399003116600 Content-Type: text/plain; charset="utf-8" From: Denis Mukhin From: Denis Mukhin Update the symbol name to match the code better. No functional change. Signed-off-by: Denis Mukhin --- Changes since v3: - rebased --- xen/drivers/char/console.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 37289d5558..5797f29d31 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -503,11 +503,11 @@ static void cf_check conring_dump_keyhandler(unsigned= char key) #define switch_code (opt_conswitch[0]-'a'+1) =20 /* Console owner domain identifier. */ -static domid_t __read_mostly console_rx =3D DOMID_XEN; +static domid_t __read_mostly console_domid =3D DOMID_XEN; =20 struct domain *console_get_domain(void) { - struct domain *d =3D rcu_lock_domain_by_id(console_rx); + struct domain *d =3D rcu_lock_domain_by_id(console_domid); =20 if ( !d ) return NULL; @@ -533,7 +533,7 @@ static void console_set_domid(domid_t domid) else printk("*** Serial input to DOM%u", domid); =20 - console_rx =3D domid; + console_domid =3D domid; =20 if ( switch_code ) printk(" (type 'CTRL-%c' three times to switch input)", @@ -549,10 +549,10 @@ static void console_switch_input(void) { domid_t hint; =20 - if ( console_rx =3D=3D DOMID_XEN ) + if ( console_domid =3D=3D DOMID_XEN ) hint =3D get_initial_domain_id(); else - hint =3D console_rx + 1; + hint =3D console_domid + 1; =20 hint =3D domid_find_with_input_allowed(hint); =20 @@ -564,7 +564,7 @@ static void __serial_rx(char c) struct domain *d; int rc =3D 0; =20 - if ( console_rx =3D=3D DOMID_XEN ) + if ( console_domid =3D=3D DOMID_XEN ) return handle_keypress(c, false); =20 d =3D console_get_domain(); --=20 2.34.1