From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852155; cv=none; d=zohomail.com; s=zohoarc; b=GjAya1DsvjCILM/sGNLMBwNo9Cn2GP60oRu11YyGWUtVSaKxmCPMg7GtKdHBdGnZ45upWq1p1O/FIcAFuDr8pJMsnQOdehUmAfKDjdYeH4yMxMhZe8FYWGJYM7P07BAiZv3c42VW7sRVNLx9LiUPFiQqrd+y6VJnX4pg7SpDXGA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852155; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NtX/HYAIAHUYZjpIM8u1XON3DuyZOS6OI+MPvWXX39k=; b=fYCYrWSr60WHAvMJ+BVA9Vz+m1JSNjUMBuZ6h3faqsl7MTK74BtOD3LEQ7WHVcCbRcGeRv/eAqRuQuuVR3b3d4gkZiQjUbEPSdbSQ2Vb9YlPBAEskhcZO+5KpTsPjomEV1jPogfYvSkq4kyknKSm1KCRG8TehkGnVeXHjKdVCcI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852155154303.4832129661413; Tue, 26 Jul 2022 09:15:55 -0700 (PDT) Received: from localhost ([::1]:50340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNDt-0007IJ-Ts for importer@patchew.org; Tue, 26 Jul 2022 12:15:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34790) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9b-0002XE-Sp for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:27 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:31542) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9W-00068r-V8 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:27 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3UZ016260; Tue, 26 Jul 2022 16:10:49 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0sk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:48 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEsIAS006240; Tue, 26 Jul 2022 16:10:47 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq11x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:47 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSB023334; Tue, 26 Jul 2022 16:10:46 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-2; Tue, 26 Jul 2022 16:10:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=NtX/HYAIAHUYZjpIM8u1XON3DuyZOS6OI+MPvWXX39k=; b=O9X/sn8uEnfsLQLSwR3RmyaaybHi3Dm1+gp8vCxpU1/mHEDWaNtNLH0CpxLEl7W9Gp7d fqaYnJazxQlAFF+sw3M5xt5BRwAOyyEijIMdOWraAaS5NXg7rWQeW4XwweyWB0sjzrms n52ieun3mjuRm4WQcKred03zK5+Q9G2bvYH4ZvFKnYrvqubmN23IoB9Wwv1DhNZ1FVxA UmTxJydkgO2aKzwucYckVfvlnl5CkWiH2hDfZ5F5QjuzKPeGVqoFswo/RBx71mALy1i3 RKOG5mFURkf4FYqAuqjnpn3KNbpR6CeBpkUouL4e0uw5/ylDB1anXlFt9PWSQGZqhn0b LQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 01/46] migration: fix populate_vfio_info Date: Tue, 26 Jul 2022 09:09:58 -0700 Message-Id: <1658851843-236870-2-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: axs-CDXAyeb4jkFYyWjWGT_xLy7ADdeQ X-Proofpoint-ORIG-GUID: axs-CDXAyeb4jkFYyWjWGT_xLy7ADdeQ Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852155992100001 Include CONFIG_DEVICES so that populate_vfio_info is instantiated for CONFIG_VFIO. Fixes: 43bd0bf30f ("migration: Move populate_vfio_info() into a separate fi= le") Signed-off-by: Steve Sistare Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Michael Galaxy --- migration/target.c | 1 + 1 file changed, 1 insertion(+) diff --git a/migration/target.c b/migration/target.c index 907ebf0..a0991bc 100644 --- a/migration/target.c +++ b/migration/target.c @@ -8,6 +8,7 @@ #include "qemu/osdep.h" #include "qapi/qapi-types-migration.h" #include "migration.h" +#include CONFIG_DEVICES =20 #ifdef CONFIG_VFIO #include "hw/vfio/vfio-common.h" --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852083; cv=none; d=zohomail.com; s=zohoarc; b=VRq3LwqCfk6pYfKzrphmo1QSqC0XX5ipKVuVBT0iBVScuXW3JempJbWBegIit/z9bu3VX9k1yRtFUQIxB2cq3+uHjHhy3FjjAIJyTm334efOpWcN5v5s7K6C8OJC+KQx4iMAxoWDDc+8u+K9+FfWi0Nbcgdb8GfosPo2C1jIwVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852083; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=d4Wf6zvZj7pf1CIr9mYRqH/hBauzgg9hCULr1Yp9if8=; b=iarQfUuycB/bnEl1iM0Xv9+eDlBRL8gHnS4IhpmLEbk2yPVx9hAL3joWe1GCDFtmb3Qjw7yUBBC8YQp5PrFpTTk2z0yKgigWXfXOin5/6LHtIpRtR562puh25hWBWPioafjA6DvBV2ugn3IgBJphEHdzdu/r5qhzq4Y/65FQNhE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852083545966.8171805604745; Tue, 26 Jul 2022 09:14:43 -0700 (PDT) Received: from localhost ([::1]:47724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNCi-0005W3-25 for importer@patchew.org; Tue, 26 Jul 2022 12:14:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34750) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9a-0002V1-JG for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:26 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:30352) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9X-00068i-2P for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:26 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn0W4031705; Tue, 26 Jul 2022 16:10:50 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q183-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:50 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF22wV006237; Tue, 26 Jul 2022 16:10:49 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq13s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:49 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSD023334; Tue, 26 Jul 2022 16:10:48 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-3; Tue, 26 Jul 2022 16:10:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=d4Wf6zvZj7pf1CIr9mYRqH/hBauzgg9hCULr1Yp9if8=; b=GO0EGcwrQc3xbJZBz7FWMSopAEpw9qE0LJQay8YBgF6c9lxLGHZ2v2DAQcp+KsnIhgWi tjXiZTrW3XghT1Deh6o6bXhIRbQEVIcu8u6ipHcgSs7G4Ma/ksV9oLkkTJJAT8oCOSxX QdCMvXF2g3tbzyc+uUQSF10bwx5Kg8KlvSsM2M68Vlkx3wTUxYp+OcS6ZptVBIE0mvI2 99okKRHgtw5aTEOsg4J+u++xltXsF4ylBUfqS339xYiG4oao7tZw+3fSLMx2WcsCrVQ0 wB1hzp+m62ed13rb1iYfWxPga3Qq7T745w3cwEdjLHpdKLoJtYXeX9qrCjhsXVGhEX1f hQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 02/46] memory: RAM_NAMED_FILE flag Date: Tue, 26 Jul 2022 09:09:59 -0700 Message-Id: <1658851843-236870-3-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: p91a6EQpoQTppzKRHDz_TwKH0S0rS12Q X-Proofpoint-GUID: p91a6EQpoQTppzKRHDz_TwKH0S0rS12Q Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852086365100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" A memory-backend-ram or a memory-backend-memfd block with the RAM_SHARED flag set is not migrated when migrate_ignore_shared() is true, but this is wrong, because it has no named backing store, and its contents will be lost. Define a new flag RAM_NAMED_FILE to distinguish this case. Cpr will also test this flag, for similar reasons. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- backends/hostmem-file.c | 1 + include/exec/memory.h | 3 +++ include/exec/ram_addr.h | 1 + migration/ram.c | 3 ++- softmmu/physmem.c | 7 ++++++- 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c index 2514128..486d77d 100644 --- a/backends/hostmem-file.c +++ b/backends/hostmem-file.c @@ -56,6 +56,7 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Err= or **errp) ram_flags =3D backend->share ? RAM_SHARED : 0; ram_flags |=3D backend->reserve ? 0 : RAM_NORESERVE; ram_flags |=3D fb->is_pmem ? RAM_PMEM : 0; + ram_flags |=3D RAM_NAMED_FILE; memory_region_init_ram_from_file(&backend->mr, OBJECT(backend), name, backend->size, fb->align, ram_flags, fb->mem_path, fb->readonly, errp); diff --git a/include/exec/memory.h b/include/exec/memory.h index bfb1de8..7513d04 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -206,6 +206,9 @@ typedef struct IOMMUTLBEvent { /* RAM that isn't accessible through normal means. */ #define RAM_PROTECTED (1 << 8) =20 +/* RAM is an mmap-ed named file */ +#define RAM_NAMED_FILE (1 << 9) + static inline void iommu_notifier_init(IOMMUNotifier *n, IOMMUNotify fn, IOMMUNotifierFlag flags, hwaddr start, hwaddr end, diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index f3e0c78..4405e2e 100644 --- a/include/exec/ram_addr.h +++ b/include/exec/ram_addr.h @@ -94,6 +94,7 @@ static inline unsigned long int ramblock_recv_bitmap_offs= et(void *host_addr, } =20 bool ramblock_is_pmem(RAMBlock *rb); +bool ramblock_is_named_file(RAMBlock *rb); =20 long qemu_minrampagesize(void); long qemu_maxrampagesize(void); diff --git a/migration/ram.c b/migration/ram.c index b94669b..3ea3b41 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -165,7 +165,8 @@ out: bool ramblock_is_ignored(RAMBlock *block) { return !qemu_ram_is_migratable(block) || - (migrate_ignore_shared() && qemu_ram_is_shared(block)); + (migrate_ignore_shared() && qemu_ram_is_shared(block) && + ramblock_is_named_file(block)); } =20 #undef RAMBLOCK_FOREACH diff --git a/softmmu/physmem.c b/softmmu/physmem.c index dc3c3e5..cce721a 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -2070,7 +2070,7 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, Mem= oryRegion *mr, =20 /* Just support these ram flags by now. */ assert((ram_flags & ~(RAM_SHARED | RAM_PMEM | RAM_NORESERVE | - RAM_PROTECTED)) =3D=3D 0); + RAM_PROTECTED | RAM_NAMED_FILE)) =3D=3D 0); =20 if (xen_enabled()) { error_setg(errp, "-mem-path not supported with Xen"); @@ -3675,6 +3675,11 @@ bool ramblock_is_pmem(RAMBlock *rb) return rb->flags & RAM_PMEM; } =20 +bool ramblock_is_named_file(RAMBlock *rb) +{ + return rb->flags & RAM_NAMED_FILE; +} + static void mtree_print_phys_entries(int start, int end, int skip, int ptr) { if (start =3D=3D end - 1) { --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852363; cv=none; d=zohomail.com; s=zohoarc; b=WLXnvynK80eIGA4ZVcGphVeB2DEHCa8FqBRDDxDpFNCMqD6G/hn/vBFQNJO5+ctymh8pVYG5VuS1uxcuUHoWTZ8QutL3jx6dLMcYXhU0XUE39zjXTNQOBWgzHC+zz1zxEpX6fo4cESzAscV3sWhZqzUrQxAQYSln9pMJf9Rd2iM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852363; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=yXrJ08KHOxEJ/hD4SqAtRPsvFhgL0OoAgWyjTIRuH3k=; b=f/ojygIvyuPDvucBYOtdN06RGKvz2UbCU2RhHUYpTjf970lAN+KlP57qoM8CpeoX0CSAdxXox+e6CiYT4T7zDBME4E/ofTX0Td/r+hqTHpfMl0qFoTlcZhbgzVYyd1Z8/VGWkPnSqjve0OGPKgS1rSK8+hZwIjEYzSvwc4trY+c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852363694688.570083980279; Tue, 26 Jul 2022 09:19:23 -0700 (PDT) Received: from localhost ([::1]:56098 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNHG-0002yn-Jt for importer@patchew.org; Tue, 26 Jul 2022 12:19:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34814) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9c-0002YG-BD for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:28 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:30354) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9Y-00068j-0L for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:28 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn0W6031705; Tue, 26 Jul 2022 16:10:52 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q188-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:51 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFEnog006399; Tue, 26 Jul 2022 16:10:50 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq159-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:50 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSF023334; Tue, 26 Jul 2022 16:10:49 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-4; Tue, 26 Jul 2022 16:10:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=yXrJ08KHOxEJ/hD4SqAtRPsvFhgL0OoAgWyjTIRuH3k=; b=vhut7YH0uxmZ/uPWBUI3agMdzeYxBUOR/jD90+ZKHdErYhlSw8UYLsda1Rq0u3CYw0LL 9P+z6rgLk+MLDB+MOexWIhVXgiN4yXrnaH3oNGkcAUa4cssvO04HAhA9GMXKh+jSqEhR DOUSqmhvYhmorAh03zKSFL0E1hFkK6zDXE729BtHQIBX3HcOdibXruFHH+F0QxNKo/8E R5QrFkmoAg7/Np7iBINn0uSAVHNb4UPn24rzqNK8sJhR7UEYOipkK9inwpncKe7xF64c pJZGmj9cnfsAt3/dDot2CKui0MNsfzer9Zn+wZI5QIXibQ/nLiwy7qqu3dUi6V6MFkUt Xg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 03/46] migration: file URI Date: Tue, 26 Jul 2022 09:10:00 -0700 Message-Id: <1658851843-236870-4-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: 3hrmhkCSdlvTgxEGmYjGbFkCEPuZbpcY X-Proofpoint-GUID: 3hrmhkCSdlvTgxEGmYjGbFkCEPuZbpcY Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852364514100002 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Extend the migration URI to support file:. This can be used for any migration scenario that does not require a reverse path. It is easier to use than the fd: URI. It can be use in HMP commands, and as a qemu command-line parameter. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- migration/file.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ migration/file.h | 14 ++++++++++++ migration/meson.build | 1 + migration/migration.c | 5 ++++ migration/trace-events | 4 ++++ qemu-options.hx | 6 ++++- 6 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 migration/file.c create mode 100644 migration/file.h diff --git a/migration/file.c b/migration/file.c new file mode 100644 index 0000000..233bcda --- /dev/null +++ b/migration/file.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "channel.h" +#include "file.h" +#include "migration.h" +#include "io/channel-file.h" +#include "io/channel-util.h" +#include "trace.h" + +void file_start_outgoing_migration(MigrationState *s, const char *filename, + Error **errp) +{ + g_autoptr(QIOChannelFile) fioc =3D NULL; + QIOChannel *ioc; + + trace_migration_file_outgoing(filename); + + fioc =3D qio_channel_file_new_path(filename, O_CREAT | O_WRONLY | O_TR= UNC, + 0600, errp); + if (!fioc) { + return; + } + + ioc =3D QIO_CHANNEL(fioc); + qio_channel_set_name(ioc, "migration-file-outgoing"); + migration_channel_connect(s, ioc, NULL, NULL); +} + +static gboolean file_accept_incoming_migration(QIOChannel *ioc, + GIOCondition condition, + gpointer opaque) +{ + migration_channel_process_incoming(ioc); + object_unref(OBJECT(ioc)); + return G_SOURCE_REMOVE; +} + +void file_start_incoming_migration(const char *filename, Error **errp) +{ + QIOChannelFile *fioc =3D NULL; + QIOChannel *ioc; + + trace_migration_file_incoming(filename); + + fioc =3D qio_channel_file_new_path(filename, O_RDONLY, 0, errp); + if (!fioc) { + return; + } + + ioc =3D QIO_CHANNEL(fioc); + qio_channel_set_name(QIO_CHANNEL(ioc), "migration-file-incoming"); + qio_channel_add_watch_full(ioc, G_IO_IN, + file_accept_incoming_migration, + NULL, NULL, + g_main_context_get_thread_default()); +} diff --git a/migration/file.h b/migration/file.h new file mode 100644 index 0000000..aa697df --- /dev/null +++ b/migration/file.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#ifndef QEMU_MIGRATION_FILE_H +#define QEMU_MIGRATION_FILE_H +void file_start_incoming_migration(const char *filename, Error **errp); + +void file_start_outgoing_migration(MigrationState *s, const char *filename, + Error **errp); +#endif diff --git a/migration/meson.build b/migration/meson.build index 690487c..30a8392 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -17,6 +17,7 @@ softmmu_ss.add(files( 'colo.c', 'exec.c', 'fd.c', + 'file.c', 'global_state.c', 'migration.c', 'multifd.c', diff --git a/migration/migration.c b/migration/migration.c index e03f698..d1cfca1 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -20,6 +20,7 @@ #include "migration/blocker.h" #include "exec.h" #include "fd.h" +#include "file.h" #include "socket.h" #include "sysemu/runstate.h" #include "sysemu/sysemu.h" @@ -505,6 +506,8 @@ static void qemu_start_incoming_migration(const char *u= ri, Error **errp) exec_start_incoming_migration(p, errp); } else if (strstart(uri, "fd:", &p)) { fd_start_incoming_migration(p, errp); + } else if (strstart(uri, "file:", &p)) { + file_start_incoming_migration(p, errp); } else { error_setg(errp, "unknown migration protocol: %s", uri); } @@ -2414,6 +2417,8 @@ void qmp_migrate(const char *uri, bool has_blk, bool = blk, exec_start_outgoing_migration(s, p, &local_err); } else if (strstart(uri, "fd:", &p)) { fd_start_outgoing_migration(s, p, &local_err); + } else if (strstart(uri, "file:", &p)) { + file_start_outgoing_migration(s, p, &local_err); } else { if (!(has_resume && resume)) { yank_unregister_instance(MIGRATION_YANK_INSTANCE); diff --git a/migration/trace-events b/migration/trace-events index a34afe7..d72dd85 100644 --- a/migration/trace-events +++ b/migration/trace-events @@ -302,6 +302,10 @@ migration_exec_incoming(const char *cmd) "cmd=3D%s" migration_fd_outgoing(int fd) "fd=3D%d" migration_fd_incoming(int fd) "fd=3D%d" =20 +# file.c +migration_file_outgoing(const char *filename) "filename=3D%s" +migration_file_incoming(const char *filename) "filename=3D%s" + # socket.c migration_socket_incoming_accepted(void) "" migration_socket_outgoing_connected(const char *hostname) "hostname=3D%s" diff --git a/qemu-options.hx b/qemu-options.hx index 79e0091..5ff47f4 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4451,6 +4451,7 @@ DEF("incoming", HAS_ARG, QEMU_OPTION_incoming, \ " prepare for incoming migration, listen on\n" \ " specified protocol and socket address\n" \ "-incoming fd:fd\n" \ + "-incoming file:filename\n" \ "-incoming exec:cmdline\n" \ " accept incoming migration on given file descriptor\n"= \ " or from given external command\n" \ @@ -4467,7 +4468,10 @@ SRST Prepare for incoming migration, listen on a given unix socket. =20 ``-incoming fd:fd`` - Accept incoming migration from a given filedescriptor. + Accept incoming migration from a given file descriptor. + +``-incoming file:filename`` + Accept incoming migration from a given file. =20 ``-incoming exec:cmdline`` Accept incoming migration as an output from specified external --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852096; cv=none; d=zohomail.com; s=zohoarc; b=dGXJ250hSP8yMcHVaDtfXvyMcWNbdNkj3xRHU8xBEwBmTY/T1bgCGYYJ+1nJri+jFrWV51eFXIf3t/h8DGJhTNPGrZpnaVwzdQDZjT0IMzNkRNOKEV2s5qCD8GPJax1mc7c6NleXvk7hkzWzGptw1Z/V6wC3sPua58wZGV1bupg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852096; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=Hq5Lcyhok4JEPa68Dr7lhFUs7IbghRLotg6m//Z2H5U=; b=bFs4h7kfzNkFihSF2nD9vpwk/Dx5xfOadHWJvbY3pWROsSME3lBhVU77xXvX+IIufxhMZnfBivu+qyzf1xQ4+p2xUdFn0Dr7jydLNmOyadEAqyeq07AL+NUIlX++ofwkXBmvhuQ6aPmAkHvu8GHU2GLodMFnk0y1HgFhDWJHCr8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852096465511.5035783912242; Tue, 26 Jul 2022 09:14:56 -0700 (PDT) Received: from localhost ([::1]:48106 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNCw-0005ld-4C for importer@patchew.org; Tue, 26 Jul 2022 12:14:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34852) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9e-0002cI-2I for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:30 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:43970) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9a-00069Z-Ta for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:29 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPjv006246; Tue, 26 Jul 2022 16:10:53 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940ptyj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:53 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFniKp006262; Tue, 26 Jul 2022 16:10:52 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq178-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:52 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSH023334; Tue, 26 Jul 2022 16:10:51 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-5; Tue, 26 Jul 2022 16:10:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=Hq5Lcyhok4JEPa68Dr7lhFUs7IbghRLotg6m//Z2H5U=; b=1xoyLAQUvsUddjRnes1fDAYgCg1k4Wk9LzA3ih4iSPDje00dYXr4Pd8eMOZ0MG9VhOb+ 0kj1uffEzT7qtpF7xQ6aB7FPRxQob4XACBK6bEyWWMUx1gMklLqxx9vBe8Ren7dKHpBV 3/tiD230K9uxeUAlPPpCB8pwGcxXiRnW1IWi0o3OpTWs5Krjdl+Ug6svFXIcYl7virXW 2ol9pUVD5MXuCwTUzKxbZN+7KI88l2iAxfAQX8Au1nEqpUZrlxQ/wCuR3rAeAk6YHLGl O00ZVPaHtijPeeA5pzjfgCKKjfmTr3IkCbIoOz7jybsWrjmjp9xgQQDpsDSVkhTDWE30 dA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 04/46] migration: mode parameter Date: Tue, 26 Jul 2022 09:10:01 -0700 Message-Id: <1658851843-236870-5-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: OyVVGMJQ63FyHYbLCn850ATM5olnSvD9 X-Proofpoint-ORIG-GUID: OyVVGMJQ63FyHYbLCn850ATM5olnSvD9 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852098466100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Create a mode migration parameter that can be used to select alternate migration algorithms. The default mode is normal, representing the current migration algorithm, and does not need to be explicitly set. No functional change until a new mode is added, except that the mode is shown by the 'info migrate' command. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/core/qdev-properties-system.c | 12 ++++++++++++ include/hw/qdev-properties-system.h | 4 ++++ include/migration/misc.h | 4 ++++ migration/migration.c | 28 ++++++++++++++++++++++++++++ monitor/hmp-cmds.c | 8 ++++++++ qapi/migration.json | 28 +++++++++++++++++++++++++--- 6 files changed, 81 insertions(+), 3 deletions(-) diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-sys= tem.c index a91f605..0a7b25b 100644 --- a/hw/core/qdev-properties-system.c +++ b/hw/core/qdev-properties-system.c @@ -650,6 +650,18 @@ const PropertyInfo qdev_prop_multifd_compression =3D { .set_default_value =3D qdev_propinfo_set_default_value_enum, }; =20 +/* --- MigMode --- */ + +const PropertyInfo qdev_prop_mig_mode =3D { + .name =3D "MigMode", + .description =3D "mig_mode values, " + "normal/exec", + .enum_table =3D &MigMode_lookup, + .get =3D qdev_propinfo_get_enum, + .set =3D qdev_propinfo_set_enum, + .set_default_value =3D qdev_propinfo_set_default_value_enum, +}; + /* --- Reserved Region --- */ =20 /* diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properti= es-system.h index 0ac327a..1418801 100644 --- a/include/hw/qdev-properties-system.h +++ b/include/hw/qdev-properties-system.h @@ -7,6 +7,7 @@ extern const PropertyInfo qdev_prop_chr; extern const PropertyInfo qdev_prop_macaddr; extern const PropertyInfo qdev_prop_reserved_region; extern const PropertyInfo qdev_prop_multifd_compression; +extern const PropertyInfo qdev_prop_mig_mode; extern const PropertyInfo qdev_prop_losttickpolicy; extern const PropertyInfo qdev_prop_blockdev_on_error; extern const PropertyInfo qdev_prop_bios_chs_trans; @@ -41,6 +42,9 @@ extern const PropertyInfo qdev_prop_pcie_link_width; #define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \ MultiFDCompression) +#define DEFINE_PROP_MIG_MODE(_n, _s, _f, _d) \ + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_mig_mode, \ + MigMode) #define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \ LostTickPolicy) diff --git a/include/migration/misc.h b/include/migration/misc.h index 4659067..1e01134 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -15,6 +15,7 @@ #define MIGRATION_MISC_H =20 #include "qemu/notify.h" +#include "qapi/qapi-types-migration.h" #include "qapi/qapi-types-net.h" =20 /* migration/ram.c */ @@ -75,4 +76,7 @@ bool migration_in_bg_snapshot(void); /* migration/block-dirty-bitmap.c */ void dirty_bitmap_mig_init(void); =20 +MigMode migrate_mode(void); +MigMode migrate_mode_of(MigrationState *s); + #endif diff --git a/migration/migration.c b/migration/migration.c index d1cfca1..38584db 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -904,6 +904,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error= **errp) =20 /* TODO use QAPI_CLONE() instead of duplicating it inline */ params =3D g_malloc0(sizeof(*params)); + params->has_mode =3D true; + params->mode =3D s->parameters.mode; params->has_compress_level =3D true; params->compress_level =3D s->parameters.compress_level; params->has_compress_threads =3D true; @@ -1576,6 +1578,10 @@ static void migrate_params_test_apply(MigrateSetPara= meters *params, =20 /* TODO use QAPI_CLONE() instead of duplicating it inline */ =20 + if (params->has_mode) { + dest->mode =3D params->mode; + } + if (params->has_compress_level) { dest->compress_level =3D params->compress_level; } @@ -1673,6 +1679,10 @@ static void migrate_params_apply(MigrateSetParameter= s *params, Error **errp) =20 /* TODO use QAPI_CLONE() instead of duplicating it inline */ =20 + if (params->has_mode) { + s->parameters.mode =3D params->mode; + } + if (params->has_compress_level) { s->parameters.compress_level =3D params->compress_level; } @@ -2663,6 +2673,20 @@ int migrate_use_tls(void) return s->parameters.tls_creds && *s->parameters.tls_creds; } =20 +MigMode migrate_mode(void) +{ + MigrationState *s; + + s =3D migrate_get_current(); + + return s->parameters.mode; +} + +MigMode migrate_mode_of(MigrationState *s) +{ + return s->parameters.mode; +} + int migrate_use_xbzrle(void) { MigrationState *s; @@ -4321,6 +4345,9 @@ static Property migration_properties[] =3D { clear_bitmap_shift, CLEAR_BITMAP_SHIFT_DEFAULT), =20 /* Migration parameters */ + DEFINE_PROP_MIG_MODE("mode", MigrationState, + parameters.mode, + MIG_MODE_NORMAL), DEFINE_PROP_UINT8("x-compress-level", MigrationState, parameters.compress_level, DEFAULT_MIGRATE_COMPRESS_LEVEL), @@ -4454,6 +4481,7 @@ static void migration_instance_init(Object *obj) params->tls_creds =3D g_strdup(""); =20 /* Set has_* up only for parameter checks */ + params->has_mode =3D true; params->has_compress_level =3D true; params->has_compress_threads =3D true; params->has_decompress_threads =3D true; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index c6cd6f9..6632ada 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -431,6 +431,10 @@ void hmp_info_migrate_parameters(Monitor *mon, const Q= Dict *qdict) monitor_printf(mon, "%s: %" PRIu64 " ms\n", MigrationParameter_str(MIGRATION_PARAMETER_ANNOUNCE_STEP), params->announce_step); + assert(params->has_mode); + monitor_printf(mon, "%s: %s\n", + MigrationParameter_str(MIGRATION_PARAMETER_MODE), + qapi_enum_lookup(&MigMode_lookup, params->mode)); assert(params->has_compress_level); monitor_printf(mon, "%s: %u\n", MigrationParameter_str(MIGRATION_PARAMETER_COMPRESS_LEVEL), @@ -1219,6 +1223,10 @@ void hmp_migrate_set_parameter(Monitor *mon, const Q= Dict *qdict) } =20 switch (val) { + case MIGRATION_PARAMETER_MODE: + p->has_mode =3D true; + visit_type_MigMode(v, param, &p->mode, &err); + break; case MIGRATION_PARAMETER_COMPRESS_LEVEL: p->has_compress_level =3D true; visit_type_uint8(v, param, &p->compress_level, &err); diff --git a/qapi/migration.json b/qapi/migration.json index 81185d4..931c492 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -568,6 +568,16 @@ { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] } =20 ## +# @MigMode: +# +# @normal: the original form of migration. +# +# Since: 7.1 +## +{ 'enum': 'MigMode', + 'data': [ 'normal' ] } + +## # @BitmapMigrationBitmapAliasTransform: # # @persistent: If present, the bitmap will be made persistent @@ -627,6 +637,9 @@ # # Migration parameters enumeration # +# @mode: Migration mode. See description in @MigMode. Default is 'normal'. +# (Since 7.1) +# # @announce-initial: Initial delay (in milliseconds) before sending the fi= rst # announce (Since 4.0) # @@ -782,7 +795,8 @@ # Since: 2.4 ## { 'enum': 'MigrationParameter', - 'data': ['announce-initial', 'announce-max', + 'data': ['mode', + 'announce-initial', 'announce-max', 'announce-rounds', 'announce-step', 'compress-level', 'compress-threads', 'decompress-threads', 'compress-wait-thread', 'throttle-trigger-threshold', @@ -801,6 +815,9 @@ ## # @MigrateSetParameters: # +# @mode: Migration mode. See description in @MigMode. Default is 'normal'. +# (Since 7.1) +# # @announce-initial: Initial delay (in milliseconds) before sending the fi= rst # announce (Since 4.0) # @@ -949,7 +966,8 @@ # TODO either fuse back into MigrationParameters, or make # MigrationParameters members mandatory { 'struct': 'MigrateSetParameters', - 'data': { '*announce-initial': 'size', + 'data': { '*mode': 'MigMode', + '*announce-initial': 'size', '*announce-max': 'size', '*announce-rounds': 'size', '*announce-step': 'size', @@ -999,6 +1017,9 @@ # # The optional members aren't actually optional. # +# @mode: Migration mode. See description in @MigMode. Default is 'normal'. +# (Since 7.1) +# # @announce-initial: Initial delay (in milliseconds) before sending the # first announce (Since 4.0) # @@ -1147,7 +1168,8 @@ # Since: 2.4 ## { 'struct': 'MigrationParameters', - 'data': { '*announce-initial': 'size', + 'data': { '*mode': 'MigMode', + '*announce-initial': 'size', '*announce-max': 'size', '*announce-rounds': 'size', '*announce-step': 'size', --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853061; cv=none; d=zohomail.com; s=zohoarc; b=aAQUJrGzW6HbkR8XsF7wxxIM5yHjx5gMiCoHWpFs1MlYYFsBAoTgtOg7LdqC/lR3uRUQgM74JDpCLlUV7TlvwMWKh7gK8akGYEsLoMhzuBnROozecd5XSNDoY6AUgqzhqtGRBWFxJ3WyiYi6atJSmYtSUbif0AO4uuxjoBpq1/s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853061; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=u2MWiSZpF/89/yzfefk2Fsd8NnqPznxjKBk/scAaZvA=; b=fGF43Ebr4MTfLf5YrZn/oZGIutg3OrRUCVwx8T+hQP4Bg0sJ+hn5OixL/a1HGIs7/i/WjvWUnuEZMiEODHJS1cDNBREuQ7fGnSWeBM96veJ3qsoG+ABRkbmSpfkJHhCrHGZ3laWkgfHK80ObwdOTheoveWwt1MCw3lYP+n7icZ0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853061684829.1602964417849; Tue, 26 Jul 2022 09:31:01 -0700 (PDT) Received: from localhost ([::1]:52722 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNSW-0003HV-IB for importer@patchew.org; Tue, 26 Jul 2022 12:31:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34958) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9p-0002yb-Qb for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:42 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:50384) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9n-0006AM-HS for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:41 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn4hv016269; Tue, 26 Jul 2022 16:10:57 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0t5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:57 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFswoO006211; Tue, 26 Jul 2022 16:10:55 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq18k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:53 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSJ023334; Tue, 26 Jul 2022 16:10:52 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-6; Tue, 26 Jul 2022 16:10:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=u2MWiSZpF/89/yzfefk2Fsd8NnqPznxjKBk/scAaZvA=; b=TMtxlw62/7naRMWgmpPUlJtYh3IJ0oC+tIgmEprRiq3NN+fqJLqcLf9s5TzIZJTfdlmt RB+QyuRwYrnUhm0P7cy8Yiwma/BtTH+g3CrAYGYoq5vRDy+MNI3O7b/VEXHAgUgZlZ5h Ts28yI4jnaKaMos8lf7W++441vKMN0Fg89r2Q3007AXfomevxTCFsEHuJK6couOYCyFh 797lYhYNzZ3wKeabXPxtuEwEiwQAAbtv0nHoELAVw6rv0iuXeCi0R4AiGdpRLMG2A1Bu dlTQCj9FZ9z7H+a8BEr3m0Pe7SRGGynuiWAih/wWKBo2fEPqDXt5nSbpIMUbEz69QFNt IA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 05/46] migration: migrate-enable-mode option Date: Tue, 26 Jul 2022 09:10:02 -0700 Message-Id: <1658851843-236870-6-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: iF24gUVxG8YJCaf4dLmv1TdeCCgll1us X-Proofpoint-ORIG-GUID: iF24gUVxG8YJCaf4dLmv1TdeCCgll1us Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853062672100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add the '-migrate-enable-mode ' command-line option as a pre-requisite for migration using the mode. Multiple -migrate-enable-mode options may be specified, one per mode. Requiring -migrate-enable-mode allows qemu to initialize objects differently, if necessary, so that migration for a mode is not blocked. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/migration/misc.h | 2 ++ migration/migration.c | 31 +++++++++++++++++++++++++++++++ qemu-options.hx | 10 ++++++++++ softmmu/vl.c | 4 ++++ 4 files changed, 47 insertions(+) diff --git a/include/migration/misc.h b/include/migration/misc.h index 1e01134..71b6285 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -78,5 +78,7 @@ void dirty_bitmap_mig_init(void); =20 MigMode migrate_mode(void); MigMode migrate_mode_of(MigrationState *s); +void migrate_enable_mode(MigMode mode); +bool migrate_mode_enabled(MigMode mode); =20 #endif diff --git a/migration/migration.c b/migration/migration.c index 38584db..5f704a9 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -173,6 +173,7 @@ INITIALIZE_MIGRATE_CAPS_SET(check_caps_background_snaps= hot, =20 static MigrationState *current_migration; static MigrationIncomingState *current_incoming; +static int migrate_enabled_modes =3D BIT(MIG_MODE_NORMAL); =20 static GSList *migration_blockers; =20 @@ -2140,6 +2141,29 @@ bool migration_is_active(MigrationState *s) s->state =3D=3D MIGRATION_STATUS_POSTCOPY_ACTIVE); } =20 +void migrate_enable_mode(MigMode mode) +{ + migrate_enabled_modes |=3D BIT(mode); +} + +bool migrate_mode_enabled(MigMode mode) +{ + return !!(migrate_enabled_modes & BIT(mode)); +} + +static int migrate_check_enabled(Error **errp) +{ + MigMode mode =3D migrate_mode(); + + if (!migrate_mode_enabled(mode)) { + error_setg(errp, "migrate mode is not enabled. " + "Use '-migrate-mode-enable %s'.", + MigMode_str(mode)); + return -1; + } + return 0; +} + void migrate_init(MigrationState *s) { /* @@ -2210,6 +2234,9 @@ void qmp_migrate_incoming(const char *uri, Error **er= rp) Error *local_err =3D NULL; static bool once =3D true; =20 + if (migrate_check_enabled(errp)) { + return; + } if (!once) { error_setg(errp, "The incoming migration has already been started"= ); return; @@ -2356,6 +2383,10 @@ static bool migrate_prepare(MigrationState *s, bool = blk, bool blk_inc, return false; } =20 + if (migrate_check_enabled(errp)) { + return false; + } + if (migration_is_blocked(errp)) { return false; } diff --git a/qemu-options.hx b/qemu-options.hx index 5ff47f4..7797d3d 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4491,6 +4491,16 @@ SRST an unmigratable state. ERST =20 +DEF("migrate-mode-enable", HAS_ARG, QEMU_OPTION_migrate_mode_enable, \ + "-migrate-mode-enable enable the migration mode.\n", + QEMU_ARCH_ALL) +SRST +``-migrate-mode-enable `` + Enable the specified migrate mode. May be supplied + multiple times, once per mode. This is a pre-requisite for performing= a + migration using any mode except 'normal'. +ERST + DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \ "-nodefaults don't create default devices\n", QEMU_ARCH_ALL) SRST diff --git a/softmmu/vl.c b/softmmu/vl.c index 7189eb6..83f3be0 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -3364,6 +3364,10 @@ void qemu_init(int argc, char **argv, char **envp) case QEMU_OPTION_only_migratable: only_migratable =3D 1; break; + case QEMU_OPTION_migrate_mode_enable: + migrate_enable_mode(qapi_enum_parse(&MigMode_lookup, optar= g, -1, + &error_fatal)); + break; case QEMU_OPTION_nodefaults: has_defaults =3D 0; break; --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852368; cv=none; d=zohomail.com; s=zohoarc; b=NJdMn0Wh7kO2J7SnCbfmK/p6KDK2Ek3tsJGb3l3dH8uXQFR+PzjOb/Zy0eNc9efb/0hJYqcPZ7IOU1kqkI8LUQWxhUhcIUB/4v3K9ivWtHdxqaF2xMtjCharoJUUsIs2Z5RampSnR/Pfdr4oxUPN+sxA0KgOcpxZ71odEn7SnxQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852368; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=U1Mik0w7CDm3RlE+NfQIygg6V6lDTTR0L9ArbE67Rh4=; b=Tj8OWDif4mCzqswOXRxdPdGH9dGjLn1nRqXmxRyzM6jkgQasKkQ6++E/LoGogrrL6a+gfrsmbVKO6qZ6amqHbVtowBgPPrqlJcreDnEnOofQRrOhddEpGNGkDT4bGb2ElZwHdS2fUqk8IF/QFyg4gCmpQTrgovNhMPNINRG8MVI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852368492133.98888469245173; Tue, 26 Jul 2022 09:19:28 -0700 (PDT) Received: from localhost ([::1]:56382 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNHK-0003Ah-PO for importer@patchew.org; Tue, 26 Jul 2022 12:19:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35104) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9v-00033I-VD for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:47 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:60626) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9r-0006BG-IE for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:47 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnQMC006253; Tue, 26 Jul 2022 16:10:57 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940ptyv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:56 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEu0Uo006207; Tue, 26 Jul 2022 16:10:55 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1a8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:55 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSL023334; Tue, 26 Jul 2022 16:10:54 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-7; Tue, 26 Jul 2022 16:10:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=U1Mik0w7CDm3RlE+NfQIygg6V6lDTTR0L9ArbE67Rh4=; b=WhnT6SWwSKhzRDZDkoSgYBoJlE8koQDF0ZMmNLicoKD0yghEmGERWK/Krbl+pYR+1Mpx kpps/MS9ZmBRIDx4rkCxvshM36mM/39sxv7P+Bq7+fDURoYmTk+xB/+iKjSGaTL+OcvX WXO2UIH5YrJW3HkV+xcT4xGtXLZkPnRs984E7Ljsu8U45BPMoIiXN3mBNMUB8h78wOzj 57tr7pil5FT+eYgtRZF/JsKyXWuRcbohRdZPRAP/E9xsb09Ah5ozObh8RyomuCC0/6s+ AWJrDdD9LmuJXFA8mwz1I2urOJEWdgWbtJ11YLwY3CgHdCZIAAGH3Z52LU+nTXyu5/jQ 0g== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 06/46] migration: simplify blockers Date: Tue, 26 Jul 2022 09:10:03 -0700 Message-Id: <1658851843-236870-7-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: YFTMkKExBq24NrmuXvGeZnhhMJimKe40 X-Proofpoint-ORIG-GUID: YFTMkKExBq24NrmuXvGeZnhhMJimKe40 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852370456100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Modify migrate_add_blocker and migrate_del_blocker to take an Error ** reason. This allows migration to own the Error object, so that if an error occurs, migration code can free the Error and clear the client handle, simplifying client code. This is a pre-requisite for a subsequent patch that will allow one Error blocker to be registered for multiple migration modes. No functional change. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- backends/tpm/tpm_emulator.c | 10 ++-------- block/parallels.c | 6 ++---- block/qcow.c | 6 ++---- block/vdi.c | 6 ++---- block/vhdx.c | 6 ++---- block/vmdk.c | 6 ++---- block/vpc.c | 6 ++---- block/vvfat.c | 6 ++---- dump/dump.c | 4 ++-- hw/9pfs/9p.c | 10 ++-------- hw/display/virtio-gpu-base.c | 8 ++------ hw/intc/arm_gic_kvm.c | 3 +-- hw/intc/arm_gicv3_its_kvm.c | 3 +-- hw/intc/arm_gicv3_kvm.c | 3 +-- hw/misc/ivshmem.c | 8 ++------ hw/ppc/pef.c | 2 +- hw/ppc/spapr.c | 2 +- hw/ppc/spapr_events.c | 2 +- hw/ppc/spapr_rtas.c | 2 +- hw/remote/proxy.c | 7 ++----- hw/s390x/s390-virtio-ccw.c | 9 +++------ hw/scsi/vhost-scsi.c | 8 +++----- hw/vfio/migration.c | 13 ++----------- hw/virtio/vhost-vdpa.c | 6 +++--- hw/virtio/vhost.c | 8 ++------ include/migration/blocker.h | 28 ++++++++++++++++++++++------ migration/migration.c | 29 +++++++++++++++++++++-------- stubs/migr-blocker.c | 4 ++-- target/i386/kvm/kvm.c | 8 ++++---- target/i386/nvmm/nvmm-all.c | 3 +-- target/i386/sev.c | 2 +- target/i386/whpx/whpx-all.c | 3 +-- ui/vdagent.c | 5 ++--- 33 files changed, 100 insertions(+), 132 deletions(-) diff --git a/backends/tpm/tpm_emulator.c b/backends/tpm/tpm_emulator.c index 87d061e..ed67633 100644 --- a/backends/tpm/tpm_emulator.c +++ b/backends/tpm/tpm_emulator.c @@ -492,11 +492,8 @@ static int tpm_emulator_block_migration(TPMEmulator *t= pm_emu) error_setg(&tpm_emu->migration_blocker, "Migration disabled: TPM emulator does not support " "migration"); - if (migrate_add_blocker(tpm_emu->migration_blocker, &err) < 0) { + if (migrate_add_blocker(&tpm_emu->migration_blocker, &err) < 0) { error_report_err(err); - error_free(tpm_emu->migration_blocker); - tpm_emu->migration_blocker =3D NULL; - return -1; } } @@ -950,10 +947,7 @@ static void tpm_emulator_inst_finalize(Object *obj) =20 qapi_free_TPMEmulatorOptions(tpm_emu->options); =20 - if (tpm_emu->migration_blocker) { - migrate_del_blocker(tpm_emu->migration_blocker); - error_free(tpm_emu->migration_blocker); - } + migrate_del_blocker(&tpm_emu->migration_blocker); =20 tpm_sized_buffer_reset(&state_blobs->volatil); tpm_sized_buffer_reset(&state_blobs->permanent); diff --git a/block/parallels.c b/block/parallels.c index 8b235b9..25d24d6 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -878,9 +878,8 @@ static int parallels_open(BlockDriverState *bs, QDict *= options, int flags, error_setg(&s->migration_blocker, "The Parallels format used by node '= %s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail; } qemu_co_mutex_init(&s->lock); @@ -912,8 +911,7 @@ static void parallels_close(BlockDriverState *bs) g_free(s->bat_dirty_bmap); qemu_vfree(s->header); =20 - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); } =20 static BlockDriver bdrv_parallels =3D { diff --git a/block/qcow.c b/block/qcow.c index 311aaa8..3b4e6a4 100644 --- a/block/qcow.c +++ b/block/qcow.c @@ -305,9 +305,8 @@ static int qcow_open(BlockDriverState *bs, QDict *optio= ns, int flags, error_setg(&s->migration_blocker, "The qcow format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail; } =20 @@ -798,8 +797,7 @@ static void qcow_close(BlockDriverState *bs) g_free(s->cluster_cache); g_free(s->cluster_data); =20 - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); } =20 static int coroutine_fn qcow_co_create(BlockdevCreateOptions *opts, diff --git a/block/vdi.c b/block/vdi.c index e942325..cead854 100644 --- a/block/vdi.c +++ b/block/vdi.c @@ -495,9 +495,8 @@ static int vdi_open(BlockDriverState *bs, QDict *option= s, int flags, error_setg(&s->migration_blocker, "The vdi format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail_free_bmap; } =20 @@ -985,8 +984,7 @@ static void vdi_close(BlockDriverState *bs) =20 qemu_vfree(s->bmap); =20 - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); } =20 static int vdi_has_zero_init(BlockDriverState *bs) diff --git a/block/vhdx.c b/block/vhdx.c index e10e78e..07b6077 100644 --- a/block/vhdx.c +++ b/block/vhdx.c @@ -985,8 +985,7 @@ static void vhdx_close(BlockDriverState *bs) s->bat =3D NULL; qemu_vfree(s->parent_entries); s->parent_entries =3D NULL; - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); qemu_vfree(s->log.hdr); s->log.hdr =3D NULL; vhdx_region_unregister_all(s); @@ -1094,9 +1093,8 @@ static int vhdx_open(BlockDriverState *bs, QDict *opt= ions, int flags, error_setg(&s->migration_blocker, "The vhdx format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail; } =20 diff --git a/block/vmdk.c b/block/vmdk.c index fe07a54..7a7cb57 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1360,9 +1360,8 @@ static int vmdk_open(BlockDriverState *bs, QDict *opt= ions, int flags, error_setg(&s->migration_blocker, "The vmdk format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail; } =20 @@ -2855,8 +2854,7 @@ static void vmdk_close(BlockDriverState *bs) vmdk_free_extents(bs); g_free(s->create_type); =20 - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); } =20 static int64_t vmdk_get_allocated_file_size(BlockDriverState *bs) diff --git a/block/vpc.c b/block/vpc.c index 4f49ef2..a465784 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -450,9 +450,8 @@ static int vpc_open(BlockDriverState *bs, QDict *option= s, int flags, error_setg(&s->migration_blocker, "The vpc format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail; } =20 @@ -1188,8 +1187,7 @@ static void vpc_close(BlockDriverState *bs) g_free(s->pageentry_u8); #endif =20 - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); } =20 static QemuOptsList vpc_create_opts =3D { diff --git a/block/vvfat.c b/block/vvfat.c index d6dd919..bc96876 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -1265,9 +1265,8 @@ static int vvfat_open(BlockDriverState *bs, QDict *op= tions, int flags, "The vvfat (rw) format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(s->migration_blocker, errp); + ret =3D migrate_add_blocker(&s->migration_blocker, errp); if (ret < 0) { - error_free(s->migration_blocker); goto fail; } } @@ -3216,8 +3215,7 @@ static void vvfat_close(BlockDriverState *bs) g_free(s->cluster_buffer); =20 if (s->qcow) { - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); + migrate_del_blocker(&s->migration_blocker); } } =20 diff --git a/dump/dump.c b/dump/dump.c index 4d9658f..9e4ab73 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -108,7 +108,7 @@ static int dump_cleanup(DumpState *s) qemu_mutex_unlock_iothread(); } } - migrate_del_blocker(dump_migration_blocker); + migrate_del_blocker(&dump_migration_blocker); =20 return 0; } @@ -1970,7 +1970,7 @@ void qmp_dump_guest_memory(bool paging, const char *f= ile, * Allows even for -only-migratable, but forbid migration during the * process of dump guest memory. */ - if (migrate_add_blocker_internal(dump_migration_blocker, errp)) { + if (migrate_add_blocker_internal(&dump_migration_blocker, errp)) { /* Remember to release the fd before passing it over to dump state= */ close(fd); return; diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index aebadea..d5ac01f 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -409,11 +409,7 @@ static int coroutine_fn put_fid(V9fsPDU *pdu, V9fsFidS= tate *fidp) * delete the migration blocker. Ideally, this * should be hooked to transport close notification */ - if (pdu->s->migration_blocker) { - migrate_del_blocker(pdu->s->migration_blocker); - error_free(pdu->s->migration_blocker); - pdu->s->migration_blocker =3D NULL; - } + migrate_del_blocker(&pdu->s->migration_blocker); } return free_fid(pdu, fidp); } @@ -1491,10 +1487,8 @@ static void coroutine_fn v9fs_attach(void *opaque) error_setg(&s->migration_blocker, "Migration is disabled when VirtFS export path '%s' is = mounted in the guest using mount_tag '%s'", s->ctx.fs_root ? s->ctx.fs_root : "NULL", s->tag); - err =3D migrate_add_blocker(s->migration_blocker, NULL); + err =3D migrate_add_blocker(&s->migration_blocker, NULL); if (err < 0) { - error_free(s->migration_blocker); - s->migration_blocker =3D NULL; clunk_fid(s, fid); goto out; } diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index a29f191..995c9a9 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -167,8 +167,7 @@ virtio_gpu_base_device_realize(DeviceState *qdev, =20 if (virtio_gpu_virgl_enabled(g->conf)) { error_setg(&g->migration_blocker, "virgl is not yet migratable"); - if (migrate_add_blocker(g->migration_blocker, errp) < 0) { - error_free(g->migration_blocker); + if (migrate_add_blocker(&g->migration_blocker, errp) < 0) { return false; } } @@ -232,10 +231,7 @@ virtio_gpu_base_device_unrealize(DeviceState *qdev) { VirtIOGPUBase *g =3D VIRTIO_GPU_BASE(qdev); =20 - if (g->migration_blocker) { - migrate_del_blocker(g->migration_blocker); - error_free(g->migration_blocker); - } + migrate_del_blocker(&g->migration_blocker); } =20 static void diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c index 7d2a132..c9fac45 100644 --- a/hw/intc/arm_gic_kvm.c +++ b/hw/intc/arm_gic_kvm.c @@ -514,8 +514,7 @@ static void kvm_arm_gic_realize(DeviceState *dev, Error= **errp) if (!kvm_arm_gic_can_save_restore(s)) { error_setg(&s->migration_blocker, "This operating system kernel do= es " "not support vGICv2 migration"); - if (migrate_add_blocker(s->migration_blocker, errp) < 0) { - error_free(s->migration_blocker); + if (migrate_add_blocker(&s->migration_blocker, errp) < 0) { return; } } diff --git a/hw/intc/arm_gicv3_its_kvm.c b/hw/intc/arm_gicv3_its_kvm.c index 529c7bd..b80d2a6 100644 --- a/hw/intc/arm_gicv3_its_kvm.c +++ b/hw/intc/arm_gicv3_its_kvm.c @@ -114,8 +114,7 @@ static void kvm_arm_its_realize(DeviceState *dev, Error= **errp) GITS_CTLR)) { error_setg(&s->migration_blocker, "This operating system kernel " "does not support vITS migration"); - if (migrate_add_blocker(s->migration_blocker, errp) < 0) { - error_free(s->migration_blocker); + if (migrate_add_blocker(&s->migration_blocker, errp) < 0) { return; } } else { diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c index 3ca643e..edd058e 100644 --- a/hw/intc/arm_gicv3_kvm.c +++ b/hw/intc/arm_gicv3_kvm.c @@ -876,8 +876,7 @@ static void kvm_arm_gicv3_realize(DeviceState *dev, Err= or **errp) GICD_CTLR)) { error_setg(&s->migration_blocker, "This operating system kernel do= es " "not support vGICv3 migration"); - if (migrate_add_blocker(s->migration_blocker, errp) < 0) { - error_free(s->migration_blocker); + if (migrate_add_blocker(&s->migration_blocker, errp) < 0) { return; } } diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index 8270db5..29fd249 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -903,8 +903,7 @@ static void ivshmem_common_realize(PCIDevice *dev, Erro= r **errp) if (!ivshmem_is_master(s)) { error_setg(&s->migration_blocker, "Migration is disabled when using feature 'peer mode' i= n device 'ivshmem'"); - if (migrate_add_blocker(s->migration_blocker, errp) < 0) { - error_free(s->migration_blocker); + if (migrate_add_blocker(&s->migration_blocker, errp) < 0) { return; } } @@ -922,10 +921,7 @@ static void ivshmem_exit(PCIDevice *dev) IVShmemState *s =3D IVSHMEM_COMMON(dev); int i; =20 - if (s->migration_blocker) { - migrate_del_blocker(s->migration_blocker); - error_free(s->migration_blocker); - } + migrate_del_blocker(&s->migration_blocker); =20 if (memory_region_is_mapped(s->ivshmem_bar2)) { if (!s->hostmem) { diff --git a/hw/ppc/pef.c b/hw/ppc/pef.c index cc44d5e..d28ed3b 100644 --- a/hw/ppc/pef.c +++ b/hw/ppc/pef.c @@ -63,7 +63,7 @@ static int kvmppc_svm_init(ConfidentialGuestSupport *cgs,= Error **errp) /* add migration blocker */ error_setg(&pef_mig_blocker, "PEF: Migration is not implemented"); /* NB: This can fail if --only-migratable is used */ - migrate_add_blocker(pef_mig_blocker, &error_fatal); + migrate_add_blocker(&pef_mig_blocker, &error_fatal); =20 cgs->ready =3D true; =20 diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index bc9ba6e..386deff 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1723,7 +1723,7 @@ static void spapr_machine_reset(MachineState *machine) /* Signal all vCPUs waiting on this condition */ qemu_cond_broadcast(&spapr->fwnmi_machine_check_interlock_cond); =20 - migrate_del_blocker(spapr->fwnmi_migration_blocker); + migrate_del_blocker(&spapr->fwnmi_migration_blocker); } =20 static void spapr_create_nvram(SpaprMachineState *spapr) diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c index 4508e40..c1b7bb9 100644 --- a/hw/ppc/spapr_events.c +++ b/hw/ppc/spapr_events.c @@ -920,7 +920,7 @@ void spapr_mce_req_event(PowerPCCPU *cpu, bool recovere= d) * fails when running with -only-migrate. A proper interface to * delay migration completion for a bit could avoid that. */ - ret =3D migrate_add_blocker(spapr->fwnmi_migration_blocker, NULL); + ret =3D migrate_add_blocker(&spapr->fwnmi_migration_blocker, NULL); if (ret =3D=3D -EBUSY) { warn_report("Received a fwnmi while migration was in progress"); } diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c index d58b65e..69cdf81 100644 --- a/hw/ppc/spapr_rtas.c +++ b/hw/ppc/spapr_rtas.c @@ -495,7 +495,7 @@ static void rtas_ibm_nmi_interlock(PowerPCCPU *cpu, spapr->fwnmi_machine_check_interlock =3D -1; qemu_cond_signal(&spapr->fwnmi_machine_check_interlock_cond); rtas_st(rets, 0, RTAS_OUT_SUCCESS); - migrate_del_blocker(spapr->fwnmi_migration_blocker); + migrate_del_blocker(&spapr->fwnmi_migration_blocker); } =20 static struct rtas_call { diff --git a/hw/remote/proxy.c b/hw/remote/proxy.c index 1c7786b..d8797ac 100644 --- a/hw/remote/proxy.c +++ b/hw/remote/proxy.c @@ -108,8 +108,7 @@ static void pci_proxy_dev_realize(PCIDevice *device, Er= ror **errp) =20 error_setg(&dev->migration_blocker, "%s does not support migration", TYPE_PCI_PROXY_DEV); - if (migrate_add_blocker(dev->migration_blocker, errp) < 0) { - error_free(dev->migration_blocker); + if (migrate_add_blocker(&dev->migration_blocker, errp) < 0) { object_unref(dev->ioc); return; } @@ -135,9 +134,7 @@ static void pci_proxy_dev_exit(PCIDevice *pdev) qio_channel_close(dev->ioc, NULL); } =20 - migrate_del_blocker(dev->migration_blocker); - - error_free(dev->migration_blocker); + migrate_del_blocker(&dev->migration_blocker); =20 proxy_memory_listener_deconfigure(&dev->proxy_listener); =20 diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index cc3097b..7edf6da 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -323,8 +323,7 @@ static void s390_machine_unprotect(S390CcwMachineState = *ms) { s390_pv_vm_disable(); ms->pv =3D false; - migrate_del_blocker(pv_mig_blocker); - error_free_or_abort(&pv_mig_blocker); + migrate_del_blocker(&pv_mig_blocker); ram_block_discard_disable(false); } =20 @@ -347,11 +346,10 @@ static int s390_machine_protect(S390CcwMachineState *= ms) =20 error_setg(&pv_mig_blocker, "protected VMs are currently not migrateable."); - rc =3D migrate_add_blocker(pv_mig_blocker, &local_err); + rc =3D migrate_add_blocker(&pv_mig_blocker, &local_err); if (rc) { ram_block_discard_disable(false); error_report_err(local_err); - error_free_or_abort(&pv_mig_blocker); return rc; } =20 @@ -359,8 +357,7 @@ static int s390_machine_protect(S390CcwMachineState *ms) rc =3D s390_pv_vm_enable(); if (rc) { ram_block_discard_disable(false); - migrate_del_blocker(pv_mig_blocker); - error_free_or_abort(&pv_mig_blocker); + migrate_del_blocker(&pv_mig_blocker); return rc; } =20 diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 3059068..b5e34f2 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -208,7 +208,7 @@ static void vhost_scsi_realize(DeviceState *dev, Error = **errp) "When external environment supports it (Orchestrator migra= tes " "target SCSI device state or use shared storage over netwo= rk), " "set 'migratable' property to true to enable migration."); - if (migrate_add_blocker(vsc->migration_blocker, errp) < 0) { + if (migrate_add_blocker(&vsc->migration_blocker, errp) < 0) { goto free_virtio; } } @@ -241,10 +241,9 @@ static void vhost_scsi_realize(DeviceState *dev, Error= **errp) free_vqs: g_free(vqs); if (!vsc->migratable) { - migrate_del_blocker(vsc->migration_blocker); + migrate_del_blocker(&vsc->migration_blocker); } free_virtio: - error_free(vsc->migration_blocker); virtio_scsi_common_unrealize(dev); close_fd: if (vhostfd >=3D 0) { @@ -260,8 +259,7 @@ static void vhost_scsi_unrealize(DeviceState *dev) struct vhost_virtqueue *vqs =3D vsc->dev.vqs; =20 if (!vsc->migratable) { - migrate_del_blocker(vsc->migration_blocker); - error_free(vsc->migration_blocker); + migrate_del_blocker(&vsc->migration_blocker); } =20 /* This will stop vhost backend. */ diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index a6ad1f8..d6f9e29 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -887,12 +887,7 @@ add_blocker: "VFIO device doesn't support migration"); g_free(info); =20 - ret =3D migrate_add_blocker(vbasedev->migration_blocker, errp); - if (ret < 0) { - error_free(vbasedev->migration_blocker); - vbasedev->migration_blocker =3D NULL; - } - return ret; + return migrate_add_blocker(&vbasedev->migration_blocker, errp); } =20 void vfio_migration_finalize(VFIODevice *vbasedev) @@ -906,9 +901,5 @@ void vfio_migration_finalize(VFIODevice *vbasedev) vfio_migration_exit(vbasedev); } =20 - if (vbasedev->migration_blocker) { - migrate_del_blocker(vbasedev->migration_blocker); - error_free(vbasedev->migration_blocker); - vbasedev->migration_blocker =3D NULL; - } + migrate_del_blocker(&vbasedev->migration_blocker); } diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index 291cd19..19ea2ee 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -1024,7 +1024,7 @@ static bool vhost_vdpa_svqs_start(struct vhost_dev *d= ev) } =20 if (v->migration_blocker) { - int r =3D migrate_add_blocker(v->migration_blocker, &err); + int r =3D migrate_add_blocker(&v->migration_blocker, &err); if (unlikely(r < 0)) { return false; } @@ -1073,7 +1073,7 @@ err: } =20 if (v->migration_blocker) { - migrate_del_blocker(v->migration_blocker); + migrate_remove_blocker(v->migration_blocker); } =20 return false; @@ -1096,7 +1096,7 @@ static bool vhost_vdpa_svqs_stop(struct vhost_dev *de= v) } =20 if (v->migration_blocker) { - migrate_del_blocker(v->migration_blocker); + migrate_remove_blocker(v->migration_blocker); } return true; } diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 0827d63..ae52b62 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1431,9 +1431,8 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, } =20 if (hdev->migration_blocker !=3D NULL) { - r =3D migrate_add_blocker(hdev->migration_blocker, errp); + r =3D migrate_add_blocker(&hdev->migration_blocker, errp); if (r < 0) { - error_free(hdev->migration_blocker); goto fail_busyloop; } } @@ -1481,10 +1480,7 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) memory_listener_unregister(&hdev->memory_listener); QLIST_REMOVE(hdev, entry); } - if (hdev->migration_blocker) { - migrate_del_blocker(hdev->migration_blocker); - error_free(hdev->migration_blocker); - } + migrate_del_blocker(&hdev->migration_blocker); g_free(hdev->mem); g_free(hdev->mem_sections); if (hdev->vhost_ops) { diff --git a/include/migration/blocker.h b/include/migration/blocker.h index 9cebe2b..1483f5d 100644 --- a/include/migration/blocker.h +++ b/include/migration/blocker.h @@ -17,19 +17,22 @@ /** * @migrate_add_blocker - prevent migration from proceeding * - * @reason - an error to be returned whenever migration is attempted + * @reasonp - address of an error to be returned whenever migration is att= empted * * @errp - [out] The reason (if any) we cannot block migration right now. * * @returns - 0 on success, -EBUSY/-EACCES on failure, with errp set. + * + * *@reasonp is freed and set to NULL if failure is returned. + * On success, the caller must not free *@reasonp before the blocker is re= moved. */ -int migrate_add_blocker(Error *reason, Error **errp); +int migrate_add_blocker(Error **reasonp, Error **errp); =20 /** * @migrate_add_blocker_internal - prevent migration from proceeding witho= ut * only-migrate implications * - * @reason - an error to be returned whenever migration is attempted + * @reasonp - address of an error to be returned whenever migration is att= empted * * @errp - [out] The reason (if any) we cannot block migration right now. * @@ -38,14 +41,27 @@ int migrate_add_blocker(Error *reason, Error **errp); * Some of the migration blockers can be temporary (e.g., for a few second= s), * so it shouldn't need to conflict with "-only-migratable". For those ca= ses, * we can call this function rather than @migrate_add_blocker(). + * + * *@reasonp is freed and set to NULL if failure is returned. + * On success, the caller must not free *@reasonp before the blocker is re= moved. + */ +int migrate_add_blocker_internal(Error **reasonp, Error **errp); + +/** + * @migrate_del_blocker - remove a blocking error from migration and free = it. + * + * @reasonp - address of the error blocking migration + * + * This function frees *@reasonp and sets it to NULL. */ -int migrate_add_blocker_internal(Error *reason, Error **errp); +void migrate_del_blocker(Error **reasonp); =20 /** - * @migrate_del_blocker - remove a blocking error from migration + * @migrate_remove_blocker - remove a migration blocker. * * @reason - the error blocking migration + * */ -void migrate_del_blocker(Error *reason); +void migrate_remove_blocker(Error *reason); =20 #endif diff --git a/migration/migration.c b/migration/migration.c index 5f704a9..0d3bed5 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2198,35 +2198,48 @@ void migrate_init(MigrationState *s) s->threshold_size =3D 0; } =20 -int migrate_add_blocker_internal(Error *reason, Error **errp) +int migrate_add_blocker_internal(Error **reasonp, Error **errp) { /* Snapshots are similar to migrations, so check RUN_STATE_SAVE_VM too= . */ if (runstate_check(RUN_STATE_SAVE_VM) || !migration_is_idle()) { - error_propagate_prepend(errp, error_copy(reason), + error_propagate_prepend(errp, *reasonp, "disallowing migration blocker " "(migration/snapshot in progress) for: "); + *reasonp =3D NULL; return -EBUSY; } =20 - migration_blockers =3D g_slist_prepend(migration_blockers, reason); + migration_blockers =3D g_slist_prepend(migration_blockers, *reasonp); return 0; } =20 -int migrate_add_blocker(Error *reason, Error **errp) +int migrate_add_blocker(Error **reasonp, Error **errp) { if (only_migratable) { - error_propagate_prepend(errp, error_copy(reason), + error_propagate_prepend(errp, *reasonp, "disallowing migration blocker " "(--only-migratable) for: "); + *reasonp =3D NULL; return -EACCES; } =20 - return migrate_add_blocker_internal(reason, errp); + return migrate_add_blocker_internal(reasonp, errp); } =20 -void migrate_del_blocker(Error *reason) +void migrate_del_blocker(Error **reasonp) { - migration_blockers =3D g_slist_remove(migration_blockers, reason); + if (*reasonp) { + migrate_remove_blocker(*reasonp); + error_free(*reasonp); + *reasonp =3D NULL; + } +} + +void migrate_remove_blocker(Error *reason) +{ + if (reason) { + migration_blockers =3D g_slist_remove(migration_blockers, reason); + } } =20 void qmp_migrate_incoming(const char *uri, Error **errp) diff --git a/stubs/migr-blocker.c b/stubs/migr-blocker.c index 5676a2f..17a5dbf 100644 --- a/stubs/migr-blocker.c +++ b/stubs/migr-blocker.c @@ -1,11 +1,11 @@ #include "qemu/osdep.h" #include "migration/blocker.h" =20 -int migrate_add_blocker(Error *reason, Error **errp) +int migrate_add_blocker(Error **reasonp, Error **errp) { return 0; } =20 -void migrate_del_blocker(Error *reason) +void migrate_del_blocker(Error **reasonp) { } diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index f148a6d..a4aba94 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -1571,7 +1571,7 @@ static int hyperv_init_vcpu(X86CPU *cpu) error_setg(&hv_passthrough_mig_blocker, "'hv-passthrough' CPU flag prevents migration, use expl= icit" " set of hv-* flags instead"); - ret =3D migrate_add_blocker(hv_passthrough_mig_blocker, &local_err= ); + ret =3D migrate_add_blocker(&hv_passthrough_mig_blocker, &local_er= r); if (ret < 0) { error_report_err(local_err); return ret; @@ -1585,7 +1585,7 @@ static int hyperv_init_vcpu(X86CPU *cpu) " use explicit 'hv-no-nonarch-coresharing=3Don' instead= (but" " make sure SMT is disabled and/or that vCPUs are prope= rly" " pinned)"); - ret =3D migrate_add_blocker(hv_no_nonarch_cs_mig_blocker, &local_e= rr); + ret =3D migrate_add_blocker(&hv_no_nonarch_cs_mig_blocker, &local_= err); if (ret < 0) { error_report_err(local_err); return ret; @@ -2082,7 +2082,7 @@ int kvm_arch_init_vcpu(CPUState *cs) error_setg(&invtsc_mig_blocker, "State blocked by non-migratable CPU device" " (invtsc flag)"); - r =3D migrate_add_blocker(invtsc_mig_blocker, &local_err); + r =3D migrate_add_blocker(&invtsc_mig_blocker, &local_err); if (r < 0) { error_report_err(local_err); return r; @@ -2149,7 +2149,7 @@ int kvm_arch_init_vcpu(CPUState *cs) return 0; =20 fail: - migrate_del_blocker(invtsc_mig_blocker); + migrate_del_blocker(&invtsc_mig_blocker); =20 return r; } diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c index b75738e..f66b140 100644 --- a/target/i386/nvmm/nvmm-all.c +++ b/target/i386/nvmm/nvmm-all.c @@ -935,9 +935,8 @@ nvmm_init_vcpu(CPUState *cpu) error_setg(&nvmm_migration_blocker, "NVMM: Migration not supported"); =20 - if (migrate_add_blocker(nvmm_migration_blocker, &local_error) < 0)= { + if (migrate_add_blocker(&nvmm_migration_blocker, &local_error) < 0= ) { error_report_err(local_error); - error_free(nvmm_migration_blocker); return -EINVAL; } } diff --git a/target/i386/sev.c b/target/i386/sev.c index 32f7dba..927bd75 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -891,7 +891,7 @@ sev_launch_finish(SevGuestState *sev) /* add migration blocker */ error_setg(&sev_mig_blocker, "SEV: Migration is not implemented"); - migrate_add_blocker(sev_mig_blocker, &error_fatal); + migrate_add_blocker(&sev_mig_blocker, &error_fatal); } =20 static void diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index b22a331..004a80e 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2172,9 +2172,8 @@ int whpx_init_vcpu(CPUState *cpu) "State blocked due to non-migratable CPUID feature support," "dirty memory tracking support, and XSAVE/XRSTOR support"); =20 - if (migrate_add_blocker(whpx_migration_blocker, &local_error) < 0)= { + if (migrate_add_blocker(&whpx_migration_blocker, &local_error) < 0= ) { error_report_err(local_error); - error_free(whpx_migration_blocker); ret =3D -EINVAL; goto error; } diff --git a/ui/vdagent.c b/ui/vdagent.c index aa6167f..e6d1cfd 100644 --- a/ui/vdagent.c +++ b/ui/vdagent.c @@ -672,7 +672,7 @@ static void vdagent_chr_open(Chardev *chr, return; #endif =20 - if (migrate_add_blocker(vd->migration_blocker, errp) !=3D 0) { + if (migrate_add_blocker(&vd->migration_blocker, errp) !=3D 0) { return; } =20 @@ -915,10 +915,9 @@ static void vdagent_chr_fini(Object *obj) { VDAgentChardev *vd =3D QEMU_VDAGENT_CHARDEV(obj); =20 - migrate_del_blocker(vd->migration_blocker); + migrate_del_blocker(&vd->migration_blocker); vdagent_disconnect(vd); buffer_free(&vd->outbuf); - error_free(vd->migration_blocker); } =20 static const TypeInfo vdagent_chr_type_info =3D { --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854081; cv=none; d=zohomail.com; s=zohoarc; b=KWo0YWD1F1u7j+0y2hukHZpVBxhEPzwogLjKzlfplhHUYV0qg+BKPtUthrUSznKux9KNRM28diP4yo6V3x/+sVg/0eZEPvmPDHJwRT+es6v2Z5wMSOHpUmQaruTjDFXGitsymXTB/atlo+x69xnTxaHDoWp5H6WfnriiBbnE7TE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854081; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=BZdgwcLHdh9RxgHARQpnfNRJnvfV9+0XhbZC6FwQLnU=; b=hQDDIjuISK9g2t1OOeoi+/Gbz5T/hZdmDoe2MHk89YuwsBgVgxJMm2SFh+YoF9WhktBtroFGgID+cu+gJ3wSXnrS7MAombGV44+pEOC0V0S0ItcCedQO1gltAPwFiaHF7FNRAPG2bHERQejS8LTeT7BFMD0puQ3gatEB+qrOKss= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854080989320.5652681353067; Tue, 26 Jul 2022 09:48:00 -0700 (PDT) Received: from localhost ([::1]:51784 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNiw-0005Sc-QO for importer@patchew.org; Tue, 26 Jul 2022 12:47:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9y-00038l-VY for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:51 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:5776) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9v-0006Bj-Hu for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:49 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPIo006232; Tue, 26 Jul 2022 16:10:58 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu02-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:57 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEu0Up006207; Tue, 26 Jul 2022 16:10:56 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1bp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:56 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSN023334; Tue, 26 Jul 2022 16:10:55 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-8; Tue, 26 Jul 2022 16:10:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=BZdgwcLHdh9RxgHARQpnfNRJnvfV9+0XhbZC6FwQLnU=; b=OMfc04Mld/WEUYQWh5t/V9f6bof+RZOo7aemP+x0+8JRH1eAeRKgX5AQDizL2M230nCL S+eGYnHHVVJviwDAo24V2fcquR9qdT6rBXKJ0DZv2hhifZ6Yw2QX5o5Xc/ZuTdl4fAGL aezgaHUzuRt+VULrTTqGm0LOXj1k5eqZ3E9JiEPbbkyprGEplv6XiTkRLHRyZFHOAYaN hSHTSs+fdDtlmfkpciw7yD6EFGHUfNhr+izgusQd6Wpg+h3xBVBEjoxa/9hG+zy9CkmZ QisiskevQjfPohjBfPx2iL1zixbrg1nHwh2DLzt0LwoD/8RhPUbEleXflbO5Nra48/7x XA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 07/46] migration: per-mode blockers Date: Tue, 26 Jul 2022 09:10:04 -0700 Message-Id: <1658851843-236870-8-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: Myb_eXE9ZD1lQFNLwD97NVvK9MBTLkOE X-Proofpoint-ORIG-GUID: Myb_eXE9ZD1lQFNLwD97NVvK9MBTLkOE Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854082542100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Extend the blocker interface so that a blocker can be registered for one or more migration modes. The existing interfaces register a blocker for all modes, and the new interfaces take a varargs list of modes. Internally, maintain a separate blocker list per mode. The same Error object may be added to multiple lists. When a block is deleted, it is removed from every list, and the Error is freed. No functional change until a new mode is added. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/migration/blocker.h | 45 ++++++++++++++++++++--- migration/migration.c | 87 +++++++++++++++++++++++++++++++++++++++--= ---- stubs/migr-blocker.c | 5 +++ 3 files changed, 123 insertions(+), 14 deletions(-) diff --git a/include/migration/blocker.h b/include/migration/blocker.h index 1483f5d..1a21937 100644 --- a/include/migration/blocker.h +++ b/include/migration/blocker.h @@ -14,8 +14,12 @@ #ifndef MIGRATION_BLOCKER_H #define MIGRATION_BLOCKER_H =20 +#include "qapi/qapi-types-migration.h" + +#define MIG_MODE_ALL MIG_MODE__MAX + /** - * @migrate_add_blocker - prevent migration from proceeding + * @migrate_add_blocker - prevent all modes of migration from proceeding * * @reasonp - address of an error to be returned whenever migration is att= empted * @@ -29,8 +33,41 @@ int migrate_add_blocker(Error **reasonp, Error **errp); =20 /** + * @migrate_add_blockers - prevent migration for specified modes from proc= eeding + * + * @reasonp - address of an error to be returned whenever migration is att= empted + * + * @errp - [out] The reason (if any) we cannot block migration right now. + * + * @mode - one or more migration modes to be blocked. The list is termina= ted + * by -1 or MIG_MODE_ALL. For the latter, all modes are blocked. + * + * @returns - 0 on success, -EBUSY/-EACCES on failure, with errp set. + * + * *@reasonp is freed and set to NULL if failure is returned. + * On success, the caller must not free *@reasonp before the blocker is re= moved. + */ +int migrate_add_blockers(Error **reasonp, Error **errp, MigMode mode, ...); + +/** + * @migrate_add_blocker_always - permanently prevent migration for specifi= ed + * modes from proceeding. The blocker cannot be deleted. + * + * @msg - text of error to be returned whenever migration is attempted + * + * @errp - [out] The reason (if any) we cannot block migration right now. + * + * @mode - one or more migration modes to be blocked. The list is termina= ted + * by -1 or MIG_MODE_ALL. For the latter, all modes are blocked. + * + * @returns - 0 on success, -EBUSY/-EACCES on failure, with errp set. + */ +int +migrate_add_blocker_always(const char *msg, Error **errp, MigMode mode, ..= .); + +/** * @migrate_add_blocker_internal - prevent migration from proceeding witho= ut - * only-migrate implications + * only-migrate implications, for all modes * * @reasonp - address of an error to be returned whenever migration is att= empted * @@ -48,7 +85,7 @@ int migrate_add_blocker(Error **reasonp, Error **errp); int migrate_add_blocker_internal(Error **reasonp, Error **errp); =20 /** - * @migrate_del_blocker - remove a blocking error from migration and free = it. + * @migrate_del_blocker - remove a migration blocker for all modes and fre= e it. * * @reasonp - address of the error blocking migration * @@ -57,7 +94,7 @@ int migrate_add_blocker_internal(Error **reasonp, Error *= *errp); void migrate_del_blocker(Error **reasonp); =20 /** - * @migrate_remove_blocker - remove a migration blocker. + * @migrate_remove_blocker - remove a migration blocker for all modes. * * @reason - the error blocking migration * diff --git a/migration/migration.c b/migration/migration.c index 0d3bed5..0e62227 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -175,7 +175,7 @@ static MigrationState *current_migration; static MigrationIncomingState *current_incoming; static int migrate_enabled_modes =3D BIT(MIG_MODE_NORMAL); =20 -static GSList *migration_blockers; +static GSList *migration_blockers[MIG_MODE__MAX]; =20 static bool migration_object_check(MigrationState *ms, Error **errp); static int migration_maybe_pause(MigrationState *s, @@ -1123,7 +1123,7 @@ static void fill_source_migration_info(MigrationInfo = *info) { MigrationState *s =3D migrate_get_current(); int state =3D qatomic_read(&s->state); - GSList *cur_blocker =3D migration_blockers; + GSList *cur_blocker =3D migration_blockers[migrate_mode()]; =20 info->blocked_reasons =3D NULL; =20 @@ -2198,8 +2198,10 @@ void migrate_init(MigrationState *s) s->threshold_size =3D 0; } =20 -int migrate_add_blocker_internal(Error **reasonp, Error **errp) +static int add_blockers(Error **reasonp, Error **errp, int modes) { + MigMode mode; + /* Snapshots are similar to migrations, so check RUN_STATE_SAVE_VM too= . */ if (runstate_check(RUN_STATE_SAVE_VM) || !migration_is_idle()) { error_propagate_prepend(errp, *reasonp, @@ -2209,13 +2211,20 @@ int migrate_add_blocker_internal(Error **reasonp, E= rror **errp) return -EBUSY; } =20 - migration_blockers =3D g_slist_prepend(migration_blockers, *reasonp); + for (mode =3D 0; mode < MIG_MODE__MAX; mode++) { + if (modes & BIT(mode)) { + migration_blockers[mode] =3D g_slist_prepend(migration_blocker= s[mode], + *reasonp); + } + } return 0; } =20 -int migrate_add_blocker(Error **reasonp, Error **errp) +static int check_blockers(Error **reasonp, Error **errp, int modes) { - if (only_migratable) { + ERRP_GUARD(); + + if (only_migratable && (modes & BIT(MIG_MODE_NORMAL))) { error_propagate_prepend(errp, *reasonp, "disallowing migration blocker " "(--only-migratable) for: "); @@ -2223,7 +2232,60 @@ int migrate_add_blocker(Error **reasonp, Error **err= p) return -EACCES; } =20 - return migrate_add_blocker_internal(reasonp, errp); + return add_blockers(reasonp, errp, modes); +} + +int migrate_add_blocker(Error **reasonp, Error **errp) +{ + return migrate_add_blockers(reasonp, errp, MIG_MODE_ALL); +} + +int migrate_add_blocker_internal(Error **reasonp, Error **errp) +{ + int modes =3D BIT(MIG_MODE__MAX) - 1; + + return add_blockers(reasonp, errp, modes); +} + +static int get_modes(MigMode mode, va_list ap) +{ + int modes =3D 0; + + while (mode !=3D -1 && mode !=3D MIG_MODE_ALL) { + assert(mode >=3D MIG_MODE_NORMAL && mode < MIG_MODE__MAX); + modes |=3D BIT(mode); + mode =3D va_arg(ap, MigMode); + } + if (mode =3D=3D MIG_MODE_ALL) { + modes =3D BIT(MIG_MODE__MAX) - 1; + } + return modes; +} + +int migrate_add_blockers(Error **reasonp, Error **errp, MigMode mode, ...) +{ + int modes; + va_list ap; + + va_start(ap, mode); + modes =3D get_modes(mode, ap); + va_end(ap); + + return check_blockers(reasonp, errp, modes); +} + +int migrate_add_blocker_always(const char *msg, Error **errp, MigMode mode= , ...) +{ + int modes; + va_list ap; + Error *reason =3D NULL; + + va_start(ap, mode); + modes =3D get_modes(mode, ap); + va_end(ap); + + error_setg(&reason, "%s", msg); + return check_blockers(&reason, errp, modes); } =20 void migrate_del_blocker(Error **reasonp) @@ -2238,7 +2300,10 @@ void migrate_del_blocker(Error **reasonp) void migrate_remove_blocker(Error *reason) { if (reason) { - migration_blockers =3D g_slist_remove(migration_blockers, reason); + for (MigMode mode =3D 0; mode < MIG_MODE__MAX; mode++) { + migration_blockers[mode] =3D g_slist_remove(migration_blockers= [mode], + reason); + } } } =20 @@ -2333,12 +2398,14 @@ void qmp_migrate_pause(Error **errp) =20 bool migration_is_blocked(Error **errp) { + GSList *blockers =3D migration_blockers[migrate_mode()]; + if (qemu_savevm_state_blocked(errp)) { return true; } =20 - if (migration_blockers) { - error_propagate(errp, error_copy(migration_blockers->data)); + if (blockers) { + error_propagate(errp, error_copy(blockers->data)); return true; } =20 diff --git a/stubs/migr-blocker.c b/stubs/migr-blocker.c index 17a5dbf..60769d8 100644 --- a/stubs/migr-blocker.c +++ b/stubs/migr-blocker.c @@ -6,6 +6,11 @@ int migrate_add_blocker(Error **reasonp, Error **errp) return 0; } =20 +int migrate_add_blockers(Error **reasonp, Error **errp, MigMode mode, ...) +{ + return 0; +} + void migrate_del_blocker(Error **reasonp) { } --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853783; cv=none; d=zohomail.com; s=zohoarc; b=jPJOWE5Asyc9tGXzzc4b0UhmkdV6PpGgOU+o8dD83s17fsalIHT6P13IE5bdsXU2YVbLLRUWflTodziZ2L/HoSfBLHlMry+V9WYqi9jHs2NPM8gr+hGjav2qywT5lpex0gJKzUSVrax+QnUMg2R9BHcDNxHiAEi0m10GxdwLuUQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853783; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=2EOuQhaCd9UWT/Q589HzRGAsuRiC/nE7vvjBOKmhXA4=; b=SCC7f4WlGlVdzaVKwx+DBkViw6bE95pDKcu4tt9gaBPHviWyzhWzSm2DOkRLSSK8BU0jSG7ltQJEg4BWMHmY/wg7YAWoU1QyKWZryDYqJ1oNkb8ERvC1HWKmbkWea1Yh8Rx/y3aXPQ0RWj9F6RArE0oi5BBnIwPEPV4UFEEQy1g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853783040847.6887160568781; Tue, 26 Jul 2022 09:43:03 -0700 (PDT) Received: from localhost ([::1]:44146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNe9-000050-OG for importer@patchew.org; Tue, 26 Jul 2022 12:43:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9t-00030X-8B for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:45 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:59228) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9q-0006BC-TJ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:44 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3rk031740; Tue, 26 Jul 2022 16:11:01 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q193-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:00 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF5Npb006270; Tue, 26 Jul 2022 16:10:58 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1e5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:58 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSP023334; Tue, 26 Jul 2022 16:10:57 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-9; Tue, 26 Jul 2022 16:10:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=2EOuQhaCd9UWT/Q589HzRGAsuRiC/nE7vvjBOKmhXA4=; b=NM6V1f/T42zIOOPmZzCn3ZK8uQaIjgAw6dl3VThQYq8vtFwLIA3Te7jiFd4+klfa7BEN 45ANCz03nZ2IwU2Fr2ZAa6UCH0zp3j3c9gfZpbeOQ3R30g54XAh2y5O2mGlfmXbprJBg wedBEcdjPboKLlbU6hUHw3mCSXX9cnISbT5LnuXCvfmC5gr//grJXmfE+JvF6GNnkSAm nG2O0BeQiC7EV+/poSzUnHLazADykSD4l/OL1UZSTWGVT24ZezkdhlbE9l5ciPYqgREe Gjwnnhvo93L/9KJGaVxjNNESGQiHEIj1P8U/iEYrOAMrmqUQnEucoRg0iLe+FjbuAsj1 0A== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 08/46] cpr: relax some blockers Date: Tue, 26 Jul 2022 09:10:05 -0700 Message-Id: <1658851843-236870-9-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: sP9Yz6skpefXBsizyx8SZz-EMa6PxkDH X-Proofpoint-GUID: sP9Yz6skpefXBsizyx8SZz-EMa6PxkDH Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853784690100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Some devices block migration because they rely on local state that is not migrated to the target host, such as for local filesystems. These need not block cpr, which will restart qemu on the same host. Narrow the scope of these blockers so they only apply to normal mode. They will not block cpr modes when they are added in subsequent patches. No functional change until a new mode is added. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- backends/tpm/tpm_emulator.c | 3 ++- block/parallels.c | 3 ++- block/qcow.c | 3 ++- block/vdi.c | 3 ++- block/vhdx.c | 3 ++- block/vmdk.c | 3 ++- block/vpc.c | 3 ++- block/vvfat.c | 3 ++- hw/9pfs/9p.c | 3 ++- hw/scsi/vhost-scsi.c | 3 ++- hw/virtio/vhost.c | 3 ++- target/i386/nvmm/nvmm-all.c | 3 ++- 12 files changed, 24 insertions(+), 12 deletions(-) diff --git a/backends/tpm/tpm_emulator.c b/backends/tpm/tpm_emulator.c index ed67633..18cac1b 100644 --- a/backends/tpm/tpm_emulator.c +++ b/backends/tpm/tpm_emulator.c @@ -492,7 +492,8 @@ static int tpm_emulator_block_migration(TPMEmulator *tp= m_emu) error_setg(&tpm_emu->migration_blocker, "Migration disabled: TPM emulator does not support " "migration"); - if (migrate_add_blocker(&tpm_emu->migration_blocker, &err) < 0) { + if (migrate_add_blockers(&tpm_emu->migration_blocker, &err, + MIG_MODE_NORMAL, -1) < 0) { error_report_err(err); return -1; } diff --git a/block/parallels.c b/block/parallels.c index 25d24d6..0837c32 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -878,7 +878,8 @@ static int parallels_open(BlockDriverState *bs, QDict *= options, int flags, error_setg(&s->migration_blocker, "The Parallels format used by node '= %s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE_NOR= MAL, + -1); if (ret < 0) { goto fail; } diff --git a/block/qcow.c b/block/qcow.c index 3b4e6a4..4057438 100644 --- a/block/qcow.c +++ b/block/qcow.c @@ -305,7 +305,8 @@ static int qcow_open(BlockDriverState *bs, QDict *optio= ns, int flags, error_setg(&s->migration_blocker, "The qcow format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE_NOR= MAL, + -1); if (ret < 0) { goto fail; } diff --git a/block/vdi.c b/block/vdi.c index cead854..022dab5 100644 --- a/block/vdi.c +++ b/block/vdi.c @@ -495,7 +495,8 @@ static int vdi_open(BlockDriverState *bs, QDict *option= s, int flags, error_setg(&s->migration_blocker, "The vdi format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE_NOR= MAL, + -1); if (ret < 0) { goto fail_free_bmap; } diff --git a/block/vhdx.c b/block/vhdx.c index 07b6077..8564777 100644 --- a/block/vhdx.c +++ b/block/vhdx.c @@ -1093,7 +1093,8 @@ static int vhdx_open(BlockDriverState *bs, QDict *opt= ions, int flags, error_setg(&s->migration_blocker, "The vhdx format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE_NOR= MAL, + -1); if (ret < 0) { goto fail; } diff --git a/block/vmdk.c b/block/vmdk.c index 7a7cb57..043b895 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -1360,7 +1360,8 @@ static int vmdk_open(BlockDriverState *bs, QDict *opt= ions, int flags, error_setg(&s->migration_blocker, "The vmdk format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE_NOR= MAL, + -1); if (ret < 0) { goto fail; } diff --git a/block/vpc.c b/block/vpc.c index a465784..6a25e2d 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -450,7 +450,8 @@ static int vpc_open(BlockDriverState *bs, QDict *option= s, int flags, error_setg(&s->migration_blocker, "The vpc format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE_NOR= MAL, + -1); if (ret < 0) { goto fail; } diff --git a/block/vvfat.c b/block/vvfat.c index bc96876..45f3280 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -1265,7 +1265,8 @@ static int vvfat_open(BlockDriverState *bs, QDict *op= tions, int flags, "The vvfat (rw) format used by node '%s' " "does not support live migration", bdrv_get_device_or_node_name(bs)); - ret =3D migrate_add_blocker(&s->migration_blocker, errp); + ret =3D migrate_add_blockers(&s->migration_blocker, errp, MIG_MODE= _NORMAL, + -1); if (ret < 0) { goto fail; } diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index d5ac01f..3a48f32 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -1487,7 +1487,8 @@ static void coroutine_fn v9fs_attach(void *opaque) error_setg(&s->migration_blocker, "Migration is disabled when VirtFS export path '%s' is = mounted in the guest using mount_tag '%s'", s->ctx.fs_root ? s->ctx.fs_root : "NULL", s->tag); - err =3D migrate_add_blocker(&s->migration_blocker, NULL); + err =3D migrate_add_blockers(&s->migration_blocker, NULL, MIG_MODE= _NORMAL, + -1); if (err < 0) { clunk_fid(s, fid); goto out; diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index b5e34f2..4a9d711 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -208,7 +208,8 @@ static void vhost_scsi_realize(DeviceState *dev, Error = **errp) "When external environment supports it (Orchestrator migra= tes " "target SCSI device state or use shared storage over netwo= rk), " "set 'migratable' property to true to enable migration."); - if (migrate_add_blocker(&vsc->migration_blocker, errp) < 0) { + if (migrate_add_blockers(&vsc->migration_blocker, errp, MIG_MODE_N= ORMAL, + -1) < 0) { goto free_virtio; } } diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index ae52b62..8d2a136 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1431,7 +1431,8 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, } =20 if (hdev->migration_blocker !=3D NULL) { - r =3D migrate_add_blocker(&hdev->migration_blocker, errp); + r =3D migrate_add_blockers(&hdev->migration_blocker, errp, + MIG_MODE_NORMAL, -1); if (r < 0) { goto fail_busyloop; } diff --git a/target/i386/nvmm/nvmm-all.c b/target/i386/nvmm/nvmm-all.c index f66b140..e102f64 100644 --- a/target/i386/nvmm/nvmm-all.c +++ b/target/i386/nvmm/nvmm-all.c @@ -935,7 +935,8 @@ nvmm_init_vcpu(CPUState *cpu) error_setg(&nvmm_migration_blocker, "NVMM: Migration not supported"); =20 - if (migrate_add_blocker(&nvmm_migration_blocker, &local_error) < 0= ) { + if (migrate_add_blockers(&nvmm_migration_blocker, &local_error, + MIG_MODE_NORMAL, -1) < 0) { error_report_err(local_error); return -EINVAL; } --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854324; cv=none; d=zohomail.com; s=zohoarc; b=V64ruYqLAqWGyNZKKpvIK68VlBfxiOCMeElcYq8bHUZ7XIv6BPJBAbP7mA3CKV+5G6gqLlkywyeOB03UKDkF+4NxHJKe/XLQhxG2Si6Qqwu77f6EeFF3dWMUx9jY2ewBzBau3QTyb2/TxMqvZVNRIyITz9GEfO9Mj/l8HLcJ4ns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854324; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=4op/ogYjey0wkawYIyBc2WEj4QMhErheAgGWoJQ0pVM=; b=MfD0reCGlSIDb2SVXFlYxcEwcfxaONECUpQTEaaXwmET+4S5lkhIRIcFcpihM2eypd+0RjD8wf5B5d3XEzQn/JtKOohjFcZwyGU8ds25B38AoSx4iyyueN8HJz4XxyfRCOaJg1fcM3BdFd10IZbTfDaUoPU0goABugYbpZuVvoM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854324960944.0594816867256; Tue, 26 Jul 2022 09:52:04 -0700 (PDT) Received: from localhost ([::1]:58480 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNmt-000242-Qe for importer@patchew.org; Tue, 26 Jul 2022 12:52:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAt-0004RD-Q4 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:47 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:22172) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAq-0006Li-OP for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:47 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn4RF016276; Tue, 26 Jul 2022 16:11:00 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0tp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:00 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEYQ0Y006294; Tue, 26 Jul 2022 16:10:59 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1gm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:10:59 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSR023334; Tue, 26 Jul 2022 16:10:58 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-10; Tue, 26 Jul 2022 16:10:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=4op/ogYjey0wkawYIyBc2WEj4QMhErheAgGWoJQ0pVM=; b=kYG0ARlKL8lZTrkL136/HQXeuYXu6HsCIIfy27oGNaUKiHolpCvHFifeoiTrvoNag0KV E/WUIpHFqg9RvsjEpoBehWJ+zzt2A/i1+IxnPhTcW1eY27k5i8pfPgpZ5f0rW4Gk9dhS ErbU5tjs2yMyLWphaRVteDzCmr0Dvsf5N9bcu6gjMU7rfkqJxCkJfNJlLOH+fLeefXjI PUTs8NmmZ8quX9qXg4rGtABSIp6FUF+P6M/WgjGmHIauCBRo8EnqCw3uXGIjOqHnHOgH oIQXfjx5owNTF+aq2EpEcX7rndx9Fi71XDARl1wvokhVwZvN/OSw+qzQzGobCHz+ky7E Nw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 09/46] cpr: reboot mode Date: Tue, 26 Jul 2022 09:10:06 -0700 Message-Id: <1658851843-236870-10-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: Uvhjtqoj1K103SpNUQJCiXvtxRME3Lpn X-Proofpoint-ORIG-GUID: Uvhjtqoj1K103SpNUQJCiXvtxRME3Lpn Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854326333100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add the cpr-reboot migration mode. Usage: qemu-system-$arch -migrate-mode-enable cpr-reboot ... migrate_set_parameter mode cpr-reboot migrate -d file: ... poll for runstate postmigrate ... quit qemu-system-$arch -migrate-mode-enable cpr-reboot ... -incoming defer migrate_set_parameter mode cpr-reboot migrate_incoming file: In this mode, the migrate command saves state to a file, allowing one to quit qemu, reboot to an updated kernel, and restart an updated version of qemu. The caller must specify a migration URI that writes to and reads from a file. Unlike normal mode, the use of certain local storage options does not block the migration, but the caller must not modify guest block devices between the quit and restart. The guest RAM memory-backend must be shared, and the @x-ignore-shared migration capability must be set, to avoid saving it to the file. Guest RAM must be non-volatile across reboot, such as by backing it with a dax device, but this is not enforced. The restarted qemu arguments must match those used to initially start qemu, plus the -incoming option. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- qapi/migration.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/qapi/migration.json b/qapi/migration.json index 931c492..55f0479 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -572,10 +572,24 @@ # # @normal: the original form of migration. # +# @cpr-reboot: The migrate command saves state to a file, allowing one to +# quit qemu, reboot to an updated kernel, and restart an upda= ted +# version of qemu. The caller must specify a migration URI +# that writes to and reads from a file. Unlike normal mode, +# the use of certain local storage options does not block the +# migration, but the caller must not modify guest block devic= es +# between the quit and restart. The guest RAM memory-backend +# must be shared, and the @x-ignore-shared migration capabili= ty +# must be set, to avoid saving it to the file. Guest RAM must +# be non-volatile across reboot, such as by backing it with +# a dax device, but this is not enforced. The restarted qemu +# arguments must match those used to initially start qemu, pl= us +# the -incoming option. +# # Since: 7.1 ## { 'enum': 'MigMode', - 'data': [ 'normal' ] } + 'data': [ 'normal', 'cpr-reboot' ] } =20 ## # @BitmapMigrationBitmapAliasTransform: --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854118; cv=none; d=zohomail.com; s=zohoarc; b=aME6coZpwEs6NvE+do25oYgd+lusIhIt4alEaw9cM41RYVzu+pzkr2IAD180ctiv0/0UrbO7Fi2CoLVWAFGAq66NuE1lJKAv5dM/KcUCWK8FUOqHuZY8lZ/sHCjw0ke8SLkSJk7wuXNIRCx3+lgsi0IdgWCJreiadp43hN0IAbg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854118; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=LqQ8YCk1YEPqlNHgEe+n7xXNNWUvyhiv7wrUe+46OQk=; b=JNkDz06/aKg7S+Jg2I3kO2KXpDAlyBsSZNpMFPJzvlWJa2eCUyTnDjl+vz7f6jLmydQUnE4HS7Qof0vefoL0xWpoFR+u/+nyrsJL9252/k6Bjc0IXMmtwE3dkAUd/HeNs/MaJL3n4I1CjrJIuiQpKryKJC5tH7gVKw9B+eD7OWw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854118665334.73434499684697; Tue, 26 Jul 2022 09:48:38 -0700 (PDT) Received: from localhost ([::1]:52576 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNjZ-00063l-GG for importer@patchew.org; Tue, 26 Jul 2022 12:48:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35084) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9w-00032p-Be for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:48 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:63790) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9t-0006BV-AV for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:46 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3rm031740; Tue, 26 Jul 2022 16:11:03 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q19h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:02 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF72WX006333; Tue, 26 Jul 2022 16:11:01 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1jf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:01 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uST023334; Tue, 26 Jul 2022 16:11:00 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-11; Tue, 26 Jul 2022 16:11:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=LqQ8YCk1YEPqlNHgEe+n7xXNNWUvyhiv7wrUe+46OQk=; b=ZlHZLUrpsdhktvI+1rP86akZZIDbWvpwOOMSnXyLDLxKcG7W4vzL6EWxAM/sen2BhVTB jYLH5SXev7tvBeprAXlMe+vXaTPGFjbTpYa7tvlMoyY+YzI2vVKEmQR1afHDhtf2ks3n Zu47Qf6YqDDbQ8qeNXRuYqOiQhO7O3WFOElXw0481Tl5e0ErwE+EnVT+u2wLoojhFQx5 SqLRTqpWsL41FtJqkdYa+s6+7ePaJdiKj+gk7YK80RqcKkvscQx1SRd5Blsr2rHFYYjR iSwgyFkqNo3Z3oaNYeMEnkmlkE1Z3E26L20hLp9GVW+cJhku+kBEITXQELAxc7zuAOZw Cw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 10/46] qdev-properties: strList Date: Tue, 26 Jul 2022 09:10:07 -0700 Message-Id: <1658851843-236870-11-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: k077_CNPyspdXcf9Ly719g2QWu0iu8K8 X-Proofpoint-GUID: k077_CNPyspdXcf9Ly719g2QWu0iu8K8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854120673100002 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Define a list-of-strings property, to be used for the cpr-exec-args migration property in a subsequent patch. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/core/qdev-properties.c | 44 ++++++++++++++++++++++++++++++++++++++++= ++++ include/hw/qdev-properties.h | 3 +++ 2 files changed, 47 insertions(+) diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 357b876..851f490 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -9,6 +9,7 @@ #include "qemu/units.h" #include "qemu/cutils.h" #include "qdev-prop-internal.h" +#include "qapi/qapi-builtin-visit.h" =20 void qdev_prop_set_after_realize(DeviceState *dev, const char *name, Error **errp) @@ -490,6 +491,49 @@ const PropertyInfo qdev_prop_string =3D { .set =3D set_string, }; =20 +/* --- strList --- */ + +static void release_strList(Object *obj, const char *name, void *opaque) +{ + Property *prop =3D opaque; + g_free(*(char **)object_field_prop_ptr(obj, prop)); +} + +static void get_strList(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + Property *prop =3D opaque; + strList **ptr =3D object_field_prop_ptr(obj, prop); + + if (!*ptr) { + strList *str =3D NULL; + visit_type_strList(v, name, &str, errp); + } else { + visit_type_strList(v, name, ptr, errp); + } +} + +static void set_strList(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + Property *prop =3D opaque; + strList **ptr =3D object_field_prop_ptr(obj, prop); + strList *str; + + if (!visit_type_strList(v, name, &str, errp)) { + return; + } + g_free(*ptr); + *ptr =3D str; +} + +const PropertyInfo qdev_prop_strlist =3D { + .name =3D "strList", + .release =3D release_strList, + .get =3D get_strList, + .set =3D set_strList, +}; + /* --- on/off/auto --- */ =20 const PropertyInfo qdev_prop_on_off_auto =3D { diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index e1df088..df1b869 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -59,6 +59,7 @@ extern const PropertyInfo qdev_prop_uint64_checkmask; extern const PropertyInfo qdev_prop_int64; extern const PropertyInfo qdev_prop_size; extern const PropertyInfo qdev_prop_string; +extern const PropertyInfo qdev_prop_strlist; extern const PropertyInfo qdev_prop_on_off_auto; extern const PropertyInfo qdev_prop_size32; extern const PropertyInfo qdev_prop_arraylen; @@ -171,6 +172,8 @@ extern const PropertyInfo qdev_prop_link; DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size, uint64_t) #define DEFINE_PROP_STRING(_n, _s, _f) \ DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*) +#define DEFINE_PROP_STRLIST(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_strlist, strList*) #define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto) #define DEFINE_PROP_SIZE32(_n, _s, _f, _d) \ --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854412; cv=none; d=zohomail.com; s=zohoarc; b=BN5/MkiHafGhs8vw63RnPMDokWCCRvwRh8RVQpbrkWs/ioKVL4gVenyoKOxIFYmXjylIkPyVcvPfv6aZmHxeLOk9N30sk6oMUTVkVeBzkOlN9htSrVXNM2GMJhPFHrfAZJUzn+TLlGKhJ6Ju4ISuQuNGNLU76/SQxGj4DBntQLw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854412; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=o18BApzijf1mfH2fl19ONXWdJYodCvNV0zGfIkHl45A=; b=Z06zhwhRWO8b6d/n8fCmXcJtKhfNjxkdfflfD0eQtoWd8n/ULAmBBPuLIeqM8/MbmbErmSjrJDk9US1+4B+q/X3WAwvYSpyQNWHWrccRNyX7AgIZv2/oItURPLDoM5jbpsDODzhtVbyL4WGb3wRdo08Kk65T1m4+3xPwXeC9LL8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854412976187.01846332306513; Tue, 26 Jul 2022 09:53:32 -0700 (PDT) Received: from localhost ([::1]:60804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNoI-0003o2-P7 for importer@patchew.org; Tue, 26 Jul 2022 12:53:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35202) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9z-0003D1-Cc for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:51 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:9684) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9x-0006CC-0m for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:51 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn0WL031705; Tue, 26 Jul 2022 16:11:04 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q19q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:04 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEplHD006291; Tue, 26 Jul 2022 16:11:02 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1ke-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:02 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSV023334; Tue, 26 Jul 2022 16:11:01 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-12; Tue, 26 Jul 2022 16:11:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=o18BApzijf1mfH2fl19ONXWdJYodCvNV0zGfIkHl45A=; b=Jn3qBSafILCWd0JgF3RupmP4yS3lGWiIE16AoOeHugF0JG0i+rapaZTJGVn/GYjGLvU/ 7Mo0QzqeL62tBu2wEjv92g/2gMdtgj8jzVEDzVLqXyyQdFZG3ZkuyeUvHlY5J7d+97Sl 4mMHtQxz0WzznEINqxVFwAL5hpN2iB2QKbWwOmif+OzBMYbtn8owwZPx9WmRSkVUa0UF LMD54wdFjl0p8kSeyI5awnq3uylHIbqa7lh/LxYpB6uGEqmBTfZwMKZGUmXbDymTOh0g 4LgmFg91zqtKyyy2J7b6Hb6DUE4SZo0P46/vpV8DCEaCdlU/pAf2lR51+cHj4CrBAomn qw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 11/46] qapi: strList_from_string Date: Tue, 26 Jul 2022 09:10:08 -0700 Message-Id: <1658851843-236870-12-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: S_dHIjZyff2pn1lgxwxOsIZ4DUIX04Qi X-Proofpoint-GUID: S_dHIjZyff2pn1lgxwxOsIZ4DUIX04Qi Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854414713100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Generalize strList_from_comma_list() to take any delimiter character, rename as strList_from_string(), and move it to qapi/util.c. No functional change. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/qapi/util.h | 9 +++++++++ monitor/hmp-cmds.c | 31 +++---------------------------- qapi/qapi-util.c | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/include/qapi/util.h b/include/qapi/util.h index 81a2b13..7d88b09 100644 --- a/include/qapi/util.h +++ b/include/qapi/util.h @@ -22,6 +22,8 @@ typedef struct QEnumLookup { const int size; } QEnumLookup; =20 +struct strList; + const char *qapi_enum_lookup(const QEnumLookup *lookup, int val); int qapi_enum_parse(const QEnumLookup *lookup, const char *buf, int def, Error **errp); @@ -31,6 +33,13 @@ bool qapi_bool_parse(const char *name, const char *value= , bool *obj, int parse_qapi_name(const char *name, bool complete); =20 /* + * Produce a strList from the character delimited string @in. + * All strings are g_strdup'd. + * A NULL or empty input string returns NULL. + */ +struct strList *strList_from_string(const char *in, char delim); + +/* * For any GenericList @list, insert @element at the front. * * Note that this macro evaluates @element exactly once, so it is safe diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 6632ada..a394526 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -43,6 +43,7 @@ #include "qapi/qapi-commands-stats.h" #include "qapi/qapi-commands-tpm.h" #include "qapi/qapi-commands-ui.h" +#include "qapi/util.h" #include "qapi/qapi-visit-net.h" #include "qapi/qapi-visit-migration.h" #include "qapi/qmp/qdict.h" @@ -71,32 +72,6 @@ bool hmp_handle_error(Monitor *mon, Error *err) return false; } =20 -/* - * Produce a strList from a comma separated list. - * A NULL or empty input string return NULL. - */ -static strList *strList_from_comma_list(const char *in) -{ - strList *res =3D NULL; - strList **tail =3D &res; - - while (in && in[0]) { - char *comma =3D strchr(in, ','); - char *value; - - if (comma) { - value =3D g_strndup(in, comma - in); - in =3D comma + 1; /* skip the , */ - } else { - value =3D g_strdup(in); - in =3D NULL; - } - QAPI_LIST_APPEND(tail, value); - } - - return res; -} - void hmp_info_name(Monitor *mon, const QDict *qdict) { NameInfo *info; @@ -1125,7 +1100,7 @@ void hmp_announce_self(Monitor *mon, const QDict *qdi= ct) migrate_announce_params()); =20 qapi_free_strList(params->interfaces); - params->interfaces =3D strList_from_comma_list(interfaces_str); + params->interfaces =3D strList_from_string(interfaces_str, ','); params->has_interfaces =3D params->interfaces !=3D NULL; params->id =3D g_strdup(id); params->has_id =3D !!params->id; @@ -2409,7 +2384,7 @@ static StatsFilter *stats_filter(StatsTarget target, = const char *names, request->provider =3D provider_idx; if (names && !g_str_equal(names, "*")) { request->has_names =3D true; - request->names =3D strList_from_comma_list(names); + request->names =3D strList_from_string(names, ','); } QAPI_LIST_PREPEND(request_list, request); } diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c index 63596e1..b61c73c 100644 --- a/qapi/qapi-util.c +++ b/qapi/qapi-util.c @@ -15,6 +15,7 @@ #include "qapi/error.h" #include "qemu/ctype.h" #include "qapi/qmp/qerror.h" +#include "qapi/qapi-builtin-types.h" =20 CompatPolicy compat_policy; =20 @@ -152,3 +153,25 @@ int parse_qapi_name(const char *str, bool complete) } return p - str; } + +strList *strList_from_string(const char *in, char delim) +{ + strList *res =3D NULL; + strList **tail =3D &res; + + while (in && in[0]) { + char *next =3D strchr(in, delim); + char *value; + + if (next) { + value =3D g_strndup(in, next - in); + in =3D next + 1; /* skip the delim */ + } else { + value =3D g_strdup(in); + in =3D NULL; + } + QAPI_LIST_APPEND(tail, value); + } + + return res; +} --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852090; cv=none; d=zohomail.com; s=zohoarc; b=BLEBrC5WvvC+DvhW4P4aOWpX3chrcV8vUutDOK0Wcd5nwJRo6SgURKo3QSBwI5Z9UwXBbJBj7OD3QXJcs6oQMiIU7H4uvmAxlT9arTWGNYRn9AT11t1994yZDc/bj593jaxyks8NmS8HO7VLS7tnYrIuWDZbq/I6PcEiCM0EBt0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852090; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cL3xZ0uADdTDQzJmb0SSc4HZPvnB+mHXNqLrVpETg1s=; b=ZIoOsVhZnExv9yTHUESOG0p5y3WRE6LwspVezBlDCBO8LMyS0PNUJZTymt2LeRU5nQ/6emCr/HPi4SPbakRFnoKvvU37Pz7viHXiLpAzAolYQfMeUDjACgg/IhxrdhIDDrc/l6tkNz0Fq9fa5IUmk7ReP7KgGP2jI3xP05pFA6w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852090504631.8099087537656; Tue, 26 Jul 2022 09:14:50 -0700 (PDT) Received: from localhost ([::1]:47842 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNCq-0005b2-2x for importer@patchew.org; Tue, 26 Jul 2022 12:14:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9c-0002Xf-3N for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:28 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:26820) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9X-00068W-TJ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:27 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPkC006246; Tue, 26 Jul 2022 16:11:05 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu15-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:04 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFW0JS006455; Tue, 26 Jul 2022 16:11:03 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1n0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:03 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSX023334; Tue, 26 Jul 2022 16:11:02 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-13; Tue, 26 Jul 2022 16:11:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=cL3xZ0uADdTDQzJmb0SSc4HZPvnB+mHXNqLrVpETg1s=; b=ZZgPtO3VmnzXGvQ1IiXrrTylogu5iKCoTXbCL6vSqTXG+Jod08RrxILlYS28vfuU202v 5AJoLYI6Mtcju0iyeB98TV3MoKYw8QSfXQJGZZRPe32DmJm78DiX8fUMu8C4bkZKhcde VGrluw9t+x/0JoXVBv1cCB3yITlgvm8IF6JKmLARNdoC37oheIW62cChvrAxqqq0wfPp aw+NvtDiPcy8Ghw6xq8acLT5rqDjOALS7REEK5Lk3KtsPP1QhvpyBo+a7xaaq04nKSZ9 GcpVHbPf9+Z8bAzVxjicCXImtMXJTugaGSq9m55DgZFmFXzx6YpU1MEbe2LwL24Xiy0O 2g== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 12/46] qapi: QAPI_LIST_LENGTH Date: Tue, 26 Jul 2022 09:10:09 -0700 Message-Id: <1658851843-236870-13-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: 9JVYKKDUSiigKtNqbclNjZY_JICb0cxb X-Proofpoint-ORIG-GUID: 9JVYKKDUSiigKtNqbclNjZY_JICb0cxb Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852091689100001 Signed-off-by: Steve Sistare Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Michael Galaxy --- include/qapi/util.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/qapi/util.h b/include/qapi/util.h index 7d88b09..75dddca 100644 --- a/include/qapi/util.h +++ b/include/qapi/util.h @@ -65,4 +65,17 @@ struct strList *strList_from_string(const char *in, char= delim); (tail) =3D &(*(tail))->next; \ } while (0) =20 +/* + * For any GenericList @list, return its length. + */ +#define QAPI_LIST_LENGTH(list) \ + ({ \ + int len =3D 0; \ + typeof(list) elem; \ + for (elem =3D list; elem !=3D NULL; elem =3D elem->next) { \ + len++; \ + } \ + len; \ + }) + #endif --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852611; cv=none; d=zohomail.com; s=zohoarc; b=mNLpEXxVdVJRaLOgYuDC1JrEgRYXZIxjhNgZzTep3ra6dNzym7M5ubMWhsc6NZ6rCl3STLx9Q0Y2HO/gQR45Qj6R/hmxVQkQxVOpD8YT4PU1NQ/M/7uSqy47uvEYQAldJsbPYQ/tRskxO1ZYRmbHSnjVP9WS688C/4YGryoDjec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852611; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uIzEGC0jXaqPYoVhdVCmhjj6OWp+ypUWq6WHLdseACM=; b=gTaks/iAMXQxefPmqqr2LAURGhcWDueToL+polJew9Xv+eRCH1a72+aKnfAlMzhd8P9HGV1EJQTU0uyvp3vgN/FFZR2nGkPE39x94ma94Zi2KCUBrhlcMhZVbw4u/c5q21S6Vbtw+lPp0XQqGGDGY79mooZMtkqzbhHvyrzKtKI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852611885429.9940298782857; Tue, 26 Jul 2022 09:23:31 -0700 (PDT) Received: from localhost ([::1]:38306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNLG-0001jx-Rs for importer@patchew.org; Tue, 26 Jul 2022 12:23:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34836) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9d-0002a4-7G for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:29 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:30300) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9Y-00068g-N4 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:28 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnQMS006253; Tue, 26 Jul 2022 16:11:06 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu1b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:06 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFEnot006399; Tue, 26 Jul 2022 16:11:05 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1p7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:04 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSZ023334; Tue, 26 Jul 2022 16:11:04 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-14; Tue, 26 Jul 2022 16:11:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=uIzEGC0jXaqPYoVhdVCmhjj6OWp+ypUWq6WHLdseACM=; b=mhHFVnnQjg+r4QxpQVp+GhOOdjgWTOlODTaXy1r3TWwE1PghDaFaKnGGNQoHP+dOsYJb Zxt7zaA4iuNzKTmkFiSTFvQj9H9antPSgmbe9/oZ0UxThX88Gb7TpLLMp/W3tC9L9kzP sqip7RUIZm1hHAUUp8d8hzOaTHuUYuLbu9cweQ8nhtKPbnGWBjVHj2PTeV4Td0HkRbsu MC4TT7eFxsbgt+MqPrrqQHSWxEsX1anOY8PZlQRnBuzd8ch1fxGBErf6zhD7mxTMBUNH nfXl/VWbE1F80edljwbc5wlSTWfHEKo7VMwSlK2/tR+I4sp5LrPLu55pH/NnwMLnzqK3 wQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 13/46] qapi: strv_from_strList Date: Tue, 26 Jul 2022 09:10:10 -0700 Message-Id: <1658851843-236870-14-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: N6n7ShcR40RX66Zdgt8gTfcAvzPCenc6 X-Proofpoint-ORIG-GUID: N6n7ShcR40RX66Zdgt8gTfcAvzPCenc6 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852613975100001 Signed-off-by: Steve Sistare Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Michael Galaxy --- include/qapi/util.h | 6 ++++++ qapi/qapi-util.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/qapi/util.h b/include/qapi/util.h index 75dddca..51ff64e 100644 --- a/include/qapi/util.h +++ b/include/qapi/util.h @@ -33,6 +33,12 @@ bool qapi_bool_parse(const char *name, const char *value= , bool *obj, int parse_qapi_name(const char *name, bool complete); =20 /* + * Produce and return a NULL-terminated array of strings from @args. + * All strings are g_strdup'd. + */ +GStrv strv_from_strList(const struct strList *args); + +/* * Produce a strList from the character delimited string @in. * All strings are g_strdup'd. * A NULL or empty input string returns NULL. diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c index b61c73c..fe6bda2 100644 --- a/qapi/qapi-util.c +++ b/qapi/qapi-util.c @@ -154,6 +154,20 @@ int parse_qapi_name(const char *str, bool complete) return p - str; } =20 +GStrv strv_from_strList(const strList *args) +{ + const strList *arg; + int i =3D 0; + GStrv argv =3D g_new(char *, QAPI_LIST_LENGTH(args) + 1); + + for (arg =3D args; arg !=3D NULL; arg =3D arg->next) { + argv[i++] =3D g_strdup(arg->value); + } + argv[i] =3D NULL; + + return argv; +} + strList *strList_from_string(const char *in, char delim) { strList *res =3D NULL; --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852412; cv=none; d=zohomail.com; s=zohoarc; b=ShFn+ATmEA/BsaKihxVacYJalVz0d+ezXxFcPWWDB8vB97Un7qrozSILtFS+o3ifffaKT05YvDXVlV+1EpOGU/uG59lE44tSWZFINbK172zXucwGhnezWs3Dy3sMalghfEUYw5cjHcnm1KofSADhZST+8LXNJdVk8Rv2uufYk/M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852412; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=He2ETZhzSAMk/DUI0DoNjIMY9jcW0BWo1OroYLSZdQM=; b=iQd3M+JTgk2e4pPrk0Xu4w1RozAfKN5b/ANPg9h0zJA6knkI/mBINYK3gO2Q03rABvK7gCKpcVD6O1y9WlIorf6iVYZoK3q2F9aiE/NlZCbEW5K/kWOXraHMS6yhZh5Xm9krIZFofXT/Tn4GIEUIj+OtcBc1Vf9WI+3PxbjrzMk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852412923680.4798855906657; Tue, 26 Jul 2022 09:20:12 -0700 (PDT) Received: from localhost ([::1]:58442 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNI2-0004Y7-PP for importer@patchew.org; Tue, 26 Jul 2022 12:20:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9c-0002Xl-5k for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:28 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:30466) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9X-00068l-Mi for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:27 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPIv006232; Tue, 26 Jul 2022 16:11:07 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu1d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:07 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFH3Vl006242; Tue, 26 Jul 2022 16:11:06 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1q0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:06 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSb023334; Tue, 26 Jul 2022 16:11:05 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-15; Tue, 26 Jul 2022 16:11:05 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=He2ETZhzSAMk/DUI0DoNjIMY9jcW0BWo1OroYLSZdQM=; b=cAn3lV8EjkY9W+xhaQ6Ua8iwyufzqyHgxmIE8FrX4qiv64+eRGk4DudjNfXeaptoImvS ZjAaETF7bp8nB5QsM4P7ZLv9ljNH4B82EVGDwZlTE0UtVqS5zgmriOMQvAn+FyUYWcf8 xmnzf72qH//srRAlqHIIkrNvYo/17IgO2XTqn2E935ze/gsP03h5bDZU8Sy5Z0T4e8Hu caw4YxqOH/leKrI8wRBKDXhiGRVwlD9zHL7YUQ0xDRHAGJogZIv0ubsMaQ4R+f0tz4r9 ozyGKPWAkwYvptdS+TKlpMOZmFbkLQVJUZ4l+9q0prWoSl4FFZQyPlc/r29rYvv9Oijk 9A== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 14/46] qapi: strList unit tests Date: Tue, 26 Jul 2022 09:10:11 -0700 Message-Id: <1658851843-236870-15-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: BYWk_vO9TKM6wzTbqugGD7jiavvYm-Py X-Proofpoint-ORIG-GUID: BYWk_vO9TKM6wzTbqugGD7jiavvYm-Py Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852414927100001 Signed-off-by: Steve Sistare Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Michael Galaxy --- MAINTAINERS | 6 ++++ tests/unit/meson.build | 1 + tests/unit/test-strlist.c | 81 +++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 88 insertions(+) create mode 100644 tests/unit/test-strlist.c diff --git a/MAINTAINERS b/MAINTAINERS index 6af9cd9..362cfde 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3160,6 +3160,12 @@ F: net/filter-rewriter.c F: net/filter-mirror.c F: tests/qtest/test-filter* =20 +CPR +M: Steve Sistare +R: Mark Kanda +S: Maintained +F: tests/unit/test-strlist.c + Record/replay M: Pavel Dovgalyuk R: Paolo Bonzini diff --git a/tests/unit/meson.build b/tests/unit/meson.build index b497a41..1030e61 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -17,6 +17,7 @@ tests =3D { 'test-forward-visitor': [testqapi], 'test-string-input-visitor': [testqapi], 'test-string-output-visitor': [testqapi], + 'test-strlist': [testqapi], 'test-opts-visitor': [testqapi], 'test-visitor-serialization': [testqapi], 'test-bitmap': [], diff --git a/tests/unit/test-strlist.c b/tests/unit/test-strlist.c new file mode 100644 index 0000000..ef740dc --- /dev/null +++ b/tests/unit/test-strlist.c @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/util.h" +#include "qapi/qapi-builtin-types.h" + +static strList *make_list(int length) +{ + strList *head =3D 0, *list, **prev =3D &head; + + while (length--) { + list =3D *prev =3D g_new0(strList, 1); + list->value =3D g_strdup("aaa"); + prev =3D &list->next; + } + return head; +} + +static void test_length(void) +{ + strList *list; + int i; + + for (i =3D 0; i < 5; i++) { + list =3D make_list(i); + g_assert_cmpint(i, =3D=3D, QAPI_LIST_LENGTH(list)); + qapi_free_strList(list); + } +} + +struct { + const char *string; + char delim; + const char *args[5]; +} list_data[] =3D { + { 0, ',', { 0 } }, + { "", ',', { 0 } }, + { "a", ',', { "a", 0 } }, + { "a,b", ',', { "a", "b", 0 } }, + { "a,b,c", ',', { "a", "b", "c", 0 } }, + { "first last", ' ', { "first", "last", 0 } }, + { "a:", ':', { "a", 0 } }, + { "a::b", ':', { "a", "", "b", 0 } }, + { ":", ':', { "", 0 } }, + { ":a", ':', { "", "a", 0 } }, + { "::a", ':', { "", "", "a", 0 } }, +}; + +static void test_strv(void) +{ + int i, j; + const char **expect; + strList *list; + GStrv args; + + for (i =3D 0; i < ARRAY_SIZE(list_data); i++) { + expect =3D list_data[i].args; + list =3D strList_from_string(list_data[i].string, list_data[i].del= im); + args =3D strv_from_strList(list); + qapi_free_strList(list); + for (j =3D 0; expect[j] && args[j]; j++) { + g_assert_cmpstr(expect[j], =3D=3D, args[j]); + } + g_assert_null(expect[j]); + g_assert_null(args[j]); + g_strfreev(args); + } +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + g_test_add_func("/test-string/length", test_length); + g_test_add_func("/test-string/strv", test_strv); + return g_test_run(); +} --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658855665; cv=none; d=zohomail.com; s=zohoarc; b=oFrtht2TYifgalXzAI9cEw4JjkeMixCkA72tGHrIDn3Kbx+f7eeVUEDjAsMJx9kiWFpoNqxm1+uOnL756PLkx7/vElARNUy67wcgeWnpQTsMU0ZVH8iReklv+BBHsMjqGtjQBsStydHNngzmHiF4wNHzp0WP/7iT8S76PQJ4kRg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658855665; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=FZbECMmy0A6yeHc+ZJjpbphG6Rxb7zPlETgh6KENBnU=; b=QUHUdtCvqIMHlBsSvAYLuBO4GN4mBpYuymJllDWFJeL1byibFvdACi2xD7FhLj4NQEQtIiicxIx7ovBQ08gaFxdJbJvFVez0AYRGlziY5xKkRQrKcO91dokYu5ZnAjiXYsqiMFTdqGJJVpV1O/fRR/PntPPqEG2ldXEu5B4QFr8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658855665625238.75038625836953; Tue, 26 Jul 2022 10:14:25 -0700 (PDT) Received: from localhost ([::1]:43942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGO8W-0008C4-DI for importer@patchew.org; Tue, 26 Jul 2022 13:14:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35654) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNB9-0004kO-DQ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:13:03 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:42904) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAx-0006ME-RI for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:13:03 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPIw006232; Tue, 26 Jul 2022 16:11:09 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu1j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:08 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEbnNE006229; Tue, 26 Jul 2022 16:11:07 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1rg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:07 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSd023334; Tue, 26 Jul 2022 16:11:07 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-16; Tue, 26 Jul 2022 16:11:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=FZbECMmy0A6yeHc+ZJjpbphG6Rxb7zPlETgh6KENBnU=; b=gVymN89Yvai6Hqf3O5gXIUGZD5duqs5CUl4s4fSpeRcygqiwCOxpVrBH5PcsWvSGALEg qIoU7aWnIWVHCS4e3Hj8B72LjSG9OKAzcjahZuAf6VhJLmVW8BbDD9vYW7c+YlDFEfAw m8F+SYXwtJGivkKYr1tC/bmLWHEAwDVZ6If9+ITPjybGGj6jeh9rithWcChW0UzrJ5lB M064xEM7X961LMfx30clp3tX5+T5FyhCy5ufZzA5rXAne0lG5V/tO6GfMRau5DbdNOZg i0HagRjGjWsCTmz6sN0VZL6p1RiDu3vvevDxmE/bWNUv7gIBts9o8GzRGGWgtmOTtEV3 uQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 15/46] migration: cpr-exec-args parameter Date: Tue, 26 Jul 2022 09:10:12 -0700 Message-Id: <1658851843-236870-16-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: CPRhCrBnOVXJd1W1XmHsW-l2LDWmlfeB X-Proofpoint-ORIG-GUID: CPRhCrBnOVXJd1W1XmHsW-l2LDWmlfeB Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658855667345100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Create the cpr-exec-args migration parameter, defined as a list of strings. It will be used for cpr-exec migration mode in a subsequent patch. No functional change, except that cpr-exec-args is shown by the 'info migrate' command. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hmp-commands.hx | 2 +- migration/migration.c | 15 +++++++++++++++ monitor/hmp-cmds.c | 20 ++++++++++++++++++++ qapi/migration.json | 9 +++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 182e639..6f5154b 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1006,7 +1006,7 @@ ERST =20 { .name =3D "migrate_set_parameter", - .args_type =3D "parameter:s,value:s", + .args_type =3D "parameter:s,value:S", .params =3D "parameter value", .help =3D "Set the parameter for migration", .cmd =3D hmp_migrate_set_parameter, diff --git a/migration/migration.c b/migration/migration.c index 0e62227..80b7d09 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -923,6 +923,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error= **errp) params->cpu_throttle_increment =3D s->parameters.cpu_throttle_incremen= t; params->has_cpu_throttle_tailslow =3D true; params->cpu_throttle_tailslow =3D s->parameters.cpu_throttle_tailslow; + params->has_cpr_exec_args =3D true; + params->cpr_exec_args =3D QAPI_CLONE(strList, s->parameters.cpr_exec_a= rgs); params->has_tls_creds =3D true; params->tls_creds =3D g_strdup(s->parameters.tls_creds); params->has_tls_hostname =3D true; @@ -1615,6 +1617,10 @@ static void migrate_params_test_apply(MigrateSetPara= meters *params, dest->cpu_throttle_tailslow =3D params->cpu_throttle_tailslow; } =20 + if (params->has_cpr_exec_args) { + dest->cpr_exec_args =3D params->cpr_exec_args; + } + if (params->has_tls_creds) { assert(params->tls_creds->type =3D=3D QTYPE_QSTRING); dest->tls_creds =3D params->tls_creds->u.s; @@ -1716,6 +1722,12 @@ static void migrate_params_apply(MigrateSetParameter= s *params, Error **errp) s->parameters.cpu_throttle_tailslow =3D params->cpu_throttle_tails= low; } =20 + if (params->has_cpr_exec_args) { + qapi_free_strList(s->parameters.cpr_exec_args); + s->parameters.cpr_exec_args =3D + QAPI_CLONE(strList, params->cpr_exec_args); + } + if (params->has_tls_creds) { g_free(s->parameters.tls_creds); assert(params->tls_creds->type =3D=3D QTYPE_QSTRING); @@ -4481,6 +4493,8 @@ static Property migration_properties[] =3D { DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT), DEFINE_PROP_BOOL("x-cpu-throttle-tailslow", MigrationState, parameters.cpu_throttle_tailslow, false), + DEFINE_PROP_STRLIST("cpr-exec-args", MigrationState, + parameters.cpr_exec_args), DEFINE_PROP_SIZE("x-max-bandwidth", MigrationState, parameters.max_bandwidth, MAX_THROTTLE), DEFINE_PROP_UINT64("x-downtime-limit", MigrationState, @@ -4597,6 +4611,7 @@ static void migration_instance_init(Object *obj) params->has_compress_threads =3D true; params->has_decompress_threads =3D true; params->has_throttle_trigger_threshold =3D true; + params->has_cpr_exec_args =3D true; params->has_cpu_throttle_initial =3D true; params->has_cpu_throttle_increment =3D true; params->has_cpu_throttle_tailslow =3D true; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index a394526..8794459 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -387,6 +387,18 @@ void hmp_info_migrate_capabilities(Monitor *mon, const= QDict *qdict) qapi_free_MigrationCapabilityStatusList(caps); } =20 +static void monitor_print_cpr_exec_args(Monitor *mon, strList *args) +{ + monitor_printf(mon, "%s:", + MigrationParameter_str(MIGRATION_PARAMETER_CPR_EXEC_ARGS)); + + while (args) { + monitor_printf(mon, " %s", args->value); + args =3D args->next; + } + monitor_printf(mon, "\n"); +} + void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict) { MigrationParameters *params; @@ -446,6 +458,8 @@ void hmp_info_migrate_parameters(Monitor *mon, const QD= ict *qdict) monitor_printf(mon, "%s: %u\n", MigrationParameter_str(MIGRATION_PARAMETER_MAX_CPU_THROTTLE), params->max_cpu_throttle); + assert(params->has_cpr_exec_args); + monitor_print_cpr_exec_args(mon, params->cpr_exec_args); assert(params->has_tls_creds); monitor_printf(mon, "%s: '%s'\n", MigrationParameter_str(MIGRATION_PARAMETER_TLS_CREDS), @@ -1190,6 +1204,7 @@ void hmp_migrate_set_parameter(Monitor *mon, const QD= ict *qdict) uint64_t valuebw =3D 0; uint64_t cache_size; Error *err =3D NULL; + g_autofree char *str =3D NULL; int val, ret; =20 val =3D qapi_enum_parse(&MigrationParameter_lookup, param, -1, &err); @@ -1238,6 +1253,11 @@ void hmp_migrate_set_parameter(Monitor *mon, const Q= Dict *qdict) p->has_max_cpu_throttle =3D true; visit_type_uint8(v, param, &p->max_cpu_throttle, &err); break; + case MIGRATION_PARAMETER_CPR_EXEC_ARGS: + p->has_cpr_exec_args =3D true; + visit_type_str(v, param, &str, &err); + p->cpr_exec_args =3D strList_from_string(str, ' '); + break; case MIGRATION_PARAMETER_TLS_CREDS: p->has_tls_creds =3D true; p->tls_creds =3D g_new0(StrOrNull, 1); diff --git a/qapi/migration.json b/qapi/migration.json index 55f0479..839fcd4 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -712,6 +712,8 @@ # at tail stage. # The default value is false. (Since 5.1) # +# @cpr-exec-args: defined in a subsequent patch. +# # @tls-creds: ID of the 'tls-creds' object that provides credentials for # establishing a TLS connection over the migration data channe= l. # On the outgoing side of the migration, the credentials must @@ -816,6 +818,7 @@ 'compress-wait-thread', 'throttle-trigger-threshold', 'cpu-throttle-initial', 'cpu-throttle-increment', 'cpu-throttle-tailslow', + 'cpr-exec-args', 'tls-creds', 'tls-hostname', 'tls-authz', 'max-bandwidth', 'downtime-limit', { 'name': 'x-checkpoint-delay', 'features': [ 'unstable' ] }, @@ -882,6 +885,8 @@ # at tail stage. # The default value is false. (Since 5.1) # +# @cpr-exec-args: defined in a subsequent patch. +# # @tls-creds: ID of the 'tls-creds' object that provides credentials # for establishing a TLS connection over the migration data # channel. On the outgoing side of the migration, the credenti= als @@ -993,6 +998,7 @@ '*cpu-throttle-initial': 'uint8', '*cpu-throttle-increment': 'uint8', '*cpu-throttle-tailslow': 'bool', + '*cpr-exec-args': [ 'str' ], '*tls-creds': 'StrOrNull', '*tls-hostname': 'StrOrNull', '*tls-authz': 'StrOrNull', @@ -1084,6 +1090,8 @@ # at tail stage. # The default value is false. (Since 5.1) # +# @cpr-exec-args: defined in a subsequent patch. +# # @tls-creds: ID of the 'tls-creds' object that provides credentials # for establishing a TLS connection over the migration data # channel. On the outgoing side of the migration, the credenti= als @@ -1195,6 +1203,7 @@ '*cpu-throttle-initial': 'uint8', '*cpu-throttle-increment': 'uint8', '*cpu-throttle-tailslow': 'bool', + '*cpr-exec-args': [ 'str' ], '*tls-creds': 'str', '*tls-hostname': 'str', '*tls-authz': 'str', --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853781; cv=none; d=zohomail.com; s=zohoarc; b=TL/fL2SHOa/LG2EXFkxQKERpQZr3pCHx8bTSLCeR21vQH/IMvRktbqc3uEhH4UpBbzpAnaKn3JuviCc+GZKv5yxCpHafLCmzvXOx26w2us2vc40NdSQv9NGrf2DXlJYeomnKjo9TpgfoJ+QvkGVhmdTuTcR6EM3OFBADH0EcXQE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853781; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=kxdQx9CE7uT5if5wDUJhL1lr37CWJESfcBIHXjjwzHY=; b=cjphPAb7V3K0oDG7k04E4dtgoPL9vv4s9RGaPTEM7E5OH08CQd0D9ld/AaTeh1GMYJZBppYu358fXwbHCdpm2nqQxv+a6XldFfyaUigibPiKAARp9pA76ownrnRa3CcvcuyyMtZu1Psl+SlFcaP1E1bV6ZQjZaD8MQ/eRXmqdwQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853781786200.379540520903; Tue, 26 Jul 2022 09:43:01 -0700 (PDT) Received: from localhost ([::1]:44186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNe7-00007C-P6 for importer@patchew.org; Tue, 26 Jul 2022 12:42:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA3-0003NQ-Cw for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:55 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:20708) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA1-0006DW-Eg for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:55 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3Uk016260; Tue, 26 Jul 2022 16:11:10 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0um-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:10 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEdoxC006239; Tue, 26 Jul 2022 16:11:09 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1sa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:09 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSf023334; Tue, 26 Jul 2022 16:11:08 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-17; Tue, 26 Jul 2022 16:11:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=kxdQx9CE7uT5if5wDUJhL1lr37CWJESfcBIHXjjwzHY=; b=3YtUdceVqqHtEpiGGrKyTg/PO002AyCcNs8uSLvg7U3GPoyOuJIJAP99eZ6xeT73irLj +q9SQkjXeAAelXnp+2jauHi5L5RUKuKWef0C9TnATzOpyoAKNCYkmTjNmml505I5zNUq xYp7ty1z0Z6iQKQJqEIrc2PvkvpAuDoXbr6Yej1ab8/CG1KidUUoBsw5WHbxylRwkpd5 pd9V3WHsWrZHagEpExfFzd145RN8wD9Ci0HU+YENMKmT7qWjEOKkwSVxl60B1D93+zkp p6wZ8C+fzRVHaC/8Nx/EDEv8mTO83EQMRSksSllxMB52/5KGpzVHQWJH/NH2RAp5trbr Hw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 16/46] migration: simplify notifiers Date: Tue, 26 Jul 2022 09:10:13 -0700 Message-Id: <1658851843-236870-17-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: Rak7uNJcz9lZEDMLSP6ncvqpAQAs3bFg X-Proofpoint-ORIG-GUID: Rak7uNJcz9lZEDMLSP6ncvqpAQAs3bFg Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853782696100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Pass the callback function to add_migration_state_change_notifier so that migration can initialize the notifier on add and clear it on delete, which simplifies the call sites. Also shorten the function names. No functional change. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/net/virtio-net.c | 6 +++--- hw/vfio/migration.c | 6 +++--- include/migration/misc.h | 6 ++++-- migration/migration.c | 22 ++++++++++++++++------ ui/spice-core.c | 3 +-- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index dd0d056..29af1a5 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -3443,8 +3443,8 @@ static void virtio_net_device_realize(DeviceState *de= v, Error **errp) n->primary_listener.hide_device =3D failover_hide_primary_device; qatomic_set(&n->failover_primary_hidden, true); device_listener_register(&n->primary_listener); - n->migration_state.notify =3D virtio_net_migration_state_notifier; - add_migration_state_change_notifier(&n->migration_state); + migration_add_notifier(&n->migration_state, + virtio_net_migration_state_notifier); n->host_features |=3D (1ULL << VIRTIO_NET_F_STANDBY); } =20 @@ -3607,7 +3607,7 @@ static void virtio_net_device_unrealize(DeviceState *= dev) if (n->failover) { qobject_unref(n->primary_opts); device_listener_unregister(&n->primary_listener); - remove_migration_state_change_notifier(&n->migration_state); + migration_remove_notifier(&n->migration_state); } else { assert(n->primary_opts =3D=3D NULL); } diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index d6f9e29..5109124 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -839,8 +839,8 @@ static int vfio_migration_init(VFIODevice *vbasedev, migration->vm_state =3D qdev_add_vm_change_state_handler(vbasedev->dev, vfio_vmstate_ch= ange, vbasedev); - migration->migration_state.notify =3D vfio_migration_state_notifier; - add_migration_state_change_notifier(&migration->migration_state); + migration_add_notifier(&migration->migration_state, + vfio_migration_state_notifier); return 0; =20 err: @@ -895,7 +895,7 @@ void vfio_migration_finalize(VFIODevice *vbasedev) if (vbasedev->migration) { VFIOMigration *migration =3D vbasedev->migration; =20 - remove_migration_state_change_notifier(&migration->migration_state= ); + migration_remove_notifier(&migration->migration_state); qemu_del_vm_change_state_handler(migration->vm_state); unregister_savevm(VMSTATE_IF(vbasedev->dev), "vfio", vbasedev); vfio_migration_exit(vbasedev); diff --git a/include/migration/misc.h b/include/migration/misc.h index 71b6285..d4c2d7d 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -60,8 +60,10 @@ void migration_object_init(void); void migration_shutdown(void); bool migration_is_idle(void); bool migration_is_active(MigrationState *); -void add_migration_state_change_notifier(Notifier *notify); -void remove_migration_state_change_notifier(Notifier *notify); +void migration_add_notifier(Notifier *notify, + void (*func)(Notifier *notifier, void *data)); +void migration_remove_notifier(Notifier *notify); +void migration_call_notifiers(MigrationState *s); bool migration_in_setup(MigrationState *); bool migration_has_finished(MigrationState *); bool migration_has_failed(MigrationState *); diff --git a/migration/migration.c b/migration/migration.c index 80b7d09..d7c6902 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1962,7 +1962,7 @@ static void migrate_fd_cleanup(MigrationState *s) /* It is used on info migrate. We can't free it */ error_report_err(error_copy(s->error)); } - notifier_list_notify(&migration_state_notifiers, s); + migration_call_notifiers(s); block_cleanup_parameters(s); yank_unregister_instance(MIGRATION_YANK_INSTANCE); } @@ -2057,14 +2057,24 @@ static void migrate_fd_cancel(MigrationState *s) } } =20 -void add_migration_state_change_notifier(Notifier *notify) +void migration_add_notifier(Notifier *notify, + void (*func)(Notifier *notifier, void *data)) { + notify->notify =3D func; notifier_list_add(&migration_state_notifiers, notify); } =20 -void remove_migration_state_change_notifier(Notifier *notify) +void migration_remove_notifier(Notifier *notify) +{ + if (notify->notify) { + notifier_remove(notify); + notify->notify =3D NULL; + } +} + +void migration_call_notifiers(MigrationState *s) { - notifier_remove(notify); + notifier_list_notify(&migration_state_notifiers, s); } =20 bool migration_in_setup(MigrationState *s) @@ -3341,7 +3351,7 @@ static int postcopy_start(MigrationState *ms) * spice needs to trigger a transition now */ ms->postcopy_after_devices =3D true; - notifier_list_notify(&migration_state_notifiers, ms); + migration_call_notifiers(ms); =20 ms->downtime =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - time_at_sto= p; =20 @@ -4378,7 +4388,7 @@ void migrate_fd_connect(MigrationState *s, Error *err= or_in) rate_limit =3D s->parameters.max_bandwidth / XFER_LIMIT_RATIO; =20 /* Notify before starting migration thread */ - notifier_list_notify(&migration_state_notifiers, s); + migration_call_notifiers(s); } =20 qemu_file_set_rate_limit(s->to_dst_file, rate_limit); diff --git a/ui/spice-core.c b/ui/spice-core.c index c3ac20a..62b7893 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -819,8 +819,7 @@ static void qemu_spice_init(void) }; using_spice =3D 1; =20 - migration_state.notify =3D migration_state_notifier; - add_migration_state_change_notifier(&migration_state); + migration_add_notifier(&migration_state, migration_state_notifier); spice_migrate.base.sif =3D &migrate_interface.base; qemu_spice.add_interface(&spice_migrate.base); =20 --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658855225; cv=none; d=zohomail.com; s=zohoarc; b=L2N8SoIJfyAe7UReUK7exk3i+NdR7YihVrz/X91I9+xLFnbFHqOEL5ujWaDbiYzRPuhZgmUBB/PsDFR7onQgMQ0kH7og2wtN9lbGoay1oAHb138oo8SMZWOYkJHuX+zUnNbsrumg/j2XNW40h/e8j7+NJGZt42BqbqH6SqdAOok= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658855225; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=G/aRFxq+K5XS7q0eeEExM/Np1pKuxT39Qhg3Cr4myII=; b=AUWdCA1F2Pnz+OuYbn5/pU7jTpK/H7MAQttp8g70z7Y9fJp2fqGBpBATd59KmPSLGlFDFcnAW+DWxn7W+sMw2xjOMUvR0pS0K7TpiRu+FpJoVELmge33dLDEC7BazABgSC0q4/XaoYPR2BxeZSV06UVdhvqrEAglxxOnfsmDl28= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658855225202115.64966179116573; Tue, 26 Jul 2022 10:07:05 -0700 (PDT) Received: from localhost ([::1]:57642 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGO1P-0005X9-2R for importer@patchew.org; Tue, 26 Jul 2022 13:07:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35344) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA8-0003Z0-Jt for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:00 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:25674) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA3-0006F0-Gl for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:59 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn4iC016269; Tue, 26 Jul 2022 16:11:11 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0uq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:11 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEVJJX006173; Tue, 26 Jul 2022 16:11:10 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1tc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:10 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSh023334; Tue, 26 Jul 2022 16:11:09 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-18; Tue, 26 Jul 2022 16:11:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=G/aRFxq+K5XS7q0eeEExM/Np1pKuxT39Qhg3Cr4myII=; b=rFVBzCByq6r7/VNu+DlTn573IT22gGPfU7mLSyQfbum8FAYYoakMOKjkoRTEigT0k79e 9a2WHc8zYAz8iTUMoxoVz3jK6H2oZxwrYKcJH0TjYSxINBNtrqmtkFHS3sKjlyC+0QlQ 8nYFwVrLnJgalqd91yPvShlFqdGXnwBzbV11lfcabwGNW40I4cT9ktT38LEkhhkZ3QbH R9iqGNVdUBIjlqDPBqQEaYF2KQIkkgLfvTJXXgWdnMw0t+Z6G/NbtijUAbEZUkH+YDhy hTepEe07BgqDpdnOtIXRMok5vPHNJHu6+B7cHumcef0rDQOo7qRTM/7o7uwpCBxoXqB6 Mg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 17/46] migration: check mode in notifiers Date: Tue, 26 Jul 2022 09:10:14 -0700 Message-Id: <1658851843-236870-18-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: xfGarNIEGZoc4G1Hjg3_vaRTwm6EcYfP X-Proofpoint-ORIG-GUID: xfGarNIEGZoc4G1Hjg3_vaRTwm6EcYfP Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658855227589100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The existing notifiers should only apply to normal mode. No functional change. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/net/virtio-net.c | 4 ++++ hw/vfio/migration.c | 3 +++ ui/spice-core.c | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 29af1a5..06f0dbe 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -3351,6 +3351,10 @@ static void virtio_net_handle_migration_primary(Virt= IONet *n, MigrationState *s) static void virtio_net_migration_state_notifier(Notifier *notifier, void *= data) { MigrationState *s =3D data; + + if (migrate_mode_of(s) !=3D MIG_MODE_NORMAL) { + return; + } VirtIONet *n =3D container_of(notifier, VirtIONet, migration_state); virtio_net_handle_migration_primary(n, s); } diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 5109124..6b0d401 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -759,6 +759,9 @@ static void vfio_migration_state_notifier(Notifier *not= ifier, void *data) VFIODevice *vbasedev =3D migration->vbasedev; int ret; =20 + if (migrate_mode_of(s) !=3D MIG_MODE_NORMAL) { + return; + } trace_vfio_migration_state_notifier(vbasedev->name, MigrationStatus_str(s->state)); =20 diff --git a/ui/spice-core.c b/ui/spice-core.c index 62b7893..413c392 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -558,7 +558,7 @@ static void migration_state_notifier(Notifier *notifier= , void *data) { MigrationState *s =3D data; =20 - if (!spice_have_target_host) { + if (!spice_have_target_host || migrate_mode_of(s) !=3D MIG_MODE_NORMAL= ) { return; } =20 --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852546; cv=none; d=zohomail.com; s=zohoarc; b=iJKrJ81ANUuUtsECA+E4cXc44DmCdCukGDHYqVMnnaWD0ncUOJ96qY4ESLWV1b2wxwK5iRGNkBiObU9uMp2blxFqB/IoyOA9A1gMD8RD05vqcskfvIe524idXaXOYpmF98PKkNeCC0Ymz7usC4+XaGHKJWTJTk3VqI+kRkP57so= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852546; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MbfnnC1qY1LDXF+ob6lpIOUBkz0IM61m41VFAnUlMC0=; b=OHvEce/9xXu/ZdGN4fFqgnia6BeVwVwDtR8KSTiBDSzBfkNv1j1WvVr4UEiDlx1Qz6lW4/sCiFw+Chm4UojlplJjcXK1jpOCAY2rni6PT52u/lrGAS6uZPwZKZ50qARjZBHgisMSwbYDMvnzwyiRgS34zGqYMRyGIKk9923he08= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852546555350.734034925997; Tue, 26 Jul 2022 09:22:26 -0700 (PDT) Received: from localhost ([::1]:36096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNKD-0000Ev-GO for importer@patchew.org; Tue, 26 Jul 2022 12:22:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9d-0002am-GS for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:29 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:33860) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9Z-00069E-HM for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:29 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3av031727; Tue, 26 Jul 2022 16:11:13 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1ab-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:12 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFl763006339; Tue, 26 Jul 2022 16:11:11 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1uu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:11 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSj023334; Tue, 26 Jul 2022 16:11:11 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-19; Tue, 26 Jul 2022 16:11:10 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=MbfnnC1qY1LDXF+ob6lpIOUBkz0IM61m41VFAnUlMC0=; b=QokN1Oh3gF0XYbe2GB65orTgViG8mmmGh7aKCuOF0aIhaQwKbggq5Xd/hl5W/z54gSgM UAQY8wJe8eVxUwY4Qwpd7qZcko/7Sr6ZKdkYh1IIC0t00MD2hyOWtCEhnvLhCJK1929Y QrQT2k3hlOhOV3FLsjJ+6RUwpz/9Yef5jMHoeZA5s/+pZzmr0Qo0X7MTGkXieja2fjFN 9RK4mV6ZiZHIwWeQP4Tz8v95I4pvf4LDY7hPcRKiiKIu6pq7HkvzKp5Hsqb1/qgKdliu AhsaIWZLe66lxA1rmIow6HjfnHQ5oBlnwMq9uSdHoE1YUvVc4YP7cqRH2jGvCudd8kPK FA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 18/46] memory: flat section iterator Date: Tue, 26 Jul 2022 09:10:15 -0700 Message-Id: <1658851843-236870-19-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: 1vBJwC0V0P1Avf41pfJSTUByE3yZofYh X-Proofpoint-GUID: 1vBJwC0V0P1Avf41pfJSTUByE3yZofYh Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852547482100002 Add an iterator over the sections of a flattened address space. Signed-off-by: Steve Sistare Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Michael Galaxy --- include/exec/memory.h | 31 +++++++++++++++++++++++++++++++ softmmu/memory.c | 21 +++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index 7513d04..9629289 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2346,6 +2346,37 @@ void memory_region_set_ram_discard_manager(MemoryReg= ion *mr, RamDiscardManager *rdm); =20 /** + * memory_region_section_cb: callback for address_space_flat_for_each_sect= ion() + * + * @mrs: MemoryRegionSection of the range + * @opaque: data pointer passed to address_space_flat_for_each_section() + * @errp: error message, returned to the address_space_flat_for_each_secti= on + * caller. + * + * Returns: non-zero to stop the iteration, and 0 to continue. The same + * non-zero value is returned to the address_space_flat_for_each_section c= aller. + */ + +typedef int (*memory_region_section_cb)(MemoryRegionSection *mrs, + void *opaque, + Error **errp); + +/** + * address_space_flat_for_each_section: walk the ranges in the address spa= ce + * flat view and call @func for each. Return 0 on success, else return no= n-zero + * with a message in @errp. + * + * @as: target address space + * @func: callback function + * @opaque: passed to @func + * @errp: passed to @func + */ +int address_space_flat_for_each_section(AddressSpace *as, + memory_region_section_cb func, + void *opaque, + Error **errp); + +/** * memory_region_find: translate an address/size relative to a * MemoryRegion into a #MemoryRegionSection. * diff --git a/softmmu/memory.c b/softmmu/memory.c index 7ba2048..6aa3a2f 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2683,6 +2683,27 @@ bool memory_region_is_mapped(MemoryRegion *mr) return !!mr->container || mr->mapped_via_alias; } =20 +int address_space_flat_for_each_section(AddressSpace *as, + memory_region_section_cb func, + void *opaque, + Error **errp) +{ + FlatView *view =3D address_space_get_flatview(as); + FlatRange *fr; + int ret; + + FOR_EACH_FLAT_RANGE(fr, view) { + MemoryRegionSection mrs =3D section_from_flat_range(fr, view); + ret =3D func(&mrs, opaque, errp); + if (ret) { + return ret; + } + } + + flatview_unref(view); + return 0; +} + /* Same as memory_region_find, but it does not add a reference to the * returned region. It must be called from an RCU critical section. */ --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852545; cv=none; d=zohomail.com; s=zohoarc; b=gnn8xuxXVEAertvMcKLvfCrSgViyadDvEIa7/IpO8K/OPemnUn0Nldczk77uo+jtgKirOAhiYYlNGO3DpE8+VGi/I1nqrB6w8gKkTyNnAkH66Wu71ySNb8Y0RTotKa7Z9obRX8AWIttfD3HXXRlnvT2DCDwN58VQjf8O1Iosf4k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852545; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BAGQccShDx/q70x2HUcyuw0XTEqvlsCEcSSSkR8wpdA=; b=Q/vysigHXxrjqNu8s9xhclvjYB0uGSXo52yOc1xZvwRdBnlCe3HdB7nAO0r7A6TYI3c5BqFN23fo0UGDofSZrkl+oQu9swqWbacFE3r7f4/x7KLdwTrLHXmYknRLag+a6qzvMekTcXlaLA7xLHmbdwrLTHZ5xp+X+MF0n5WtEPU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852545511933.6037653279878; Tue, 26 Jul 2022 09:22:25 -0700 (PDT) Received: from localhost ([::1]:36014 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNKB-0000BB-Eq for importer@patchew.org; Tue, 26 Jul 2022 12:22:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9o-0002xp-8V for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:41 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:47480) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9m-00069w-63 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:39 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3ax031727; Tue, 26 Jul 2022 16:11:14 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1ag-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:14 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF380I006266; Tue, 26 Jul 2022 16:11:13 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1vy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:13 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSl023334; Tue, 26 Jul 2022 16:11:12 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-20; Tue, 26 Jul 2022 16:11:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=BAGQccShDx/q70x2HUcyuw0XTEqvlsCEcSSSkR8wpdA=; b=WYTnehC8AgOYP8Rc3wOY4TsV1t1jEc4OIUATukp6S/31F8F1/uFQSGaxzeH2bEAai4LL yAuqTkPiGvetxvthVJVj63SFg0CMmYJqJl1RbS8dKdjX1exnjE6Tqc8rfFRN/GifG+An /J4h+9ZJdI0Fcs1ULTm1QoZi0uPCu55UEwfDVcne91eC3fAFdrx+/OMaSnnrLgIEr3DK PzaGki25H16m8nT3eyGB311wp8uffY2Mtd2KJ2P0ZQOyOZIoKY5v+Q+kw+cTXFsxdtqF 6vBttddjcUXNr3yvh9jr5/B2GqiCq2xC5U+5wwn0Sw4eI5UxJFjc09TOGid1N6ZZRto5 Jw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 19/46] oslib: qemu_clear_cloexec Date: Tue, 26 Jul 2022 09:10:16 -0700 Message-Id: <1658851843-236870-20-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: 5TE-ZkiADh9wv6hbLFRDBqaDx4RMzXIa X-Proofpoint-GUID: 5TE-ZkiADh9wv6hbLFRDBqaDx4RMzXIa Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852547480100001 Define qemu_clear_cloexec, analogous to qemu_set_cloexec. Signed-off-by: Steve Sistare Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Michael Galaxy --- include/qemu/osdep.h | 9 +++++++++ util/oslib-posix.c | 9 +++++++++ util/oslib-win32.c | 4 ++++ 3 files changed, 22 insertions(+) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index b1c161c..015c764 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -549,6 +549,15 @@ ssize_t qemu_write_full(int fd, const void *buf, size_= t count) =20 void qemu_set_cloexec(int fd); =20 +/* + * Clear FD_CLOEXEC for a descriptor. + * + * The caller must guarantee that no other fork+exec's occur before the + * exec that is intended to inherit this descriptor, eg by suspending CPUs + * and blocking monitor commands. + */ +void qemu_clear_cloexec(int fd); + /* Return a dynamically allocated directory path that is appropriate for s= toring * local state. * diff --git a/util/oslib-posix.c b/util/oslib-posix.c index bffec18..7990aab 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -257,6 +257,15 @@ void qemu_set_cloexec(int fd) assert(f !=3D -1); } =20 +void qemu_clear_cloexec(int fd) +{ + int f; + f =3D fcntl(fd, F_GETFD); + assert(f !=3D -1); + f =3D fcntl(fd, F_SETFD, f & ~FD_CLOEXEC); + assert(f !=3D -1); +} + char * qemu_get_local_state_dir(void) { diff --git a/util/oslib-win32.c b/util/oslib-win32.c index 5723d3e..5bed148 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -226,6 +226,10 @@ void qemu_set_cloexec(int fd) { } =20 +void qemu_clear_cloexec(int fd) +{ +} + int qemu_get_thread_id(void) { return GetCurrentThreadId(); --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853514; cv=none; d=zohomail.com; s=zohoarc; b=O0BM8Ai52xNLiX2mw08WaOkF4hDGyOVOzEpR8uXzgfxXU1V8WaD6EOxofrj4WRDP8AbIVaCbqxr8YOKT2nzChL8+hgYthYcoOOkmxmWcCVwxCup9Az9juq4ctbdCDjYaAQ7b6a31/C7Ku9RaryuyLWhxBNK2AC9xQuu3D81DwrA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853514; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=UeVpLzMN2ckFZbyc+DCWwGK/6FspYnHNV9zJfYVysp4=; b=GraA/BAsJh7c3kcdmVggf/zjnilqaSjwxDpX6uGUEcbnHnDDE8WCCbql7+27MgyiQaYhOtkJabuzysFWKnx2bvmxGJeKlop9mHvyFC5IK5j2Oj0RSSnKvbB77q5BwG8M/k1OIgaI1kwgfSfB5RvSYESzZ10g+jsjstEDYw3tek8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853514226124.15542071782932; Tue, 26 Jul 2022 09:38:34 -0700 (PDT) Received: from localhost ([::1]:35860 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNZp-0002nl-8O for importer@patchew.org; Tue, 26 Jul 2022 12:38:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34994) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9r-0002zM-RG for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:44 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:56664) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9p-0006B3-To for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:43 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnQMX006253; Tue, 26 Jul 2022 16:11:15 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu1x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:15 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QExV3H006241; Tue, 26 Jul 2022 16:11:14 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1ww-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:14 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSn023334; Tue, 26 Jul 2022 16:11:13 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-21; Tue, 26 Jul 2022 16:11:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=UeVpLzMN2ckFZbyc+DCWwGK/6FspYnHNV9zJfYVysp4=; b=xShHdNnj01YCSmYw7qTCuBSkNA6tLPsZKt1Ey6qykXr2bk8QiI0Kw4e8zLUBv1VzqmWh y9FbgheP33/Xdws5d1xSnkzbkuKRDsR7WdEfy5Nnz3k/9gIK9xihm5Rl/gdh8x3wh82n DiTq0MWWcm3NXecYBCA+fPDTVHoggJuh3TtSjWVvHNOREMmerySbNC8T0jcFtR9pptGU 7OFS9Hr6a/PgfM5JNHz162KxFDyE+3KPE5p1d5ZICyd9xKszySAw7zxI4tElXAjhchz3 0gyiXIzXhoERN1nVPHTHDIl8CK55K6f7h5P1fqwPWj6mE3KyI03kJKii2+XKMTyi40Ue 3Q== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 20/46] vl: helper to request re-exec Date: Tue, 26 Jul 2022 09:10:17 -0700 Message-Id: <1658851843-236870-21-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: ZML2-6gSZZlSUOGE1lPJHUr42_hHfafm X-Proofpoint-ORIG-GUID: ZML2-6gSZZlSUOGE1lPJHUr42_hHfafm Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853516031100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add a qemu_system_exec_request() hook that causes the main loop to exit and re-exec qemu using the specified arguments. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/sysemu/runstate.h | 1 + softmmu/runstate.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h index f3ed525..a5f0738 100644 --- a/include/sysemu/runstate.h +++ b/include/sysemu/runstate.h @@ -62,6 +62,7 @@ void qemu_system_wakeup_enable(WakeupReason reason, bool = enabled); void qemu_register_wakeup_notifier(Notifier *notifier); void qemu_register_wakeup_support(void); void qemu_system_shutdown_request(ShutdownCause reason); +void qemu_system_exec_request(const strList *args); void qemu_system_powerdown_request(void); void qemu_register_powerdown_notifier(Notifier *notifier); void qemu_register_shutdown_notifier(Notifier *notifier); diff --git a/softmmu/runstate.c b/softmmu/runstate.c index 168e1b7..14b43df 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -37,6 +37,7 @@ #include "monitor/monitor.h" #include "net/net.h" #include "net/vhost_net.h" +#include "qapi/util.h" #include "qapi/error.h" #include "qapi/qapi-commands-run-state.h" #include "qapi/qapi-events-run-state.h" @@ -353,6 +354,7 @@ static NotifierList wakeup_notifiers =3D static NotifierList shutdown_notifiers =3D NOTIFIER_LIST_INITIALIZER(shutdown_notifiers); static uint32_t wakeup_reason_mask =3D ~(1 << QEMU_WAKEUP_REASON_NONE); +static GStrv exec_argv; =20 ShutdownCause qemu_shutdown_requested_get(void) { @@ -369,6 +371,11 @@ static int qemu_shutdown_requested(void) return qatomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE); } =20 +static int qemu_exec_requested(void) +{ + return exec_argv !=3D NULL; +} + static void qemu_kill_report(void) { if (!qtest_driver() && shutdown_signal) { @@ -627,6 +634,13 @@ void qemu_system_shutdown_request(ShutdownCause reason) qemu_notify_event(); } =20 +void qemu_system_exec_request(const strList *args) +{ + exec_argv =3D strv_from_strList(args); + shutdown_requested =3D 1; + qemu_notify_event(); +} + static void qemu_system_powerdown(void) { qapi_event_send_powerdown(); @@ -675,6 +689,16 @@ static bool main_loop_should_exit(void) } request =3D qemu_shutdown_requested(); if (request) { + + if (qemu_exec_requested()) { + Error *err =3D NULL; + execvp(exec_argv[0], exec_argv); + error_setg_errno(&err, errno, "execvp %s failed", exec_argv[0]= ); + error_report_err(err); + g_strfreev(exec_argv); + exec_argv =3D NULL; + return false; + } qemu_kill_report(); qemu_system_shutdown(request); if (shutdown_action =3D=3D SHUTDOWN_ACTION_PAUSE) { --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852786; cv=none; d=zohomail.com; s=zohoarc; b=AzfgWXaQnBJipWM3cArfFVA+ymDUne6rTwJeBy80ge+ct7FJQ7ev5zkQ9Tu+167e+D1IWJrJrqUUj/FtA10uFGa3KE903LfvyYk8+la5x5dvjPUxduBFghCrUjUbfUAue1NxpdKcKGeMB7FzJe7BQYoQKUDLITOMRZmtYxNxxMQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852786; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=x9IWBCn4oIQGc5lzeOKqfAYzc9jsiabJWl/fQQx2PfA=; b=fcDXoNPFT7vfxSqCk3ZAM8PFJWiDbqFRUWkujoecQihwlKnj90wgNxZgyMfW1YjVIDIrXDw6i0lXnWwwYWk5Zo67xz9oUVJoRfT6WHMUJd8bNUcJGo1hoeRL+r4G/u0cya8Fp3VU7AxD2JCWPoTajgJhz7iPtzUqbGRtFi3wv74= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852786570476.67587047982863; Tue, 26 Jul 2022 09:26:26 -0700 (PDT) Received: from localhost ([::1]:44402 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNO4-0005v5-E5 for importer@patchew.org; Tue, 26 Jul 2022 12:26:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34864) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9f-0002hR-G1 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:31 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:45960) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9b-00069m-NS for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:31 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3YC031760; Tue, 26 Jul 2022 16:11:17 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1ap-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:16 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFswoh006211; Tue, 26 Jul 2022 16:11:15 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1y2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:15 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSp023334; Tue, 26 Jul 2022 16:11:15 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-22; Tue, 26 Jul 2022 16:11:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=x9IWBCn4oIQGc5lzeOKqfAYzc9jsiabJWl/fQQx2PfA=; b=vpnrEoUPlAOz8fVg+E9OfxE/+H72gn5+16reAtyJXYV0TWFSZuwf0R2VAmhY2Yu9p3Ma oRYKIJwqYQIoa/6a3OeNq1qtGeG4qpXDiHY0090bj0r7M/pTiiXUsck4Ha9Lq9aFZDWX SW+AacvYRby9vp43Bt4pT+b7j3TCfyVqkahOVkS+HFHAOQEc0HDkrwMyhwVdZjL0an// 3Fpdka+tKY+Kukmrzzkwvw7ww9OPuJRvdG4m3yHO6+Q0B7OBY3shmZxmMFyLhMm6pAps fxTVxP1wq3koieo81a9/gL5BsAAr348KAh9rB4uU66xBxhWNamhJx0vJD/s7eY2VNgmJ aw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 21/46] cpr: preserve extra state Date: Tue, 26 Jul 2022 09:10:18 -0700 Message-Id: <1658851843-236870-22-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: kS9TTxf5SO5XpnF9bWqqNkoWjDO9O2SG X-Proofpoint-GUID: kS9TTxf5SO5XpnF9bWqqNkoWjDO9O2SG Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852787471100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" cpr must save state that is needed after qemu is restarted, when devices are realized. Thus the extra state cannot be saved in the migration stream file, as objects must already exist before that file can be loaded. Instea= d, define auxilliary state structures and vmstate descriptions, not associated with any registered object, and serialize the aux state to a memfd file. Deserialize after qemu restarts, before devices are realized. The following state is saved: * cpr mode * file descriptor names and values * memfd values and properties for ram blocks Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- MAINTAINERS | 3 + include/migration/cpr-state.h | 30 ++++ migration/cpr-state.c | 362 ++++++++++++++++++++++++++++++++++++++= ++++ migration/meson.build | 1 + migration/trace-events | 8 + stubs/cpr-state.c | 26 +++ stubs/meson.build | 1 + 7 files changed, 431 insertions(+) create mode 100644 include/migration/cpr-state.h create mode 100644 migration/cpr-state.c create mode 100644 stubs/cpr-state.c diff --git a/MAINTAINERS b/MAINTAINERS index 362cfde..122af30 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3165,6 +3165,9 @@ M: Steve Sistare R: Mark Kanda S: Maintained F: tests/unit/test-strlist.c +F: include/migration/cpr-state.h +F: migration/cpr-state.c +F: stubs/cpr-state.c =20 Record/replay M: Pavel Dovgalyuk diff --git a/include/migration/cpr-state.h b/include/migration/cpr-state.h new file mode 100644 index 0000000..a9ae6ae --- /dev/null +++ b/include/migration/cpr-state.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#ifndef MIGRATION_CPR_STATE_H +#define MIGRATION_CPR_STATE_H + +#include "qapi/qapi-types-migration.h" + +typedef int (*cpr_walk_fd_cb)(const char *name, int id, int fd, void *opaq= ue); + +void cpr_save_fd(const char *name, int id, int fd); +void cpr_delete_fd(const char *name, int id); +int cpr_find_fd(const char *name, int id); +int cpr_walk_fd(cpr_walk_fd_cb cb, void *handle); +void cpr_save_memfd(const char *name, int fd, size_t len, size_t maxlen, + uint64_t align); +int cpr_find_memfd(const char *name, size_t *lenp, size_t *maxlenp, + uint64_t *alignp); +void cpr_delete_memfd(const char *name); +void cpr_resave_fd(const char *name, int id, int fd); +int cpr_state_save(Error **errp); +void cpr_state_unsave(void); +int cpr_state_load(Error **errp); +void cpr_state_print(void); + +#endif diff --git a/migration/cpr-state.c b/migration/cpr-state.c new file mode 100644 index 0000000..fb34b1a --- /dev/null +++ b/migration/cpr-state.c @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qemu/cutils.h" +#include "qemu/queue.h" +#include "qemu/memfd.h" +#include "qapi/error.h" +#include "io/channel-file.h" +#include "migration/vmstate.h" +#include "migration/cpr-state.h" +#include "migration/migration.h" +#include "migration/misc.h" +#include "migration/qemu-file.h" +#include "trace.h" + +/*************************************************************************/ +/* cpr state container for all information to be saved. */ + +typedef QLIST_HEAD(CprNameList, CprName) CprNameList; + +typedef struct CprState { + MigMode mode; + CprNameList fds; /* list of CprFd */ + CprNameList memfd; /* list of CprMemfd */ +} CprState; + +static CprState cpr_state =3D { + .mode =3D MIG_MODE_NORMAL, +}; + +/*************************************************************************/ +/* Generic list of names. */ + +typedef struct CprName { + char *name; + unsigned int namelen; + int id; + QLIST_ENTRY(CprName) next; +} CprName; + +static const VMStateDescription vmstate_cpr_name =3D { + .name =3D "cpr name", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32(namelen, CprName), + VMSTATE_VBUFFER_ALLOC_UINT32(name, CprName, 0, NULL, namelen), + VMSTATE_INT32(id, CprName), + VMSTATE_END_OF_LIST() + } +}; + +static void +add_name(CprNameList *head, const char *name, int id, CprName *elem) +{ + elem->name =3D g_strdup(name); + elem->namelen =3D strlen(name) + 1; + elem->id =3D id; + QLIST_INSERT_HEAD(head, elem, next); +} + +static CprName *find_name(CprNameList *head, const char *name, int id) +{ + CprName *elem; + + QLIST_FOREACH(elem, head, next) { + if (!strcmp(elem->name, name) && elem->id =3D=3D id) { + return elem; + } + } + return NULL; +} + +static void delete_name(CprNameList *head, const char *name, int id) +{ + CprName *elem =3D find_name(head, name, id); + + if (elem) { + QLIST_REMOVE(elem, next); + g_free(elem->name); + g_free(elem); + } +} + +/*************************************************************************= ***/ +/* Lists of named things. The first field of each entry must be a CprName= . */ + +typedef struct CprFd { + CprName name; /* must be first */ + int fd; +} CprFd; + +static const VMStateDescription vmstate_cpr_fd =3D { + .name =3D "cpr fd", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT(name, CprFd, 1, vmstate_cpr_name, CprName), + VMSTATE_INT32(fd, CprFd), + VMSTATE_END_OF_LIST() + } +}; + +#define CPR_FD(elem) ((CprFd *)(elem)) +#define CPR_FD_FD(elem) (CPR_FD(elem)->fd) + +void cpr_save_fd(const char *name, int id, int fd) +{ + CprFd *elem =3D g_new0(CprFd, 1); + + trace_cpr_save_fd(name, id, fd); + elem->fd =3D fd; + add_name(&cpr_state.fds, name, id, &elem->name); +} + +void cpr_delete_fd(const char *name, int id) +{ + trace_cpr_delete_fd(name, id); + delete_name(&cpr_state.fds, name, id); +} + +int cpr_find_fd(const char *name, int id) +{ + CprName *elem =3D find_name(&cpr_state.fds, name, id); + int fd =3D elem ? CPR_FD_FD(elem) : -1; + + if (fd >=3D 0) { + /* Set cloexec to prevent fd leaks from fork until the next cpr-ex= ec */ + qemu_set_cloexec(fd); + } + + trace_cpr_find_fd(name, id, fd); + return fd; +} + +int cpr_walk_fd(cpr_walk_fd_cb cb, void *opaque) +{ + CprName *elem; + + QLIST_FOREACH(elem, &cpr_state.fds, next) { + if (cb(elem->name, elem->id, CPR_FD_FD(elem), opaque)) { + return 1; + } + } + return 0; +} + +void cpr_resave_fd(const char *name, int id, int fd) +{ + CprName *elem =3D find_name(&cpr_state.fds, name, id); + int old_fd =3D elem ? CPR_FD_FD(elem) : -1; + + if (old_fd < 0) { + cpr_save_fd(name, id, fd); + } else if (old_fd !=3D fd) { + error_setg(&error_fatal, + "internal error: cpr fd '%s' id %d value %d " + "already saved with a different value %d", + name, id, fd, old_fd); + } +} + +/*************************************************************************/ +/* A memfd ram block. */ + +typedef struct CprMemfd { + CprName name; /* must be first */ + size_t len; + size_t maxlen; + uint64_t align; +} CprMemfd; + +static const VMStateDescription vmstate_cpr_memfd =3D { + .name =3D "cpr memfd", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT(name, CprMemfd, 1, vmstate_cpr_name, CprName), + VMSTATE_UINT64(len, CprMemfd), + VMSTATE_UINT64(maxlen, CprMemfd), + VMSTATE_UINT64(align, CprMemfd), + VMSTATE_END_OF_LIST() + } +}; + +#define CPR_MEMFD(elem) ((CprMemfd *)(elem)) +#define CPR_MEMFD_LEN(elem) (CPR_MEMFD(elem)->len) +#define CPR_MEMFD_MAXLEN(elem) (CPR_MEMFD(elem)->maxlen) +#define CPR_MEMFD_ALIGN(elem) (CPR_MEMFD(elem)->align) + +void cpr_save_memfd(const char *name, int fd, size_t len, size_t maxlen, + uint64_t align) +{ + CprMemfd *elem =3D g_new0(CprMemfd, 1); + + trace_cpr_save_memfd(name, len, maxlen, align); + elem->len =3D len; + elem->maxlen =3D maxlen; + elem->align =3D align; + add_name(&cpr_state.memfd, name, 0, &elem->name); + cpr_save_fd(name, 0, fd); +} + +void cpr_delete_memfd(const char *name) +{ + trace_cpr_delete_memfd(name); + delete_name(&cpr_state.memfd, name, 0); + cpr_delete_fd(name, 0); +} + +int cpr_find_memfd(const char *name, size_t *lenp, size_t *maxlenp, + uint64_t *alignp) +{ + int fd =3D cpr_find_fd(name, 0); + CprName *elem =3D find_name(&cpr_state.memfd, name, 0); + + if (elem) { + *lenp =3D CPR_MEMFD_LEN(elem); + *maxlenp =3D CPR_MEMFD_MAXLEN(elem); + *alignp =3D CPR_MEMFD_ALIGN(elem); + } else { + *lenp =3D 0; + *maxlenp =3D 0; + *alignp =3D 0; + } + + trace_cpr_find_memfd(name, *lenp, *maxlenp, *alignp); + return fd; +} + +/*************************************************************************/ +/* cpr state container interface and implementation. */ + +#define CPR_STATE_NAME "QEMU_CPR_STATE" + +static const VMStateDescription vmstate_cpr_state =3D { + .name =3D CPR_STATE_NAME, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32(mode, CprState), + VMSTATE_QLIST_V(fds, CprState, 1, vmstate_cpr_fd, CprFd, name.next= ), + VMSTATE_QLIST_V(memfd, CprState, 1, vmstate_cpr_memfd, CprMemfd, + name.next), + VMSTATE_END_OF_LIST() + } +}; + +static QEMUFile *qemu_file_new_fd_input(int fd, const char *name) +{ + g_autoptr(QIOChannelFile) fioc =3D qio_channel_file_new_fd(fd); + QIOChannel *ioc =3D QIO_CHANNEL(fioc); + qio_channel_set_name(ioc, name); + return qemu_file_new_input(ioc); +} + +static QEMUFile *qemu_file_new_fd_output(int fd, const char *name) +{ + g_autoptr(QIOChannelFile) fioc =3D qio_channel_file_new_fd(fd); + QIOChannel *ioc =3D QIO_CHANNEL(fioc); + qio_channel_set_name(ioc, name); + return qemu_file_new_output(ioc); +} + +int cpr_state_save(Error **errp) +{ + int ret, mfd; + QEMUFile *f; + char val[16]; + + mfd =3D memfd_create(CPR_STATE_NAME, 0); + if (mfd < 0) { + error_setg_errno(errp, errno, "memfd_create failed"); + return -1; + } + + cpr_state.mode =3D migrate_mode(); + qemu_clear_cloexec(mfd); + + f =3D qemu_file_new_fd_output(mfd, CPR_STATE_NAME); + ret =3D vmstate_save_state(f, &vmstate_cpr_state, &cpr_state, 0); + if (ret) { + error_setg(errp, "vmstate_save_state error %d", ret); + goto error; + } + + /* Do not close f, as mfd must remain open. */ + qemu_fflush(f); + lseek(mfd, 0, SEEK_SET); + + /* Remember mfd for post-exec cpr_state_load */ + snprintf(val, sizeof(val), "%d", mfd); + g_setenv(CPR_STATE_NAME, val, 1); + + return 0; + +error: + close(mfd); + cpr_state.mode =3D MIG_MODE_NORMAL; + return ret; +} + +void cpr_state_unsave(void) +{ + int mfd; + const char *val =3D g_getenv(CPR_STATE_NAME); + + if (val) { + g_unsetenv(CPR_STATE_NAME); + if (!qemu_strtoi(val, NULL, 10, &mfd)) { + close(mfd); + } + } +} + +int cpr_state_load(Error **errp) +{ + int ret, mfd; + QEMUFile *f; + const char *val =3D g_getenv(CPR_STATE_NAME); + + if (!val) { + return 0; + } + g_unsetenv(CPR_STATE_NAME); + if (qemu_strtoi(val, NULL, 10, &mfd)) { + error_setg(errp, "Bad %s env value %s", CPR_STATE_NAME, val); + return 1; + } + f =3D qemu_file_new_fd_input(mfd, CPR_STATE_NAME); + ret =3D vmstate_load_state(f, &vmstate_cpr_state, &cpr_state, 1); + qemu_fclose(f); + + if (!ret) { + migrate_get_current()->parameters.mode =3D cpr_state.mode; + } else { + error_setg(errp, "vmstate_load_state error %d", ret); + } + + return ret; +} + +void cpr_state_print(void) +{ + CprName *elem; + + printf("cpr_state:\n"); + printf("- mode =3D %d\n", cpr_state.mode); + QLIST_FOREACH(elem, &cpr_state.fds, next) { + printf("- %s %d : fd=3D%d\n", elem->name, elem->id, CPR_FD_FD(elem= )); + } + QLIST_FOREACH(elem, &cpr_state.memfd, next) { + printf("- %s : len=3D%lu, maxlen=3D%lu, align=3D%lu\n", elem->name, + CPR_MEMFD_LEN(elem), CPR_MEMFD_MAXLEN(elem), + CPR_MEMFD_ALIGN(elem)); + } +} diff --git a/migration/meson.build b/migration/meson.build index 30a8392..f7d130d 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -15,6 +15,7 @@ softmmu_ss.add(files( 'channel-block.c', 'colo-failover.c', 'colo.c', + 'cpr-state.c', 'exec.c', 'fd.c', 'file.c', diff --git a/migration/trace-events b/migration/trace-events index d72dd85..ed15a22 100644 --- a/migration/trace-events +++ b/migration/trace-events @@ -327,6 +327,14 @@ colo_receive_message(const char *msg) "Receive '%s' me= ssage" # colo-failover.c colo_failover_set_state(const char *new_state) "new state %s" =20 +# cpr-state.c +cpr_save_fd(const char *name, int id, int fd) "%s, id %d, fd %d" +cpr_delete_fd(const char *name, int id) "%s, id %d" +cpr_find_fd(const char *name, int id, int fd) "%s, id %d returns %d" +cpr_save_memfd(const char *name, size_t len, size_t maxlen, uint64_t align= ) "%s, len %lu, maxlen %lu, align %lu" +cpr_delete_memfd(const char *name) "%s" +cpr_find_memfd(const char *name, size_t len, size_t maxlen, uint64_t align= ) "%s, len %lu, maxlen %lu, align %lu" + # block-dirty-bitmap.c send_bitmap_header_enter(void) "" send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sector= s, uint64_t data_size) "flags: 0x%x, start_sector: %" PRIu64 ", nr_sectors:= %" PRIu32 ", data_size: %" PRIu64 diff --git a/stubs/cpr-state.c b/stubs/cpr-state.c new file mode 100644 index 0000000..1c9dc78 --- /dev/null +++ b/stubs/cpr-state.c @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "migration/cpr-state.h" + +void cpr_save_fd(const char *name, int id, int fd) +{ +} + +void cpr_delete_fd(const char *name, int id) +{ +} + +int cpr_find_fd(const char *name, int id) +{ + return -1; +} + +void cpr_resave_fd(const char *name, int id, int fd) +{ +} diff --git a/stubs/meson.build b/stubs/meson.build index d8f3fd5..392b1b5 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -4,6 +4,7 @@ stub_ss.add(files('blk-exp-close-all.c')) stub_ss.add(files('blockdev-close-all-bdrv-states.c')) stub_ss.add(files('change-state-handler.c')) stub_ss.add(files('cmos.c')) +stub_ss.add(files('cpr-state.c')) stub_ss.add(files('cpu-get-clock.c')) stub_ss.add(files('cpus-get-virtual-clock.c')) stub_ss.add(files('qemu-timer-notify-cb.c')) --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852571; cv=none; d=zohomail.com; s=zohoarc; b=UgpDiKN3IxQ6J1AIvpyZd13bHdELI61G0t5m478hbdJHIW7hgiT/IzddmbQtq3CmD/p5RE29npkaXRj0eklLAWIRvs6FjIBa4g0ri0h5RWmL1htgLR4bJFnTewY2xeYKqD5eEfiwP2KSEwuDjTPR2Rzcql9YFPllHnKpYJJwk8g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852571; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=Q1xO/14ZKEEOrSxrbSAZCdVWXv8qzXLukIfTwfb3Zxo=; b=g0i9taGYgaBP3rmJxU7ZHoJOdbsZfYYP6Hl1O0DA7ReWhLg7oVKLOH2TaFBLKX7gp/YMh8EfHX+qCvnA8wLoBaz/Rsiwc28HE2JTAjGSVkTS+FPjfqw35N73r6FKd5eu4hfEFOjSUdaZPaux8DcYJZhvK4nDywqnYeDxvEzcooQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852571682169.40502386865387; Tue, 26 Jul 2022 09:22:51 -0700 (PDT) Received: from localhost ([::1]:36532 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNKb-0000XV-Kd for importer@patchew.org; Tue, 26 Jul 2022 12:22:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35086) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9w-00032q-DR for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:48 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:61118) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9r-0006BI-JJ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:46 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3b1031727; Tue, 26 Jul 2022 16:11:18 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1as-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:18 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF2X4s006282; Tue, 26 Jul 2022 16:11:17 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq1yr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:17 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSr023334; Tue, 26 Jul 2022 16:11:16 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-23; Tue, 26 Jul 2022 16:11:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=Q1xO/14ZKEEOrSxrbSAZCdVWXv8qzXLukIfTwfb3Zxo=; b=yUcrjwUobuevy3u1GXtk+YfQg6bcr1HNQgAoc92jLk3vIOz/EbmGG6jkcCYBAPRh65JA 8LWXvW9s9TcUPsx8dfQSoIJvk4kzMRGlnziIIRSovoljvkk7ae6kXOp6EHAr8rJJAnPB Kq7q57h7fszYkkougkilcyPS4QaXe+fkiGQq40y80n7MHXJMiHF17rtXd6fvQMNgyfLd T073rTid+G5Jfv3dsTF7xOfAApFQ074ndMM7lc/yvTz0LBUAV5qbhazx6cAQIo585rL6 P0kKzklvwjj4uReYlQR7mkBdv8wmqLfoVkDKne5+IgfNZ5yklrJ8rC/TWal40CoEgAJG hA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 22/46] cpr: exec mode Date: Tue, 26 Jul 2022 09:10:19 -0700 Message-Id: <1658851843-236870-23-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: RpAIc3mxgRf_OFBwd_otjab9O8nmR7FF X-Proofpoint-GUID: RpAIc3mxgRf_OFBwd_otjab9O8nmR7FF Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852573630100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add the cpr-exec migration mode. Usage: qemu-system-$arch -migrate-mode-enable cpr-exec ... migrate_set_parameter mode cpr-exec migrate_set_parameter cpr-exec-args ... -incoming defer migrate -d file: ... poll for runstate inmigrate ... migrate_incoming file: In this mode, the migrate command saves state to a file, directly exec's a new version of qemu on the same host, replacing the original process while retaining its PID, and loads the file via the migrate-incoming command. The caller must specify a migration URI that writes to and reads from a file. Arguments for the new qemu process are taken from the @cpr-exec-args parameter. The first argument should be the path of a new qemu binary, or a prefix command that exec's the new qemu binary. The arguments must match those used to initially start qemu, plus the -incoming option. Guest RAM must be backed by a memory backend with share=3Don, but cannot be memory-backend-ram, and the '-migrate-mode-enable cpr-exec' option is required. This causes secondary guest ram blocks (those not specified on the command line) to be allocated by mmap'ing a memfd. The memfds are kept open across exec, their values are saved in special cpr state which is retrieved after exec, and they are re-mmap'd. Hence guest RAM is preserved in place, albeit with new virtual addresses in the qemu process. Since guest RAM is not copied, and storage blocks are not migrated, the caller must disable all capabilities related to page and block copy, and the implementation ignores all related parameters. Cpr-exec mode supports memory-backend-memfd, memory-backend-epc, and vfio devices in subsequent patches. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- MAINTAINERS | 2 ++ include/migration/cpr.h | 18 +++++++++++ migration/cpr.c | 85 +++++++++++++++++++++++++++++++++++++++++++++= ++++ migration/meson.build | 1 + migration/migration.c | 9 ++++++ migration/ram.c | 4 ++- qapi/migration.json | 25 ++++++++++++--- softmmu/physmem.c | 48 +++++++++++++++++++++++++++- softmmu/runstate.c | 4 ++- trace-events | 1 + 10 files changed, 190 insertions(+), 7 deletions(-) create mode 100644 include/migration/cpr.h create mode 100644 migration/cpr.c diff --git a/MAINTAINERS b/MAINTAINERS index 122af30..42f6f4a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3168,6 +3168,8 @@ F: tests/unit/test-strlist.c F: include/migration/cpr-state.h F: migration/cpr-state.c F: stubs/cpr-state.c +F: include/migration/cpr.h +F: migration/cpr.c =20 Record/replay M: Pavel Dovgalyuk diff --git a/include/migration/cpr.h b/include/migration/cpr.h new file mode 100644 index 0000000..c48be2d --- /dev/null +++ b/include/migration/cpr.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#ifndef MIGRATION_CPR_H +#define MIGRATION_CPR_H + +extern bool only_cpr_capable; + +void cpr_init(void); +void cpr_exec(void); +void cpr_exec_failed(Error *err); +void cpr_preserve_fds(void); + +#endif diff --git a/migration/cpr.c b/migration/cpr.c new file mode 100644 index 0000000..698baa4 --- /dev/null +++ b/migration/cpr.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "migration/migration.h" +#include "migration/misc.h" +#include "migration/cpr.h" +#include "migration/cpr-state.h" +#include "sysemu/runstate.h" + +bool only_cpr_capable; +static Notifier cpr_fd_notifier; + +static int preserve_fd(const char *name, int id, int fd, void *opaque) +{ + qemu_clear_cloexec(fd); + return 0; +} + +static int unpreserve_fd(const char *name, int id, int fd, void *opaque) +{ + qemu_set_cloexec(fd); + return 0; +} + +static void cpr_fd_notifier_func(Notifier *notifier, void *data) +{ + MigrationState *s =3D data; + + if (migrate_mode_of(s) =3D=3D MIG_MODE_CPR_EXEC && migration_has_faile= d(s)) { + cpr_walk_fd(unpreserve_fd, 0); + } +} + +void cpr_preserve_fds(void) +{ + cpr_walk_fd(preserve_fd, 0); +} + +void cpr_init(void) +{ + cpr_state_load(&error_fatal); + migration_add_notifier(&cpr_fd_notifier, cpr_fd_notifier_func); +} + +void cpr_exec(void) +{ + MigrationState *s =3D migrate_get_current(); + Error *err =3D NULL; + + if (migrate_mode_of(s) =3D=3D MIG_MODE_CPR_EXEC && !migration_has_fail= ed(s)) { + if (!migration_has_finished(s)) { + error_setg(&err, "cannot exec: migration status is '%s', " + "but must be 'completed'", + MigrationStatus_str(s->state)); + goto error; + } + + if (cpr_state_save(&err)) { + goto error; + } + + qemu_system_exec_request(s->parameters.cpr_exec_args); + } + return; + +error: + cpr_exec_failed(err); +} + +void cpr_exec_failed(Error *err) +{ + MigrationState *s =3D migrate_get_current(); + + migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED); + migrate_set_error(s, err); + error_report_err(err); + migration_call_notifiers(s); + cpr_state_unsave(); +} diff --git a/migration/meson.build b/migration/meson.build index f7d130d..5b65561 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -15,6 +15,7 @@ softmmu_ss.add(files( 'channel-block.c', 'colo-failover.c', 'colo.c', + 'cpr.c', 'cpr-state.c', 'exec.c', 'fd.c', diff --git a/migration/migration.c b/migration/migration.c index d7c6902..1a8a6ff 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -32,6 +32,7 @@ #include "migration.h" #include "savevm.h" #include "qemu-file.h" +#include "migration/cpr.h" #include "migration/vmstate.h" #include "block/block.h" #include "qapi/error.h" @@ -231,6 +232,7 @@ void migration_object_init(void) blk_mig_init(); ram_mig_init(); dirty_bitmap_mig_init(); + cpr_init(); } =20 void migration_cancel(const Error *error) @@ -1964,6 +1966,7 @@ static void migrate_fd_cleanup(MigrationState *s) } migration_call_notifiers(s); block_cleanup_parameters(s); + cpr_exec(); yank_unregister_instance(MIGRATION_YANK_INSTANCE); } =20 @@ -2489,6 +2492,12 @@ static bool migrate_prepare(MigrationState *s, bool = blk, bool blk_inc, return false; } =20 + if (migrate_mode_of(s) =3D=3D MIG_MODE_CPR_EXEC && + !s->parameters.has_cpr_exec_args) { + error_setg(errp, "cpr-exec mode requires setting cpr-exec-args"); + return false; + } + if (migration_is_blocked(errp)) { return false; } diff --git a/migration/ram.c b/migration/ram.c index 3ea3b41..4c868d2 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -165,6 +165,7 @@ out: bool ramblock_is_ignored(RAMBlock *block) { return !qemu_ram_is_migratable(block) || + migrate_mode() =3D=3D MIG_MODE_CPR_EXEC || (migrate_ignore_shared() && qemu_ram_is_shared(block) && ramblock_is_named_file(block)); } @@ -3058,7 +3059,8 @@ static void ram_init_bitmaps(RAMState *rs) WITH_RCU_READ_LOCK_GUARD() { ram_list_init_bitmaps(); /* We don't use dirty log with background snapshots */ - if (!migrate_background_snapshot()) { + if (!migrate_background_snapshot() && + migrate_mode() =3D=3D MIG_MODE_NORMAL) { memory_global_dirty_log_start(GLOBAL_DIRTY_MIGRATION); migration_bitmap_sync_precopy(rs); } diff --git a/qapi/migration.json b/qapi/migration.json index 839fcd4..a068d4c 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -586,10 +586,21 @@ # arguments must match those used to initially start qemu, pl= us # the -incoming option. # +# @cpr-exec: The migrate command saves state to a file, directly exec's a +# new version of qemu on the same host, replacing the original +# process while retaining its PID, and loads the file via the +# migrate-incoming command. The caller must specify a migratio= n URI +# that writes to and reads from a file. Guest RAM must be back= ed by +# a memory backend with share=3Don, and cannot be memory-backen= d-ram. +# Guest RAM is not copied, and storage blocks are not migrated,= so +# all capabilities related to page and block copy must be disab= led, +# and all related parameters are ignored. Arguments for the new +# qemu process are taken from the @cpr-exec-args parameter. +# # Since: 7.1 ## { 'enum': 'MigMode', - 'data': [ 'normal', 'cpr-reboot' ] } + 'data': [ 'normal', 'cpr-reboot', 'cpr-exec' ] } =20 ## # @BitmapMigrationBitmapAliasTransform: @@ -712,7 +723,11 @@ # at tail stage. # The default value is false. (Since 5.1) # -# @cpr-exec-args: defined in a subsequent patch. +# @cpr-exec-args: arguments passed to new qemu for cpr-exec mode. The fir= st +# argument should be the path of a new qemu binary, or a p= refix +# command that exec's the new qemu binary. The arguments = must +# match those used to initially start qemu, plus the -inco= ming +# option. (Since 7.1) # # @tls-creds: ID of the 'tls-creds' object that provides credentials for # establishing a TLS connection over the migration data channe= l. @@ -885,7 +900,8 @@ # at tail stage. # The default value is false. (Since 5.1) # -# @cpr-exec-args: defined in a subsequent patch. +# @cpr-exec-args: Arguments passed to new qemu for cpr-exec mode. +# See description in @MigrationParameter. (Since 7.1) # # @tls-creds: ID of the 'tls-creds' object that provides credentials # for establishing a TLS connection over the migration data @@ -1090,7 +1106,8 @@ # at tail stage. # The default value is false. (Since 5.1) # -# @cpr-exec-args: defined in a subsequent patch. +# @cpr-exec-args: Arguments passed to new qemu for cpr-exec mode. +# See description in @MigrationParameter. (Since 7.1) # # @tls-creds: ID of the 'tls-creds' object that provides credentials # for establishing a TLS connection over the migration data diff --git a/softmmu/physmem.c b/softmmu/physmem.c index cce721a..29baa0f 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -44,6 +44,7 @@ #include "qemu/qemu-print.h" #include "qemu/log.h" #include "qemu/memalign.h" +#include "qemu/memfd.h" #include "exec/memory.h" #include "exec/ioport.h" #include "sysemu/dma.h" @@ -66,6 +67,8 @@ =20 #include "qemu/pmem.h" =20 +#include "migration/cpr-state.h" +#include "migration/misc.h" #include "migration/vmstate.h" =20 #include "qemu/range.h" @@ -1971,6 +1974,40 @@ static void dirty_memory_extend(ram_addr_t old_ram_s= ize, } } =20 +static bool memory_region_is_backend(MemoryRegion *mr) +{ + return !!object_dynamic_cast(OBJECT(mr)->parent, TYPE_MEMORY_BACKEND); +} + +static void *qemu_anon_memfd_alloc(RAMBlock *rb, size_t maxlen, Error **er= rp) +{ + size_t len, align; + void *addr; + struct MemoryRegion *mr =3D rb->mr; + const char *name =3D memory_region_name(mr); + int mfd =3D cpr_find_memfd(name, &len, &maxlen, &align); + + if (mfd >=3D 0) { + rb->used_length =3D len; + rb->max_length =3D maxlen; + mr->align =3D align; + } else { + len =3D rb->used_length; + maxlen =3D rb->max_length; + mr->align =3D QEMU_VMALLOC_ALIGN; + mfd =3D qemu_memfd_create(name, maxlen + mr->align, 0, 0, 0, errp); + if (mfd < 0) { + return NULL; + } + cpr_save_memfd(name, mfd, len, maxlen, mr->align); + } + rb->flags |=3D RAM_SHARED; + qemu_set_cloexec(mfd); + addr =3D file_ram_alloc(rb, maxlen, mfd, false, false, 0, errp); + trace_anon_memfd_alloc(name, maxlen, addr, mfd); + return addr; +} + static void ram_block_add(RAMBlock *new_block, Error **errp) { const bool noreserve =3D qemu_ram_is_noreserve(new_block); @@ -1994,6 +2031,14 @@ static void ram_block_add(RAMBlock *new_block, Error= **errp) qemu_mutex_unlock_ramlist(); return; } + } else if (migrate_mode_enabled(MIG_MODE_CPR_EXEC) && + !memory_region_is_backend(new_block->mr)) { + new_block->host =3D qemu_anon_memfd_alloc(new_block, + new_block->max_length, + errp); + if (!new_block->host) { + return; + } } else { new_block->host =3D qemu_anon_ram_alloc(new_block->max_length, &new_block->mr->align, @@ -2005,8 +2050,8 @@ static void ram_block_add(RAMBlock *new_block, Error = **errp) qemu_mutex_unlock_ramlist(); return; } - memory_try_enable_merging(new_block->host, new_block->max_leng= th); } + memory_try_enable_merging(new_block->host, new_block->max_length); } =20 new_ram_size =3D MAX(old_ram_size, @@ -2239,6 +2284,7 @@ void qemu_ram_free(RAMBlock *block) } =20 qemu_mutex_lock_ramlist(); + cpr_delete_memfd(memory_region_name(block->mr)); QLIST_REMOVE_RCU(block, next); ram_list.mru_block =3D NULL; /* Write list before version */ diff --git a/softmmu/runstate.c b/softmmu/runstate.c index 14b43df..fb86740 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -32,6 +32,7 @@ #include "exec/cpu-common.h" #include "exec/gdbstub.h" #include "hw/boards.h" +#include "migration/cpr.h" #include "migration/misc.h" #include "migration/postcopy-ram.h" #include "monitor/monitor.h" @@ -692,9 +693,10 @@ static bool main_loop_should_exit(void) =20 if (qemu_exec_requested()) { Error *err =3D NULL; + cpr_preserve_fds(); execvp(exec_argv[0], exec_argv); error_setg_errno(&err, errno, "execvp %s failed", exec_argv[0]= ); - error_report_err(err); + cpr_exec_failed(err); g_strfreev(exec_argv); exec_argv =3D NULL; return false; diff --git a/trace-events b/trace-events index bc71006..07369bb 100644 --- a/trace-events +++ b/trace-events @@ -45,6 +45,7 @@ ram_block_discard_range(const char *rbname, void *hva, si= ze_t length, bool need_ # accel/tcg/cputlb.c memory_notdirty_write_access(uint64_t vaddr, uint64_t ram_addr, unsigned s= ize) "0x%" PRIx64 " ram_addr 0x%" PRIx64 " size %u" memory_notdirty_set_dirty(uint64_t vaddr) "0x%" PRIx64 +anon_memfd_alloc(const char *name, size_t size, void *ptr, int fd) "%s siz= e %zu ptr %p fd %d" =20 # gdbstub.c gdbstub_op_start(const char *device) "Starting gdbstub using device %s" --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854982; cv=none; d=zohomail.com; s=zohoarc; b=AHUhUTcX2xqnPm40L6DcSmf+B7N138HZYdVat7ZQ4dV5XzrpO62SROMTvOuN1ACKFfMSS1QyGi7btjssN6fALfTcUShSjJhHR8lUeBRYmOtzkNmdS9CpduWzfOzs2GsWH4iak+eFT9bzR0Iem7SSP8Ujxz9hTrIKaBglFX+Typ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854982; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=jNMAAWZMOPGgH+ehHeNEsLT3RqIsn363j0+zvf58O48=; b=WaQW+T9qRSPPelideMnBKbfpRnVViONps6ibIEjMhB7GCZOPinC2JrsfoxijpBzZCyamptf+zCOCsMY84ot9tgifj0qHAzHT9Dtv4dv4xmAL0vcepY+fbv2r+a/n1iCQwbUZF7wDYAPNKWl8HfDkdyiOJ2qG8gpQBBvwUIyuZIY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854982284605.2046759973712; Tue, 26 Jul 2022 10:03:02 -0700 (PDT) Received: from localhost ([::1]:49464 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNxT-0007dJ-Kz for importer@patchew.org; Tue, 26 Jul 2022 13:03:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35588) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAs-0004My-Mb for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:46 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:18760) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAq-0006Lc-Hu for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:46 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPJ6006232; Tue, 26 Jul 2022 16:11:19 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu2b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:19 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEsIB3006240; Tue, 26 Jul 2022 16:11:18 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq20x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:18 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSt023334; Tue, 26 Jul 2022 16:11:17 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-24; Tue, 26 Jul 2022 16:11:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=jNMAAWZMOPGgH+ehHeNEsLT3RqIsn363j0+zvf58O48=; b=nVDnaRP9dkGAEjpBMbTRh3PwY+UUvXCUjeDEL5egDW/mc5myGJfY1dvXvmKim+PMumwK 8qtlyMyVMzWRQEFT6RuTdZwof82FDeR6ROLAPt+AJ5z8pRAqt/Oj1Xjdmj6i8S0J4uV9 I0wRz7GTk9yPe+afwiC7F+ehxPbR1uloEjpW+mxdvgq79B06gk6uccHvefKGTY4w8/pi XsdRaaRhMSXZnfuMEqNQ1hqw1VFzdAVn2gdz5B1TF0jqtXeTLF7gElO01+Xt0uQNGF6o n1kVR3Lsb57yqKjFS+c10RJRmDB9WqxoT6+IfBXDLLuw4Eq4cTw9H/FuJYAKxCmrAJA5 TQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 23/46] cpr: add exec-mode blockers Date: Tue, 26 Jul 2022 09:10:20 -0700 Message-Id: <1658851843-236870-24-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: iY3ZssBZfRyU9aTk-evajqMXwoygyx8l X-Proofpoint-ORIG-GUID: iY3ZssBZfRyU9aTk-evajqMXwoygyx8l Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854984244100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add blockers for cpr-exec migration mode for devices and options that do not support it. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- accel/xen/xen-all.c | 3 +++ migration/migration.c | 5 +++++ replay/replay.c | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c index 69aa7d0..2896044 100644 --- a/accel/xen/xen-all.c +++ b/accel/xen/xen-all.c @@ -181,6 +181,9 @@ static int xen_init(MachineState *ms) * opt out of system RAM being allocated by generic code */ mc->default_ram_id =3D NULL; + + migrate_add_blocker_always("xen does not support cpr exec", + &error_fatal, MIG_MODE_CPR_EXEC, -1); return 0; } =20 diff --git a/migration/migration.c b/migration/migration.c index 1a8a6ff..7b46213 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1348,6 +1348,11 @@ static bool migrate_caps_check(bool *cap_list, } } =20 + if (cap_list[MIGRATION_CAPABILITY_X_COLO]) { + return migrate_add_blocker_always("x-colo is not compatible with c= pr", + errp, MIG_MODE_CPR_EXEC, -1); + } + return true; } =20 diff --git a/replay/replay.c b/replay/replay.c index 4c396bb..b0194dd 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -19,6 +19,7 @@ #include "qemu/option.h" #include "sysemu/cpus.h" #include "qemu/error-report.h" +#include "migration/blocker.h" =20 /* Current version of the replay mechanism. Increase it when file format changes. */ @@ -232,6 +233,9 @@ static void replay_enable(const char *fname, int mode) const char *fmode =3D NULL; assert(!replay_file); =20 + migrate_add_blocker_always("replay is not compatible with cpr", + &error_fatal, MIG_MODE_CPR_EXEC, -1); + switch (mode) { case REPLAY_MODE_RECORD: fmode =3D "wb"; --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853158; cv=none; d=zohomail.com; s=zohoarc; b=CC8O+aHoW6YohNk1z9np34A+PKWJ8iul5JcMCIva4S5+/rZu1muTissrnNt4wpaRu9dP56+UCSR4A+gZ4nrKB1WElWj/KtOwX+sYzLJMxagAulkfEYv7ygCcFDQZHII5vA6jjZ+QZBExC08aa3khgGtB07KQJhEBKVD/udJOK2Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853158; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=E6TXwK1/WJ7d+7ecsRmCREBhp+ocOagKPApyHnMH70I=; b=KsH0rPe1H6hU3R6tDVAtI8JYAXTvaMEr/BiF0gEtcKowPbeI7acNs7oRL69qB9GTLmW5gm0p1AtGHnawL/e7PjGEBhC5fpjRULCPVyNvZJuV4jf6aH1RaV90wQkG/jLNTE8ycOIc5NhMmhhSnzMx4YoM1PrKuZG8RPJQncYlr60= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853158443987.499975301662; Tue, 26 Jul 2022 09:32:38 -0700 (PDT) Received: from localhost ([::1]:54926 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNU5-0004ny-Dl for importer@patchew.org; Tue, 26 Jul 2022 12:32:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9q-0002yu-Tq for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:44 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:52236) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9o-0006Ag-6e for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:42 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3Uo016260; Tue, 26 Jul 2022 16:11:20 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0vc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:20 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFEnp8006399; Tue, 26 Jul 2022 16:11:19 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq22k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:19 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSv023334; Tue, 26 Jul 2022 16:11:18 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-25; Tue, 26 Jul 2022 16:11:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=E6TXwK1/WJ7d+7ecsRmCREBhp+ocOagKPApyHnMH70I=; b=jT4hbux4qzsDyk8E0LoUB9OjMNn9XhXTr6dBq8va95fP95B1EEKdoQ8RKDmMVJBhvUxV Sr1Ds4h+0JJb3i8EO4RsVuU7M4oXyY3p1aXsEaNcGoeehFxfN0fFMdYbU/TMkyrcfC1T gcig6UEZMtDwLy2BWrwhQUOQNLNPhZSToakLStsj9IZgm41RUBeUgDfsRnJFAbAKRmpL LIOx9dDcLA+z37tVSsYRpoKU8qm5VJYXQNjZPV0jrG/wYQyqruWX86strZjYvwl/CIXo ZhNUYH/rkfjglfEOZMdliMX2DCL/3V0y4uLouzO/kj0XzfGRr7LPRsxQrM23MF8t6GMu +A== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 24/46] cpr: ram block blockers Date: Tue, 26 Jul 2022 09:10:21 -0700 Message-Id: <1658851843-236870-25-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: 3F0JnfG6Ge_wFNQ7ejou9QdC0sD_NCmB X-Proofpoint-ORIG-GUID: 3F0JnfG6Ge_wFNQ7ejou9QdC0sD_NCmB Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853159222100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Unlike cpr-reboot mode, cpr-exec mode cannot save volatile ram blocks in the migration stream file and recreate them later, because the physical memory = for the blocks is pinned and registered for vfio. Add an exec-mode blocker for volatile ram blocks. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/exec/memory.h | 2 ++ include/exec/ramblock.h | 1 + softmmu/physmem.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ softmmu/vl.c | 2 ++ 4 files changed, 50 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index 9629289..128bf3e 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -3039,6 +3039,8 @@ bool ram_block_discard_is_disabled(void); */ bool ram_block_discard_is_required(void); =20 +void ram_block_add_cpr_blockers(Error **errp); + #endif =20 #endif diff --git a/include/exec/ramblock.h b/include/exec/ramblock.h index 6cbedf9..a5cbd9e 100644 --- a/include/exec/ramblock.h +++ b/include/exec/ramblock.h @@ -39,6 +39,7 @@ struct RAMBlock { /* RCU-enabled, writes protected by the ramlist lock */ QLIST_ENTRY(RAMBlock) next; QLIST_HEAD(, RAMBlockNotifier) ramblock_notifiers; + Error *cpr_blocker; int fd; size_t page_size; /* dirty bitmap used during migration */ diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 29baa0f..ac0ae25 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -67,6 +67,7 @@ =20 #include "qemu/pmem.h" =20 +#include "migration/blocker.h" #include "migration/cpr-state.h" #include "migration/misc.h" #include "migration/vmstate.h" @@ -1979,6 +1980,49 @@ static bool memory_region_is_backend(MemoryRegion *m= r) return !!object_dynamic_cast(OBJECT(mr)->parent, TYPE_MEMORY_BACKEND); } =20 +/* + * Return true if ram contents would be lost during cpr for MIG_MODE_CPR_E= XEC. + * Return false for ram_device because it is remapped after exec. Do not + * exclude rom, even though it is readonly, because the rom file could cha= nge + * in the new qemu. Return false for non-migratable blocks. They are eit= her + * re-created after exec, or are handled specially, or are covered by a + * device-level cpr blocker. Return false for an fd, because it is visibl= e and + * can be remapped in the new process. + */ +static bool ram_is_volatile(RAMBlock *rb) +{ + MemoryRegion *mr =3D rb->mr; + + return mr && + memory_region_is_ram(mr) && + !memory_region_is_ram_device(mr) && + (!qemu_ram_is_shared(rb) || !ramblock_is_named_file(rb)) && + qemu_ram_is_migratable(rb) && + rb->fd < 0; +} + +/* + * Add a MIG_MODE_CPR_EXEC blocker for each volatile ram block. This cann= ot be + * performed in ram_block_add because the migratable flag has not been set= yet. + * No need to examine anonymous (non-backend) blocks, because they are + * created using memfd if cpr-exec mode is enabled. + */ +void ram_block_add_cpr_blockers(Error **errp) +{ + RAMBlock *rb; + + RAMBLOCK_FOREACH(rb) { + if (ram_is_volatile(rb) && memory_region_is_backend(rb->mr)) { + const char *name =3D memory_region_name(rb->mr); + rb->cpr_blocker =3D NULL; + error_setg(&rb->cpr_blocker, + "Memory region %s is volatile. A memory-backend-memfd = or" + " memory-backend-file with share=3Don is required.", n= ame); + migrate_add_blockers(&rb->cpr_blocker, errp, MIG_MODE_CPR_EXEC= , -1); + } + } +} + static void *qemu_anon_memfd_alloc(RAMBlock *rb, size_t maxlen, Error **er= rp) { size_t len, align; @@ -2285,6 +2329,7 @@ void qemu_ram_free(RAMBlock *block) =20 qemu_mutex_lock_ramlist(); cpr_delete_memfd(memory_region_name(block->mr)); + migrate_del_blocker(&block->cpr_blocker); QLIST_REMOVE_RCU(block, next); ram_list.mru_block =3D NULL; /* Write list before version */ diff --git a/softmmu/vl.c b/softmmu/vl.c index 83f3be0..5f6cd8c 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -28,6 +28,7 @@ #include "qemu/units.h" #include "exec/cpu-common.h" #include "exec/page-vary.h" +#include "exec/memory.h" #include "hw/qdev-properties.h" #include "qapi/compat-policy.h" #include "qapi/error.h" @@ -2589,6 +2590,7 @@ void qmp_x_exit_preconfig(Error **errp) qemu_init_board(); qemu_create_cli_devices(); qemu_machine_creation_done(); + ram_block_add_cpr_blockers(&error_fatal); =20 if (loadvm) { load_snapshot(loadvm, NULL, false, NULL, &error_fatal); --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853505; cv=none; d=zohomail.com; s=zohoarc; b=VzFNcKxrSSZOB7nf6lHFzZ83VjyeSiVVcJtYEjQB0cKnPY6wOCKGmaH4QNr5gLa9ZQbOOUvihIEAagkv/MhYstHIDrrGEi8xpdkmcIK4+3yYizCBOalp8MVECgjr7xev6DU+xzXh16OrPVIol5gCFfROB7e9T9v4hEgi3z5F/YQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853505; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=Dkgw2hV3LTizWyr+JMzC+LU6gc3ZsMZvXFzyN2LhVpY=; b=mgFjJZBXZRnxdS0ybraBDBETUdTyKwGpwjRGFs1NyM+8yo7ucqvMyPYUf7nwmt8f18C5S+qhLri7J9GTtVMGavhfxvUrcFnA3WNV9SlLd2L5EjcoQw+4c7fZgwpRWYoA7snm+4DiUV3ppYYOv82+VhWv9Xu1OLcg7/WPPT9n4hg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853505783911.6699958563815; Tue, 26 Jul 2022 09:38:25 -0700 (PDT) Received: from localhost ([::1]:35302 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNZg-0002RK-Jc for importer@patchew.org; Tue, 26 Jul 2022 12:38:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9w-00033q-Bd for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:48 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:2718) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9t-0006Bd-Vt for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:47 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn4iJ016269; Tue, 26 Jul 2022 16:11:22 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0vh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:22 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF5NqA006270; Tue, 26 Jul 2022 16:11:21 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq242-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:21 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uSx023334; Tue, 26 Jul 2022 16:11:20 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-26; Tue, 26 Jul 2022 16:11:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=Dkgw2hV3LTizWyr+JMzC+LU6gc3ZsMZvXFzyN2LhVpY=; b=nxlnicrNzlU+wq7uQJcZdHYE32Jjt7X9WFKglzZMRFnRrMJNWYvxb/zOxzi9p2+uNLvE fqfjUZXy7ZuhjP6urFlQCnG4NuhVIi7o/b1x36BppAUf/JmkrqFuskaycqozeS9Sxh9E EOwo6ww9YP5k182i21p5ybR/1H/C9VUEdt3G33Kiu0pjm3vzfy85Ghue0GsgPXok/jsv rHnkq7AuqhtoXsVSwrHGFMQ4N5CoxC9GJP7XbVIERVUp241O8fPo+++Z3aQQvyy3Uzil K9w7xyhiIMDS6WjAqWfF39JG5qBGtWCs9dbhRKf5grzb0yrOhFXIBtiPn5eiayhLHbQi zw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 25/46] cpr: only-cpr-capable Date: Tue, 26 Jul 2022 09:10:22 -0700 Message-Id: <1658851843-236870-26-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: dGeuz_FRqFAM53Y8AxSPtX-4jrTsch1z X-Proofpoint-ORIG-GUID: dGeuz_FRqFAM53Y8AxSPtX-4jrTsch1z Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853507882100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add the only-cpr-capable option, which causes qemu to exit with an error if any devices that are not capable of cpr are added. This guarantees that the migrate commanmd will not fail due to a blocker. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/migration/cpr.h | 2 ++ migration/migration.c | 13 +++++++++++++ qemu-options.hx | 8 ++++++++ softmmu/vl.c | 4 ++++ 4 files changed, 27 insertions(+) diff --git a/include/migration/cpr.h b/include/migration/cpr.h index c48be2d..f2dfb1b 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -8,6 +8,8 @@ #ifndef MIGRATION_CPR_H #define MIGRATION_CPR_H =20 +#define CPR_MODES (BIT(MIG_MODE_CPR_REBOOT) | BIT(MIG_MODE_CPR_EXEC)) + extern bool only_cpr_capable; =20 void cpr_init(void); diff --git a/migration/migration.c b/migration/migration.c index 7b46213..e0fc2b8 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2181,6 +2181,11 @@ bool migrate_mode_enabled(MigMode mode) return !!(migrate_enabled_modes & BIT(mode)); } =20 +static bool migrate_modes_enabled(int modes) +{ + return (modes & migrate_enabled_modes) =3D=3D modes; +} + static int migrate_check_enabled(Error **errp) { MigMode mode =3D migrate_mode(); @@ -2262,6 +2267,14 @@ static int check_blockers(Error **reasonp, Error **e= rrp, int modes) return -EACCES; } =20 + if (only_cpr_capable && (modes & CPR_MODES) && + migrate_modes_enabled(modes & CPR_MODES)) { + error_propagate_prepend(errp, *reasonp, + "-only-cpr-capable specified, but: "); + *reasonp =3D NULL; + return -EACCES; + } + return add_blockers(reasonp, errp, modes); } =20 diff --git a/qemu-options.hx b/qemu-options.hx index 7797d3d..3ed9270 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4501,6 +4501,14 @@ SRST migration using any mode except 'normal'. ERST =20 +DEF("only-cpr-capable", 0, QEMU_OPTION_only_cpr_capable, \ + "-only-cpr-capable allow only cpr capable devices\n", QEMU_ARCH_ALL) +SRST +``-only-cpr-capable`` + Only allow cpr capable devices, which guarantees that cpr will not + fail due to a cpr blocker. +ERST + DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \ "-nodefaults don't create default devices\n", QEMU_ARCH_ALL) SRST diff --git a/softmmu/vl.c b/softmmu/vl.c index 5f6cd8c..bed147c 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -77,6 +77,7 @@ #include "hw/block/block.h" #include "hw/i386/x86.h" #include "hw/i386/pc.h" +#include "migration/cpr.h" #include "migration/misc.h" #include "migration/snapshot.h" #include "sysemu/tpm.h" @@ -3366,6 +3367,9 @@ void qemu_init(int argc, char **argv, char **envp) case QEMU_OPTION_only_migratable: only_migratable =3D 1; break; + case QEMU_OPTION_only_cpr_capable: + only_cpr_capable =3D true; + break; case QEMU_OPTION_migrate_mode_enable: migrate_enable_mode(qapi_enum_parse(&MigMode_lookup, optar= g, -1, &error_fatal)); --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854402; cv=none; d=zohomail.com; s=zohoarc; b=RQ3oIfQ8E0yh3769uZOpCVG6K4CipNbjae8DZOluLYhS1vSau+kBBpoaZTpxqf5kxHdTCN+vxxz4SedM+oXJArA59QDdano7bYUMJR9kY90kpMe+5EZz5sqVdXu9hs0d9zjbJEe8aTdNe61+CB6mbzoN/yf9Of9LMnrwoaEe0mw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854402; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=gJGFuTMaWiIcrsU6nRU8Y2CLbN0aTbcqp7/ItlBmngM=; b=KRQHo1Z3Y2eDfw3WjBP6VuYJ0SL8T1OZyYAMiOo+5ilyigljqnADFGp04qSIBQPXqv/o4TZs4Bn5//wcSxKRpUiovspOW4aVYrTGzqdlb/v0l2CR4Nf0G8jKT4RB6ft/Z8rQihmBMqLjAq4hgbg264LScmOPc8kTWPZg7m2N5ro= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854402616320.5908250996222; Tue, 26 Jul 2022 09:53:22 -0700 (PDT) Received: from localhost ([::1]:60222 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNo9-0003P2-98 for importer@patchew.org; Tue, 26 Jul 2022 12:53:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35200) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9z-0003CX-8m for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:51 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:9994) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9w-0006CF-UI for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:50 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3YH031760; Tue, 26 Jul 2022 16:11:24 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1bd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:23 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEq0Yb006400; Tue, 26 Jul 2022 16:11:23 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq25j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:22 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uT1023334; Tue, 26 Jul 2022 16:11:22 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-27; Tue, 26 Jul 2022 16:11:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=gJGFuTMaWiIcrsU6nRU8Y2CLbN0aTbcqp7/ItlBmngM=; b=z7LshblmLYFwMhp0Wv1BO+l/pF8TMtyXbQivFaUuNu05Dj9RzoY+mjDyrEAM83BWEtfB 3ztb87Yd5yg9RSQkr6Whcc7VbIFQx2oWifwcZQZH7r+axoWySWeiNEcbvrYBUcd+hwqF X3bil78z53guWnyHXGY4eB+arP5GB7s1qu5T6I1mDuwivqFVUHO5uLfyqNyU6OGqZkpz YlzUDR7hQxePElDwIl6LZoXmvjU6gkIgv9jkZneSPMhccEHvAxwlBXOfEgen7t0vmlJm pr2DYXFivfNaEREFFTFusi8SoMrY0nZkC+25a5SjkEd+LimslZY/e94S+w5RH5t8kBEq kQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 26/46] cpr: Mismatched GPAs fix Date: Tue, 26 Jul 2022 09:10:23 -0700 Message-Id: <1658851843-236870-27-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: PYrA6gTumkwN1EFC16sdjsEW-qb-qUeH X-Proofpoint-GUID: PYrA6gTumkwN1EFC16sdjsEW-qb-qUeH Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854404788100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" For cpr-exec mode, ramblock_is_ignored is always true, and the address of each migrated memory region must match the address of the statically initialized region on the target. However, for a PCI rom block, the region address is set when the guest writes to a BAR on the source, which does not occur on the target, causing a "Mismatched GPAs" error during cpr-exec migration. To fix, unconditionally set the target's address to the source's address if the region does not have an address yet. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/exec/memory.h | 12 ++++++++++++ migration/ram.c | 17 ++++++++++------- softmmu/memory.c | 10 ++++++++-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/include/exec/memory.h b/include/exec/memory.h index 128bf3e..9b3bad5 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -738,6 +738,7 @@ struct MemoryRegion { bool flush_coalesced_mmio; uint8_t dirty_log_mask; bool is_iommu; + bool has_addr; RAMBlock *ram_block; Object *owner; =20 @@ -2268,6 +2269,17 @@ void memory_region_set_enabled(MemoryRegion *mr, boo= l enabled); void memory_region_set_address(MemoryRegion *mr, hwaddr addr); =20 /* + * memory_region_set_address_only: set the address of a region. + * + * Same as memory_region_set_address, but without causing transaction side + * effects. + * + * @mr: the region to be updated + * @addr: new address, relative to container region + */ +void memory_region_set_address_only(MemoryRegion *mr, hwaddr addr); + +/* * memory_region_set_size: dynamically update the size of a region. * * Dynamically updates the size of a region. diff --git a/migration/ram.c b/migration/ram.c index 4c868d2..6005c53 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -4314,13 +4314,16 @@ static int ram_load_precopy(QEMUFile *f) } if (migrate_ignore_shared()) { hwaddr addr =3D qemu_get_be64(f); - if (ramblock_is_ignored(block) && - block->mr->addr !=3D addr) { - error_report("Mismatched GPAs for block %s " - "%" PRId64 "!=3D %" PRId64, - id, (uint64_t)addr, - (uint64_t)block->mr->addr); - ret =3D -EINVAL; + if (ramblock_is_ignored(block)) { + if (!block->mr->has_addr) { + memory_region_set_address_only(block->mr, = addr); + } else if (block->mr->addr !=3D addr) { + error_report("Mismatched GPAs for block %s= " + "%" PRId64 "!=3D %" PRId64, + id, (uint64_t)addr, + (uint64_t)block->mr->addr); + ret =3D -EINVAL; + } } } ram_control_load_hook(f, RAM_CONTROL_BLOCK_REG, diff --git a/softmmu/memory.c b/softmmu/memory.c index 6aa3a2f..8825608 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2552,7 +2552,7 @@ static void memory_region_add_subregion_common(Memory= Region *mr, for (alias =3D subregion->alias; alias; alias =3D alias->alias) { alias->mapped_via_alias++; } - subregion->addr =3D offset; + memory_region_set_address_only(subregion, offset); memory_region_update_container_subregions(subregion); } =20 @@ -2632,10 +2632,16 @@ static void memory_region_readd_subregion(MemoryReg= ion *mr) } } =20 +void memory_region_set_address_only(MemoryRegion *mr, hwaddr addr) +{ + mr->addr =3D addr; + mr->has_addr =3D true; +} + void memory_region_set_address(MemoryRegion *mr, hwaddr addr) { if (addr !=3D mr->addr) { - mr->addr =3D addr; + memory_region_set_address_only(mr, addr); memory_region_readd_subregion(mr); } } --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853014; cv=none; d=zohomail.com; s=zohoarc; b=hqEXW/Yy+8z+xsbmIEw7kiUD6dwOA2dm4g84qqY9dLOxlwkbVoO+fz5U/jzi053piFZLII6hcwy/HPcWbCDiGi9+j5mBeBGTW3Xd8ApwTjz/Wfv98M5cIgRtNd8ITiV/X4c8oxI8dX2Yo7QKvpItQV+4KIGUoUIMpne6GHWiQZ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853014; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=ZDACp+BhoEIdrXn1AEBV3fe6/8jmjJCXG/9a7LZRvpI=; b=OT7vBdkaucuM5tD2+x2ynNDWhy6L5J04d4VXq6Ls78kxRE01vy1gBva8iV4foJQRBvCNfGw6GVcO+EEXOMY1YcJYEjI6GkTyVB9TKS95/4lnKwAh4c70jO5iSc1kXQPFacm1dyQa1JHhbKTIGEcU0y16oOkhqQ3JOM5ynfiDCT8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853014977582.0454586211413; Tue, 26 Jul 2022 09:30:14 -0700 (PDT) Received: from localhost ([::1]:52434 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNRl-000341-JD for importer@patchew.org; Tue, 26 Jul 2022 12:30:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35074) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9u-00031c-N1 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:46 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:63776) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9s-0006BT-Oe for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:46 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn0WX031705; Tue, 26 Jul 2022 16:11:25 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1bg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:25 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFl76E006339; Tue, 26 Jul 2022 16:11:24 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq27c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:24 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uT3023334; Tue, 26 Jul 2022 16:11:23 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-28; Tue, 26 Jul 2022 16:11:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=ZDACp+BhoEIdrXn1AEBV3fe6/8jmjJCXG/9a7LZRvpI=; b=K78tzen7tg7NBQ7F5shz7PpcRWxLDLrtevIYILe0B9zogBWVlGfkHiPXx3Ah0zkmUtdt Bd3AAHxYyRUmMiIp4rXvtmzYUjm4mDb3j9Z/9xtbnU3Rk7EhSyLTcXfsv0zB/l+1fXJg oHhy7W0BWmR7z3Us4MWiyLmsLEq+Pj52dAvuxm6/2DL6HDzmVDT478nHIRN5O+wecDqY oFum9u6r+Z/gZ19CnTR3f/bV+UowWXMuv+fGILh84W8vY+4aLNr7AxqM6JQho8J6E+qf TkhNGtGae7PJivVCWdfCh0+OnE7AwtJ0pPCXJUYuRif9mjC8qw1CPtTJNDfbM0LkhAAe Fw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 27/46] hostmem-memfd: cpr support Date: Tue, 26 Jul 2022 09:10:24 -0700 Message-Id: <1658851843-236870-28-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: nKuVBDL1Z87hw0tbCz4aLP720Tm4fNXb X-Proofpoint-GUID: nKuVBDL1Z87hw0tbCz4aLP720Tm4fNXb Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853017165100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Preserve memory-backend-memfd memory objects during cpr. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- backends/hostmem-memfd.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c index 3fc85c3..d421a4f 100644 --- a/backends/hostmem-memfd.c +++ b/backends/hostmem-memfd.c @@ -14,6 +14,7 @@ #include "sysemu/hostmem.h" #include "qom/object_interfaces.h" #include "qemu/memfd.h" +#include "migration/cpr-state.h" #include "qemu/module.h" #include "qapi/error.h" #include "qom/object.h" @@ -36,28 +37,29 @@ memfd_backend_memory_alloc(HostMemoryBackend *backend, = Error **errp) { HostMemoryBackendMemfd *m =3D MEMORY_BACKEND_MEMFD(backend); uint32_t ram_flags; - char *name; - int fd; + g_autofree char *name =3D host_memory_backend_get_name(backend); + int fd =3D cpr_find_fd(name, 0); =20 if (!backend->size) { error_setg(errp, "can't create backend with size 0"); return; } =20 - fd =3D qemu_memfd_create(TYPE_MEMORY_BACKEND_MEMFD, backend->size, - m->hugetlb, m->hugetlbsize, m->seal ? - F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEAL : 0, - errp); - if (fd =3D=3D -1) { - return; + if (fd < 0) { + fd =3D qemu_memfd_create(TYPE_MEMORY_BACKEND_MEMFD, backend->size, + m->hugetlb, m->hugetlbsize, m->seal ? + F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEAL := 0, + errp); + if (fd =3D=3D -1) { + return; + } + cpr_save_fd(name, 0, fd); } =20 - name =3D host_memory_backend_get_name(backend); ram_flags =3D backend->share ? RAM_SHARED : 0; ram_flags |=3D backend->reserve ? 0 : RAM_NORESERVE; memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend), name, backend->size, ram_flags, fd, 0, errp); - g_free(name); } =20 static bool --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853766; cv=none; d=zohomail.com; s=zohoarc; b=CYhrSfeuHHqdRYWiXgLh8wTuXXaKd1LHmPF1iQGyMMtzNJXIE87RaORwHZpoItW7ZpsPv3g3KdPOAeoumgW+Ke+6wz1iB+MNkWIFFMl4m/oib7bJYMu6d1juAbThnHAU09Lo1e4n0u9zVKRS6lM3NEAQCysD7In66gp3t9+LSaQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853766; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=KqUPut4P3GrI4rQG1Qzle999jooTQlmLWG7MmXouCMI=; b=e3MuXl/rQSTZ1bfd7Wr5/ziWwVsZ6nevSsVuabPJdgSHRzxbxG2HJ3dEkbMaeq5i+7CXJs10CnnOCguR7vA0A3WWgh2q2J8kE0aaSebeaHJQgGp0MWHQFXYzgGcCTOMJcm3Y0WmDd7XTbqIutEPv3jPFAPwPZ1JxwZ6avPMDzhY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853766026654.7841821676262; Tue, 26 Jul 2022 09:42:46 -0700 (PDT) Received: from localhost ([::1]:43422 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNds-00082n-0K for importer@patchew.org; Tue, 26 Jul 2022 12:42:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35154) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9x-00037P-Jk for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:49 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:6800) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9v-0006Bn-M8 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:49 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3Y7016266; Tue, 26 Jul 2022 16:11:27 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0w0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:26 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEvo84006379; Tue, 26 Jul 2022 16:11:26 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq28j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:25 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uT5023334; Tue, 26 Jul 2022 16:11:25 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-29; Tue, 26 Jul 2022 16:11:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=KqUPut4P3GrI4rQG1Qzle999jooTQlmLWG7MmXouCMI=; b=k4ogjDZ6XegMPNnXbbd3/vDn3he94SFrvbdFbQS/+40wbb1/n2IKLHZk/7bBhL1H3bNL 2Fh+1CnLXh0eK3pB2ZPhluQQdYWp4fzyLzxfLjLUmrfC/Vujc5ifmA+J/ZlwLzBdjgt3 syNnswBNjJBj//q0aB/JqCsd7+PAGr7+aaBgid+eNglLakwhW2BkpT/TvwfE4W7KYR/i uWnU9OkaiUVyOGxkF41m2jzlgJC0RW891tVrd97jgemaRv2MQb7grmENzu2jG/O1dij/ sGD/KiKevh9NiR8Bwh/jvLqre5OIYW7L5VRrnmehNYRJT9tiXb8WCKpWAjDod2zq9E6O Ug== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 28/46] hostmem-epc: cpr support Date: Tue, 26 Jul 2022 09:10:25 -0700 Message-Id: <1658851843-236870-29-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: L89OKDV4GNA-4VdTSwCQ2_d3Tc25wx0C X-Proofpoint-ORIG-GUID: L89OKDV4GNA-4VdTSwCQ2_d3Tc25wx0C Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853766653100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Preserve memory-backend-epc memory objects during cpr. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- backends/hostmem-epc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/backends/hostmem-epc.c b/backends/hostmem-epc.c index 037292d..c6b1fe4 100644 --- a/backends/hostmem-epc.c +++ b/backends/hostmem-epc.c @@ -16,32 +16,34 @@ #include "qapi/error.h" #include "sysemu/hostmem.h" #include "hw/i386/hostmem-epc.h" +#include "migration/cpr-state.h" =20 static void sgx_epc_backend_memory_alloc(HostMemoryBackend *backend, Error **errp) { uint32_t ram_flags; - char *name; - int fd; + g_autofree char *name =3D object_get_canonical_path(OBJECT(backend)); + int fd =3D cpr_find_fd(name, 0); =20 if (!backend->size) { error_setg(errp, "can't create backend with size 0"); return; } =20 - fd =3D qemu_open_old("/dev/sgx_vepc", O_RDWR); if (fd < 0) { - error_setg_errno(errp, errno, - "failed to open /dev/sgx_vepc to alloc SGX EPC"); - return; + fd =3D qemu_open_old("/dev/sgx_vepc", O_RDWR); + if (fd < 0) { + error_setg_errno(errp, errno, + "failed to open /dev/sgx_vepc to alloc SGX EPC= "); + return; + } + cpr_save_fd(name, 0, fd); } =20 - name =3D object_get_canonical_path(OBJECT(backend)); ram_flags =3D (backend->share ? RAM_SHARED : 0) | RAM_PROTECTED; memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend), name, backend->size, ram_flags, fd, 0, errp); - g_free(name); } =20 static void sgx_epc_backend_instance_init(Object *obj) --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853425; cv=none; d=zohomail.com; s=zohoarc; b=mB3Bs34pO5pSvVGEKm3QsJfguraPALuqeSnUePkBGj6yxWt+E3XBHjJk7itmr9zpIh9HD4eg1syEou9j161qFpxKRveuAwiIDlQSqWZEAPHMoysjmjiQXLBScM4jQsJQ0Pcl5EKss4bEhTYR5tYGUFlrsTATl+TnXuUD8974e64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853425; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=1+/ytfkDpSKmDm01CDM7uSiGT1XR/vhCuNqgiw3jFew=; b=SOILe3fXOVMtc7efPilJ0lzdPyZnjuBVpGZRDJaNxQnt9ANdAfPFu+Y6rmO28nASJnj61yCS3iv3g7OxTwLrCMgM1+Qwry9oCQZ+B5xkKLceaCEViWt1MqAG+7eGiae6An80G7Fl34YM58zGCx7gfHaL5QaoCVxejzDMvVIhuc0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853425081200.73679074971062; Tue, 26 Jul 2022 09:37:05 -0700 (PDT) Received: from localhost ([::1]:32886 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNYN-0000oG-Iy for importer@patchew.org; Tue, 26 Jul 2022 12:37:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35156) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9x-00038A-QX for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:49 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:6928) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9v-0006Bp-Up for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:49 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPJH006232; Tue, 26 Jul 2022 16:11:28 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu38-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:28 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEvo86006379; Tue, 26 Jul 2022 16:11:27 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2a3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:27 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uT7023334; Tue, 26 Jul 2022 16:11:26 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-30; Tue, 26 Jul 2022 16:11:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=1+/ytfkDpSKmDm01CDM7uSiGT1XR/vhCuNqgiw3jFew=; b=g7YkFlNiyLUuM9tPjNk+ZFtIcJyU4WWaUZHSIBQw2XyIN56PwsDj5dAfgyggx5mi+0O1 oGnmeT0lTgPAVPHIZR7+XAntHRZbvqJ7uAIGZk+3KGu7fBIp22OipcZd+xB9L900espW Szg3Sa89lXGXfqzoDgI7TA7NItcT3bQEEIporyaIAX9Tqwz9ZPxCioYs4twtsZAcATsY SdAGB3J96YaUuvc4ChDbI8QNfRw3JX1W7sQKUXDwx44ZRfDY9SxnKGR8L01RxwbNo8uH Vd091NJ7efho5F+IXfAAZQsmnId1eHdmYgZYtZL2DLjd1uhFa2T/tEW/l/C2U9+XX59u bQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 29/46] pci: export msix_is_pending Date: Tue, 26 Jul 2022 09:10:26 -0700 Message-Id: <1658851843-236870-30-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: THORIT1ovjZdG4mqgtSeUijzCqxKR0pb X-Proofpoint-ORIG-GUID: THORIT1ovjZdG4mqgtSeUijzCqxKR0pb Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853425694100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Export msix_is_pending for use by cpr. No functional change. Signed-off-by: Steve Sistare Acked-by: Michael S. Tsirkin Tested-by: Michael Galaxy --- hw/pci/msix.c | 2 +- include/hw/pci/msix.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/pci/msix.c b/hw/pci/msix.c index 1e381a9..f642a43 100644 --- a/hw/pci/msix.c +++ b/hw/pci/msix.c @@ -69,7 +69,7 @@ static uint8_t *msix_pending_byte(PCIDevice *dev, int vec= tor) return dev->msix_pba + vector / 8; } =20 -static int msix_is_pending(PCIDevice *dev, int vector) +int msix_is_pending(PCIDevice *dev, unsigned int vector) { return *msix_pending_byte(dev, vector) & msix_pending_mask(vector); } diff --git a/include/hw/pci/msix.h b/include/hw/pci/msix.h index 4f1cda0..f2f2d85 100644 --- a/include/hw/pci/msix.h +++ b/include/hw/pci/msix.h @@ -32,6 +32,7 @@ int msix_present(PCIDevice *dev); bool msix_is_masked(PCIDevice *dev, unsigned vector); void msix_set_pending(PCIDevice *dev, unsigned vector); void msix_clr_pending(PCIDevice *dev, int vector); +int msix_is_pending(PCIDevice *dev, unsigned vector); =20 int msix_vector_use(PCIDevice *dev, unsigned vector); void msix_vector_unuse(PCIDevice *dev, unsigned vector); --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852816; cv=none; d=zohomail.com; s=zohoarc; b=QVoocyD995zTpnXZ5gRNnfj80UbEXwc4GNB/VA75BrZvXVkKq4vBi3MhLFHqKBqSmvha9keaRFkkb7XeThQVT1teDq0aADhCsnX4hquMW+YRrx2llaQkTDuOd+eiswOKcZDOtBXwlO7qp61qUjuGOlSOuM+/uSORId16Au62GQo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852816; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=PSJWekmjFYoSMJvI8bg2b39oWZpHq6LD9ykDjH4iW9k=; b=kqfumTW7RspGpCinISfqNTiZBJSEXTg1PF82cKPWc7WgZyNICKxqoQFtpl365GcY/BRuKT2m5YpTClevh6/PoSP/WUrKno7Lb78lfGgcnfee11RQKiY056JWt02/MGBMOy2AklDjYtiKBJd6wB16fwwkrVycrWk9ZpmlWeI1yrk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852816433582.7738248421417; Tue, 26 Jul 2022 09:26:56 -0700 (PDT) Received: from localhost ([::1]:46464 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNOZ-0007Js-BI for importer@patchew.org; Tue, 26 Jul 2022 12:26:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34956) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9p-0002ya-QT for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:42 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:35254) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9n-0006C9-7w for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:41 -0400 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnE4N024578; Tue, 26 Jul 2022 16:11:30 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9hsq2na-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:30 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFH3W1006242; Tue, 26 Jul 2022 16:11:29 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2bj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:29 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uT9023334; Tue, 26 Jul 2022 16:11:28 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-31; Tue, 26 Jul 2022 16:11:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=PSJWekmjFYoSMJvI8bg2b39oWZpHq6LD9ykDjH4iW9k=; b=Ta96dOcvyzrWoV+9ISnKa6pksMtzqQUeLov+Kxd1KZ1uwfdXq5sgNtfshfraRbXx10At tRZUaH/EFML07tfUUMDlIzddXaFR0z+3MjOrIUtoKVRfo0Hak71j75xi9sruhhjZwm2v E636CmNkZxtyqlSuOdnbZ0BQBudTvM8WJ0gqlZie6M+EelW0PcQIs1rFF51ppvtTpwHc Y00fTnzwl0oqvogEpmKrWG2aZteX/hoMfoJABeV/DIye2Dj22YE0jBKMZIJVxOZmaFgf Vusg5o2XruUqmjBg3N/RlOyL29qo2yWTgdv0+d9275Hs8/8fyx8d+Y2PalOLSlVY37WD mQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 30/46] vfio-pci: refactor for cpr Date: Tue, 26 Jul 2022 09:10:27 -0700 Message-Id: <1658851843-236870-31-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: xd0fFihzX6nRKpkWnUlkATcKT-M4XKSe X-Proofpoint-GUID: xd0fFihzX6nRKpkWnUlkATcKT-M4XKSe Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852817396100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Refactor vector use into a helper vfio_vector_init. Add vfio_notifier_init and vfio_notifier_cleanup for named notifiers, and pass additional arguments to vfio_remove_kvm_msi_virq. All for use by cpr in a subsequent patch. No functional change. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/vfio/pci.c | 99 +++++++++++++++++++++++++++++++++++++++----------------= ---- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 939dcc3..0143c9a 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -52,6 +52,27 @@ static void vfio_disable_interrupts(VFIOPCIDevice *vdev); static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); static void vfio_msi_disable_common(VFIOPCIDevice *vdev); =20 +/* Create new or reuse existing eventfd */ +static int vfio_notifier_init(VFIOPCIDevice *vdev, EventNotifier *e, + const char *name, int nr) +{ + int fd =3D -1; /* placeholder until a subsequent patch */ + int ret =3D 0; + + if (fd >=3D 0) { + event_notifier_init_fd(e, fd); + } else { + ret =3D event_notifier_init(e, 0); + } + return ret; +} + +static void vfio_notifier_cleanup(VFIOPCIDevice *vdev, EventNotifier *e, + const char *name, int nr) +{ + event_notifier_cleanup(e); +} + /* * Disabling BAR mmaping can be slow, but toggling it around INTx can * also be a huge overhead. We try to get the best of both worlds by @@ -132,8 +153,8 @@ static void vfio_intx_enable_kvm(VFIOPCIDevice *vdev, E= rror **errp) pci_irq_deassert(&vdev->pdev); =20 /* Get an eventfd for resample/unmask */ - if (event_notifier_init(&vdev->intx.unmask, 0)) { - error_setg(errp, "event_notifier_init failed eoi"); + if (vfio_notifier_init(vdev, &vdev->intx.unmask, "intx-unmask", 0)) { + error_setg(errp, "vfio_notifier_init intx-unmask failed"); goto fail; } =20 @@ -165,7 +186,7 @@ fail_vfio: kvm_irqchip_remove_irqfd_notifier_gsi(kvm_state, &vdev->intx.interrupt, vdev->intx.route.irq); fail_irqfd: - event_notifier_cleanup(&vdev->intx.unmask); + vfio_notifier_cleanup(vdev, &vdev->intx.unmask, "intx-unmask", 0); fail: qemu_set_fd_handler(irq_fd, vfio_intx_interrupt, NULL, vdev); vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); @@ -194,7 +215,7 @@ static void vfio_intx_disable_kvm(VFIOPCIDevice *vdev) } =20 /* We only need to close the eventfd for VFIO to cleanup the kernel si= de */ - event_notifier_cleanup(&vdev->intx.unmask); + vfio_notifier_cleanup(vdev, &vdev->intx.unmask, "intx-unmask", 0); =20 /* QEMU starts listening for interrupt events. */ qemu_set_fd_handler(event_notifier_get_fd(&vdev->intx.interrupt), @@ -285,9 +306,10 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error= **errp) } #endif =20 - ret =3D event_notifier_init(&vdev->intx.interrupt, 0); + ret =3D vfio_notifier_init(vdev, &vdev->intx.interrupt, "intx-interrup= t", 0); if (ret) { - error_setg_errno(errp, -ret, "event_notifier_init failed"); + error_setg_errno(errp, -ret, + "vfio_notifier_init intx-interrupt failed"); return ret; } fd =3D event_notifier_get_fd(&vdev->intx.interrupt); @@ -296,7 +318,7 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error = **errp) if (vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX, 0, VFIO_IRQ_SET_ACTION_TRIGGER, fd, errp)) { qemu_set_fd_handler(fd, NULL, NULL, vdev); - event_notifier_cleanup(&vdev->intx.interrupt); + vfio_notifier_cleanup(vdev, &vdev->intx.interrupt, "intx-interrupt= ", 0); return -errno; } =20 @@ -324,7 +346,7 @@ static void vfio_intx_disable(VFIOPCIDevice *vdev) =20 fd =3D event_notifier_get_fd(&vdev->intx.interrupt); qemu_set_fd_handler(fd, NULL, NULL, vdev); - event_notifier_cleanup(&vdev->intx.interrupt); + vfio_notifier_cleanup(vdev, &vdev->intx.interrupt, "intx-interrupt", 0= ); =20 vdev->interrupt =3D VFIO_INT_NONE; =20 @@ -424,13 +446,15 @@ static void vfio_add_kvm_msi_virq(VFIOPCIDevice *vdev= , VFIOMSIVector *vector, vector_n, &vdev->pdev); } =20 -static void vfio_connect_kvm_msi_virq(VFIOMSIVector *vector) +static void vfio_connect_kvm_msi_virq(VFIOMSIVector *vector, int nr) { + const char *name =3D "kvm_interrupt"; + if (vector->virq < 0) { return; } =20 - if (event_notifier_init(&vector->kvm_interrupt, 0)) { + if (vfio_notifier_init(vector->vdev, &vector->kvm_interrupt, name, nr)= ) { goto fail_notifier; } =20 @@ -442,19 +466,20 @@ static void vfio_connect_kvm_msi_virq(VFIOMSIVector *= vector) return; =20 fail_kvm: - event_notifier_cleanup(&vector->kvm_interrupt); + vfio_notifier_cleanup(vector->vdev, &vector->kvm_interrupt, name, nr); fail_notifier: kvm_irqchip_release_virq(kvm_state, vector->virq); vector->virq =3D -1; } =20 -static void vfio_remove_kvm_msi_virq(VFIOMSIVector *vector) +static void vfio_remove_kvm_msi_virq(VFIOPCIDevice *vdev, VFIOMSIVector *v= ector, + int nr) { kvm_irqchip_remove_irqfd_notifier_gsi(kvm_state, &vector->kvm_interrup= t, vector->virq); kvm_irqchip_release_virq(kvm_state, vector->virq); vector->virq =3D -1; - event_notifier_cleanup(&vector->kvm_interrupt); + vfio_notifier_cleanup(vdev, &vector->kvm_interrupt, "kvm_interrupt", n= r); } =20 static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg, @@ -464,6 +489,20 @@ static void vfio_update_kvm_msi_virq(VFIOMSIVector *ve= ctor, MSIMessage msg, kvm_irqchip_commit_routes(kvm_state); } =20 +static void vfio_vector_init(VFIOPCIDevice *vdev, int nr) +{ + VFIOMSIVector *vector =3D &vdev->msi_vectors[nr]; + PCIDevice *pdev =3D &vdev->pdev; + + vector->vdev =3D vdev; + vector->virq =3D -1; + if (vfio_notifier_init(vdev, &vector->interrupt, "interrupt", nr)) { + error_report("vfio: vfio_notifier_init interrupt failed"); + } + vector->use =3D true; + msix_vector_use(pdev, nr); +} + static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, MSIMessage *msg, IOHandler *handler) { @@ -476,13 +515,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, un= signed int nr, vector =3D &vdev->msi_vectors[nr]; =20 if (!vector->use) { - vector->vdev =3D vdev; - vector->virq =3D -1; - if (event_notifier_init(&vector->interrupt, 0)) { - error_report("vfio: Error: event_notifier_init failed"); - } - vector->use =3D true; - msix_vector_use(pdev, nr); + vfio_vector_init(vdev, nr); } =20 qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), @@ -494,7 +527,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, uns= igned int nr, */ if (vector->virq >=3D 0) { if (!msg) { - vfio_remove_kvm_msi_virq(vector); + vfio_remove_kvm_msi_virq(vdev, vector, nr); } else { vfio_update_kvm_msi_virq(vector, *msg, pdev); } @@ -506,7 +539,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, uns= igned int nr, vfio_route_change =3D kvm_irqchip_begin_route_changes(kvm_= state); vfio_add_kvm_msi_virq(vdev, vector, nr, true); kvm_irqchip_commit_route_changes(&vfio_route_change); - vfio_connect_kvm_msi_virq(vector); + vfio_connect_kvm_msi_virq(vector, nr); } } } @@ -602,7 +635,7 @@ static void vfio_commit_kvm_msi_virq_batch(VFIOPCIDevic= e *vdev) kvm_irqchip_commit_route_changes(&vfio_route_change); =20 for (i =3D 0; i < vdev->nr_vectors; i++) { - vfio_connect_kvm_msi_virq(&vdev->msi_vectors[i]); + vfio_connect_kvm_msi_virq(&vdev->msi_vectors[i], i); } } =20 @@ -681,8 +714,8 @@ retry: vector->virq =3D -1; vector->use =3D true; =20 - if (event_notifier_init(&vector->interrupt, 0)) { - error_report("vfio: Error: event_notifier_init failed"); + if (vfio_notifier_init(vdev, &vector->interrupt, "interrupt", i)) { + error_report("vfio: Error: vfio_notifier_init failed"); } =20 qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), @@ -737,11 +770,11 @@ static void vfio_msi_disable_common(VFIOPCIDevice *vd= ev) VFIOMSIVector *vector =3D &vdev->msi_vectors[i]; if (vdev->msi_vectors[i].use) { if (vector->virq >=3D 0) { - vfio_remove_kvm_msi_virq(vector); + vfio_remove_kvm_msi_virq(vdev, vector, i); } qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), NULL, NULL, NULL); - event_notifier_cleanup(&vector->interrupt); + vfio_notifier_cleanup(vdev, &vector->interrupt, "interrupt", i= ); } } =20 @@ -2740,7 +2773,7 @@ static void vfio_register_err_notifier(VFIOPCIDevice = *vdev) return; } =20 - if (event_notifier_init(&vdev->err_notifier, 0)) { + if (vfio_notifier_init(vdev, &vdev->err_notifier, "err_notifier", 0)) { error_report("vfio: Unable to init event notifier for error detect= ion"); vdev->pci_aer =3D false; return; @@ -2753,7 +2786,7 @@ static void vfio_register_err_notifier(VFIOPCIDevice = *vdev) VFIO_IRQ_SET_ACTION_TRIGGER, fd, &err)) { error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); qemu_set_fd_handler(fd, NULL, NULL, vdev); - event_notifier_cleanup(&vdev->err_notifier); + vfio_notifier_cleanup(vdev, &vdev->err_notifier, "err_notifier", 0= ); vdev->pci_aer =3D false; } } @@ -2772,7 +2805,7 @@ static void vfio_unregister_err_notifier(VFIOPCIDevic= e *vdev) } qemu_set_fd_handler(event_notifier_get_fd(&vdev->err_notifier), NULL, NULL, vdev); - event_notifier_cleanup(&vdev->err_notifier); + vfio_notifier_cleanup(vdev, &vdev->err_notifier, "err_notifier", 0); } =20 static void vfio_req_notifier_handler(void *opaque) @@ -2806,7 +2839,7 @@ static void vfio_register_req_notifier(VFIOPCIDevice = *vdev) return; } =20 - if (event_notifier_init(&vdev->req_notifier, 0)) { + if (vfio_notifier_init(vdev, &vdev->req_notifier, "req_notifier", 0)) { error_report("vfio: Unable to init event notifier for device reque= st"); return; } @@ -2818,7 +2851,7 @@ static void vfio_register_req_notifier(VFIOPCIDevice = *vdev) VFIO_IRQ_SET_ACTION_TRIGGER, fd, &err)) { error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); qemu_set_fd_handler(fd, NULL, NULL, vdev); - event_notifier_cleanup(&vdev->req_notifier); + vfio_notifier_cleanup(vdev, &vdev->req_notifier, "req_notifier", 0= ); } else { vdev->req_enabled =3D true; } @@ -2838,7 +2871,7 @@ static void vfio_unregister_req_notifier(VFIOPCIDevic= e *vdev) } qemu_set_fd_handler(event_notifier_get_fd(&vdev->req_notifier), NULL, NULL, vdev); - event_notifier_cleanup(&vdev->req_notifier); + vfio_notifier_cleanup(vdev, &vdev->req_notifier, "req_notifier", 0); =20 vdev->req_enabled =3D false; } --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658855504; cv=none; d=zohomail.com; s=zohoarc; b=kLVneUHLM2J1tKnxTbflvJXt9VNhbOvafHp8grbjrC/N38Zeknq7QCet/AI/0U0OBW0FkLZAOexDZxBNm1MynEsFBtZkDEm9IzfEjtlsfBGsRbw+qf+KWLbcRQjosInaTJLRZ/ZUekEjfUAiKvKglGlwJk5yscFd88+W4tvByVs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658855504; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=YkStBWkDvFaBlcHw6tgsBE0nchZy1NMuBEgCqF0y1Zk=; b=hq+/l/1QtcgiO9hl3eKwJXZzAQCcPYUIV9ODYADdDZZWQOfSpto562ND46dht89RmibohzYLJatdz22VOqo/dJXECXaBJ3u0cQ8rM1pWagblqbqigk9fpuNmH0R8ShNX8LoR9lQGuRHze8Wip2oW+AdiPh5CZe519BUdA3frSME= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658855504632374.5122973287439; Tue, 26 Jul 2022 10:11:44 -0700 (PDT) Received: from localhost ([::1]:38300 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGO5v-0004A2-EG for importer@patchew.org; Tue, 26 Jul 2022 13:11:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35614) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAt-0004Ra-Tq for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:47 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:2906) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAq-0006ML-IQ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:47 -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 26QFniTD026859; Tue, 26 Jul 2022 16:11:31 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9anxn0y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:31 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEYQ17006294; Tue, 26 Jul 2022 16:11:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2cq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:30 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTB023334; Tue, 26 Jul 2022 16:11:29 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-32; Tue, 26 Jul 2022 16:11:29 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=YkStBWkDvFaBlcHw6tgsBE0nchZy1NMuBEgCqF0y1Zk=; b=sKRn1eLoMSvUvtaZGTBqML/Me2Fwp85NRbpY2pUpdlhoihHDUnJ6pxTZlphHg3O+26ek 9ER+AT8uJxqt93VGrXZhKj5wg9iqWLI53SOJpZyRGmb6wWtqCPNs1P84TYY2HcAVsmsL 01ISGyrH806OXHBe0J4+S7EFrZEpnU6v8fAyBsMqoTRiHHp6QTINi87NMSEe9h2bu+TL c34pYcFKMYxJpfgIZ46tQCkI/KnFOzxDBt8i4uRSIrkafiS0BZDayjzav1CZTJ00qiKg B4w+Wjy5Yzo+6jx4p98RZRwvlJuRJJDGnenoad6yITv47xGzD8GUCa4/oPQR5+PSfPBy Mw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 31/46] vfio-pci: cpr part 1 (fd and dma) Date: Tue, 26 Jul 2022 09:10:28 -0700 Message-Id: <1658851843-236870-32-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: 9j204NwVMeydaCcG7BAizOA7CYRPmc1- X-Proofpoint-GUID: 9j204NwVMeydaCcG7BAizOA7CYRPmc1- Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658855506401100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Enable vfio-pci devices to be saved and restored across a cpr-exec of qemu. At vfio creation time, save the value of vfio container, group, and device descriptors in cpr state. In the container pre_save handler, suspend the use of virtual addresses in DMA mappings with VFIO_DMA_UNMAP_FLAG_VADDR, because guest ram will be remapped at a different VA after exec. DMA to already-mapped pages continues. Save the msi message area as part of vfio-pci vmstate, save the interrupt and notifier eventfd's in cpr state, and clear the close-on-exec flag for the vfio descriptors. The flag is not cleared earlier because the descriptors should not persist across miscellaneous fork and exec calls that may be performed during normal operation. On qemu restart, vfio_realize() finds the saved descriptors, uses the descriptors, and notes that the device is being reused. Device and iommu state is already configured, so operations in vfio_realize that would modify the configuration are skipped for a reused device, including vfio ioctl's and writes to PCI configuration space. Vfio PCI device reset is also suppressed. The result is that vfio_realize constructs qemu data structures that reflect the current state of the device. However, the reconstruction is not complete until migrate_incoming is called. migrate_incoming loads the msi data, the vfio post_load handler finds eventfds in cpr state, rebuilds vector data structures, and attaches the interrupts to the new KVM instance. The container post_load handler then invokes the main vfio listener callback, which walks the flattened ranges of the vfio address space and calls VFIO_DMA_MAP_FLAG_VADDR to inform the kernel of the new VA's. Lastly, migration resumes the VM. This functionality is delivered by 3 patches for clarity. Part 1 handles device file descriptors and DMA. Part 2 adds eventfd and MSI/MSI-X vector support. Part 3 adds INTX support. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- MAINTAINERS | 1 + hw/pci/pci.c | 12 ++++ hw/vfio/common.c | 152 +++++++++++++++++++++++++++++++++++---= ---- hw/vfio/cpr.c | 120 +++++++++++++++++++++++++++++++++ hw/vfio/meson.build | 1 + hw/vfio/pci.c | 43 ++++++++++++ hw/vfio/trace-events | 1 + include/hw/vfio/vfio-common.h | 11 +++ include/migration/vmstate.h | 2 + 9 files changed, 319 insertions(+), 24 deletions(-) create mode 100644 hw/vfio/cpr.c diff --git a/MAINTAINERS b/MAINTAINERS index 42f6f4a..3af099a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3170,6 +3170,7 @@ F: migration/cpr-state.c F: stubs/cpr-state.c F: include/migration/cpr.h F: migration/cpr.c +F: hw/vfio/cpr.c =20 Record/replay M: Pavel Dovgalyuk diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 2f450f6..d7f945f 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -32,6 +32,7 @@ #include "hw/pci/pci_host.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" +#include "migration/misc.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" #include "monitor/monitor.h" @@ -350,6 +351,17 @@ static void pci_reset_regions(PCIDevice *dev) =20 static void pci_do_device_reset(PCIDevice *dev) { + /* + * A PCI device that is resuming for cpr is already configured, so do + * not reset it here when we are called from qemu_system_reset prior to + * cpr load, else interrupts may be lost for vfio-pci devices. It is + * safe to skip this reset for all PCI devices, because cpr load will = set + * all fields that would have been set here. + */ + if (migrate_mode() =3D=3D MIG_MODE_CPR_EXEC) { + return; + } + pci_device_deassert_intx(dev); assert(dev->irq_state =3D=3D 0); =20 diff --git a/hw/vfio/common.c b/hw/vfio/common.c index ace9562..b7b35d4 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -31,6 +31,7 @@ #include "exec/memory.h" #include "exec/ram_addr.h" #include "hw/hw.h" +#include "migration/cpr-state.h" #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/range.h" @@ -460,6 +461,8 @@ static int vfio_dma_unmap(VFIOContainer *container, .size =3D size, }; =20 + assert(!container->reused); + if (iotlb && container->dirty_pages_supported && vfio_devices_all_running_and_saving(container)) { return vfio_dma_unmap_bitmap(container, iova, size, iotlb); @@ -496,12 +499,24 @@ static int vfio_dma_map(VFIOContainer *container, hwa= ddr iova, { struct vfio_iommu_type1_dma_map map =3D { .argsz =3D sizeof(map), - .flags =3D VFIO_DMA_MAP_FLAG_READ, .vaddr =3D (__u64)(uintptr_t)vaddr, .iova =3D iova, .size =3D size, }; =20 + /* + * Set the new vaddr for any mappings registered during cpr load. + * Reused is cleared thereafter. + */ + if (container->reused) { + map.flags =3D VFIO_DMA_MAP_FLAG_VADDR; + if (ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map)) { + goto fail; + } + return 0; + } + + map.flags =3D VFIO_DMA_MAP_FLAG_READ; if (!readonly) { map.flags |=3D VFIO_DMA_MAP_FLAG_WRITE; } @@ -517,7 +532,9 @@ static int vfio_dma_map(VFIOContainer *container, hwadd= r iova, return 0; } =20 - error_report("VFIO_MAP_DMA failed: %s", strerror(errno)); +fail: + error_report("vfio_dma_map %s (iova %lu, size %ld, va %p): %s", + (container->reused ? "VADDR" : ""), iova, size, vaddr, strerror(er= rno)); return -errno; } =20 @@ -882,6 +899,12 @@ static void vfio_listener_region_add(MemoryListener *l= istener, MemoryRegionSection *section) { VFIOContainer *container =3D container_of(listener, VFIOContainer, lis= tener); + vfio_container_region_add(container, section); +} + +void vfio_container_region_add(VFIOContainer *container, + MemoryRegionSection *section) +{ hwaddr iova, end; Int128 llend, llsize; void *vaddr; @@ -1492,6 +1515,12 @@ static void vfio_listener_release(VFIOContainer *con= tainer) } } =20 +void vfio_listener_register(VFIOContainer *container) +{ + container->listener =3D vfio_memory_listener; + memory_listener_register(&container->listener, container->space->as); +} + static struct vfio_info_cap_header * vfio_get_cap(void *ptr, uint32_t cap_offset, uint16_t id) { @@ -1910,6 +1939,22 @@ static int vfio_init_container(VFIOContainer *contai= ner, int group_fd, { int iommu_type, ret; =20 + /* + * If container is reused, just set its type and skip the ioctls, as t= he + * container and group are already configured in the kernel. + * VFIO_TYPE1v2_IOMMU is the only type that supports reuse/cpr. + */ + if (container->reused) { + if (ioctl(container->fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1v2_IOMMU)= ) { + container->iommu_type =3D VFIO_TYPE1v2_IOMMU; + return 0; + } else { + error_setg(errp, "container was reused but VFIO_TYPE1v2_IOMMU " + "is not supported"); + return -errno; + } + } + iommu_type =3D vfio_get_iommu_type(container, errp); if (iommu_type < 0) { return iommu_type; @@ -2014,9 +2059,12 @@ static int vfio_connect_container(VFIOGroup *group, = AddressSpace *as, { VFIOContainer *container; int ret, fd; + bool reused; VFIOAddressSpace *space; =20 space =3D vfio_get_address_space(as); + fd =3D cpr_find_fd("vfio_container_for_group", group->groupid); + reused =3D (fd > 0); =20 /* * VFIO is currently incompatible with discarding of RAM insofar as the @@ -2049,27 +2097,47 @@ static int vfio_connect_container(VFIOGroup *group,= AddressSpace *as, * details once we know which type of IOMMU we are using. */ =20 + /* + * If the container is reused, then the group is already attached in t= he + * kernel. If a container with matching fd is found, then update the + * userland group list and return. If not, then after the loop, create + * the container struct and group list. + */ + QLIST_FOREACH(container, &space->containers, next) { - if (!ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) { - ret =3D vfio_ram_block_discard_disable(container, true); - if (ret) { - error_setg_errno(errp, -ret, - "Cannot set discarding of RAM broken"); - if (ioctl(group->fd, VFIO_GROUP_UNSET_CONTAINER, - &container->fd)) { - error_report("vfio: error disconnecting group %d from" - " container", group->groupid); - } - return ret; + if (reused) { + if (container->fd !=3D fd) { + continue; + } + } else if (ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->= fd)) { + continue; + } + + ret =3D vfio_ram_block_discard_disable(container, true); + if (ret) { + error_setg_errno(errp, -ret, + "Cannot set discarding of RAM broken"); + if (ioctl(group->fd, VFIO_GROUP_UNSET_CONTAINER, + &container->fd)) { + error_report("vfio: error disconnecting group %d from" + " container", group->groupid); } - group->container =3D container; - QLIST_INSERT_HEAD(&container->group_list, group, container_nex= t); + goto delete_fd_exit; + } + group->container =3D container; + QLIST_INSERT_HEAD(&container->group_list, group, container_next); + if (!reused) { vfio_kvm_device_add_group(group); - return 0; + cpr_save_fd("vfio_container_for_group", group->groupid, + container->fd); } + return 0; + } + + if (!reused) { + fd =3D qemu_open_old("/dev/vfio/vfio", O_RDWR); } =20 - fd =3D qemu_open_old("/dev/vfio/vfio", O_RDWR); if (fd < 0) { error_setg_errno(errp, errno, "failed to open /dev/vfio/vfio"); ret =3D -errno; @@ -2087,6 +2155,7 @@ static int vfio_connect_container(VFIOGroup *group, A= ddressSpace *as, container =3D g_malloc0(sizeof(*container)); container->space =3D space; container->fd =3D fd; + container->reused =3D reused; container->error =3D NULL; container->dirty_pages_supported =3D false; container->dma_max_mappings =3D 0; @@ -2099,10 +2168,15 @@ static int vfio_connect_container(VFIOGroup *group,= AddressSpace *as, goto free_container_exit; } =20 + ret =3D vfio_cpr_register_container(container, errp); + if (ret) { + goto free_container_exit; + } + ret =3D vfio_ram_block_discard_disable(container, true); if (ret) { error_setg_errno(errp, -ret, "Cannot set discarding of RAM broken"= ); - goto free_container_exit; + goto unregister_container_exit; } =20 switch (container->iommu_type) { @@ -2213,9 +2287,16 @@ static int vfio_connect_container(VFIOGroup *group, = AddressSpace *as, group->container =3D container; QLIST_INSERT_HEAD(&container->group_list, group, container_next); =20 - container->listener =3D vfio_memory_listener; - - memory_listener_register(&container->listener, container->space->as); + /* + * If reused, register the listener later, after all state that may + * affect regions and mapping boundaries has been cpr load'ed. Later, + * the listener will invoke its callback on each flat section and call + * vfio_dma_map to supply the new vaddr, and the calls will match the + * mappings remembered by the kernel. + */ + if (!reused) { + vfio_listener_register(container); + } =20 if (container->error) { ret =3D -1; @@ -2225,6 +2306,7 @@ static int vfio_connect_container(VFIOGroup *group, A= ddressSpace *as, } =20 container->initialized =3D true; + cpr_resave_fd("vfio_container_for_group", group->groupid, fd); =20 return 0; listener_release_exit: @@ -2236,6 +2318,9 @@ listener_release_exit: enable_discards_exit: vfio_ram_block_discard_disable(container, false); =20 +unregister_container_exit: + vfio_cpr_unregister_container(container); + free_container_exit: g_free(container); =20 @@ -2245,6 +2330,8 @@ close_fd_exit: put_space_exit: vfio_put_address_space(space); =20 +delete_fd_exit: + cpr_delete_fd("vfio_container_for_group", group->groupid); return ret; } =20 @@ -2254,6 +2341,7 @@ static void vfio_disconnect_container(VFIOGroup *grou= p) =20 QLIST_REMOVE(group, container_next); group->container =3D NULL; + cpr_delete_fd("vfio_container_for_group", group->groupid); =20 /* * Explicitly release the listener first before unset container, @@ -2290,6 +2378,7 @@ static void vfio_disconnect_container(VFIOGroup *grou= p) } =20 trace_vfio_disconnect_container(container->fd); + vfio_cpr_unregister_container(container); close(container->fd); g_free(container); =20 @@ -2319,7 +2408,12 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace = *as, Error **errp) group =3D g_malloc0(sizeof(*group)); =20 snprintf(path, sizeof(path), "/dev/vfio/%d", groupid); - group->fd =3D qemu_open_old(path, O_RDWR); + + group->fd =3D cpr_find_fd("vfio_group", groupid); + if (group->fd < 0) { + group->fd =3D qemu_open_old(path, O_RDWR); + } + if (group->fd < 0) { error_setg_errno(errp, errno, "failed to open %s", path); goto free_group_exit; @@ -2352,7 +2446,7 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *= as, Error **errp) } =20 QLIST_INSERT_HEAD(&vfio_group_list, group, next); - + cpr_resave_fd("vfio_group", groupid, group->fd); return group; =20 close_fd_exit: @@ -2377,6 +2471,7 @@ void vfio_put_group(VFIOGroup *group) vfio_disconnect_container(group); QLIST_REMOVE(group, next); trace_vfio_put_group(group->fd); + cpr_delete_fd("vfio_group", group->groupid); close(group->fd); g_free(group); =20 @@ -2390,8 +2485,14 @@ int vfio_get_device(VFIOGroup *group, const char *na= me, { struct vfio_device_info dev_info =3D { .argsz =3D sizeof(dev_info) }; int ret, fd; + bool reused; + + fd =3D cpr_find_fd(name, 0); + reused =3D (fd >=3D 0); + if (!reused) { + fd =3D ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, name); + } =20 - fd =3D ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, name); if (fd < 0) { error_setg_errno(errp, errno, "error getting device from group %d", group->groupid); @@ -2436,11 +2537,13 @@ int vfio_get_device(VFIOGroup *group, const char *n= ame, vbasedev->num_irqs =3D dev_info.num_irqs; vbasedev->num_regions =3D dev_info.num_regions; vbasedev->flags =3D dev_info.flags; + vbasedev->reused =3D reused; =20 trace_vfio_get_device(name, dev_info.flags, dev_info.num_regions, dev_info.num_irqs); =20 vbasedev->reset_works =3D !!(dev_info.flags & VFIO_DEVICE_FLAGS_RESET); + cpr_resave_fd(name, 0, fd); return 0; } =20 @@ -2452,6 +2555,7 @@ void vfio_put_base_device(VFIODevice *vbasedev) QLIST_REMOVE(vbasedev, next); vbasedev->group =3D NULL; trace_vfio_put_base_device(vbasedev->fd); + cpr_delete_fd(vbasedev->name, 0); close(vbasedev->fd); } =20 diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c new file mode 100644 index 0000000..83f7872 --- /dev/null +++ b/hw/vfio/cpr.c @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include +#include +#include "hw/vfio/vfio-common.h" +#include "sysemu/kvm.h" +#include "qapi/error.h" +#include "migration/blocker.h" +#include "migration/migration.h" +#include "migration/misc.h" +#include "migration/vmstate.h" +#include "trace.h" + +static int +vfio_dma_unmap_vaddr_all(VFIOContainer *container, Error **errp) +{ + struct vfio_iommu_type1_dma_unmap unmap =3D { + .argsz =3D sizeof(unmap), + .flags =3D VFIO_DMA_UNMAP_FLAG_VADDR | VFIO_DMA_UNMAP_FLAG_ALL, + .iova =3D 0, + .size =3D 0, + }; + if (ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, &unmap)) { + error_setg_errno(errp, errno, "vfio_dma_unmap_vaddr_all"); + return -errno; + } + container->vaddr_unmapped =3D true; + return 0; +} + +static bool vfio_is_cpr_capable(VFIOContainer *container, Error **errp) +{ + if (!ioctl(container->fd, VFIO_CHECK_EXTENSION, VFIO_UPDATE_VADDR) || + !ioctl(container->fd, VFIO_CHECK_EXTENSION, VFIO_UNMAP_ALL)) { + error_setg(errp, "VFIO container does not support VFIO_UPDATE_VADD= R " + "or VFIO_UNMAP_ALL"); + return false; + } else { + return true; + } +} + +static bool vfio_vmstate_needed(void *opaque) +{ + return migrate_mode() =3D=3D MIG_MODE_CPR_EXEC; +} + +static int vfio_container_pre_save(void *opaque) +{ + VFIOContainer *container =3D (VFIOContainer *)opaque; + Error *err =3D NULL; + + if (!vfio_is_cpr_capable(container, &err) || + vfio_dma_unmap_vaddr_all(container, &err)) { + error_report_err(err); + return -1; + } + return 0; +} + +static int vfio_container_post_load(void *opaque, int version_id) +{ + VFIOContainer *container =3D (VFIOContainer *)opaque; + VFIOGroup *group; + Error *err =3D NULL; + VFIODevice *vbasedev; + + if (!vfio_is_cpr_capable(container, &err)) { + error_report_err(err); + return -1; + } + + vfio_listener_register(container); + container->reused =3D false; + + QLIST_FOREACH(group, &container->group_list, container_next) { + QLIST_FOREACH(vbasedev, &group->device_list, next) { + vbasedev->reused =3D false; + } + } + return 0; +} + +static const VMStateDescription vfio_container_vmstate =3D { + .name =3D "vfio-container", + .version_id =3D 0, + .minimum_version_id =3D 0, + .pre_save =3D vfio_container_pre_save, + .post_load =3D vfio_container_post_load, + .needed =3D vfio_vmstate_needed, + .fields =3D (VMStateField[]) { + VMSTATE_END_OF_LIST() + } +}; + +int vfio_cpr_register_container(VFIOContainer *container, Error **errp) +{ + container->cpr_blocker =3D NULL; + if (!vfio_is_cpr_capable(container, &container->cpr_blocker)) { + return migrate_add_blockers(&container->cpr_blocker, errp, + MIG_MODE_CPR_EXEC, -1); + } + + vmstate_register(NULL, -1, &vfio_container_vmstate, container); + + return 0; +} + +void vfio_cpr_unregister_container(VFIOContainer *container) +{ + migrate_del_blocker(&container->cpr_blocker); + + vmstate_unregister(NULL, &vfio_container_vmstate, container); +} diff --git a/hw/vfio/meson.build b/hw/vfio/meson.build index da9af29..e247b2b 100644 --- a/hw/vfio/meson.build +++ b/hw/vfio/meson.build @@ -5,6 +5,7 @@ vfio_ss.add(files( 'migration.c', )) vfio_ss.add(when: 'CONFIG_VFIO_PCI', if_true: files( + 'cpr.c', 'display.c', 'pci-quirks.c', 'pci.c', diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 0143c9a..b5fd2ec 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -28,6 +28,8 @@ #include "hw/pci/pci_bridge.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" +#include "migration/misc.h" +#include "migration/cpr-state.h" #include "migration/vmstate.h" #include "qapi/qmp/qdict.h" #include "qemu/error-report.h" @@ -3243,6 +3245,11 @@ static void vfio_pci_reset(DeviceState *dev) { VFIOPCIDevice *vdev =3D VFIO_PCI(dev); =20 + /* Do not reset the device during qemu_system_reset prior to cpr load = */ + if (vdev->vbasedev.reused) { + return; + } + trace_vfio_pci_reset(vdev->vbasedev.name); =20 vfio_pci_pre_reset(vdev); @@ -3350,6 +3357,41 @@ static Property vfio_pci_dev_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +/* + * The kernel may change non-emulated config bits. Exclude them from the + * changed-bits check in get_pci_config_device. + */ +static int vfio_pci_pre_load(void *opaque) +{ + VFIOPCIDevice *vdev =3D opaque; + PCIDevice *pdev =3D &vdev->pdev; + int size =3D MIN(pci_config_size(pdev), vdev->config_size); + int i; + + for (i =3D 0; i < size; i++) { + pdev->cmask[i] &=3D vdev->emulated_config_bits[i]; + } + + return 0; +} + +static bool vfio_pci_needed(void *opaque) +{ + return migrate_mode() =3D=3D MIG_MODE_CPR_EXEC; +} + +static const VMStateDescription vfio_pci_vmstate =3D { + .name =3D "vfio-pci", + .version_id =3D 0, + .minimum_version_id =3D 0, + .priority =3D MIG_PRI_VFIO_PCI, /* must load before container */ + .pre_load =3D vfio_pci_pre_load, + .needed =3D vfio_pci_needed, + .fields =3D (VMStateField[]) { + VMSTATE_END_OF_LIST() + } +}; + static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -3357,6 +3399,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klas= s, void *data) =20 dc->reset =3D vfio_pci_reset; device_class_set_props(dc, vfio_pci_dev_properties); + dc->vmsd =3D &vfio_pci_vmstate; dc->desc =3D "VFIO-based PCI device assignment"; set_bit(DEVICE_CATEGORY_MISC, dc->categories); pdc->realize =3D vfio_realize; diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 73dffe9..a6d0034 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -119,6 +119,7 @@ vfio_region_sparse_mmap_header(const char *name, int in= dex, int nr_areas) "Devic vfio_region_sparse_mmap_entry(int i, unsigned long start, unsigned long en= d) "sparse entry %d [0x%lx - 0x%lx]" vfio_get_dev_region(const char *name, int index, uint32_t type, uint32_t s= ubtype) "%s index %d, %08x/%0x8" vfio_dma_unmap_overflow_workaround(void) "" +vfio_region_remap(const char *name, int fd, uint64_t iova_start, uint64_t = iova_end, void *vaddr) "%s fd %d 0x%"PRIx64" - 0x%"PRIx64" [%p]" =20 # platform.c vfio_platform_base_device_init(char *name, int groupid) "%s belongs to gro= up #%d" diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index e573f5a..17ad9ba 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -81,10 +81,14 @@ typedef struct VFIOContainer { int fd; /* /dev/vfio/vfio, empowered by the attached groups */ MemoryListener listener; MemoryListener prereg_listener; + Notifier cpr_notifier; + Error *cpr_blocker; unsigned iommu_type; Error *error; bool initialized; bool dirty_pages_supported; + bool reused; + bool vaddr_unmapped; uint64_t dirty_pgsizes; uint64_t max_dirty_bitmap_size; unsigned long pgsizes; @@ -136,6 +140,7 @@ typedef struct VFIODevice { bool no_mmap; bool ram_block_discard_allowed; bool enable_migration; + bool reused; VFIODeviceOps *ops; unsigned int num_irqs; unsigned int num_regions; @@ -213,6 +218,9 @@ void vfio_put_group(VFIOGroup *group); int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vbasedev, Error **errp); =20 +int vfio_cpr_register_container(VFIOContainer *container, Error **errp); +void vfio_cpr_unregister_container(VFIOContainer *container); + extern const MemoryRegionOps vfio_region_ops; typedef QLIST_HEAD(VFIOGroupList, VFIOGroup) VFIOGroupList; extern VFIOGroupList vfio_group_list; @@ -234,6 +242,9 @@ struct vfio_info_cap_header * vfio_get_device_info_cap(struct vfio_device_info *info, uint16_t id); #endif extern const MemoryListener vfio_prereg_listener; +void vfio_listener_register(VFIOContainer *container); +void vfio_container_region_add(VFIOContainer *container, + MemoryRegionSection *section); =20 int vfio_spapr_create_window(VFIOContainer *container, MemoryRegionSection *section, diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index ad24aa1..d76f7f1 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -157,6 +157,8 @@ typedef enum { MIG_PRI_GICV3_ITS, /* Must happen before PCI devices */ MIG_PRI_GICV3, /* Must happen before the ITS */ MIG_PRI_MAX, + MIG_PRI_VFIO_PCI =3D + MIG_PRI_DEFAULT + 1, /* Must happen before vfio containers */ } MigrationPriority; =20 struct VMStateField { --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852793; cv=none; d=zohomail.com; s=zohoarc; b=e2oLx9oP4EUJLFmzFsTFPsdHsAwitYgZgxdkfncbxZKUcmGw/wzV90siWQ1Ew2R/OSEV2glatsTcZzTB1uPYuToFkM2m+fnYU1xMA+IkF72aHuuofLBmYixdZqIH8Ra9rT27JSoffKTGYPgCSth86inUN3yIFZSojV42xcDfSac= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852793; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=ZpMX+dkGp0nolXRTPsLQuh/GSasLYD0jX7mg8D5/X9E=; b=lGp5biaN1y6qkHuqwPTV55x85QbM4QhPz3kwLQIfPVhFHdW7lQqg6U+slztjtkRfwAkHE8MadNaTmzNYKmHsnPTj6iRd46rV7VpDW7CUoVCpIh+tSEkS8vWIlpJyhLH4rt3/FMjBdSSW9Ro9X1iIpdeNWnPXzHZ9cmmgCL71mZ8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165885279363159.20455978954578; Tue, 26 Jul 2022 09:26:33 -0700 (PDT) Received: from localhost ([::1]:45032 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNOC-0006MQ-IX for importer@patchew.org; Tue, 26 Jul 2022 12:26:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35256) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA2-0003Ml-U0 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:54 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:19746) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA0-0006DQ-Ud for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:54 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn0Wb031705; Tue, 26 Jul 2022 16:11:33 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1c7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:33 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEhMox006143; Tue, 26 Jul 2022 16:11:32 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2dy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:32 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTD023334; Tue, 26 Jul 2022 16:11:31 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-33; Tue, 26 Jul 2022 16:11:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=ZpMX+dkGp0nolXRTPsLQuh/GSasLYD0jX7mg8D5/X9E=; b=EXPyEujxmrWbfQpY/0Z2qu4wE4wxZtPIr9Za6uwqgsB6IlAmOlqrAvA6ih6cDJN94Nuj CdvoZCwh2bZvL2xC+UwySXPic6g9VpcjkVMhHGK8KfmDlJ6Y4b7g6GxLZyfH8doQPvCG +tzReWDMhK9WhOafiGA32N8on7qa/7lrJhrTAnUJcqH/BsadVUustCGaVYfGw0YzWFWx NyFTTrpnGZVkL+dbdCUHnQy9dM434+qvdFCIiqjhd0+ZIwVXhB2MSKt0MDsqOgL0B5i/ XjebZ5Bq4XXlokzthqJXW8Hs/GacxKUD4Vhlw3kRT0yRX8djsh3T/NmnmRa7MzENweyD fw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 32/46] vfio-pci: cpr part 2 (msi) Date: Tue, 26 Jul 2022 09:10:29 -0700 Message-Id: <1658851843-236870-33-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: FeeHbKC5XTxjTxP2rkCO4LYKLyUvqpXt X-Proofpoint-GUID: FeeHbKC5XTxjTxP2rkCO4LYKLyUvqpXt Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852795303100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Finish cpr for vfio-pci MSI/MSI-X devices by preserving eventfd's and vector state. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/vfio/pci.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 118 insertions(+), 1 deletion(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index b5fd2ec..1d0e8db 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -54,17 +54,47 @@ static void vfio_disable_interrupts(VFIOPCIDevice *vdev= ); static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); static void vfio_msi_disable_common(VFIOPCIDevice *vdev); =20 +#define EVENT_FD_NAME(vdev, name) \ + g_strdup_printf("%s_%s", (vdev)->vbasedev.name, (name)) + +static void save_event_fd(VFIOPCIDevice *vdev, const char *name, int nr, + EventNotifier *ev) +{ + int fd =3D event_notifier_get_fd(ev); + + if (fd >=3D 0) { + g_autofree char *fdname =3D EVENT_FD_NAME(vdev, name); + + cpr_resave_fd(fdname, nr, fd); + } +} + +static int load_event_fd(VFIOPCIDevice *vdev, const char *name, int nr) +{ + g_autofree char *fdname =3D EVENT_FD_NAME(vdev, name); + return cpr_find_fd(fdname, nr); +} + +static void delete_event_fd(VFIOPCIDevice *vdev, const char *name, int nr) +{ + g_autofree char *fdname =3D EVENT_FD_NAME(vdev, name); + cpr_delete_fd(fdname, nr); +} + /* Create new or reuse existing eventfd */ static int vfio_notifier_init(VFIOPCIDevice *vdev, EventNotifier *e, const char *name, int nr) { - int fd =3D -1; /* placeholder until a subsequent patch */ int ret =3D 0; + int fd =3D load_event_fd(vdev, name, nr); =20 if (fd >=3D 0) { event_notifier_init_fd(e, fd); } else { ret =3D event_notifier_init(e, 0); + if (!ret) { + save_event_fd(vdev, name, nr, e); + } } return ret; } @@ -72,6 +102,7 @@ static int vfio_notifier_init(VFIOPCIDevice *vdev, Event= Notifier *e, static void vfio_notifier_cleanup(VFIOPCIDevice *vdev, EventNotifier *e, const char *name, int nr) { + delete_event_fd(vdev, name, nr); event_notifier_cleanup(e); } =20 @@ -512,6 +543,15 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, un= signed int nr, VFIOMSIVector *vector; int ret; =20 + /* + * Ignore the callback from msix_set_vector_notifiers during resume. + * The necessary subset of these actions is called from vfio_claim_vec= tors + * during post load. + */ + if (vdev->vbasedev.reused) { + return 0; + } + trace_vfio_msix_vector_do_use(vdev->vbasedev.name, nr); =20 vector =3D &vdev->msi_vectors[nr]; @@ -2784,6 +2824,11 @@ static void vfio_register_err_notifier(VFIOPCIDevice= *vdev) fd =3D event_notifier_get_fd(&vdev->err_notifier); qemu_set_fd_handler(fd, vfio_err_notifier_handler, NULL, vdev); =20 + /* Do not alter irq_signaling during vfio_realize for cpr */ + if (vdev->vbasedev.reused) { + return; + } + if (vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_ERR_IRQ_INDEX, 0, VFIO_IRQ_SET_ACTION_TRIGGER, fd, &err)) { error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); @@ -2849,6 +2894,12 @@ static void vfio_register_req_notifier(VFIOPCIDevice= *vdev) fd =3D event_notifier_get_fd(&vdev->req_notifier); qemu_set_fd_handler(fd, vfio_req_notifier_handler, NULL, vdev); =20 + /* Do not alter irq_signaling during vfio_realize for cpr */ + if (vdev->vbasedev.reused) { + vdev->req_enabled =3D true; + return; + } + if (vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_REQ_IRQ_INDEX, 0, VFIO_IRQ_SET_ACTION_TRIGGER, fd, &err)) { error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); @@ -3357,6 +3408,46 @@ static Property vfio_pci_dev_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +static void vfio_claim_vectors(VFIOPCIDevice *vdev, int nr_vectors, bool m= six) +{ + int i, fd; + bool pending =3D false; + PCIDevice *pdev =3D &vdev->pdev; + + vdev->nr_vectors =3D nr_vectors; + vdev->msi_vectors =3D g_new0(VFIOMSIVector, nr_vectors); + vdev->interrupt =3D msix ? VFIO_INT_MSIX : VFIO_INT_MSI; + + vfio_prepare_kvm_msi_virq_batch(vdev); + + for (i =3D 0; i < nr_vectors; i++) { + VFIOMSIVector *vector =3D &vdev->msi_vectors[i]; + + fd =3D load_event_fd(vdev, "interrupt", i); + if (fd >=3D 0) { + vfio_vector_init(vdev, i); + qemu_set_fd_handler(fd, vfio_msi_interrupt, NULL, vector); + } + + if (load_event_fd(vdev, "kvm_interrupt", i) >=3D 0) { + vfio_add_kvm_msi_virq(vdev, vector, i, msix); + } else { + vdev->msi_vectors[i].virq =3D -1; + } + + if (msix && msix_is_pending(pdev, i) && msix_is_masked(pdev, i)) { + set_bit(i, vdev->msix->pending); + pending =3D true; + } + } + + vfio_commit_kvm_msi_virq_batch(vdev); + + if (msix) { + memory_region_set_enabled(&pdev->msix_pba_mmio, pending); + } +} + /* * The kernel may change non-emulated config bits. Exclude them from the * changed-bits check in get_pci_config_device. @@ -3375,6 +3466,29 @@ static int vfio_pci_pre_load(void *opaque) return 0; } =20 +static int vfio_pci_post_load(void *opaque, int version_id) +{ + VFIOPCIDevice *vdev =3D opaque; + PCIDevice *pdev =3D &vdev->pdev; + int nr_vectors; + + if (msix_enabled(pdev)) { + msix_set_vector_notifiers(pdev, vfio_msix_vector_use, + vfio_msix_vector_release, NULL); + nr_vectors =3D vdev->msix->entries; + vfio_claim_vectors(vdev, nr_vectors, true); + + } else if (msi_enabled(pdev)) { + nr_vectors =3D msi_nr_vectors_allocated(pdev); + vfio_claim_vectors(vdev, nr_vectors, false); + + } else if (vfio_pci_read_config(pdev, PCI_INTERRUPT_PIN, 1)) { + assert(0); /* completed in a subsequent patch */ + } + + return 0; +} + static bool vfio_pci_needed(void *opaque) { return migrate_mode() =3D=3D MIG_MODE_CPR_EXEC; @@ -3386,8 +3500,11 @@ static const VMStateDescription vfio_pci_vmstate =3D= { .minimum_version_id =3D 0, .priority =3D MIG_PRI_VFIO_PCI, /* must load before container */ .pre_load =3D vfio_pci_pre_load, + .post_load =3D vfio_pci_post_load, .needed =3D vfio_pci_needed, .fields =3D (VMStateField[]) { + VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), + VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), VMSTATE_END_OF_LIST() } }; --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658852777; cv=none; d=zohomail.com; s=zohoarc; b=IYUw/pllxOX+v6koxJmjtUGGONDXS+NRPgMbScAQGN5PQFmrSidWFBeuY127ZrdeyWtuyMu1Tiicbxz0QzaABPIgDQnGuHZdZ7jk+D6zZHWone8JmlMSvPiW7+/L/4s+r9tnTz9Lw4dTZt9awtpxaeJmW2CdKkoiYoq1IpbZ0+U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658852777; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=aDWQYJpJCnKr22HSJhWfvccK9PK7+j3qIffHAXxEly4=; b=FUTGFoRTa40PEJ2tDDQdwsuAw1EpDTsF1GxaS0uRuzK0Y40NP8HmRiGSylv/X7kgQ+U27/6/rl77rEbEHnlZ6pq0Ai+eIw8q6QWECoNkJgApn/hIUR6UJ2B2AY/s+ZXvWZCDCaeDaEipUkKtlivPBUkLgHNyTKmRSWLsjruI3Ng= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658852777298737.1015866270678; Tue, 26 Jul 2022 09:26:17 -0700 (PDT) Received: from localhost ([::1]:44242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNNq-0005oJ-MH for importer@patchew.org; Tue, 26 Jul 2022 12:26:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35024) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9s-0002za-UG for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:45 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:43400) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9q-0006DE-RW for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:44 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnNVu026401; Tue, 26 Jul 2022 16:11:34 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg94gevy7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:34 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF5NqU006270; Tue, 26 Jul 2022 16:11:33 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2fn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:33 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTF023334; Tue, 26 Jul 2022 16:11:32 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-34; Tue, 26 Jul 2022 16:11:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=aDWQYJpJCnKr22HSJhWfvccK9PK7+j3qIffHAXxEly4=; b=0EMy5l5Js2/gTAeqjZP357y/zt0+TMOgGmA/O5NAZOqtn4MujN5lFf+v8qKTIB4bZUYB yQZbT3vAxBQlDvYLx6bqp3zoYR7GPhPvl/VIZGXGJOcbXt3lPvn8loRqsPGZTq82vAYt NXRp5xVkoK/uyRHBG89mHxPdjMZK5P605XrLVk4LOBSc7D6Inho41azCJKJI7j8egTnh z3l5gUdlhiMXJU37nGzASNY5DNXGPf/hogQtraJ/UG2dFhRkET+9EcvunEDC2Pzb+o8w gmsgG0yglffSInu04R54R8w3pjCSfJL/NvF6NYs0VYVqEB2G/f1EP6zc1jvdNcymi0jy uA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 33/46] vfio-pci: cpr part 3 (intx) Date: Tue, 26 Jul 2022 09:10:30 -0700 Message-Id: <1658851843-236870-34-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: qZ7t_517AqiL5UAndSdf7jmnqw0_bCNX X-Proofpoint-ORIG-GUID: qZ7t_517AqiL5UAndSdf7jmnqw0_bCNX Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658852779425100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Preserve vfio INTX state across cpr restart. Preserve VFIOINTx fields as follows: pin : Recover this from the vfio config in kernel space interrupt : Preserve its eventfd descriptor across exec. unmask : Ditto route.irq : This could perhaps be recovered in vfio_pci_post_load by calling pci_device_route_intx_to_irq(pin), whose implementation reads config space for a bridge device such as ich9. However, there is no guarantee that the bridge vmstate is read before vfio vmstate. Rather than fiddling with MigrationPriority for vmstate handlers, explicitly save route.irq in vfio vmstate. pending : save in vfio vmstate. mmap_timeout, mmap_timer : Re-initialize bool kvm_accel : Re-initialize In vfio_realize, defer calling vfio_intx_enable until the vmstate is available, in vfio_pci_post_load. Modify vfio_intx_enable and vfio_intx_kvm_enable to skip vfio initialization, but still perform kvm initialization. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/vfio/pci.c | 81 ++++++++++++++++++++++++++++++++++++++++++++-----------= ---- 1 file changed, 61 insertions(+), 20 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 1d0e8db..906e3cb 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -179,11 +179,13 @@ static void vfio_intx_enable_kvm(VFIOPCIDevice *vdev,= Error **errp) return; } =20 - /* Get to a known interrupt state */ - qemu_set_fd_handler(irq_fd, NULL, NULL, vdev); - vfio_mask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); - vdev->intx.pending =3D false; - pci_irq_deassert(&vdev->pdev); + if (!vdev->vbasedev.reused) { + /* Get to a known interrupt state */ + qemu_set_fd_handler(irq_fd, NULL, NULL, vdev); + vfio_mask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX= ); + vdev->intx.pending =3D false; + pci_irq_deassert(&vdev->pdev); + } =20 /* Get an eventfd for resample/unmask */ if (vfio_notifier_init(vdev, &vdev->intx.unmask, "intx-unmask", 0)) { @@ -199,15 +201,17 @@ static void vfio_intx_enable_kvm(VFIOPCIDevice *vdev,= Error **errp) goto fail_irqfd; } =20 - if (vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX, 0, - VFIO_IRQ_SET_ACTION_UNMASK, - event_notifier_get_fd(&vdev->intx.unmask), - errp)) { - goto fail_vfio; - } + if (!vdev->vbasedev.reused) { + if (vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDE= X, 0, + VFIO_IRQ_SET_ACTION_UNMASK, + event_notifier_get_fd(&vdev->intx.unmas= k), + errp)) { + goto fail_vfio; + } =20 - /* Let'em rip */ - vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX); + /* Let'em rip */ + vfio_unmask_single_irqindex(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_IND= EX); + } =20 vdev->intx.kvm_accel =3D true; =20 @@ -323,7 +327,13 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error= **errp) return 0; } =20 - vfio_disable_interrupts(vdev); + /* + * Do not alter interrupt state during vfio_realize and cpr load. The + * reused flag is cleared thereafter. + */ + if (!vdev->vbasedev.reused) { + vfio_disable_interrupts(vdev); + } =20 vdev->intx.pin =3D pin - 1; /* Pin A (1) -> irq[0] */ pci_config_set_interrupt_pin(vdev->pdev.config, pin); @@ -348,7 +358,8 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error = **errp) fd =3D event_notifier_get_fd(&vdev->intx.interrupt); qemu_set_fd_handler(fd, vfio_intx_interrupt, NULL, vdev); =20 - if (vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX, 0, + if (!vdev->vbasedev.reused && + vfio_set_irq_signaling(&vdev->vbasedev, VFIO_PCI_INTX_IRQ_INDEX, 0, VFIO_IRQ_SET_ACTION_TRIGGER, fd, errp)) { qemu_set_fd_handler(fd, NULL, NULL, vdev); vfio_notifier_cleanup(vdev, &vdev->intx.interrupt, "intx-interrupt= ", 0); @@ -3189,9 +3200,13 @@ static void vfio_realize(PCIDevice *pdev, Error **er= rp) vfio_intx_routing_notifier); vdev->irqchip_change_notifier.notify =3D vfio_irqchip_change; kvm_irqchip_add_change_notifier(&vdev->irqchip_change_notifier); - ret =3D vfio_intx_enable(vdev, errp); - if (ret) { - goto out_deregister; + + /* Wait until cpr load reads intx routing data to enable */ + if (!vdev->vbasedev.reused) { + ret =3D vfio_intx_enable(vdev, errp); + if (ret) { + goto out_deregister; + } } } =20 @@ -3471,6 +3486,7 @@ static int vfio_pci_post_load(void *opaque, int versi= on_id) VFIOPCIDevice *vdev =3D opaque; PCIDevice *pdev =3D &vdev->pdev; int nr_vectors; + int ret =3D 0; =20 if (msix_enabled(pdev)) { msix_set_vector_notifiers(pdev, vfio_msix_vector_use, @@ -3483,10 +3499,34 @@ static int vfio_pci_post_load(void *opaque, int ver= sion_id) vfio_claim_vectors(vdev, nr_vectors, false); =20 } else if (vfio_pci_read_config(pdev, PCI_INTERRUPT_PIN, 1)) { - assert(0); /* completed in a subsequent patch */ + Error *err =3D 0; + ret =3D vfio_intx_enable(vdev, &err); + if (ret) { + error_report_err(err); + } } =20 - return 0; + return ret; +} + +static const VMStateDescription vfio_intx_vmstate =3D { + .name =3D "vfio-intx", + .version_id =3D 0, + .minimum_version_id =3D 0, + .fields =3D (VMStateField[]) { + VMSTATE_BOOL(pending, VFIOINTx), + VMSTATE_UINT32(route.mode, VFIOINTx), + VMSTATE_INT32(route.irq, VFIOINTx), + VMSTATE_END_OF_LIST() + } +}; + +#define VMSTATE_VFIO_INTX(_field, _state) { \ + .name =3D (stringify(_field)), \ + .size =3D sizeof(VFIOINTx), \ + .vmsd =3D &vfio_intx_vmstate, \ + .flags =3D VMS_STRUCT, \ + .offset =3D vmstate_offset_value(_state, _field, VFIOINTx), \ } =20 static bool vfio_pci_needed(void *opaque) @@ -3505,6 +3545,7 @@ static const VMStateDescription vfio_pci_vmstate =3D { .fields =3D (VMStateField[]) { VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), + VMSTATE_VFIO_INTX(intx, VFIOPCIDevice), VMSTATE_END_OF_LIST() } }; --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853436; cv=none; d=zohomail.com; s=zohoarc; b=L7BEJZ2Rky6acVDhJXJh15HZFPMCQLGh27QRQouza5lB6+v7oHlhGobCSfjQOgQqUgdqmGX90w+ZgmOtP22+ZRhzILoEKipGM2lFV9Hzckr0h24Pr5tV3GSqSgLbknnB+5oivOXQDjwgBmq9/LntUUW/eanMlpiKW90DgRaIWZI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853436; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=NhL8BhU4N6jC7v2lMf9JIKfTxaOiUv20Gl3ngouOQn4=; b=W3Yuj5/39h16Kat1/geA5ZaM7RdYT4Q9ATsMUjT7BWVy2k67/HrnponAhx7PSK8rS5chRReXvB6/km91rxvWr8X11aMkLolike+MBORCJnLidpoSN5gvC+5np3jdHkHN2/hztQ4LnKjViVPSuFnpEx8m5rxzDoFS0vQHaXSypGw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853436779329.40615962096956; Tue, 26 Jul 2022 09:37:16 -0700 (PDT) Received: from localhost ([::1]:33550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNYZ-0001Fm-HF for importer@patchew.org; Tue, 26 Jul 2022 12:37:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA6-0003T1-6d for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:58 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:27828) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA3-0006FI-VA for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:57 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn0Wd031705; Tue, 26 Jul 2022 16:11:36 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1ce-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:36 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEhMp5006143; Tue, 26 Jul 2022 16:11:35 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2gy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:35 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTH023334; Tue, 26 Jul 2022 16:11:34 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-35; Tue, 26 Jul 2022 16:11:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=NhL8BhU4N6jC7v2lMf9JIKfTxaOiUv20Gl3ngouOQn4=; b=aepuIZnSCDuLBfStW7SpgrAw4310D9lJjFJvSiSVNp6L8LC1AtjpqfbOZ0ExBiQCwZAr 0Xhq3Vn9CySgEX8QSyGwHEAaN5dd4tdeX7xglEClA6lTno6SWHak4wbFn3G8Sf21zINe NQPVJtxucf07dG8KqIH7mt+PlV509Lakh7m7EHwpoq8x5UmpTA+dX+IycaMtoZfX6PKY jcEgOZfCFvwDX9msidsqn7OfHYEKXX6Yomn2j1Mw2qNtHLGLMSNrjOrgQdJWAOoZumTf aENp9AtbpSrY7+YeL6+qPuc6phneC6oefa8ZuXzgV3V2PCTCRM1D8yM18KuObTYSh1z/ yA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 34/46] vfio-pci: recover from unmap-all-vaddr failure Date: Tue, 26 Jul 2022 09:10:31 -0700 Message-Id: <1658851843-236870-35-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: ik_M0MRs2MXvL-21vTuoGA3SHS3ms45D X-Proofpoint-GUID: ik_M0MRs2MXvL-21vTuoGA3SHS3ms45D Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853437780100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If there are multiple containers and unmap-all fails for some container, we need to remap vaddr for the other containers for which unmap-all succeeded. Recover by walking all flat sections of all containers to restore the vaddr for each. Do so by invoking the vfio listener callback, and passing a new "remap" flag that tells it to restore a mapping without re-allocating new userland data structures. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/vfio/common.c | 79 ++++++++++++++++++++++++++++++++++-----= ---- hw/vfio/cpr.c | 36 ++++++++++++++++++++ include/hw/vfio/vfio-common.h | 2 +- 3 files changed, 100 insertions(+), 17 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index b7b35d4..de821e1 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -895,15 +895,35 @@ static bool vfio_known_safe_misalignment(MemoryRegion= Section *section) return true; } =20 +static VFIORamDiscardListener *vfio_find_ram_discard_listener( + VFIOContainer *container, MemoryRegionSection *section) +{ + VFIORamDiscardListener *vrdl; + + QLIST_FOREACH(vrdl, &container->vrdl_list, next) { + if (vrdl->mr =3D=3D section->mr && + vrdl->offset_within_address_space =3D=3D + section->offset_within_address_space) { + break; + } + } + + if (!vrdl) { + hw_error("vfio: Trying to sync missing RAM discard listener"); + /* does not return */ + } + return vrdl; +} + static void vfio_listener_region_add(MemoryListener *listener, MemoryRegionSection *section) { VFIOContainer *container =3D container_of(listener, VFIOContainer, lis= tener); - vfio_container_region_add(container, section); + vfio_container_region_add(container, section, false); } =20 void vfio_container_region_add(VFIOContainer *container, - MemoryRegionSection *section) + MemoryRegionSection *section, bool remap) { hwaddr iova, end; Int128 llend, llsize; @@ -1033,6 +1053,30 @@ void vfio_container_region_add(VFIOContainer *contai= ner, int iommu_idx; =20 trace_vfio_listener_region_add_iommu(iova, end); + + /* + * If remap, then VFIO_DMA_UNMAP_FLAG_VADDR has been called, and we + * want to remap the vaddr. vfio_container_region_add was already + * called in the past, so the giommu already exists. Find it and + * replay it, which calls vfio_dma_map further down the stack. + */ + + if (remap) { + hwaddr as_offset =3D section->offset_within_address_space; + hwaddr iommu_offset =3D as_offset - section->offset_within_reg= ion; + + QLIST_FOREACH(giommu, &container->giommu_list, giommu_next) { + if (giommu->iommu_mr =3D=3D iommu_mr && + giommu->iommu_offset =3D=3D iommu_offset) { + memory_region_iommu_replay(giommu->iommu_mr, &giommu->= n); + return; + } + } + error_report("Container cannot find iommu region %s offset %lx= ", + memory_region_name(section->mr), iommu_offset); + goto fail; + } + /* * FIXME: For VFIO iommu types which have KVM acceleration to * avoid bouncing all map/unmaps through qemu this way, this @@ -1083,7 +1127,21 @@ void vfio_container_region_add(VFIOContainer *contai= ner, * about changes. */ if (memory_region_has_ram_discard_manager(section->mr)) { - vfio_register_ram_discard_listener(container, section); + /* + * If remap, then VFIO_DMA_UNMAP_FLAG_VADDR has been called, and we + * want to remap the vaddr. vfio_container_region_add was already + * called in the past, so the ram discard listener already exists. + * Call its populate function directly, which calls vfio_dma_map. + */ + if (remap) { + VFIORamDiscardListener *vrdl =3D + vfio_find_ram_discard_listener(container, section); + if (vrdl->listener.notify_populate(&vrdl->listener, section)) { + error_report("listener.notify_populate failed"); + } + } else { + vfio_register_ram_discard_listener(container, section); + } return; } =20 @@ -1417,19 +1475,8 @@ static int vfio_sync_ram_discard_listener_dirty_bitm= ap(VFIOContainer *container, MemoryRegionSection *se= ction) { RamDiscardManager *rdm =3D memory_region_get_ram_discard_manager(secti= on->mr); - VFIORamDiscardListener *vrdl =3D NULL; - - QLIST_FOREACH(vrdl, &container->vrdl_list, next) { - if (vrdl->mr =3D=3D section->mr && - vrdl->offset_within_address_space =3D=3D - section->offset_within_address_space) { - break; - } - } - - if (!vrdl) { - hw_error("vfio: Trying to sync missing RAM discard listener"); - } + VFIORamDiscardListener *vrdl =3D + vfio_find_ram_discard_listener(container, section); =20 /* * We only want/can synchronize the bitmap for actually mapped parts - diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c index 83f7872..1f682cb 100644 --- a/hw/vfio/cpr.c +++ b/hw/vfio/cpr.c @@ -34,6 +34,15 @@ vfio_dma_unmap_vaddr_all(VFIOContainer *container, Error= **errp) return 0; } =20 +static int +vfio_region_remap(MemoryRegionSection *section, void *handle, Error **errp) +{ + VFIOContainer *container =3D handle; + vfio_container_region_add(container, section, true); + container->vaddr_unmapped =3D false; + return 0; +} + static bool vfio_is_cpr_capable(VFIOContainer *container, Error **errp) { if (!ioctl(container->fd, VFIO_CHECK_EXTENSION, VFIO_UPDATE_VADDR) || @@ -99,6 +108,30 @@ static const VMStateDescription vfio_container_vmstate = =3D { } }; =20 +static void vfio_cpr_fail_notifier(Notifier *notifier, void *data) +{ + MigrationState *s =3D data; + VFIOContainer *container; + Error *err =3D NULL; + + if (!migration_has_failed(s) || migrate_mode_of(s) !=3D MIG_MODE_CPR_E= XEC) { + return; + } + + container =3D container_of(notifier, VFIOContainer, cpr_notifier); + if (container->vaddr_unmapped) { + + /* Set reused so vfio_dma_map restores vaddr */ + container->reused =3D true; + if (address_space_flat_for_each_section(container->space->as, + vfio_region_remap, + container, &err)) { + error_report_err(err); + } + container->reused =3D false; + } +} + int vfio_cpr_register_container(VFIOContainer *container, Error **errp) { container->cpr_blocker =3D NULL; @@ -109,6 +142,7 @@ int vfio_cpr_register_container(VFIOContainer *containe= r, Error **errp) =20 vmstate_register(NULL, -1, &vfio_container_vmstate, container); =20 + migration_add_notifier(&container->cpr_notifier, vfio_cpr_fail_notifie= r); return 0; } =20 @@ -117,4 +151,6 @@ void vfio_cpr_unregister_container(VFIOContainer *conta= iner) migrate_del_blocker(&container->cpr_blocker); =20 vmstate_unregister(NULL, &vfio_container_vmstate, container); + + migration_remove_notifier(&container->cpr_notifier); } diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index 17ad9ba..b682645 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -244,7 +244,7 @@ vfio_get_device_info_cap(struct vfio_device_info *info,= uint16_t id); extern const MemoryListener vfio_prereg_listener; void vfio_listener_register(VFIOContainer *container); void vfio_container_region_add(VFIOContainer *container, - MemoryRegionSection *section); + MemoryRegionSection *section, bool remap); =20 int vfio_spapr_create_window(VFIOContainer *container, MemoryRegionSection *section, --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854616; cv=none; d=zohomail.com; s=zohoarc; b=lOjzcBQrdemjIoqNfatmYdyeVIpX6wNgGhnPDxvcH1CkzCZ6AecYUUVVXuzM0kOJM31OO8nwiClTMzVhQfB7RTFYfn6++x41wfrU0JcprLN/9qkIGC25NMZ66gkqRvX5s32SAjwXot27pA2phDbXKhhR8cmyPTTf9LAREoKfXho= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854616; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=eLKl1cpF1HINsl2amArCE04tfWdJ8MGhRXFnI18REuc=; b=eCBSVriq3nuxM5yksJXoijK76AN5MAU0PLXVOAwoUnNgf75+3uShPDCkOYK6r3ArFNzLwPwYU6uaU4pjJ+XcaTS9LsePJPtPgoMR0ZPl6vVrU1UpcgawyG89CJI7b26ds5EZ4d7T4zK4pf7RyVv/8CyhFeJwYD4aHNpDdmaLLmw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854616889909.6670397937984; Tue, 26 Jul 2022 09:56:56 -0700 (PDT) Received: from localhost ([::1]:40284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNrX-0000kj-JV for importer@patchew.org; Tue, 26 Jul 2022 12:56:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35204) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9z-0003EW-PL for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:52 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:61180) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9x-0006Fx-MP for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:51 -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 26QFniXO026856; Tue, 26 Jul 2022 16:11:37 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9anxn19-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:37 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF2X5D006282; Tue, 26 Jul 2022 16:11:36 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2hu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:36 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTJ023334; Tue, 26 Jul 2022 16:11:35 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-36; Tue, 26 Jul 2022 16:11:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=eLKl1cpF1HINsl2amArCE04tfWdJ8MGhRXFnI18REuc=; b=C/QXjZeljkE/jwPlpaENjZPaaq5cLCWy7+kOK1B6+BVbAnAW6sqnROQVWePmBgK5kzoL 5oEKxay8e93u2diSIu84iOHv7Qe9UeMSERlJhHxBNPDneIq6iizcBv6jdx3cm09V11zz qVb62wdaNsdeiLibq+XMUcV30zU1BkzkRimktsblGwfR/OQ/l6nTxiPgRkYVe2/la4Lv Evr75rDLB3raZ7rQSu8On1r0zOHnCLPTBiCNUVyIUNHXy1pJ0FWrmAObQsIkIHETMpDv rvk0Ku6GlrKiX5+HbcjU3Fo9LsJJTCJZS6dQSqgtyGt56+qYRpEZI8eKs0TGJhgvdviQ WQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 35/46] vhost: reset vhost devices for cpr Date: Tue, 26 Jul 2022 09:10:32 -0700 Message-Id: <1658851843-236870-36-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: l93yUVNPZ_MdLw2yJr2agaT1Z0htXhZa X-Proofpoint-GUID: l93yUVNPZ_MdLw2yJr2agaT1Z0htXhZa Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854618646100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" A vhost device is implicitly preserved across re-exec because its fd is not closed, and the value of the fd is specified on the command line for the new qemu to find. However, new qemu issues an VHOST_RESET_OWNER ioctl, which fails because the device already has an owner. To fix, reset the owner prior to exec. Signed-off-by: Mark Kanda Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/virtio/vhost.c | 23 +++++++++++++++++++++++ include/hw/virtio/vhost.h | 1 + 2 files changed, 24 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 8d2a136..bc8df55 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -23,6 +23,7 @@ #include "standard-headers/linux/vhost_types.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-access.h" +#include "migration/misc.h" #include "migration/blocker.h" #include "migration/qemu-file-types.h" #include "sysemu/dma.h" @@ -1347,6 +1348,25 @@ static void vhost_virtqueue_cleanup(struct vhost_vir= tqueue *vq) } } =20 +static void vhost_cpr_exec_notifier(Notifier *notifier, void *data) +{ + MigrationState *s =3D data; + struct vhost_dev *dev; + int r; + + if (migrate_mode_of(s) =3D=3D MIG_MODE_CPR_EXEC) { + dev =3D container_of(notifier, struct vhost_dev, cpr_notifier); + if (migration_has_failed(s)) { + r =3D dev->vhost_ops->vhost_set_owner(dev); + } else { + r =3D dev->vhost_ops->vhost_reset_device(dev); + } + if (r < 0) { + VHOST_OPS_DEBUG(r, "vhost_reset_device failed"); + } + } +} + int vhost_dev_init(struct vhost_dev *hdev, void *opaque, VhostBackendType backend_type, uint32_t busyloop_timeou= t, Error **errp) @@ -1356,6 +1376,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, =20 hdev->vdev =3D NULL; hdev->migration_blocker =3D NULL; + hdev->cpr_notifier.notify =3D NULL; =20 r =3D vhost_set_backend_type(hdev, backend_type); assert(r >=3D 0); @@ -1446,6 +1467,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaq= ue, hdev->log_enabled =3D false; hdev->started =3D false; memory_listener_register(&hdev->memory_listener, &address_space_memory= ); + migration_add_notifier(&hdev->cpr_notifier, vhost_cpr_exec_notifier); QLIST_INSERT_HEAD(&vhost_devices, hdev, entry); =20 if (used_memslots > hdev->vhost_ops->vhost_backend_memslots_limit(hdev= )) { @@ -1482,6 +1504,7 @@ void vhost_dev_cleanup(struct vhost_dev *hdev) QLIST_REMOVE(hdev, entry); } migrate_del_blocker(&hdev->migration_blocker); + migration_remove_notifier(&hdev->cpr_notifier); g_free(hdev->mem); g_free(hdev->mem_sections); if (hdev->vhost_ops) { diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index a346f23..a12c4e1 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -101,6 +101,7 @@ struct vhost_dev { QLIST_ENTRY(vhost_dev) entry; QLIST_HEAD(, vhost_iommu) iommu_list; IOMMUNotifier n; + Notifier cpr_notifier; const VhostDevConfigOps *config_ops; }; =20 --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854676; cv=none; d=zohomail.com; s=zohoarc; b=hW8umT3UMol266kWO1IjKRYz8IDekXgITa+fJK+mJa4CbXRtScKIWeY6jfmRo3TpJS/LSn7xxkc4RMCZ0qVXhf8zDbCOzvhxFkN7J37N5C2KJRL4LhTLCHG0rJvoJ/fCMefQ7jmxQq1Y72cgi6D8gPCmNa31hhf4NtukSzesM6o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854676; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=0FXxfcuX+isM/WZ7So7KOzTnYv4rPmh6nZLqhSmQbwI=; b=MzYMRvTNNhPup5cMQmUddWRtss4p2GHBWhpEF1bbN8dJet1lwdJUK9bW2Vx6ueHb84zHCxPCZrZicvun8kTIYDGKd+xLFgEBUwTIZcBthRzJsqraXRkzmECZD7kCXGtByj345hAUxqrmfbIImJJdHztQ5jV2IPfRriPnJEhc5Uo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165885467661757.860617388001174; Tue, 26 Jul 2022 09:57:56 -0700 (PDT) Received: from localhost ([::1]:41084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNsZ-0001MD-HX for importer@patchew.org; Tue, 26 Jul 2022 12:57:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35380) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAD-0003hy-TR for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:05 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:45888) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAB-0006Gv-BZ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:05 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnQMm006253; Tue, 26 Jul 2022 16:11:39 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu40-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:39 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF5NqW006270; Tue, 26 Jul 2022 16:11:38 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2jv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:37 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTL023334; Tue, 26 Jul 2022 16:11:37 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-37; Tue, 26 Jul 2022 16:11:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=0FXxfcuX+isM/WZ7So7KOzTnYv4rPmh6nZLqhSmQbwI=; b=1CVgjzsXE8Wqw/jCRU1qEkL1+OWzkFEtold1Tj7d9VoJYJ+v5fPVmElUCXCD+/dNGXgm cxeiuAq6dGHdh0d/ifOXXGHFsbGkiIa91qac0pDWj+UpIT5bOgIN7zNzLQdOdf3vNBFo EtOgUxsJGOm9lQvAM1BR1RR7kFsECT0MWU3Ba5kcqczv3N0AN1uAoT8hdEpDlXrwjFJW Tutgs8lCTzJN86GpWb2WWPGlCArdVQ6+nS2y2Pu0iiNWVdApRYgPr9tBC2FhlL+zNbfC hAGU3Z6vK1OtfP5E6HufPN24rNwLcrAOrJUN2PQTrmrnzk5AuA5KCA7MGhEcxyfAJONl Jg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 36/46] chardev: cpr framework Date: Tue, 26 Jul 2022 09:10:33 -0700 Message-Id: <1658851843-236870-37-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: P3UQ7OklpxvNxfil2E3RfzqT6jGzXCrW X-Proofpoint-ORIG-GUID: P3UQ7OklpxvNxfil2E3RfzqT6jGzXCrW Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854679100100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add QEMU_CHAR_FEATURE_CPR for devices that support cpr-exec by preserving an open descriptor across exec. Add the chardev reopen-on-cpr option for devices that should be closed on cpr and reopened after exec. Enable cpr for a chardev if it has QEMU_CHAR_FEATURE_CPR and reopen-on-cpr is false. Allow cpr-save if either QEMU_CHAR_FEATURE_CPR or reopen-on-cpr is true for all chardevs in the configuration. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- chardev/char.c | 49 +++++++++++++++++++++++++++++++++++++++++++++-= --- include/chardev/char.h | 5 +++++ qapi/char.json | 7 ++++++- qemu-options.hx | 26 ++++++++++++++++++++++---- 4 files changed, 78 insertions(+), 9 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 0169d8d..01755d7 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -36,6 +36,8 @@ #include "qemu/help_option.h" #include "qemu/module.h" #include "qemu/option.h" +#include "migration/cpr-state.h" +#include "migration/blocker.h" #include "qemu/id.h" #include "qemu/coroutine.h" #include "qemu/yank.h" @@ -236,26 +238,55 @@ int qemu_chr_add_client(Chardev *s, int fd) static void qemu_char_open(Chardev *chr, ChardevBackend *backend, bool *be_opened, Error **errp) { + ERRP_GUARD(); + g_autofree char *fdname =3D NULL; + ChardevClass *cc =3D CHARDEV_GET_CLASS(chr); /* Any ChardevCommon member would work */ ChardevCommon *common =3D backend ? backend->u.null.data : NULL; + bool has_logfile =3D (common && common->has_logfile); + bool has_feature_cpr; =20 - if (common && common->has_logfile) { + if (has_logfile) { int flags =3D O_WRONLY; + fdname =3D g_strdup_printf("%s_log", chr->label); if (common->has_logappend && common->logappend) { flags |=3D O_APPEND; } else { flags |=3D O_TRUNC; } - chr->logfd =3D qemu_create(common->logfile, flags, 0666, errp); + chr->logfd =3D cpr_find_fd(fdname, 0); + if (chr->logfd < 0) { + chr->logfd =3D qemu_create(common->logfile, flags, 0666, errp); + } if (chr->logfd < 0) { return; } } =20 + chr->reopen_on_cpr =3D (common && common->reopen_on_cpr); + if (cc->open) { cc->open(chr, backend, be_opened, errp); + if (*errp) { + return; + } + } + + /* Evaluate this after the open method sets the feature */ + has_feature_cpr =3D qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_CPR); + chr->cpr_enabled =3D !chr->reopen_on_cpr && has_feature_cpr; + + if (!chr->reopen_on_cpr && !has_feature_cpr) { + chr->cpr_blocker =3D NULL; + error_setg(&chr->cpr_blocker, + "chardev %s -> %s does not allow cpr. See reopen-on-cpr.", + chr->label, chr->filename); + migrate_add_blockers(&chr->cpr_blocker, errp, MIG_MODE_CPR_EXEC, -= 1); + + } else if (chr->cpr_enabled && has_logfile) { + cpr_resave_fd(fdname, 0, chr->logfd); } } =20 @@ -297,11 +328,16 @@ static void char_finalize(Object *obj) if (chr->be) { chr->be->chr =3D NULL; } - g_free(chr->filename); - g_free(chr->label); if (chr->logfd !=3D -1) { + g_autofree char *fdname =3D g_strdup_printf("%s_log", chr->label); + if (chr->cpr_enabled) { + cpr_delete_fd(fdname, 0); + } close(chr->logfd); } + migrate_del_blocker(&chr->cpr_blocker); + g_free(chr->filename); + g_free(chr->label); qemu_mutex_destroy(&chr->chr_write_lock); } =20 @@ -501,6 +537,8 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevCommo= n *backend) =20 backend->has_logappend =3D true; backend->logappend =3D qemu_opt_get_bool(opts, "logappend", false); + + backend->reopen_on_cpr =3D qemu_opt_get_bool(opts, "reopen-on-cpr", fa= lse); } =20 static const ChardevClass *char_get_class(const char *driver, Error **errp) @@ -942,6 +980,9 @@ QemuOptsList qemu_chardev_opts =3D { },{ .name =3D "abstract", .type =3D QEMU_OPT_BOOL, + },{ + .name =3D "reopen-on-cpr", + .type =3D QEMU_OPT_BOOL, #endif }, { /* end of list */ } diff --git a/include/chardev/char.h b/include/chardev/char.h index a319b5f..bbf2560 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -50,6 +50,8 @@ typedef enum { /* Whether the gcontext can be changed after calling * qemu_chr_be_update_read_handlers() */ QEMU_CHAR_FEATURE_GCONTEXT, + /* Whether the device supports cpr */ + QEMU_CHAR_FEATURE_CPR, =20 QEMU_CHAR_FEATURE_LAST, } ChardevFeature; @@ -67,6 +69,9 @@ struct Chardev { int be_open; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; + bool reopen_on_cpr; + bool cpr_enabled; + Error *cpr_blocker; GSource *gsource; GMainContext *gcontext; DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST); diff --git a/qapi/char.json b/qapi/char.json index 923dc50..0c3558e 100644 --- a/qapi/char.json +++ b/qapi/char.json @@ -204,12 +204,17 @@ # @logfile: The name of a logfile to save output # @logappend: true to append instead of truncate # (default to false to truncate) +# @reopen-on-cpr: if true, close device's fd on cpr-save and reopen it aft= er +# cpr-exec. Set this to allow CPR on a device that does not +# support QEMU_CHAR_FEATURE_CPR. defaults to false. +# since 7.1. # # Since: 2.6 ## { 'struct': 'ChardevCommon', 'data': { '*logfile': 'str', - '*logappend': 'bool' } } + '*logappend': 'bool', + '*reopen-on-cpr': 'bool' } } =20 ## # @ChardevFile: diff --git a/qemu-options.hx b/qemu-options.hx index 3ed9270..ea79afa 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3295,43 +3295,57 @@ DEFHEADING(Character device options:) =20 DEF("chardev", HAS_ARG, QEMU_OPTION_chardev, "-chardev help\n" - "-chardev null,id=3Did[,mux=3Don|off][,logfile=3DPATH][,logappend=3Don= |off]\n" + "-chardev null,id=3Did[,mux=3Don|off][,logfile=3DPATH][,logappend=3Don= |off][,reopen-on-cpr=3Don|off]\n" "-chardev socket,id=3Did[,host=3Dhost],port=3Dport[,to=3Dto][,ipv4=3Do= n|off][,ipv6=3Don|off][,nodelay=3Don|off]\n" " [,server=3Don|off][,wait=3Don|off][,telnet=3Don|off][,websoc= ket=3Don|off][,reconnect=3Dseconds][,mux=3Don|off]\n" - " [,logfile=3DPATH][,logappend=3Don|off][,tls-creds=3DID][,tls= -authz=3DID] (tcp)\n" + " [,logfile=3DPATH][,logappend=3Don|off][,tls-creds=3DID][,tls= -authz=3DID][,reopen-on-cpr=3Don|off] (tcp)\n" "-chardev socket,id=3Did,path=3Dpath[,server=3Don|off][,wait=3Don|off]= [,telnet=3Don|off][,websocket=3Don|off][,reconnect=3Dseconds]\n" - " [,mux=3Don|off][,logfile=3DPATH][,logappend=3Don|off][,abstr= act=3Don|off][,tight=3Don|off] (unix)\n" + " [,mux=3Don|off][,logfile=3DPATH][,logappend=3Don|off][,abstr= act=3Don|off][,tight=3Don|off][,reopen-on-cpr=3Don|off] (unix)\n" "-chardev udp,id=3Did[,host=3Dhost],port=3Dport[,localaddr=3Dlocaladdr= ]\n" " [,localport=3Dlocalport][,ipv4=3Don|off][,ipv6=3Don|off][,mu= x=3Don|off]\n" - " [,logfile=3DPATH][,logappend=3Don|off]\n" + " [,logfile=3DPATH][,logappend=3Don|off][,reopen-on-cpr=3Don|o= ff]\n" "-chardev msmouse,id=3Did[,mux=3Don|off][,logfile=3DPATH][,logappend= =3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev vc,id=3Did[[,width=3Dwidth][,height=3Dheight]][[,cols=3Dcols= ][,rows=3Drows]]\n" " [,mux=3Don|off][,logfile=3DPATH][,logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev ringbuf,id=3Did[,size=3Dsize][,logfile=3DPATH][,logappend=3D= on|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev file,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH][,lo= gappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev pipe,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH][,lo= gappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" #ifdef _WIN32 "-chardev console,id=3Did[,mux=3Don|off][,logfile=3DPATH][,logappend= =3Don|off]\n" "-chardev serial,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH][,= logappend=3Don|off]\n" #else "-chardev pty,id=3Did[,mux=3Don|off][,logfile=3DPATH][,logappend=3Don|= off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev stdio,id=3Did[,mux=3Don|off][,signal=3Don|off][,logfile=3DPA= TH][,logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" #endif #ifdef CONFIG_BRLAPI "-chardev braille,id=3Did[,mux=3Don|off][,logfile=3DPATH][,logappend= =3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" #endif #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \ || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__Dragon= Fly__) "-chardev serial,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH][,= logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev tty,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH][,log= append=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" #endif #if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) "-chardev parallel,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH]= [,logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev parport,id=3Did,path=3Dpath[,mux=3Don|off][,logfile=3DPATH][= ,logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" #endif #if defined(CONFIG_SPICE) "-chardev spicevmc,id=3Did,name=3Dname[,debug=3Ddebug][,logfile=3DPATH= ][,logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" "-chardev spiceport,id=3Did,name=3Dname[,debug=3Ddebug][,logfile=3DPAT= H][,logappend=3Don|off]\n" + " [,reopen-on-cpr=3Don|off]\n" #endif , QEMU_ARCH_ALL ) @@ -3406,6 +3420,10 @@ The general form of a character device option is: ``logappend`` option controls whether the log file will be truncated or appended to when opened. =20 + Every backend supports the ``reopen-on-cpr`` option. If on, the + devices's descriptor is closed during cpr save, and reopened after exe= c. + This is useful for devices that do not support cpr. + The available backends are: =20 ``-chardev null,id=3Did`` --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854967; cv=none; d=zohomail.com; s=zohoarc; b=iNTf7Mif8Zdppair3sKPkLmAcklRMq86NZBRstfyyV9Q5o8grSNJ18ZdGRwsk4EVnFBIalc9DWLb2uaekhqFc4ttam/RdZAfJl800RME0H9oV1XcvY5PsuBE0rQhzq5JSdEmKQG3ahNQ9ZzgOzhqS/TuXWdndj19RmHulzauvr0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854967; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FdjfbToNENcHoYA83g7aexkqA3oeeEMO7cPYRQj8ZGw=; b=Kiho47sO0cnEZUP6IfEDRmO/INVQEP6KLz5X8fkaLRVw5Xv3oWPkdrvhIYJ8bL7619X6OEvMN/wZDUSp+FSV0aUqouBOrPcVHvIXLV8ge0X6eezkXUhXmuhB7avFZsQpwv9kZFOMjqZV+CB2Ult/84cXG4pTajT8CfGi93rcmyw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854967707582.4172533823505; Tue, 26 Jul 2022 10:02:47 -0700 (PDT) Received: from localhost ([::1]:48990 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNxF-0007Hw-Qd for importer@patchew.org; Tue, 26 Jul 2022 13:02:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA1-0003JE-PD for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:53 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:1398) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGN9z-0006GO-Im for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:53 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnLSW026363; Tue, 26 Jul 2022 16:11:40 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg94gevyn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:39 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF22xG006237; Tue, 26 Jul 2022 16:11:39 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2kv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:39 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTN023334; Tue, 26 Jul 2022 16:11:38 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-38; Tue, 26 Jul 2022 16:11:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2022-7-12; bh=FdjfbToNENcHoYA83g7aexkqA3oeeEMO7cPYRQj8ZGw=; b=u8oXxhSl26NuBXwroxpNQx/VC7snH9HpJpxXTtJoikSbwaSUrfZO3DLOcykU/DB+Ki07 T2sNrcS3eLy2Kz1A8CAM8IPmzGo/P3uvvyCDcfWrX5jLLWy5xroh59QQJERz0u0M6eM0 tK1mUC+MsTI8fdDLLoYur8ZnZV8QIHzwAqUpOeLALA9/YbYK8xcPizYzk71Iz9JUwl9d 75/Vi1yqf8i6rsKqvgPcDQ4eF7GNUTSdlFNWZ0qxoqFVet945ApA+FvbsqzbfWe8P+RK MRPBc3wkSSlsuYYYK4ySjGghqJuCmVtZvRrVwZ4Q+nPJjCfMXhM5ggWty+F65h+noTWf qQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 37/46] chardev: cpr for simple devices Date: Tue, 26 Jul 2022 09:10:34 -0700 Message-Id: <1658851843-236870-38-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: CuSK1GkKfdIACEotwsCtrNY_1QFMFhPu X-Proofpoint-ORIG-GUID: CuSK1GkKfdIACEotwsCtrNY_1QFMFhPu Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854968521100001 Set QEMU_CHAR_FEATURE_CPR for devices that trivially support cpr-exec. char-stdio is slightly less trivial. Allow the gdb server by closing it on exec. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- MAINTAINERS | 1 + chardev/char-mux.c | 1 + chardev/char-null.c | 1 + chardev/char-serial.c | 1 + chardev/char-stdio.c | 31 +++++++++++++++++++++++++++++++ gdbstub.c | 1 + stubs/meson.build | 1 + stubs/migration.c | 33 +++++++++++++++++++++++++++++++++ 8 files changed, 70 insertions(+) create mode 100644 stubs/migration.c diff --git a/MAINTAINERS b/MAINTAINERS index 3af099a..b93b0bb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3038,6 +3038,7 @@ F: tests/qtest/migration-test.c F: docs/devel/migration.rst F: qapi/migration.json F: tests/migration/ +F: stubs/migration.c =20 D-Bus M: Marc-Andr=C3=A9 Lureau diff --git a/chardev/char-mux.c b/chardev/char-mux.c index ee2d47b..d47fa31 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -337,6 +337,7 @@ static void qemu_chr_open_mux(Chardev *chr, */ *be_opened =3D muxes_opened; qemu_chr_fe_init(&d->chr, drv, errp); + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); } =20 static void qemu_chr_parse_mux(QemuOpts *opts, ChardevBackend *backend, diff --git a/chardev/char-null.c b/chardev/char-null.c index 1c6a290..02acaff 100644 --- a/chardev/char-null.c +++ b/chardev/char-null.c @@ -32,6 +32,7 @@ static void null_chr_open(Chardev *chr, Error **errp) { *be_opened =3D false; + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); } =20 static void char_null_class_init(ObjectClass *oc, void *data) diff --git a/chardev/char-serial.c b/chardev/char-serial.c index 4b0b83d..7aa2042 100644 --- a/chardev/char-serial.c +++ b/chardev/char-serial.c @@ -277,6 +277,7 @@ static void qmp_chardev_open_serial(Chardev *chr, } tty_serial_init(fd, 115200, 'N', 8, 1); =20 + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); qemu_chr_open_fd(chr, fd, fd); } #endif /* __linux__ || __sun__ */ diff --git a/chardev/char-stdio.c b/chardev/char-stdio.c index 3c64867..7a96bdc 100644 --- a/chardev/char-stdio.c +++ b/chardev/char-stdio.c @@ -27,6 +27,7 @@ #include "qemu/option.h" #include "qemu/sockets.h" #include "qapi/error.h" +#include "migration/misc.h" #include "chardev/char.h" =20 #ifdef _WIN32 @@ -40,19 +41,46 @@ #ifndef _WIN32 /* init terminal so that we can grab keys */ static struct termios oldtty; +static struct termios newtty; static int old_fd0_flags; +static int new_fd0_flags; static bool stdio_in_use; static bool stdio_allow_signal; static bool stdio_echo_state; +static Notifier cpr_notifier; =20 static void term_exit(void) { if (stdio_in_use) { + tcgetattr(0, &newtty); + new_fd0_flags =3D fcntl(0, F_GETFL); + tcsetattr(0, TCSANOW, &oldtty); fcntl(0, F_SETFL, old_fd0_flags); } } =20 +static void term_reenter(void) +{ + if (stdio_in_use) { + tcsetattr(0, TCSANOW, &newtty); + fcntl(0, F_SETFL, new_fd0_flags); + } +} + +static void term_cpr_exec_notifier(Notifier *notifier, void *data) +{ + MigrationState *s =3D data; + + if (migrate_mode_of(s) =3D=3D MIG_MODE_CPR_EXEC) { + if (migration_has_finished(s)) { + term_exit(); + } else if (migration_has_failed(s)) { + term_reenter(); + } + } +} + static void qemu_chr_set_echo_stdio(Chardev *chr, bool echo) { struct termios tty; @@ -117,6 +145,8 @@ static void qemu_chr_open_stdio(Chardev *chr, =20 stdio_allow_signal =3D !opts->has_signal || opts->signal; qemu_chr_set_echo_stdio(chr, false); + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); + migration_add_notifier(&cpr_notifier, term_cpr_exec_notifier); } #endif =20 @@ -147,6 +177,7 @@ static void char_stdio_finalize(Object *obj) { #ifndef _WIN32 term_exit(); + migration_remove_notifier(&cpr_notifier); #endif } =20 diff --git a/gdbstub.c b/gdbstub.c index cf869b1..08b3d80 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -3616,6 +3616,7 @@ int gdbserver_start(const char *device) mon_chr =3D gdbserver_state.mon_chr; reset_gdbserver_state(); } + mon_chr->reopen_on_cpr =3D true; =20 create_processes(&gdbserver_state); =20 diff --git a/stubs/meson.build b/stubs/meson.build index 392b1b5..a1eda95 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -27,6 +27,7 @@ if libaio.found() stub_ss.add(files('linux-aio.c')) endif stub_ss.add(files('migr-blocker.c')) +stub_ss.add(files('migration.c')) stub_ss.add(files('module-opts.c')) stub_ss.add(files('monitor.c')) stub_ss.add(files('monitor-core.c')) diff --git a/stubs/migration.c b/stubs/migration.c new file mode 100644 index 0000000..f2f79bd --- /dev/null +++ b/stubs/migration.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "migration/misc.h" + +void migration_add_notifier(Notifier *notify, + void (*cb)(Notifier *notifier, void *data)) +{ +} + +void migration_remove_notifier(Notifier *notify) +{ +} + +bool migration_has_finished(MigrationState *s) +{ + return false; +} + +bool migration_has_failed(MigrationState *s) +{ + return false; +} + +MigMode migrate_mode_of(MigrationState *s) +{ + return 0; +} --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853106; cv=none; d=zohomail.com; s=zohoarc; b=V0Uzw3PVRQeo0aqTUbpoKD/JMVOLvm+2N2jAMSy+h1p2NvGXteAQ3+1UroFptXFuA2Xc3vxcTY/Twadxe34az0QDy92hKlq8Y9qZZM1tcRbUoJ3KDUySfXG/nqd4IfRCgru+jDkEx2EHu/S55SFuVRpKcvpIP1fh1FkyW25eCXQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853106; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=d9YQm01zhlAKelUEkg9PtJXEYEmRHSGN1zF3T3YRxfM=; b=lAwg4mbRCh3buhf4tVALAeTOA9GnyN5R2fBu9qA8lhvmK2TKa7WeYEg9UiG+x/c+jMQrEFTJUbrIhU2L5/jc5REZTCoZLq7dK1NQTsAVtAtRqTIh9zUOaj/46m/zedOqTgx5YBYYPu76Ez1+3oxmyjACoFpIdjBAU8GG0LTaInw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853106864930.3790598308858; Tue, 26 Jul 2022 09:31:46 -0700 (PDT) Received: from localhost ([::1]:53210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNTF-0003b7-Ld for importer@patchew.org; Tue, 26 Jul 2022 12:31:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35280) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA4-0003PH-Di for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:56 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:7536) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA2-0006H4-2g for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:11:56 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnMFT026393; Tue, 26 Jul 2022 16:11:41 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg94gevyq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:41 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEvo8D006379; Tue, 26 Jul 2022 16:11:40 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2n2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:40 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTP023334; Tue, 26 Jul 2022 16:11:39 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-39; Tue, 26 Jul 2022 16:11:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=d9YQm01zhlAKelUEkg9PtJXEYEmRHSGN1zF3T3YRxfM=; b=M+H9KG06P5gI9zuvfZNWGVNIiwZALyo5z4Kjz4a+HhHNB2yjAKQWZisu9gxdgmUCtfKT 63/S6Qn9fkwDgqBl6hJXODGipiiNwMtfBygkVpKFlPo2udoiNxTM22MdicSa8c2azDxx sEGJybUolfaP6CWzTYJWmdjsDeFXvC5KyCJK2leITVUa5UYCYEOwLKPQZMR41QhdAK08 EbyLKgn2m4uUvN/GLWxZKSmdaHbB1dqQjMb5TBiQkXondCQwlsEjrWB0HH7ly0IWCj5l IZJ9hEXok3kWDi1WI4XnHtw5F7aox3TY/3GuIZPRRBe3/+7EeIqoW+shIZtyEgXcw7fL 4Q== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 38/46] chardev: cpr for pty Date: Tue, 26 Jul 2022 09:10:35 -0700 Message-Id: <1658851843-236870-39-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: SLolOr_Hi0kQxw921kyQZ2ptsCqaAJ9e X-Proofpoint-ORIG-GUID: SLolOr_Hi0kQxw921kyQZ2ptsCqaAJ9e Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853108841100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Save and restore pty descriptors across cpr-exec. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- chardev/char-pty.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/chardev/char-pty.c b/chardev/char-pty.c index 53f25c6..5707b13 100644 --- a/chardev/char-pty.c +++ b/chardev/char-pty.c @@ -29,6 +29,7 @@ #include "qemu/sockets.h" #include "qemu/error-report.h" #include "qemu/module.h" +#include "migration/cpr-state.h" #include "qemu/qemu-print.h" =20 #include "chardev/char-io.h" @@ -190,6 +191,9 @@ static void char_pty_finalize(Object *obj) Chardev *chr =3D CHARDEV(obj); PtyChardev *s =3D PTY_CHARDEV(obj); =20 + if (chr->cpr_enabled) { + cpr_delete_fd(chr->label, 0); + } pty_chr_state(chr, 0); object_unref(OBJECT(s->ioc)); pty_chr_timer_cancel(s); @@ -317,12 +321,20 @@ static void char_pty_open(Chardev *chr, char pty_name[PATH_MAX]; char *name; =20 + master_fd =3D cpr_find_fd(chr->label, 0); + if (master_fd >=3D 0) { + chr->filename =3D g_strdup_printf("pty:unknown"); + goto have_fd; + } + master_fd =3D qemu_openpty_raw(&slave_fd, pty_name); if (master_fd < 0) { error_setg_errno(errp, errno, "Failed to create PTY"); return; } - + if (chr->cpr_enabled) { + cpr_save_fd(chr->label, 0, master_fd); + } close(slave_fd); if (!g_unix_set_fd_nonblocking(master_fd, true, NULL)) { error_setg_errno(errp, errno, "Failed to set FD nonblocking"); @@ -333,6 +345,8 @@ static void char_pty_open(Chardev *chr, qemu_printf("char device redirected to %s (label %s)\n", pty_name, chr->label); =20 +have_fd: + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); s =3D PTY_CHARDEV(chr); s->ioc =3D QIO_CHANNEL(qio_channel_file_new_fd(master_fd)); name =3D g_strdup_printf("chardev-pty-%s", chr->label); --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658855477; cv=none; d=zohomail.com; s=zohoarc; b=BYrACkgPlt57Lcz1o0/l93AlNDsLnWrXH3+HUULWe/GziJaxrCFtBwxu8WHiRbQcih4y9bvTZpAOWVN4s9aQhnCAYTNq7ETtJC8VMY/IBnE+VaiEyUU+xcOQoqEjfQB4hXu24lCgH4O3aqppqkzIUUUdlu8H2sPJROaWbb/FvL0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658855477; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=TUmorKeflFpmI5VFZReXi35EpmdOkVvMmjfUaEiC4Ks=; b=Ul2/ONbs0ZiYzgdxIEt0sjjKMLQqIbPQV5ZoNGAtmxIxFKnB7qUzekCZjzRApqKzP8jvZLOdFVHaustDLkggXvr0Pgni2QmlBpFqewEpgFaEkMGjwKJsZjcH12Hz80sqtdTa2Fh9d+K8jSzOYxP18GaXAXQ/OavtmHADHVUKkYs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658855477402135.67511640344435; Tue, 26 Jul 2022 10:11:17 -0700 (PDT) Received: from localhost ([::1]:37036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGO5U-0002z5-BB for importer@patchew.org; Tue, 26 Jul 2022 13:11:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNB5-0004gN-Om for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:59 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:25814) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNB2-0006OW-I1 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:58 -0400 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnE4S024578; Tue, 26 Jul 2022 16:11:43 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9hsq2p2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:42 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFAO7f006435; Tue, 26 Jul 2022 16:11:42 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2pc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:42 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTR023334; Tue, 26 Jul 2022 16:11:41 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-40; Tue, 26 Jul 2022 16:11:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=TUmorKeflFpmI5VFZReXi35EpmdOkVvMmjfUaEiC4Ks=; b=VE6bHdrV30FyRmPHjadTE1ZbC5vyFVd9mx6POXZWfhyfjEXVND/zm3gvsxussh6DxIRx hriDoGxGEslRSh5boHoW+anV3Mj2CBkLgX33keNnG1xAWmEQwkrczkR9BgTJGGgh71xf tHuSsaDROA4x7Mi23ctTX+WTCDueANzbqeWTndNCoPnVVuecMXEKYdUmHIvlttT58LwF fJsBm+XfMf9jYDW+K1zR6PXXYnn6665c/+Si7Or0VMxr13aZfA9pyRY7r6fDWUD/R1RC Ju8S6DH4EZlSCM56CCVpWvXpkP7EEej1MDqs1t7mGNZIBOcV/FWBWGGN9l6gp8n31mzv wg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 39/46] chardev: cpr for sockets Date: Tue, 26 Jul 2022 09:10:36 -0700 Message-Id: <1658851843-236870-40-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: OxNYsLM8uec00QlwhrlYauXQOd9TqHRn X-Proofpoint-GUID: OxNYsLM8uec00QlwhrlYauXQOd9TqHRn Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658855478150100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Save accepted socket fds before cpr-exec, and look for them after. Block cpr-exec if a socket enables the TLS or websocket option. Allow a monitor socket by closing it on exec. Signed-off-by: Mark Kanda Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- chardev/char-socket.c | 48 +++++++++++++++++++++++++++++++++++++++= ++++ include/chardev/char-socket.h | 1 + monitor/hmp.c | 3 +++ monitor/qmp.c | 4 ++++ 4 files changed, 56 insertions(+) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index dc4e218..f93bae8 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -26,6 +26,8 @@ #include "chardev/char.h" #include "io/channel-socket.h" #include "io/channel-websock.h" +#include "migration/blocker.h" +#include "migration/cpr-state.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "qemu/option.h" @@ -33,6 +35,7 @@ #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-sockets.h" #include "qemu/yank.h" +#include "sysemu/sysemu.h" =20 #include "chardev/char-io.h" #include "chardev/char-socket.h" @@ -358,6 +361,11 @@ static void tcp_chr_free_connection(Chardev *chr) SocketChardev *s =3D SOCKET_CHARDEV(chr); int i; =20 + if (chr->cpr_enabled) { + cpr_delete_fd(chr->label, 0); + } + migrate_del_blocker(&s->cpr_blocker); + if (s->read_msgfds_num) { for (i =3D 0; i < s->read_msgfds_num; i++) { close(s->read_msgfds[i]); @@ -923,6 +931,10 @@ static void tcp_chr_accept(QIONetListener *listener, QIO_CHANNEL(cioc)); } tcp_chr_new_client(chr, cioc); + + if (s->sioc && chr->cpr_enabled) { + cpr_resave_fd(chr->label, 0, s->sioc->fd); + } } =20 =20 @@ -1178,6 +1190,27 @@ static gboolean socket_reconnect_timeout(gpointer op= aque) return false; } =20 +static int load_char_socket_fd(Chardev *chr, Error **errp) +{ + ERRP_GUARD(); + SocketChardev *sockchar =3D SOCKET_CHARDEV(chr); + QIOChannelSocket *sioc; + const char *label =3D chr->label; + int fd =3D cpr_find_fd(label, 0); + + if (fd !=3D -1) { + sockchar =3D SOCKET_CHARDEV(chr); + sioc =3D qio_channel_socket_new_fd(fd, errp); + if (sioc) { + tcp_chr_accept(sockchar->listener, sioc, chr); + object_unref(OBJECT(sioc)); + } else { + error_prepend(errp, "could not restore socket for %s", label); + return -1; + } + } + return 0; +} =20 static int qmp_chardev_open_socket_server(Chardev *chr, bool is_telnet, @@ -1388,6 +1421,19 @@ static void qmp_chardev_open_socket(Chardev *chr, } s->registered_yank =3D true; =20 + if (!s->tls_creds && !s->is_websock) { + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); + } else if (!chr->reopen_on_cpr) { + s->cpr_blocker =3D NULL; + error_setg(&s->cpr_blocker, + "error: socket %s is not cpr capable due to %s option", + chr->label, (s->tls_creds ? "TLS" : "websocket")); + if (migrate_add_blockers(&s->cpr_blocker, errp, MIG_MODE_CPR_EXEC, + -1)) { + return; + } + } + /* be isn't opened until we get a connection */ *be_opened =3D false; =20 @@ -1403,6 +1449,8 @@ static void qmp_chardev_open_socket(Chardev *chr, return; } } + + load_char_socket_fd(chr, errp); } =20 static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, diff --git a/include/chardev/char-socket.h b/include/chardev/char-socket.h index 0708ca6..1c3abf7 100644 --- a/include/chardev/char-socket.h +++ b/include/chardev/char-socket.h @@ -78,6 +78,7 @@ struct SocketChardev { bool connect_err_reported; =20 QIOTask *connect_task; + Error *cpr_blocker; }; typedef struct SocketChardev SocketChardev; =20 diff --git a/monitor/hmp.c b/monitor/hmp.c index 15ca047..75e6739 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1501,4 +1501,7 @@ void monitor_init_hmp(Chardev *chr, bool use_readline= , Error **errp) qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, monitor_r= ead, monitor_event, NULL, &mon->common, NULL, true= ); monitor_list_append(&mon->common); + + /* monitor cannot yet be preserved across cpr */ + chr->reopen_on_cpr =3D true; } diff --git a/monitor/qmp.c b/monitor/qmp.c index 092c527..0b3aac6 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -535,4 +535,8 @@ void monitor_init_qmp(Chardev *chr, bool pretty, Error = **errp) NULL, &mon->common, NULL, true); monitor_list_append(&mon->common); } + + /* Monitor cannot yet be preserved across cpr */ + chr->reopen_on_cpr =3D true; + chr->cpr_enabled =3D false; } --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854119; cv=none; d=zohomail.com; s=zohoarc; b=TtvsFvFDXFD1yMwEChRFdEu9h8VBdkZoz8uup7tbShdBoCYAvPmln8kxPccVqsoM8F8XIXTZCaApaPrc9b3f/+yyvga5Bt37zSe2vsQLkTS19EAz6rKLmkGMZ1CXmKq/ovA/Wr9bqTC4rp/0Zm6NsryXRTWs9XRqqaMRJ/W5MjU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854119; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=+5DZhvpcutXxTAh81Iz/WfPJurqpPUzxECoLcJTQsZo=; b=gmeurX8qXxKYVH3enWf3v3Ezq/2UD32PRNtAbD7uuFrQvlcQeTTblc4nYMSmt2u0U53+/1C9mk70eIOGQSta7OXAJ3+zIBIXtxFVIM2MQCi70cAl/PyG4FGcczlKI1Q4kS40jFkEQc8h2+/niiwbZEwlXJ95cmpAxLgW+MrpFmc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854119702921.7213627174071; Tue, 26 Jul 2022 09:48:39 -0700 (PDT) Received: from localhost ([::1]:52510 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNja-00060y-IU for importer@patchew.org; Tue, 26 Jul 2022 12:48:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35362) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAA-0003bv-5O for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:02 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:17754) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA6-0006Hq-HE for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:01 -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 26QFniXQ026856; Tue, 26 Jul 2022 16:11:45 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9anxn1s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:44 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEYQ1L006294; Tue, 26 Jul 2022 16:11:43 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2qw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:43 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTT023334; Tue, 26 Jul 2022 16:11:42 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-41; Tue, 26 Jul 2022 16:11:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=+5DZhvpcutXxTAh81Iz/WfPJurqpPUzxECoLcJTQsZo=; b=E3idDNG44Nz3gna2IrcHYeiRT+pc44sLIGjpZNu1meQknVbJcIC28rflckmNy+zg6wcS RLNxLbTAcHC7Ycothfy9u2mPJHnhtU/Fa9HD0zNa3znHUyqAvzfaNI39gJj8IgHikySn //rJdWQo10Tv5JWrb6U5vq7DY+YMXM0ykb+fWUI3Y7vjnPK1aOLO4KLriIFAwrdl6kX7 0dy2fKjlLx5qjnbvc2p7ONSuO/YGQ0Ku/lRW7tHjxjJO3MuX6WhsE2Xz8WGiBEZ5cYSV 3IUYWh4PjqdqNGdeNlvcJRobc1VAq2bwSCw9Mu2R/Tsm2DFMVJsMIptKmnisuH/burhY dQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 40/46] python/machine: QEMUMachine full_args Date: Tue, 26 Jul 2022 09:10:37 -0700 Message-Id: <1658851843-236870-41-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: 8xKFPvk9of0Pn7inhCv-HESGtA0hhQCn X-Proofpoint-GUID: 8xKFPvk9of0Pn7inhCv-HESGtA0hhQCn Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854120672100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Provide full_args() to return all command-line arguments used to start a vm, some of which are not otherwise visible to QEMUMachine clients. This is needed by the cpr test, which must start a vm, then pass all qemu command-line arguments when setting the cpr-exec-args migration parameter. Signed-off-by: Steve Sistare Acked-by: John Snow Reviewed-by: John Snow Tested-by: Michael Galaxy --- python/qemu/machine/machine.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py index 37191f4..d05950e 100644 --- a/python/qemu/machine/machine.py +++ b/python/qemu/machine/machine.py @@ -332,6 +332,11 @@ def args(self) -> List[str]: """Returns the list of arguments given to the QEMU binary.""" return self._args =20 + @property + def full_args(self) -> List[str]: + """Returns the full list of arguments used to launch QEMU.""" + return list(self._qemu_full_args) + def _pre_launch(self) -> None: if self._console_set: self._remove_files.append(self._console_address) --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854638; cv=none; d=zohomail.com; s=zohoarc; b=F16aj7b1eE/f78uRxBC1N+jOL0kG21qAfa2uBz9swFaPfAB9TEijkPOJgEhET4en2xvsnZOp1DL8u78FIiemFHF2ku9jsXfFkzZFGmkO57ob80ZC390MANRI4uNvEPw7sWwP34vKb6X8pZnTus9QbPt6zi8qpow9giAF2L8IspI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854638; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=aR1MZlzjRbE/NI5sYu1+v+e2TS21eJrAYRi/imDMAmQ=; b=FhYYIuU1ubBubLBDG9geSTKjVGimiNFOBWlBR4c2Ps772d9kY2zC+r2TsANTAmG8FS3vMqTocxrdBytTAagbM+AFIJdMs/SnyhmAA8iXeEiU4H57tWzlWI+HXfdtzO0kcA0whmBceFuGS+QwBLjEmWmBJxIrenz/YRt9PHqOCvo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854638415363.5891895609808; Tue, 26 Jul 2022 09:57:18 -0700 (PDT) Received: from localhost ([::1]:40888 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNrw-0001DK-Mm for importer@patchew.org; Tue, 26 Jul 2022 12:57:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35418) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAH-0003ps-9t for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:09 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:55384) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAF-0006HZ-Ge for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:08 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3YY031760; Tue, 26 Jul 2022 16:11:46 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a4q1d9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:46 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF380m006266; Tue, 26 Jul 2022 16:11:45 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2sk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:45 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTV023334; Tue, 26 Jul 2022 16:11:44 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-42; Tue, 26 Jul 2022 16:11:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=aR1MZlzjRbE/NI5sYu1+v+e2TS21eJrAYRi/imDMAmQ=; b=qpfjQj3kPV4fYnTY+YexWjp9XXXDb+TJuhsafYc/PFrWDmexESowTDJ/7RSk4vCw4f4q 36lyKdP28ONzgVJocEjCC0/T8kS1Ev615VCEMVIyHsOo8khH22k0ppMO6X79rhlZXlYf Thd89RSFEmWoXEG+Vnmjdd2Zfi0BX9ubxnWa4fDk7oCWxLRkT+ZVMjHZXX0CBZZ8WyRr HKCLJBQTWRIs8FX/rsH01E2roPePdjY/NEmWC3Ad61Ee1tzhE03KUDXYtw+XoWHii7y6 IBsf9jfZo4lS9X1EfB0UvR0N+TU7MvVPYF08wqyBnaZVreGKYxrjc0DgFboCgWc3oF9d EQ== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 41/46] python/machine: QEMUMachine reopen_qmp_connection Date: Tue, 26 Jul 2022 09:10:38 -0700 Message-Id: <1658851843-236870-42-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: qUFCzoujNTdUgvQFHBeK9bHy1nH4RlYt X-Proofpoint-GUID: qUFCzoujNTdUgvQFHBeK9bHy1nH4RlYt Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854640613100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Provide reopen_qmp_connection() to reopen a closed monitor connection. This is needed by cpr, because qemu exec closes the monitor socket. Signed-off-by: Steve Sistare Reviewed-by: John Snow Tested-by: Michael Galaxy --- python/qemu/machine/machine.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py index d05950e..60b934d 100644 --- a/python/qemu/machine/machine.py +++ b/python/qemu/machine/machine.py @@ -491,6 +491,15 @@ def _close_qmp_connection(self) -> None: finally: self._qmp_connection =3D None =20 + def reopen_qmp_connection(self): + self._close_qmp_connection() + self._qmp_connection =3D QEMUMonitorProtocol( + self._monitor_address, + server=3DTrue, + nickname=3Dself._name + ) + self._qmp.accept(self._qmp_timer) + def _early_cleanup(self) -> None: """ Perform any cleanup that needs to happen before the VM exits. --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854034; cv=none; d=zohomail.com; s=zohoarc; b=Jit+XuChSCb4Ugh3NVCK6oyABd+UKy1suoztylljCt3pjm69xdx0MiPYjUpdlLlS9BnnB4J1nQr8Fh5we1Wgytg9rRmj5xFJ9e8x9t2DiTmUo39DdK6mKgDSm5Ojh1g9oZ8VtXOyRt16eSgOF/GYLiatqcqNfncMI3y2qzbJHiE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854034; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=gCFN+vkQnI4S420XG5KSD9WqDBxmdYUEBiWYi3C1Q8s=; b=nNtIwl3/scCeA9UrEG+x7nChbQ5NjPA02EwuBxe7JFrstF/SL7KajigyprFiasCJJFYzg/n89xIAuqI0VGlq2WhahP4ggmBTQQ+OvuLOhAwaShSZanxxlfGbcsN0T8Sy0axs9sZkdWSoY28tYQBu1cyEuyHjFVbvw42PCyXuuP4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854034153262.4404345511956; Tue, 26 Jul 2022 09:47:14 -0700 (PDT) Received: from localhost ([::1]:50248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNhr-0004J2-Ho for importer@patchew.org; Tue, 26 Jul 2022 12:46:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAL-0003tc-Er for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:17 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:64918) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAI-0006IO-Fp for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:12 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn3V5016260; Tue, 26 Jul 2022 16:11:48 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0xc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:47 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEhMpG006143; Tue, 26 Jul 2022 16:11:46 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2u0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:46 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTX023334; Tue, 26 Jul 2022 16:11:45 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-43; Tue, 26 Jul 2022 16:11:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=gCFN+vkQnI4S420XG5KSD9WqDBxmdYUEBiWYi3C1Q8s=; b=jzfLKJwuhUGVqEckBDCetXx9SEigsqX/jt6tUPs2tX2zz3tUD4GI4qwth/2PFwaitIOP hqip6m9sBTCqzD0opIZyTJOhiA+9gHOzlArZIQGmPhPhN7e2jgjlCqd7zd1M2jKIXK6U /r2HGpXw4pNdEFdUGG+AMXtWyVTDFnI9ppSf/EQNFYCz9uuWZxYGSk2N+mUUiWfh6407 vZFlfA9ug1SJzKwNcDvw+g7sNwsloSn2yS3xCIcwKIIh2MXQ4cczFdZRYkxJXAuM5D8A G3lYWpiX49moGtVswHIbbdOzPlz/iSizjp1qqowoalX7pthQ8KxoToZueSPCbHlP4IHn tg== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 42/46] tests/avocado: add cpr regression test Date: Tue, 26 Jul 2022 09:10:39 -0700 Message-Id: <1658851843-236870-43-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: 5_9P3XFYsEfAMI5B9txVuMhiz21gRpca X-Proofpoint-ORIG-GUID: 5_9P3XFYsEfAMI5B9txVuMhiz21gRpca Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854035233100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- MAINTAINERS | 1 + tests/avocado/cpr.py | 176 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 177 insertions(+) create mode 100644 tests/avocado/cpr.py diff --git a/MAINTAINERS b/MAINTAINERS index b93b0bb..adc1218 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3172,6 +3172,7 @@ F: stubs/cpr-state.c F: include/migration/cpr.h F: migration/cpr.c F: hw/vfio/cpr.c +F: tests/avocado/cpr.py =20 Record/replay M: Pavel Dovgalyuk diff --git a/tests/avocado/cpr.py b/tests/avocado/cpr.py new file mode 100644 index 0000000..11e1376 --- /dev/null +++ b/tests/avocado/cpr.py @@ -0,0 +1,176 @@ +# cpr test + +# Copyright (c) 2021, 2022 Oracle and/or its affiliates. +# +# This work is licensed under the terms of the GNU GPL, version 2. +# See the COPYING file in the top-level directory. + +import tempfile +from avocado_qemu import QemuSystemTest +from avocado.utils import wait + +class Cpr(QemuSystemTest): + """ + :avocado: tags=3Dcpr + """ + + timeout =3D 5 + fast_timeout =3D 1 + + @staticmethod + def has_status(vm, status, command): + return vm.command(command)['status'] in status + + def wait_for_status(self, vm, status, command): + wait.wait_for(self.has_status, + timeout=3Dself.timeout, + step=3D0.1, + args=3D(vm,status,command,)) + + def wait_for_runstate(self, vm, status): + self.wait_for_status(vm, status, 'query-status') + + def wait_for_migration(self, vm, status): + self.wait_for_status(vm, status, 'query-migrate') + + def run_and_fail(self, vm, msg): + # Qemu will fail fast, so disable monitor to avoid timeout in acce= pt + vm.set_qmp_monitor(False) + vm.launch() + vm.wait(self.timeout) + self.assertRegex(vm.get_log(), msg) + + def get_vm_for_restart(self): + return self.get_vm('-nodefaults', + '-migrate-mode-enable', 'cpr-exec', + '-object', 'memory-backend-memfd,id=3Dpc.ram,si= ze=3D8M', + '-machine', 'memory-backend=3Dpc.ram') + + def do_cpr_exec(self, vmstate_name): + vm =3D self.get_vm_for_restart() + vm.launch() + + uri =3D 'file:' + vmstate_name + args =3D vm.full_args + ['-incoming', 'defer'] + + vm.command('migrate-set-parameters', cpr_exec_args=3Dargs) + vm.command('migrate-set-parameters', mode=3D'cpr-exec') + vm.qmp('migrate', uri=3Duri) + + # Cannot poll for migration status, because qemu may call execv be= fore + # we see it. Wait for STOP instead. + vm.event_wait(name=3D'STOP', timeout=3Dself.fast_timeout) + + # Migrate execs and closes the monitor socket, so reopen it. + vm.reopen_qmp_connection() + + self.assertEqual(vm.command('query-status')['status'], 'inmigrate') + resp =3D vm.command('migrate-incoming', uri=3Duri) + self.wait_for_migration(vm, ('completed', 'failed')) + self.assertEqual(vm.command('query-migrate')['status'], 'completed= ') + + resp =3D vm.command('cont') + vm.event_wait(name=3D'RESUME', timeout=3Dself.fast_timeout) + self.assertEqual(vm.command('query-status')['status'], 'running') + + def do_cpr_reboot(self, vmstate_name): + args =3D ['-nodefaults', '-migrate-mode-enable', 'cpr-reboot' ] + old_vm =3D self.get_vm(*args) + old_vm.launch() + + uri =3D 'file:' + vmstate_name + + old_vm.command('migrate-set-capabilities', capabilities =3D [ + { "capability": "x-ignore-shared", "state": True }]) + old_vm.command('migrate-set-parameters', mode=3D'cpr-reboot') + old_vm.qmp('migrate', uri=3Duri) + self.wait_for_migration(old_vm, ('completed', 'failed')) + self.assertEqual(old_vm.command('query-migrate')['status'], + 'completed') + self.assertEqual(old_vm.command('query-status')['status'], + 'postmigrate') + + args =3D args + ['-incoming', 'defer'] + new_vm =3D self.get_vm(*args) + new_vm.launch() + self.assertEqual(new_vm.command('query-status')['status'], 'inmigr= ate') + + new_vm.command('migrate-set-capabilities', capabilities =3D [ + { "capability": "x-ignore-shared", "state": True }]) + new_vm.command('migrate-set-parameters', mode=3D'cpr-reboot') + new_vm.command('migrate-incoming', uri=3Duri) + self.wait_for_migration(new_vm, ('completed', 'failed')) + self.assertEqual(new_vm.command('query-migrate')['status'], 'compl= eted') + + new_vm.command('cont') + new_vm.event_wait(name=3D'RESUME', timeout=3Dself.fast_timeout) + self.assertEqual(new_vm.command('query-status')['status'], 'runnin= g') + + def test_cpr_exec(self): + """ + Verify that cpr restart mode works + """ + with tempfile.NamedTemporaryFile() as vmstate_file: + self.do_cpr_exec(vmstate_file.name) + + def test_cpr_reboot(self): + """ + Verify that cpr reboot mode works + """ + with tempfile.NamedTemporaryFile() as vmstate_file: + self.do_cpr_reboot(vmstate_file.name) + + def test_cpr_block_cpr_exec(self): + """ + Verify that qemu rejects cpr restart mode for volatile memory + """ + + vm =3D self.get_vm('-nodefaults', + '-migrate-mode-enable', 'cpr-exec') + vm.launch() + uri=3D'file:/dev/null' + args =3D vm.full_args + ['-S'] + resp =3D vm.command('migrate-set-parameters', mode=3D'cpr-exec') + rsp =3D vm.qmp('migrate', uri=3Duri) + vm.qmp('quit') + + expect =3D r'Memory region .* is volatile' + self.assertRegex(rsp['error']['desc'], expect) + + def test_cpr_block_memfd(self): + + """ + Verify that qemu complains for only-cpr-capable and volatile memory + """ + vm =3D self.get_vm('-nodefaults', + '-migrate-mode-enable', 'cpr-exec', + '-only-cpr-capable') + self.run_and_fail(vm, r'only-cpr-capable specified.* Memory ') + + def test_cpr_block_replay(self): + """ + Verify that qemu complains for only-cpr-capable and replay + """ + vm =3D self.get_vm_for_restart() + vm.add_args('-only-cpr-capable', + '-icount', 'shift=3D10,rr=3Drecord,rrfile=3D/dev/null') + self.run_and_fail(vm, r'only-cpr-capable specified.* replay ') + + def test_cpr_block_chardev(self): + """ + Verify that qemu complains for only-cpr-capable and unsupported ch= ardev + """ + vm =3D self.get_vm_for_restart() + vm.add_args('-only-cpr-capable', + '-chardev', 'vc,id=3Dvc1') + self.run_and_fail(vm, r'only-cpr-capable specified.* vc1 ') + + def test_cpr_allow_chardev(self): + """ + Verify that qemu allows unsupported chardev with reopen-on-cpr + """ + vm =3D self.get_vm_for_restart() + vm.add_args('-only-cpr-capable', + '-chardev', 'vc,id=3Dvc1,reopen-on-cpr=3Don') + vm.launch() + self.wait_for_runstate(vm, ('running')) --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854979; cv=none; d=zohomail.com; s=zohoarc; b=Ny1ljaOo/E3ON/gLloIy43PqChZPe9X3CTfFxaFybGYrshyX0oM0W85+/8m4hGht4iECq+f7YZUNznv6viWX4AVQa0fiLL2nOaTt/seX8Zi2C0NLiSsRph1ebGgBMUk0ynAEzMXP+z7BLxt+vSRDHUdGUf/hllFeq2GSy0JVnMM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854979; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=XWPoP8C9iiQogi/HZHyZoI/o3z4hkHqPOgmaMM3RQJo=; b=mxB5nwnzuwVs9uZoBCInrx6QfWIAJSK5FE9LZ3DmT/ACVBIzBn86bkITUpcda7PJAzV5emOeMrJVG/VDf6fnxE+R3vkmfhPOnphZdlNU4EfktM/HnRd6L7qkmljI2GO5ng46DcpGLtW9jRQlMt+lwUHCCq9rltff9cpSwWUSSdI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854979829677.1918797571656; Tue, 26 Jul 2022 10:02:59 -0700 (PDT) Received: from localhost ([::1]:49338 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNxS-0007WT-EX for importer@patchew.org; Tue, 26 Jul 2022 13:02:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35434) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAI-0003qf-7O for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:10 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:58864) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAF-0006Ho-T6 for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:09 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnPkc006246; Tue, 26 Jul 2022 16:11:49 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu4t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:49 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF380q006266; Tue, 26 Jul 2022 16:11:48 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2vh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:48 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTZ023334; Tue, 26 Jul 2022 16:11:47 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-44; Tue, 26 Jul 2022 16:11:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=XWPoP8C9iiQogi/HZHyZoI/o3z4hkHqPOgmaMM3RQJo=; b=SUPpMJjTWZUktLVcIFGQ2kthf+c+sQrAB+nzpqD4gpX1UeurdUugWOTNc8qQ+6TMRGoh rjnNDOWNFQQqd+UMO5Kgpdi82OH0lHqS/qZIbroeHZz3wy7FoFafFWMc+TDdlQ94sbY5 rpWUP3ChtCDZOzWJ2M9GnjeQMyVD8ONg2BQvcXTPjbirsmgDP1+dIDVY7ABpUFYresyU 2DG6nqSDMl2Ms5FXXvhqJ3iSPQztxvyNGiChjHMMNwHBEEqsB6JiK4GiAp2T9RCQLJfd 10pOX9bhMlIsrnaxqqllZRDKEwFJhj/PAIeb6mnB03fCiPr9coG4KL0PQNuQeckwCfXL HA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 43/46] vl: start on wakeup request Date: Tue, 26 Jul 2022 09:10:40 -0700 Message-Id: <1658851843-236870-44-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: bDDl62MBzZCbuvASfcHkUpWkqpDpG9Tn X-Proofpoint-ORIG-GUID: bDDl62MBzZCbuvASfcHkUpWkqpDpG9Tn Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854980950100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If qemu starts and loads a VM in the suspended state, then a later wakeup request will set the state to running, which is not sufficient to initialize the vm, as vm_start was never called during this invocation of qemu. See qemu_system_wakeup_request(). Define the start_on_wakeup_requested() hook to cause vm_start() to be called when processing the wakeup request. This will be called in a subsequent migration patch. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/sysemu/runstate.h | 1 + softmmu/runstate.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h index a5f0738..cfcdbf5 100644 --- a/include/sysemu/runstate.h +++ b/include/sysemu/runstate.h @@ -57,6 +57,7 @@ void qemu_system_reset_request(ShutdownCause reason); void qemu_system_suspend_request(void); void qemu_register_suspend_notifier(Notifier *notifier); bool qemu_wakeup_suspend_enabled(void); +void qemu_system_start_on_wakeup_request(void); void qemu_system_wakeup_request(WakeupReason reason, Error **errp); void qemu_system_wakeup_enable(WakeupReason reason, bool enabled); void qemu_register_wakeup_notifier(Notifier *notifier); diff --git a/softmmu/runstate.c b/softmmu/runstate.c index fb86740..c7db5ac 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -338,6 +338,7 @@ void vm_state_notify(bool running, RunState state) } } =20 +static bool start_on_wakeup_requested; static ShutdownCause reset_requested; static ShutdownCause shutdown_requested; static int shutdown_signal; @@ -571,6 +572,11 @@ void qemu_register_suspend_notifier(Notifier *notifier) notifier_list_add(&suspend_notifiers, notifier); } =20 +void qemu_system_start_on_wakeup_request(void) +{ + start_on_wakeup_requested =3D true; +} + void qemu_system_wakeup_request(WakeupReason reason, Error **errp) { trace_system_wakeup_request(reason); @@ -583,7 +589,14 @@ void qemu_system_wakeup_request(WakeupReason reason, E= rror **errp) if (!(wakeup_reason_mask & (1 << reason))) { return; } - runstate_set(RUN_STATE_RUNNING); + + if (start_on_wakeup_requested) { + start_on_wakeup_requested =3D false; + vm_start(); + } else { + runstate_set(RUN_STATE_RUNNING); + } + wakeup_reason =3D reason; qemu_notify_event(); } --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658853719; cv=none; d=zohomail.com; s=zohoarc; b=Kan1wns9R4KPVqkFpO9PQXLYpU7bexY1pg8naoTgAm7z52ittKByhrOSBRMw42EZNWfPnht1cF09DjFTpQ3aNAH3qtmyDWbcUEpCiGT3NkvB0cWnsICSizYZw1jTJn8aWEF1wdAc7O0fwesHNMus1HiVXcsw6qAD0qgnCsSplZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658853719; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=Q9REqTLqaxzuJbTQr14aek8V7TlG53PHONiCEnJyqgE=; b=eRE87+ToGH/78z5OhUG5PuZ6nli+f6NPIdxPgpL3SAHGV4Q6gD20ida5UWlClcwB2eu1txTWQjxL+kdgIwztLC1sbGG6p7hFdGzetXW6hyDXoX5blHDBJtFlILMudsZIhhgkNAAQPCfR+hPS9mVvjuTT5DsJqxOGZor8BmU89CI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658853719728565.0568556553387; Tue, 26 Jul 2022 09:41:59 -0700 (PDT) Received: from localhost ([::1]:41906 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNd8-0006zP-M9 for importer@patchew.org; Tue, 26 Jul 2022 12:41:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35466) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAJ-0003si-Hz for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:13 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:62632) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAH-0006IA-Jw for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:11 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFn4Re016276; Tue, 26 Jul 2022 16:11:50 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9a9f0xj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:50 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEbnNk006229; Tue, 26 Jul 2022 16:11:49 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2wx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:49 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTb023334; Tue, 26 Jul 2022 16:11:48 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-45; Tue, 26 Jul 2022 16:11:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=Q9REqTLqaxzuJbTQr14aek8V7TlG53PHONiCEnJyqgE=; b=MlaO5XVKNWGiGQ7yVHpkViJrv7Hzz0tkZur4lYGFvqS+bufpLICFHX7xbnAnaSFK3qyt wPLpg/KmwL1vOTNnha146y+C+xB6xzwun0j4GHRclnYiDOP4jx8C/tzRvvnrmSv7PG5E 1DZyFOrqcqM+8/ldmq4rV33YsmHGN4P2gUdUXdjpLavfcJptDS22ZTgWvMR2gTE/jT6T +Q0WoPk1E/xtwzL5fJMAvIBGrd0Od3BqFWFZDBNWUxrp7f1I/NY3Hltd28maSLZ660HX p0s00gc/AlbyahCg6uUEYNgI+NI/yJUcZ9XtOwvNkBl5l5lWmuRKOpa5Ea457FQf03+i jw== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 44/46] migration: fix suspended runstate Date: Tue, 26 Jul 2022 09:10:41 -0700 Message-Id: <1658851843-236870-45-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: oLZK3jPSA3hC8PoR32yDqyXY_4gpvKhl X-Proofpoint-ORIG-GUID: oLZK3jPSA3hC8PoR32yDqyXY_4gpvKhl Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658853722355100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Migration of a guest in the suspended state is broken. The incoming migration code automatically tries to wake the guest, which IMO is wrong -- the guest should end migration in the same state it started. Further, the wakeup attempt merely sets state to running but does not actually start the guest, as vm_start was never called during this invocation of qemu. To fix, leave the guest in the suspended state, but call qemu_system_start_on_wakeup_request() so the guest is properly resumed when the client sends a system_wakeup command. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- migration/migration.c | 11 ++++------- softmmu/runstate.c | 1 + 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index e0fc2b8..45eebea 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -568,6 +568,10 @@ static void process_incoming_migration_bh(void *opaque) vm_start(); } else { runstate_set(global_state_get_runstate()); + if (runstate_check(RUN_STATE_SUSPENDED)) { + /* Force vm_start to be called later. */ + qemu_system_start_on_wakeup_request(); + } } /* * This must happen after any state changes since as soon as an extern= al @@ -3273,7 +3277,6 @@ static int postcopy_start(MigrationState *ms) qemu_mutex_lock_iothread(); trace_postcopy_start_set_run(); =20 - qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL); global_state_store(); ret =3D vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); if (ret < 0) { @@ -3484,7 +3487,6 @@ static void migration_completion(MigrationState *s) if (s->state =3D=3D MIGRATION_STATUS_ACTIVE) { qemu_mutex_lock_iothread(); s->downtime_start =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); - qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL); s->vm_was_running =3D runstate_is_running(); ret =3D global_state_store(); =20 @@ -4285,11 +4287,6 @@ static void *bg_migration_thread(void *opaque) =20 qemu_mutex_lock_iothread(); =20 - /* - * If VM is currently in suspended state, then, to make a valid runsta= te - * transition in vm_stop_force_state() we need to wakeup it up. - */ - qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, NULL); s->vm_was_running =3D runstate_is_running(); =20 if (global_state_store()) { diff --git a/softmmu/runstate.c b/softmmu/runstate.c index c7db5ac..6ba0a4e 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -154,6 +154,7 @@ static const RunStateTransition runstate_transitions_de= f[] =3D { { RUN_STATE_RUNNING, RUN_STATE_SUSPENDED }, { RUN_STATE_SUSPENDED, RUN_STATE_RUNNING }, { RUN_STATE_SUSPENDED, RUN_STATE_FINISH_MIGRATE }, + { RUN_STATE_SUSPENDED, RUN_STATE_PAUSED }, { RUN_STATE_SUSPENDED, RUN_STATE_PRELAUNCH }, { RUN_STATE_SUSPENDED, RUN_STATE_COLO}, =20 --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658854408; cv=none; d=zohomail.com; s=zohoarc; b=EC4M7XFaH03lNCPwPb+GesyewuMq4dwvOmwnUIhKG40iRUzRaIbTX0e7EjDftMPnhFK0xzW3pcHL8ks1GFaw4clp71c9daHHVV/7zahcyRGG3pFvNtmYWZG8Sfcu7o19sEHasiflGn94o6phAM1bfi4ZwqdSO4crJZtgn4BFPPk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658854408; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=1E7ftBulZgssm0c+1j+B3FQeV63g9AVrf9VViVsrlOY=; b=evyGhOm32IkkUFwOKT0NRPJmzxRj6NlubvrI9sUTa2PXpP6HLD34ZrIyTT67FKd+siimBu3EY3/mjbEcqeqOdAV8qj25jLfVCiIvm0JfZKUExS3CHweJyApYtdtIQ12/D6hW3cvp7yJycOzoSSLaWuqKCCKDBY2qBLxn7A5fgn8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658854408721802.7783649041971; Tue, 26 Jul 2022 09:53:28 -0700 (PDT) Received: from localhost ([::1]:60686 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGNoF-0003ic-Ld for importer@patchew.org; Tue, 26 Jul 2022 12:53:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35360) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAA-0003bA-KJ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:02 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:20128) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNA7-0006I4-JZ for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:01 -0400 Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnGQB024653; Tue, 26 Jul 2022 16:11:51 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg9hsq2pt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:51 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QF2X5Q006282; Tue, 26 Jul 2022 16:11:50 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq2y9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:50 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTd023334; Tue, 26 Jul 2022 16:11:50 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-46; Tue, 26 Jul 2022 16:11:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=1E7ftBulZgssm0c+1j+B3FQeV63g9AVrf9VViVsrlOY=; b=hj4PkNEIqpfIU7ZNY0LMiLtSj4Vb/1oksPxwEYqYM9t5N4C6t4k1enKrBUiyx7+Wf0RR V6vlGJHe1TO5K78SN5lzTVJx0m/QmXNoOsoJnno8KEyTbL82CrK4nsbPgKB4JuMRC+Cj 9mkrGKOmd+qCObtnU9dY3OuHUhI4Wcgu79TOvEn4dHVyNT8B7/+5Mkky23p7FRHBVS6n C/O95mbKH2bkfZk/55W6QpSXgteAt8Uq6nXsztbiDKBNuF06d9I2A/znep2RKlc+RDts PquKxPeghj1Zd5zhlElKbzZkXhsdLwqegRWBeQNfYDfNrOT1BCYwy0+vpNwz7rcMBw8q TA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 45/46] migration: notifier error reporting Date: Tue, 26 Jul 2022 09:10:42 -0700 Message-Id: <1658851843-236870-46-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-ORIG-GUID: cS0bm9GNboYLNHekOh5eGvNjSnFAMcqd X-Proofpoint-GUID: cS0bm9GNboYLNHekOh5eGvNjSnFAMcqd Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=steven.sistare@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658854410776100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Provide migration_notifier_set_error(), which allows migration notifiers to return an error message indicating they have failed, which halts the migration. The error message is visible in the 'info migrate' command. No functional change until calls to migration_notifier_set_error are added. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- include/migration/misc.h | 3 ++- migration/migration.c | 31 +++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/include/migration/misc.h b/include/migration/misc.h index d4c2d7d..e5d8c81 100644 --- a/include/migration/misc.h +++ b/include/migration/misc.h @@ -63,7 +63,8 @@ bool migration_is_active(MigrationState *); void migration_add_notifier(Notifier *notify, void (*func)(Notifier *notifier, void *data)); void migration_remove_notifier(Notifier *notify); -void migration_call_notifiers(MigrationState *s); +int migration_call_notifiers(MigrationState *s); +void migration_notifier_set_error(MigrationState *s, Error *err); bool migration_in_setup(MigrationState *); bool migration_has_finished(MigrationState *); bool migration_has_failed(MigrationState *); diff --git a/migration/migration.c b/migration/migration.c index 45eebea..d477b58 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1924,6 +1924,8 @@ static void block_cleanup_parameters(MigrationState *= s) =20 static void migrate_fd_cleanup(MigrationState *s) { + bool already_failed; + qemu_bh_delete(s->cleanup_bh); s->cleanup_bh =3D NULL; =20 @@ -1973,7 +1975,15 @@ static void migrate_fd_cleanup(MigrationState *s) /* It is used on info migrate. We can't free it */ error_report_err(error_copy(s->error)); } - migration_call_notifiers(s); + + already_failed =3D migration_has_failed(s); + if (migration_call_notifiers(s)) { + if (!already_failed) { + migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED= ); + /* Notify again to recover from this late failure. */ + migration_call_notifiers(s); + } + } block_cleanup_parameters(s); cpr_exec(); yank_unregister_instance(MIGRATION_YANK_INSTANCE); @@ -2084,9 +2094,16 @@ void migration_remove_notifier(Notifier *notify) } } =20 -void migration_call_notifiers(MigrationState *s) +int migration_call_notifiers(MigrationState *s) { notifier_list_notify(&migration_state_notifiers, s); + return (s->error !=3D NULL); +} + +void migration_notifier_set_error(MigrationState *s, Error *err) +{ + migrate_set_error(s, err); + error_report_err(err); } =20 bool migration_in_setup(MigrationState *s) @@ -3381,7 +3398,9 @@ static int postcopy_start(MigrationState *ms) * spice needs to trigger a transition now */ ms->postcopy_after_devices =3D true; - migration_call_notifiers(ms); + if (migration_call_notifiers(ms)) { + goto fail; + } =20 ms->downtime =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - time_at_sto= p; =20 @@ -4412,7 +4431,11 @@ void migrate_fd_connect(MigrationState *s, Error *er= ror_in) rate_limit =3D s->parameters.max_bandwidth / XFER_LIMIT_RATIO; =20 /* Notify before starting migration thread */ - migration_call_notifiers(s); + if (migration_call_notifiers(s)) { + migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED= ); + migrate_fd_cleanup(s); + return; + } } =20 qemu_file_set_rate_limit(s->to_dst_file, rate_limit); --=20 1.8.3.1 From nobody Thu May 2 15:12:23 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1658855286; cv=none; d=zohomail.com; s=zohoarc; b=Ln+y9VEGNExCcduhln1bVTctMVwq2c89/rGsVurw69dJ+3+XntO2uCo84SANWz6nDYU+IvBsJ+q8Wd4XOh2vKnJFPlKy++ePonc4y+eT9QljmgpYIyAebwN6pccxLRiP6wHQjAuOX7vWRC8NSL6idKPkHhuyUD++I6zq1/MYbLM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658855286; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=tkGH8BE2NwM2eY2fKoFLUgmPXYSgkXEsjJ53haabH7c=; b=geYwOUalEZmLfWWi5F310+9W7F/AWo4f1wcII0/LtN6GGOto100CGFLmibHdOexzvun9nSwV52GtMDX6IkCqwjuAljeY+NOXIEZFsU7H/RZQpnnNNjWdkSb4S1xPlE2q5UbA/9xGdmsePQ6gTWvEZ/19Fs7QcaKy3pcWAHgJmnk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658855286219933.8759969868819; Tue, 26 Jul 2022 10:08:06 -0700 (PDT) Received: from localhost ([::1]:58884 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oGO2P-0006Ld-5c for importer@patchew.org; Tue, 26 Jul 2022 13:08:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35530) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAR-0003ul-8I for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:20 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:9066) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oGNAL-0006Iy-SI for qemu-devel@nongnu.org; Tue, 26 Jul 2022 12:12:17 -0400 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26QFnQMs006253; Tue, 26 Jul 2022 16:11:53 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3hg940pu4x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:53 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 26QEbnNn006229; Tue, 26 Jul 2022 16:11:52 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3hh65bq30n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Jul 2022 16:11:52 +0000 Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26QG5uTf023334; Tue, 26 Jul 2022 16:11:51 GMT Received: from ca-dev63.us.oracle.com (ca-dev63.us.oracle.com [10.211.8.221]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 3hh65bq0y5-47; Tue, 26 Jul 2022 16:11:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2022-7-12; bh=tkGH8BE2NwM2eY2fKoFLUgmPXYSgkXEsjJ53haabH7c=; b=hZR54CL3n2Pk4gdcJxeB1jAPr8oGf37elUStfJ8ACwGlC9A2Rno7hVM1ppZH4bljwY0T OoHMxBGtTMD/ogUb65t7G5ZRZUFtBODXcw/9YoipFBc9VO49Nc37ul6Vse8c+dvquAsv sJ6DQ/VybBWbtflVDL4CDSAf5N6jz2zFGNWS5N7OWKvmaMkilQxeY5XYhj6OkiwVu0J9 V7bnxtr13/uCk1MDc/XevI582YCRh6/k/DYLFUrAWDncms+SqJOzEl3ujR3DoZysu2P1 RGYasgdG+Nt0e7Jva/xgOSkhXd/g0hebajP12M/U2DrTFXEnjbo3AyfYEn1Omsyb+8Hg QA== From: Steve Sistare To: qemu-devel@nongnu.org Cc: Paolo Bonzini , Stefan Hajnoczi , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , Marcel Apfelbaum , Alex Williamson , "Daniel P. Berrange" , Juan Quintela , Markus Armbruster , Eric Blake , Jason Zeng , Zheng Chuan , Steve Sistare , Mark Kanda , Guoyi Tu , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Igor Mammedov , David Hildenbrand , John Snow , Peng Liang Subject: [PATCH V9 46/46] vfio: allow cpr-reboot migration if suspended Date: Tue, 26 Jul 2022 09:10:43 -0700 Message-Id: <1658851843-236870-47-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> References: <1658851843-236870-1-git-send-email-steven.sistare@oracle.com> X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-26_04,2022-07-26_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207260063 X-Proofpoint-GUID: gvPo2sl689da3-owImaYkWZ0PBzf99Qr X-Proofpoint-ORIG-GUID: gvPo2sl689da3-owImaYkWZ0PBzf99Qr Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=steven.sistare@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.com) X-ZM-MESSAGEID: 1658855287799100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The cpr-reboot mode supports vfio devices if the caller first suspends the guest, such as by issuing guest-suspend-ram to the qemu guest agent. The guest drivers' suspend methods flush outstanding requests and re-initialize the devices, and thus there is no device state to save and restore. Relax the vfio blocker, and add a notifier that verifies the guest is suspended. Skip dirty page tracking to avoid ioctl errors. Signed-off-by: Steve Sistare Tested-by: Michael Galaxy --- hw/vfio/common.c | 8 ++++++-- hw/vfio/cpr.c | 21 +++++++++++++++++++++ hw/vfio/migration.c | 3 ++- include/hw/vfio/vfio-common.h | 1 + 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index de821e1..5b54cbe 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -1355,14 +1355,18 @@ static void vfio_listener_log_global_start(MemoryLi= stener *listener) { VFIOContainer *container =3D container_of(listener, VFIOContainer, lis= tener); =20 - vfio_set_dirty_page_tracking(container, true); + if (!runstate_check(RUN_STATE_SUSPENDED)) { + vfio_set_dirty_page_tracking(container, true); + } } =20 static void vfio_listener_log_global_stop(MemoryListener *listener) { VFIOContainer *container =3D container_of(listener, VFIOContainer, lis= tener); =20 - vfio_set_dirty_page_tracking(container, false); + if (!runstate_check(RUN_STATE_SUSPENDED)) { + vfio_set_dirty_page_tracking(container, false); + } } =20 static int vfio_get_dirty_bitmap(VFIOContainer *container, uint64_t iova, diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c index 1f682cb..ef8827c 100644 --- a/hw/vfio/cpr.c +++ b/hw/vfio/cpr.c @@ -10,6 +10,7 @@ #include #include "hw/vfio/vfio-common.h" #include "sysemu/kvm.h" +#include "sysemu/runstate.h" #include "qapi/error.h" #include "migration/blocker.h" #include "migration/migration.h" @@ -132,8 +133,26 @@ static void vfio_cpr_fail_notifier(Notifier *notifier,= void *data) } } =20 +static void vfio_cpr_reboot_notifier(Notifier *notifier, void *data) +{ + MigrationState *s =3D data; + + if (migrate_mode_of(s) =3D=3D MIG_MODE_CPR_REBOOT && + !migration_has_failed(s) && + !runstate_check(RUN_STATE_SUSPENDED)) { + + Error *err =3D NULL; + error_setg(&err, "VFIO device only supports cpr-reboot for " + "runstate suspended"); + migration_notifier_set_error(s, err); + } +} + int vfio_cpr_register_container(VFIOContainer *container, Error **errp) { + migration_add_notifier(&container->cpr_reboot_notifier, + vfio_cpr_reboot_notifier); + container->cpr_blocker =3D NULL; if (!vfio_is_cpr_capable(container, &container->cpr_blocker)) { return migrate_add_blockers(&container->cpr_blocker, errp, @@ -148,6 +167,8 @@ int vfio_cpr_register_container(VFIOContainer *containe= r, Error **errp) =20 void vfio_cpr_unregister_container(VFIOContainer *container) { + migration_remove_notifier(&container->cpr_reboot_notifier); + migrate_del_blocker(&container->cpr_blocker); =20 vmstate_unregister(NULL, &vfio_container_vmstate, container); diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 6b0d401..3919941 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -890,7 +890,8 @@ add_blocker: "VFIO device doesn't support migration"); g_free(info); =20 - return migrate_add_blocker(&vbasedev->migration_blocker, errp); + return migrate_add_blockers(&vbasedev->migration_blocker, errp, + MIG_MODE_NORMAL, -1); } =20 void vfio_migration_finalize(VFIODevice *vbasedev) diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index b682645..243376b 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -83,6 +83,7 @@ typedef struct VFIOContainer { MemoryListener prereg_listener; Notifier cpr_notifier; Error *cpr_blocker; + Notifier cpr_reboot_notifier; unsigned iommu_type; Error *error; bool initialized; --=20 1.8.3.1