From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11020073.outbound.protection.outlook.com [52.101.69.73]) by lore.virtuozzo.com (Postfix) with ESMTPS id E079D802A5 for ; Mon, 5 Oct 2026 09:26:44 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ui04YNuHR9w5Kb6CC0SS52YztnS4k7A5C3qfY/HfYndW5eK55HUWLEPrq4X3AoFsUqFCYVd/Sod6GcZNdJbbc6J0Vx19FeX31M/3YFwj8oX201jifGghg7A+kYN2Xnw3MujiYyGSD2aHnHRURrHFACacgKCF3cK6HXvann3LBj8fm3alXvveV1jYd9zKRpI6AvtyA2HPjgf5nGh0pW26b2/YMWLh9EtsIuWFuRDDDqqnuvlpUlnmOI+h4paCB2EJZN/TxpMNrg26DcFmECGvzkzxFdtWPQFwa660RvhjI6WYs0Oq1jvFQfMQYu3OqR+gHRUku6ZacqZ+mBKpYxmbog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fuKVnedtJQzgz94Nobeh0lngb5nLJfW/bn6icq8GHm0=; b=vNMPVrTBE3WCZ8RkPekhQpy5G/HVjZFLVPeDlfnNkacGYGiQRwBf0LP9Ltit+vmsS1XZc8Yd1QVwx8dhQKpKVHBHqA8Wtb0OwWVdpiaPoFExxQTfDhzeIBZfkwARudpNAASQmfUqOEmOaYNg7LkqqtyKMf7m7JB1J04/nz38v0QDETsYWt9I+QsnpVsvVCSvQsdGQpuP6WGcok3E3CDFt2S6CEEUwkar6pYWLGbHlb7blkvkAAyAWwQVn2xHnlD5HspkgNJqT2SB3DALcVeV8Vdry6MyBMqDggkKnbVlxFmhB3ua/tZvAGiGe26yPNMdncxhzQVBv+1QB14cgV3t8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 2a00:1450:4864:30::10) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=openvz.org; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=openvz.org; dkim=pass (signature was verified) header.d=openvz.org; arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.onmicrosoft.com; s=selector2-virtuozzo-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fuKVnedtJQzgz94Nobeh0lngb5nLJfW/bn6icq8GHm0=; b=EeEysFHR8MAZneBwWnQNvUpIuW384nXZe4qOD+1wsP6vf953JWAfnjCjjUJs2+vswVLvXGMPSMP2uyCn77LlTD/zpZgfnhZT3z85J2mEG1uTqVHD3sFkLvSoh47TpLhSK5OWX8kRCKIBCEsR7lUPuG70gJPYv41OVdZaNmvGmGg= Received: from PR3P189CA0088.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::33) by AMCPR08MB11971.eurprd08.prod.outlook.com (2603:10a6:20b:76e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.14; Mon, 5 Oct 2026 09:26:40 +0000 Received: from MI3PEPF00008551.eurprd05.prod.outlook.com (2603:10a6:102:b4:cafe::1d) by PR3P189CA0088.outlook.office365.com (2603:10a6:102:b4::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.472.20 via Frontend Transport; Mon, 5 Oct 2026 09:26:40 +0000 Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 2a00:1450:4864:30::10) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org; Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:30::10 as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:30::10; helo=mail-wr2-x10.google.com; pr=C Received: from mail-wr2-x10.google.com (2a00:1450:4864:30::10) by MI3PEPF00008551.mail.protection.outlook.com (2603:10a6:298:1::85) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.472.14 via Frontend Transport; Mon, 5 Oct 2026 09:26:40 +0000 Received: by mail-wr2-x10.google.com with SMTP id ffacd0b85a97d-482f6350f91so681513f8f.1 for ; Mon, 05 Oct 2026 02:26:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1791192399; x=1791797199; darn=virtuozzo.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fuKVnedtJQzgz94Nobeh0lngb5nLJfW/bn6icq8GHm0=; b=HtFjF8DEOOLzqYKdR2eUaYZiyIRP3mBT1pDeZGPcs9Mpwi6i1prkv6QBvc/7eA1K/Z I1DxVxiVtP2s1P5cec7nOKXf2s347GxCUnFvKW+caCqQMate9kcIhRfihG7ZZnguglyo jFvy+iYc0B3ZoQoT2oy48g6LeKwHZ4LrcODO3fPE1drTmpWB40yK0U/ByXXy8UnD0Kqe ZPWNElvdfD+wYLFcMNecXrJSuzSev7cn7Jnq2PyDGqkNMKQX6qNxMZXEHvVh7sfU3Qvz J1WZ6nEYqYfF4pSwfFzjNKV8cPElkgMg5PSBv07YzHHtyz5AAE67KwiQaX7OxwiKB3sY BmkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791192399; x=1791797199; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=fuKVnedtJQzgz94Nobeh0lngb5nLJfW/bn6icq8GHm0=; b=fPzqiXAqrr5a1xrUEabnX2W7V9fTmmjQaq/q9kAaAvaJPScH6yXHGQdoFMOba0T7Ep BN7k84wZP4A5BjjNeNiTu4JCGzlppxIL7dwhVgnQAzVP9dFOI1xIXCK4COUY/8bWyeMy 9qu/H7jsbzBtomgPXE1OnPylKnDM3wuQCKA4e8b/BGRjb1GTiJPkF1jZtNmoHvtL+zTc e+nJmQPLxpFwRovLuo53O8NHSPUzlPeE5dR77U8IAAuiQr3UOnd6MQdd+kQ+YtcgNqM2 Fn2PxeWlbcZ+JMCV0rPQulS5IJ4LdXypCvvLlqer8ZG1uJenbCzL89qtYGCqjM6WtiHd FhDw== X-Gm-Message-State: AFq9FYJ2rRMxUn0yZ/Iu04kdTnoIsFVkKaQ5y/t2pGNGBbHmPqPRpZ9J u8/mlFRg8qNx2AzrO5xYD92EjxPI9iY798AnulPrx6RSQp7Kygk+RvRxGSZXGbrWFYYF18Ty5NV KSBBhYB8= X-Gm-Gg: AYBFou0Be9xPiUUBpp/Ywixo/jjaXR7+Nk881URSEDAFsFqLtcmW3WxQYvy3by+0/+C w0eLEpVcf7mEO3cc8US7FkkHIOODDbn84Z3Z4GKBvFgeEK6v6EjlC9sLeN+d8GPr2oeyjNoJ7W/ jLK3uWT+XhI1MuUnDdUeOQjKvPzSiBbyBSokRCdHuX/jIfidVmptFIZM+l5G55Tx6Nj595dqFVo XQXXLPBaXCaJYSZuUNBSe5Jk3ECHDcjOnjx5tObWaepSeSpZ/O+JbwRSy4lUKmU5aZfDLbLkwV3 81q7en0QsE5nJJv8bFh+WDrmnYllf3N1DNZRqrVvaBKZZKMgjmDfrcjUxeFwH+c2xYwitUHIRMO liT6Vj9xZl30PwjUbnatFYyL4NXQLCTAZYedMIXHgP2zv4s1QedOToVS/ZfCETb7jqhdTNSNsxl 863aWXrGRtN5/bFBTuwnEJjD87V2R+BPK52mCfaq5aLapEdSByySrvK/JfMGsplv3EMz4= X-Received: by 2002:a05:6000:2912:b0:48a:fba3:d5b6 with SMTP id ffacd0b85a97d-48b127764cbmr17867783f8f.56.1791192399236; Mon, 05 Oct 2026 02:26:39 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:bff9:47a9:54d2:1c0b]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48c62270739sm2434715f8f.11.2026.10.05.02.26.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Oct 2026 02:26:38 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.0 v2 1/3] chardev: implement cpr_claim_fds() in the base class #VSTOR-148304 Date: Mon, 5 Oct 2026 11:26:33 +0200 Message-ID: <20261005092635.3564485-2-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261005092635.3564485-1-den@openvz.org> References: <20261005092635.3564485-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MI3PEPF00008551:EE_|AMCPR08MB11971:EE_ X-MS-Office365-Filtering-Correlation-Id: c5101990-c466-435b-e004-08df22c2c30e X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 0 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|9140799003|376014|61400799027|82310400026|48200799018|6059299003|43022699015|10067099003|5063699009|56012099006|3023799007|16102099003|22082099003|18002099003|55112099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Df8YZoJDJfP1/QhVOCufjwpiHMgm4a3x99XtCA1G/T6E/wXvazOqh4RU/ugl?= =?us-ascii?Q?wFHsgV2SRomSJ6vXh9aiEzN9MxtqLGJn7ahHB0jpgIbZxhi77laFjApf2tgE?= =?us-ascii?Q?9dX3ndEceDUDaMK7G7IcRo3JYBaXxw4DHdmgt2rtnTgJcRfqVee3eVpvZIOX?= =?us-ascii?Q?4Fx8tOgvEZbJ47MLkdI+YAHo/JrGTEX4l+8ZE9EANBmS6gv/iqjz1LbsSclj?= =?us-ascii?Q?3AML+Qa2F7Jb0kppI/QVr1SL9WJ8ZgsFxQmlGdIzG3oTCd5yGzbEUk3UEITl?= =?us-ascii?Q?dW6ZejfGN1VnbwyPRhA7MzMc2EyNYAm/DS4xHyltE6I00P9KFPijNwLE28mH?= =?us-ascii?Q?Jmkpmlmr/o/G0GDF3GtjTLycGl07SXPmu/oihAZENmlNX9PJcUBKcLFhPE+l?= =?us-ascii?Q?WjxpmImATIZr4QoamDcOVmV6mZD1lcTMXH069RiaCjbF9Dxtggc0R0L2mCr5?= =?us-ascii?Q?zpF0McOdf6nH3et1AWWkkUIZJZoDd8jPOu2Zh7umUYMEu1CmVwJePpZDc8Rc?= =?us-ascii?Q?q9pU9mTPgco+kGyZT1v1owYNsljNV2QSqDRt23qRMnJnFi66Eh4pRHDjprZS?= =?us-ascii?Q?w5B9evaSJ2uydIDgOIJOXjF1PSshAwH/TF7PdzrnVMsZ4MZSiExOI5QLhpyd?= =?us-ascii?Q?KkJuKxtseNVeL+76nap/cVtVKAsr8HLQeqNCzqABGRg4J6uL5TA8P2i2mCuQ?= =?us-ascii?Q?P4naSfJKlN3QacJ1/NU8+t8XhuUe/Sr2aBre0U+ZfXWQM37dYAvm5mW2LCGU?= =?us-ascii?Q?1RT/Y0RnVfHLEWbdlLH5qft3/Fx/rGcNaizg1hDM4k9QSPYV0v2TqW/aRRy7?= =?us-ascii?Q?yTHJGtzulo4ee2qJbr8DA2cZ5sXVUxRPqsL2yAljcOQQu2ZXDzJ/UTgWuELW?= =?us-ascii?Q?zmoN1XSwz1ATwUeCsX067D7IcPHp6KHMnuyMABfgGLGDV7yEi7JiU25y+QnM?= =?us-ascii?Q?TsfKUv6/Z/XetPZreDJmK4PBEt5Gu0JdYVl646rTP80xvZ2jQgCsN4nUjnyS?= =?us-ascii?Q?ukmpIF9DPbkESLBYGM2AlAhPg2kKGR71IcVkm6EOsvKISdQ=3D?= X-Forefront-Antispam-Report: CIP:2a00:1450:4864:30::10;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wr2-x10.google.com;PTR:mail-wr2-x10.google.com;CAT:NONE;SFS:(13230040)(9140799003)(376014)(61400799027)(82310400026)(48200799018)(6059299003)(43022699015)(10067099003)(5063699009)(56012099006)(3023799007)(16102099003)(22082099003)(18002099003)(55112099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3hPSYV/3dHae5Z0lgSr1iSW5yDVhfv11K6LUXvYrvAS6KTs+SvOgerZHTQmBxotz1djMIQnY143bmFxks1lau7Y3dLk5XS7GoRJYbI3KqZrLcUWPChTcXweTKXxTcMy+9BT/3QE4pR6eQXswa76a53PzaP7twfIYHGW/4VpRmXVNSbMApFimO2efkAGvALtjlslNJGVpPR1TSmAI7oZ3nDETbqwve/9rHywYf7KEWZAamfHQWUbhmXIBMKm0FXRc7Cv0EOoBXwj08WKewIzLXTi40nqV3pKTXwbbCoQ1JfgcgSZW+t2cjMcugBfuUjWep7WeYa1WJPd3Br1z+W7dl65xuhflRbhJvLrei5+YncXSQ++41nl9odsnc0JsZL7gJ8EsHKccS2xgE8p0/diHqrZb8gVO9FS+vNQHLK/Qjk1/Aqg1o0ojigBclhu8XuwY X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Oct 2026 09:26:40.0749 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c5101990-c466-435b-e004-08df22c2c30e X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: MI3PEPF00008551.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMCPR08MB11971 List-Id: From: Denis V. Lunev Give TYPE_CHARDEV an empty cpr_claim_fds() and make the file, pty and socket backends chain to their parent's. Every chardev class then has the hook, so qmp_chardev_change() calls it without a NULL check, and state owned by the base class can be re-claimed there as well. No functional change. Signed-off-by: Denis V. Lunev Reviewed-by: Andrey Drobyshev --- chardev/char-file.c | 3 +++ chardev/char-pty.c | 3 +++ chardev/char-socket.c | 3 +++ chardev/char.c | 13 +++++++------ include/chardev/char.h | 5 ++++- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/chardev/char-file.c b/chardev/char-file.c index a90f4a77e13..89011f52e3e 100644 --- a/chardev/char-file.c +++ b/chardev/char-file.c @@ -124,7 +124,10 @@ out_close: static void char_file_cpr_claim_fds(Chardev *chr) { FDChardev *s = FD_CHARDEV(chr); + ChardevClass *pc = CHARDEV_CLASS( + object_class_get_parent(object_class_by_name(TYPE_CHARDEV_FILE))); + pc->cpr_claim_fds(chr); if (s->ioc_out) { cpr_delete_fd(chr->label, 0); cpr_save_fd(chr->label, 0, QIO_CHANNEL_FILE(s->ioc_out)->fd); diff --git a/chardev/char-pty.c b/chardev/char-pty.c index a0090e4c3d1..8058da92bb4 100644 --- a/chardev/char-pty.c +++ b/chardev/char-pty.c @@ -403,7 +403,10 @@ static void char_pty_open(Chardev *chr, static void char_pty_cpr_claim_fds(Chardev *chr) { PtyChardev *s = PTY_CHARDEV(chr); + ChardevClass *pc = CHARDEV_CLASS( + object_class_get_parent(object_class_by_name(TYPE_CHARDEV_PTY))); + pc->cpr_claim_fds(chr); if (s->ioc) { cpr_delete_fd(chr->label, 0); cpr_save_fd(chr->label, 0, QIO_CHANNEL_FILE(s->ioc)->fd); diff --git a/chardev/char-socket.c b/chardev/char-socket.c index d20aea764f9..c73a3dd0f7a 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1681,7 +1681,10 @@ char_socket_get_connected(Object *obj, Error **errp) static void char_socket_cpr_claim_fds(Chardev *chr) { SocketChardev *s = SOCKET_CHARDEV(chr); + ChardevClass *pc = CHARDEV_CLASS( + object_class_get_parent(object_class_by_name(TYPE_CHARDEV_SOCKET))); + pc->cpr_claim_fds(chr); if (s->sioc) { cpr_delete_fd(chr->label, CPR_CONNSOCK_ID); cpr_save_fd(chr->label, CPR_CONNSOCK_ID, s->sioc->fd); diff --git a/chardev/char.c b/chardev/char.c index 87f40d0137e..b64767f574e 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -295,12 +295,17 @@ static int null_chr_write(Chardev *chr, const uint8_t *buf, int len) return len; } +static void char_cpr_claim_fds(Chardev *chr) +{ +} + static void char_class_init(ObjectClass *oc, const void *data) { ChardevClass *cc = CHARDEV_CLASS(oc); cc->chr_write = null_chr_write; cc->chr_be_event = chr_be_event; + cc->cpr_claim_fds = char_cpr_claim_fds; } static void char_finalize(Object *obj) @@ -1164,9 +1169,7 @@ ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend, backend, chr->gcontext, handover_yank_instance, errp); if (!chr_new) { /* the failed replacement's open() may have displaced our cpr fds */ - if (cc->cpr_claim_fds) { - cc->cpr_claim_fds(chr); - } + cc->cpr_claim_fds(chr); return NULL; } @@ -1186,9 +1189,7 @@ ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend, qemu_chr_be_event(chr, CHR_EVENT_OPENED); } /* chr_new's open() may have displaced our cpr fds; re-claim them */ - if (cc->cpr_claim_fds) { - cc->cpr_claim_fds(chr); - } + cc->cpr_claim_fds(chr); object_unref(OBJECT(chr_new)); return NULL; } diff --git a/include/chardev/char.h b/include/chardev/char.h index 431d07ad3c6..968766fd5d5 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -305,7 +305,10 @@ struct ChardevClass { /* notify the backend of frontend open state */ void (*chr_set_fe_open)(Chardev *chr, int fe_open); - /* (re-)register the backend's CPR fds, e.g. on a failed chardev-change */ + /* + * (re-)register CPR fds, e.g. on a failed chardev-change; an override + * must call the parent's hook first + */ void (*cpr_claim_fds)(Chardev *chr); /* handle various events */ -- 2.53.0