From nobody Fri May 3 19:28:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1667573839; cv=none; d=zohomail.com; s=zohoarc; b=S9E6zOEQeEbHgXsDvsijJRqLIA9J0ltzjFWjcR/w1jMN2UAl8X+ObYbhCoQrejP0bGTl5IjtiDc2Ek4FoShI2Arpye2A9Uklqx3WuuiYhk79lD/3krksEjx0tLCQPGGzXY5v7KNXmAGKdAJm5ow2Pxyz9qKBdw+brdkOyUMu68s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667573839; h=Content-Type:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=w8zy/jlhFcc0VVOyr+HD+TokGdXyEdKmwx2wKW9zDWo=; b=i2BEcaR6ifi4MxhEp36lDIl8GQJeDSHtJSK5rxBtQzm/onDAAwn3XgOw+k7PlAKBU7nq6JmM0AQUl4B/XRHAfMfp59yZLCyZ+YVo4DYNRdVqo2GUtky5lqNT682HAcSaMrs0c5jSjA3UoOUMHx/ZEU2UlFbNBzPwB6gbFUq1DDQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1667573839204309.82430099524277; Fri, 4 Nov 2022 07:57:19 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-330-z3tpnopPOUWJlhwkEMg4Ww-1; Fri, 04 Nov 2022 10:57:10 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B4505282382C; Fri, 4 Nov 2022 14:57:08 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id C324520290A5; Fri, 4 Nov 2022 14:57:07 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id A0E4F1946587; Fri, 4 Nov 2022 14:57:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id DBD631946586 for ; Fri, 4 Nov 2022 14:57:06 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id B37814A9254; Fri, 4 Nov 2022 14:57:06 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A9DE749BB60 for ; Fri, 4 Nov 2022 14:57:06 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 884943C02196 for ; Fri, 4 Nov 2022 14:57:06 +0000 (UTC) Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-631-KtCAFk5mMiOlTtR66woilw-1; Fri, 04 Nov 2022 10:57:04 -0400 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 2A4Aogsu002436 for ; Fri, 4 Nov 2022 12:22:32 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3kgv2aqgqu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 04 Nov 2022 12:22:32 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2A4B8cqb013906 for ; Fri, 4 Nov 2022 12:22:31 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2043.outbound.protection.outlook.com [104.47.73.43]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3kmpr49s62-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 04 Nov 2022 12:22:31 +0000 Received: from SJ0PR10MB5768.namprd10.prod.outlook.com (2603:10b6:a03:3ed::10) by SJ2PR10MB7059.namprd10.prod.outlook.com (2603:10b6:a03:4d2::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.22; Fri, 4 Nov 2022 12:22:29 +0000 Received: from SJ0PR10MB5768.namprd10.prod.outlook.com ([fe80::23b1:a39:a6ed:814b]) by SJ0PR10MB5768.namprd10.prod.outlook.com ([fe80::23b1:a39:a6ed:814b%4]) with mapi id 15.20.5791.022; Fri, 4 Nov 2022 12:22:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1667573838; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:list-id:list-help:list-unsubscribe: list-subscribe:list-post; bh=w8zy/jlhFcc0VVOyr+HD+TokGdXyEdKmwx2wKW9zDWo=; b=JxWDhh+QlX/AzOG0c8GuFgRbwEdLtVU3ePY9Cz8P6Uxkztl9wtrahuclQRbNuoqn+l4SKk Y5KBWQWE7F6d61U37B8E0iHeNQk1KQm/Pe/p2MXRBI6IwmIAmOtRwne9V2TdcXr0zEQBEC nIkMMTmMAYuem9duayzN2+e2E8Sg66I= X-MC-Unique: z3tpnopPOUWJlhwkEMg4Ww-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: KtCAFk5mMiOlTtR66woilw-1 Date: Fri, 4 Nov 2022 17:52:26 +0530 From: Shaleen Bathla To: libvir-list@redhat.com Subject: [PATCH] qemu: fix vcpu clearing when multiple vcpu hotunplugs timeout Message-ID: X-ClientProxiedBy: MN2PR06CA0007.namprd06.prod.outlook.com (2603:10b6:208:23d::12) To SJ0PR10MB5768.namprd10.prod.outlook.com (2603:10b6:a03:3ed::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR10MB5768:EE_|SJ2PR10MB7059:EE_ X-MS-Office365-Filtering-Correlation-Id: 7a3333e9-40ca-4e52-1587-08dabe5f3d97 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0 X-Microsoft-Antispam-Message-Info: uTofz/WHipJ7DvsXWmRkAxQ+vMPI9+DnVFIQGgD2R80AwCQU8xitdmQnQ/0/lwHmn7qlpJ2d5igxn1Vg2RN46T5mSlEkymxZfbQ0nwDYxNEwNZAVv+2Sw7kvvBO+nVKuwlM2DYQ+6k6d1vm/EGltYUDsgGImNNjBFNbhKKbYnAq95s0XuBMZ4XXLP4LslG1xa0kzi9QOe6Geo5mzRhDuUSMPavZG7o6eEyAfLPF2QveZrjzAQCnh2krXDRfVgs9lqj8QhZ2lFMXW3OEcP25VQCfkim5lnB7iq0W+wXwqaDVpuknP+IC06V171pLCGGWaUisYiXPquxzbOJbdgZs0xy0JniuO8QRwMYFudGzlPRgyN0sDYmRXK3I08GadC26DqD37epM1W4EnXijd1hgJd5uDWXG2ld527CQSAap/XSjL8yMylcjGAMdiY2j0kMMA9mj50zxLjcZnH73Ckua1Ed2ENnP/oExS44eohgHw3lTjAAyLCIG7QLc8f/FWuva4aOA9l8gcDCSpgxcCO6/DDeD33Lwf8rLv7r5uEf3DMUlBw8AvNv024cnSf3/h9hVEoqm2mdrnVTYa/yak6J0pbnyivdZ0PHI5TNN2v1DdNsv0kFQo4qAcXoDMZ+aylFCqwqeb0B8rt9NNGKZHX6CVxnd0KZ6BNJdgNx9G9mY1ua+TkpqgFuyELiK5PCJKGRbIhpFGeWFYg+Qxuzr1gFWU1w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR10MB5768.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(346002)(376002)(366004)(39860400002)(136003)(396003)(451199015)(66946007)(86362001)(41300700001)(6512007)(26005)(8676002)(66476007)(66556008)(9686003)(4326008)(186003)(6506007)(6486002)(44832011)(5660300002)(8936002)(6916009)(478600001)(6666004)(107886003)(316002)(38100700002)(83380400001)(2906002); DIR:OUT; SFP:1101 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?O51iRClH7Szcud3nkJWBebeclb2+bMTbQNkj6TAjstXEx6M/IFwrL+Ct8cn+?= =?us-ascii?Q?tEzF5BGddm9agISpIiB7L7t7XJKo1w6NmrUbNuOiziTQoAJffjRNw5/JMvCQ?= =?us-ascii?Q?1zxAx0by38kWdrXfP+pbThLnaCMkVmAILt3wQpO/zsQdhZ6zFDYnxB6TUvxS?= =?us-ascii?Q?CsIbZqWJUJvL24pny71GRjCwEHhzdlvS60eedV/MC0+WbK1IJY5trINCK+KJ?= =?us-ascii?Q?tfUNpsGj3mCjw2Ekdc2G52M0S7rjNY5zgYl5J+HlGwtAVBmjHiDYbbphB22q?= =?us-ascii?Q?wRi297tX3dPkzsebIsX8eqZbluqh8jd3++LCkXI2Rrk4AH4SYszgwlTn+X8V?= =?us-ascii?Q?dwo6y2w5FUot5NlQNjZ/j2CW1bX7qE9MHM8tzreZbeoI8p3FfYs+fKD8bujj?= =?us-ascii?Q?vhxLEZm1dfn2WYAyRZhSb/5l6eRtdEgGKs83g94Pd8homsneohUi5vypWSIW?= =?us-ascii?Q?oJ81n0+eJvV5lDcy2g/ie+dRNuOm/faN4csuHfSNq5AtPBGn8DMfYn6BDMlu?= =?us-ascii?Q?kivE4HC/MC47NQBuPEu7ATQx1cK/pEKzhvJ9HFDaiqzlewYIF3beXU7e2XvW?= =?us-ascii?Q?wgzCADyrTVfouXHWkD5MMJWQMfwXUe4jiLFe1J5fhqAjx/SpK6/BomCdiVvA?= =?us-ascii?Q?4HFsyLMjaay/xTc2NHK7J1NwdtblsP/HaAXsayLLfEcsO32AkUewHXVnLRGH?= =?us-ascii?Q?Dnf88AhCxOfNIJwGEuz/Pu4FAWdbmMY6dwGvwT1gbx2+vvbVrbHsUS8M2PF1?= =?us-ascii?Q?p+kx3nTvkTcLCQcbZFLtWNxrnIJSR9fMFZsswbZ5mAH5vVjdsdNXxraILZB+?= =?us-ascii?Q?FT1IlqWypKrM9feOlGLtwT6uyJSdij4AGo7XKYCPnLQBeyskoHLkAMfkDOul?= =?us-ascii?Q?kgNs0geP/uKZbny7WauNWNiiUTT/Y/LwOSYBrElfqxsJLcwdLo+VWEYmpzgY?= =?us-ascii?Q?8Tm+JDg0slcqcV27WwyKU8pfHnMaE4RjC1aJMEbay9kz73h5iM8Ycwzz1MKO?= =?us-ascii?Q?g9CN7d/SMsvrb0MmjNQCKm7PVFsZcaNBIvARfaIoeJhG2dUeCSP8zuiA/kY1?= =?us-ascii?Q?JZmBISFrVfuhQ2prVlzRomvHTjRg0Patc9JF7sqUfzEMjdTH69xi8n2BA+Vv?= =?us-ascii?Q?mFlBM1U6Y37Z3BtoHQfAqeGeoohb8VZ4t+RGKjUqd8JoyGGwxBV7MRW/N2xc?= =?us-ascii?Q?vXKsOpj5vuuPayP/tDzNsYZ7eg0b2R0T4ei6i1sWLFWWhD3qhKzHIxF+zheb?= =?us-ascii?Q?yUssTfeE/+GXAfRVFZ1FGiwEljL+YDEBxpIbLphDxdyt9dYu/PV1AlUXCMiW?= =?us-ascii?Q?vXxRpg4AI4H944s4Nm/61jn/6AmeNNRz7Rw2fXHZ0vysWCDny9F5Of/alo+y?= =?us-ascii?Q?yPJmO0uIJRi7cvaLCet6sAPeFJ+7lmSWkMMV/BilR8z11CvUP2Ojf7/jsbd5?= =?us-ascii?Q?aGn9wv9E46C8CjgOmRfaY+exy3cGJHuvVS0BQz8wsAzpLPVciQ7cffubnQEX?= =?us-ascii?Q?cF4d2R5wi5rZ0SUqKy+2A5jII5WpdI2jcwQcbGbQ0XSvcYRtQesS+m4H81e1?= =?us-ascii?Q?2x5DYEE3duQvQXy4HjbAtyubs1MDMWQ7c55nYMquoGJlJM6Nvnppqp1z7zXo?= =?us-ascii?Q?5w=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a3333e9-40ca-4e52-1587-08dabe5f3d97 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR10MB5768.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2022 12:22:29.2234 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1zufOazrPcXimVhzQZvgXniyn5MfhxoGBLL2l8/F3+2wN5OKrMvvCndCNT5TNlpbjtBuno7j8Hr2IN/n4mn1gJLza5mJdSMby2Cxh408liE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR10MB7059 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-04_08,2022-11-03_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211040082 X-Proofpoint-ORIG-GUID: WBvj__xRxM-JQgyDNM1zTwAa8XJJrcX6 X-Proofpoint-GUID: WBvj__xRxM-JQgyDNM1zTwAa8XJJrcX6 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: shaleen.bathla@oracle.com Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1667573841584100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Problem: libvirt has a 5 second timeout (generally) for hotplug/unplug operations which can time out due to heavy load in guest. vcpu hotunplug occurs one vcpu at a time. But, if we perform hotplug-unplug repeatedly, there is a situation where qemu has multiple timedout vcpu unplug operations pending. libvirt waits for an async event notification from qemu regarding successful vcpu delete. qemu deletes the vcpu-vcpuinfo and sends this notification to libvirt. libvirt handles vcpu delete notification, and refreshes vcpuinfo by querying vcpuinfo from qemu in qemuDomainRefreshVcpuInfo(). qemu's vcpuinfo will not contain vcpu that was deleted and sent. qemu's vcpuinfo will overwrite libvirt's vcpuinfo of the other pending timedout vcpu(s) which qemu has deleted and notified libvirt. The overwrite resets other timedout vcpu's alias to NULL and tid to 0. The error is then seen when validating tid of vcpus. Example error log: "internal error: qemu didn't report thread id for vcpu 'XX'" Solution: Create a per vcpu hp_timeout_alias which will be set as vcpu alias when a t= imeout occurs else it is set as NULL. This data does not get reset when vcpuinfo refresh occurs. And we can remove a vcpu if it's alias was NULL by checking this alias. During vcpu validation, we can skip to nextvcpu if this hotplug-timeout-ali= as is set indicating that this vcpu is actually valid. Co-authored-by: Partha Satapathy Signed-off-by: Shaleen Bathla --- src/qemu/qemu_domain.c | 6 ++++++ src/qemu/qemu_domain.h | 1 + src/qemu/qemu_hotplug.c | 41 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index c3afc6c9d3ba..0f6e4dc78b93 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9568,6 +9568,8 @@ qemuDomainValidateVcpuInfo(virDomainObj *vm) vcpupriv =3D QEMU_DOMAIN_VCPU_PRIVATE(vcpu); =20 if (vcpu->online && vcpupriv->tid =3D=3D 0) { + if (vcpupriv->hp_timeout_alias) + continue; virReportError(VIR_ERR_INTERNAL_ERROR, _("qemu didn't report thread id for vcpu '%zu'"= ), i); return -1; @@ -9696,6 +9698,10 @@ qemuDomainRefreshVcpuInfo(virDomainObj *vm, if (validTIDs) vcpupriv->tid =3D info[i].tid; =20 + if (vcpupriv->hp_timeout_alias && !info[i].alias) + VIR_DEBUG("no alias for timed out vcpu%zu domain %s", i, + vm->def->name); + vcpupriv->socket_id =3D info[i].socket_id; vcpupriv->core_id =3D info[i].core_id; vcpupriv->thread_id =3D info[i].thread_id; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 2bbd492d62da..68f6c645ef79 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -324,6 +324,7 @@ struct _qemuDomainVcpuPrivate { int thread_id; int node_id; int vcpus; + char *hp_timeout_alias; /* alias after hotplug timeout */ =20 char *qomPath; }; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index da92ced2f444..5d54e9c67c3f 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -6138,9 +6138,21 @@ qemuDomainRemoveVcpuAlias(virDomainObj *vm, =20 if (STREQ_NULLABLE(alias, vcpupriv->alias)) { qemuDomainRemoveVcpu(vm, i); + if (vcpupriv->hp_timeout_alias) + g_free(vcpupriv->hp_timeout_alias); + return; + } + if (STREQ_NULLABLE(alias, vcpupriv->hp_timeout_alias)) { + qemuDomainRemoveVcpu(vm, i); + VIR_DEBUG("%s found in timed out list of domain %s", + alias, vm->def->name); + g_free(vcpupriv->hp_timeout_alias); return; } } + + VIR_DEBUG("%s not found in vcpulist of domain %s ", + alias, vm->def->name); } =20 =20 @@ -6172,11 +6184,19 @@ qemuDomainHotplugDelVcpu(virQEMUDriver *driver, } =20 if ((rc =3D qemuDomainWaitForDeviceRemoval(vm)) <=3D 0) { - if (rc =3D=3D 0) + if (rc =3D=3D 0) { virReportError(VIR_ERR_OPERATION_TIMEOUT, "%s", _("vcpu unplug request timed out. Unplug result= " "must be manually inspected in the domain")); =20 + if (vcpupriv) { + VIR_INFO("unplug timeout set for vcpu '%u' of domain %s", + vcpu, vm->def->name); + + vcpupriv->hp_timeout_alias =3D g_strdup(vcpupriv->alias); + } + } + goto cleanup; } =20 @@ -6362,6 +6382,8 @@ qemuDomainSetVcpusLive(virQEMUDriver *driver, { qemuDomainObjPrivate *priv =3D vm->privateData; virCgroupEmulatorAllNodesData *emulatorCgroup =3D NULL; + qemuDomainVcpuPrivate *vcpupriv =3D NULL; + virDomainVcpuDef *vcpuinfo =3D NULL; ssize_t nextvcpu =3D -1; int ret =3D -1; =20 @@ -6370,6 +6392,14 @@ qemuDomainSetVcpusLive(virQEMUDriver *driver, =20 if (enable) { while ((nextvcpu =3D virBitmapNextSetBit(vcpumap, nextvcpu)) !=3D = -1) { + vcpuinfo =3D virDomainDefGetVcpu(vm->def, nextvcpu); + vcpupriv =3D QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); + + if (vcpupriv && vcpupriv->hp_timeout_alias) { + VIR_INFO("reject hotplug of timed out vcpu '%zd' from doma= in %s", + nextvcpu, vm->def->name); + goto cleanup; + } if (qemuDomainHotplugAddVcpu(driver, cfg, vm, nextvcpu) < 0) goto cleanup; } @@ -6378,6 +6408,15 @@ qemuDomainSetVcpusLive(virQEMUDriver *driver, if (!virBitmapIsBitSet(vcpumap, nextvcpu)) continue; =20 + vcpuinfo =3D virDomainDefGetVcpu(vm->def, nextvcpu); + vcpupriv =3D QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo); + + if (vcpupriv && vcpupriv->hp_timeout_alias) { + VIR_INFO("already serving unplug for vcpu '%zd' in domain = %s", + nextvcpu, vm->def->name); + goto cleanup; + } + if (qemuDomainHotplugDelVcpu(driver, cfg, vm, nextvcpu) < 0) goto cleanup; } --=20 2.31.1