From patchwork Wed Dec 22 19:05:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572319 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=S8DpysU+; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=mTPx1mlA; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3kM490yz9sR4 for ; Thu, 23 Dec 2021 06:47:07 +1100 (AEDT) Received: from localhost ([::1]:34262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07Zp-0002BU-Cx for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:47:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V6-0004Xw-67 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:9784) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008K9-FR for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:11 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXslZ013624; Wed, 22 Dec 2021 19:42:00 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=ygiO+IS2ppG8e2kHLFoNy9Ir4dA83tM9aJsf2H7Q5to=; b=S8DpysU+cCMYeYY3h1UaYX7Txb3HRNqH4w/CvgeKspatl9bRU0IUSWYAmY6bQs6eVWrJ +/ggDmuf3sLeWfhBGnJB3FQnOE4Gp5/alRQmez7UPZQIzRyrbPWZbH5uGBQu4sbfYuQN X1/6zVMPU1Z17nOHWprMT5BazOMrumq5AHT+kMlpbJ3BGWVIXI5kKYreRDFSo5e4/neg LMf6uW8QHZXDoSgat1cNqh+nOytY+loUE/cSj6jhncyUA4t01lEcN/rgUaz+zk6kGDKa m/ISZkHnRrtsa4rsKnNUdk9zPGlH+ZCwDkWDn6g/bFeaTwNm60Rv6GjjRvRMjHKfMWFb 4Q== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tjp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:41:59 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCeS049074; Wed, 22 Dec 2021 19:41:57 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:41:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QAbvpsCycsRdwFWZEWAsJc2lJqj+0ZZoHCaGp7nez5NXIQVry4L4T9itGv61OCmOmdRAODUwd+MZlEDjTNqB+mVuYuTjr289Gj3GCuq4GxB3k7yIrbjPNWrtKvKoNtm1+ok/QaN/EBKwzUzIQOVqIKAZ+hCvqiNTKuQfilWTKTPu5LDZ0AaOiJHdxl7HiVmNEEobgqJ7jsxUvZIqbx1kgxI1TQgssL6cICKa8ROq13jodnKxWqwECYK4oS+Ab0eHqGx3SSL8vyDdyaKzqIEZK6JM6/30JxP29cY+wYiJryX0rH1YtGKNbWcsBaKPT1ihTIg3zJjEPEa/qtnYRVzJ0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ygiO+IS2ppG8e2kHLFoNy9Ir4dA83tM9aJsf2H7Q5to=; b=PYxCXPH7fvZJqG9BKjRxKesh9wNTQDiyamVUX2mbAiylLRzex/GLneAoSJ8s+QxCl9spWIAiKwzhFNspxDfhgFmaGGuwuqEu+Nng+3hradiPEyNHF17bT9Es7u6YNZIllTdoS/aNosUcY8Q3nhRfJycsMY4PRIhECNT2njd4laRp+3LpWT45yhbyDjNlI2ykSeLqXLtueuA8tTtxkCpKuOoJYRpknmSMFrxwCNMj7AAvyyO22qXeifd1Hr3w314+EP3YtU+GRpAg+lGZy7WhrnrKobReh1dPNFwCwzTJmd7QhPopT2cPDMv5LWWYwlp7EOp/oiWsGYQ3pKzuctl9mg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ygiO+IS2ppG8e2kHLFoNy9Ir4dA83tM9aJsf2H7Q5to=; b=mTPx1mlAubDQTo/2++UPEjdwY0f0TcjeTCD53JNdTosNwxOdk6d/uiHpdQDexIJg3Q2DOyWFBTB0YyeShg85F71AmxI255WYYPeCo/lynubV31s1R3fqQui2lwjRixmNzCt7Id8S/ocplU+x+9uXx181nteGNAhSLdQlQi3tShs= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:54 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:54 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 01/29] memory: qemu_check_ram_volatile Date: Wed, 22 Dec 2021 11:05:06 -0800 Message-Id: <1640199934-455149-2-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dab7dcf2-8c2d-4bae-ca97-08d9c5831b8f X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:328; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7pXEeG0nsuKXDWv2XhrAFHAh/GPCXm5AACVififP9Gfz6oGlbNMoNfECXgx4hqiHdidqtpFkB8CVotRIIVQn48ekEddw7Z9C454P80NwRnWFJKasNjKKt6BWlxnUY56c0rOKQdRfVtuk3xTvZULu7ouIbShvPUC5lDtr04fry3YrOXZ/fWRqqHLgPmy2g9a6R7t4tOS5fUXtnOeAnT2zLG3wjL2fWxJrhLbZks3F8C2Xf9kkQmdxSrXEcyizCVgQMB3Fo6Wzw3mVaZmPNy900ZDPMgxfzp3FbtOQPK7KtfeGvVMdVpReuZOwbcD3LEjNEm2SQHTcCp6A4TC1u+tDcvP9QOLh/EAyVJudnpyZHJNbHZlGw7/zFHt+XPLlwHf7AZLJKPQBUkKAkRxhblVcssoIcwSEBQZjV1gq6mJOkSLhOfMa0e68HK+TfV1oZJgVOqQrI5GblJL8GDfRAFJWFyejbx22uJaiL0PEWKCLiRUBSS95W8dZSN1ia6F/bdqlDrkXzwBjPvM/jYvcuz0IsiyogKxQXzYQw+C0YAo/lhsZ11Lu658ZmwFVD8qaHGLl4fc/bqgEOV8HPmxTwVUA1y0vJ5dRA0BwoGv07X2Qjlfe3m3n2upO6CESPD0ozNG8PyMx0mIoubThdQc7gP1euxfy0Omjx8QCLnfJbzQb8/8gEWcyPX5he7HPYSjD+oi+eDnVrortiA203rNdEssQYA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dRByu9cFfupapDol8msY1whYgYB3R9mJqonVqLEZUW4fBv9lq7D54DoicDoAw1r23klWnE1Ylzn4of/CNlA/NsArSwumwtHwKjJdfOZj5GiPfb1Xj4FdQsgOWg/hJpGaI+nlSStDALVFGVOmDG09LmghhQ+04hG1P5XxnMsK9wWl3pvWWp/q6Kb9TwfaX8BXQZDy8fxairasXjxPXmMqr6F+n1CCqE5QEQx6pQrBJdZBrJiigfrS6rkLIEHk9S2BELfvO1a1aecySP0thoj5HYSea2jqs0O9K/L1gIK44kCc0PyA7VMIV/sPpg5WWdcSAZUaUI1ZalFK21mglEFHmRPb7Tm/lR9i6/GazaawBTUQdZkgUg0JkQIHe3BBuoZVnQWS0sqrivvP18SsooM06oRf4z4iGJC3gR2BTP5p3uDRZvTGKaNj08LwOSigutuE6K2u+m0RTILJMbHLWeMHqqhvyO36KrDJpLcFS8XQKUOQKjpUBhbU4EqgWp5T7QimOlDzJMI0izz2kB62lO0TKmIW9QGGvIfawLBm5KztlgKVn15xS0hoJ5NqWqKCfGbqDBxqX6CMo6oCeUDfP8kgFIQgySxZpiE3tceXoXn3cTrbJeA3it2nSj+ZtjOqTu63YS6VaZPszZh2QqyhBZZyFAv2xW47IVI7WGBXfFjl56I/pq0mU5Pl3fMbX/ReSZG0mZmIicXz0UABD5AhVtNDIjqEvzElai4e3puvucM42vl2K5SCpxXIpW12HOHxsY8VTitfDseXs8ARILa9nFL+m4TdRJyN9ouZPlrOpBo2wrSYsYGN8eHtthkvxOFqy0g9/n6ANqtuRNgbKwKE3gCU8PY2TnXlu4FFWKD2EruCeGaTrOtt4v4FWIYDUr6n5kkFJU/R07/Yb+VK3MSo8NA9rmT75x//yva+vi7I5k5NX2EKxf16hKtQ2Z/9DZOq0umHt7UBe2MQuACyUXpDI82zlgTU3COh/DNDPXgCg4dy5SPr+6SZBN+6hLddsFRWR9UhqGjpKP3N66nBcJE9cI9t9kU6zBB5XU/E8ZORgMsvabGvblhMqrTVuRDueCLJTwp0UOq1NpBsPkledQsLOjVwzEXy9lqfPfVnyEEhmT8rau9IEptDUz04ObpMo4m2P3Hf0I2KfHCZBqmym7EIhPZuqGmE1Hc9T1IixptNogKc7ytY9gO6FcT7BuDWq/9kHhQ2EwMMC+TFtA8iiUwr6SCysKIoVlwNezlR2wZFoYNCYRu7qpYJVLFqdgJRdqeJTTBP1JlExU/b5ykG6b0feZAIu2SDhDjMOBuIO4oHiPV9aWY5udD4LdNjEAuatfDrl+9WMNMs+At1MohIQjWd41cLWTv9o6/g8vdFGAk8PwTEfu3fu+VVTm++0cawaH0cBO3A9qA4Jh2uaLL1WbbKdprvH5bMecfDw5xk+crDEcc8meDjGvpNDxzA2cwB6kyjYyY7gEouXmPLJX2FJrHs57y4dE+6Plp/eK58B2hLjgajS0fegZSAwJmIz2xOQ1kkP7ThgnAMs2saTIeeXqt7EP95SQbVhXABSDPO9cn/voKum4QPrlYkHi0bebuiqp1pnXZ0iJvd7CoOyxZ5VuPoIk9aj8uPK08zKKE2VsG8+VbKWv2SpN4EyhaUpz7oYavMbFHdQd+wm5BH34E5EV7UaT3aXw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: dab7dcf2-8c2d-4bae-ca97-08d9c5831b8f X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:54.4838 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kW8BXwV53RpNJB9Bv/2BqB/EK3nMngt0Gu6siE1CUwvPSjGTXhkYePjo+ToUpYZVMiUMWew+Ce4+qUOk+fN7TQ6US1pETeJnmh3whWTx3uI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: FQcFJt6mlBxirhu7YvgsEmo4MycPPcuM X-Proofpoint-ORIG-GUID: FQcFJt6mlBxirhu7YvgsEmo4MycPPcuM 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add a function that returns an error if any ram_list block represents volatile memory. Signed-off-by: Steve Sistare Reviewed-by: Dr. David Alan Gilbert --- include/exec/memory.h | 8 ++++++++ softmmu/memory.c | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index 20f1b27..137f5f3 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2981,6 +2981,14 @@ bool ram_block_discard_is_disabled(void); */ bool ram_block_discard_is_required(void); +/** + * qemu_ram_check_volatile: return 1 if any memory regions are writable and not + * backed by shared memory, else return 0. + * + * @errp: returned error message identifying the first volatile region found. + */ +int qemu_check_ram_volatile(Error **errp); + #endif #endif diff --git a/softmmu/memory.c b/softmmu/memory.c index 7340e19..30b2f68 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2837,6 +2837,32 @@ void memory_global_dirty_log_stop(unsigned int flags) memory_global_dirty_log_do_stop(flags); } +static int check_volatile(RAMBlock *rb, void *opaque) +{ + MemoryRegion *mr = rb->mr; + + if (mr && + memory_region_is_ram(mr) && + !memory_region_is_ram_device(mr) && + !memory_region_is_rom(mr) && + (rb->fd == -1 || !qemu_ram_is_shared(rb))) { + *(const char **)opaque = memory_region_name(mr); + return -1; + } + return 0; +} + +int qemu_check_ram_volatile(Error **errp) +{ + char *name; + + if (qemu_ram_foreach_block(check_volatile, &name)) { + error_setg(errp, "Memory region %s is volatile", name); + return -1; + } + return 0; +} + static void listener_add_address_space(MemoryListener *listener, AddressSpace *as) { From patchwork Wed Dec 22 19:05:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572316 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=xzO0F2s1; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=eLk5Aziv; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3f365rKz9sRK for ; Thu, 23 Dec 2021 06:43:22 +1100 (AEDT) Received: from localhost ([::1]:53452 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07WA-0004Xu-4l for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:43:18 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55428) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V4-0004Xb-TA for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:10 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:8786) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V2-0008K2-Ou for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:10 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxQE028537; Wed, 22 Dec 2021 19:41:59 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=F64+w3YSvZefRGfkU0pckjcMStMA3dKNyLg47J/KXEA=; b=xzO0F2s1/71OifgBpJ2KX5owiACgUyKIVwD9k7jvwtolJ4UlISeG3gE/T7U6+SWj+Wsi N+OgNoi81fcImwIjwhajPbAoez8x+az4jfj0m7KwZbNRkGmdl1ozo4O2FrwJQZykMyN/ RMQqHBgHCZos/FJvmQj9EgCSP3BIJDUjmt1zT9fKRdoK3EYq2AEqfRe5c40h7iV90GLV GZncQjHF9kLjtxCh20nSA3PO3Zse5DsmVx8SYs8sgqwiDNdKjCgC+EiNUut0/+0WHXFU vuTyV5oqlSL/vltHC+M2eGPOMx7jUZSfsfZTJwHrgEulLSPaB6DAoFquLW8xflYSh2C+ pA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397jg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:41:59 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCeU049074; Wed, 22 Dec 2021 19:41:58 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:41:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Wnz/MtqqkVT3digNXFppAqFEXbhPOaXQN1w/QCQPBC2M+HObeiuDWhZUI1+bSMiEWDId4zMPdqZc74SO5ftD3GGHkGZiX48RpweJIef6jsu8Bs2e3qyhUabyCO64ta17hi791qah3175riUuCUUEa6FCOuIBdENfzjzskdaQ89iZXbqCHud9VIfdzxuprXmzfqoPYEdukazKDvWe8KcXE3OwELcjvQOILm1xqp/DSamunAFopuQwe0l6m+DwKy1oFIKtdRXlUntlj78WQoZt9C3X+8/VB6oDgVY1zFzj5LkGcvKwT+2UKlPXt+4APXHvkTFGZCT1+lok0G6wlAFDqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=F64+w3YSvZefRGfkU0pckjcMStMA3dKNyLg47J/KXEA=; b=NL4dddmlmhuvSS8TKGH4dd62L5Ve8f3W5fyOjjEW1FEEGvrUXRgBzpYuefdt2C2sfJgIzGkB77wowh7fAnCaAhWx3m3fjnsCNbvLUDwXDSB/pysamgDp58ymMKaaK820BVyxfrWSkd0u8K5B9yBcTgq4aVGTeREjD08jP4DLg0eZZ+5N8GXiKJnskMwIB1s2sf0/P6hJZ+WbzxAGLvq9QCv9+S+cDHOpkb16IQ7xkflYu6iF2BXW4VnP1O8bg6NbcrsyUl3HWHw3dnjjn7ryKYrsfwOMjbgOFyKNxVURhszSWs35MTLpi8NTd9s0lUAs0ymN0ROhG6wzsUKCvdagrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F64+w3YSvZefRGfkU0pckjcMStMA3dKNyLg47J/KXEA=; b=eLk5Aziv4LxVGjR3A99OYwVC5rGRExdc/kkxcWqrsDB4tsuRZyCaBMRRyfZF3EY2snG15/zgC7/ztuc5vEjps7Q3ihVWt0dFxaaM6Oh68QBW9XhyOaZ8sFbk9uHflete8BSxywEvFXZK1bRDKc0ACae+RqS0RaolSaL7eWqeHYA= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:55 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:55 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 02/29] migration: fix populate_vfio_info Date: Wed, 22 Dec 2021 11:05:07 -0800 Message-Id: <1640199934-455149-3-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d9d42eb7-caea-4320-14a5-08d9c5831bdc X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1468; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YnZBHpV5Rgn9FMvHOaZXmbttBwQJh7yFkDo4LLyR8AlwD5TVVTIeraiV83lqnTb8Bt9lD4I0SXgK/hVdQiv2dXRN0Tjg+dBMtAJxx/ZndZ0KNsSaJmVgHYDxVcdMB0VMWGAaGtpbrJ0qhL+yX7VdOcxmGtHQK7Nri31PSBsb7B/0dgqNEvC6SHJTWtNSn7Zfvnd0x5yls0+UBKl91uRIiZ1NWcMerSvYy1Be4KHaV/XD+7G9iB0gideWFKot9WlmJFSaNP5xsLpzR1rbVamDMAhilWO0nRouVzbXSj//I5XPnL8yu9RJl44ZEIcIqHnPtI1R8md90zxMOcRcjeqkot7Ws2N/HknoXy9FMTGgEBwZ9GPBPEanqGMWAlNrJMw4UwQkxZAmx1Np7wo7jFTqc4EN5n8PbvhBM0IR/s2f3W4AqkzPXBN4iMwqdQfBVpj5ecIXtl7/xzjfF2p08sA8g1BsdwdR/pB6ALzkYIhIdn5Twp81icZEfqz1WbZnk3qaUl+j1SIvHKha2fpLRiIQTBUIykkFHmqMEAwZ9i2O5IAzR6o/lxmEw4bFCIrTOJ3h0anLBWsMHY0CRi4QgyNL5YKQg+z42Ee5lNogP/i2Iei7HPet8oup1vuVXL2RbIbDdwi9x9n65n9bbd/BIyDDYDHItiajI01tiR7lNgd2PSFkonypDrZwTJ6Lk+F1Ey1zzdDuQRL6JZjVkb/NCk6dHg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(4744005)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kE12COeYuZNsaujI8MNnefLIDG3rBEd61SM9EN8nAh+YDWyOdPUJXXZ6u8OIIU9dGgRkjDDFW9KsCy+2KQY67H5tzLfLaAPXSnl5FaemXpyx2NuAXaV8wpxsPU7J5ck37k4Pak2L29xWikoA2XofgrRsILIyWL/LLJP1vtgA71MgJ1E21VrIoucnl1LC4nlOumYJw0JwVXARhMB68o/XlbpHxFk3rF/ociGlQqk+GDJ6f9TDly9+iF+x1p3G7yl8Q8E8HgB9XiAYX6RvUhuA4xG6dTbXwdNTCXgOGMy5WdjL8JY+W+J1mEKFet9y+QNxG42YpGVXcI2kDzLn/wWTfajoUK8u7WiM7Tpl9VUvNcgusIkmJjk9MyI45NmL2I6el3hDIpKgTzaJaLckpHemLb9vvbIghQaYYSHt8hrVnv/t+hNnA+DprhXVcWyRWU3H1Ke/hI33A5XziBcBGbehDJYuwiq/imHl//Q7WI3sMKlupiE8513lfQuEcnXZNg7Slxz4azpDi5mFg+sAb9dyvvq133ooOTgwxDc2xmLB039xc/lmQEH5E4VrR0qQIVYzzj+eHTvK7+ffCkXiXrs3SjQDVcJo+K+iV/X1UG3vl99AlsL7BdOr2h/b7gsOg7kt/DMerOYpP1AfuayYJf+uFnYiYCHG4+Bv82aN9EPawmDphS0JASfEZ6wkw/BSiR3rCDh0iTxbW4VNScn7y/ToCw3041swKs98PduzbP/3F2H4hjFsVaPrQym6mlMbLfR1lowS4wrgC7KXOrr/Xis5Hqtq7vB5DbvhdLQFKOem4mCZc0JibadN/c42TwHxWYuoQxSqV8sfAYohyNTv15bieV6v6DwAKpU4QXTmZqFUyT80Gbyi5YXBOE45WDxERcj7D0Gsmnbfiu3K3QyaGBaPak+/YZrnFXbIgXemxYWM5wKQUJy6U1bmnGvojoZcRXa4sfpmy1j37uIJvT/Csx6D7vVBN2WpBKhwdFx5Eeb5Gi3m8vRw7HlBRG6HnYUHLq5wMLPYM9mE3fsQXHkR9uREjtgWo73ljxBxzV0jJYbjaJZakYbDW//bkmrg0YaAxJSmPpwFBNzOSB+XvRA1CDxVBGgzN755c+4BdgrPn4MlAYb/U4OtUf2JLkUgvfhrVGj2m9QDKGgjt8qNBCcR6/YGX0xwMh94i1JgHNb64Eu0DgWjLoKrFKt/2kdE/khT/k/5I1ACZAFODX/npWnXfN8PU8mUIrghEO9JIJFyqX4ZXjoDKaHbjvg5cHXn6vWorF3fIbWTMa7oqsT3FIAe7FUVTgA3gaiInPReRpuzXpNKkjZSytXXm8QB83ILbsZ9K+3fVZUxNLv0sm8bzKd2U67AJPJUMctVjrgydn/cNMOIHvNagPs7+68fXImTcZl6R/HGn5PN2CMhe/2Evwuj50HT2iyaPQ0HEYbPMvCdnPQrd0NmrrBe2bJsnA/d8LAmq3nQRoH58OwnjgK2pZefZGmJg1D53exp7xRr9nMa8IlDABADNNS2U+ufsULrybBnc9/4aZac0pcDALu9qyMrmfVI+evyP1UOw3wfdcOalKS4gwTzvBXHG1VDBkw6rIjiM+xZ9/A9oqQusVR9zLVd1IjnWiWc5y5wZFYpeFvw03P+4ZHbmPru9iPqG4B3ZoRoUlY7866qKK71ReGBa3A+a/X5uQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9d42eb7-caea-4320-14a5-08d9c5831bdc X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:55.0150 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1e+Jm2EPvpZo9TtRuEiQf9NZcnAh09fwmZcNo7IivvGuyzfAxZDzUWSvm8H1V+9PyzflHWMLX1J2UyfovTB/I7FyMU5pya1w9z0qiBeKvTU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: 1ev9GNW14HSrkuiPhTqAbVaW1fi6bYax X-Proofpoint-GUID: 1ev9GNW14HSrkuiPhTqAbVaW1fi6bYax 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Include CONFIG_DEVICES so that populate_vfio_info is instantiated for CONFIG_VFIO. Signed-off-by: Steve Sistare --- migration/target.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/migration/target.c b/migration/target.c index 907ebf0..4390bf0 100644 --- a/migration/target.c +++ b/migration/target.c @@ -8,18 +8,22 @@ #include "qemu/osdep.h" #include "qapi/qapi-types-migration.h" #include "migration.h" +#include CONFIG_DEVICES #ifdef CONFIG_VFIO + #include "hw/vfio/vfio-common.h" -#endif void populate_vfio_info(MigrationInfo *info) { -#ifdef CONFIG_VFIO if (vfio_mig_active()) { info->has_vfio = true; info->vfio = g_malloc0(sizeof(*info->vfio)); info->vfio->transferred = vfio_mig_bytes_transferred(); } -#endif } +#else + +void populate_vfio_info(MigrationInfo *info) {} + +#endif /* CONFIG_VFIO */ From patchwork Wed Dec 22 19:05:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572320 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=K4qeW6v/; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=GXIxHm+D; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3kP6Jkcz9s3q for ; Thu, 23 Dec 2021 06:47:09 +1100 (AEDT) Received: from localhost ([::1]:34388 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07Zr-0002IR-MI for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:47:07 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V7-0004ax-Qk for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:13 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:8626) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008K1-Vv for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:13 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsgf013630; Wed, 22 Dec 2021 19:42:00 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=emhj1NmXHkHVB4VTfPgnA0+3jmB42gCz4diX8NR9d8o=; b=K4qeW6v/Qx1Urh6s9zmf5PmLjgjUmQlQiy6OAhEB5pEWdoLWzbWGAyc0kULDVbHN0PzB PArv1mbIAF3igzDKdUmoGa3RQPk/O0BlT6i8gVrGVxpuXUWsrTh6onZ7QVklr7laQLuv qApRURiqm2aMGCmQgwtbY5Gjye8n0YExRc8P2Le5XSy7bO19Fdd9D0RVAa9dOMYdaSYj kVecqbjcJ25syGPB+a8CjFq2Wn6UY4Ne6CeUZLvRIS6aEvq9MNwWQtFqDr9RZVdNot1T qRmRLiKlWMpIUiYqLZ2R2b4EOTelCTV684UJiGUWgVVW+Pikicz+k0PLCNGnLe0rvl8T sQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tjx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:00 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCeV049074; Wed, 22 Dec 2021 19:41:59 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:41:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=igu/hU5raI56haHuM8ggDVDSpcy8zdL12lR/DLsCJfy5B+HBweVmJFMePmxDQ++6xx/n9VJ1Sd4/eN7ZqOHl2Nu/0ovSb8Ce4QcTRoPd6hnpFVniIDGjJ0HbTG0Eaxh0ogaVOZg02xinC+G6ucRkxa/U7RkNSezc9Yk+pO8WzBbdbyZRNN4w69K1XcZSdz24ZZFjDyEJlQdbuXKcOjjucD1euADiNqWfQY20wKY/3LexNNn2wq3CTsldmI631Gqv0BfWkCxeHij3+wz0y/Z5+JkVGVqPjBshHEXoqLdNKlblQwBNl590nXlGbfE7ohvusfPRySYzM3BPLK1RL5J1PQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=emhj1NmXHkHVB4VTfPgnA0+3jmB42gCz4diX8NR9d8o=; b=EHUDJ2mvhnHW0XjXwUORGJXAueMqG4TT1XWp5DrxlscLSkUlajr3FlpDEgACQCJCpr/PUD81nVriyxdSwPeMo1J/+gAVsyt14rOYPL4B2bCuBq+THWejoapreAOo2W4wslnPkzk1DBVwHCJcnus99mEFeDWl99l6WWgtO0EdnxfucghI/Kf9M//v7KGugB7/ds4DfFg7dqkud/gnjl229DZttIn9gsy3n9msfACIdMI/Jk+U9QkH/qLsY+2vLFp99fqBAglbeyj7/PKMEO9aKhW1ITrpc3E0hwmwfNu9Okw46nWade/FYJBLNUU8AbzcLZK/mLuXZj6xpQTsSwAAMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=emhj1NmXHkHVB4VTfPgnA0+3jmB42gCz4diX8NR9d8o=; b=GXIxHm+DYF6gnooTeooIoBPfu+Foj92yoDnkpGGp6HSj2F6UH7CBDTgvQNpt7Eew9B0dn+w+c6tncWAqiqONlTtHFpBylpxltVunoNMAuieKO/sJhwyZqwYvsRw1OVgv+fQPG3P2Ppdu6zaNmokH74gFYOkfny/QQJe8YXf5Wr8= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:55 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:55 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 03/29] migration: qemu file wrappers Date: Wed, 22 Dec 2021 11:05:08 -0800 Message-Id: <1640199934-455149-4-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: da479118-d1f1-4bed-7335-08d9c5831c1c X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: evYeITn3Ip8Ktk2wfAeydHg9YSB1WgZbw2F7k+rfMWAALvai1Pk7ziY0n+osW+OvGWMhKtRtJn8RWioh6zbGaRvYAmgePk1h2MQ394+aUHrSPSx6BYmTCgw4qEWLaFktTriBSwtIXQ6IGPe9VUd1FBw0qXP1w90ho0Lf611OfnR3ni8Bt41LzfE1eSHBiP6XLb3ixXGu4ieGLYMFaQ/PzToxU6KhqqSeh+A5znYNZxbpN4hkTCFueVZqhIHr6vaabladKfEFVnc3WL0uwbWOO64SnJ4m90kkPdLkYefboc66M3MJ6Az/K1cwXNuumWhF6LiJ14mhCHo7JMi6MCof/4VTqgrAatZFNZ6rk33qJXQb7HEwq7QX7LXNzNcJJDK/0TX9ZVp4KwOcT/5AJ+nVmv8r/tA+tY/vJrYfuT1da7KboMAOMEXva5jacfrX6KZFFQhRdj+tgA7f7b+I+4nrcp19r4cH5B8+oNUzzd2GzwUyePLNSzYJgXWQ20HMIlXkmPaYq4FxGA0kzKnTRA0gq60EojXhKtkWmhFqSq3GH3yZG+LnWJuN2x5PmiXv4JGiB0a9L/R+0eDEQLu57aunFGtkZzLSmiR1dQIagf5vLJMsarrz2MQpSURdOc4p52LuKQsP6CE/RWW/HbBkwiNEIwIvmziA/AS+wtBgsnwesfOvdR8XrK27qFO/VNmAek7f6yb7CTLITyp7ESVJRX0Lkw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xQkMnXFl9W3jb0Du5X6hj7+BwAP/VV1FXSzxRBEVp/Fspsu/LQU0P2OAMcYDD9dFTmZN6NcTedUH4H5wWVL7gs3tcT4JlntcvFaYPzh8FQ8FLBl2jCewDQSIZp1q/eCBmtEPujTDwrlcCsIFWq6OEwGjEbY56JcxexBm4pei4UMkESVukaNiG0eKmmQyEjBomYrwq3d6Duq+7PHaANobWkpGi/eEmQffv0f6KUjFAG2VXSbTqBnFQppBGpH7iaW2wfNsEEX3kCY2F6r5bYmRKFj4TS7rVwqGG48XpaVozI2DmcvwVzgLO92c4Ho/9A/UCjZPnQ6CWInnTdlDDyeJmm4A2b88g84vHYwe1PB2oEaWnTUq7F/JfwbdCr173BJyJqaKBKsS58s7YrbuO5xvgNiFUZIOzrQyy8MZ2OcuwYd6ktoaicxU45cNJ+hPOAyHxreVwVzGvc/QG0urfT23XY5ZdDn8eLP9CSmfmrNLziR+lUS8TjWCV+DnWaU6yzChMGYVQsMUwcU4Xbx33j5ZTWwm1U5Ij2Kzu2R8vIftoQfErgfMwl8UvIWiTsZC678eL/dvN4X92fPzFfBjH12ak1V0GyAWU/Ho75pXjsWBmb91sjdxyIBSzLXTSJIPP1w81JUR5EsCn6aKp2vnFCjanEdaT/e2v2QCHUEf9ypI30w8x1Yy1OQ5jmc8NJ9xQJlW04R2vpZtsXQ76KMtEfeF1wIwGMUXyWagPh16sgJh8EMY3nQi77zN4JIWmsSjsqJCalFz9Yg9fFKtYk5tqqmlSJk5qWMLcbwAw2QXrDnxYi8wL7n2XyXiVYxxbwkoj8i7f5qLGEQUdZL89AUKsMuu4gugbT8QF9yy/G9HDUbcBI+5epl+0Glai3wj75N5EtVPVWs9UiKsVoWfpBoH7ir149UvIKBmrX2nOPezTtFrRvtz75g2rcwKZvtu6ewtaN98vZE5Ijge21cXSsP2NEIRvzE4tXH2iib8WWcBV+SjHHSMoRSMvoJaFBF906Og17gXdttKi1IoAeCehsYE9oeON7c2zV8dhM7EG5JVnDX3YO8rb8kdM73gP7G548/NaH4bL7bWC/jiCyNdyIOFHks8X4bxJuQ8WO6vtSX1/lwPz9sDoweqz49Duk3fAJUWMkVRHxM1uRPEIFgptTh4DVHKrRpLj3KYBMvzCXHIwJAZqtp8EHVvBcwJA1+YrPSZS1ZBH1GMA4HrvKhRmyp6alHV5zAilI0kerlgB6xdamAkFJ7eGzNFZQ5kZk0WfS1+5qcjJEh2QPcaVXy4HulGkrX1NxGCs9JBPqcXDwPYf3am4x9TNFht55BQ/yvJSpPWLd/HxQzxJJJ7XUcE8MzU7gbk3DjyTkQwstU9bzgp2KQzuTnNdrLY6DTa8mU/FjxKyt0pOwXGMdUy/RjTgUnh1+JlKEPQib8hK16xzy+sK/f2e1Y0DvS7YuA58eQiNmse8kZu6mwf1DU8gYxe2XB0RoOx/kYcAjkqxes56wN/NW1VBLHz8qRDrx1DVneJ5s6Ext3OLpU62+yVO1WVnC2EEZOqAwSSos9Iop65iRzHJsLXXAkaS0k/1drWHLab/a9j3iJ5qq1JCOKtsYTky7r+jLGQcu6W6VHkkBAOk94TiAOjeOgUckKOUKZvb0iFhw0jzp7t50y5kwTRp9eDwDI033L4fQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: da479118-d1f1-4bed-7335-08d9c5831c1c X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:55.3743 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: s5LTJhqWpgw+JakqjSQ6whGbmdhXXZwsME4kQCqQMvosvR6/wxLr6DcisgvY0Sy+9XNt+qucmNGTyVysXftm9f/yduJVZVenZKoql2zkx9w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: _W5bMeulgqJWt4nHTzk4zlyYqRjeUNMn X-Proofpoint-ORIG-GUID: _W5bMeulgqJWt4nHTzk4zlyYqRjeUNMn 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add qemu_file_open and qemu_fd_open to create QEMUFile objects for unix files and file descriptors. Signed-off-by: Steve Sistare --- migration/qemu-file-channel.c | 36 ++++++++++++++++++++++++++++++++++++ migration/qemu-file-channel.h | 6 ++++++ 2 files changed, 42 insertions(+) diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c index bb5a575..afb16d7 100644 --- a/migration/qemu-file-channel.c +++ b/migration/qemu-file-channel.c @@ -27,8 +27,10 @@ #include "qemu-file.h" #include "io/channel-socket.h" #include "io/channel-tls.h" +#include "io/channel-file.h" #include "qemu/iov.h" #include "qemu/yank.h" +#include "qapi/error.h" #include "yank_functions.h" @@ -192,3 +194,37 @@ QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc) object_ref(OBJECT(ioc)); return qemu_fopen_ops(ioc, &channel_output_ops, true); } + +QEMUFile *qemu_file_open(const char *path, int flags, int mode, + const char *name, Error **errp) +{ + g_autoptr(QIOChannelFile) fioc = NULL; + QIOChannel *ioc; + QEMUFile *f; + + if (flags & O_RDWR) { + error_setg(errp, "qemu_file_open %s: O_RDWR not supported", path); + return NULL; + } + + fioc = qio_channel_file_new_path(path, flags, mode, errp); + if (!fioc) { + return NULL; + } + + ioc = QIO_CHANNEL(fioc); + qio_channel_set_name(ioc, name); + f = (flags & O_WRONLY) ? qemu_fopen_channel_output(ioc) : + qemu_fopen_channel_input(ioc); + return f; +} + +QEMUFile *qemu_fd_open(int fd, bool writable, const char *name) +{ + g_autoptr(QIOChannelFile) fioc = qio_channel_file_new_fd(fd); + QIOChannel *ioc = QIO_CHANNEL(fioc); + QEMUFile *f = writable ? qemu_fopen_channel_output(ioc) : + qemu_fopen_channel_input(ioc); + qio_channel_set_name(ioc, name); + return f; +} diff --git a/migration/qemu-file-channel.h b/migration/qemu-file-channel.h index 0028a09..324ae2d 100644 --- a/migration/qemu-file-channel.h +++ b/migration/qemu-file-channel.h @@ -29,4 +29,10 @@ QEMUFile *qemu_fopen_channel_input(QIOChannel *ioc); QEMUFile *qemu_fopen_channel_output(QIOChannel *ioc); + +QEMUFile *qemu_file_open(const char *path, int flags, int mode, + const char *name, Error **errp); + +QEMUFile *qemu_fd_open(int fd, bool writable, const char *name); + #endif From patchwork Wed Dec 22 19:05:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572323 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=MlZqueo5; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=UV0DTm34; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3nF3pDnz9sR4 for ; Thu, 23 Dec 2021 06:49:37 +1100 (AEDT) Received: from localhost ([::1]:42880 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07cF-0007wp-8G for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:49:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V6-0004Y1-9G for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:10206) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008KE-FT for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:11 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXssJ013627; Wed, 22 Dec 2021 19:42:01 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=mVNZj6+391VEXWnHNDe2QH4lp6d1nUs+ZVhUEbcf3rY=; b=MlZqueo5rAbz2Dg9HGKHwORFDdzJSPGO/FdBrm4zU8CLacwF6u3dCtmqsd/KiUkERoL0 YgN92hW4yWCNoDk0dhUUlnSZ8FlArq9ENQq+t2YDGyVg6EIj3+Htmv+5yr8f4d5Ru0ZQ 5D+W3DMS+g82rlzcf7qqJlfVhQbEk1uioZQiJIcOem9oDagqaoxDCeL1G8Vo2Hn+Lh8c 7zmu5sW0RmKyVScGEMt1iYZobNrFPu1fhCP+TsOKlx36BZqC/Ks7kvMkC2CIO+gYT5AG FP7XUbLVhQlMS9HaZWtnma/w6YkRfgs7Ye4DCDb/6ndd/rGyopYKXMrfrNDQtPwekIEJ RA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tk0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:00 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCeW049074; Wed, 22 Dec 2021 19:42:00 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:41:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fDKxBMxgCXUd4Q+vNc7zdsEQZl28s9qRuj+e2RHHv7gQTWbNVfcZiF9IDunQuyDd8T+xtnaQnG53FUBimwysvFxWhyaKIsXfyrBpoPpG1+ZOdE+DtVoBYdh1TKih9CPXw0dic/G3ygBHagukWA1w3zaw5ZnlFCQaaKrYCXyyV9aEma5L4WNBXBl2O4vNFjrG3bOAW5IMJq1qT27ksLVBuz/n2xN+ePnIUUnffi8vgb2/heHdFEp0p88u9O3uGhFDHH+fLWLOyeH9rgb9J4sK54J97aqeEvyCM9hPJDV7MkofuLdQnK6N5QEx/ZsasT3oPiqeU+Vzk/pW6bLbiuLk0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mVNZj6+391VEXWnHNDe2QH4lp6d1nUs+ZVhUEbcf3rY=; b=IgJToZpIkhRJljhAHYF2tyae4PcWb5K18jMieQFlhGohZBcHTt6sFed7yWczC88yARXDJCSMLXKgf3ZIhOXgPEQjB6AEoFMHPnGqNm0r0l8fQtS5eI+GAOYB17xczFFBdX9JcPNW1Zv7rA7pZ1x+y1x2nzFag4m4xf6WzDxNQw51gKTJGyqoDZkMaKIa7/GvFv2DqbGC1Tv5Ky7OIYGzI/IHsD0+PGR5+Clbq1wWecoEJnjI31GNfk64p3ilGKPiZAcAYEUJkiXw6SOYO8kLCf0zre4MsPBuTjSAG8yLpLK5cj8x8zm0QKv1oZipwGDAQu8nKte3IjsgHLRM7aSkSw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mVNZj6+391VEXWnHNDe2QH4lp6d1nUs+ZVhUEbcf3rY=; b=UV0DTm34F26Z7XUG2OK3H492jDQY3KmzJzH8WqSMXhlN+g1JiavVx7iFkbxiNCsTguW6gjxd/Lz5RZTIgpfmjC2pYDbvlYMR+XDwFHG3s1BWiuQ9+QvmsLuo7nMZvdixclvlgwmV3cm+B0i66/1CfpYJiuk/Tkrgtge1dq9912Q= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:56 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:56 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 04/29] migration: simplify savevm Date: Wed, 22 Dec 2021 11:05:09 -0800 Message-Id: <1640199934-455149-5-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 600cfcfb-3779-4464-aaaa-08d9c5831c55 X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3968; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dI7RO30yq0f58Vjyf+GuuplGbOBSh/WOIyuE8uSzvXNiolbRu5tr2xJrfdV6zR3f5D+0M0dESpnPfgl0iwBKgu30MVpiNg42uJ5fmiEyugCk5V0UX9kcAzf0wMRxC9GoeopCxXVPbPdC0bCWBQwVUgSrRor2R3XNel70PmvSV2E1rHDy7f2Fgp2gdAvNX+1WnBkvz+uX0wfxldvkMbwlAB9uAFQ9XXXcxLm8EvsURnG7/qO9BR/3Ac83nEjR0ctRbpWW4AoimCI8McfHcsABmjYbByvDuLdS4PrKB/tPVQ+TpLN2dpL4kbn37nznEW8VOtjDL/S+UlyfmKDJbWnMhWkVLnAN83im2IrD7yOM/CkUI2IUQM8HnaI0a1JWeCYgB9BHzO2UEEfZn421MRoLWRe1QWUCu94c5RPVz+j7+aesqXh+qX8S04gma+lxD5LzAsSjbXVMltrA/YTIVaE8TePqM+j+QS4rO5JK0oJcKWWXOXZ5PjWEMspiYpi0QpXQ9tptOHEm4fZbLRtoRrJx/KcpoT4YB9Lnw2qertk34AfPZioctHL8QK5/37HY744JnuGYUBzjjBqzUgVDp52LO+wdOZ8qwxTDpLOBBFJmIF96GpiXw0B65CBz4GvPtxiOb3OqWbwKvCkNGITd3iWIpZereA1XndkQ8lFHU3a0GfnCzAaON+y8yWCNlgHkDUiUGvDYGQ/8N+ae9s94MAPcVQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZneIu1fwDNVUQOdHIIEZXYanOOP2Gpj1k8qUwp1JmYY1VPPveuW0ppgEvdQNdFTzEjjGsXKhloNsrHEq1FHnK0L3NjLmefFmgBEhLOIdTSZnriwbgQQAhGLWAIeFwAJV7nyz6xFl6ZO4vccMyC3K1DF+mP0gO8ZPpq33Gohqk+DvGT2dofpdDDmpRDQFsCuomU4RNT7BWOLtUYhAgNvI7vMyCwdX5yVN+sZDLY06entwARdfeXga6XfVyK8MRQ4Pk4wRoXYFuh4H0ZIoKYOhYDQB5ZzMmo4azON8TUfynBqwEq6065qkS9rxzJAyVS3Pm/0hUunw4jbaEVqH7SoREMZKf4Fj1Bhg4b/aXXKG+LrE9fz6sNTJhmcJOqe5tvMRHM/s4ch3dpikrl/JMR28wzFYkLJD3CD5RoM3yV5uBDlTPHhLadzvGjM/6UVUvFtKB3YJOtOrB33pMY+cDwKYYU8XSCpbcMh74Z16gW0vRtfO5amZ8coUO2ccwIulWAKfQ7DGvVknU+pMUaiWRXhR3dF6WIWoophpoIVisGPbIuR9+ZwQO5gFc4ML6xmLuo9lOl0rn6hY+356seKy4BBhuK1SwsoVkTSwrNC0qcgRABxPlrwzryOEYp4Tu4ZUcJrGHANVWOqtF0sif2Qtz+FdMCO96+ytx9GbT+G+AJ8fiOAFIlPSmkoiJvzOyzfolIEbpD0piYwnOL5U1GcXgsRLhay4x81kWvrrQ4ZnzvvvdYIH5q/Rn/PfnCq01JpPpTOh+/QIVfoKRHN4zc6SsApm88UFXcVJ0e3VoXQ5qRXqNx3yInJwtNnFeEHoa0rpINceG3f4gu4BdJIzm/Fdfq6grdoId5BrZ2caDBmF+RuSUgGVwRYKr4I4zDVlV9SnAp2Jw7mNRQGWAxPBBv9imG8GxoCNszF6Ap/Ys+N/wikMhzTwjnIDKbTaE1WTwcI2QpteQfXKsqut8uSCnsnj2ZvZvHkKhtBWI109fShKqnyI+lRxU9fJF5c9O5zZsNWQJjsTeBlgLw+6dPGXMMGcYpGhtUhfZplXQ6s39EWtIXlbYNtl2pwsgVP+dmVniU770g/Dq4QLmNKgNfrOyT40OQ2/sKaRuVdYAo0rcnU6NzHuGAIMzM04NAl44nnmYttaQiUnDqVBbsV3ni2FL6ZGsFtlSmQphgsY+48YS5Ji+8oczUd+rTltotT33oi6eFQ8BK740IsiIlu9bFb6p0r/iovJNwIQG1UCVOxaapX3PjrgL1yZry7YTMlimRIX43RPJ/lLmGThmX/Pp10ugXXXVNhPYyjApIj0Fr6OLbyvx6GkLoE1nndF2p0L+ZSdCyH2Hn/fCXswOAA7NcFnc34k30iGvq/zdW1yaO3OBWCRx+hraMN7OWmKDTXSJiwjCYZpAPJmrT/R9uXT1MB676yu6P/1KtivHjOsyJ8f3aw9/tQaj2pdWxU7UUGyT/crnXDGwbYeq3Tqop7QwjMFJ1w7T+kNKeGfae9PPkJqacaqu4FrtCDmpHM5GnzO1Rm7j9lA7T2dLNvJdKPIxup8c8brw/LRv6mhVlqQzRMYzTt+LqS+mFZqMf1yYJ+rDFr7VJRYOkxvdzJYOBrii2JnI7vCCcd1bSaz0VENNGxp3pICeopoqtTPSzBN6jPmrO0BUDrZk0WXRKbUf46wdbbOuroAWp05yQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 600cfcfb-3779-4464-aaaa-08d9c5831c55 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:56.0305 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SptihCvMcidC1Ef3Uwi3D/prfy0ERs8GOoNB+eEBHrZZa/fN/vnV5Q4djZ3MjshEDixGE+ixly/mNU7/og5z5+FqGogf1tpsW3YTQthyiE0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: MwRESdz9zFcZFI-0vYa3dhsy44xn1O-O X-Proofpoint-ORIG-GUID: MwRESdz9zFcZFI-0vYa3dhsy44xn1O-O 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Use qemu_file_open to simplify a few functions in savevm.c. No functional change. Signed-off-by: Steve Sistare Reviewed-by: Dr. David Alan Gilbert --- migration/savevm.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 0bef031..c71d525 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -2910,8 +2910,9 @@ bool save_snapshot(const char *name, bool overwrite, const char *vmstate, void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live, Error **errp) { + const char *ioc_name = "migration-xen-save-state"; + int flags = O_WRONLY | O_CREAT | O_TRUNC; QEMUFile *f; - QIOChannelFile *ioc; int saved_vm_running; int ret; @@ -2925,14 +2926,10 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live, vm_stop(RUN_STATE_SAVE_VM); global_state_store_running(); - ioc = qio_channel_file_new_path(filename, O_WRONLY | O_CREAT | O_TRUNC, - 0660, errp); - if (!ioc) { + f = qemu_file_open(filename, flags, 0660, ioc_name, errp); + if (!f) { goto the_end; } - qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-save-state"); - f = qemu_fopen_channel_output(QIO_CHANNEL(ioc)); - object_unref(OBJECT(ioc)); ret = qemu_save_device_state(f); if (ret < 0 || qemu_fclose(f) < 0) { error_setg(errp, QERR_IO_ERROR); @@ -2960,8 +2957,8 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live, void qmp_xen_load_devices_state(const char *filename, Error **errp) { + const char *ioc_name = "migration-xen-load-state"; QEMUFile *f; - QIOChannelFile *ioc; int ret; /* Guest must be paused before loading the device state; the RAM state @@ -2973,14 +2970,10 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp) } vm_stop(RUN_STATE_RESTORE_VM); - ioc = qio_channel_file_new_path(filename, O_RDONLY | O_BINARY, 0, errp); - if (!ioc) { + f = qemu_file_open(filename, O_RDONLY | O_BINARY, 0, ioc_name, errp); + if (!f) { return; } - qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-load-state"); - f = qemu_fopen_channel_input(QIO_CHANNEL(ioc)); - object_unref(OBJECT(ioc)); - ret = qemu_loadvm_state(f); qemu_fclose(f); if (ret < 0) { From patchwork Wed Dec 22 19:05:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572317 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=IY0FEfHE; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=pltakAes; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3kD6VH6z9s3q for ; Thu, 23 Dec 2021 06:47:00 +1100 (AEDT) Received: from localhost ([::1]:33882 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07Zi-0001wM-FB for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:46:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55486) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V6-0004Xv-65 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:12292) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008KR-4M for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:11 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxQF028537; Wed, 22 Dec 2021 19:42:01 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=r2JbS8VYeBYPsfVg51cUNnmcVJkHDu497NEB/cljIYY=; b=IY0FEfHELZaaBJ0LLTfmGgxv67Otmd0wbjno/C9Cqb5bcL7r+bBVMXuAGRCsJ87MXjj5 jdiJqQhfvzdPqfs+KW0QeXEbrem8XNZkK5Mazz5D1a1GJPRcqaKTHYhWUH6hJLx4yQMy YLbM4++cDD6GtThdNaxqqt+TUVsfzPXyes994YEYxZUvsC+AmMVch8xUmDQnh1DKC3rZ jgtud/lU0h0qmO0cJBGcJMu8C2DKgxEqmzhuNr2yeV/fPIFnvQvN3MxYu0QvMJ6m5JjV DiPfMNx8j7Bo3/ZiOhqgS9ttfFDnSXpynKPdRwgnW5INHrZKRsBqUWkpbpbYay0+9BMI Qg== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397jp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:01 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCeX049074; Wed, 22 Dec 2021 19:42:00 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FHR/TXEgLjgFie+++HD0LTlb/T/M6D0AUVrlsstz3UDyz+oUwif6bKbeCqMRTjlrLT2H/n7psVwuloq0Rc5hJC2qkfVC+u8X8AIzo76VPXsWTaSU/izhCovdJVMxb1kQFRej061VfG1V7M/fASTgxK/HUkj0kXROvFNg6QnuohNbfyF5powNVI/0xTx7+DBAL1VC6rbNfHipZWJa+Waf5mhrcUENrvo5uXdnvgxuEBn+7Lg1cUb98Hd8BY2A/GqK4/T35cc98uvkcAtoY2iCO21OKDDXeuz/WxtMcX9KaGNNO0w3KFS+fAob/vNQKdkRctnEzeRiUnBtvzYaGlHHAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=r2JbS8VYeBYPsfVg51cUNnmcVJkHDu497NEB/cljIYY=; b=mWb9wjb8J8VZ+G2wtYqADRY2FRwURZzHttpTo7iDUha0WHHAG5ug49qNOUHYCsv5O38+TwGQnBKeYBljTyuAfPv6NZD7kKIX+SQG4/4ttAhLlda7cCNsjHwTS6rbaqsTQEYb+mbznbh54JEtVNb6Gv5mJXKiimjIsyjEHFuPrd5GVjBwV9TRBZxC5Rmg1caNj/eUfojmPsaTusGGDmIdQAJlUFJru2o9k2wE6zkMK4W9DXFeLdKZ33nXum2efCZ5gv+VYAd5+6lrygN0304O38w5uY6508P9+euTCUi81LRjGHLgGLWbmNNzNMXN1hBZPitIMkfyAGLrbKM9m+svpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r2JbS8VYeBYPsfVg51cUNnmcVJkHDu497NEB/cljIYY=; b=pltakAes9s21LVplU0CvDklzEGalGyufiEonIVF2BYHj/gzTFvtwRJvA5EJHQme0RVxCdwZPT3+DwnTqJtb5r1ZS3SBmsUlqz2OcrDmXym++SStNFA6IG1DJKFUTducnIFGxftPssit3X5Cc5o0TKP80XBXPvTA6aXexRcLpeRU= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:57 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:57 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 05/29] vl: start on wakeup request Date: Wed, 22 Dec 2021 11:05:10 -0800 Message-Id: <1640199934-455149-6-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cfbd6b61-65db-4ae9-c806-08d9c5831cf7 X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NexJOJiDDwo3/a2bovLUrvfgWEX5LGBDak967hmgVNBbyqA5AOljNY+u1G0oJvZw2PnE88VOM70DHuwyhtz2HIYi5EhPIX07NCZz3iXQamHCusjS24KxdAsV6FoijKnEKhVYxjTFc6IX3rbXfqtF1umSYmcbD/lah92zneAT9z348lh5V/4YlBdztLUWC8LlIM3mvu9itk4qeAJd1Bk+hZw2xB7YJFE3BIEoK1OZ0NhSjBUHGNBrN7xf9rKKANY072BFI1egbLrtQG+7vVtBdx+rdBJvDuyU2lpaIZr3SZO9V3BbSy81wakFNx1m7RBHs/M8FNYWnr0j0CTGI94UHB65U6lOh7+7oPovB80iakFHvQKIHFo5JLqgGGVaDjtBk670L6fmWpzQ+qt54iz5ktQ54W7fLzbaJeOiHdxnxVvxlNLv1/Qokdc4WIg+Jk3rR/yE/llEN696yKk7VA9/mmS5ED/Jgp3YzW1DbzSnAPYoxk6voVmU+gKuWaIrRbQ1Fiwi1FzdYdTPuwfZbMLKSJ3UFNvpEHZ/jF8/39Gcq3+/ETmOu1reVr98c4FKPGK2UhTFbo/tEWMX03XcZ3tfM4MAdcHxQlrvLgZLtkrgvaJb1tbMGLU5owU8UqYrvA/uxWcr4L57jZo2r2danyptd0bw9/3/3UJ/P4yytD4g3NHyh3FpLdXxSOc86AQlp9FBZd4mOvlmawtd+kBGpRHxUA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5Tx0uR+8gXWHuvknXVzgQJuUZ1L6J2/Cnl3NBsHEm5gbiIXRjUEOW5YLFxsR26Y6crNSP91xRcoskOpjT54R6pJUVqCwEa0dREQquOxgzgV6iYAEAWcT1NstcHwN3TAh+7FovjOteI87gyvaRx3Hs+bPdaogewILVFHPNKS32VM9xhyDF6Mh5gipqs741Cvht5wWSrbFQuaOzzFOtgkYrCa6OHll5GLcYMONvT8Egkv3do0rxx8IvJPjQOGlIWi9JRoCCSqnRbhxZyv8vlKEojAh1aWS87g5aEQBkmDVmEj4gUvfFQdu/5yQJTWgSFGOrXhX972RVf7P5Kahi0o9h6GC06/ETFxoHyHJpBvEukQM++PrfVE1vGFDL9tbD0U5V9pwiZTPS7tsmptuOxD6ejZ0SsEEB6ujpyiiq8Pdc3hZa1DhaSJrYgc6wrO5Ay1louhDXRIDOjoRTc4oeo3vrcfJ47V60IxOssqwXChpjj6r5ndI5ctVYpgiSmERaBpsIKL3tCZGa+v+eBskR0rsLhbAu/xPStYQ0NM05gYT34+PIIDZL+Fb0Fwn93Zh2gsh/b/kPvuVJGdgpyDtPIYklfqAAo2WwB8ldz5+mCYyQ9/uPuDEr9JrK3dgdD/xphBeWKXVsnq8/KFqogi7rBy7o0rZKL8/FNsXPTlB7XVRyeN7f0ip+pXJ8mQTmIAG20tnku+IVcpx52iPAAaadiXYGeUjeGde96Z45/8ADXTZxd68JWumiypCNi0CAY3pfafDamKSr1nijC3Pd8t11lLukOAOkFzYTX+1MVN/q2iriWzYZtzVbiqXymDa6t6cVxwCPorRpFTd9VqmIXOyrXodXi/SVq4QvKr/e3KnAq/JgzNAXYLU3vRKrpxBZo9qIcpva4QRa95KHUjZ6609LDA1rLZeajLuoR/sYMfWNI13zhMfo9cy/PtbQWIFBzkuLBBgYILxtHSzNJe0zD1pCIvw4AZqiIa+pKnf3zbGaujjcga0GsbZjQAWf7zlAkDQSFIKPzURrbvcUdAM+q02z8U/SYhqkQtbDJxr2WBr7xF1+9Sp0anzgs3dG2OlNphnWml0ko9IiuvG4CRAvcswuDHr1WSR8RRtJB0jLRC3QsB11rPr19boU5hExyJpGLCdwF1yA5a137A2B39QL10CWeikMeC0vN4zswl+aAHk1rpuN/w5nM27hzTtz+TQvc2TFW/0HFv6ngJTTupELEI7qlMzc3ELEM3jE+heku7v6Te1OAfFkhl5qXvAd9aiJGJOH2mZ3S9V+3woaYLzdJm50nTK3r+NgK4awjfF0fZ7s0f2QDo+zD/x5QFgQIkyF7x/p3ZNvSo36pUXzglFnQunzgZL8ftqCW/edZ7sBc0tgNUoevVvSm58L38IEiPndjTkZI8erJmGRbuTLuJDQ4b/KUNzWWf+oQj6oPmENY7Yccw4kcO2Oj5uJshTaddKahhrkH0rNjCZf5od+YfhdVIDf+TLAMK1lD0BK8H6Kz324ORZK/OtJ/kU2oGjf4paJ1L7xCSRIvloBBZYz9uL5JVv4KKZpE9KxdA0d3dCKqtVf/raGwk8zDppayFCtzL6rRPF5ZbB9aHhlsy9T93OxIFivySPkTEPR/+J+cPa9m+N219pZVc8j6a8psACDIyhIAnTu7HxOdljmyFOXaiZKr4a2mEIdQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: cfbd6b61-65db-4ae9-c806-08d9c5831cf7 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:56.9211 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QVTO8wiDVcZSgGche2r7YQ/xDxtJoNEeq+PN2iujTFVrBhQBJqODg2guprzInm+uxEZj149UFIauXUwiJDNMsDddzU7b+qQVo2sfZIY6Dys= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: av_PZOQCeI9iutFU2nIjGs32aGc6dzm8 X-Proofpoint-GUID: av_PZOQCeI9iutFU2nIjGs32aGc6dzm8 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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. Signed-off-by: Steve Sistare --- include/sysemu/runstate.h | 1 + softmmu/runstate.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h index a535691..b655c7b 100644 --- a/include/sysemu/runstate.h +++ b/include/sysemu/runstate.h @@ -51,6 +51,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 10d9b73..3d344c9 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -115,6 +115,8 @@ static const RunStateTransition runstate_transitions_def[] = { { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING }, { RUN_STATE_PRELAUNCH, RUN_STATE_FINISH_MIGRATE }, { RUN_STATE_PRELAUNCH, RUN_STATE_INMIGRATE }, + { RUN_STATE_PRELAUNCH, RUN_STATE_SUSPENDED }, + { RUN_STATE_PRELAUNCH, RUN_STATE_PAUSED }, { RUN_STATE_FINISH_MIGRATE, RUN_STATE_RUNNING }, { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PAUSED }, @@ -335,6 +337,7 @@ void vm_state_notify(bool running, RunState state) } } +static bool start_on_wakeup_requested; static ShutdownCause reset_requested; static ShutdownCause shutdown_requested; static int shutdown_signal; @@ -562,6 +565,11 @@ void qemu_register_suspend_notifier(Notifier *notifier) notifier_list_add(&suspend_notifiers, notifier); } +void qemu_system_start_on_wakeup_request(void) +{ + start_on_wakeup_requested = true; +} + void qemu_system_wakeup_request(WakeupReason reason, Error **errp) { trace_system_wakeup_request(reason); @@ -574,7 +582,14 @@ void qemu_system_wakeup_request(WakeupReason reason, Error **errp) if (!(wakeup_reason_mask & (1 << reason))) { return; } - runstate_set(RUN_STATE_RUNNING); + + if (start_on_wakeup_requested) { + start_on_wakeup_requested = false; + vm_start(); + } else { + runstate_set(RUN_STATE_RUNNING); + } + wakeup_reason = reason; qemu_notify_event(); } From patchwork Wed Dec 22 19:05:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572314 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=XvAME8cU; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=rbQEY8So; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3f352vtz9sR4 for ; Thu, 23 Dec 2021 06:43:22 +1100 (AEDT) Received: from localhost ([::1]:53564 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07WB-0004az-EC for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:43:19 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55502) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V6-0004Yr-Kk for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:12764) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008KW-DS for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXvVZ014454; Wed, 22 Dec 2021 19:42:02 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=3yKA6AprYov3Nlf25BWkbonBsDeRkqGT5BmmndmSAR8=; b=XvAME8cUS1TQQi1s1AQfNEbOgaaFhTY8E3wVLYGF0LIfdrCeY/zCXoG1KnMfPUN7VGqR UVKKJQ9h9kJef4wlZV4tNIzY4fdxXEmw2RfGbC4wmBG4xqsQIxw18p0CQqYKid+Yrurg WtwuILWD5ywUvmPCDHcFg/6wTw/zBlPUP4EDPCRCjuvrp7cdGYfPOjqonHIIbwhFsgZW ym+ExgWgcWKR6UMxgd7fg7+Yy8ve2dv7rN2rdYPLZBdkxLnZgGskxR2pyoSCQ9oGoKVg bfoVroL50e9SenaF6LGd6AjJtDZRNcPyPhq0KA77BJ/NatttqKWi0OI/uVo3KePaknoE bQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46qn0t1p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:02 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCeZ049074; Wed, 22 Dec 2021 19:42:01 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lfTT4Mu3qba28KUiEAUx3DIhfR/W1yXGCFQfb3647/0/LNFs56HPO4I4EP/oSQLFayvOK2kWheNztuXa0IWZtCMjh6DvZcviu39ZHS7DhSkqqiyuIpM+Dbwh7/t3cSaYU7GIpChbWq+nNg0wx5O2E54+pij92GEIeTcQvhWaxjt1WJ3X6BGYzCL+RgfxxHzRSH5wezWHHkxQ09FuWyJTtWQR0uuBfHlftFlqpx3N9iz/SCXWyi3S/15/6t1Y7GyICIP0KpwFn6FhSQ6kxyYx5T78D8yEZcUY3VLYi8EQsMnXL1C4EYoQh9YFw7xXnsm5yAd20HSSZdTEniqLslYjJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3yKA6AprYov3Nlf25BWkbonBsDeRkqGT5BmmndmSAR8=; b=O+xj+Ms+vArmVb+T4flEd80/+hFITbf76X/pzygfeY2E8T0ZNgmi4KVTh46Y+Yo9cTfTvEkdBoWA49FtGtXNPTXzguACxGXpIiolZCwWl0rbUfvjZFeNhPZqW21JxPa1CJnSP+CBhlfSVmvnBe9TMvuokBG+QTdctJSBTSbajCr0gNtIW94VyG3z7NIpyr+/P5JEGLCgAe2jOlP15MsB+dtXQwfo9CXaqzH8i3hGz4knFeVnkQKiS4hLvDinCYRyd6P2yqG8q4ibZ1wk6gsyNYuxuy0iquymITQJ5iXZ+Wj7qR8RJ4V9pfvQRDYwe5WTtyJIUQxn+J/3nhSkKskCKA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3yKA6AprYov3Nlf25BWkbonBsDeRkqGT5BmmndmSAR8=; b=rbQEY8SoxYoL3eeDQsSGFyTro/zSoJSeRCSYxIeEtxrUeSVXMpyMuo31nbJg/Ii0VlVEVgBSredc999ECpTtEWKBvlDAmSoYnz44z+p7pJNgQenWgZF613kxIfCbSb/rdxkebxG+9/TNucMdHCJoxWuJRk1SCZVMUKgc1jBHm7Q= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:57 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:57 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 06/29] cpr: reboot mode Date: Wed, 22 Dec 2021 11:05:11 -0800 Message-Id: <1640199934-455149-7-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9ba04ef0-f93e-4ae7-4d61-08d9c5831d3f X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Qkce1zjyO/1odFIPhKSeNHLpNAR/lxji32WUXqVcB4xoxM+p8j50U77tDpeIF0/8+pMYI7Kc5l7cdDXjpQ6Vi0tg76yhk267h1UWHuHWAKi3k0rdWWbCcT3/ZmVlIQ8+5cZJYqQflVkgUL/7RFxvXSd+XV+Fa7Uyjb8wRc1X60BzZWXVAiPiUGdPvJtNf4a/j4RjVuEcVz7AhNyhouZA2MyWy+g6TgqaPfo+FwS1duVwSRFW/w9NHJLPpZ3yvSNf9oYKK8yLF9c3AM/7+vRr8j7ngXO8YFURI0N65tNhhVPORFo0eMvVJIvCOG/tNxF1aKWRaXSLYzD0oazAgM70YSWSxs6IB2fNDIKSd0BwiFJtb8JjtLfXZYlnpQl9BKRT5Qee3aVKzaQxiR9cAVLtI2fiapc3qUsgBHcpL1EPicrxp4kK/zNM9ABG3Q/3X3pTmM/AHUREnrLla5PfZu51wI3lCnXzHN3NiWIulSPlfE0cqaNWD8D3DVFhw3dRL3P5AlXiZ3EpkA/1ISW1ddefYBK7ON/j3aScE1N2l6wqC5yCCdqnSwt0o/GPj4V9QP2FCBVyhBkXdEsGUqdS64p9U7F3q95MpQ1Xs4LRapCiYwkUtl6wHXh+Zeh5LfW+uSQScRuKr9ZPr9+HuamZYNx218AdEI4xJXuqGoTPTAtotipF8i5tP4LrfMlRtI7fxUzbKtQnWWAHNXj0hxzoPH0QlA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1GTtWbLSjoEGmq5PyXx39pJrYlg1W8UGaQ60//tjCsjMgZY/NSDLN4b9abwVkj9hf37Pp6TrSbmWdkUcbYiaBa+Dj2xZ8nJ8fT0aEAhHfyHbJAKOBmjMzU622xtr2D9noZUngTDd0+7HGWPIMo6+Zeez0CcH0pbr40ZQP5fe5uxE4LCmwNOzTDGxQN5bmgSJpNh4gTnunxUnwYvAARg1eMiQnV6W+7EOuF9PPUQR8lo+6qSefeWFgEdg4fNwYDhqeeFhuGThl+sMvGoOXUOOvxmx+VCM4EC0oc5KcflItkmbmjkOUpuV6fRpVm06r4GU01ZYst2g+we1F4ZUOPOy46yR3ZyVuuZ1epSNSfGvBIA3jlkEbgDn2n/dT0zz6aaeBc2/vdBKOhYwQU6FARz42X+W7tMJO/ZE8y2fgydIYbu8ZHuGjScI/IvcKfNI8gJkhCVQCS8e7EobucOiIq5eBRMnewgukO+627EkE3yYS1YrJ0tB72TRU1fSkVylS8zTad/Uyr6shAYvXTYNlPHVJFONtCaCTU3egn9gbA5Qx99Y8LyAMqwqQJTT20/VPGO8tGUO7CiYoXtXGk6s4+QaqSiSydP6v3eG+fsTogKx2mGTzD8kO4zcOf8P9oW2vj6ewhQ2mSCm3Jk+d5TngFtysuWmmSqBAMJBfq2w3exjanxl5oi6wTfLOC3TJjI8GNn/59zfJUBgE32QOFhcSLZcmJ4SVaUMHFt+Dv+vsbioLt26uZDKTeGhBACyA/cAEDZoulsrKEnK+TQqhDgaeLOLJn7xUvj9/q1HS82dGgXF2DaXg5fHXKi7KYrIWICqSeJfiOmNB4g9bT1KS6Edjj9pOzFKMoUpG+XiE1EH3asX76j2CxnV5a7aEbDjRDqRD3/YQ/pXHg08VZWtV1VP6446sJwQQzQC+dMMNAR0fc44dOfcPgWwKWw7g2GaB9w1dmbUF6RMsGaOgHDAfgBorxLXBiOjl+IT0fcRYUUg4GqJ1Xcxs81WvnCTINV6qf2x7Mfmqu6GAX0FFwV2X/mfU/suBbZG8QapPS3Du4TshLerJpe72AFUtRogMCyagD+oaGTYxF2scAAEYqNT/dUNX/AadN3YA72kVMIWzaiW/l9yV2WVEHY3Het9saOEC2OqSJKCHmYbSzo/lzB2CDO1yLnV6LNxp2Su0ivudN7fKviB/W5UzZGXo40jJs9w6egm0IkYNivAJWzCdJsg40X2W0SNPpmPp4ZbOdARnyGoWzyVgtN4yqVlSV7GbBbcSTrIfFTIzWsqQW8ZQRPuuPwh4hO5K6gXnMGLGUwhYpT31zQvdOq5QTOeZvBGAep8aYsv5OzixgCwL4V3VzhGK7tRHknTSBg0IWh06OgdZLq6TSjAFruktnsVXV/6OChmNe6V3mMlvY7H56VCU3OLCKrU1IAZokNBuk9+LFYSI64VoyjXqSh/lxXj5Rn64EP/8Bgdw4Mm5dXyF0HElcCBTTc+o6Dy66MFowJ+KUsF45st8lPHThMNy4vYEejlIBwEQfcvDxMxgMTwxYMfDYGFWlMtiS7V8cvxHmgSUlDp1vObNvXCPpptPSzzViv6JM0SEIXOOnwT92jb6RpjAWDDFS26pVYiV3nsTanlifdkCJDcUFuaKnB75J2RE453iD15ZQcpzLuDWXN4KDYv7ldoyI6NhnEcSQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ba04ef0-f93e-4ae7-4d61-08d9c5831d3f X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:57.5148 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wS6WvgSicleAXtscwTxwaEekT3tAj+h8wO4gxdcvkGOGQnNvZTDYGrh1YF1D4i1wmGr8aoj/WUDURqdeXyOkbeyZCGZFzeMfQTdVSLZ8Aq8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: w7rtR1OlnOkkU_pQPeGx0KlYe6h3iM13 X-Proofpoint-GUID: w7rtR1OlnOkkU_pQPeGx0KlYe6h3iM13 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Provide the cpr-save and cpr-load functions for live update. These save and restore VM state, with minimal guest pause time, so that qemu may be updated to a new version in between. cpr-save stops the VM and saves vmstate to an ordinary file. It supports any type of guest image and block device, but the caller must not modify guest block devices between cpr-save and cpr-load. cpr-save supports several modes, the first of which is reboot. In this mode, the caller invokes cpr-save and then terminates qemu. The caller may then update the host kernel and system software and reboot. The caller resumes the guest by running qemu with the same arguments as the original process and invoking cpr-load. To use this mode, guest ram must be mapped to a persistent shared memory file such as /dev/dax0.0 or /dev/shm PKRAM. The 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. cpr-load loads state from the file. If the VM was running at cpr-save time, then VM execution resumes. If the VM was suspended at cpr-save time, then the caller must issue a system_wakeup command to resume. cpr-save syntax: { 'enum': 'CprMode', 'data': [ 'reboot' ] } { 'command': 'cpr-save', 'data': { 'filename': 'str', 'mode': 'CprMode' }} cpr-load syntax: { 'command': 'cpr-load', 'data': { 'filename': 'str' } } Signed-off-by: Steve Sistare --- MAINTAINERS | 8 +++ include/migration/cpr.h | 17 +++++++ migration/cpr.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++ migration/meson.build | 1 + qapi/cpr.json | 56 +++++++++++++++++++++ qapi/meson.build | 1 + qapi/qapi-schema.json | 1 + 7 files changed, 212 insertions(+) create mode 100644 include/migration/cpr.h create mode 100644 migration/cpr.c create mode 100644 qapi/cpr.json diff --git a/MAINTAINERS b/MAINTAINERS index dc4b6f7..3c53b0d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2988,6 +2988,14 @@ F: net/colo* F: net/filter-rewriter.c F: net/filter-mirror.c +CPR +M: Steve Sistare +M: Mark Kanda +S: Maintained +F: include/migration/cpr.h +F: migration/cpr.c +F: qapi/cpr.json + Record/replay M: Pavel Dovgalyuk R: Paolo Bonzini diff --git a/include/migration/cpr.h b/include/migration/cpr.h new file mode 100644 index 0000000..0f27b61 --- /dev/null +++ b/include/migration/cpr.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2021 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 + +#include "qapi/qapi-types-cpr.h" + +#define CPR_MODE_NONE ((CprMode)(-1)) + +static void cpr_set_mode(CprMode mode) {} /* no-op until a later patch */ + +#endif diff --git a/migration/cpr.c b/migration/cpr.c new file mode 100644 index 0000000..ca76124 --- /dev/null +++ b/migration/cpr.c @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2021 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 "exec/memory.h" +#include "io/channel-buffer.h" +#include "io/channel-file.h" +#include "migration.h" +#include "migration/cpr.h" +#include "migration/global_state.h" +#include "migration/misc.h" +#include "migration/snapshot.h" +#include "qapi/error.h" +#include "qapi/qapi-commands-cpr.h" +#include "qapi/qmp/qerror.h" +#include "qemu-file-channel.h" +#include "qemu-file.h" +#include "savevm.h" +#include "sysemu/cpu-timers.h" +#include "sysemu/replay.h" +#include "sysemu/runstate.h" +#include "sysemu/runstate-action.h" +#include "sysemu/sysemu.h" +#include "sysemu/xen.h" + +void qmp_cpr_save(const char *filename, CprMode mode, Error **errp) +{ + int ret; + QEMUFile *f; + int flags = O_CREAT | O_WRONLY | O_TRUNC; + int saved_vm_running = runstate_is_running(); + + if (qemu_check_ram_volatile(errp)) { + return; + } + + if (migrate_colo_enabled()) { + error_setg(errp, "cpr-save does not support x-colo"); + return; + } + + if (replay_mode != REPLAY_MODE_NONE) { + error_setg(errp, "cpr-save does not support replay"); + return; + } + + if (global_state_store()) { + error_setg(errp, "Error saving global state"); + return; + } + + f = qemu_file_open(filename, flags, 0600, "cpr-save", errp); + if (!f) { + return; + } + + if (runstate_check(RUN_STATE_SUSPENDED)) { + /* Update timers_state before saving. Suspend did not so do. */ + cpu_disable_ticks(); + } + vm_stop(RUN_STATE_SAVE_VM); + + cpr_set_mode(mode); + ret = qemu_save_device_state(f); + qemu_fclose(f); + if (ret < 0) { + error_setg(errp, "Error %d while saving VM state", ret); + goto err; + } + + return; + +err: + if (saved_vm_running) { + vm_start(); + } + cpr_set_mode(CPR_MODE_NONE); +} + +void qmp_cpr_load(const char *filename, Error **errp) +{ + QEMUFile *f; + int ret; + RunState state; + + if (runstate_is_running()) { + error_setg(errp, "cpr-load called for a running VM"); + return; + } + + f = qemu_file_open(filename, O_RDONLY, 0, "cpr-load", errp); + if (!f) { + return; + } + + if (qemu_get_be32(f) != QEMU_VM_FILE_MAGIC || + qemu_get_be32(f) != QEMU_VM_FILE_VERSION) { + error_setg(errp, "%s is not a vmstate file", filename); + qemu_fclose(f); + return; + } + + cpr_set_mode(CPR_MODE_REBOOT); + ret = qemu_load_device_state(f); + qemu_fclose(f); + if (ret < 0) { + error_setg(errp, "Error %d while loading VM state", ret); + goto out; + } + + state = global_state_get_runstate(); + if (state == RUN_STATE_RUNNING) { + vm_start(); + } else { + runstate_set(state); + if (runstate_check(RUN_STATE_SUSPENDED)) { + /* Force vm_start to be called later. */ + qemu_system_start_on_wakeup_request(); + } + } + +out: + cpr_set_mode(CPR_MODE_NONE); +} diff --git a/migration/meson.build b/migration/meson.build index f8714dc..fd59281 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -15,6 +15,7 @@ softmmu_ss.add(files( 'channel.c', 'colo-failover.c', 'colo.c', + 'cpr.c', 'exec.c', 'fd.c', 'global_state.c', diff --git a/qapi/cpr.json b/qapi/cpr.json new file mode 100644 index 0000000..2edd08e --- /dev/null +++ b/qapi/cpr.json @@ -0,0 +1,56 @@ +# -*- Mode: Python -*- +# +# Copyright (c) 2021 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. + +## +# = CPR - CheckPoint and Restart +## + +{ 'include': 'common.json' } + +## +# @CprMode: +# +# @reboot: checkpoint can be cpr-load'ed after a host kexec reboot. +# +# Since: 6.2 +## +{ 'enum': 'CprMode', + 'data': [ 'reboot' ] } + +## +# @cpr-save: +# +# Create a checkpoint of the virtual machine device state in @filename. +# Unlike snapshot-save, this command completes synchronously, saves state +# to an ordinary file, and does not save guest RAM or guest block device +# blocks. The caller must not modify guest block devices between cpr-save +# and cpr-load. +# +# For reboot mode, all guest RAM objects must be non-volatile across reboot, +# and created with the share=on parameter. +# +# @filename: name of checkpoint file +# @mode: @CprMode mode +# +# Since: 6.2 +## +{ 'command': 'cpr-save', + 'data': { 'filename': 'str', + 'mode': 'CprMode' } } + +## +# @cpr-load: +# +# Start virtual machine from checkpoint file that was created earlier using +# the cpr-save command. +# +# @filename: name of checkpoint file +# +# Since: 6.2 +## +{ 'command': 'cpr-load', + 'data': { 'filename': 'str' } } diff --git a/qapi/meson.build b/qapi/meson.build index c0c49c1..8d5515d 100644 --- a/qapi/meson.build +++ b/qapi/meson.build @@ -30,6 +30,7 @@ qapi_all_modules = [ 'common', 'compat', 'control', + 'cpr', 'crypto', 'dump', 'error', diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json index 4912b97..001d790 100644 --- a/qapi/qapi-schema.json +++ b/qapi/qapi-schema.json @@ -77,6 +77,7 @@ { 'include': 'ui.json' } { 'include': 'authz.json' } { 'include': 'migration.json' } +{ 'include': 'cpr.json' } { 'include': 'transaction.json' } { 'include': 'trace.json' } { 'include': 'compat.json' } From patchwork Wed Dec 22 19:05:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572313 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=ex4eUN8W; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=RoM/YbZi; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3f42xGpz9t1C for ; Thu, 23 Dec 2021 06:43:24 +1100 (AEDT) Received: from localhost ([::1]:53674 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07WE-0004ft-9C for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:43:22 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55436) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V5-0004Xc-2C for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:11 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:12144) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008KP-2G for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:10 -0500 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXufq014442; Wed, 22 Dec 2021 19:42:03 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=AHkIlLeKWP4Wsdh2SeKkcOJujvmNOHt5gI3ruFNHWIY=; b=ex4eUN8W9GzijdMN2/zkXa2/iXGMqNkBZlYdHbWmGNXGA7NcI1QpYFH9bgEMT/2YL5GX jhidhp9ZSjy4tyyiTLhi92Lm+Sd54gyVEukEJXc786hOZGfHEALMi7kon3rsMriy+z9T HRsFOTIEPKul/QJ+A/z/tbGzOtKANE1qDqKvwjuOfbw9Vyx07XyY60bWFlUsUNDqb7NC ybvVwPV23ktOtHUMlIJKRQisF6rcwlwODXYelJSioi+oRTe8j+iCssDr6d5MNgJ76LlB VzBIXMNuhAOmdGCj0z9Gw4vdsw3suRIFzFo4i4jNpTNpEXz8SPIw5q9AOdUFwEc+MkbN kA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46qn0t1s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:03 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCea049074; Wed, 22 Dec 2021 19:42:02 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Oln1AmsfoPJnGfi/kqAgp58zA8Zv9rX+MU4sFiyaq/YcMpeZSU+joOu08lILdSzNcyOX4Q5rC7vI1bUbJmlIdEmX6Ee0sTcrOpERqCjYMO2ZsjYcycxJjudjLjYJ8yyiZe1HIH2ICNJ+OTygCzgY+ih9jMhTEp8WGdWBlk8+j9Jbo4HModc+TRuYIZqb0vJ+DV/ASaG1E1I3Li9ikwguOsMkgDwbIZ/x/9//g1tGtWpb5v4Ye6kQjZyvxQbdhYzcakaaterY/LrFdNRzjushYfA+N4eZ0H8QVrHXVamtFfq77b54fyMkPnxCt7rXlf1pqGlAgf3RX16K8FGqZGsVPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AHkIlLeKWP4Wsdh2SeKkcOJujvmNOHt5gI3ruFNHWIY=; b=n2L79BZE45+bXbYqPkU+qXz7nWj2i13GgnF2WN2S+4+9O8PTW7gqz7U85fWjWgyR5+Y5EHMq/7bX5vY/sU2uTuwBgWm/0qeM0yilx/fmEeuzkm4+I/MQbI0pMXI/WP2+Z6ednOyrx2+zgyhwq4fT8p7IPwmIE3os5qYBIMRGOJN4vkA+njBKUR8oS29+Rh8/I3AuJ7uP8bNfOTFUNu/kKXTf3xCDu2qIp3bsxOoYFRTQ2dhOLEJ8xGmNLCQjmzUPwHc4umPHsvc0OatfmRuyLilqOfmT8zpMzWDvmWkZSjR7pWJ/lGzaIjpEgdjwu5MNWs1HSBTseQuzJtYkH74rwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AHkIlLeKWP4Wsdh2SeKkcOJujvmNOHt5gI3ruFNHWIY=; b=RoM/YbZiQmQ115njKUZ67B9DCmZXMOU+j8Lg4TlkWlcXh13FnRosXP/bMz2gPGx5VIJFw6gJsdkuviE25io1dRLMoenSTV1rK6aG8Nby9I++46OXJQur648wLuJHLlW0hJ10FryO4FkSySI0ZlT7IV/kgOXlYo/pMXmLn/SaF9s= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:58 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:58 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 07/29] cpr: reboot HMP interfaces Date: Wed, 22 Dec 2021 11:05:12 -0800 Message-Id: <1640199934-455149-8-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7945cb02-6105-4838-d0e1-08d9c5831da5 X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:296; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /fYwWUT28lSoA3lR3gPfFVV41WZH16DKQ/Zg72AO0T8zFUid58R9EuXhyCS9uWjOtqoEmkc96Of0KxhKyc0+MxWw7+c/eIHDVye2B/x/pXRdKYPCiA3DKdDYKWpSbfxHU/Uo/tvntx6LxF3oK9+PQJEddyd2bFcGxX6Ib/IstwIAbkzZzGkhgUNXgRa2MDnR1n22bZqCfBVGwhQFHKmYrKCvKD5lGnSqSgoUxh39u+5ASlF18thvkGMqVlSKEBNHfzL0ifMEwb55891Uye1rec4ZcpCfCW/GY1QOFQV8YXXSoiLTjVWnH5k3VPEJib3CiO1RMH8t8O2VL15pkKqOdqWPqjf5EXEQUAnAQoyKxTyGlmxDQ2prhOWD5A5DAujDM9/Rjab/TiceBJRjW0+EYYMjveOPHGjSu9IdUEIw802Sbsu7ssGQdExKgzSAgxT269zF8WW8bLL+Bu2k9d4UMwW8uiv8L1Sd6tR0XqFtq+3nbbnwFet9uMJu0U7XGTNVTXnZJWgYW3uSFsu9sNJhAhiF2k/HTfrmtHMsdqDLuaCo4StQgE0VBB2uQwgzBcgl4aT3ZUFtHnN5es0yIL3TrSiGu7ARN1oiubMsnzOAoEVi+Ip1WuNZLLbL9zJvOqzAXdnWNL8GYrNyoTPnyaiGQdyyeQNRFX4WSxSH0jVq5u/cAXqjbD8eBhx9vEsl6QJAqBWFmL7LqxXw9bSqtxSvgg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: laLmlQKmKaWIyPMp9jBMaa/5Mh7n1zNx34BZKQ0YJkqXkv5X9+sQK87gbV5nf/s4Kv5K9bRRA7poEcexK747L0AlaAkUTdYqajQvjBNxTksyqtNLvsyvegSOGoMz0Ln5PRCgdNMO5ObMuihxMsfD0U0fmH47ka+X/H/r3QV+6+z0Rbmz6XvhGC9mKFSB18+J5hGHYHPBRZnHmd/JcS755RSiKI93MZVfm7cioLFPyaE0hq+ZrukLppb3icSyBWxGfghW27+vC2lHY/SzoHykD9pCK1EnZTPViBWEAnX/b7Vexk3FiLVPCJiYl2FBFfM1Qtkulvx0ZIycoJi84tPj5U0oOxUlrZJyGB7VGh1eZMqj+jO/FLSNF6wyR9QnYBZyjwzuRf4mbNFvnO/yIEjuahp0Y+Tap0u1yShxVrhvkdOV7gtKKrEWHwkLjUZYp6kBEnQGR+Zy68m/Ed3DE0532fWTKg+7HoDRR1tPCpWTvXBStSnJpaTMJqwwgfifEpU+Au8x6GgWJrxqNdkxAnHi7ldifnM+RK+yy+wHbLc8dRxvWwEth8pwQlQ8EuC6IrD2fB8A7ITc5lC5NnQeWHzBOvybLP/EH5pguaqDjJ6Uqdw0u1bY/UZx2YHdRDZoGPj2LliAqlBn0y7cljQiN1SKUhBv3bS24QVczZaMVyZ/hXICQT6jW2cXR0/4xuckGspjdF333wVqIOcrcEa5wkrjY8uEl1VRMu/khuIK+KTDauyKQSsEgpn0bmQWgWf0buv2eYX4VoYgClgZoEUHGUNEnuypXQAUEzGRPrq40DkPyKAyoG37ZhPf528rtVij0Ji9fbUfiwou72I3OiuwoQuZFBjGWq3BgEYrz8BfWrrlVvfZOhTGMBqGNiV2sFSJQVGvQR9CQouXJryyazz7mnytablKmaGACFLUGy4l0PQk74k/lT466vin6gQtm721IJn+OJGYkMBbz0Nyg6wwJ29Ab2jm+XzXkcjetu0rBHFG+TMauoB/L65CGcpDHpINF7pm0nm7STjpuWl+aqtxxDk46T7RG7GQVdQhjockg57X7CCd4BqKJzY7upaif/TqYc2XDddPfKvJfbNVY3Mnt2WxJn8pC+RYSB6hbpelupM5qbFD05L49DiLCvIfH50D+MV1+IK6WjkKEGWfKZIOOZiQZ4KHy3mj9IVh8CkapoU5K01PJi9dgPHpp+D6h7ZsS2cDsOSWLZ2ujdvY+HgmWTD4jUaQ0VfTuH4/SQaeUA/ARRU1tmV2kz+XBKXge0wn+jFGuKNCf3wGodRN/922H7tmx1oTSghikI/kVMIWIiOpItf+SW2z5uQzcITzNjNMO/BaxKD0UgAQnwWWWnzxIrc87Mk0+qAyZRqLkfkTM+pxzHhj7pjd0am6XYJPovXcin+DSnItXKlCTkCNlHOZ6t6CYHy4oRNS95ijWn3UohZi/+yx8HawNOKp6FUnSxAyPm16nTGann+CQzKV5pcdOGpE7yn6g3rl5BrLgV6rUlm9viw64uAUxRjwQK9k5l0R3K3ENfnC/HoNL/qmT869VXs9bMHXUmW2qLDHvsGEm68kQvCQjT8ilwrJtMdv6C5WbH8HibHtKLB0pNEX+w1PPWKjNdVseESgHC55qOMIWxLgX6By+w6LnSbXgYxhJa20+CG8H/yyi+l/cuuEuTAhJAHyxw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7945cb02-6105-4838-d0e1-08d9c5831da5 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:58.5929 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1zTy5aoc7V6IvW+xRN1OQa0T+R9JcQghZ4LIULE+tdLicZD5cNMzERYUq6NWF/SBbGXUSbqaCppLKg5YTwAFvi2qTOWGU0Z+1xijZ1DD7xM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: Zj9mBPUmPnvrghTVp5qfQglGEvVvyQdP X-Proofpoint-GUID: Zj9mBPUmPnvrghTVp5qfQglGEvVvyQdP 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" cpr-save Call qmp_cpr_save(). Arguments: filename : save vmstate to filename mode: must be "reboot" cpr-load Call qmp_cpr_load(). Arguments: filename : load vmstate from filename Signed-off-by: Mark Kanda Signed-off-by: Steve Sistare --- hmp-commands.hx | 31 +++++++++++++++++++++++++++++++ include/monitor/hmp.h | 2 ++ monitor/hmp-cmds.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/hmp-commands.hx b/hmp-commands.hx index 70a9136..350c886 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -351,6 +351,37 @@ SRST ERST { + .name = "cpr-save", + .args_type = "filename:s,mode:s", + .params = "filename 'reboot'", + .help = "create a checkpoint of the VM in file", + .cmd = hmp_cpr_save, + }, + +SRST +``cpr-save`` *filename* *mode* +Pause the VCPUs, +create a checkpoint of the whole virtual machine, and save it in *filename*. +If *mode* is 'reboot', the checkpoint remains valid after a host kexec +reboot, and guest ram must be backed by persistent shared memory. To +resume from the checkpoint, issue the quit command, reboot the system, +and issue the cpr-load command. +ERST + + { + .name = "cpr-load", + .args_type = "filename:s", + .params = "filename", + .help = "load VM checkpoint from file", + .cmd = hmp_cpr_load, + }, + +SRST +``cpr-load`` *filename* +Load a virtual machine from checkpoint file *filename* and continue VCPUs. +ERST + + { .name = "delvm", .args_type = "name:s", .params = "tag", diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h index 96d0148..b44588e 100644 --- a/include/monitor/hmp.h +++ b/include/monitor/hmp.h @@ -59,6 +59,8 @@ void hmp_balloon(Monitor *mon, const QDict *qdict); void hmp_loadvm(Monitor *mon, const QDict *qdict); void hmp_savevm(Monitor *mon, const QDict *qdict); void hmp_delvm(Monitor *mon, const QDict *qdict); +void hmp_cpr_save(Monitor *mon, const QDict *qdict); +void hmp_cpr_load(Monitor *mon, const QDict *qdict); void hmp_migrate_cancel(Monitor *mon, const QDict *qdict); void hmp_migrate_continue(Monitor *mon, const QDict *qdict); void hmp_migrate_incoming(Monitor *mon, const QDict *qdict); diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 2669156..b8c22da 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -33,6 +33,7 @@ #include "qapi/qapi-commands-block.h" #include "qapi/qapi-commands-char.h" #include "qapi/qapi-commands-control.h" +#include "qapi/qapi-commands-cpr.h" #include "qapi/qapi-commands-machine.h" #include "qapi/qapi-commands-migration.h" #include "qapi/qapi-commands-misc.h" @@ -1110,6 +1111,33 @@ void hmp_announce_self(Monitor *mon, const QDict *qdict) qapi_free_AnnounceParameters(params); } +void hmp_cpr_save(Monitor *mon, const QDict *qdict) +{ + Error *err = NULL; + const char *mode; + int val; + + mode = qdict_get_try_str(qdict, "mode"); + val = qapi_enum_parse(&CprMode_lookup, mode, -1, &err); + + if (val == -1) { + goto out; + } + + qmp_cpr_save(qdict_get_try_str(qdict, "filename"), val, &err); + +out: + hmp_handle_error(mon, err); +} + +void hmp_cpr_load(Monitor *mon, const QDict *qdict) +{ + Error *err = NULL; + + qmp_cpr_load(qdict_get_try_str(qdict, "filename"), &err); + hmp_handle_error(mon, err); +} + void hmp_migrate_cancel(Monitor *mon, const QDict *qdict) { qmp_migrate_cancel(NULL); From patchwork Wed Dec 22 19:05:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572342 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=dcS8YXLg; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=NkHBIEzp; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK4Ms0HR6z9s0r for ; Thu, 23 Dec 2021 07:16:07 +1100 (AEDT) Received: from localhost ([::1]:51940 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n081r-0000kw-Gc for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:16:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:56086) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07WG-0006ZA-9Y for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:43:24 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:46548) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07WD-0000PQ-7C for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:43:24 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsgk013630; Wed, 22 Dec 2021 19:42:04 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=ikJSggrzlkAklrQejdgOsrgVjwnuDuEGolk1VU1OsCs=; b=dcS8YXLgQjRawdYstvPx/aO3gxjbrFF2FwSjBhaUfuNlVqmFygcasOcbavoFr9Uy5VNy L0n0Gs3K8PQXPPuNK8pTcMF76nBSOITaPltEhw4pt7np3UrjIxh0vU9eApqHhfI8PaxH v+e9Fi+NHsaNSvylBcAfcEElgv4Cos3OgDQHLNN/jDaTG/Od1Ciy7i16HyXAGkDDPlo7 wNFgE6GXpDWI/+HFoMS+E08WcXl76mvy1ohgvaU50J6WwEnT5bsrhfVudnZJ/rcPK6Rv dS/AKoLQ8tnC8WGfYpwHx6Au0GSDOQdjVk1abuQVv61DiyuA7+IyG8fw8BuNHHAzveBC Xg== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tke-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:03 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCec049074; Wed, 22 Dec 2021 19:42:03 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IdiqLHlPbm+PYeBWb908GgBEffN/fPidhOPo6S9wK5Vn/Pqpu06g2gNgMPzNApEsDOF8MGsJY4VhI9wO28DYWlQoQ4XJt/TEnkof1N30uTfmsyoWoZNOmi4ZRz+tobUrTO0lt6fzHpMZxlyH4C7vNxEMXpdTqPDejKexS/0Dq265O4ix+aENI8sQf9t87F4wbZea0ZSkG2jsrAxTg3jA6XTejmZxcpzX9XcTmiXQeMabxwCQS1kXNh+621n2Hnm0j/3kLTwy/LQdBE/iDz+fH1WsyI3IcUnEkkRZuelaHN77Du4X8E59IlxjFvQUtNQa14CR5xGNGJz+Trb5aF86yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ikJSggrzlkAklrQejdgOsrgVjwnuDuEGolk1VU1OsCs=; b=JCVMEa1DQNCGfDYpUz3GcYezC3AryNIF4lYFpDgnW4h/wbvemuUyV+PNa+va92JKevIpi8Ze5TiocarnCposdTNh5oqnkbJWZaqMAnRKVXNoFLNcnNwePq6C8UXO7M3GY4mVRZtEkWrAbnZO7Apc5YdgtF9EAEAiWMEXoT2iyvHEAeeWeqQr+TnVC9wdbyuBB2zCq63A451m0p7fNkbz0oNnN47ctBfRrs2mdDP0TcqAcKRnkq2c9/WVe2komDUDzPlKjCnU8d+F3oFdjXjzK9N8EdlItLR2aj0bsdSTxEfvadM613ygsjj2uG15lhx1qKtQ02/sUowi2Dtq2fXJMw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ikJSggrzlkAklrQejdgOsrgVjwnuDuEGolk1VU1OsCs=; b=NkHBIEzpc4ChQCbkbjxeCJGy3SH2Pqt2/fK3/KH9vkEKVEnzgPB9iPwDy93CcsF5dWa8Uv3Y4GmiuiRvWMR3Wftsbpq+3cdb+M8IZMjgLUPcuWvpnaIm2nw6xYbQoDIk2djt2mjpvNmlJaTgv2lF7LQvQn3HC0WsBfLkZjXTnrw= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:59 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:59 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 08/29] memory: flat section iterator Date: Wed, 22 Dec 2021 11:05:13 -0800 Message-Id: <1640199934-455149-9-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b817c274-3e1e-4f66-6500-08d9c5831e3e X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9fLhxt4wJzEZHnpiDS3SRhR3Wgz1KFAMJSJOUXoYA2cbZwg5Fa16nzm8dlyjvIBJe2REx3QQsh++9sksD6r1aTxm+yps8dN4mdiPHjMGrBkXfeyY4kfi5r5//mZspRcL4TnGxEdJ0Pk1O8BDLfB5ZtHPAghj3C8l8vxG32WBXNL2Q3sRGlXERCttrf/qhL5W5fBW0LmeABshb0JhcygoS4m6ParlMUzeNSUNfRqrCw6HtLOfAN+pmF6vw8xurV8qm3A0tCkYj1WCSuP4w8d5L39Yq7p6hCGPb5R/75DFqHIjkS50DinVGrZcihI3FvHaK5KKRxk6cxK3KgSbt85gx9k5Ww3RaDt5hqmzbwtdcwrVr8M68Gtz+qocgmP8da8hFaf5SCbWLVAk1w29BiK/KeMl5PaFcmQqTaSUTb4kZffzC6MHoWNBNPzqLC1FImkP/5HDJOKO1r2viMyJuQbfge8V0CTCcU9DM1SgD4xCFvVgWal4f5pB2G7hFEKqG0JVEiVnolKxdUOsvqhdnEamvPfR3TMWMAfg3rVeqW/hrtJc4apazf6H4lmX5quoR5axZWFTS/m27STrDupwvmc6Fm/YkDDQXX0Un20eVedbfHRX/wjiyGZoNIOnCS1IC28HoKZS2+O/L/bELqP5j4SWuVHXVR8JQoRiggKvBijqKCHnOgqKnnzE/iRsWaU1XIdWth8RL0ZfIH/AF0f2xQE8og== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XhZlbRglLsOWVusohCpSpj9D0poP7Peot0+0SW+iwO19RJcwFbd255vJy9Ys9EXI6QZZl5u1FAw5Xj9ePANYEpmv4hTWAEvG5RzuMOLry6CIn2aEy2qO5J8qU2ZXE65UCrT05gif1TLwktrSncVZGHgLUBvz1xDb8FqLDSepXSSIiyieWPcdGu32rITkcHcpkKzzUbHBF59ivTgBlwTdqpS3LAQybFWnzKLZdog8c+3EbtlCEpr17mEPMZ1bH304suFHnMxKba8iTOJvG3kmJTPnQ4NqpJxPhV8cVq6+CzfjGGajtmIN9H/gJyIeTii/RiRwtUZIOglShAubUTP06YvzbDO28pgtd3aHk22KM7VwIVat0s7I9IJLMLtktkR6eHXxS2nX944Jt6Xt6ScAdh3yy++BqGe3121PdmxrZf4lZhaUpyma+dkqrrGwQ/6gUvujswjuMO5m79+aDZPeB21O7/kS/WGO2JO5yfDmE5Vm15BnscGgjc9VH+Wq06NuG6hpeIG0dAA9/u+SvfZNVjxm94FaQd0dfeW3tllwr1d2BdX7ndh7uQ//rxMebVd7FTqchhn480B5VOBr0wLvxnX6Z0WgYWJQyzphw3rC5xEFT3ZaVbLcMG369jHtxfwZm2Hi2pP4+T84dNQ3tYHFevfsIhCOC2t/IgITHWgW8OHDtXpUXEd9pptvbFylP1f9xmUAW4cXuVSnQlT0sKqXctAxnFa3fHzJrVN7i9YbTTgbk/tEiiZ0VSrc4g0c6UC9E9bEM2PE90oWONuPisliw7fRFY5dqUlQwceHynnlCoPdV+M8f3VbdeJI1zqMRlq+gcphZcZIIz724fHI9JoIQxQmoaVgD+1MQZtOmo664NF3H8S4/3CIl6xVoLstxA2L7yGrbtbIP0oauSGYgX+anQ+Izu9nWsfh22cie+NIVkN5kstmDPF27CaJi0jnYq1fZXXsqO1ROdAUct+MhSmHMYmOO5q0EXgS6uMTNmqOUsN9AopsKZWRUyv6ZJJzKKOTw9ZTr4VFhz7RROyM1hBWGkv9D+OKh8eNSfSOrA3C1ktG4jJt2fSkZVJAQGNOPYAo0tyrzeE+DlKffTllyYgjm4WBa8cxMPC/crZphQ5oDUVKe3hfvJhJqNFPwaFhOixMcZSKEJ8PHdfaghmizpArYeLFuu6WrQAovLrQdg1QSunNhfAoJoVFRdQoXPnPxaN0fK3mhnrHKGTADDduqhpm5XeCkZfD9aA3EUcgyL3OmCQnjKaC29Qxocx/8R/J0G37sn87DhYYN6G1y7dEyouRMoYUGUM2Yno02sRmjHAfD5qLgMvkFyQppi6MwQL903EW2E6dLTtBf6SQeinvFNolPBiCiQSb8Ezgnd4RhIfBxK7Ia3YWAcjlJslRgCy+Co7rF05cqaqltdYE2rwKseg11oUFkkXiIv3LkBPm9Nj2G6vnuUECslhKaL00cPFd+3PnoCmhzLLn3ZOh4ny7fDk4TZzri0ap9OX0IB+IR0KK2Q8cOx70krCttfL7SodPRSXo3RQpiCur50MzbGSRlgfrgn83sK/jsR+nRD5UyFlB1c+bbufW8xin7OTsLF66e+xEx/xKiIITgrPFAzOEwglSPU9nwvjGuqqe/A1lfMe+tReCwGTiJTxXY1ysaEPMY+to1hayQJNGBnNpOZ1sdwuQ2Q== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b817c274-3e1e-4f66-6500-08d9c5831e3e X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:59.1397 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: B90TekiMUh9U+dCoie4+LD3GO7+79aRUXfQnE0aH/afv5KmjA/2ZuC8hllng8ny1QNn3MpWuMxFaT9CfIGcOIal6HW8kAW9DT56AIbC6U+M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: 5ADJmdaHCJ2B1a67GuGSJ_FcQe2mIJJ7 X-Proofpoint-ORIG-GUID: 5ADJmdaHCJ2B1a67GuGSJ_FcQe2mIJJ7 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add an iterator over the sections of a flattened address space. Signed-off-by: Steve Sistare Reviewed-by: Marc-André Lureau --- include/exec/memory.h | 31 +++++++++++++++++++++++++++++++ softmmu/memory.c | 20 ++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index 137f5f3..9660475 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2338,6 +2338,37 @@ void memory_region_set_ram_discard_manager(MemoryRegion *mr, RamDiscardManager *rdm); /** + * memory_region_section_cb: callback for address_space_flat_for_each_section() + * + * @s: 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_section + * 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 caller. + */ + +typedef int (*memory_region_section_cb)(MemoryRegionSection *s, + void *opaque, + Error **errp); + +/** + * address_space_flat_for_each_section: walk the ranges in the address space + * flat view and call @func for each. Return 0 on success, else return non-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 30b2f68..40f3522 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2663,6 +2663,26 @@ bool memory_region_is_mapped(MemoryRegion *mr) return mr->container ? true : false; } +int address_space_flat_for_each_section(AddressSpace *as, + memory_region_section_cb func, + void *opaque, + Error **errp) +{ + FlatView *view = address_space_get_flatview(as); + FlatRange *fr; + int ret; + + FOR_EACH_FLAT_RANGE(fr, view) { + MemoryRegionSection section = section_from_flat_range(fr, view); + ret = func(§ion, opaque, errp); + if (ret) { + return ret; + } + } + + 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. */ From patchwork Wed Dec 22 19:05:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572321 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=eerTGFc8; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=Uocv4kXX; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3nC6GDRz9s3q for ; Thu, 23 Dec 2021 06:49:34 +1100 (AEDT) Received: from localhost ([::1]:42340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07cB-0007bG-6D for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:49:31 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55538) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V7-0004aa-Mb for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:13 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:14080) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V4-0008Ki-5o for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:13 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXwoF028486; Wed, 22 Dec 2021 19:42:04 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=+OtZ0oN1pLBeExwfEiVml6vg9iyAZzfaCCVKW3ly3sg=; b=eerTGFc84jvmv8w/uQ+Le1yPGOvhkbC61BAQGyhhMgDmLQZi09I7si8CnGhS0bFXMRqD Up1u9rQCu/ykytpbvb1YeAoxu0tIbyDJUWvxDr1uj53y7NnVkOlL/dhK3tEmDNwfd97m PIT3KYduCcM19GCoT/juAk+kIr0ziZW9y0f7jHJRLqSKXKgqL8hWNE5D02KySb7xtgIM Abjv9/SC+R6xgtgZceiM6LWt1+O8OHy2ry3qkv0/yOjO4PYr2U1AwKBx1mo4LRR6X9l0 8IxVo3F8trr5dH6Njrm4gnRw5+gsk8LWvIWh1Wu3opgEQoesLCcQOrGjzXeVk8h4IdmZ MA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397jx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:04 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCed049074; Wed, 22 Dec 2021 19:42:03 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CnSozST5HTq6SgEYT6OoFWxj520PVUHEoHetXOq3xYi4UCRvhiy7RfZz6peASCKPUiZkbfcuomHzSQJBBOhftvo8w995mud7S7vAMrz0OePCqR1FslFX8T/DUpIcE/U6dZsByPx+CroA7duO+LOkvBDKicVsSWlMH9YsyihloX3UHQ0lpDlUNwfcspv6hTwb90q0WJFUHhpKWDsZdDFAzFAsPKGCz9pFgTGeJFFhJB+rCJ8FMmZIucLJ06+K89IeaUD+rUplyhhbxvDgug/3Z76Wm+9zxj4A1Nt1mSNu3dcmRsD1ZMZjahDvn7AreNDIQoeZRSgWdm71HoJbQ7Qlyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+OtZ0oN1pLBeExwfEiVml6vg9iyAZzfaCCVKW3ly3sg=; b=YhcCvFxAgATbcCLHGJBADpHimnh8FBrCvpTKz3OPvCoEgFPF4TbJBTk2jBl7m6hGUD3FFX2DG3/OyCOgqCixU15z2ooZXxJOwdpstj+zrwFVdwUxN8UJ2pHxQYRfBUFL4cW8P6edAKsGyPwpwPXe5wyf1eCKTMq3SwH4xIYSAPc9xELjwENdBzpnQBKoMIupesr6vIAWb+tsMP2yxqe7+idwXSbmkfgDw6JJ50GlBpi0RTlqJhwaNmzpgjwLstsOea2pRkzQAeLPFbrHwPRzIWj3GJ5VF821ols/dpjGTkEGYMqRYh5wsGKkLRYp0nNmrCd4R98bcNEkuE6ttHD5UA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+OtZ0oN1pLBeExwfEiVml6vg9iyAZzfaCCVKW3ly3sg=; b=Uocv4kXXDLH5Wc//zwhH5HlNjCEQToipcjLmYkM5qjuXHzQxbKOWXWxgPJkPXm8EUNtc1sj/DILDJUzOfX+BQ+7snjwOkGn2itaVkdhafPaROakCqGJyl6oCic13ySdndvsvlo4ANfJBnOt0mxLbSx3zAGwLt4OTcIFkNieMRBA= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:41:59 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:41:59 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 09/29] oslib: qemu_clear_cloexec Date: Wed, 22 Dec 2021 11:05:14 -0800 Message-Id: <1640199934-455149-10-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b6f3fd78-6b5e-4073-d5fe-08d9c5831e91 X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1388; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1iSRLygHuTcC95dR4+3YkmeNzx5+b+psxYsgohhlJwaYjiBrBQ5jVy6Z830yeKtBn46h1A7VBMxueoMzD0B3y3uz2C+nL4oVU2XQV2UHLGzOsX+hc49xjnKwrlrB0U1fdqbX1zaXz1xfRJO+HDvIT4zXaijp41fPihi94Nbl9+yuHW8tu00Uk+HsNMt5ifvzdA38YyVaGLai9HpTPOuIHGWvfq0gRwFNzGirJiO4g32qFoVJvIWpOqk2tbVSSfA+8sfhvHz47yQ2fXmndd6cahA8noOQnFZ1lR7uAmzBByzUjN9uPEeNCx5uYN1n3GStNJxZdJGkIT6Ci3hmCkjQbzTeXtWI0NJAEb32Kdu7lO/zlJrGZmq0IJw0l8133G0Q7ZlylkrU2u/taii6/oHoHXIyt8/TJfyNoF63aV3yYtbcemUFWpnrf7gM/WVYaC6iHTb+Ea3Gru4+tKwuZ/zdhotWJmQRLx3cbnKK8wjR13HRbllR7JDZhqWAk6SW41xx0uUntjaHU90IJQUunwmGjqowAmzTAA9o6DwOHWANEG2GPJiRD7WgdNmKQkLr1Cy4neYn1K8PSPKaod9ZmnswEkBN3VSD1WNjsGo6ZK6pMtLEcE483I7itR9Flp0aUUZ9OopmUM6Xk5b5rtEo2JM4AItAKcZKPsUbzTNo9YjVe372k0QNigAKgoY0Ktho0lSkYDCj44mdvNq9Da+Tz+QH+g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: edVnRimAQ9+TL7n2NiATkUEhU67lNhY4woFFKM8tlRjS7n/agC8KNiDwCfat3OCI02T4XWYq+a6p83jXpoAx/2VywU2hwftZ/i0bYHymv/fl7iycbnysxUrGxDeH1tEIyKElUR32grPo3pGiaATxgQ3HeZ9scbuw+yx9eBO5Xsk7JjrSLjP9FJ6WRdTpaVojLwgTnHmtsJzvhlK/Vh+pzlzSlwLwYK6fVv5IVjy5XXqQGWusm5Ss6X5uKrB427pp3ys1Jmt/wxWHV1+3pnPQbbBpx7VyTVvHhzNPvFX2SXrK3YzFxivWIYo6rYdz801/Y8f8NJNmgizMztj5sshOfmcif3jScWM4rwFBpkXpcrJJZWQsBQQ9fpCtlEHLpC+acgt8cRu2nU2Ph86ZDw9i0zjImC7OLyjzP8RYxjdBvTxFOQGnP+LBfIT5LJQXpIEWLYMgYKv5ro2wRznVOuUCbaxFTf5bO0e98F4XTpmVgB4Sp6fIeGVUDLGGwUbvQb1UuRT9/xuUpdp68MKVY02NxFdcUgU0hbFxs1oRPEHPyn7Pz/Nsq74kM8qeTVQMNj+4EqGaw06jv2ROP4eL8q9wfV0Cm4n+LarHONgNkEGY8MN6CBSI3gKrzGIjhC1DJY1pBqM/fpEPD/c1bV+hUGZirM/UrOLVvTbtj6Nt13RwNpGj13aOzc5czNopAa+ulMkqaHvj26PVVdSIOGMNI7h6XXnoK62vLozsRa7ZG2TcxoSLyxZMdfg8Rr6oLmCobH69awbh7j7FZvAKJbCp5qPii4gEANYgxA/u7lrUU/G/g/PTHHGNRDkWQwSD2Snd/7I5LZShvUuTKhjp65GkrlsO5M0XC2v1T/tshpJ2z+SeYD/TiNZaWoZyKDGqoDCPxmzgHUrGpr4FeTtKlOmc3V5fWQPc52B4xgCSMCV9D+1ZDEwz9qyJmTsuJCOsVXmf6rRCgVFliHpVDlcrjrBMDQvb12xR8Ag16py7KvAAu2U1sCTDpOg1dvsipVRHMpmXpiVTC3tbF/Yp7rdbOnibf6QrlU+5p1jw/FxQwPs9sbYek7cCUzxVf65EOqjuxs18gkrJq0f3rFOYP0m+E9Mmc3uH3PUUertF+RAA7+9jx2DpfZjms0QzcW8nSvnmg5Oi2P9vzol6zEJ8uqicJZrEPOvsc7qNmP7umwR4HE9WGy0AW7hI93qpf4jTjhVRXGzwH0qb2XAqm+lZG5TnF4jvLSELjk9JgVix8MKCESJUvfXve4Cu+bOX2vlUArxQvrR5geS5BDrb+Jw987qR/uv2cWHutjGtFpKuQHMMAmwwLLumHL6fOw627WCCsa4VPvXrXWE06iy25JktFS4ztbY4nfh039t6lhtV3P3LIgR35INEbw9XicIiyFiUO2WuoGV7TPQnaZtUws94XGqmmVOgjz6DO/YqWoRvxDQoBcwbt28Qe27bK9uadU/ZxxLFzY+wI/a4DMK1a8YvonG4rZb7ig6RdHIJD+rGE4tG07c9KsoohfdTQ5BA30q5P//uLSbd7f7oOJ3U5PhBEu4Hvs6qR38UvOofD5St/BU4JQYCuopwQz68jZT4q3V9k8Mdp1XHU7KdMLMIdGK02WCony44xQMisHziRnLsXF2ogZbRJ7NBnbaXOtJLxLChBTvNtCXZTfGryd0zNo8RnLEXPY7iynDy+Q== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6f3fd78-6b5e-4073-d5fe-08d9c5831e91 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:41:59.6084 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9fa3YnZiVbgQellSNbB7CQj+4aCmSKMMNWgsQuUayY9nK1Hh/xJFt6vBhBuhEwuKus6DHsqMp2aIXAfZy2no5eAeRPj1z4elvlTqBkM3b6c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: Ww9Y9teCpVtm41PDBdvtBSM4YNdGMrSi X-Proofpoint-GUID: Ww9Y9teCpVtm41PDBdvtBSM4YNdGMrSi 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Define qemu_clear_cloexec, analogous to qemu_set_cloexec. Reviewed-by: Dr. David Alan Gilbert Signed-off-by: Steve Sistare --- include/qemu/osdep.h | 1 + util/oslib-posix.c | 9 +++++++++ util/oslib-win32.c | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 60718fc..1ad7714 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -637,6 +637,7 @@ static inline void qemu_timersub(const struct timeval *val1, #endif void qemu_set_cloexec(int fd); +void qemu_clear_cloexec(int fd); /* Starting on QEMU 2.5, qemu_hw_version() returns "2.5+" by default * instead of QEMU_VERSION, so setting hw_version on MachineClass diff --git a/util/oslib-posix.c b/util/oslib-posix.c index e8bdb02..7913334 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -309,6 +309,15 @@ void qemu_set_cloexec(int fd) assert(f != -1); } +void qemu_clear_cloexec(int fd) +{ + int f; + f = fcntl(fd, F_GETFD); + assert(f != -1); + f = fcntl(fd, F_SETFD, f & ~FD_CLOEXEC); + assert(f != -1); +} + /* * Creates a pipe with FD_CLOEXEC set on both file descriptors */ diff --git a/util/oslib-win32.c b/util/oslib-win32.c index af559ef..acc3e06 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -265,6 +265,10 @@ void qemu_set_cloexec(int fd) { } +void qemu_clear_cloexec(int fd) +{ +} + /* Offset between 1/1/1601 and 1/1/1970 in 100 nanosec units */ #define _W32_FT_OFFSET (116444736000000000ULL) From patchwork Wed Dec 22 19:05:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572339 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=mn/pcaFe; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=VIXP6vo2; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK4BH49bfz9s0r for ; Thu, 23 Dec 2021 07:07:51 +1100 (AEDT) Received: from localhost ([::1]:56376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07ts-0002bn-TP for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:07:48 -0500 Received: from eggs.gnu.org ([209.51.188.92]:56088) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07WG-0006ZB-MD for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:43:24 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:48214) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07WD-0000PV-76 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:43:24 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXslc013624; Wed, 22 Dec 2021 19:42:05 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=DtcGCfZGcdh94T21RGoDVpVtgd4LPNgTpomu0Wkj8rA=; b=mn/pcaFeBAnhTVkSwP+ocLIm26kYN9KJs9h01fKcvT9WBQOho4Y4+bc/BPxaBj9thk1f 089pteR/5zkmzWLB7EDYuW9IlI5yr8iwXFHPGuM6Lc6old+IPHw6+evDSSJY1V6WSXpU xqiJuAsVHCNvk8gavJoHcdHr4CdCk1c41q4sD3LHvoNeGtK0BkGmTt0RyuhgEIl9iVCZ JYJJDygsH3qQ29O0+B3jNsj1zwco7pSM9qOQr6SxJELM2CsBmCb7QqweipPXPN2g+QYV AIW5NFrrY4duTW3PIiDF7RAO6mE/gIGfFTZJrqwPfylkup8EOLnUyelOh6wyBLXM7Q2v AA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tkg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:05 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCee049074; Wed, 22 Dec 2021 19:42:04 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2169.outbound.protection.outlook.com [104.47.57.169]) by aserp3020.oracle.com with ESMTP id 3d17f5rfmu-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KlLe9MPHFYNrZRUVf/BiXjg3F1vavNZwrK9mI6Gm+7UtLCQ/12cA+25t7RkRWfL8ZCODe4zTU3jy5RB/MsMr3azBuHVB8BWLOraj4N1eUYm9Kpr4NPyqBGs4hckGBNgAWUClcsZT/OCoTynZrxbqrB3Kg+IInQXE5tAWsnLLmD6fHwAwibMV7/q5FF/x2Nw13iZVtGyu49cAXV8Ig464Ix1oLjGaHrsZvC+pDamsZb47VQ9B7t7zVZ/Py3a8IKdxXxfh9P0hqALdWmjd3CYFBhcKTzx19RYuOrtwQJ+kMa9c0t7RjZ11EwZLoCmXpGTgB0oMZ0BvH5XEDcWuQ+KGhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DtcGCfZGcdh94T21RGoDVpVtgd4LPNgTpomu0Wkj8rA=; b=CDkqE0S5Rk80ivNMKhTZU+66A8gPWGATIJIqlhL3BBsu/FV4IGYbOZLgoIAzsP2k+nSouu5lNPiijc3lMBlXCsor5wrloN3e9vzFR1EKwKE82nwP+aKhoOgYWLbuBEIgDUm3sDPzWsjyzFzgB88OvUdxqMdW/Cou62zvO2zUz/S6bY8q/EpSAoFlt07v0nIvKvKyiT7wQHUBGpAC1CLVZm6kpDpDZe30xFfCnE1Ffy1lfEkY84NKHHEkLjraw+22nbV9i5/94I3U2yva69ZPeFyrqLGU0XdJAKaONf8RVxlidm6yYfNgarFnCMZZGde3fc/dBTe19WOZJ1VBOq504Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DtcGCfZGcdh94T21RGoDVpVtgd4LPNgTpomu0Wkj8rA=; b=VIXP6vo20VVDgYVUxGho4F60Os95FsYeT8oGCwj2BciNOCsQqQrwVOI/U24ONI/Nv6HeW0mgF4bUCcmcykiA9Zh8KD9uEjSAT+Zft+EPHinfWJbArWHnhYyHQdsmio+xBCuW+sGOssaqjSfc3vHRllOWN4TgbbHi0yLKT05L+ho= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.17; Wed, 22 Dec 2021 19:42:00 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:00 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 10/29] machine: memfd-alloc option Date: Wed, 22 Dec 2021 11:05:15 -0800 Message-Id: <1640199934-455149-11-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d8be5efc-292e-4971-4701-08d9c5831ee5 X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:93; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4mCcY9XV1XDMrnDWsZojyqo1QEq+8LNut8Jq6ktIqfB5rAOnzwsIjua9o+AkS5a5DP6JmSvGbTI7+gmLU0ljr3t97aCqcsmFLsdeFw3u614zAoCWGNO0HceNUcRy80aYbuo3EvNfdzqCy2a5ObZwK00e3cOysW5jgG6sNRG6Lss3z5DSvRH7qhSJ660NBDutFMfgTgbE7Bixz8H8hxxN9DyUMGONPdr8cx3wSq5/cwgF0VehUcdN0SdaYS/sWsN4OEKzBENChfk3xsKb12dpQBeQyhcjUCdMGCucacMwAMC09s8FMwYwJ4yRzfwZrH/NatY+ZvggG0MPSzIKUR6R7K/cyicRpu6EBqHKMzWK5ulawfbcPOgjg0ubmP4drXjKAGx+81XJS1MWMKng6kmT47n2GOqU+55WyAK/nDxewjwCY3G6XLvkoFIKz9CMvb9A2iiGEi2zV/vGVZRWIsgFjNvP1mtkUpD7gAkyXMIFyhT6EaD2M2yfEWn73tK02pPUt/PL6xCxgct4YlvLHWga9sbjz/LFoh/mie/efdhGI6Z/anFTxJxTl8/Xbvem0pTH6Lg1QOESqDlGVbQjl01SN/fFr928OanuQu6uDkHS5LkV9IHDxaeDeQ/ntdegm48btw8Wg74jg1YTEodzhUf8QzqYKi26ZwjhPJEae5UcHUc3nEhl2mveO0qElvV6hfQ8 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(86362001)(66946007)(6486002)(6916009)(6666004)(36756003)(4326008)(316002)(52116002)(6506007)(186003)(26005)(7416002)(38100700002)(66476007)(8676002)(2906002)(8936002)(38350700002)(6512007)(5660300002)(54906003)(83380400001)(508600001)(2616005)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0W5u7m1K8sOL9KqTDkIidtOsn/PusIrDDGYNT5v/8AkILPEVKIGoBCZbxqTrIeH7tZVo02cuXs3GgBZIzl+n/QMsf5kP16ZGPtP8oXh5iI/B72YacB8jMlgzQZ4qIR4OqEwnyjZPJ7wRIegBvjQEvt7YT7ZOICOCaifC5eZUrQFKuOTLJphh5TykE8b0jCIzI2TlPIyQ19FzAEe/xMunkZaUP3mgR62dkfih0MZAnMUxqhl96G9Fb7s3hENuk9l5OA9muHMX4a+Bd6nirTxitloU46KKXyWQsDi8u2YfzBY1TAWofXGPewgVcnxN5heXJef9lZOMe8r8SL1BH7Ig48nHjtJ91I2MHTcpAhokXqlRAOur9lIZmAKIeER00OCqhtomp4b/iRMj+7KmHjZNQg7dBTRpGpsSQS9YpEzhj9anc35fGSW2ay+dT5SS5C75lx1juYobXgxv0bb4M8wEmva2cnevTofBv/+L3bIB5+tTerXxmKhk+pc7TO0u24wQ5U+Yt6NlKNmuqu5R+qLz0Ecg7UoFS9024bGKtEvosNmkUo8zPsHADkYD7qDPvouZX0phm1a5tlDoj2Im4ry+ql21KqeImBgPzLmH200DKzwUgpNQ5Dgng09whnlIwpF2unVemIOt5CPYQ48FAhhO/YZLwFZLWUluJG0rSfZ1iV9YA4YbFo5KtrzZPLxPBGR9zf5cGCrsMMm7tFabpXwziJgZyiBeRe/7locXPQz9qW3kW53KnS/oUwWt2zUil1Q9gmBuNMwo9ysb3u0YKC6ArtC0Lvrfxc7wX4yQZCRWSTRAz0lC85YujjR6e9XL17wPoar4iTaSRgYQ1cTAXg9j997VY8w8FfNrONSYyPu3ypZt3OQRDIoMx/xfWMneAeewUSwdGRoaO+yECV4fvrunirQWAUV7DfdxqihJHb7dsGnj8K3D6dNuPWP2dY3KBnTrEkeI3iiHD8CabjPYHM+dt/kCJOrxzEAeiuSkjg2cWgJBmCswrrA9VYx90xtXpqfQ8CUtRKam/F7aRfBc2/SWc+p96vHVfxCM2MzjgkU4QotTlmgM59LRsP3i6tJp4+VlrinYDp3CKryTd5DQ1fdEW7C1WbzviZTsWqmPS0JmrB6PJnLRUliiJT+SSgpkF7MVoRyfqdUiFaU7mVnDhQSX5GPj3GOcoT8fpgjepdNclGvUyJjeZViWRStLu2rDSjNDoszmbdrA+NsR4UviK9xn1nszbLrSEp2NpN92JTrNorY3agISwXPE9O9nX84tp0euA61zrWPm5Xu716Gvc8TQRnFF1DjxpoKGhg6LV6bhiZTBpXCL9mb405GQl2CCovqMzZ61uzt5kQif1EJTc/z3Pc3Td3wwxqNOzUVUjQJSWoJwxsdtPv8nAv5h35DAJSf3mgerk1aGIeL+dbpWhbQYDLrd6hCXJ4litoyisX3bfFZebAfX2nz86z5DYeK4js+YMMNdycEOrV47wQRHNWcn4dEQx5eTs3kdujqd0ucWysSPXnWPIkZN4UYlSskUeDm6yeEAp382EuotZUsBC8ag8GSu5+Vt6AOKrxyNR+XQqB0AUcCt3lT8M2X3xDltKBCOL6cm3xJJM8E8BkDfFHvp08YoLARPLpsuhqK+D3uL2+TlZ5f98yIp9ZvT6zzxZOsUodpCxAS/gDFBlh4+6d1+mg== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d8be5efc-292e-4971-4701-08d9c5831ee5 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:00.1240 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6D84QPuvwNhNlywlcJreckLLtqvT9h3Gtzu1uN87QAcx9Z3VxA8ivAHrrRmNSV/a+2XhSZ9uqL67AYJRp3RCjK5Z1LRdh3jfUlVeCBychm4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR10MB2888 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: 2vkav69VJYNiDUygpRtaTtq7S7D7kNPr X-Proofpoint-ORIG-GUID: 2vkav69VJYNiDUygpRtaTtq7S7D7kNPr 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Allocate anonymous memory using memfd_create if the memfd-alloc machine option is set. Signed-off-by: Steve Sistare --- hw/core/machine.c | 19 +++++++++++++++++++ include/hw/boards.h | 1 + qemu-options.hx | 6 ++++++ softmmu/physmem.c | 47 ++++++++++++++++++++++++++++++++++++++--------- softmmu/vl.c | 1 + trace-events | 1 + util/qemu-config.c | 4 ++++ 7 files changed, 70 insertions(+), 9 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 53a99ab..7739d88 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -392,6 +392,20 @@ static void machine_set_mem_merge(Object *obj, bool value, Error **errp) ms->mem_merge = value; } +static bool machine_get_memfd_alloc(Object *obj, Error **errp) +{ + MachineState *ms = MACHINE(obj); + + return ms->memfd_alloc; +} + +static void machine_set_memfd_alloc(Object *obj, bool value, Error **errp) +{ + MachineState *ms = MACHINE(obj); + + ms->memfd_alloc = value; +} + static bool machine_get_usb(Object *obj, Error **errp) { MachineState *ms = MACHINE(obj); @@ -829,6 +843,11 @@ static void machine_class_init(ObjectClass *oc, void *data) object_class_property_set_description(oc, "mem-merge", "Enable/disable memory merge support"); + object_class_property_add_bool(oc, "memfd-alloc", + machine_get_memfd_alloc, machine_set_memfd_alloc); + object_class_property_set_description(oc, "memfd-alloc", + "Enable/disable allocating anonymous memory using memfd_create"); + object_class_property_add_bool(oc, "usb", machine_get_usb, machine_set_usb); object_class_property_set_description(oc, "usb", diff --git a/include/hw/boards.h b/include/hw/boards.h index 9c1c190..a57d7a0 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -327,6 +327,7 @@ struct MachineState { char *dt_compatible; bool dump_guest_core; bool mem_merge; + bool memfd_alloc; bool usb; bool usb_disabled; char *firmware; diff --git a/qemu-options.hx b/qemu-options.hx index 7d47510..33c8173 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -30,6 +30,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ " vmport=on|off|auto controls emulation of vmport (default: auto)\n" " dump-guest-core=on|off include guest memory in a core dump (default=on)\n" " mem-merge=on|off controls memory merge support (default: on)\n" + " memfd-alloc=on|off controls allocating anonymous guest RAM using memfd_create (default: off)\n" " aes-key-wrap=on|off controls support for AES key wrapping (default=on)\n" " dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n" " suppress-vmdesc=on|off disables self-describing migration (default=off)\n" @@ -76,6 +77,11 @@ SRST supported by the host, de-duplicates identical memory pages among VMs instances (enabled by default). + ``memfd-alloc=on|off`` + Enables or disables allocation of anonymous guest RAM using + memfd_create. Any associated memory-backend objects are created with + share=on. The memfd-alloc default is off. + ``aes-key-wrap=on|off`` Enables or disables AES key wrapping support on s390-ccw hosts. This feature controls whether AES wrapping keys will be created diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 3524c04..95e2b49 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -41,6 +41,7 @@ #include "qemu/config-file.h" #include "qemu/error-report.h" #include "qemu/qemu-print.h" +#include "qemu/memfd.h" #include "exec/memory.h" #include "exec/ioport.h" #include "sysemu/dma.h" @@ -1964,35 +1965,63 @@ static void ram_block_add(RAMBlock *new_block, Error **errp) const bool shared = qemu_ram_is_shared(new_block); RAMBlock *block; RAMBlock *last_block = NULL; + struct MemoryRegion *mr = new_block->mr; ram_addr_t old_ram_size, new_ram_size; Error *err = NULL; + const char *name; + void *addr = 0; + size_t maxlen; + MachineState *ms = MACHINE(qdev_get_machine()); old_ram_size = last_ram_page(); qemu_mutex_lock_ramlist(); - new_block->offset = find_ram_offset(new_block->max_length); + maxlen = new_block->max_length; + new_block->offset = find_ram_offset(maxlen); if (!new_block->host) { if (xen_enabled()) { - xen_ram_alloc(new_block->offset, new_block->max_length, - new_block->mr, &err); + xen_ram_alloc(new_block->offset, maxlen, new_block->mr, &err); if (err) { error_propagate(errp, err); qemu_mutex_unlock_ramlist(); return; } } else { - new_block->host = qemu_anon_ram_alloc(new_block->max_length, - &new_block->mr->align, - shared, noreserve); - if (!new_block->host) { + name = memory_region_name(mr); + if (ms->memfd_alloc) { + Object *parent = &mr->parent_obj; + int mfd = -1; /* placeholder until next patch */ + mr->align = QEMU_VMALLOC_ALIGN; + if (mfd < 0) { + mfd = qemu_memfd_create(name, maxlen + mr->align, + 0, 0, 0, &err); + if (mfd < 0) { + return; + } + } + qemu_set_cloexec(mfd); + /* The memory backend already set its desired flags. */ + if (!object_dynamic_cast(parent, TYPE_MEMORY_BACKEND)) { + new_block->flags |= RAM_SHARED; + } + addr = file_ram_alloc(new_block, maxlen, mfd, + false, false, 0, errp); + trace_anon_memfd_alloc(name, maxlen, addr, mfd); + } else { + addr = qemu_anon_ram_alloc(maxlen, &mr->align, + shared, noreserve); + } + + if (!addr) { error_setg_errno(errp, errno, "cannot set up guest memory '%s'", - memory_region_name(new_block->mr)); + name); qemu_mutex_unlock_ramlist(); return; } - memory_try_enable_merging(new_block->host, new_block->max_length); + memory_try_enable_merging(addr, maxlen); + new_block->host = addr; } } diff --git a/softmmu/vl.c b/softmmu/vl.c index 620a1f1..ab3648a 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2440,6 +2440,7 @@ static void create_default_memdev(MachineState *ms, const char *path) object_property_set_str(obj, "mem-path", path, &error_fatal); } object_property_set_int(obj, "size", ms->ram_size, &error_fatal); + object_property_set_bool(obj, "share", ms->memfd_alloc, &error_fatal); object_property_add_child(object_get_objects_root(), mc->default_ram_id, obj); /* Ensure backend's memory region name is equal to mc->default_ram_id */ diff --git a/trace-events b/trace-events index a637a61..770a9ac 100644 --- a/trace-events +++ b/trace-events @@ -45,6 +45,7 @@ ram_block_discard_range(const char *rbname, void *hva, size_t length, bool need_ # accel/tcg/cputlb.c memory_notdirty_write_access(uint64_t vaddr, uint64_t ram_addr, unsigned size) "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 size %zu ptr %p fd %d" # gdbstub.c gdbstub_op_start(const char *device) "Starting gdbstub using device %s" diff --git a/util/qemu-config.c b/util/qemu-config.c index 436ab63..3606e5c 100644 --- a/util/qemu-config.c +++ b/util/qemu-config.c @@ -207,6 +207,10 @@ static QemuOptsList machine_opts = { .type = QEMU_OPT_BOOL, .help = "enable/disable memory merge support", },{ + .name = "memfd-alloc", + .type = QEMU_OPT_BOOL, + .help = "enable/disable memfd_create for anonymous memory", + },{ .name = "usb", .type = QEMU_OPT_BOOL, .help = "Set on/off to enable/disable usb", From patchwork Wed Dec 22 19:05:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572315 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=sL6bd9q4; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=UCLkTfjn; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3f34tmvz9s3q for ; Thu, 23 Dec 2021 06:43:22 +1100 (AEDT) Received: from localhost ([::1]:53538 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07WB-0004aI-1X for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:43:19 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55494) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V6-0004YV-H5 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:13482) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V3-0008Kd-Qv for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:12 -0500 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXvQh014457; Wed, 22 Dec 2021 19:42:04 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=ZAUYcjtQ4CZMVSRb56kgREKga11yEanCT69C5zHJOD0=; b=sL6bd9q4eCwPGN6Eu4VkNcKxoc72H0p8R4dLfqCXOJUpMg0z70foA+zwCBcgx2b3jcPs Nx2LLJqQjSV95r8ZNxlGslcOpJiwA8sjKmhPhXs24uBpPLm/Rg99RbF0AJKB8JbnHLzP laetJ9bDPKUge1ZP3yuLEni4fE1W7DRcYIzcxg5fMGHyueZdH0sWenbHlUhpIfUF1Vdg 7LbfGgdVYQDXNXDmsFHWJO4lTOg9fvBSLy8FTWHXCI+PqU5BAGvczMABkU282gnV6GBv aKH54dWCdPQc5zEMuK7dBjALKr5+MI7MpK7NqlzlTCD3PdFehZBp9ZIt3CPbrknJcWuf 9w== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46qn0t1v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:04 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCEu049078; Wed, 22 Dec 2021 19:42:03 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by aserp3020.oracle.com with ESMTP id 3d17f5rftb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VxspVxxqc+IyMLI2yhCi2dxOSY5ya+N+t3FuxQTbaFw7X9cV61qNuUSTRf6A/OvOn+f6IvAUNky3+zjHOGvt45ETnTCyEekzK0hGGAJQ+6aDwHJVaYQ2p+V/dx/wZdUI6+ZVSur2htVcDO4wPy9y4sZA0pThgiRVC4Qfd/VPJPeo4SYDtKdR7Iz7X4Fxfh1tirdsxvQ19pNUK5anhnKD9ybNcjawir+HjWS65J+FewrdCxA4wGdLaGsXFmfO8MFSKj7+Eblq0k6bbhaEi4/QUDVJalPChainxDxF+ekecX4jUcwe5C0ROG6OujUU0zgRt3C+IxFI413BYipyYwZ3yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZAUYcjtQ4CZMVSRb56kgREKga11yEanCT69C5zHJOD0=; b=F2GlSsNgPR+3iS57kiHVH7Evq1e/BMCYSlT1V44D1rW+/o4bBcH4nwbo9s9VYqwJ6EApRoCrmN8mPKE/sHYhGHROSEthoaYkSnDIJyIWskEMgdyi5Yl7ai4y++/Si20m0oyAzwC1Yo1g9ZUn6RNLyRvjjXFPnkhGP/T7V600HSZIMvxW2Qjy2yVdTgsCwIARLmOidq38yEiir9O7oyNqT048Pk5n4Y92Af2jDRE/pUc1jfue6bVH/4Tz9mfmAfkVGibHjKKDctJWlvek4Iqp+I+G73cp2X+yGCt4MVR7XGcm+ifRPw4+NJhC5fdr7hlfZpUPHa/If6xPwGMvW3q4tg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZAUYcjtQ4CZMVSRb56kgREKga11yEanCT69C5zHJOD0=; b=UCLkTfjnC+JErJsZM/PZPPosIhNfbbbvXHHCZyiKOby5EZgfiYTsi2pbEwAYnGsw+vUg5FmLac054Q04/XctHWExb9549lCI68SNryRWpg288dWp1rq21tY+CejWVL4czFdJmJgTRGKjrj7pGuQVUlaAAowExwfkEqaEWkbf5ns= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB3746.namprd10.prod.outlook.com (2603:10b6:a03:1b5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:00 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:00 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 11/29] qapi: list utility functions Date: Wed, 22 Dec 2021 11:05:16 -0800 Message-Id: <1640199934-455149-12-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b1496119-740f-45ca-cc72-08d9c5831f2c X-MS-TrafficTypeDiagnostic: BY5PR10MB3746:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oLfWs1QImRjkYwtMVdUgKDg1TDXBTZtmv+BhBXeM6qcmp06N7Te5Gtn3YXsxY9vQ0Ltm7WwAkyzZgQEq42kmRwe6AST7mhqejjkm8spURxN/vNnX80P2tx3K3DAxbsQPg80J/l+Julxu/NeOXo971aeC9niBHPpYmsGfdJxUOHuBspGz3e7GDZYzloECdsNZtDQhLUSB1pwNjtmrEkc8u6wNzDoQ3xt1OGae1g3K6R4E1kJAJzbJ1j6R78voCj3MN4WTNSXUe86+gzPE7eKH+rr0HOC0XOgqFd4TArle0duK2SluaAeVz6ItgPA5+lP3QQ1nxG+hZFzuSPBeNi4HM1RX14D++xkNr5IBbZoRRYl8dm9EdzZWH0wCYqoyrcaeJCPL/eM3sCPhk/aa2/Wg7MJ0Z9gatN5J241+H4cuYDR8e+0J+WfIUY1oESdShcu+NGC/rMXXNtD55ZiJDBPSUaB2ViO6JfewfbSI7AAbb/Y9qKnT4/eL3aKGi7YW6ehriKg4YBu4FezlVPgAre68vmJ2UV3iqkel6aFQVzHlgGbJ0QjCnEXiujhSvunyKy0utWtw3jerLRw/VJwy6EQQAlflPDJ1Sx9+KTbUphWo+4is+v8pdLGF2fA7aHBf1wreYLXOi74Knycwy4HMn3waYZ7vdn+zwJchg+gSywABgiO35nUg8Iftz7Idv078c15Qa0TP03JfJ6DfWnJlaOKP4+XhePusRH7wXuq5EJeWTDU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(66946007)(66476007)(508600001)(83380400001)(38350700002)(38100700002)(4326008)(2616005)(52116002)(107886003)(5660300002)(36756003)(186003)(2906002)(8936002)(7416002)(8676002)(6486002)(26005)(86362001)(54906003)(6666004)(6916009)(6512007)(316002)(6506007)(309714004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Xl0A66tE6ZW2NfcfmUHhUicrZYzwCpVcIMLynw+gDp2Dyrs2RlnfEjhjA3jVXVw9GjZZThmIVaG9fI0oipjoOkKTXpDg7TRh48qa3lDGCA6JgYJ2m3CCTvyoIkzviY0B95NQXEBYRmpEClzVc7WLZ437jj3du3UKOuTgqOFkC0Pjc/Sid5u1HNomYsx64FXbf/qBIdCkVY4kawosdd8c6Ak00SRdxzMrjmiv+zuDbxNKFsmHZgQ4fmsrrXqhmONRHWbIqZraeS9OZMyKzFoehGKvgUbv+zz7ZC9hF8OToQjKZf75jsmDKlksmFEm7VrZHDnk0rrFCTs5cpAJYZH1CBUJGk2JUQmeWYEXaz7ECFAII9qllsjjj6VG4ME7KynLvaqMaerOdK+tw7xLTmhIPXxna+h5IEYNtav+8PmFQhr7C8poYgKvWQZdlGWUhqzusCc4Q4fynzz9D/iWxUD8aedCXIsGlzHcK0XpuJ7iJ0of/wzRJ4gfwjNnSGcRJkFEktQJC0w2Bn8VBaShxmGbHzlNgKoe2OQAWeRowNxvakmSrCEe74UoPlY2EswARXQ0WLsejCz9xeZMikY9o2BAwN3SLA0dRXkm7Hf59Mo3XV4emZoO35j+2XIOFiu3Fer7wF8OjTB4+q6OB7m3ZknAwgcrGLSGqlfupKv5Or4Wow5rn1C0B8EK6kOQFll1fedrA0qpB12akqGFTm/coJTF72dP9oH+nqt3l9gqUcGqjP2LHZBlIECPLfJpx/4+J/RIlKtQANepuNXu3w6IOBqMujrnFhH0+GnLpTB/5zJyheISRCM9Pj/M9FIoJyXET+IBryFSWEPeGGCOj7QKgf6EB05tDGOiVuFsdQBb6Rb7prnSqO2t/2Xl0iWgxworgI1UsF39xnmi2SGif5FDCkSnOYILix9XDWzjUrOZZ7znNAdA9i3KMfd/i9iwctz4Gj/hNcC8y55dnj9/UlEkApT2/55TXKpNtr6ZiweS9LjCTKPg3x/QJU34vvbfOOQkdbmX4I7QY8vYYGjaOw7PbAAW7HqMx1kTgTJlGrZEatgVXZvFs7OxIXJMt9z7+7bCS8ThMrYgxVQV3xvw6naZ1xIdprPz9u4f09YaEJSL9N1jm/M/L0Vkog1XeXAoOWc7k6yaEHo+rq6uxbWoE/Y51qanGkT+zEB0zREZmBS1lehAfZ4qviIwJN1Zb/TGwXzPD+NlfJWLNT67HyqD1mTJ5zFNuFkFN2hjlLVCH+MjoTnq/t7uJCi8NXjIjB2yupPLhB5Mb8yfKBnJC1K3K+BjP6MDcT1wuvsjbr06ExAENxu4BjbN34QTFEQOs10Pw1ufB1mTmqT/ni95sHEMZKn45BHq7l/ZdB4jJEOv2SoNUodmqetey2S4SQdOGYoMDvEAYqZr64Ri6NGsZLZdu4TR0WFnWIyYLwjKSTSvL3UjYdElihZ7FLI/aFUIrklJhT9GQOBjrE2oR/6P7woDmiDtzV18Tg43dFOGcNVnZOXRJgb8Yto/whr1cP7f2GXSGO9v2gRaaC4qEwa/5oXmXTsDfJDTFQVi63Fb3f14qF19TVM5NO6vxu+X5nygUgL9QM9xnp3zsSvsc+pSLj3C2LOZOE2qzQzTIy7bx0zBKun5sH1ItR3qDTUKRShut0i2A+0ll424QJJkUkuFm+tsU+Q7dHSKHw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1496119-740f-45ca-cc72-08d9c5831f2c X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:00.6396 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: a+jhTppLnyQ6YMSgZ5cStOh6WviD4cfWk/fDpGKnuk6uyzYurNjcemUnIWITrZoxCeQBYB5G/wwjVPO+zSYJp5EboBK4GWsTqAzEF6c9zR4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3746 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: aT8TnoSu-q69IGVldk2EgRyALViWxXMl X-Proofpoint-GUID: aT8TnoSu-q69IGVldk2EgRyALViWxXMl 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Generalize strList_from_comma_list() to take any delimiter character, rename as strList_from_string(), and move it to qapi/util.c. Also add strv_from_strList() and QAPI_LIST_LENGTH(). No functional change. Signed-off-by: Steve Sistare --- include/qapi/util.h | 28 ++++++++++++++++++++++++++++ monitor/hmp-cmds.c | 29 ++--------------------------- qapi/qapi-util.c | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 27 deletions(-) diff --git a/include/qapi/util.h b/include/qapi/util.h index 81a2b13..c249108 100644 --- a/include/qapi/util.h +++ b/include/qapi/util.h @@ -22,6 +22,8 @@ typedef struct QEnumLookup { const int size; } QEnumLookup; +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,19 @@ bool qapi_bool_parse(const char *name, const char *value, bool *obj, int parse_qapi_name(const char *name, bool complete); /* + * Produce and return a NULL-terminated array of strings from @args. + * All strings are g_strdup'd. + */ +char **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. + */ +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 @@ -56,4 +71,17 @@ int parse_qapi_name(const char *name, bool complete); (tail) = &(*(tail))->next; \ } while (0) +/* + * For any GenericList @list, return its length. + */ +#define QAPI_LIST_LENGTH(list) \ + ({ \ + int len = 0; \ + typeof(list) elem; \ + for (elem = list; elem != NULL; elem = elem->next) { \ + len++; \ + } \ + len; \ + }) + #endif diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index b8c22da..5ca8b4b 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -43,6 +43,7 @@ #include "qapi/qapi-commands-run-state.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" @@ -70,32 +71,6 @@ bool hmp_handle_error(Monitor *mon, Error *err) return false; } -/* - * 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 = NULL; - strList **tail = &res; - - while (in && in[0]) { - char *comma = strchr(in, ','); - char *value; - - if (comma) { - value = g_strndup(in, comma - in); - in = comma + 1; /* skip the , */ - } else { - value = g_strdup(in); - in = NULL; - } - QAPI_LIST_APPEND(tail, value); - } - - return res; -} - void hmp_info_name(Monitor *mon, const QDict *qdict) { NameInfo *info; @@ -1103,7 +1078,7 @@ void hmp_announce_self(Monitor *mon, const QDict *qdict) migrate_announce_params()); qapi_free_strList(params->interfaces); - params->interfaces = strList_from_comma_list(interfaces_str); + params->interfaces = strList_from_string(interfaces_str, ','); params->has_interfaces = params->interfaces != NULL; params->id = g_strdup(id); params->has_id = !!params->id; diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c index fda7044..edd51b3 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" CompatPolicy compat_policy; @@ -152,3 +153,39 @@ int parse_qapi_name(const char *str, bool complete) } return p - str; } + +char **strv_from_strList(const strList *args) +{ + const strList *arg; + int i = 0; + char **argv = g_malloc((QAPI_LIST_LENGTH(args) + 1) * sizeof(char *)); + + for (arg = args; arg != NULL; arg = arg->next) { + argv[i++] = g_strdup(arg->value); + } + argv[i] = NULL; + + return argv; +} + +strList *strList_from_string(const char *in, char delim) +{ + strList *res = NULL; + strList **tail = &res; + + while (in && in[0]) { + char *next = strchr(in, delim); + char *value; + + if (next) { + value = g_strndup(in, next - in); + in = next + 1; /* skip the delim */ + } else { + value = g_strdup(in); + in = NULL; + } + QAPI_LIST_APPEND(tail, value); + } + + return res; +} From patchwork Wed Dec 22 19:05:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572326 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=u6+EsmaW; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=Uy1i2JV1; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3rs0f4gz9s3q for ; Thu, 23 Dec 2021 06:52:45 +1100 (AEDT) Received: from localhost ([::1]:51376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07fG-0005Eh-ST for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:52:42 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V7-0004aw-QE for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:13 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:14728) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07V4-0008Kn-K4 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:13 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsAa013618; Wed, 22 Dec 2021 19:42:05 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=75zZ/yjfc+FBxgEI3tCsey3+RfhAFPqgNxlIO52HzAY=; b=u6+EsmaWcRQVzSrSXEnR4fyyhuLHlX+9smMRaZVq70Fjy5iGycpryBsBOrF+GpaK+MIK yF+tFVGYgmDQRRgT2xIWoE1VFRzjyIHkg2mRds1WywV/2+MEeZj7vvfBDZ6SYqfmxbn8 fDmJ5FAmKlLsmXrduVL5Uqf3pzanVmBtSxx6aZGkpKh9Dp4le4ABmwmLq8aP83e2pAMZ inxtNCpWhAz3ebkZUgZnAJYXqozWTb9gg9yy2km95RAWS5RWMWEtSXMN8pqvL6W4ggiy ZFd34pROvfEM8MNChiChtkVu9RgSFkHZFpqeYORlc0S8Vkpgf/w66srbtkONY3LxcGVp SA== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tkf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:05 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCEx049078; Wed, 22 Dec 2021 19:42:04 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by aserp3020.oracle.com with ESMTP id 3d17f5rftb-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lnhw3N7T57mZZN3UWfQEGbhvixLfzF+5vte7nbrcw+r4R6Hz0E/c+ugDZxGPrXz3wG1lbzJ1l7LKdVzHrAUTy8R0PNFdpg4hT6kldUU/kFsqFOssWx3EshVT2lERmqKv/EGZiNa1HWqzWfk/teoTF0jc1fwGUdcM8QexXo8IbIczKi0e/fLF19j6F0s5qaqPux2CeJztMBg6ahkFowdqszFv2eYI7eAThXNVdkFqtT6sRYWSkzYBTvTNAwIE6wM3byP+3ocRsyFcOdUyBArQ3gSGcxWgOj7Wgw3Oj1JI6LoyepfrQz0WyQaegBdPQ6jAMl807Ufkd4ylEeV35qbQnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=75zZ/yjfc+FBxgEI3tCsey3+RfhAFPqgNxlIO52HzAY=; b=bBWRsM/jfAHP0KK7xaULaTeOhBz2AYIcP1wzN6mG7RXqOxv4d12sCmLHnBJHCGwe+avvxfVfFkriy2508Zfb9s9va3Wlop6tt86ut6/jOFwdd7VnsY6D4tQyfwiHbnhMb1zqJT8R/Gecp/VPZBRx/9p2UvfYlpHx+BK2jbyv6UZtSyjXVfwl5LWMSWkrzeA7rId7SF1Ir0vFCWd5y9qirq2BuNjDAFI+CeJrWT89EPyUzXOMkhG+O5gWWip1dqHjgjGpIbeA0KzYanbY+hRhslbz1Lr8S9PLje5uC7TCcXt3kxZmL2gfvbk78v2YtoQ4wChVMUoyHElSJrnlrC73DQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=75zZ/yjfc+FBxgEI3tCsey3+RfhAFPqgNxlIO52HzAY=; b=Uy1i2JV1xZliwhlVBki/kbkw7H8c8d6phx86t031sf+/yqdYpZ0k+oSFeCbIyniPo/5Wr22vLBavxAfU2LLIWID/UaAvTZUP3JMgAmXWlzc371fBSY+U7StuEAi12kzazeaLIljbaaYYOyOHilnAMv+9czzmgcwFr7Xl8DGIIDc= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB3746.namprd10.prod.outlook.com (2603:10b6:a03:1b5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:01 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:01 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 12/29] vl: helper to request re-exec Date: Wed, 22 Dec 2021 11:05:17 -0800 Message-Id: <1640199934-455149-13-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 20385d3e-1f6f-443b-644c-08d9c5831f87 X-MS-TrafficTypeDiagnostic: BY5PR10MB3746:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:108; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sD34zostAiWWdgp+6uvH0/uZ5gJXK4LII4FYIPq5S1eDYV8tg9UMnPkzE7RNPh+YUrbgRFqGBxg73l9w8vllwM7618NbQ1aRkpYPzOR7ObLbXu5Ep+BuWPu8lTlntnQwZszSdu13vhiaayDvBJ3+JhZpNojS3DJ/H5kuacEpAxxcQVR3aPYRksbKsO2N9zD16NhAn2t1XA4AlZQJAYPqNWQWST9tT0zKogZKxo8Qppl87uYTSBhId4tM74jlLL5KmO+TjNMUdIUDRH4eSW9AURUY7ugcI6aLKBytnsN1maWNgNaT2IP0ttwk7Gm2rWX6PCl67ANsCP0/GcDjLjUWXtyMwH35C0VE0I3+21d2lBP2OZYZTLiXPhwuefGsx+oLt7JolbIeZqoFcPXnQ1ji6y+daj6mYQZUSJR7opnGh3WqNMsG6/Dl9Dm35XkarmRd07nOnHqqHyaXsZS22538Wgmed/soPKv6jMtD/LJdmNLxKd8PMfRC234+KYjDMlsKyna61bN++PLTPucaA/XBU/FvkaZRhlAZOcz+2eH4CU1CTo77iqmSCiby5CiEC1f62F3Aih5gcLTzGPi42Qyfh9M7ppNp09ZjItv0w2SpY0F4LON3yzOn494LpNjFb0tfw4Youdxab0FtbjEZ8MADi7RhQDf7OQlzgSz97MLH5LvOA4Upgu1e766lp/6hiyk8fa+lnfdF0p/9LYpt8zZMWw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(66946007)(66476007)(508600001)(83380400001)(38350700002)(38100700002)(4326008)(2616005)(52116002)(107886003)(5660300002)(36756003)(186003)(2906002)(8936002)(7416002)(8676002)(6486002)(26005)(86362001)(54906003)(6666004)(6916009)(6512007)(316002)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pRg9n9vmOg2mudz4Kpnz5vvHffljcJe/NmOJ1pFNLRMEZRDkl8U2Iy0VnRgT5Heg+4bNWRhMA6jiYKzjx+9UfrFANlgy1cK0XA1td0i3dVOJYECWNTP/9Ub20GicRUVQIwvNlv9kTRh2GQhyTtubRu/0Q+zr4Z1wNA/IZNTKoG8N+Xu65lEilXP2p6Jly0aVq7WICFgjjVg6SKkUEm8BKBnfE5z8+QiicQdi84TF5hx5rxeWlFaDkACNr78ROc90N6rawWyk6IwlypXn4AYP0TPtmy2gUL0JCVRg8I21opnvTF9Ci1ceSZwk7m4pk0MlQb8qkHGOheMfxjJp1cH2kzXy2eOVWUrqZXMEI0+8p3VwlHWcr07XCjG7MpUqiBJ99RNWp9KQLHSSuS7org/5m9LA62xFBbUsB8CRJ6If9fiLeuqXBvZ0CasPhf70GHwHSQTVTG1VH5hrkjZTkEKZFuPixBgGaLTQA8YYlc8rX3N3yRsH3eoqlINcxN4fr/r6XJQlldEeOEcsg9LHoFvibdg02YV10wd8sP/2L6Lmr6OoHRpPt9wr5SXmYNfeGLVSFCo67pikyzrHgkykVh1+jH+/Tkn0J6AMCs8aWyZQFdG1hpMDDqtyOR4368nTHi9tSrU5DXu41/mx3oNh3o+WHaosrAoC7THnEP7NNZEn8VwxfrwiagZX8YsSuzTsaT1gyV88OIAah8UEWOwWZ8kDUp4PvSZcySKzNKQwacvPizqxHUTxhnwaoiN8sBeoXHd45IuxC0FRPO7yxP5ylarC79u0NNxiOeZiOxKSU+dGUDIfkt4b/ROc6ofyHVnYm5/OjjQCBm8Cv6ImK2kwaEn+hoASrcUmnUfbKIsPpZV7K6WvlNme/cRhqPPArdOFo3z7b1jpHfZXSbMIsK5syojD25KcsJeVOM7y2wXOO0flEdSmUXKRGMIVew1RLT7ApLtt1OlS05y0yvIM5x+a9UB7WqPH6xv4oDt76Dpfozqk5J6uTr6cW0nuqUaQKimpjgqpjZO+dEg5BARVB01OJwGfe7Lu0sTL72r8Og+Dbs7R/XbdWAbQa90EuldnOCj0TCjVZmzfklyUfrrb7yUWZ1+P2KDVJyr7ez1I8X3MFbGXmMKtO7sya2r8bW3fZK0HEwiy1w3ME/LacKNkNbwVMmruOtLEu0PIsl/lJZGbyhmbwb0E5lafY0QUDRYLcE8IflYVtjGhRgUX438p9GHU6OT3STg1HuPx8i9tZ6zwPVqF6o50szQVOrHkXo9UUAe682ARThwZozjbjQZlDBy4ougYOjmgf/Yq3Lmso1bztOoKkyDcb1sl1mEVowtthLV6SmeTmHp7AG+tdHzgmV9SQEUbbWDqwfmRWZV2k6OWkX7Yt20y2rIl35JJeNNyl/i9r0BdF6IGuMPcBtgU7KM6EF4+RDjuTT/PQte/FLZ8ZjmN78dOziuZ4V1huSFL7KtN/T64aZ0or5EY/mpz386NbRYmvP9vLir9+K0sEhFFFq6w9jV9l90k7+ZxL5b4buCT3T/PV+MH1A6HzmQNcA0ll4kMAQxVvzHIi2EDxIQO30qQvWUkiHZBmnYjFFEHitn8ff4oHic/8+i9Cfd653xuZ5ZKqUZ1VyGoFdnInECMWcnU8HvyJWGvy4E44t2mgVvnoSXtHvlKXQw50aH634Cf5WSEKA== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 20385d3e-1f6f-443b-644c-08d9c5831f87 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:01.1240 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: c0WTCX2IE/vFC5nw9OiBXORn1fK57yvUrDSmkzEZZaSUiY4ElqlDDCC2KKU6wif09C2ztuSAn/Jr+MmsjXypBsCN9NdmhvjbEL6PI7+CP1w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3746 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: fN7Io5OyRsvEslpXSdNYOh57C6GugG6A X-Proofpoint-ORIG-GUID: fN7Io5OyRsvEslpXSdNYOh57C6GugG6A 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 --- include/sysemu/runstate.h | 1 + softmmu/runstate.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h index b655c7b..198211b 100644 --- a/include/sysemu/runstate.h +++ b/include/sysemu/runstate.h @@ -57,6 +57,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 3d344c9..309a4bf 100644 --- a/softmmu/runstate.c +++ b/softmmu/runstate.c @@ -38,6 +38,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" @@ -355,6 +356,7 @@ static NotifierList wakeup_notifiers = static NotifierList shutdown_notifiers = NOTIFIER_LIST_INITIALIZER(shutdown_notifiers); static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE); +static char **exec_argv; ShutdownCause qemu_shutdown_requested_get(void) { @@ -371,6 +373,11 @@ static int qemu_shutdown_requested(void) return qatomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE); } +static int qemu_exec_requested(void) +{ + return exec_argv != NULL; +} + static void qemu_kill_report(void) { if (!qtest_driver() && shutdown_signal) { @@ -641,6 +648,13 @@ void qemu_system_shutdown_request(ShutdownCause reason) qemu_notify_event(); } +void qemu_system_exec_request(const strList *args) +{ + exec_argv = strv_from_strList(args); + shutdown_requested = 1; + qemu_notify_event(); +} + static void qemu_system_powerdown(void) { qapi_event_send_powerdown(); @@ -689,6 +703,13 @@ static bool main_loop_should_exit(void) } request = qemu_shutdown_requested(); if (request) { + + if (qemu_exec_requested()) { + execvp(exec_argv[0], exec_argv); + error_report("execvp %s failed: %s", exec_argv[0], strerror(errno)); + g_strfreev(exec_argv); + exec_argv = NULL; + } qemu_kill_report(); qemu_system_shutdown(request); if (shutdown_action == SHUTDOWN_ACTION_PAUSE) { From patchwork Wed Dec 22 19:05:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572318 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=FxRNzDbM; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=pN3geOqV; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3kK45L0z9s3q for ; Thu, 23 Dec 2021 06:47:05 +1100 (AEDT) Received: from localhost ([::1]:33968 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07Zn-0001zw-A8 for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:47:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55656) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VH-0004ww-NJ for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:24 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:16310) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VF-0008LB-FZ for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:23 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxMZ028487; Wed, 22 Dec 2021 19:42:06 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=1/HcDuIPgIskB3Y2RaISTDfFGiYao6zJj8o4PM1nRLM=; b=FxRNzDbM8GU6ILeyF0p2CFc8ZSLRlK2zi4k1BkfO5YmlxBdLouQe5TrqhGA/Ey7vF6lm 0e9i3f4zxRFWEG/a7U+qE5PActwU3axzozU7Us7MiePGy/ijx7kXCZFYvpfcMnNGCmQ8 JI2B6aU/a15OO4Fe53UU56AQd5JortWHeJTzbrncCvxV5LR11oZMnjkiAh5ua8nDfLPf dx1zIlzTXaVai9+c9iIXbWYvUYkvDpBxGvqYETb7PKAz3mjZAadup3FqNv03sOQkq0wv 5Da4BDbiDO3dcXX/x44XfGnMlaTw/J4tQZXaIK7vw/LfXyV9CL1KqCSPGaiFGKy/drYZ ww== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:06 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCF0049078; Wed, 22 Dec 2021 19:42:05 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by aserp3020.oracle.com with ESMTP id 3d17f5rftb-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MX52Mmm8Jiv6ZY3Ww3ikZ0y2BN5hi3kqek/SRqkFQbNFfvDbfYFLO0jRnVH2gRwL03izQY2qBrNmI9Fs7MG9DqYxi419Br8JI16F3HWBWQJnBka/D+B9RI7lnmCU7Sy1Kmzjq7E3qBMdYr/gV6s9Qm0M/FSQNbF5XM2hCT+TfyEHYtEP/huzUYJ5As4X5dflM2du+UhSuDPt3n/v5HeV0Y44TU1zzhF8uQrYs2DCO/0FGHKy/JzkFngpSLNd+T6PUa6fkw9wf2nq34Gv6EgF2gDavN+iDi8ztuSonGHZ1axa33DfaliIviVZw3t6ylWRcdgZX7MT/H7omS2VcaIBVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1/HcDuIPgIskB3Y2RaISTDfFGiYao6zJj8o4PM1nRLM=; b=mHijRg8JTQQuG3/7bJCcyq3IIRSVRUjFzLMF450jJnSLtZPgnNKVBlXBkACDDsnYk/MRx3F3RrNGi06h3jrWeKZYWEPExORXLS7AvgvL1EaWDlAKP2/NFZhApPNP+yGXVev0cmdkybDc7mrAUzcM1XRkgzRWJZNPQP0fsmmFp0PoaeAGVpbEv4BOSO+zY9Syn3A19ZZUKMsuW+/m3gN//RGr2l4tF52WTemf1EE9mt7LfwRBCnokcJ3MmzBKUazWWZAoxF+LPvBT8UxZgN/vkeKPhgspFgqJqiMuOV2kRsrvrCwYfeBV7M037b+znqzyQMmmMsg25Ksk2oxraw8naw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1/HcDuIPgIskB3Y2RaISTDfFGiYao6zJj8o4PM1nRLM=; b=pN3geOqVaHK1XxzDlQoacHljzQLlpuF1dAusEvjJzbZKIDaGJmIIKyC3T21yVTgG2eAB8N9NbzHmxEvo609vEyO2rtWz8SMfCCPFXnHI2v8N4XzXO8qbyz0x9VOqJcTBjM3zZoMRU2SjeTokfidJPqHGwi1b8o7GAeBemcdhVIU= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB3746.namprd10.prod.outlook.com (2603:10b6:a03:1b5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:01 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:01 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 13/29] cpr: preserve extra state Date: Wed, 22 Dec 2021 11:05:18 -0800 Message-Id: <1640199934-455149-14-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a1ae158-2d9b-4cc6-2513-08d9c5831fca X-MS-TrafficTypeDiagnostic: BY5PR10MB3746:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:341; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IPhyKQ3X3hrQTXgwVp8mym9Avw/cd9chvLEjzvqrwOjeYwdD1AisfMy0d9GG0maXoR+e+6ggiVC5ZJrIFMn4ElDYH45aiJygeffe3LTQbq1HYkfE2Pu00nl1spwp6KKPqSqq6v3lZlA7xRaBRMdsgYr8N1S5vM4i3R+FsitTpIzPtA0qpInniXjBGGF0MP9dbLb7OzH6mAP59Q3eKe/ooCwORCfnXwKbb/KcN/q6fFsn0/BeFHK32/kyMT8pblFg1d5xzHUb4mch5lVBV9zdmtRJsioP0YS3UxnDF1COW7AhoonPVsejYF5c37lEoTPDvnP6Po/t9YWeQoR7H2LLuSPTgNJA6QD/WsDKnxezX/lU0BBfHQgWfzQbcyEO3nwKiF/b7vB9b0VkbOfv5Fq5ezTcKQfiMpS+ebR9bj4nXJmWELlpFRwjdksN0uxUxlEs4eB9UCPvJoxf1Z0H+NSZQEcMM+2On03AU5p2CkmEFRWOa76w2+fbbHrutcoxqfP1zQ177QZxsvyDVP5KfOHkwPsl3LI6ikiHUgSy+OJ+zvCE93TO7+Kx80+lFn/1TFMdrrrHaZijc8MsbbWIdzG9WPBiGS9mpr5fDuN4YUiCLIbjmotRAuPMNA7SXwxiP7qU5eg7k5xF0J10Q9WJresryeLkHo2+kdj3p42DwiyeoIU+KwFeYC/fh0IJYW1/I46mXFIUSM4FKCDZ7Ve+2SvE+Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(66946007)(66476007)(508600001)(83380400001)(38350700002)(38100700002)(4326008)(2616005)(52116002)(107886003)(5660300002)(36756003)(186003)(2906002)(8936002)(7416002)(8676002)(6486002)(26005)(86362001)(54906003)(6666004)(6916009)(6512007)(316002)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NV+jqqUzfvzZWMbJhsuXQwPj63HLiT3QuaG2dh9yR2M5dthgteLNZAV8+yFEM9++aKEjTau1u7PSfJKw7bDrSrJa82Z2mgdyd5GDSdfWJTp9AHeEPvBXVe91xyh9yZve3wXJCaIK/rlDOH0y2R20cY9rZfemPYj2WLGNFqfprOxJr1cGoLhBUyOTRfT4+27uRpmbvg4D47f2rM8HW02ms0/I7qGXvxjohrLmGYoWmF5dWBeW6K4Pb2ft0Wp1h9cIHPPf95t9RmcjzLWquBcrUQ8AyrzC3+SLfCVgaTUH2kL5vvyfJW4PZSyP63heTDgjC5TL7TWsbiCL15A7Ap5Cj01A3jIaA2BTAdc3S3/xNCuqr9bXGAXwJe3GPb2iV+ZXICoAT4pExZJqgg469s9AgVJj4/Qc2Nw3/sMCPgS3C3k1fYToT9/QL2wD2wMljTfdeMUqlbA8X+3cgkjVMuP2VhxLCCKJZgoWQfvJ7XqADHsW/nj5L7umluKQ6oHMzo4pBkl/Ky0sqbKdVLqC34ni5qvfCq4uRPJ4k6P/DSFY2n1z1YyLBVS7INMdDke5MdHxhrcJ/0hwBwQG/n1lUn18DULpqKTsIge9E7rhZxwYZd8r9IDdV2YGjlY7eVbqQWdnULwPsF4JgI7bDWorGe0CFcnqTBeZdKed30y4Nr5l/NVRGKB/scYe7TakRSf7cheD/B5VZDcJvprkxX5qL5yJyk40CrYBsOlGpAd7UnfsCxpG3acIgzh1EYQFuB3TEjWa6dtxGijzPyBD7V7Vm1imPnmx03dYM6bM0bBB+6AVkZn9HeGHG1n5BSvnCfbxN2TfNKMrQjt7xyB1IX9mmVpSbmGPAU1x1NCHPHLCNsyC8mP/uuxFTCUHslVhsNVgg/ub+tIvPp/aHf9lvn3t3NQurrFgJhnlRJnqfwP8RNBRgsbv3Wx47gYe4BRwhIUenW8Qj4kg3rY9olkhc5zCQMnOuvpq+nmCEkgydLONc5I/nWJptFcA6qH20mZAW4bGwCwkKNccszOAoiKCs7RjwR8nQaXlo9qLRAisArtQKGO+KWxwgsXAqtxaXEnJV6AbDCZ2leTjcoh92MZX0AZqOiga4s9q7G3SxRbdV65wxeVBsCAKZRSQE6m60YcIWT5x5dKPQV9G3pjaX8Q6kNvEh59IFWZfBX0+A1FfdDVdraIuTdh7TMwO5J5BpPtWSUqworPXbZ1yRF8r266CJ24wX5Cee7NW2mJyOyc1EZ1OIcOpevtQI00DqXacj8OTLjC32XuL8VRsKVTP3WopC/rCA3Wg7qEURfQuEGPib0ve9CL+nO1ZazicamSiGyOxCj3cb0PqschprS8Yh5A6fRVz4w1RtzumP7XXFWWur454thTtlt7N5AHDKYXe16/KEFxcAREA7qaddFVXdEkTfFqZ34f/mFoHd15dFxQ1hocet17HQPCT/zw9auYJnomfxwh9wu2Ix4fvFdUYEUvaj3b8BbMYcB90ny0V91gQPYgX9VP6Tw4KWQoV8+c1CPOxXw8kLwCLvA0GuK9lqoZrFDcuh4PBiPBrspMlXiCVlFAzZeX7xxGA9ZdX2hK4LSGtwCo/smqZA3Q/IbsanNXKRLH8PfKQhnucG280s6ZQtSvs4uHKXbebYqmXjwBsqvc2b4IQtClkr7QOXEwNEEuFAhpAkzVj9Q== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a1ae158-2d9b-4cc6-2513-08d9c5831fca X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:01.5458 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KNocGORCaGSW7vFZ14RgQDGdsdL2aLSwQuHTVEBqhBi7crgKr1cDjR9Ntxsa/4P602tQXm7vw3nCakTQ8OVkGMcG49tqAo77PHvAU+2g1Tk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3746 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=979 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: FXdByisw4r-QZM77nRSxZXOL9Tdq9nWW X-Proofpoint-GUID: FXdByisw4r-QZM77nRSxZXOL9Tdq9nWW 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" cpr must save state that is needed after qemu is restarted, when devices are realized. Thus the extra state cannot be saved in the cpr-load vmstate file, as objects must already exist before that file can be loaded. Instead, 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. Currently file descriptors comprise the only such state, but more could be added in the future. Signed-off-by: Steve Sistare --- MAINTAINERS | 2 + include/migration/cpr.h | 13 ++- migration/cpr-state.c | 228 ++++++++++++++++++++++++++++++++++++++++++++++++ migration/meson.build | 1 + migration/trace-events | 5 ++ stubs/cpr-state.c | 15 ++++ stubs/meson.build | 1 + 7 files changed, 264 insertions(+), 1 deletion(-) create mode 100644 migration/cpr-state.c create mode 100644 stubs/cpr-state.c diff --git a/MAINTAINERS b/MAINTAINERS index 3c53b0d..cfe7480 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2995,6 +2995,8 @@ S: Maintained F: include/migration/cpr.h F: migration/cpr.c F: qapi/cpr.json +F: migration/cpr-state.c +F: stubs/cpr-state.c Record/replay M: Pavel Dovgalyuk diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 0f27b61..a4da24e 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -12,6 +12,17 @@ #define CPR_MODE_NONE ((CprMode)(-1)) -static void cpr_set_mode(CprMode mode) {} /* no-op until a later patch */ +void cpr_set_mode(CprMode mode); +CprMode cpr_get_mode(void); + +typedef int (*cpr_walk_fd_cb)(const char *name, int id, int fd, void *opaque); + +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); +int cpr_state_save(Error **errp); +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..42465f8 --- /dev/null +++ b/migration/cpr-state.c @@ -0,0 +1,228 @@ +#include "qemu/osdep.h" +#include "qemu/cutils.h" +#include "qemu/queue.h" +#include "qemu/memfd.h" +#include "qapi/error.h" +#include "migration/vmstate.h" +#include "migration/cpr.h" +#include "migration/qemu-file.h" +#include "migration/qemu-file-channel.h" +#include "trace.h" + +/*************************************************************************/ +/* cpr state container for all information to be saved. */ + +typedef QLIST_HEAD(CprNameList, CprName) CprNameList; + +typedef struct CprState { + CprMode mode; + CprNameList fds; /* list of CprFd */ +} CprState; + +static CprState cpr_state = { + .mode = CPR_MODE_NONE, +}; + +/*************************************************************************/ +/* 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 = { + .name = "cpr name", + .version_id = 1, + .minimum_version_id = 1, + .fields = (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 = g_strdup(name); + elem->namelen = strlen(name) + 1; + elem->id = 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 == id) { + return elem; + } + } + return NULL; +} + +static void delete_name(CprNameList *head, const char *name, int id) +{ + CprName *elem = 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 = { + .name = "cpr fd", + .version_id = 1, + .minimum_version_id = 1, + .fields = (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 = g_new0(CprFd, 1); + + trace_cpr_save_fd(name, id, fd); + elem->fd = 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 = find_name(&cpr_state.fds, name, id); + int fd = elem ? CPR_FD_FD(elem) : -1; + + 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; +} + +/*************************************************************************/ +/* cpr state container interface and implementation. */ + +#define CPR_STATE_NAME "QEMU_CPR_STATE" + +static const VMStateDescription vmstate_cpr_state = { + .name = CPR_STATE_NAME, + .version_id = 1, + .minimum_version_id = 1, + .fields = (VMStateField[]) { + VMSTATE_UINT32(mode, CprState), + VMSTATE_QLIST_V(fds, CprState, 1, vmstate_cpr_fd, CprFd, name.next), + VMSTATE_END_OF_LIST() + } +}; + +int cpr_state_save(Error **errp) +{ + int ret, mfd; + QEMUFile *f; + char val[16]; + + mfd = memfd_create(CPR_STATE_NAME, 0); + if (mfd < 0) { + error_setg_errno(errp, errno, "memfd_create failed"); + return -1; + } + qemu_clear_cloexec(mfd); + f = qemu_fd_open(mfd, true, CPR_STATE_NAME); + if (!f) { + error_setg(errp, "qemu_fd_open %d failed", mfd); + return -1; + } + + ret = vmstate_save_state(f, &vmstate_cpr_state, &cpr_state, 0); + if (ret) { + error_setg(errp, "vmstate_save_state error %d", ret); + return ret; + } + + /* 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; +} + +int cpr_state_load(Error **errp) +{ + int ret, mfd; + QEMUFile *f; + const char *val = 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 = qemu_fd_open(mfd, false, CPR_STATE_NAME); + ret = vmstate_load_state(f, &vmstate_cpr_state, &cpr_state, 1); + qemu_fclose(f); + return ret; +} + +CprMode cpr_get_mode(void) +{ + return cpr_state.mode; +} + +void cpr_set_mode(CprMode mode) +{ + cpr_state.mode = mode; +} + +void cpr_state_print(void) +{ + CprName *elem; + + printf("cpr_state:\n"); + printf("- mode = %d\n", cpr_state.mode); + QLIST_FOREACH(elem, &cpr_state.fds, next) { + printf("- %s %d : fd=%d\n", elem->name, elem->id, CPR_FD_FD(elem)); + } +} diff --git a/migration/meson.build b/migration/meson.build index fd59281..b79d02c 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -16,6 +16,7 @@ softmmu_ss.add(files( 'colo-failover.c', 'colo.c', 'cpr.c', + 'cpr-state.c', 'exec.c', 'fd.c', 'global_state.c', diff --git a/migration/trace-events b/migration/trace-events index b48d873..35b4627 100644 --- a/migration/trace-events +++ b/migration/trace-events @@ -312,6 +312,11 @@ colo_receive_message(const char *msg) "Receive '%s' message" # colo-failover.c colo_failover_set_state(const char *new_state) "new state %s" +# 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" + # block-dirty-bitmap.c send_bitmap_header_enter(void) "" send_bitmap_bits(uint32_t flags, uint64_t start_sector, uint32_t nr_sectors, 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..24a9057 --- /dev/null +++ b/stubs/cpr-state.c @@ -0,0 +1,15 @@ +#include "qemu/osdep.h" +#include "migration/cpr.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; +} diff --git a/stubs/meson.build b/stubs/meson.build index 71469c1..9565c7d 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')) From patchwork Wed Dec 22 19:05:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572330 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=H3Z7JvhM; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=tE9C59Ce; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3yR3X42z9s0r for ; Thu, 23 Dec 2021 06:57:35 +1100 (AEDT) Received: from localhost ([::1]:34206 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07jx-0004F8-9W for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:57:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VJ-0004yC-4V for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:25 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:18872) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VH-0008Lp-2R for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:24 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXwoH028486; Wed, 22 Dec 2021 19:42:07 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=dcymkrLro6szr/jsVlrewrkKxi1RbRxnsECnbznFHY4=; b=H3Z7JvhMsCikfNWSs3c4bh0AHhhiheashOre14tiWYUg9X9DP464lXXNUjAd0FiiHRVZ X73PX4h+TQKLfRYpvsadwE7JZRryoq7/PnNyGksWDMfC6yIgcX9ThcA/U3BfKLqjH43E m5+utSgQm7Huty5QJm+RLjbt/PbIxcCoKvOz8j6V6QlZ/Hc+Cf3NyRH4GJ/HGa0iaB4t MRIf/TdmHTPJx8ARwPFYRJ44MOzsLiR3TuQAp2KRqzoXPf9qaxgtZ0Eg45kSIPeGBDwx d6VhmThgQKAAVCP7Qqj/kV4hTc0TdlU/MSi6zrno+nhIiGHTIOpFduOXkN7j+9uH3bDz nQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:07 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCF1049078; Wed, 22 Dec 2021 19:42:06 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by aserp3020.oracle.com with ESMTP id 3d17f5rftb-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dOOkGJfOJkgwMJz7DotOynzsmzVPZDa3Bz2UOETWLfw6g1GH0zNKWTsfwKFzm93v4ZQPOUInADUQ7lznhqcpkEjPQZsyZqHWuWynK1qq0TAfxZfqBCgX9sVVprKMbfeCnE5Qd168vFu4vFRAX4B6mA76tJK8rzjCxOdYNKLdNZb/Bjd7pQPJPQX0XJsq5cowiSn8tNwT7wI4qhpm4gSMdpknTPRCpQd9mAqMbuJO4IeUQ4f24YPIJDOpQRrcTwEX0hNJY18YUyWIOa2tgm5slLBdIiV+xLCTPRVv0acnElB9aML9NK/HJJWMxL+ZW+ziI6CD5PgHWkfScBHNMEuHxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dcymkrLro6szr/jsVlrewrkKxi1RbRxnsECnbznFHY4=; b=bwDmldrEaRSwMEUBrotkvzE7nbDTcfczKTtAJa+jWEMoNM9OWovxohEuK/CEPbMeDrdorur6dRbtokV0mErIJzWku5TRMpuiNRDh6t6eVgBu5a5iMpZYKU6Ap7/V0cbO+sx+VOnsLNTVfkNDub86sxvNGXBfVFmEMWJpU7/hPI6YghGT17iiz3gNUvDZf24+2kR1LfPqYnjq6pqQ1TgvY1/HLVVfDq1j4NZCL2E3fbsaepwXG44ytNoIpWwm81O9uUFWeQx+oZpFDsGLlNqUljVv6hUuPloeeJE6iCs6DBLhtlpANWxAfB4vPXf/4dNKQPWjB1Ab9jqSQ7xj9tyL1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dcymkrLro6szr/jsVlrewrkKxi1RbRxnsECnbznFHY4=; b=tE9C59CeJBJf6/cDa5TMnBcEWVpuU7Hf6Sv+L0TzgjXtBtA5wpii7/NYCRcHDLyfp9frTPlWesEYtl3OQ7kTK8OQMHAjOr2EREQB2e1Jf0vBKLw0KFQLX4LOyLHL+v2PBr4TWWz/wm9ADXbwfE37Hq0zRuI6cMdgh8xZgYwfMLU= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB3746.namprd10.prod.outlook.com (2603:10b6:a03:1b5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:02 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:02 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 14/29] cpr: restart mode Date: Wed, 22 Dec 2021 11:05:19 -0800 Message-Id: <1640199934-455149-15-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a890827c-06d0-49ed-4832-08d9c583200f X-MS-TrafficTypeDiagnostic: BY5PR10MB3746:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VTEwLHshDgRSeZz4MRh5N4ckIfmeTBf6UV9ZCnjlpn+svMkxCj1xBYKDiruwPumVWov67A2j4SV/uVdRW9snT+4vTbyXCuZfOE/3y/oB8vuMmu/7hSx3f9QoT40iNhIR4RYhHOHPSA8UJahfERVFWDfEjm97VoEniirPZkw1sxV7XqJDyXAHRT//6gy4Tq3iWn691dFpBLfht7gm6JfWPMcIbL7LVNIbZ9FnQeNS5yuw7nzphIrRR1KQTSY24IPiqgSNbgouSehaIXmNcMzVa6gB1RnHio9IqeniKDfCiZD/n1RUJOnZyGuSSTXnxdRnRPHLaJJxyx9kC5sD8+eIfWtkMO2RoFKRigH6ZPedJl47VOwpiqpqyrJgwceSRwMJFud5rb/N+yCbXEgd0Bkc/yPL461ClsLfWgZx36g57TZiWE9FyMHBluDO277VCweKAGlT3NcQnBDqLp6y/N4YU+RXbbPMfPcs1Y0iWWKLyW7NGVn8NjnKGiqaoq51zmlt4Ptb/PSdMAjPl5z37Q4uJue56wRe4b3N8B1t7+DrQw40gmSOMF08bDIM3YeywL6+Lfulj4DK/TAgFlbH+sqqquwqbJ+9bx79F+qSItHJVYWSnAjSnpcO4GE6UVNsT7igScFYM0klrJGGHeIDJX/Ihgi+g45zXjDcufkxMQO3sFbsdwy0cD6+i09grwBxNhTpts3PZX3CPcdbd05fV12fhg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(66946007)(66476007)(508600001)(83380400001)(38350700002)(38100700002)(4326008)(2616005)(52116002)(107886003)(5660300002)(36756003)(186003)(2906002)(8936002)(7416002)(8676002)(6486002)(26005)(86362001)(54906003)(6666004)(6916009)(6512007)(316002)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YlGXS0ijlEFEr4H+sMYsUvcfXbJ4F49TjjfUpqBgQzPgeUYqcGNvU0kp/XEiWhp/3O4QRP/gTX482SdwCJi9FPF0HkxaC2PnFFBr0QsC0JpXibnEnBh9Bz2jpRCMHFbzU7SFPY9bh5e0Q39Zt0aYwa1VszAkVi5+37kp2NEgOV6tVDRMuDuu39YkOad58olCm0yf0CdsE9wjrMErCQVotOrf5UixduG2Ea3JD6mF2djc/SpuHTcTEXxsp7Y0tYiBB5xJ1Nzvy0JKPaGXv9GAgqpL0oDKQoUdqp57Ae6PUUtl102VR2UL3jjiBjan0qGp7ZXVbcxEFZ0kEAU6hMBBxWousFZVYVrIzKzl64kGIECpjn7ndiI6TDPfRaIheejWMz08PC0rRhx4LDAUO7e2scVrKTaHFaSA7hz8VIoxhzi6X3HeUzDJIxg7548RYOdV6fhMFwefS1Ah5KqAUMtPLopJ8rvwadjbXAufDbzk6Hj63vziEZnqpcuHWLjIBhIkQguWNZSQfD8bWfstIBNGDzIre1AVe7ebFtlWA/lGH64ZyJ27lHr/gwA0AdrSR4aD0tzJ9dJvItk8nRKryaD42jdTMzwXZQo+XmJKlGqPqWpmAXnBA8SJxbUlxFdqz9Oc0RJqwixomdLZdxAt8Ga532EpCo9aLfT8NCMzmUFvt6IGHmem8aKS4q2Mi7YUc/LUk7eo86HD5/Jsf4/+nYBq0R1h7JKfEY1iuySGlzMgB491SH5CIA71d/gZZjnSD3NokJkyURh2RlYONFvPRfwT1KGW1p43g7ff/hh4J9LNvsZ5nylzgqWfBMekhWuC8DzpT1inVcl1OI2m85mpcjUjzwfnbVAmr3SN8Np374guBj4ChWfDtS+F2RcQK/kdKurVXz1gWYzlJVNUPW9Y5BM7kP4WWKBbq+z7fMy/cVkVpaLieWUBjFTgGJwzKX84UF47SMlMPNYn8wqsoIHSPTQDcAm6tPA99dYdDYX2J7hAwu/5ntCyYs6c3FS3yhtH6TUteemIaNFKncLM5Lh8WKXi1wtH0FZEcWBEZlODsWfLgNJIjJhcpcHlKaaZ8pMD5vuc0pt3AZTBiP5fVjnM3rKQQCorfXkgvExpNP6AUQw7HmDKurazWW8Fgjwi9NEmZ9o4tuitYKRBTLRIMDtOtFCxJDiOjmdpIphxcfShcPOlNKxkJDHgPHAfekfk0egWvTCNeXPQY/kovMLZo6Hu7U72CxvJN6h4e4pBn+t+UyC5pF+kUt+CPDITl2JqMLK+ok6cD63npyLVg5FmzxiR1grcYhSbnhXRs3rMj/9hlxc2kUHH4UJnZBwDGvm8HWctxUAEnD/fvR7pBXlhTDIOFIyTqaLYzldvTuYIuWcazKsggpVtIYnA3pUAPYIDpZlrHUjypXBU59OMFymM3A+oyTPELllvj4jww2tnj21utjZLVS8vCKXB6QRyBuv7ROqDgdGXWcwiEym/d2YBY3wKgLaPCm+YGjFQAlfvWkFFZQsITGIZVG23XJJygqeoYcl6RTe7u2Um9Py2rw/1Xibbq53y1zH/EhE0FqS+lvlw+uM31pBh5NAH2BPzLjIOVW4Euq1RL7Xdkc8u+pU7ypwOFQ2F3pEyIostCqKW4ehWzK07nxPJc+TCXILWpXrW1VbjJFiun3WI38iDbmBDvK0ro13MVQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a890827c-06d0-49ed-4832-08d9c583200f X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:02.0770 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vzDm2/5A6gtakXiP80WjLzr7LpGMV0B2KP4HuDMm6Hf2g1d1zgFT61tqdeWp5hBy6HWJHY2aaa66x12kPgdIa5pS0vEiXtdBKasTsE5KYoM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3746 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: jdngL4HiqpQ-7uMjQl4BjbC8NTrR_o-6 X-Proofpoint-GUID: jdngL4HiqpQ-7uMjQl4BjbC8NTrR_o-6 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Provide the cpr-save restart mode, which preserves the guest VM across a restart of the qemu process. After cpr-save, the caller passes qemu command-line arguments to cpr-exec, which directly exec's the new qemu binary. The arguments must include -S so new qemu starts in a paused state. The caller resumes the guest by calling cpr-load. To use the restart mode, all guest RAM objects must be shared. The share=on property is required for memory created with an explicit -object option. The memfd-alloc machine property is required for memory that is implicitly created. The memfd values are saved in special cpr state which is retrieved after exec, and are kept open across exec, after which they are retrieved and re-mmap'd. Hence guest RAM is preserved in place, albeit with new virtual addresses in the qemu process. The restart mode supports vfio devices and explicit memory-backend-memfd objects in subsequent patches. cpr-exec syntax: { 'command': 'cpr-exec', 'data': { 'argv': [ 'str' ] } } Add the restart mode: { 'enum': 'CprMode', 'data': [ 'reboot', 'restart' ] } Signed-off-by: Steve Sistare --- migration/cpr.c | 29 ++++++++++++++++++++++++++++- qapi/cpr.json | 22 +++++++++++++++++++++- softmmu/physmem.c | 5 ++++- softmmu/vl.c | 3 +++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/migration/cpr.c b/migration/cpr.c index ca76124..37eca66 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -81,6 +81,34 @@ err: cpr_set_mode(CPR_MODE_NONE); } +static int preserve_fd(const char *name, int id, int fd, void *opaque) +{ + qemu_clear_cloexec(fd); + return 0; +} + +void qmp_cpr_exec(strList *args, Error **errp) +{ + if (xen_enabled()) { + error_setg(errp, "xen does not support cpr-exec"); + return; + } + if (!runstate_check(RUN_STATE_SAVE_VM)) { + error_setg(errp, "runstate is not save-vm"); + return; + } + if (cpr_get_mode() != CPR_MODE_RESTART) { + error_setg(errp, "cpr-exec requires cpr-save with restart mode"); + return; + } + + cpr_walk_fd(preserve_fd, 0); + if (cpr_state_save(errp)) { + return; + } + qemu_system_exec_request(args); +} + void qmp_cpr_load(const char *filename, Error **errp) { QEMUFile *f; @@ -104,7 +132,6 @@ void qmp_cpr_load(const char *filename, Error **errp) return; } - cpr_set_mode(CPR_MODE_REBOOT); ret = qemu_load_device_state(f); qemu_fclose(f); if (ret < 0) { diff --git a/qapi/cpr.json b/qapi/cpr.json index 2edd08e..56be0e5 100644 --- a/qapi/cpr.json +++ b/qapi/cpr.json @@ -15,11 +15,12 @@ # @CprMode: # # @reboot: checkpoint can be cpr-load'ed after a host kexec reboot. +# @restart: checkpoint can be cpr-load'ed after restarting qemu. # # Since: 6.2 ## { 'enum': 'CprMode', - 'data': [ 'reboot' ] } + 'data': [ 'reboot', 'restart' ] } ## # @cpr-save: @@ -33,6 +34,11 @@ # For reboot mode, all guest RAM objects must be non-volatile across reboot, # and created with the share=on parameter. # +# For restart mode, all guest RAM objects must be shared. The share=on +# property is required for memory created with an explicit -object option, +# and the memfd-alloc machine property is required for memory that is +# implicitly created. +# # @filename: name of checkpoint file # @mode: @CprMode mode # @@ -43,6 +49,20 @@ 'mode': 'CprMode' } } ## +# @cpr-exec: +# +# exec() a command and replace the qemu process. The PID remains the same. +# @argv[0] should be the path of a new qemu binary, or a prefix command that +# in turn exec's the new qemu binary. Must be called after cpr-save restart. +# +# @argv: arguments to be passed to exec(). +# +# Since: 6.2 +## +{ 'command': 'cpr-exec', + 'data': { 'argv': [ 'str' ] } } + +## # @cpr-load: # # Start virtual machine from checkpoint file that was created earlier using diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 95e2b49..e227195 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -65,6 +65,7 @@ #include "qemu/pmem.h" +#include "migration/cpr.h" #include "migration/vmstate.h" #include "qemu/range.h" @@ -1991,7 +1992,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp) name = memory_region_name(mr); if (ms->memfd_alloc) { Object *parent = &mr->parent_obj; - int mfd = -1; /* placeholder until next patch */ + int mfd = cpr_find_fd(name, 0); mr->align = QEMU_VMALLOC_ALIGN; if (mfd < 0) { mfd = qemu_memfd_create(name, maxlen + mr->align, @@ -1999,6 +2000,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp) if (mfd < 0) { return; } + cpr_save_fd(name, 0, mfd); } qemu_set_cloexec(mfd); /* The memory backend already set its desired flags. */ @@ -2255,6 +2257,7 @@ void qemu_ram_free(RAMBlock *block) } qemu_mutex_lock_ramlist(); + cpr_delete_fd(memory_region_name(block->mr), 0); QLIST_REMOVE_RCU(block, next); ram_list.mru_block = NULL; /* Write list before version */ diff --git a/softmmu/vl.c b/softmmu/vl.c index ab3648a..4319e1a 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -76,6 +76,7 @@ #include "hw/i386/pc.h" #include "migration/misc.h" #include "migration/snapshot.h" +#include "migration/cpr.h" #include "sysemu/tpm.h" #include "sysemu/dma.h" #include "hw/audio/soundhw.h" @@ -3675,6 +3676,8 @@ void qemu_init(int argc, char **argv, char **envp) qemu_validate_options(machine_opts_dict); qemu_process_sugar_options(); + cpr_state_load(&error_fatal); + /* * These options affect everything else and should be processed * before daemonizing. From patchwork Wed Dec 22 19:05:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572333 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=WmTuXWD7; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=A225pC3/; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK42r0Z4Wz9s0r for ; Thu, 23 Dec 2021 07:01:24 +1100 (AEDT) Received: from localhost ([::1]:41732 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07nd-0000wp-RV for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:01:21 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55698) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VJ-0004yB-1w for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:25 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:18988) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VH-0008Lt-3a for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:24 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxQI028537; Wed, 22 Dec 2021 19:42:07 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=IGFnm2dfC8pVFp09AUsn0guUx5mG+5HBcTTy6eY3AGY=; b=WmTuXWD7UHQv68PziiBlaCWKRwoJwSQXdD9DMeqDxBIQiDu733J7a3Ht7q2kqlHCUQX9 a1pTFc9IFBBOW1xj6fM/V2WqZCODZSm2DGtoyPWUtrBL/2+Dl2WlaCEtoWSzm8ZEMiTx ZG4O70HpcyMEs0EW4Z+IQL7gnJvY78dhmpmHWBdCPRCqgH16neSWt5FnMwwhk9u9EwBm zYkD2eIg7EdyWaBuPBq3jnai7qw/2Oi2SGvHXyP2Rrla6jBN/YxoqWe6KrV1EPMbAbai +zfYGi77diE+e+/8wPePbbEpB/EWpWr2y/MqqwbLnfX+0mA00uQpgSAMDMwDeIlW9tz7 Zw== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:07 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJfCF2049078; Wed, 22 Dec 2021 19:42:06 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2171.outbound.protection.outlook.com [104.47.55.171]) by aserp3020.oracle.com with ESMTP id 3d17f5rftb-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OjHGInZYfAXUI91+jyv0DKdw7yrU+ldQR8tiwCnKQbhAYQjq1+jQ6STmVEcDcP9Ff82rrCEER2OdvKB0Z80E1rhCv4Ok1sIYRT4XHw6JQsZO8nGHuk78c8LbC9eCCPV5xTwy8KG7SoLKnc3x+nkM8ghIPJADpjbTOM6ZJlOvb0eFqbA4uy+dqxG0J/7+sfBCNoVdFFkEWcn1WmCFCgXOmUHiqB725P23TC4aWQF9aldq9pznRicNBty90LcMDZ2yKFXw/QAVDrAsM/S981ss9epZxdNEuX/wVFcOBO+gOW9AwNt60WZzA19UMO0ZB88Pu5Vfw/W1A+WLWXOpwcNj9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IGFnm2dfC8pVFp09AUsn0guUx5mG+5HBcTTy6eY3AGY=; b=Bqtt4w7/aKDLI0XNmGz3kVVs944zCp3OjJZebi5Bf6Jzz/DvABkqjPSckmNKvTg5jys2w6U3ms30sgitZPna7D8ittGEeIN4TYuzEuRCeSAH4KyIbVLHgNHsrWXAC8FqMDP375ldFg7JzozyyL3/9sj/3oTkgdbY6yuY34Y+U8/PTvMXNrURftWnC7E4vrhJKusQ8cRH21XwyquERzb5RIoimfePR/BjIyQ5A9bRFhMuSnxqN+NL1oUBSlrjOhNYVfOt18cdLwQ6XeH1irk/wxxMSZ/zdNf0SJgrZtNfl4kli1h+L4+2TtEL3DyRH/V56l3EFlrzoQmYtOodBK+khQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IGFnm2dfC8pVFp09AUsn0guUx5mG+5HBcTTy6eY3AGY=; b=A225pC3/5pdaI4/XNIq04CQlkfhUpp4SQlo2bglD0URRSSv6R8xOSQZLSr9x/nl2JyEKjzKmh7IOCikmZOAc0LrZsBLv2xTozmrYNcwy7OUKAN7/IkPeBkk191Cu6CPtWweIGgQCCG/7foWGsgUlQVl+cxlwRkn4NsZumHeqDVo= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB3746.namprd10.prod.outlook.com (2603:10b6:a03:1b5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:02 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:02 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 15/29] cpr: restart HMP interfaces Date: Wed, 22 Dec 2021 11:05:20 -0800 Message-Id: <1640199934-455149-16-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3ac66553-8634-4bda-2fec-08d9c5832059 X-MS-TrafficTypeDiagnostic: BY5PR10MB3746:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:346; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7L8zwTSFLBoVfSVXQ+t7i0iP9vU61+UKjOc/hVeY+7DEYumtIB0AOZJWJMcQVCC9vU23GAkZnIXstuiDffc7wxGAJF1Qce22xZxRazW182zjWMzVhiFUs+nQGuetu6Hl+p64pxiNByaqXXuZ19ExCfc5jjaJq0pZVh+30GB9xzU9DnpDtHlFD5oGAoEp4sx5z1SZVqlJhegYIGgVXfr0Nrh02dDydb7/O7FPMdUUttK803NE4/iL39yAyDBJ2QylkexI7nOQDcR3Fn9TzwUGmjQMhZYDizytxlSz1QDo08GGjyTmEXoJKL2BSOJkUIKz/rEjfzGK2s/BBYRtk1Q1Jw3ZMAkeMK6w7GoyBl9fa/bHDK/jDdM7vWPpKVazpiDlmUeBlzbyDou0YMmFSGL7NXQntX8TIulEARx5D3czcdXPrghMfc+0qn4C+1vPM4J65hwGAS3gDrlBXgOCMwKKuBlARxCMO34QKtuJSoBsX9BspCPER+Bk8bUdMbiwPNa/M0zNR8Vs7DRBc37CjFBn62AjROFqTDOqI2RepIGhoGMULeCM9uomihK+PAnyIaUzbzZFseSgtP92NDHFQZCt336BDaBia5MS9XSZNPsmKzTXn/FsN/gUT4cAhyawQ9usr7c2iEjcd6hX9W3vcrhQZ/mtsdOg4riO5oxK6aqnryfGeAO+lyW09uLWeRUTF0HPV5ZNVdC5Cpz7acDoZiOVAA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(66946007)(66476007)(508600001)(83380400001)(38350700002)(38100700002)(4326008)(2616005)(52116002)(107886003)(5660300002)(36756003)(186003)(2906002)(8936002)(7416002)(8676002)(6486002)(26005)(86362001)(54906003)(6666004)(6916009)(6512007)(316002)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6N9gQuHbGBkhWWN/yTW2aHTNmJnt/DvdVy6jZivnNwygWKZ2rz+tUsbhRzV7RrXYrjcavXrARnB4BRtWrTrrabzsv7jJ5JDYrnOjljLjp/6q/qzQotg6E8kIsgBshzdI02rbUmRVSqc2x32W4ACPXNsdiQR5VXB+eAIi73Ipb0UCcYUZ6n1x9z8CMpTSdNirpx+nSlQ57djg0ybSwK0l4WrmlGidsHk8Gywj+7e4vd/HKFz0pu+T9R7Prq5+37Rnqb5ERo8BaJc9AN+b0rq9YVJXr/sPCKllciXrv6lwz2D7LnyZ9VJHjSvl8EzqAEM9MOw+W2B0rgWjJMyn4qEA00Tf1t4wtY0GqSVd9Gt7e2s0NaRRnrs0/zTWLg7Y1MhcBIz/X1KyRBu8/AaQExlkfAbyVmJd8w7xRAep5IOJCpFcVIhfFaY1y5C0HRqurVS0QQiezAyz9Y5KUMXx9fXvTmH1E6qEZpTBiwGIoXHFr1XjmJdB8TKrCx/G+qWGPWP840MpgUE4R9zXMFtzjZiZxJlVh65ApPXiHPVdlF9W9kbdoOGHSB5VfkZi+NwfrHwLJfn4Rk6N7gmRQfuvhtuRd3/xgccLe4yxn2bJ0kcBqOV2HJ6Vd/tJVvfT+scuP9QQFA3R7L0SbuyB3/21O0+vI/qjTAXD9jO6cfrCGtCO/fd9S71u8ZYxLmG8um6XPfmSKr4BDBil5C9NQ5OMtHAXANEhT7LDhG+xoRnqVB2HYgsUDo8xVk+ZKQuxg0N+gt98H1bwIIaJpfRMwi/TatREAwANEJuIURFZZnth6l9HmevMKE8FCxxxjUzpLAaNBlt/84/C+/MJseT48Ez8ELLocli6CAfKNQeFonbGHdAHUuQlyECzD6axf0Np33ep7YkPoq1TAD1iUfAWIrNnYpcGHXPxM6TyLTZHbsuPMt5IQf4mU5iC2F+skLup16EHd/J5VOKJqP3uLz2wniCczkXHOGoKQYEhaQWtR74KdbnoHZgWySb9i2nuimUFn0hqGLB2gykl62/2W0nsnA2UqKRXbAMBvbOjv7w4e9Vk5dAgXQGJelEAs24nLCGbXxnIycE6l48ziGAhDfHXgLP7tEvfytmhUrwhdgFlioB3wyCRp0IkPPszJUDzLPC15Bqk9zbLYYdW9gQ6953GxsIKuQcQFRg8yoJKRHvQ2z0DMhp2MRzXA6JoIA1H/FEoBVXbQQsjfoCSq3pT6gWtlChrWAUh88IJYxRrIUEnni5jZICu2YHs3EsgAz7Mm2pZTHBdmZdVcCQcJRX5WIPtCBQY2mjspnsgcxisupz9SwLrZmWeiBVtxISacjdDdrpTCOGIdRJicbB1Nr6GTmlW0MnJv2fcyTBjMPE+CUzmAW8LUKcMzJMAaJGiKyrcx2de1blm34xBskL9m9SJy9N89OktF4+VN3a7SA7GGMWHhoP+vflqklOWdXvg17U14MzprjFmYT+xOfpZBnQoQu+9XJ7nuW9dvdFWBPyzRoFRVCbsU80uGssnbvzZl5i5KeonZ/acDwWk7zkvYni6XfRBLDL2l8hBTIzaIPCF31SDHmDVrGkyhLPhCNoIf5A8il9bfO9hJhkMNY64ZOVdrJ+NvZIqC2CvvupOE2upDuWtWlF18V9RRNFSMJD/z0/HX94Fdpe8+q8Ln2ccA7Jrp9JPYuaRUuQDSA== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ac66553-8634-4bda-2fec-08d9c5832059 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:02.6551 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Z1V52wlxqFAe3Z+mQMYp4qz5F9gs9kA+QQ5y0RPddshHCM4jslfvP7iHhSGajjzb7jXWmU/UhvmXygOO7THgxmsABnqZi+5cBbKCuFOJisw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3746 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: Inpf88W-SCurecR5EjS4FKtS_BKdYZ6X X-Proofpoint-GUID: Inpf88W-SCurecR5EjS4FKtS_BKdYZ6X 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" cpr-save mode may be "restart" cpr-exec Call qmp_cpr_exec(). Arguments: command : command line to execute, with space-separated arguments Signed-off-by: Steve Sistare --- hmp-commands.hx | 21 ++++++++++++++++++++- include/monitor/hmp.h | 1 + monitor/hmp-cmds.c | 11 +++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 350c886..0fd5b1b 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -353,7 +353,7 @@ ERST { .name = "cpr-save", .args_type = "filename:s,mode:s", - .params = "filename 'reboot'", + .params = "filename 'reboot'|'restart'", .help = "create a checkpoint of the VM in file", .cmd = hmp_cpr_save, }, @@ -366,6 +366,25 @@ If *mode* is 'reboot', the checkpoint remains valid after a host kexec reboot, and guest ram must be backed by persistent shared memory. To resume from the checkpoint, issue the quit command, reboot the system, and issue the cpr-load command. + +If *mode* is 'restart', the checkpoint remains valid after restarting qemu +using a subsequent cpr-exec. All guest RAM objects must be shared. The +share=on property is required for memory created with an explicit -object +option, and the memfd-alloc machine property is required for memory that is +implicitly created. To resume from the checkpoint, issue the cpr-load command. +ERST + + { + .name = "cpr-exec", + .args_type = "command:S", + .params = "command", + .help = "Restart qemu by directly exec'ing command", + .cmd = hmp_cpr_exec, + }, + +SRST +``cpr-exec`` *command* +Restart qemu by directly exec'ing *command*, replacing the qemu process. ERST { diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h index b44588e..ec4fa44 100644 --- a/include/monitor/hmp.h +++ b/include/monitor/hmp.h @@ -60,6 +60,7 @@ void hmp_loadvm(Monitor *mon, const QDict *qdict); void hmp_savevm(Monitor *mon, const QDict *qdict); void hmp_delvm(Monitor *mon, const QDict *qdict); void hmp_cpr_save(Monitor *mon, const QDict *qdict); +void hmp_cpr_exec(Monitor *mon, const QDict *qdict); void hmp_cpr_load(Monitor *mon, const QDict *qdict); void hmp_migrate_cancel(Monitor *mon, const QDict *qdict); void hmp_migrate_continue(Monitor *mon, const QDict *qdict); diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 5ca8b4b..39894d8 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1105,6 +1105,17 @@ out: hmp_handle_error(mon, err); } +void hmp_cpr_exec(Monitor *mon, const QDict *qdict) +{ + Error *err = NULL; + const char *command = qdict_get_try_str(qdict, "command"); + strList *args = strList_from_string(command, ' '); + + qmp_cpr_exec(args, &err); + qapi_free_strList(args); + hmp_handle_error(mon, err); +} + void hmp_cpr_load(Monitor *mon, const QDict *qdict) { Error *err = NULL; From patchwork Wed Dec 22 19:05:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=JPd82KBl; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=OP2t3/AG; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3nH1VcRz9s3q for ; Thu, 23 Dec 2021 06:49:39 +1100 (AEDT) Received: from localhost ([::1]:42868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07cH-0007wa-07 for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:49:37 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55670) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VI-0004xW-Ca for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:25 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:17168) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VG-0008LI-2z for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:24 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXwoG028486; Wed, 22 Dec 2021 19:42:06 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=NJNM7NfZ3AdqmVfamSVJJZ1OhHqgSI7k4O0s/qa3Ohk=; b=JPd82KBlEFFYPIb3R26apMrMS7LvYzfkDbg+I5aSw7eQjk2Hp2/U9JbeGeeWlRCBXoUt 6XQG+wx5Z6OhNirMz+TNisij9Za0XWERGNl2UOmHLUxy8n45nD1cbn4CRK0XXfc/TK28 6PzY6WpjfTNjkSYfC1emSptQGp558LiyG3A7VuKailb1oyRTZWGOpkhlMBKUY6G7N/e6 KRj1XQLniso1+2RTrMaQI7QPXK7Ig7C3BxXGmh8jd0sM2e1aMo8wJ1qEZgRxRNaUs0iU vYsL2DylfTHnyOPw12djfzQtMzI2LAkidf4PdldHtd0Hutj3c+yjFSamTalbsmi++vuA OQ== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:06 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqG030437; Wed, 22 Dec 2021 19:42:05 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PVfSbuQLMBnncTg28Pldj8mPmrtEJ2vcp+e/I+EZ8ZemX2zQ+MAz3Z887ZfSsYWdJhdqF+njBB/7BGpWLa/utLBbFtySyLg/6JdrQ8ULa3wpWr7wgiaVcZiJkKATBeM/KofhCoKpLz3OFC0BRlG7IGeJAwd6ZljcEbeudptVBv6v1omSr8Q6/qWwIjA8lBqftbUr3mTyV3CbTEjS9ut9Pf7YNP18uyu5cjwckZFkGamKLOqVXW/HMucMkRTIevgqzseCROpu5h9NRtUQ6aqEpqcMsqETY5gyZYK8Q10HkGEtZvuHG7CURH+M5YThZlFjd57nypnEnnAtkbpmD5qDrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NJNM7NfZ3AdqmVfamSVJJZ1OhHqgSI7k4O0s/qa3Ohk=; b=dgZSzlJdKJa8UdS9wbvmsxNEqWT7iX9g+VeyvuAfZbTCzr5qbcMh07x2atVmfZwGpxFxeTGO+WZhzLatpsrPEu0TA+yLVcj5dc7XzT0CmA6Ay5ot2fdjK+bqdjm2cZgFPE2Ke6eRcmq7HDEuC/zS536aIkDtHTiHdu4Mps+8NUIiO8zo12qvZvjhenenR9kAITk+wsBNUkVeLR0GJE7l+NuK3Jn02MkrCCK1K6VNSFEcZrIOCUWWqynDJYZT/S6UL6qvi6TgaLfEhQ1YzIR2zjIWcXW5h+eESkcNytvgW5f/L5LDrfA8+dsvpKtOr6/Vpd0NoDmCIcM6sxtta9ff6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NJNM7NfZ3AdqmVfamSVJJZ1OhHqgSI7k4O0s/qa3Ohk=; b=OP2t3/AGtMmRLyOakzJD+vb7kRxfkRUODzVunQ83/vzOWCpvOCLLxbH0rem7RS+WEU60saSSTwezCYhtZz7MH0JXA0kPnuz5QiAoTvrEjTn01Hij6gcE9bSidUV15/O0bR1eqqAZ69MBuqGaXjD8aVmKQJhT9ywk+zuFclYctPg= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:03 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:03 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 16/29] hostmem-memfd: cpr for memory-backend-memfd Date: Wed, 22 Dec 2021 11:05:21 -0800 Message-Id: <1640199934-455149-17-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5a3fac8e-c880-4748-8c74-08d9c58320b8 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:404; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cn/0TWF5MBGN1Q2u8VrFgu5XXrSe2sNw7C8l6XygkJdKxPG73gLlsGGLjkp4MI4RhHzAqNuEsihqIhwwU9ivAF1oDH7tLNeniHd9Xf84OG8cWzLwDO18gu0EMj0J/pL2+dNSLGlMpacJaN8qPJxPKkLqraE1G0qHeZqc/0AZxKDo0VuKh/ZY4jamHRkp/f7dooY/bkx2KnSwVO3BETvItOzbEfejlWM/hNvlV/9JdZ2htgpGrem6oBuAqF/JqdHytXqx3MVIygC2SQnIHhO8VA7B/MyLs87BS1C77+mbjyr9GbH9TVYfX91PpF0m1RrzjAC/IhZAdiadf+hzp9CovEf8g9y9a6Y7hN3Eskc+gtKiGg1LawpqIg/6Jkj8R3wKLtPsaLTODiAcBtBXYfeUN6EV7fQW2CnnIqIZPDoUYXhPua4ctuSaj2aw2oP0np4X8CFibmRERsPwMztyg+4HyNGirA7nV6IvaKjIwjR/GDW+1RSEj9E7GOgbu/8lX3y0i+BJ/PK3Z7oqCtMkHsUlVLtQP+V81EsZKmhRCCEQan1uX9qabyTcAqDVyjbEB5QrE4DcNWEdDl0/Ixv4F1lTB6SA8v+EGMN7ZPEraovxbBTCJzXHVNYtfgUO6C60+oXD2md2bQi7JjlI5fGGjA2PzPkjZba/W3YRzTmYlRyw9aa9nGIXGJsTKr9vyhi2woq3 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yPvjXOQn6ZnY8PVLrEmzHWbRhaYRHWdDQd0n8mRG4u0Dp8LNn0CxPPuEpmMVxFtrpWGpvu7XMOre0HiWUwYtHAx4D+eJPyk1t5N2uLJBttZRqzmcE36629kdvwKs7X3xOnYaMsS5GEf2zWkVLsciLzRQ+HtfHp4apoL2fILYxqxa/WjJLAT8HG8KzhP12Y1Rv8mZQLtFxgYX8wFXdzpZCyVC43wO5Us6QHmVYU169YUO20Q68X7WTAwxzNY0QT/+V17ka+OPCUlCURH9o+Em8M4xGbiyr9mZMFCGaRfjEugIjgsZ6/hDF7o+zlaeAKALcsysi4Uy3mtEoCs/2hgFbcHaOcFIDSTqtis6mPJL5JjDcgY7ut7WDwL6W+Y9N/s5wlPqj+4wCHZzDywLPLSVg0oAFFiC3RCMKf9RMMsL0KfN0YUntqEllQh8tffutnv59FdE3PzEGgq2mhyyhl3dsLQG4E5mmzWadCXZqLPK0n7JEJfy1Sh9/TpLKg2m6Dyk8VlA5hXZ43Vdb/6FM19UY9W7isa+6E+4Ov9NwpjmBDInrX5zXmfQ07VOtNKvlHzeMHShnka6CTYRSATPQibTXY2OScaDJeuqnCI5ponqbPW15A1PhK3KUu+Fdiq1FPa4+UzMCbD/OAdg31TfVExpdfrdTZLhFhLD7yNkE22SSauD8dfCcYWOQr36X6DsR7R9iT3TzKeg+fhbvt7R2zwtE9wu4Hkn/XRZAcNdLgzNKaN5PO5nQIMuQMjyofAhtZq0Hpwdl7IJkJcRekqqWIf2zD2Tdf0TLMXahEjAb3LoBJqRQvkQkYepEg3BwNYoQdfO78JKBGkd8I9hqYftlbMcRPp8zwHesHX1/DL/gmWKP072it204nB/9M0G41q2BU6v605YGcN+7LpP42sKucBEjXlCLUkyGijLKUQmNYLNZNc5YMidBuqrPPXYftUPIlHzuKu2Qvi4F36GQf9vsFuxF5uJXTQC94UAdHk0b8YigYsRc5WsmEfhktwMegA2YlAZSEtavHFjVaDyDZZaLcpXbHzrw+clCfB+2P+jSSh9kSr/YrnpZjvC/viaiFMRQtf1EHZ9y68FaxEXb1FeLMBolZgqA7K5T3MnT6eIzIK5HXg6Pn1vO8CDiQY2BfDoaunfeHnmhxwiFkVsgbR3Ix/3Kug5bKAiOIg2oZnckkCIbxsyAxOVtvcUAl8rKkfzXOmWXWfh+XhzoERpbYEniuc0JBohfFtZ1EF4HnE6dbpMoRqMy0svW4cJ70zy+r8Aancu/C/cD7aqrHMayCRVj+2OOU//eMjPq6587BETBHJ1JJBEcbGWKVrqeob87AS3araZsI3Vtj6GAm7lfAfWoBqOR3xqVQiNILnjI3GNflBXZsXa+ZkH6DW91g6flyaq8GtL0fiPd3aHCxsS6gt/YZ72NFn94RZ6ipw3LUpwTesX+Lm/PKhS11UUoza/zZvbdn6Lmo9pLIV73f5kxGY5pxIdTQfnY63dwXftt0maUJVqfG/uV48JYTaPfrD3QkWJsw9MH0uYJsRAJed/LdnnHuN4K75UnZ2TQXWI12OoplRPRQS3Cc7zi2lt1a+zVGioc/G1EIYEUhnJQ5iQpFNvaUV+ccIXBHJm/6eWgLJSQ2HK90SweO1x4Shphcvjz4iHz8nwGX3ILqMeNKA9UJvkuYOgCw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a3fac8e-c880-4748-8c74-08d9c58320b8 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:03.1551 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: N0Syp8R6RE9LeVQHPjW2Hr20Pu/VxDjPoZzdJk8vSfLAH4HcHqHIo3aWR1/7IQl+yJFz9+byaaqX75OCVGNT5WjMoz5VR35ZwtqM4PdRi08= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: MbCrca_5g3n6TdbxWM0tG5hH1p9TKZoL X-Proofpoint-GUID: MbCrca_5g3n6TdbxWM0tG5hH1p9TKZoL 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Preserve memory-backend-memfd memory objects during cpr. Signed-off-by: Steve Sistare --- backends/hostmem-memfd.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c index 3fc85c3..5097a05 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.h" #include "qemu/module.h" #include "qapi/error.h" #include "qom/object.h" @@ -36,23 +37,25 @@ memfd_backend_memory_alloc(HostMemoryBackend *backend, Error **errp) { HostMemoryBackendMemfd *m = MEMORY_BACKEND_MEMFD(backend); uint32_t ram_flags; - char *name; - int fd; + char *name = host_memory_backend_get_name(backend); + int fd = cpr_find_fd(name, 0); if (!backend->size) { error_setg(errp, "can't create backend with size 0"); return; } - fd = 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 == -1) { - return; + if (fd < 0) { + fd = 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 == -1) { + return; + } + cpr_save_fd(name, 0, fd); } - name = host_memory_backend_get_name(backend); ram_flags = backend->share ? RAM_SHARED : 0; ram_flags |= backend->reserve ? 0 : RAM_NORESERVE; memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend), name, From patchwork Wed Dec 22 19:05:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572336 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=TcqGDMBV; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=Zei2THFA; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK46c4cSxz9s0r for ; Thu, 23 Dec 2021 07:04:40 +1100 (AEDT) Received: from localhost ([::1]:49364 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07qo-0006Ag-7G for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:04:38 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55756) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VL-0004z9-3d for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:27 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:21186) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VJ-0008MW-Dz for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:26 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxMa028487; Wed, 22 Dec 2021 19:42:07 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=cga/I+3i/k80oLHbaipIyHq56lF8Jjv9n+ANl7pIQgY=; b=TcqGDMBVFkUnl7TOlbFWbPOs1wyTwNYGQRGxzHkNf7jhcvd25iQ8J4LNo4wSmClBwW5z OkP0goiQciIuUdrYonrerhf/HItPqkB+WGtmcnD9eRy7aJJ1zvqHl6eG0xcVld4i8BBS 0w+9KTNdazEEXGRYGFdY0v8jAf0yStkfsSGtKuhMCp5zQ8IupR24f9Mxi5e/GOd5Y2az HYCqs1xIyTdogSpgpuwVTMnjqNEfd4+yMRqtU6L3/VWOuD3/WiCZz4EculaG4W2j/864 xbE+/XW+wjVZMtBBrwyCzOs8grbw3RNSmYCGSjutmxDFQ/3s4RipeQnE92EohWNJfTYq NA== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:07 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqH030437; Wed, 22 Dec 2021 19:42:06 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AJvVdyZ/ekZZzQEjUCEMa2ElzxmLgoNJ+SqGuAqlN/jFyNpPkfdp2PlFDVxB6HDpdHM3RRrHk0Oetbw0Hb0tnzApEH5+fmS0cesBnQi3RxYdYkaPKCp1XQzgRqD8MinD1GP23mNqRihVqOCRtuVo2X6jpsTbXNsEFUFwBW2Lb6aBZpq6HizPWk2NcasxIrc/ukOIoBE9jVVnvFHNrz4562rhPHeXhQNWjM3CNToNVYT79/R4YfMPzpVdyDOgtpJT7jjG836E+K2uF7x4+mFM+7a8ss3W+40MpLLf+6Wn914ym0EZByTaoBohZ/+Q0D0vXAjr3gbDUMkPkcfmoPs6eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cga/I+3i/k80oLHbaipIyHq56lF8Jjv9n+ANl7pIQgY=; b=RIgLJKE0eT/vzVQmcoAJ6qotzL/TH/SfptxfZPwKfDt6eumlMIUH59xQ3iKTwrHQ/N61nCOVNht9o2EECZVV4/DQn25TKdsKjcazl3Etw/5hKLirEVTHnk1R3gCGd2jIw8nlUKr9v09ueSQVwyY8mbkDgLydzeQOEHxZgE1R6S6j3FGQXZe+YLoXvQHX34zlpEfFMlj8+942rNk8nwXazY4P1XYwfiiBVNZ9Q6yx22EnhautzVlAo9uSX1bffwXLkwLmEiTCIgO5GCVuUtSdFNWjVIqpEWY9Zfw+aSlPze3RKV7Id9qev3EC4040B/qihr3Q4Yw/Ygoh/vHWOlqk5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cga/I+3i/k80oLHbaipIyHq56lF8Jjv9n+ANl7pIQgY=; b=Zei2THFAMHpq0vScIULNCg9M3aeAscTWSVxdhKnO6+dW37atk1QzeZ0y/xjl52+ze9Z6/1mbtvmzbh7tu/gfRlTO/v18WLHmh5yhE/X0eXdRfEBjUd7SF5FF2Oz7nMkeTDi+oYv0+oHSvrZpvJ1xzfHwLhFCRd9YEuDa/G3zOM4= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:03 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:03 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 17/29] pci: export functions for cpr Date: Wed, 22 Dec 2021 11:05:22 -0800 Message-Id: <1640199934-455149-18-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e2a28beb-9053-41a4-265f-08d9c58320f4 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1013; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O/ydxxJT31lXUp+LneOwQ8J9Z6ftn6zBQ+eB6BeXrvNk4YTCB6VTIBwhI2l+KVWybRTRutY8278ryGzM5XFZRkjQHbH9QKvvZg5q3fhTApj8m7GeBYlZy9hh0R1/Kq5F1i2TbHYBLhph+wUs3y1VHCSMpqPjuL+8OrZk8pGpdjBcXQhPygkZOhjt1P/5g8+tIXhumSDrbwkTFKeoNag0AODv2VZYCoq75sAPlN3ifhfLskhpLvRdkbAoh3M5hkw77z+sDDLaDCL140tnqzbGahMcOAvGxMQEtVv0V6STOi8Ev9BNb4lgZ2hXTYeoKfNI2IVCWsF5hyWB40zxT1DMwo4cAINjbxOSGS45YBI4o9BfYi4tZ65JWk2U5Ak+YAbASp76fu48rNAavczecsMCIWcxI3HdkKSWrgUI4awWMIginZBBVNn4MpiXivARjvJoOoy/2/LlFpzMPLPceDqpZ6cL6y8t/M9qNlQBadjQ74aTL6cSl5epgwZAY1pARXW13z8tBOzfOhBXVyCRjWtb4wKuZxtwoNt53OY9Zd9JEwB1KAT/NfsuW+345SoRQDJNaJmCHV2lSLnpr+XfWT8mjyDGAnW5COCzBw7siUzOE4x+I0RUE03OE+QVZInjW0Ax6Kq1S8lfKwXZ5N7c47jfdGfEvBsONYRBMUN343fXO3QgE1wUGNtxHPv0+r2sQ9CHH+euuJ1C7JcR+JalVOKwYw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ppdJxcL5vkFbiI/Rck6EfRARX3Fz3fvsF4v/OSoAzCVi3bPBGSNWICAD/O4Lo65mGOeJvtMnmSxm+rmzKf3bch2np1Sn9vymhLwL7GTi/QJEe4PQ/eQs8FCCXhpTZ44PBUPDLgjU85/oLZn40QPCjMa3Q9o8Eq1J5mMKfigbVgpaq/AKCUO+itgU1158ds2EW3e94kFAYBb/E4RPFFxQzfFeqHIxKENlWmxuNGju3GoomTcSM0VEY3B1qXAdONEOCWWJ4G1lrLDLTRv1ZpN/PKifJLG79Q/vCFZyS4dDTF+aEXsVtDQD96ig4hTJYBkO0u7ytG0AlGSJy9jOl8eXMLg/DZIglhkWV2rLC0pdpFvH3IMj7bm0q9PUPVdeq0GGrieh92twGPvBK2EmVRq1pclXsUm2jmSg3eP6tHdV+mQVckjrCk2TDVifmn6kbFcSaH1Y5fYprh61hNyWyV+PMMvWEkhc6cdtCgswz1bB9KRc+lI8wS1gqio8o21qq80RvizQtNqXSrRre80LCV/lXtkPaWWfJEmBb0FGSAZfyqb2Ktdq2T9QFSvOMf2C59UpyUp8Voau9P0xDoUAoI5C3UCSHF3w2sMKafA9F7pdzoclCvpSBjAma+i3CHdsGUcyq681DPpHsO9qTiQg0TR5poNNo+B63jZtH78yCQ9bIDty6+xvnY7I1L7Ca/zjB5EmgBFL/COak3a5h1Vxjxr+GQ2RH6+nnl0SeQiEJ5mWY/8b5ITufbeERtwV5si2oGjTjo1Sgdo4woc9QMz62GlvYtpV0vClbAA7+okCP9ZGJwUHFomFYELeoUgHc67fejtdpuvFiWAirYynxKeK1v0cu+mQ+rykS1/blL3F/a0myZlITGilcrB9UNK/Dwllnv1FLkaIym8K2S6zUod2O12LgBHLdouElXWu6MYUGKtvtBO4WT4V94MJLbnhDeWcmmhjwtfWtxf+s5OTDSHSGGOhPXy4S3wycE9xJ4870DF18GMZ3gGL3TczFuB2l+uRa64PDSNSTeBdTChICl+Gca87PKA5R7F76d1GSQ0Ig8Q3YJKHoX+GBbuJU4KqLnYixvQT/ywczFxzlM66mNIxWtvLhSsj6NUvpiwIVwERLG5QKU3uPIL/XIfeAsizRw/uggGJ83XlPSDjDnOPLrURbRzUOumYbpeBHQY668lgTLL/nhe+oVLIv2lDCRBPrYpaVS6P/rKKSSyKc1vDMErzEq9D7E5Cb7hmVP8etuXb1/b18qLMe1T9L+5jhv1/y8yIJB9jom3w8Y0nRDDfw1LjHCAZSGP8v0aoz3JSzPOjy+x6aPU5AMmJbEOv7y0iaMMHS639Mw60YjUS+pbH8w09WBFyrl/HsjWQLj1+HFLPVK+9kVhIf0gNf9H0LrpVd71cXeqLKt4U8kFAdtogYCNXiBKM8ICf5E1+1OoPT9wIrL8OCmvAVQpvMJU/yNIpv3IvvZvsnTj/cOguencVkmgPsv4/eM5XeqfOzkLnhTStLXwLFFF5FU1TQAHryFSBhNxsbgC2kviuVZ+NW2LyC9tszsafaeW6jnDW+nlOaVlMO62v8LDpT8QI2cGURcBopARF75/o7F5KMdaUxkmI0Ed6Tx8I5V/PH7ic2fizLDEFPeGM3udRodb/OnB+DZKP69sWc4tpLLOvpFDhClfFqhePAnxUzg== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2a28beb-9053-41a4-265f-08d9c58320f4 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:03.6238 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Gt2/p2AeNhgc6Mq3LDJa455M17/puitfWIFJ6FpCLDOapS2lkmSz4U25RctAYjlVRrIoepXm6R99jRwHJN8zidtvIEMi4qJf091gYdzkRME= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: 9dDhu5rEBAXcRNRVn2ad53Iw1coxbpfU X-Proofpoint-GUID: 9dDhu5rEBAXcRNRVn2ad53Iw1coxbpfU 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Export msix_is_pending, msix_init_vector_notifiers, and pci_update_mappings for use by cpr. No functional change. Signed-off-by: Steve Sistare --- hw/pci/msix.c | 20 ++++++++++++++------ hw/pci/pci.c | 3 +-- include/hw/pci/msix.h | 5 +++++ include/hw/pci/pci.h | 1 + 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/hw/pci/msix.c b/hw/pci/msix.c index ae9331c..73f4259 100644 --- a/hw/pci/msix.c +++ b/hw/pci/msix.c @@ -64,7 +64,7 @@ static uint8_t *msix_pending_byte(PCIDevice *dev, int vector) return dev->msix_pba + vector / 8; } -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); } @@ -579,6 +579,17 @@ static void msix_unset_notifier_for_vector(PCIDevice *dev, unsigned int vector) dev->msix_vector_release_notifier(dev, vector); } +void msix_init_vector_notifiers(PCIDevice *dev, + MSIVectorUseNotifier use_notifier, + MSIVectorReleaseNotifier release_notifier, + MSIVectorPollNotifier poll_notifier) +{ + assert(use_notifier && release_notifier); + dev->msix_vector_use_notifier = use_notifier; + dev->msix_vector_release_notifier = release_notifier; + dev->msix_vector_poll_notifier = poll_notifier; +} + int msix_set_vector_notifiers(PCIDevice *dev, MSIVectorUseNotifier use_notifier, MSIVectorReleaseNotifier release_notifier, @@ -586,11 +597,8 @@ int msix_set_vector_notifiers(PCIDevice *dev, { int vector, ret; - assert(use_notifier && release_notifier); - - dev->msix_vector_use_notifier = use_notifier; - dev->msix_vector_release_notifier = release_notifier; - dev->msix_vector_poll_notifier = poll_notifier; + msix_init_vector_notifiers(dev, use_notifier, release_notifier, + poll_notifier); if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { diff --git a/hw/pci/pci.c b/hw/pci/pci.c index e5993c1..0fd21e1 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -225,7 +225,6 @@ static const TypeInfo pcie_bus_info = { }; static PCIBus *pci_find_bus_nr(PCIBus *bus, int bus_num); -static void pci_update_mappings(PCIDevice *d); static void pci_irq_handler(void *opaque, int irq_num, int level); static void pci_add_option_rom(PCIDevice *pdev, bool is_default_rom, Error **); static void pci_del_option_rom(PCIDevice *pdev); @@ -1366,7 +1365,7 @@ static pcibus_t pci_bar_address(PCIDevice *d, return new_addr; } -static void pci_update_mappings(PCIDevice *d) +void pci_update_mappings(PCIDevice *d) { PCIIORegion *r; int i; diff --git a/include/hw/pci/msix.h b/include/hw/pci/msix.h index 4c4a60c..46606cf 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); int msix_vector_use(PCIDevice *dev, unsigned vector); void msix_vector_unuse(PCIDevice *dev, unsigned vector); @@ -41,6 +42,10 @@ void msix_notify(PCIDevice *dev, unsigned vector); void msix_reset(PCIDevice *dev); +void msix_init_vector_notifiers(PCIDevice *dev, + MSIVectorUseNotifier use_notifier, + MSIVectorReleaseNotifier release_notifier, + MSIVectorPollNotifier poll_notifier); int msix_set_vector_notifiers(PCIDevice *dev, MSIVectorUseNotifier use_notifier, MSIVectorReleaseNotifier release_notifier, diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index e7cdf2d..cc63dd4 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -910,5 +910,6 @@ extern const VMStateDescription vmstate_pci_device; MSIMessage pci_get_msi_message(PCIDevice *dev, int vector); void pci_set_power(PCIDevice *pci_dev, bool state); +void pci_update_mappings(PCIDevice *d); #endif From patchwork Wed Dec 22 19:05:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572338 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=cGA5m3Uk; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=YN0jKLLa; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK4B914h0z9s0r for ; Thu, 23 Dec 2021 07:07:45 +1100 (AEDT) Received: from localhost ([::1]:56004 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07tn-0002Lm-0N for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:07:43 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55750) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VK-0004z7-RU for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:27 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:20640) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VI-0008MC-KN for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:26 -0500 Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXvQk014457; Wed, 22 Dec 2021 19:42:09 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=hiTscTV84I6M8kwaZEI7jKel8Itt0I5D8mZZf39GigY=; b=cGA5m3UkJqtmKGbInrTCjfn+/bSYLD/C4KsiNLNC6yutYb837wqDgM767QhgRPHLi62l QrJnjDJ1IUapL2lYYdOGAL/5nOqSnx646lq3K3ypBvv/WdaQFU5TP0N0El836GWZFauh B/bfRd2tdzPsft7ELW1YPzon4Hngtudywhw5FBycYL1FdBmVjd9TIlAuvCzw7pU9w8cy /hfBr3D2FjQfYc0pkhq/DhS7iwP7rJSg4o9d5GjXyB9L/4DgHMvXRAdNSvVEnhuxAj3f 4szWIX7IvHF+vlf8oyXgs/PY5M9esRPSbXuQKoIFgO5VMkZUljEIZtL7XZSdbxa1uLn7 uA== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46qn0t26-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:08 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqI030437; Wed, 22 Dec 2021 19:42:07 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ECo7PuAs/s/1T53D1MT9OiLjWa6GunMg3i9/fSlIsdthz8fTEIC+trhdLvJZlQko8Vw76oQXByUHSpS6bZUxZnYshOkNJ0Sesj6PeQ+izVcUx6XyGvwV6qPbWmR7PTAe4TMItNUuNyY0Wc4MyPIZ2EBu1eTgTdtwFDwh6Zg2vqYiCtMp1aI6WnIePQOXRm/aMJRdm9WDkhXoLIM3LF0D5xkD5odbuPpIilYMgKTyQ1QF7KV69KclV7UTBTvi8IlrzFRMou5u+K89ct0moDgxiGzZZvWn0/6s6VJfISibBnZdqVzY+mZmhpld3RM3usX673qikO0/6uI1ATtHesFGmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hiTscTV84I6M8kwaZEI7jKel8Itt0I5D8mZZf39GigY=; b=iLzmSl25ZDz8tEi6xG8VPVNz9N9sjiqfKIG52x0mMk41owSc/gaba2venQeIaTpge/CgkWKkriasq46figL8Dduk3AnPYSz/aNHrzu0zZlP1qlVNii2vQHK+27UbrMbofbStlldz/KyJZVhs3toE//WkcVz3WILy2hl4v4DxiMk7Z5pb3wd6uy5FeI+jd1z/wRSKZb03Pg/aw42JTOOxsHpqgYZl90mUV4f3k4l/TMNucKon4uHYxXxHEKF3qb/SeXGgcTk0YJS47XvanfVJ88DofKdMEoopvY8Rt0ink6OmCtvJk3SnbwWi1XKaFnmHZPi7DJe9w2uA7HgPVRf7cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hiTscTV84I6M8kwaZEI7jKel8Itt0I5D8mZZf39GigY=; b=YN0jKLLaRPAQZuXaQuXL0G74TWOtJHr2AbZE0c7YgLnBfTMdW3uBcurltLC/z8spt97eH2Hdqma9V8hFLEiyTlsRV7tRIdpLQrqo7AOkru8sZCbGkPU4szULlOQHa+97GNkxbNA2NaUk4j37OjwBhp8e/Atibq5dmn4hTKj32q4= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:04 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:04 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 18/29] vfio-pci: refactor for cpr Date: Wed, 22 Dec 2021 11:05:23 -0800 Message-Id: <1640199934-455149-19-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14e9140d-e69d-4353-7058-08d9c5832140 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:224; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XUDkUC9Vr+e9a52AYKcGAgzq8QXtgOV5CMAHdV1kRVnhtprab9FPadq+1rx2OcZvqp34Z5304Bm1i2SThai14SW8Od2UTV7/V+lRsoNGFeLJpPj5kkmokuR+dgRciVDyaEO0z79VI39dzCFpZsBH8Jqba5bwzN87XfQlCDNqJ/3lpolZIOM0K7xaXiVlnV60qtPWnJuxyLt27wqV0RRSJ1XwJbCMvdQ3i8ClcNGasOhwl9YPfp7rc5Pd2mmPWifsUC+psyjvisEOoLi5KTB4DzyOCkInGz0c3Org9jghtWOXy9NzMvpgeppBjEt5bny7NdUfBi9GuDMXM+ot6qeLmlKkFIuwcqt1kD6CuZKN3KuvnpUj+V2eO5quRLy20zSoaGmFSoqmXdjNwClI2+C0oYOQWLBX5csXAZYUu4PHYQ+XsR3OK0RYsUCeL/u2/QFi/sy8K7qCFLOmJC3epZQ/D+Gv2yxKnhKvxMedtcIbctMaVFqojU+rIHLXakCFaLFQ2bcvACHk3OpqojfgjthBex9qytqIUnx/XVG9HK219O3n2gTf/i4b18JdJ+UhEqtk2JpKbYnjoHOvmwXJ5tNyVQTdnvnAH2daoVSVp6pLXxyiG0N4pXWbU4o4BTImiLc6TfhlSaCer0Ii7pFR4/Yw8HbVCgxt1cQGrRjc0GzhjRCZc7jo++2E7PqnzlZYKNaW3q1V/FS4PtJvgNPhLuno2g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(30864003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d7xfdv8uiKM1UIM8ma4k4jp4KUxjJ0gUmqxahztnt7fsy1C4apPciAWFOzgk22W+PbGN2sdWNKtWJgNZ2uOlHEI6gVcGtyTXPlZ3syDPoyjdy0Jnj9EDwhdzwQoUcXvtKtKib4Jp7GTRDjWGUZ+flwz/o1dVDWishBmzEwsfam2ut/2SsT9FO2m5Qg8eU3BF0i3poqqDp7XLBFXLdgwXIhQ4rfdlJJORLXJrUkGT4Co5KNKNi9RRKggw811bopzqILYwJAtaHL2q+flFSxdhZfj7UmashIF4PFsVQzvl+ezHPnb4ypC7rqVhSj3E0LvukF65kMpC48cpOgBuYIqL+xSB/FESnaxWXNkvcBW/xrMBN0O/f59St6q/R5UzeTY7VVPzvHvym8a3a6Cs/Gt/wyRDQ74W4lQ3PcacATaM27Ls4WQ+YhsYpj5VqEFjW34NOiRQMBfW784iFT3AK75x9W/F5LfpXJxJ2LoZTQmOHZ9Pj2Nu77FXOfMZ054xRWEbUwcbtCOYzaE5ft3h1ugvOkv38hJqwRsi1bxVKt/k03qP3ilqN3N5ZGA0XGycskoPpa8U51bSKAuhcw6XRaXa8vnBwkRPX7kf9KyYzRLAEFILgOqVOX89qSLhopPeLK+TtbqOUZKDrtP2scZ1RxpfMHtwH87HnW5ANZ31v8rLayoyjErCeFoiiHjEPMl9Ig4HptR7V7syTnyBp6S0kJsFK8xTJp61chiYP7+8ioWsOQpH5hSwZLSv7o+GUif+Up3UyORNynvrZQRUFZLQ1bg4hc/K7kgV3BIvztO+DUYWc8lzWjzF+l5as2ZwuBUDB2GOLPJBWJkEdMjOPjuIe4mgtwX6vxOfT8ESBd5TW297OD2TcM9bnkeE3itXIjYOfLVm4nehmsdzBlffEhg5XdLrNzXUnc9vIz40O/f+nAqb457Hf9Mw8lqM/mvV8VR279EdkMKV2DhAE7hijPttjOBswLwN4J14fBbDdlBq1Yv+otY9C5pR/+NvE0gYMsW0ELVvhbWhDfM2EW29dC89s/R94T+RdS/9Q3qC9EncpvHcpdxw7DxjnKzKeYaHRzB26JyDpthMTN+0ufLivl4gbVP71VZJimV2gmMOpJSXjz2Vp7Ygg1za1IrovvB4kNMiVbEO4vAFfoNdY5GavycltyNrWhgMU1Se3M0AWpAhai6qnHtcoid5nUrt1dTSk+h/UUchRhSbXjFxDa95vJkzp59JaJJq7Mvj8V8pC5fawaW3JpnPpUK3+rvA9aZ/QdushUTkNpaL4RhLFakn2UNGhzZK/Okn2TN9ZkYHsnksG9VvJcAOyuIxoU8H3mF0WlWI8XW9MlsoDgV02binj223RaTLF47MeBRauMcPnzicdZChTdjTZaLXcQuagd5a66VJJ1VZKdeJBJI8+Y0Ec+NyCNb8C7YD/p5fdSHfP1cC74uf+GYskSUKjzQPTdH6MgHKCZmsct2vNOezlsWYytTS2orS5+aoZdlI+dRtLxjSiylYO3nO9dtQaaMr4ZCfK6kQNnazqhjRe3NlNAMKx9SUZL1KjCLmP1OaiaP/bNTV8iBH9cLCR4U5PBNSOkSaK6dzJnzt0G7m2MWBW8+GeI/XPDlCEh2M+kuekqkftnkDBWy6OU4m4bXmCzoFUNLkOHRrtzZyuBFyP/A11OJi7mMO132X9A== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14e9140d-e69d-4353-7058-08d9c5832140 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:04.0613 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RJhaFasTi7J4xoEtf1hQc0b9vW7XwIbCO8KjtiejyOvVCMV7bQC+ARuaymgRbOmrrGVBPRKOpGE/RbQhnKIOyk9WpFcE4Rhdukv/Yy4j+YY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: vVaJZZFOHyG27knCePi9leihgpesuoKR X-Proofpoint-GUID: vVaJZZFOHyG27knCePi9leihgpesuoKR 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Export vfio_address_spaces. 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 --- hw/vfio/common.c | 2 +- hw/vfio/pci.c | 102 +++++++++++++++++++++++++++--------------- include/hw/vfio/vfio-common.h | 2 + 3 files changed, 70 insertions(+), 36 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 080046e..5b87f95 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -43,7 +43,7 @@ VFIOGroupList vfio_group_list = QLIST_HEAD_INITIALIZER(vfio_group_list); -static QLIST_HEAD(, VFIOAddressSpace) vfio_address_spaces = +VFIOAddressSpaceList vfio_address_spaces = QLIST_HEAD_INITIALIZER(vfio_address_spaces); #ifdef CONFIG_KVM diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 7b45353..a90cce2 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -48,6 +48,27 @@ static void vfio_disable_interrupts(VFIOPCIDevice *vdev); static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); +/* Create new or reuse existing eventfd */ +static int vfio_notifier_init(VFIOPCIDevice *vdev, EventNotifier *e, + const char *name, int nr) +{ + int fd = -1; /* placeholder until a subsequent patch */ + int ret = 0; + + if (fd >= 0) { + event_notifier_init_fd(e, fd); + } else { + ret = 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 @@ -128,8 +149,8 @@ static void vfio_intx_enable_kvm(VFIOPCIDevice *vdev, Error **errp) pci_irq_deassert(&vdev->pdev); /* 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; } @@ -161,7 +182,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); @@ -190,7 +211,7 @@ static void vfio_intx_disable_kvm(VFIOPCIDevice *vdev) } /* We only need to close the eventfd for VFIO to cleanup the kernel side */ - event_notifier_cleanup(&vdev->intx.unmask); + vfio_notifier_cleanup(vdev, &vdev->intx.unmask, "intx-unmask", 0); /* QEMU starts listening for interrupt events. */ qemu_set_fd_handler(event_notifier_get_fd(&vdev->intx.interrupt), @@ -281,9 +302,10 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp) } #endif - ret = event_notifier_init(&vdev->intx.interrupt, 0); + ret = vfio_notifier_init(vdev, &vdev->intx.interrupt, "intx-interrupt", 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 = event_notifier_get_fd(&vdev->intx.interrupt); @@ -292,7 +314,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; } @@ -320,7 +342,7 @@ static void vfio_intx_disable(VFIOPCIDevice *vdev) fd = 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); vdev->interrupt = VFIO_INT_NONE; @@ -410,41 +432,43 @@ static int vfio_enable_vectors(VFIOPCIDevice *vdev, bool msix) } static void vfio_add_kvm_msi_virq(VFIOPCIDevice *vdev, VFIOMSIVector *vector, - int vector_n, bool msix) + int nr, bool msix) { int virq; + const char *name = "kvm_interrupt"; if ((msix && vdev->no_kvm_msix) || (!msix && vdev->no_kvm_msi)) { return; } - if (event_notifier_init(&vector->kvm_interrupt, 0)) { + if (vfio_notifier_init(vdev, &vector->kvm_interrupt, name, nr)) { return; } - virq = kvm_irqchip_add_msi_route(kvm_state, vector_n, &vdev->pdev); + virq = kvm_irqchip_add_msi_route(kvm_state, nr, &vdev->pdev); if (virq < 0) { - event_notifier_cleanup(&vector->kvm_interrupt); + vfio_notifier_cleanup(vdev, &vector->kvm_interrupt, name, nr); return; } if (kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, &vector->kvm_interrupt, NULL, virq) < 0) { kvm_irqchip_release_virq(kvm_state, virq); - event_notifier_cleanup(&vector->kvm_interrupt); + vfio_notifier_cleanup(vdev, &vector->kvm_interrupt, name, nr); return; } vector->virq = virq; } -static void vfio_remove_kvm_msi_virq(VFIOMSIVector *vector) +static void vfio_remove_kvm_msi_virq(VFIOPCIDevice *vdev, VFIOMSIVector *vector, + int nr) { kvm_irqchip_remove_irqfd_notifier_gsi(kvm_state, &vector->kvm_interrupt, vector->virq); kvm_irqchip_release_virq(kvm_state, vector->virq); vector->virq = -1; - event_notifier_cleanup(&vector->kvm_interrupt); + vfio_notifier_cleanup(vdev, &vector->kvm_interrupt, "kvm_interrupt", nr); } static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg, @@ -454,6 +478,20 @@ static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg, kvm_irqchip_commit_routes(kvm_state); } +static void vfio_vector_init(VFIOPCIDevice *vdev, int nr) +{ + VFIOMSIVector *vector = &vdev->msi_vectors[nr]; + PCIDevice *pdev = &vdev->pdev; + + vector->vdev = vdev; + vector->virq = -1; + if (vfio_notifier_init(vdev, &vector->interrupt, "interrupt", nr)) { + error_report("vfio: vfio_notifier_init interrupt failed"); + } + vector->use = true; + msix_vector_use(pdev, nr); +} + static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, MSIMessage *msg, IOHandler *handler) { @@ -466,13 +504,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, vector = &vdev->msi_vectors[nr]; if (!vector->use) { - vector->vdev = vdev; - vector->virq = -1; - if (event_notifier_init(&vector->interrupt, 0)) { - error_report("vfio: Error: event_notifier_init failed"); - } - vector->use = true; - msix_vector_use(pdev, nr); + vfio_vector_init(vdev, nr); } qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), @@ -484,7 +516,7 @@ static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, */ if (vector->virq >= 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); } @@ -629,8 +661,8 @@ retry: vector->virq = -1; vector->use = true; - 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"); } qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), @@ -658,11 +690,11 @@ retry: for (i = 0; i < vdev->nr_vectors; i++) { VFIOMSIVector *vector = &vdev->msi_vectors[i]; if (vector->virq >= 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); } g_free(vdev->msi_vectors); @@ -697,11 +729,11 @@ static void vfio_msi_disable_common(VFIOPCIDevice *vdev) VFIOMSIVector *vector = &vdev->msi_vectors[i]; if (vdev->msi_vectors[i].use) { if (vector->virq >= 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); } } @@ -2694,7 +2726,7 @@ static void vfio_register_err_notifier(VFIOPCIDevice *vdev) return; } - if (event_notifier_init(&vdev->err_notifier, 0)) { + if (vfio_notifier_init(vdev, &vdev->err_notifier, "err", 0)) { error_report("vfio: Unable to init event notifier for error detection"); vdev->pci_aer = false; return; @@ -2707,7 +2739,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 = false; } } @@ -2726,7 +2758,7 @@ static void vfio_unregister_err_notifier(VFIOPCIDevice *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); } static void vfio_req_notifier_handler(void *opaque) @@ -2760,7 +2792,7 @@ static void vfio_register_req_notifier(VFIOPCIDevice *vdev) return; } - if (event_notifier_init(&vdev->req_notifier, 0)) { + if (vfio_notifier_init(vdev, &vdev->req_notifier, "req", 0)) { error_report("vfio: Unable to init event notifier for device request"); return; } @@ -2772,7 +2804,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 = true; } @@ -2792,7 +2824,7 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *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); vdev->req_enabled = false; } diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index 8af11b0..1641753 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -216,6 +216,8 @@ int vfio_get_device(VFIOGroup *group, const char *name, extern const MemoryRegionOps vfio_region_ops; typedef QLIST_HEAD(VFIOGroupList, VFIOGroup) VFIOGroupList; extern VFIOGroupList vfio_group_list; +typedef QLIST_HEAD(, VFIOAddressSpace) VFIOAddressSpaceList; +extern VFIOAddressSpaceList vfio_address_spaces; bool vfio_mig_active(void); int64_t vfio_mig_bytes_transferred(void); From patchwork Wed Dec 22 19:05:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572328 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=dEAZp+YG; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=X3ilFBXQ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3x92Qn2z9s3q for ; Thu, 23 Dec 2021 06:56:27 +1100 (AEDT) Received: from localhost ([::1]:60072 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07iq-0002cM-Av for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:56:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55816) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VM-0004zl-PQ for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:29 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:23342) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VJ-0008Ms-HG for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:28 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXslf013624; Wed, 22 Dec 2021 19:42:10 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=loeECW+VXydkvpTzlSjB+tuMXZCkhSOaxrkDW8dE3mk=; b=dEAZp+YG08pg/8k6AQdyV5iv4e+EpPDl1kRBj9IjDOf5t/H388fiim6WZe6niIvYEYp+ eIvQJmqSDnrGTRaCrS5H+Wpn+4102yoXVmJddAGsfi0ZLy4s/xQjhpYU7Q9ZdIeOc0Dc q/okalEX5b8Sz261cT7qcdWnhm5PY42uPDku2E2t66Y/UjrsK1Gf4R1P/V+WxF25RKCG +T8JQ0nrFh+WRh1z2pCv99wBdJsDxmq10UxXhQqE0a1NOjlgzp/ZNcI3DaeX6bgwrDz4 /y97uTkqPQokzqFRkcwlcTTeTkpoj/vS/+kUDUMpR8F/PZSWMKaa3n5Z4ESHx9BdIrpd wQ== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tkw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:09 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqK030437; Wed, 22 Dec 2021 19:42:08 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ew22hjOdSCG+A33bFPhW5h3ivMOtKN2pzfOSI/kgAAAlwhzW3NwLsuP+pI1up2PMt98DtwvPmsFQZjXzke1FbzHrvdug2nGkMZ6ANkvnJKKijoycOzouJ+eRcl4sSq6eK0AMNRChr9FNCVttSbf+e1i2JO+xd6YEX6fZVkpJFHPiBLsJxk3iiulJXDq2IPP5WBGqMYR/hrnj7ugOGIhmpOE8Tq8FDr/6ZvvnSji+EP0gacuW6hIoccpd9VT8IqmWqZ+Y6dIauN3rdzIlNSL6389Q5dobu9ELgnZwsYJ/0Ta1ps3Nuqi60KNClROM8F7VypPvf3SeVKcfAaRxeQlVOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=loeECW+VXydkvpTzlSjB+tuMXZCkhSOaxrkDW8dE3mk=; b=MIoJDf5mZOCPDOZXTwxxihXYT7Mnl/m3T60G+/29DYH42TLhYLkxHq5KfA3ILPC4dzRnJqzIwcUfFBfvspvXYklek18GSNBhNgJZz2rzetXemzck3xS4w5kjO0mbRqePrbvcaXpn3WjL+3xkAAxWSNnTJtADTE13v36fwfNulNuR0eFX1h+QEN3XUg/MLrs5bwhqA90uSOvT/pwULw2GvaisflDysLKmf+JrT42CjPB0oo6+jS38WCxLLbYYg8pn4y7LDdkGYJ+VcL0txCjTvP6NGwzKJU0xHt7yWkuEh7INCXRo7RHdT/L8jXuKQbHuWlPaYacDou70+OdiabFhOw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=loeECW+VXydkvpTzlSjB+tuMXZCkhSOaxrkDW8dE3mk=; b=X3ilFBXQ7jLvhQOtf+DD04JpaxEuyZxtikweH6HELSFYKvJ94EENKp9zcGGGsabSA0SUHlPrfmQH/C8frH3UY9Y8ePC5fiapk71PXcI/0FGvwQXFvkfHhBK5R3zDAsAl/C6zqAEGva42IRE8ve/uxFltweha+eseQi8wvWzGXOE= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:04 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:04 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 19/29] vfio-pci: cpr part 1 (fd and dma) Date: Wed, 22 Dec 2021 11:05:24 -0800 Message-Id: <1640199934-455149-20-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1d85f770-ea4d-4af4-580f-08d9c583218a X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:576; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8oLxAcP6IrSmvY7YA8ZEhOh5zgHrfdmx302oMY8rdLjItT3dDO55jSt2n7/XNYvYpSx37ppdmlaoiU66GYm5f7NSAQqplY7auj1u+vfFqsygw0iEs+xPwVGSw0U3pDYAOdIiZ5RjyvK9UT0wd/YNaMh79SY8+RS2dBmAhffjKUE6ie/0aHtIE7bHTQNMCljUKJym8APMPkmcjjjWHQsryZy99X5qG1A2l+gFjsRBiGKoc+9V4C0tnNkvGPKDANBkuigwSp9AMvCR9vu1wY42hvqNTksifS8JcNwlz1LvG29qB8jdVXTbjfBP5ywxr6Lf+ZHNznsWeQqBt9oB/+HPPUJOtA1JzlP8/o5ftV2SWkJ94+aAomsFXgv/dcHHDQk9lqelo2jpn1YKQnam5UamyLSgHsraQ6GdBBOs1dh08BbJz+ZEZBY7iI2ZEnjdq2v5Q38+pWk2EVe79KGSLn7vKjogpSxsP0wKKaT9Dz9SN6Ml1S9lVxR3ffYtiW9xVickfNbSbTIOl0IkHJPln74A2UGbHAvVXhHjt8lL+3Ii2v2fkWyR3qg1/jX1HuQTrpAGEtSEGNSSl0ZDZcLfbnmVUU831oNmC1xCt3EasYX9xyqR4suDupUsltlWdWNHGb6SlZqloqKFttAAVhNlU3vwSe1JpZogU4ULG2J6kb8iRVvbJvUhKAV/DyzZJy4JGUTwvYKBIpLXBOGUj9a/z++46ceYxKyJfwR+qPweNUywK48= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(30864003)(66946007)(2906002)(26005)(86362001)(6506007)(334744004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tidHda1oKySdzAgWpsW9jbHuj6L6I1Th1OZTiRLkHmJlsJGoHZaMo9xjqDPHwRUh/0/u07SXuFK41Vx+mMfilskbQYGQWNfrizgkspz1/sHPSeGOPtPMXXwnu6/ArgkXU/6GpWaIAiTT/f4xYxXUUhBUDrE0kMYCaZsih53pJLkLN/ttimXdNE+5IngfEP4zcIkWzP8V4kImUIibpTOwaM28tEaPoxSK4BZLVKHl3kzhDtXV9cJYCt2yX45xqbGoyY6qvfcqamn2fyLtMozEaw3O2LWh4iZTug3eQGs2d+JMzGnFOqyd3a6HHRnk66DlSO2xHXitnitNfKdjZlFQSJdkHA4UxcLShQHurXqfsfLhyqH2pB+/Db4PSMpgRew4rFL9/3Qyc7SqQV1BFfmKpjakg8HhSsX6xFw6V99wBPCSlZysl3DfftDG1h41QFvP5vr+w7/RqyWMJf4SXcmJlB8WgZ3YfFG1ojMgtfEFIKdgdalqTXHZRGpXvKIxMjfFXyJyzgHbdVuk96/5zg8sEvFVSZGOmp2u+PGUHp69inPQ+ZabeaYnpIygSGKjGy45AIm+2RYX75Y/ZBP51iOhAOdXPsujX//kQC0MpidrjFlmlG3OQVa3dGFFDtKqvJyS4Rq4McvwQztY9rkfdb4luiGIAK9NI60qtiMRNzJNsLsam9cUki/BG+zFyuniNT1t82pxbcFMqU72d/FX62TkUtvuFNHTV+30TO/6tsTUcFSmmfKFTiy6eygHV9q+pY6UwFAAveYkVuuuzN1A9NlVYTC7YxyMSuHdkDib8te9WqVB8wqHlX6ElE9gVeGgaed690OD9hE4fIgs7IC4/b2CSuTHSSMy4w8N0JI4Y8k2njFDidV9uM8SYnW4kRE/q2QPeBXmVjYU+//9ECtDeMIa6ol+ogAg/wryPzBht7N1gUNRU5VWlBRNifM2neH0Vv8F1nVMplHu471Nxn79khbUOaRoP9GLOjRCXPO2WfUjaYw0ickMuLaIT9yL/kLA8mwu5QNSkVIZPVckP1+OMpsKyM/6ccw8QkK3CTDWO3fsXbsvMrsqDOiTraosw1HymUZgqirJzGPldrVC9UJRQEwfk0a+YwtU+2W4m9OkyWrMZyQX9Dkmp6wbf1iDOq04t7f9j3QcyK0oJbppal5yAodPWLKtdRb0L0xa/tWA2ayI/+yOcenq2z009BOhdG98mqFLJ3wMlXaLgkdA8TYwT7rhP9UnJVT1yrhS+nPZR+JPlHdfLQJAkb3dxlFufSvXDvVLBmQw6b8diTjrHtYrAPfZJ3wXunhc1U0j8MaUwtCrrvo7qD4TKH3rMz9imrE1G06cFLIM/9HeY7ZFQ0UzHxS0nmVBF1MLOaNkmuFjCr1u4KXntwYKy4j0iSvuBmXrMtittx0DsF8U3mTGK074OAjsehPCmkCRZmfpsBCHx5AhoeYvvx/Faj3a4Li5ILus84n2cpQ/5+AZ5/V7ySjBz9Ww+cz0JS1atGafumvsPsiMqh0Vn7cK2vDIA2+GUTzN0qDVoBardBhAPcnoayy2j6oyHExG+zZq6iJP93ZIoXDFAdXc7vGIlh86T71DwxqE1KyNV/mgqEXMYjyWCK+UXoadjnnNp+oPWufLRx4NiQZVNblb6dPbIUMBvpwx2nq3PPYLrNWHRnJsZYXW76jlhH0G6g== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d85f770-ea4d-4af4-580f-08d9c583218a X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:04.5613 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vFYvgolvb0L87GboEomjCICq0v7HivadWjjc/QSX2TZy/sMhv5evDGucw39oQKxI+qtq31LZWXOKeF31TrkdIUbhwErRlweSCgfWQ9pw1bg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: lE13N6JOz2dVxVgVa55jkm8nmVr-sLvv X-Proofpoint-ORIG-GUID: lE13N6JOz2dVxVgVa55jkm8nmVr-sLvv 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Enable vfio-pci devices to be saved and restored across an exec restart of qemu. At vfio creation time, save the value of vfio container, group, and device descriptors in cpr state. In cpr-save and cpr-exec, 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. 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 cpr-load is called. cpr-load loads the msi data and finds eventfds in cpr state. It rebuilds vector data structures and attaches the interrupts to the new KVM instance. cpr-load then invokes the main vfio listener callback, which walks the flattened ranges of the vfio_address_spaces and calls VFIO_DMA_MAP_FLAG_VADDR to inform the kernel of the new VA's. Lastly, it starts the VM and suppresses vfio pci device reset. 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 --- MAINTAINERS | 1 + hw/pci/pci.c | 10 ++++ hw/vfio/common.c | 115 ++++++++++++++++++++++++++++++++++++++---- hw/vfio/cpr.c | 94 ++++++++++++++++++++++++++++++++++ hw/vfio/meson.build | 1 + hw/vfio/pci.c | 77 ++++++++++++++++++++++++++++ hw/vfio/trace-events | 1 + include/hw/pci/pci.h | 1 + include/hw/vfio/vfio-common.h | 8 +++ include/migration/cpr.h | 3 ++ migration/cpr.c | 10 +++- migration/target.c | 14 +++++ 12 files changed, 324 insertions(+), 11 deletions(-) create mode 100644 hw/vfio/cpr.c diff --git a/MAINTAINERS b/MAINTAINERS index cfe7480..feed239 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2992,6 +2992,7 @@ CPR M: Steve Sistare M: Mark Kanda S: Maintained +F: hw/vfio/cpr.c F: include/migration/cpr.h F: migration/cpr.c F: qapi/cpr.json diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 0fd21e1..e35df4f 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -307,6 +307,16 @@ static void pci_do_device_reset(PCIDevice *dev) { int r; + /* + * A reused vfio-pci device is already configured, so do not reset it + * during qemu_system_reset prior to cpr-load, else interrupts may be + * lost. By contrast, pure-virtual pci devices may be reset here and + * updated with new state in cpr-load with no ill effects. + */ + if (dev->reused) { + return; + } + pci_device_deassert_intx(dev); assert(dev->irq_state == 0); diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 5b87f95..90f66ad 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.h" #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/range.h" @@ -459,6 +460,8 @@ static int vfio_dma_unmap(VFIOContainer *container, .size = size, }; + 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); @@ -495,12 +498,24 @@ static int vfio_dma_map(VFIOContainer *container, hwaddr iova, { struct vfio_iommu_type1_dma_map map = { .argsz = sizeof(map), - .flags = VFIO_DMA_MAP_FLAG_READ, .vaddr = (__u64)(uintptr_t)vaddr, .iova = iova, .size = size, }; + /* + * Set the new vaddr for any mappings registered during cpr-load. + * Reused is cleared thereafter. + */ + if (container->reused) { + map.flags = VFIO_DMA_MAP_FLAG_VADDR; + if (ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map)) { + goto fail; + } + return 0; + } + + map.flags = VFIO_DMA_MAP_FLAG_READ; if (!readonly) { map.flags |= VFIO_DMA_MAP_FLAG_WRITE; } @@ -516,7 +531,9 @@ static int vfio_dma_map(VFIOContainer *container, hwaddr iova, return 0; } - 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(errno)); return -errno; } @@ -865,6 +882,12 @@ static void vfio_listener_region_add(MemoryListener *listener, MemoryRegionSection *section) { VFIOContainer *container = container_of(listener, VFIOContainer, listener); + vfio_container_region_add(container, section); +} + +void vfio_container_region_add(VFIOContainer *container, + MemoryRegionSection *section) +{ hwaddr iova, end; Int128 llend, llsize; void *vaddr; @@ -985,6 +1008,7 @@ static void vfio_listener_region_add(MemoryListener *listener, int iommu_idx; trace_vfio_listener_region_add_iommu(iova, end); + /* * FIXME: For VFIO iommu types which have KVM acceleration to * avoid bouncing all map/unmaps through qemu this way, this @@ -1459,6 +1483,12 @@ static void vfio_listener_release(VFIOContainer *container) } } +void vfio_listener_register(VFIOContainer *container) +{ + container->listener = 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) { @@ -1878,6 +1908,18 @@ static int vfio_init_container(VFIOContainer *container, int group_fd, { int iommu_type, ret; + /* + * If container is reused, just set its type and skip the ioctls, as the + * container and group are already configured in the kernel. + * VFIO_TYPE1v2_IOMMU is the only type that supports reuse/cpr. + * If you ever add new types or spapr cpr support, kind reader, please + * also implement VFIO_GET_IOMMU. + */ + if (container->reused) { + container->iommu_type = VFIO_TYPE1v2_IOMMU; + return 0; + } + iommu_type = vfio_get_iommu_type(container, errp); if (iommu_type < 0) { return iommu_type; @@ -1982,9 +2024,12 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, { VFIOContainer *container; int ret, fd; + bool reused; VFIOAddressSpace *space; space = vfio_get_address_space(as); + fd = cpr_find_fd("vfio_container_for_group", group->groupid); + reused = (fd > 0); /* * VFIO is currently incompatible with discarding of RAM insofar as the @@ -2017,8 +2062,16 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, * details once we know which type of IOMMU we are using. */ + /* + * If the container is reused, then the group is already attached in the + * kernel. If a container with matching fd is found, then update the + * userland group list and return. It 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)) { + if ((reused && container->fd == fd) || + !ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &container->fd)) { ret = vfio_ram_block_discard_disable(container, true); if (ret) { error_setg_errno(errp, -ret, @@ -2032,12 +2085,19 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, } group->container = container; QLIST_INSERT_HEAD(&container->group_list, group, container_next); - vfio_kvm_device_add_group(group); + if (!reused) { + vfio_kvm_device_add_group(group); + cpr_save_fd("vfio_container_for_group", group->groupid, + container->fd); + } return 0; } } - fd = qemu_open_old("/dev/vfio/vfio", O_RDWR); + if (!reused) { + fd = qemu_open_old("/dev/vfio/vfio", O_RDWR); + } + if (fd < 0) { error_setg_errno(errp, errno, "failed to open /dev/vfio/vfio"); ret = -errno; @@ -2055,6 +2115,7 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, container = g_malloc0(sizeof(*container)); container->space = space; container->fd = fd; + container->reused = reused; container->error = NULL; container->dirty_pages_supported = false; container->dma_max_mappings = 0; @@ -2181,9 +2242,16 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, group->container = container; QLIST_INSERT_HEAD(&container->group_list, group, container_next); - container->listener = 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); + } if (container->error) { ret = -1; @@ -2193,6 +2261,9 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as, } container->initialized = true; + if (!reused) { + cpr_save_fd("vfio_container_for_group", group->groupid, fd); + } return 0; listener_release_exit: @@ -2222,6 +2293,7 @@ static void vfio_disconnect_container(VFIOGroup *group) QLIST_REMOVE(group, container_next); group->container = NULL; + cpr_delete_fd("vfio_container_for_group", group->groupid); /* * Explicitly release the listener first before unset container, @@ -2270,6 +2342,7 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as, Error **errp) VFIOGroup *group; char path[32]; struct vfio_group_status status = { .argsz = sizeof(status) }; + bool reused; QLIST_FOREACH(group, &vfio_group_list, next) { if (group->groupid == groupid) { @@ -2287,7 +2360,13 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as, Error **errp) group = g_malloc0(sizeof(*group)); snprintf(path, sizeof(path), "/dev/vfio/%d", groupid); - group->fd = qemu_open_old(path, O_RDWR); + + group->fd = cpr_find_fd("vfio_group", groupid); + reused = (group->fd >= 0); + if (!reused) { + group->fd = qemu_open_old(path, O_RDWR); + } + if (group->fd < 0) { error_setg_errno(errp, errno, "failed to open %s", path); goto free_group_exit; @@ -2321,6 +2400,10 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as, Error **errp) QLIST_INSERT_HEAD(&vfio_group_list, group, next); + if (!reused) { + cpr_save_fd("vfio_group", groupid, group->fd); + } + return group; close_fd_exit: @@ -2345,6 +2428,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); @@ -2358,8 +2442,14 @@ int vfio_get_device(VFIOGroup *group, const char *name, { struct vfio_device_info dev_info = { .argsz = sizeof(dev_info) }; int ret, fd; + bool reused; + + fd = cpr_find_fd(name, 0); + reused = (fd >= 0); + if (!reused) { + fd = ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, name); + } - fd = 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); @@ -2404,6 +2494,10 @@ int vfio_get_device(VFIOGroup *group, const char *name, vbasedev->num_irqs = dev_info.num_irqs; vbasedev->num_regions = dev_info.num_regions; vbasedev->flags = dev_info.flags; + vbasedev->reused = reused; + if (!reused) { + cpr_save_fd(name, 0, fd); + } trace_vfio_get_device(name, dev_info.flags, dev_info.num_regions, dev_info.num_irqs); @@ -2420,6 +2514,7 @@ void vfio_put_base_device(VFIODevice *vbasedev) QLIST_REMOVE(vbasedev, next); vbasedev->group = NULL; trace_vfio_put_base_device(vbasedev->fd); + cpr_delete_fd(vbasedev->name, 0); close(vbasedev->fd); } diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c new file mode 100644 index 0000000..2c39cd5 --- /dev/null +++ b/hw/vfio/cpr.c @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 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 "trace.h" + +static int +vfio_dma_unmap_vaddr_all(VFIOContainer *container, Error **errp) +{ + struct vfio_iommu_type1_dma_unmap unmap = { + .argsz = sizeof(unmap), + .flags = VFIO_DMA_UNMAP_FLAG_VADDR | VFIO_DMA_UNMAP_FLAG_ALL, + .iova = 0, + .size = 0, + }; + if (ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, &unmap)) { + error_setg_errno(errp, errno, "vfio_dma_unmap_vaddr_all"); + return -errno; + } + return 0; +} + +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_VADDR " + "or VFIO_UNMAP_ALL"); + return false; + } else { + return true; + } +} + +/* + * Verify that all containers support CPR, and unmap all dma vaddr's. + */ +int vfio_cpr_save(Error **errp) +{ + ERRP_GUARD(); + VFIOAddressSpace *space; + VFIOContainer *container; + + QLIST_FOREACH(space, &vfio_address_spaces, list) { + QLIST_FOREACH(container, &space->containers, next) { + if (!vfio_is_cpr_capable(container, errp)) { + return -1; + } + if (vfio_dma_unmap_vaddr_all(container, errp)) { + return -1; + } + } + } + + return 0; +} + +/* + * Register the listener for each container, which causes its callback to be + * invoked for every flat section. The callback will see that the container + * is reused, and call vfo_dma_map with the new vaddr. + */ +int vfio_cpr_load(Error **errp) +{ + VFIOAddressSpace *space; + VFIOContainer *container; + VFIOGroup *group; + VFIODevice *vbasedev; + + QLIST_FOREACH(space, &vfio_address_spaces, list) { + QLIST_FOREACH(container, &space->containers, next) { + if (!vfio_is_cpr_capable(container, errp)) { + return -1; + } + vfio_listener_register(container); + container->reused = false; + } + } + QLIST_FOREACH(group, &vfio_group_list, next) { + QLIST_FOREACH(vbasedev, &group->device_list, next) { + vbasedev->reused = false; + } + } + return 0; +} 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 a90cce2..acac8a7 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -30,6 +30,7 @@ #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qapi/qmp/qdict.h" +#include "migration/cpr.h" #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/module.h" @@ -2926,6 +2927,7 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) vfio_put_group(group); goto error; } + pdev->reused = vdev->vbasedev.reused; vfio_populate_device(vdev, &err); if (err) { @@ -3195,6 +3197,11 @@ static void vfio_pci_reset(DeviceState *dev) { VFIOPCIDevice *vdev = VFIO_PCI(dev); + /* Do not reset the device during qemu_system_reset prior to cpr-load */ + if (vdev->pdev.reused) { + return; + } + trace_vfio_pci_reset(vdev->vbasedev.name); vfio_pci_pre_reset(vdev); @@ -3302,6 +3309,75 @@ static Property vfio_pci_dev_properties[] = { DEFINE_PROP_END_OF_LIST(), }; +static void vfio_merge_config(VFIOPCIDevice *vdev) +{ + PCIDevice *pdev = &vdev->pdev; + int size = MIN(pci_config_size(pdev), vdev->config_size); + g_autofree uint8_t *phys_config = g_malloc(size); + uint32_t mask; + int ret, i; + + ret = pread(vdev->vbasedev.fd, phys_config, size, vdev->config_offset); + if (ret < size) { + ret = ret < 0 ? errno : EFAULT; + error_report("failed to read device config space: %s", strerror(ret)); + return; + } + + for (i = 0; i < size; i++) { + mask = vdev->emulated_config_bits[i]; + pdev->config[i] = (pdev->config[i] & mask) | (phys_config[i] & ~mask); + } +} + +/* + * 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 = opaque; + PCIDevice *pdev = &vdev->pdev; + int size = MIN(pci_config_size(pdev), vdev->config_size); + int i; + + for (i = 0; i < size; i++) { + pdev->cmask[i] &= vdev->emulated_config_bits[i]; + } + + return 0; +} + +static int vfio_pci_post_load(void *opaque, int version_id) +{ + VFIOPCIDevice *vdev = opaque; + PCIDevice *pdev = &vdev->pdev; + + vfio_merge_config(vdev); + + pdev->reused = false; + + return 0; +} + +static bool vfio_pci_needed(void *opaque) +{ + return cpr_get_mode() == CPR_MODE_RESTART; +} + +static const VMStateDescription vfio_pci_vmstate = { + .name = "vfio-pci", + .unmigratable = 1, + .version_id = 0, + .minimum_version_id = 0, + .pre_load = vfio_pci_pre_load, + .post_load = vfio_pci_post_load, + .needed = vfio_pci_needed, + .fields = (VMStateField[]) { + VMSTATE_END_OF_LIST() + } +}; + static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); @@ -3309,6 +3385,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass, void *data) dc->reset = vfio_pci_reset; device_class_set_props(dc, vfio_pci_dev_properties); + dc->vmsd = &vfio_pci_vmstate; dc->desc = "VFIO-based PCI device assignment"; set_bit(DEVICE_CATEGORY_MISC, dc->categories); pdc->realize = vfio_realize; diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 0ef1b5f..63dd0fe 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -118,6 +118,7 @@ vfio_region_sparse_mmap_header(const char *name, int index, int nr_areas) "Devic vfio_region_sparse_mmap_entry(int i, unsigned long start, unsigned long end) "sparse entry %d [0x%lx - 0x%lx]" vfio_get_dev_region(const char *name, int index, uint32_t type, uint32_t subtype) "%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]" # platform.c vfio_platform_base_device_init(char *name, int groupid) "%s belongs to group #%d" diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index cc63dd4..8557e82 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -361,6 +361,7 @@ struct PCIDevice { /* ID of standby device in net_failover pair */ char *failover_pair_id; uint32_t acpi_index; + bool reused; }; void pci_register_bar(PCIDevice *pci_dev, int region_num, diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index 1641753..bc23c29 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -85,6 +85,7 @@ typedef struct VFIOContainer { Error *error; bool initialized; bool dirty_pages_supported; + bool reused; uint64_t dirty_pgsizes; uint64_t max_dirty_bitmap_size; unsigned long pgsizes; @@ -136,6 +137,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; @@ -212,6 +214,9 @@ VFIOGroup *vfio_get_group(int groupid, AddressSpace *as, Error **errp); void vfio_put_group(VFIOGroup *group); int vfio_get_device(VFIOGroup *group, const char *name, VFIODevice *vbasedev, Error **errp); +int vfio_cpr_save(Error **errp); +int vfio_cpr_load(Error **errp); +bool vfio_is_cpr_capable(VFIOContainer *container, Error **errp); extern const MemoryRegionOps vfio_region_ops; typedef QLIST_HEAD(VFIOGroupList, VFIOGroup) VFIOGroupList; @@ -236,6 +241,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); int vfio_spapr_create_window(VFIOContainer *container, MemoryRegionSection *section, diff --git a/include/migration/cpr.h b/include/migration/cpr.h index a4da24e..a4007cf 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -25,4 +25,7 @@ int cpr_state_save(Error **errp); int cpr_state_load(Error **errp); void cpr_state_print(void); +int cpr_vfio_save(Error **errp); +int cpr_vfio_load(Error **errp); + #endif diff --git a/migration/cpr.c b/migration/cpr.c index 37eca66..cee82cf 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -7,6 +7,7 @@ #include "qemu/osdep.h" #include "exec/memory.h" +#include "hw/vfio/vfio-common.h" #include "io/channel-buffer.h" #include "io/channel-file.h" #include "migration.h" @@ -101,7 +102,9 @@ void qmp_cpr_exec(strList *args, Error **errp) error_setg(errp, "cpr-exec requires cpr-save with restart mode"); return; } - + if (cpr_vfio_save(errp)) { + return; + } cpr_walk_fd(preserve_fd, 0); if (cpr_state_save(errp)) { return; @@ -139,6 +142,11 @@ void qmp_cpr_load(const char *filename, Error **errp) goto out; } + if (cpr_get_mode() == CPR_MODE_RESTART && + cpr_vfio_load(errp)) { + goto out; + } + state = global_state_get_runstate(); if (state == RUN_STATE_RUNNING) { vm_start(); diff --git a/migration/target.c b/migration/target.c index 4390bf0..984bc9e 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 "migration/cpr.h" #include CONFIG_DEVICES #ifdef CONFIG_VFIO @@ -22,8 +23,21 @@ void populate_vfio_info(MigrationInfo *info) info->vfio->transferred = vfio_mig_bytes_transferred(); } } + +int cpr_vfio_save(Error **errp) +{ + return vfio_cpr_save(errp); +} + +int cpr_vfio_load(Error **errp) +{ + return vfio_cpr_load(errp); +} + #else void populate_vfio_info(MigrationInfo *info) {} +int cpr_vfio_save(Error **errp) { return 0; } +int cpr_vfio_load(Error **errp) { return 0; } #endif /* CONFIG_VFIO */ From patchwork Wed Dec 22 19:05:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572325 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=kvflEKfz; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=AlIOeJMr; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3rp4Fgnz9s3q for ; Thu, 23 Dec 2021 06:52:42 +1100 (AEDT) Received: from localhost ([::1]:51210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07fD-00058L-Vb for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:52:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55746) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VK-0004z6-GC for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:27 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:20676) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VI-0008MG-K6 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:26 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXwoI028486; Wed, 22 Dec 2021 19:42:09 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=lbEx2ykM8qhI6VZzWrUBMaPOpSWPrANBHSFsc6L2WPo=; b=kvflEKfzfj3GBa2MlCcqO6PKbW1TYoNOUdp64tYY04d/4k5f4zBCu+1JNhhEycs8Vvri JxFWOfIhiPo3+QBsH+ul1DP4LOZ7hlx84m2knV8aepD12PfRjOHKpkBzm+9zIGq9X0Y5 RCSPLXcy+4PusXW0ixp8yj00H5u8mRV34/MG0+PI2b4KUqWf1Q743DktuPzXHZ9OPFl5 yVvHl9jNOLbU1tRs8VDjXLtgWHQy/aNNALyGS4pzY9deWkqprXxWFMyXMjd0O/Jsn/I0 IkbHSwG553zZnr0lSXdhxe7R9IkcXeroWttra0+xFI7QMI2kngHKbw64G/m/w6OvS0Iw 0w== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:08 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqJ030437; Wed, 22 Dec 2021 19:42:07 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iMw0ESo+gQSfcMprIsuX2f0VjbsbPDOZbfv8M5gQBZI6HzxkgICBjdx7TYQFX2ZsrFQt2iktY60et46Q7BTFX1MhuZPkOaq8HHyL/RGl7iCB2PS25+vxlJefaoluRaBVntbiLfHe0BqoHtOhWmH6yvl7Nc4MnXQo1AMx6fY3DeNVE85O4cyE0QJcAYtfc8I1FE5Ffh1aHsSXH+DTfXzaXjvIF8O1JIc5kfRrtDRDtVJT2F8j/ZTnCCw1NdJeVTFDanEM9L5MhLDrK6wnV593LM0Szz/zvQv5wtpVp1QwfgiFasnSGgnV26YPxAMKftT20rVqfqUFV4ya36Yifqs3+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lbEx2ykM8qhI6VZzWrUBMaPOpSWPrANBHSFsc6L2WPo=; b=QRkiw9pWlNk1NLVreMQxTk7T8UbMXgoaSYNBGLz5WKMddB2LoM5cZUKXqPIwLnwVArY7cy66AkXz1FPqCiD0bOAjKEKAhu/2WY+u8qiO68b26UoFZIXkOimNWKjU0txl3UcJLMuxeY501rsv3w34Ac0m0gK15kDnU9MZecEGdScBps1U9qP9WkI0vGZ2HQuDV97KqgR6PofTC7l0OoGHcurXoETgMI+uOJcnvC1GFWeAgT7we4rANvG0/WLR8hAlVpJ1m9rvaL6NFNgDq2E7TYWKMftZQKb9v+wie/JpfubeAMylBmFzENCdXpWHAYAE/kUf+BWDL1My8WHKKhZq+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lbEx2ykM8qhI6VZzWrUBMaPOpSWPrANBHSFsc6L2WPo=; b=AlIOeJMr11qrc7OBvqVwswBzrue/WLQxw+QCHGgrfc0FA3CufRHgT3VF1cRt5gkJIi4aWJYVjmpG/raKaleulJKqzyhavokyZC42o1JST0cwVzps3lhq2yNisNBwzyE26SqMbfh0JfT2BslVR3CraFVPZW7/hwUGezuWwHkaYfg= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:05 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:05 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 20/29] vfio-pci: cpr part 2 (msi) Date: Wed, 22 Dec 2021 11:05:25 -0800 Message-Id: <1640199934-455149-21-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2dec9647-bdd2-4981-18df-08d9c58321cd X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:233; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZwMDij4vN+UYI/KFMw70Rc3FUEI9dUhUSlcNxoRuisn936ShTPA4FYD+gTrMVwBUAGMZIfmjG0cSc6yUnII2/PN8WKmMnMsOU35xGVuwBh7jcuuZ/+YGkhXlXjJgt4P44SRGVo3pJS4MZ195oVX7m+6tInkpwIgrGHOutXt84dWw+TlJy0sZOihcdufSZ+KZKoJp+35A9x4yoa2Agv9mNIVpUe4mqI57TNWV5v+DEvm3ivBibeJU4JxoR31bGicYlhBdpqVD6G2wrQTika08wyrheUNzzPHe+oaQA6A6vfKQ4H/HDWTPuPKR4lOX2KOkbXNcOSbcZbFO96e8epSJ+9KvI163hXh0eZU4ycOmJ19aFybCUe7mZ8nPnkWfHcJ+941MIz5ocJaLAbmWln6H5Yp0DyDEvpE1lCrEOofTjvncdKn8H4j0KnRy+q95jVzSfcMGRQAUFn3M4klqPA47ovE5Ppq/0pUa55Sm3ktHC9J6g5ib1lGPU3NpB6dC1+vK4xH/7CKnWtwF0sdD3pvsxSUoa0AFwoYI0qlRQmoXfv6tgIavn47mpX1T9YX4ehh41W4za8KDP0NMQvYJW/lRlNuHeCnQq5M98QfiCoRqF7d4dT4vsq9unBrJt4WxrZv7mz4eA9nzVPNHLfoq8hIezhMDX8ZhMhP0rF0tIT9kxQIPMkoS+Ed9tAx8ygIiZZwUE2Si5Znwz9G6QJ0XQJCUXg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6nnGhja1wL4N9KceFjZhmxCYRIV5YRA14hwASu0OXPNCApW5go61O9SYiY7p7+Squ6IS+gub20E8q7+lOP5vV9ObhJE9UI/NmzhG1LOPu+v/XGdsCUluch/rY4vJjD8kr1D/RsRu9IVsbYuK94Z/u6lXznlJ0QIe4sweOTbqxWg+Y8XVDwwxY/er+QEzwEedikotAg/FdyvLZOdDaopHUD/m8ZZfYCNUAEhGmyl23LnxAjpUTlqCwDNuZUNjic1oqNGbYRlXtov3asbFQVCmqtaJ8M7fwTteH8zwphF7Lp70wh4ryZmDxOIpZSoFOEQU+zkoCKzhVYPZ+ShAAIZIMVmt0FdX9TagiU9R33HuwSvF84HCTfHIopJWoR5rWQDSf8xchiuwrnyeVqwYNSBp+T4wfRB77jjTYUTVX83OZnAz8Jt5nCy8kDBWyyOCG0Iuz9MVKYtcKlbSq4s3ZkUPQr9xJGh58lB13NB+8qI13wJYjnrAllnr0F0kczvb5Apy6ks9f7oegt2Q0tss9HxwN72ZR//sBNGt3q+HIVgPWGQ3/qlYrcMQKAZQ5EW5aVJpHdEnIzbK8gq2rVoJ2L2GSwyGS7Np3W9m3yaVqFPuvm7HEQRIAwthCndmWHUkeMpJ3RnHb7JS+xh48JEDQOZdg+I1qH2vlOkAX06Os5fKwLRAy3vM5gbYLYy/6UMvTr+d8QrQtIU7cCPU0ODTVqNfFTZn93VcYanbbE7i2oYaPt8Wc5rT3ZniDXH0vWBOng98OQnPCJ0SKDnWHnCPUvvr00VdxK7p0S7q2/5P3qfdZkk4HY6oECGKSwKZfGhybDMPUCJz1WE2+7N6uwRE8nlGRk0HXgdTjMvTZZecB0LJLpg7cdhjpkm0XF36soSHCZTB2hgJ7zlpCuUj2Su3BPvmUPFkT76B1y5ykaRk0eAeVW1r4uo+b4fMDmTNTrM2+izpYsaMjtcPMuE2UHvdMfHrzaXGKldb+w/WWYp5qVufBYQb9fbe2fW+UmmzMkOEVQvsk++crjU5loWTaSzNMXrynl2CZV0nsFSmij3CPdwOa9B/hxqHPTxiRgNmzL1AKbFWnrJve5cY5GhasXydHdtjVX2/bz4RJbatU6R7SLYOJakkeV7XsFrcf6M84SrWY3h9s01HArrcWg4g6RfXeVhGCwcQBDXArwdFgBI29zax70FX2tON59Et9W0cynG+N0ANtfiFRLBNBgwENUEu1LQNckymbZlb6dKW8xFYZYgFK+3KSdEOwN7Y96tTkYzWkuk9vdGOO/DCjlztkfjOsWDktq4ZvDrufDooR/JDCFBEoKKPbq2aSfP1pHpcVcyI0aYx+joPu1eNfSa9fgOEA0PNTzakpkJ3jNp1mUF3lV7mweVo6EMGyoY+AWNysP1HBOKf8RcA5sHgYJTYORrd/7W06MUhhpNwN5+wWW9ZLOoN47i9mpYGf9yZzdUhFVt6BVH5GP2tNMI/Y8TbcYZo8Te7Tsd3tMHnbKfkk1XYxhZLqSBg7MmSfpEU8AeO8hbcEOTAGfsd+hjRcZF0x9uGvgUE2xvk/NU1nfv7DEEQ6akNfRv5IUrKO+hFxzyX00twuH7V+kLsgxUNkfgeaXF+JpFgp4P+llC9nIfaS5VZ6jE4366qPK/mOINq37ZsPwYbvjW+6ASRnAdbaaXREHalrV0lwA== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2dec9647-bdd2-4981-18df-08d9c58321cd X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:04.9675 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1QkoZzRx6DdWDWNvX4f7dLiXhTXfH8jXRxsypYj4iidYamVogRt2m5sf9FQ7XgUBX/JCwBrIsrRK8J0k+9q9azk50tf7r6GcaIrR7yH2ka4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: Ngxk1yNnYF9377MhYATOOjkhNfI_EkJP X-Proofpoint-GUID: Ngxk1yNnYF9377MhYATOOjkhNfI_EkJP 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Finish cpr for vfio-pci MSI/MSI-X devices by preserving eventfd's and vector state. Signed-off-by: Steve Sistare --- hw/vfio/pci.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index acac8a7..abef9b2 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -49,17 +49,55 @@ static void vfio_disable_interrupts(VFIOPCIDevice *vdev); static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); +#define EVENT_FD_NAME(vdev, name) \ + g_strdup_printf("%s_%s", (vdev)->vbasedev.name, (name)) + +static int save_event_fd(VFIOPCIDevice *vdev, const char *name, int nr, + EventNotifier *ev) +{ + int fd = event_notifier_get_fd(ev); + + if (fd >= 0) { + g_autofree char *fdname = EVENT_FD_NAME(vdev, name); + int old_fd = cpr_find_fd(fdname, nr); + if (old_fd < 0) { + cpr_save_fd(fdname, nr, fd); + } else if (old_fd != fd) { + error_report("fd %s %d already saved with a different value %d", + name, fd, old_fd); + return 1; + } + } + return 0; +} + +static int load_event_fd(VFIOPCIDevice *vdev, const char *name, int nr) +{ + g_autofree char *fdname = EVENT_FD_NAME(vdev, name); + int fd = cpr_find_fd(fdname, nr); + return fd; +} + +static void delete_event_fd(VFIOPCIDevice *vdev, const char *name, int nr) +{ + g_autofree char *fdname = 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 = -1; /* placeholder until a subsequent patch */ int ret = 0; + int fd = load_event_fd(vdev, name, nr); if (fd >= 0) { event_notifier_init_fd(e, fd); } else { ret = event_notifier_init(e, 0); + if (!ret) { + save_event_fd(vdev, name, nr, e); + } } return ret; } @@ -67,6 +105,7 @@ static int vfio_notifier_init(VFIOPCIDevice *vdev, EventNotifier *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); } @@ -2736,6 +2775,11 @@ static void vfio_register_err_notifier(VFIOPCIDevice *vdev) fd = event_notifier_get_fd(&vdev->err_notifier); qemu_set_fd_handler(fd, vfio_err_notifier_handler, NULL, vdev); + /* Do not alter irq_signaling during vfio_realize for cpr */ + if (vdev->pdev.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); @@ -2801,6 +2845,12 @@ static void vfio_register_req_notifier(VFIOPCIDevice *vdev) fd = event_notifier_get_fd(&vdev->req_notifier); qemu_set_fd_handler(fd, vfio_req_notifier_handler, NULL, vdev); + /* Do not alter irq_signaling during vfio_realize for cpr */ + if (vdev->pdev.reused) { + vdev->req_enabled = 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); @@ -3330,6 +3380,40 @@ static void vfio_merge_config(VFIOPCIDevice *vdev) } } +static void vfio_claim_vectors(VFIOPCIDevice *vdev, int nr_vectors, bool msix) +{ + int i, fd; + bool pending = false; + PCIDevice *pdev = &vdev->pdev; + + vdev->nr_vectors = nr_vectors; + vdev->msi_vectors = g_new0(VFIOMSIVector, nr_vectors); + vdev->interrupt = msix ? VFIO_INT_MSIX : VFIO_INT_MSI; + + for (i = 0; i < nr_vectors; i++) { + VFIOMSIVector *vector = &vdev->msi_vectors[i]; + + fd = load_event_fd(vdev, "interrupt", i); + if (fd >= 0) { + vfio_vector_init(vdev, i); + qemu_set_fd_handler(fd, vfio_msi_interrupt, NULL, vector); + } + + if (load_event_fd(vdev, "kvm_interrupt", i) >= 0) { + vfio_add_kvm_msi_virq(vdev, vector, i, msix); + } + + if (msix && msix_is_pending(pdev, i) && msix_is_masked(pdev, i)) { + set_bit(i, vdev->msix->pending); + pending = true; + } + } + + 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. @@ -3352,9 +3436,24 @@ static int vfio_pci_post_load(void *opaque, int version_id) { VFIOPCIDevice *vdev = opaque; PCIDevice *pdev = &vdev->pdev; + int nr_vectors; vfio_merge_config(vdev); + if (msix_enabled(pdev)) { + nr_vectors = vdev->msix->entries; + vfio_claim_vectors(vdev, nr_vectors, true); + msix_init_vector_notifiers(pdev, vfio_msix_vector_use, + vfio_msix_vector_release, NULL); + + } else if (msi_enabled(pdev)) { + nr_vectors = 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 */ + } + pdev->reused = false; return 0; @@ -3374,6 +3473,8 @@ static const VMStateDescription vfio_pci_vmstate = { .post_load = vfio_pci_post_load, .needed = vfio_pci_needed, .fields = (VMStateField[]) { + VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), + VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), VMSTATE_END_OF_LIST() } }; From patchwork Wed Dec 22 19:05:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572340 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=jBknwZj5; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=w8RPf7Zg; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK4DR1L6pz9s0r for ; Thu, 23 Dec 2021 07:09:41 +1100 (AEDT) Received: from localhost ([::1]:34146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07ve-0006hv-DW for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:09:38 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VL-0004zC-UW for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:28 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:23750) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VJ-0008Mx-UJ for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:27 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxQK028537; Wed, 22 Dec 2021 19:42:10 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=KZtyGgeOQRHCBkE4bSY7aoisg6wZBAsK7kgR08YYuhA=; b=jBknwZj5alokEoSGiJIizwi1fcO3UgoUYj7oq8X6ZiVrNI0YpfL3b4XpvTdKjKPzJBPU nJafd5AHCF5TlCUdkmzn+ZL+8G4UuRPzXL/g/juvhbvv3i7yXXqtRkDITyZVrlmxkqo0 F3ewY0tPS82Ia7ZjYC4Nf8x3ip+xr/XJq7HuG1xe2nyhQhLcNTUtSObzC4tArkbthOJM dTC03T9mg3VXKYylpDE9juNqtdx2PiMrcgh7EMJCT8QXDf3vEVUSJ8C+ZH83YtKXaAVZ MQe6lpjlV+u3JAg5TcE8TBn8W6ZIijkRYOY6EZM+Di5jbnTU5YsvytqS6erIJd2BUHuA EA== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397k9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:10 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqL030437; Wed, 22 Dec 2021 19:42:09 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bVRzGlB5nbNDSw/n/p2/HZgr1DNCkbZy3PMpZbBcXH+p2946ROalPzWi4oJ+KDar+z9jYrgRXeGrWR0BlPMaoiWpDk9IH9e372LqUKK8+74+eiqLyNODrkYhp3RcRtQCaadOq8GsceL0epvy9LlP37adeiOrnZdtvXWlZasi77/NW+y71lVEbv1o9P5/yuqykzNs8asYgLkMZfzsw0Bw6JKtl2wyrDlo5o5Dm8RHysOuFpywzJiMFf764H0rZUZjtDsQ34Y7wFiP198wd2wA9jQScErtiOCzL6jFkyDCqsb0RoUkbsf1/I4OW+QFBJJs5hpyO2mcBE+p7sg4/m9kaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KZtyGgeOQRHCBkE4bSY7aoisg6wZBAsK7kgR08YYuhA=; b=TFuCCTFpvESycZ33eYjST0QgnYPjDlWpWAM0idusJkjYEBGx+mwBaF63TU/t+xVFHN0VDDlBq6rfd0VXPQ7Puq/cK1aiBLshUzK2/0dO0urAiCrm0opSRgny05VH44PV9cb7eMaMKcg99A3v7C2yPskvQ5Ed76ESwA0/KW+nyWQrwD55eA5ivwLSUOMFQhKV7fUAQpWKw2s/rNPa+UOFA/YDOq7671Jqr4gAAO1CrgcgNSkgnC4P/ReqYFJBUGHr2Wi/g4E8DWAxrNuwZklKIlYIxChG8AtaLwszcMLUXI7rb2BLTDvqA7Xg0U/UtgcgTQfi4+NRYsXfYD9+mFOkxg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZtyGgeOQRHCBkE4bSY7aoisg6wZBAsK7kgR08YYuhA=; b=w8RPf7ZgDVJTxxnR0ibb41UwtKWqz4N+NRk5MWNHi8DfgSvH+sn7bgRyTg9CcRqktFBnJV2ffqks8tMObXZdGt/tdmyHyENZC+dmJP1ycCpMaMTagKDcJ1APljkl4yT//zS2sNUTXFzKraoyoc3E4tVj6CWHssqFC22Q4lY5ths= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:05 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:05 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 21/29] vfio-pci: cpr part 3 (intx) Date: Wed, 22 Dec 2021 11:05:26 -0800 Message-Id: <1640199934-455149-22-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9f27913e-4528-4461-b2c5-08d9c5832208 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xnYn3HguSe7GleL46UUEcW3nZPRZ3x0JPPqoJomf+FBuiRqADizkVbsAnfQCcX/OlwWWiYbbA9GdHmDE4d8Nx9De3+n2Re3TyjSX1pHfhChr68XrMlOPo+OFkGW++ZmCfCMHunyrhfdesNJLilsMTqry4xyZU0zUKe7bWFg9kY1Xy/14iU48J2acdhYoNnMXQ+DNmPePcICzJbWQrHaR42ZCaw7MkNpacgX59z0QShks04buQcOLR958YIlw+D0KIznzakpDWM19hDAPQEgkN9diKTch6iQTZsUJykOhcaEzlYkaN9P9U788J3QNQxnJFDs0845SGnOSo/TBEmzmM3vOuo5n96E47Y2rNP9ZhzyTDJNJRzSsKTXi5HcBgkWTsndes/Vsyte+5cQTPLiObK/8YLoMcz3ZFmK2LayEGLeWtzmYdTilUlMAW7L8VfFVa4Nn6DyGpY+XtfLgAONuEQQof4huHrg+Jj1i5ao5Cfu5pyBsTMWvVqgfhoVcJrqyxGoB/4m3tCO7xUa3wtO3v63kXM9xuz5x0uVazotUZ+jKiSM5ywKq1OltM7kExoBI584LToXSML0SZmLKjgVXqOIW0KSJPCl2hFhVPZU+Zv5cWXADpetULhH9cFQguYnLsBCYqR2gVU3ZLnPrHWslJ3UGup2UJqxiuIspIFzcftzyh+PjFxs+ZFJS2yps/u+GfzurqNEq1W0EHK5jOACX4w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1dSKF6LkN9d93727NQqTfferaDMRmipbJY6n4qMky9fO2EEgGGlpDdepu5o2zxDJ7RSzTnZmwolV785iO1leqUC2uLlyepAH3NLxtJk2bI6275Mu85RkknF5l8Mz9JMx6/oozxzbZV1rNppM1FP59nndAFr582HkOoPtJ/zV6i018k242uM0iW8fxUR9LSwlNtTeBHZLDYNeEcrE2r53pi1RRkMzeCFrFRfv6NRXVOHirEtxDB2MNBSkt2a9etzuezCJijA1FEYU7Z1+r3uLuKQ/uxRLxz/xL/2P8wDssDXh+ygItw5lAAqIkHQ/vxGFNAbb/oOGKL1tbNHint5Q1TTgsVqVPMKVfHGyVhcCseMppMHKCts8hEgUvF0CRS87Wg+Zdky48KakfefD0oNOCIf4qTFNQrKWISQBxMJH8GFLDP1IaUAoXeTY7SLQfKrFi5bJL+X9Q2xvkwUShFfhxd6UmeS5Hrr0XPfC8F137O7kqMrD+KZhSVBPzPYOmpWtrOhLWBu9LKOOsB3trg6QnPGxsFEwYdHqg8iFDWTYovyTXMgxsTKSVyrfBQY1YLLsQpLS5Ym+Zt2lyC+PgLs+gD/C23kBrvWUK5QNkpejLyV9EQ4zhpMWIABg05cRMPC/4GaiUqyQgwC2jBa3pqMmoekDto9bpdJkfL9t/uv7fv0oQvjeUWjBHNQLc/CoBoL9lNnBszErJZwf3Ii4doR8Zl7pk2Xb4jCENZ8QprXKTwFYOgXJGCaqrb1iwkzNRAF75ay8C/tLciiKM0LaTU4gelcVMnHR5MqEHaWEZF6QlnNbqUNelkWS/eNpR3gfUzmqzXGoYuPd9ZoDzOKpGzv4HrgHsuEv+hL0S6x6R3gUMUuKMz/bbka7JQiRvUkBkt19Mg6wDYL+V63HtnQaZtcenuOl/Rvya1NWCiaKe5I2MdCv9QLYDQWRCKS+UcbyvS4uH5WqISh7zNox1KxQ1LdCIVGm7Lmqy4xEYtz+ggqMnXy+wyjI+Tr6W8oVx9qM5TYu+KaLPKlYsFmGQUOkdL4PjMOnzQsT0OsJ0NDxy/MSHYtaIiXOdv6Ty00Am6jocJeuTl3nSIZpVCgu0Rk4Wm6+ep3/dxmT9s/sdTnDOiiXgOS1Z7As/vOMRM/N4e7p9f/aJUQ+NBYWtq+965sAO5zUGJd32APuge3ogsgZJoOXix3YYm3j0/m3/3RBLJfyl80A5ae1KO/AIPrHNU771UpGWB7w2K1rPYIVOm311Orl9ijJqSnJ3AsFMqm1fXN8NLVP+3C+enJAMXFOyxjU6zDKUeZ01ezHNPnd2aLc3p1UkpvNyi6/zgS6qYxjtS1D7oQgFG4e+f/nDaqd1kSMNJ6yA09040FzjELkINBUTeds7owgG1W5Yi4Xlo2H67CVSc1NA2yYFo3nK4+MDnTedLK4luqyqryR3JMKqwBE8ynRiaoPbkWge3C7uSNmXMLYLzwO5i1kNsIbKQl8kTlw3p147r42u0a/Kc4PcLRXx+j1QFJnXqJNh96lVMo97CN0+xfPdw7nwdnzHYYi6R6B0o2QLteatHF2kqJn6Y2i/Apfo8O04Mf3N2dEPZlg2kZhYGMs9cMFAVea6+qU4xziKxg3VJwd68YXyqfw1LuMa0+FUD/NTV5s6nyH+wPToaqQZWPBQaIHfFk4rCazvZ8VYuC4pg== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f27913e-4528-4461-b2c5-08d9c5832208 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:05.3581 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ifuKFwLv3mBeC3W4Xq+V2MzzKjU31cOZvizW26Tm/KgZ5jZvvwg98CvPcZxH8kHwnRBcrpFmZ+xkEMafKPeZqTASM4kVTgMlI8A4WQABlFQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: Xfrteq7uMUJ6E44fZ1DFvrBvqDrYYbem X-Proofpoint-GUID: Xfrteq7uMUJ6E44fZ1DFvrBvqDrYYbem 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 --- hw/vfio/pci.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 9 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index abef9b2..e32513c 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -171,14 +171,45 @@ static void vfio_intx_eoi(VFIODevice *vbasedev) vfio_unmask_single_irqindex(vbasedev, VFIO_PCI_INTX_IRQ_INDEX); } +#ifdef CONFIG_KVM +static bool vfio_no_kvm_intx(VFIOPCIDevice *vdev) +{ + return vdev->no_kvm_intx || !kvm_irqfds_enabled() || + vdev->intx.route.mode != PCI_INTX_ENABLED || + !kvm_resamplefds_enabled(); +} +#endif + +static void vfio_intx_reenable_kvm(VFIOPCIDevice *vdev, Error **errp) +{ +#ifdef CONFIG_KVM + if (vfio_no_kvm_intx(vdev)) { + return; + } + + if (vfio_notifier_init(vdev, &vdev->intx.unmask, "intx-unmask", 0)) { + error_setg(errp, "vfio_notifier_init intx-unmask failed"); + return; + } + + if (kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, + &vdev->intx.interrupt, + &vdev->intx.unmask, + vdev->intx.route.irq)) { + error_setg_errno(errp, errno, "failed to setup resample irqfd"); + return; + } + + vdev->intx.kvm_accel = true; +#endif +} + static void vfio_intx_enable_kvm(VFIOPCIDevice *vdev, Error **errp) { #ifdef CONFIG_KVM int irq_fd = event_notifier_get_fd(&vdev->intx.interrupt); - if (vdev->no_kvm_intx || !kvm_irqfds_enabled() || - vdev->intx.route.mode != PCI_INTX_ENABLED || - !kvm_resamplefds_enabled()) { + if (vfio_no_kvm_intx(vdev)) { return; } @@ -326,7 +357,13 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp) return 0; } - vfio_disable_interrupts(vdev); + /* + * Do not alter interrupt state during vfio_realize and cpr-load. The + * reused flag is cleared thereafter. + */ + if (!vdev->pdev.reused) { + vfio_disable_interrupts(vdev); + } vdev->intx.pin = pin - 1; /* Pin A (1) -> irq[0] */ pci_config_set_interrupt_pin(vdev->pdev.config, pin); @@ -351,6 +388,11 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp) fd = event_notifier_get_fd(&vdev->intx.interrupt); qemu_set_fd_handler(fd, vfio_intx_interrupt, NULL, vdev); + if (vdev->pdev.reused) { + vfio_intx_reenable_kvm(vdev, &err); + goto finish; + } + 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); @@ -363,6 +405,7 @@ static int vfio_intx_enable(VFIOPCIDevice *vdev, Error **errp) warn_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name); } +finish: vdev->interrupt = VFIO_INT_INTx; trace_vfio_intx_enable(vdev->vbasedev.name); @@ -3140,9 +3183,13 @@ static void vfio_realize(PCIDevice *pdev, Error **errp) vfio_intx_routing_notifier); vdev->irqchip_change_notifier.notify = vfio_irqchip_change; kvm_irqchip_add_change_notifier(&vdev->irqchip_change_notifier); - ret = vfio_intx_enable(vdev, errp); - if (ret) { - goto out_deregister; + + /* Wait until cpr-load reads intx routing data to enable */ + if (!pdev->reused) { + ret = vfio_intx_enable(vdev, errp); + if (ret) { + goto out_deregister; + } } } @@ -3437,6 +3484,7 @@ static int vfio_pci_post_load(void *opaque, int version_id) VFIOPCIDevice *vdev = opaque; PCIDevice *pdev = &vdev->pdev; int nr_vectors; + int ret = 0; vfio_merge_config(vdev); @@ -3451,12 +3499,37 @@ static int vfio_pci_post_load(void *opaque, int version_id) 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 */ + Error *err = 0; + ret = vfio_intx_enable(vdev, &err); + if (ret) { + error_report_err(err); + } } pdev->reused = false; - return 0; + return ret; +} + +static const VMStateDescription vfio_intx_vmstate = { + .name = "vfio-intx", + .unmigratable = 1, + .version_id = 0, + .minimum_version_id = 0, + .fields = (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 = (stringify(_field)), \ + .size = sizeof(VFIOINTx), \ + .vmsd = &vfio_intx_vmstate, \ + .flags = VMS_STRUCT, \ + .offset = vmstate_offset_value(_state, _field, VFIOINTx), \ } static bool vfio_pci_needed(void *opaque) @@ -3475,6 +3548,7 @@ static const VMStateDescription vfio_pci_vmstate = { .fields = (VMStateField[]) { VMSTATE_PCI_DEVICE(pdev, VFIOPCIDevice), VMSTATE_MSIX_TEST(pdev, VFIOPCIDevice, vfio_msix_present), + VMSTATE_VFIO_INTX(intx, VFIOPCIDevice), VMSTATE_END_OF_LIST() } }; From patchwork Wed Dec 22 19:05:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572327 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=coH1iwch; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=reIaHiA0; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3rt5Qqpz9s3q for ; Thu, 23 Dec 2021 06:52:46 +1100 (AEDT) Received: from localhost ([::1]:51416 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07fI-0005GD-8L for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:52:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55820) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VM-000509-Vw for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:29 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:25702) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VL-0008NI-0m for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:28 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsAg013618; Wed, 22 Dec 2021 19:42:11 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=pb6w7A8Juk5Q6fyizUS0CzfxUrZE0ZrvKkKi9D9k1i4=; b=coH1iwchKyx8CjEcYtJa5tGYRfPuviwxGsfu75PiS6no+b6AUFT91gBIvnHqtrMD//8U mz8KDKAtSxp8zrJRk7HGuyVtGZK6CfqzlM8+na70iT6cmlQuM6o3gtQVHpXQ1GmRdXHa C5s5j905uiBdYoBmxt0lMINs7JZiUDjIXjy3QMk5NzWEj2aZTP4pPfQXUzLgRjO2CjMp aDwL09Tgf1lDdlsrdBq4biNCGI8tgdVlGAVPKA3zXahLPcR2wm1PdBtm0S8uL2Tiv6i/ d4fz85wXg7/Eoc8MXmO7PWpT2+DMNfLi9Z/lidG3BrCLsTPNP8JZdxXCmEVpnwJignnn Bg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tm1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:11 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqN030437; Wed, 22 Dec 2021 19:42:10 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ieIF3U4J9DCVWhVtosL2Vk2a0l22jLqg6y5dBxvg6JDpkQrsZ2tPKxkRCUSLgzijqgYb+U+Er+96znmsbhdMvREMrEDEcqwY6ZotYAHX/wcmBCaodHSju0I2goiP0cNjatFfbgNpT3iLS6Zk/1LJjIxiKGTo97H2zCfK0OUMpdqTsAdBZbymwY4hjSz8fhnShWARpKnLQoG6GHbbi2HKi/XpyPUtv5sn6a8QZxDhTp3AVh2SKGvHbN5xRw0kGMFI/XS91PliKVxJrIBOeU8pqoOjLYRk/j0Ynh3nlmme6ZeutejZMFC2wm3QJIUFjAbZaYDXn5cAvMRkr5knKnm5tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pb6w7A8Juk5Q6fyizUS0CzfxUrZE0ZrvKkKi9D9k1i4=; b=oG0qLcJiy/LIm6kzweKD6MShxc/4ZpYmJQ0oEv9V7iDS4edVf7Tzd/zCl/uJMGQjyBRuOFiKnnOmwh8uCoWTScYBXCZYrh3s48j6cvRpYLqH1loFQD/DpcETcb3GwK5wyfa1nGgk8Sqz1wvVCCE0uLxnl2Luz8/xPd6F8zOZQCEnoiv/SQ7DlGiBsYUbZrAIXwykly+3rUfmkuEdYMevaHU/iCHtzyhkmfeYdz9VIuGBvndklDs31FOQ8G8CPTfYKQE5XK+WaARr9YYAgKcoFe9gI3Nre+WBKjUdPODfnhH0dr7x/unJv1s4EbGtWYe0DM+5hFR0YWuMFg0mp5LGqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pb6w7A8Juk5Q6fyizUS0CzfxUrZE0ZrvKkKi9D9k1i4=; b=reIaHiA0jw/rYAmxlxTbrWJrpoGP8XncR95ErHRZsHQ41BMf5PNWC2XJ3omAMn0hL4ptaIdC4W4mDRVmxjbufPcQHWdwj0Phk3ppKhNFBoj1VBOvguZmH8CMZG4FJWiZBP7lCDSMkR+Qc8DOrXwGpbT49AkcpDHm608QOp17KFk= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:06 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:06 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 22/29] vfio-pci: recover from unmap-all-vaddr failure Date: Wed, 22 Dec 2021 11:05:27 -0800 Message-Id: <1640199934-455149-23-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 04757715-91af-4737-5f12-08d9c5832257 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:431; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rrKnUbuDwkklgCoJwrFTkrSLoJuHuk7y4KOyvCHXSYGo4lxYiAihT4bmsec0qhKczFDJMDOXi6d8CWv1tgjWFjc3+6F+Thk5F68DQ7ue/t6j2KuxUu2nqLI0M/WlksDEwMhnwfF4uaI4M0ZfkVymtVAui9wsKPFq0UeTAKFlJNG6/zvHqfKY2o7bkVOiIFV68Ge0Eu3vGh523kIq5I835BDBzVB52RfOGrOIdsr6Tf80ofoL6O6JpRvMW//6G2quwQwlQ107FHEjTtkfAOIHBu52nzIK7wb/yIkBD7Y8Wx0hL25NI6Zf/biuZ+tGJ836FNsFSAtsXvuxjLFNvNl/7O27kp3rKwNuB/JlS+uKzxCwF12VvV+vtIkzJ/nRSuLM8slFsDC/TI8qf6oZzFLUb9QZPN4r71Xyk7HGfgR8GRN+FYlvqN+7ELbosT1dKn7z/0UA75y+FE2YqX0ptuA8UUE1XZndz8dqwql1VaktLRnv/V2lAKK83DhQQRdTKMNB/K92UEL4mDZ/axuLUBP5H9hMDZ0MaYq7gOsExcoKPUI2p4J2GTRv7RvpaH9VQK59f1S20wnT7c+PJ36G0Gr+Crx9GDvm5uGx8RLMuDLHvi137Vy80qzktvuR3PM/BRI3s13Oj0Jst0JJrPzEoKUP5Q3RdY/5QrEtd5IO/rAzbPafis4Wc2ZxIBVxQx4UDAaYicSAW45Vcr3kGlT5ba7uVA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: z2RldeZuCzwxb8ytCoCLUe7zjE7k7eepyCFiLzW0+jMgh/KaA1QxHNZoHkpQIxVfolP0k+EZ5kuiOQLCklC6D4DEoYJAndUswMx7LzEuVsgdpgrDOP90J+Il/FmNtudfQ1u9vRWsvP6fwyUoBacv3Ma6cuvvmUZ4sn2HeI8zVpcgXAL1qjuUNpmxL0DPsHErBZdL7BA5PZqVvm6UTg9m7CJxMPm+vyWpxEG1pMhwCYIwnFRTG6myd4eSp9jb9M2RMfjZjwvlDpgKPFaLYofTwSoQHd+H7cYlxRRBIlKaJ6JO0nO4KU4aTjtWnyLwqi7wfXOv5A1G56ji9IkrLKAFcZM87DF9vIfcYWMdWOatBpNVtRefmw4gyaUv9GXOPJZ6sOu1YESjqNu0CiV04ALxHuu2JWbnf0woQmCeTlyOjXzCE17/IGNzs6BmnZGlO/0nw8E3hlL7iXfezva6UgsrVNTY99QtsPwT5isYaxj9sGv3N7Gs6uA+3plFrTk14dR0JTHvy3AeCujxGsH2LBqytOfIMUr46PSv6GRS7YGRHozHtqEI0B2wUpH1NCnl55Zs6HhoLNyRxC6qMb8JKBvSl1Nx2y9DWlWnbzQGtUtWZjdk7p5gqERz88y4p6rK1jMigOOe0DpRS9oUtvcSJh0d0sgholkF4eJm1WJ7YQx7dR7Sh2viYbOYs9TAUrGRB/K4Nkh05khMXcrCV2f13XzhdJ/RAW3qlxrNzZ3JxR+hfImL2WdrWRgw1DwWgRZbrfAoHJtiO1o1IUx/lwlu6P0hOI2oL8sebMbkwa4OfXA0DG8W4BFJ8auWiXitIPNJfOJs/ezLlzo9BjSqSsJeGhklwE+K6fISjo7KxevhGAR8CfJEYTuHqS+TGtTtTsV/iNlj/uS99huKV/lsOC5XjXlrgpATfu6Ri+7MxnBHl75SD3E83zxocMOPnDCfeQCnc5I4TOI7zoJ0UFl/KtxPsJa+lVKTnwpafZuLyvbaE3mOQBpxLikK+4FikiP8Hsr+nR45OzICbkNBWdJDo/6gdIdkMFuuT0rtQKNCegtfAyWI/pinjp/QrVScI3j/qQePV78igOE8e68NJYE+STpFOQn33cHo7YMZVWnvyua48iijPFX67YQBvq4LVbXEPhFUFWgw0KluIXOuw8agXyPMDbNjngVO9AhU5A1u0YXHyYK9C7cI7lk4zac40BCF5AFvajVrApoWjMpk61ZLqqOjGOQhiT7MILMJrM6EQY9tTfaj+SirZSKBIYPj0AsBON2SnPSIbH975gALCBi//3V9sYx1Y9zDu3hE7vQfRf0sd/OqQnFpwMUQ0Q/BiSK9b30EFcF6k0+L9ckdx6yVJSneVasSJfCQewYNd9dzCcdMyoUvmxx2u4B2nH+oS4xjTBic+hYB/ecPHovSGGeNtCHE1PxVwTjHPg3P52ilrjVrFKXccO6SqXuDA/AQDIdj+yvzbpfTp2+khHwrWPN+KwoAz1KfTzhmZwWi3eiIphTY+xa957j0n51kxAuVsuyT/C6IzumwZ4z/4JDiyOD/spMEXoX2N9yA321G1Uqzgf6x04dy62Qs5uFoB/pg9Awpu2VDctEsFfIqYGjBkmVyXSS1iglh0Yxnh3xOZZjG8Qx/FkIjCW0jinCYUrfMooOawgrF40Xav1lMEdSmmfSiOk57LgeNWw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04757715-91af-4737-5f12-08d9c5832257 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:05.9205 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ONnMfvFjb8OIZLgV8d54lW99qqfBf4awT0Ew7zEHrGL9VAP0y340zSWn4w4XZ3TJZcbAZCqd461GxkjJFlg5bNolWrDqoKew3mGZ9bAURDk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: gHQ4wKi175hmHMMgp0p5oNfWFOeNidRm X-Proofpoint-ORIG-GUID: gHQ4wKi175hmHMMgp0p5oNfWFOeNidRm 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" If vfio_cpr_save fails to unmap all vaddr's, then recover by walking all flat sections to restore the vaddr for each. Do so by invoking the vfio listener callback, and passing a new "replay" flag that tells it to replay a mapping without re-allocating new userland data structures. Signed-off-by: Steve Sistare --- hw/vfio/common.c | 65 ++++++++++++++++++++++++++++++++----------- hw/vfio/cpr.c | 41 +++++++++++++++++++++++++-- include/hw/vfio/vfio-common.h | 2 +- 3 files changed, 88 insertions(+), 20 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 90f66ad..f2b4a81 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -878,15 +878,35 @@ static void vfio_unregister_ram_discard_listener(VFIOContainer *container, g_free(vrdl); } +static VFIORamDiscardListener *vfio_find_ram_discard_listener( + VFIOContainer *container, MemoryRegionSection *section) +{ + VFIORamDiscardListener *vrdl = NULL; + + QLIST_FOREACH(vrdl, &container->vrdl_list, next) { + if (vrdl->mr == section->mr && + vrdl->offset_within_address_space == + 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 = container_of(listener, VFIOContainer, listener); - vfio_container_region_add(container, section); + vfio_container_region_add(container, section, false); } void vfio_container_region_add(VFIOContainer *container, - MemoryRegionSection *section) + MemoryRegionSection *section, bool replay) { hwaddr iova, end; Int128 llend, llsize; @@ -1009,6 +1029,22 @@ void vfio_container_region_add(VFIOContainer *container, trace_vfio_listener_region_add_iommu(iova, end); + if (replay) { + hwaddr as_offset = section->offset_within_address_space; + hwaddr iommu_offset = as_offset - section->offset_within_region; + + QLIST_FOREACH(giommu, &container->giommu_list, giommu_next) { + if (giommu->iommu == iommu_mr && + giommu->iommu_offset == iommu_offset) { + memory_region_iommu_replay(giommu->iommu, &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 @@ -1059,7 +1095,15 @@ void vfio_container_region_add(VFIOContainer *container, * about changes. */ if (memory_region_has_ram_discard_manager(section->mr)) { - vfio_register_ram_discard_listener(container, section); + if (replay) { + VFIORamDiscardListener *vrdl = + vfio_find_ram_discard_listener(container, section); + if (vfio_ram_discard_notify_populate(&vrdl->listener, section)) { + error_report("ram_discard_manager_replay_populated failed"); + } + } else { + vfio_register_ram_discard_listener(container, section); + } return; } @@ -1385,19 +1429,8 @@ static int vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainer *container, MemoryRegionSection *section) { RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr); - VFIORamDiscardListener *vrdl = NULL; - - QLIST_FOREACH(vrdl, &container->vrdl_list, next) { - if (vrdl->mr == section->mr && - vrdl->offset_within_address_space == - section->offset_within_address_space) { - break; - } - } - - if (!vrdl) { - hw_error("vfio: Trying to sync missing RAM discard listener"); - } + VFIORamDiscardListener *vrdl = + vfio_find_ram_discard_listener(container, section); /* * We only want/can synchronize the bitmap for actually mapped parts - diff --git a/hw/vfio/cpr.c b/hw/vfio/cpr.c index 2c39cd5..ea673ea 100644 --- a/hw/vfio/cpr.c +++ b/hw/vfio/cpr.c @@ -29,6 +29,14 @@ vfio_dma_unmap_vaddr_all(VFIOContainer *container, Error **errp) return 0; } +static int +vfio_region_remap(MemoryRegionSection *section, void *handle, Error **errp) +{ + VFIOContainer *container = handle; + vfio_container_region_add(container, section, true); + return 0; +} + bool vfio_is_cpr_capable(VFIOContainer *container, Error **errp) { if (!ioctl(container->fd, VFIO_CHECK_EXTENSION, VFIO_UPDATE_VADDR) || @@ -48,20 +56,47 @@ int vfio_cpr_save(Error **errp) { ERRP_GUARD(); VFIOAddressSpace *space; - VFIOContainer *container; + VFIOContainer *container, *last_container; QLIST_FOREACH(space, &vfio_address_spaces, list) { QLIST_FOREACH(container, &space->containers, next) { if (!vfio_is_cpr_capable(container, errp)) { return -1; } + } + } + + QLIST_FOREACH(space, &vfio_address_spaces, list) { + QLIST_FOREACH(container, &space->containers, next) { if (vfio_dma_unmap_vaddr_all(container, errp)) { - return -1; + goto unwind; } } } - return 0; + +unwind: + last_container = container; + QLIST_FOREACH(space, &vfio_address_spaces, list) { + QLIST_FOREACH(container, &space->containers, next) { + Error *err; + + if (container == last_container) { + break; + } + + /* Set reused so vfio_dma_map restores vaddr */ + container->reused = true; + if (address_space_flat_for_each_section(space->as, + vfio_region_remap, + container, &err)) { + error_prepend(errp, "%s", error_get_pretty(err)); + error_free(err); + } + container->reused = false; + } + } + return -1; } /* diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index bc23c29..af960dc 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -243,7 +243,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 replay); int vfio_spapr_create_window(VFIOContainer *container, MemoryRegionSection *section, From patchwork Wed Dec 22 19:05:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572322 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=WYyeMDDc; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=tSAg9L4b; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3nF2knzz9s3q for ; Thu, 23 Dec 2021 06:49:37 +1100 (AEDT) Received: from localhost ([::1]:42720 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07cF-0007qC-5Y for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:49:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VN-00051t-Pb for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:30 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:27582) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VM-0008Nw-5B for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:29 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXslg013624; Wed, 22 Dec 2021 19:42:13 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=0dqufT9N2lURz11n/Lo9vKP+ln57ilplyhjlPtBAmHM=; b=WYyeMDDcNBgPov9naP/SEI2uyG8JEHT1WhYnllbb2O+pl0QJXciSRXdK9iuTnk7+UWuZ K+iBquIjUgxsOzPIw+10BJgOVWu6SUzf1FuxXYNPOS4C/CPB7RWj5fcmgZOIiYNnZb/G s+iaq875Z11ckCReQKzfn+H8CiAdoZ/j/lo/2nr0XxAqbeQCDSK57tw3dh3CTQcmOUhZ rShtS+1PkgF0waPBBHQ/91T1b8IvYkEfSiKT+bR9/dO8ax94zC+La6TautoEGYetYpPO NyNNIISwKa8E+qCEqtZbrcXFLyKuOb9Vk22v8/cQR9DpQKq4V9qeh84wHdDcIfwjbiyn 2A== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tm4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:12 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelTi030497; Wed, 22 Dec 2021 19:42:11 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2049.outbound.protection.outlook.com [104.47.56.49]) by userp3020.oracle.com with ESMTP id 3d193qamws-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d7r4AM5u/KRjcPZhqFya+85HuMpZ1fUANUiQcub7oC3SVpZTsQ5L4YaJDi9ZNnNvgtPBClATlrxctdqvocu4ncHfiTPUMKMEkrkaYgvHUkQLUXAtotqqpAZOCJlFpawUZvWnDvN8jpAKC/8y73K22UY6ypLAiISvFx8DoISBSK8hewDjdfkV/My3VhNkFYVaViwXpm8k0Mq24AbK4xFIKkACuXT71NFr0ZQluckcYfitV2PNbpdmNSFmOy/vluk29qZmEFxH3rrRqQr/ev9U6YwPqItCXYhXabgGNyUQEPAUBh67YACezccZ37q3w7tBgqnaYqTLdyS6Ucsr3PJn+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0dqufT9N2lURz11n/Lo9vKP+ln57ilplyhjlPtBAmHM=; b=LbuLl+SYXp9rGxDaoyRUbPEfx2O3HFNvbhd6+uYnczM+iHzKpfSj5snWTSvBAIB1uQp6xgLKSQJlCg8XKeNxh6pwWtHbfPzPMb+M1yYCTMSBYDpDTlcQMCaAItysqy3DW4bW3rxPYIEGie3xd1GgIYlGVG36SZ3ULQ0FgJILtnJwou6Tc41e2ZFmeDZG+wjMrZuP37zahrQPoFPN2V+qUeOfzk32KIMWglEzEl3BwmNJOO2Ay5o/FJ5pIDxMU+g73md8qM9smvBDUxqgL+IW9Vmu2WTIPtBgYtIK6uURcyjNulDe2e+Q9QfduCpkoN0IHXgdfw20sDonjZqk9mUmWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0dqufT9N2lURz11n/Lo9vKP+ln57ilplyhjlPtBAmHM=; b=tSAg9L4bKLSa7p5Z7+JTBuAobwmkl3Ub6BIFH+sJWm6NCBreLCfvuPoxLOyqvmCnRWXpv9V0yL8rG8ibIm5+DwxDWtFPyCiuvnf/rWyVUuPjzUSJv34d1h7aU6ihsiGLRp6h53okrsM7J4kUhorvSEgoj6Qp946PP5/QhZSO1K4= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:06 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:06 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 23/29] vhost: reset vhost devices for cpr Date: Wed, 22 Dec 2021 11:05:28 -0800 Message-Id: <1640199934-455149-24-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b99d151a-a3df-4b2c-46c9-08d9c58322a1 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vo2Bov4c9ijZS/Q5Ha0FqX3qCff8UrW4qMFJoAQGkqDDwMKliBmD9k51C/QjZ7ghECbK6JKnmyS13wEGqFzEMqdpwS4PfupbEwesZCl8U9DPBSlNIJp1X3we/d+HXmRkjy+lH5MdTZfeiCdc2OFWjtGQiXCfCreEV51B3WT9PQCf16H4xELiPjpK8hZuN28Jbu50tF0sQ0g+AyN8Jk4W7O7oUdhyQExZ5SokLW7F+OzaYfgHD8cIcreYDhqoy7GajrlDjsbzR4TnJs8G/VINFe/4p6oHByHavxP6iyemwfDk2ZBkVQwUcgqI8/YmwhiuQzB0w2aISRx1WFMej4prCulqV78vrM0GvBC7sPyQmDl7s2zvV8kY02fFV9J0ekaWZtwdFSFrAT7iGhU8LOt2kaQqBdWeOhpAJkcfwJetTPFmOrUloQbeEHhrXP4gg+rGO7/uR3Lsya7si22jV4uPa/97AXOBdejE17+3Jf/j5+/csdxsD0PPnjEyE6jYyYsDYcaopDozb6JjuT5O+MyQLeCoG5ecNBL09z1/UOysTwt24SoB0bs07OgahhpbllyXTJAdXTWu1MpOnb3/DRg3HWUYQn9XVZeiKrj5MydpS/GrjER3VSL0CmgHd7auun2gk7JNXvhgW15RAlrPi96wStdzI2z2rqWy0FfNkuX0yr8sS6JSryTIiZ1Y9nt+pZtYXUxdTpNydGtHmLyP2/oOJg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: IdquaXF+V+Nu+TBfLOFo6Gub32nJEQTIjOgjeCKQ7f+ohQjNrmUrifSrFFhLYw5xwhFcfiszcB5lOin9HV1vFNbPv7QwHc7qzNsCNNIemLCyzz3sguzGxqRX2uoun5rkt1IM/Ynx4pNBBhPqKCYUPfduLxYAykrygQvsCxiFexGYZHKt9fmk8oLbNqaKNF2fUWIkXiHRFQJxcRkSZcGNIwCRfb+IM0zdV/c52wqs+Z29+SiGyeB+cPIOA7mQpnuUSvOcBtiBtRVF0nsmafhL+DoPPlN9rZRIVlsQGHQRxwRuylgjqwgPOKhQF7a+RPrpcobT6te42s1Ueli2aS4zKjZnkTzQP1C9Bm7tdZYLYVULJPyxagTowHrABJzMQ/wYWvsfcv1EFxBhEqX/AtTYsaSAlA47M7W+WhxLcc5U4ayzi/WydH9WyuSM7tDSonjIDQT12QYWy7TgHOQ6cGDLNsCra1/dq++IS41QDp8yVHsWtJuJGRz6Ih6cX1tgB6+dZawk8IC53SxKq1APR55ddhT/9UYh3wd+mJhOApDP5oU4Ixs/aUkmeWTsJ/C1g05qZH/ZY5Q25TvqDCG9cdAY5P32sFvUke0K6PTlmefmiQ4adDw0twnS5vLMuBCJBE1n2FdHzb7c1BPgXzmwod0rw3xkQN/V6FPs2SkAcTx05MXdTKHViaVrH3yJZ65KvoAjua2yZaRhYXxsnwpKd/K2iIXsgaInaIpDgkzOkMf0r5w0hnGOIXy+4JL7Qxiz9jzRkna8LLfVmKA27fYDwlYdU3O2v4fXnDKcgfnFAr9aU+BkbslA4z6TePR7GHMCjWLUYuaiUaeI7SlAi0Jor7wjYzq76dFhhf/VPI/iAnypYk3JgMUs6gBvsZVx/v1Yrk5P7FHOUYYHRNop66bXTMzHJHslR9rayTpVpch/knb6o8PugKZmhveTN+CALJuviIt9pDSTPY/pVZEtqQADUTxUNZWtvKbZnAOT3v4PMLnRdi+erPkeU2IDQEYRq5epyBsVDHRaUZ68X1q3MbCdB+r1TUnOnJAaY/jHkQcD5G3S/KRajSu/GUQT8QtmjGRI28bBLxjAcItg9R2+h5WCGNDgHpNOPqef6e9jOPw0artFBVD/CPTGE1uLBMIfpQtrdeXP+lHIaghka0flnLLHVjSusxPwEsGMZGfVKJVDaw/NSzfzDTM+ZDVcXDxw/1iYTzUpWEqgf0hbyvpl1BvmYKTSw8ZgPnDiiNGrkM3rHTLQZvtRXU7p9hH1+HgSZOyRYGcmtPBQrikFSd9jnc5PxhiQL5TxToSuuvuUqgvRmfMHBub3tfjdfYkeyXcZxj8pzQAFOzcQdt8SBW6YMJvC5ZxAyZX4+ENm9Qh53H8z0ljwLLvjjLnwCDlYvh3VXYJoDUELN6gcDXB3xzffQ5iYXMkMDBHj21CWliFMzeMsbbBLue9dO2tm3xFrWnLlOXuQR7PCwcTU4WNAM7fdpitnuis4VbGhE/L2qfLJVMnY8adZ3PndqlS8sv0krML2pLctZPJBtaSZJmE0d0t9wK3FN49kiJq1yqF3GWZMkSScsft0mlQhP09MbVgC58NPTwn3qE3enZfETWV4knWqu5UkL5Cuq+5gVTTeeClEQt84yKd10b9UbO9uIYoz8QJXS2eXNSw5zUIhOsVC2otP0XL4Gt4x7w== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b99d151a-a3df-4b2c-46c9-08d9c58322a1 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:06.3580 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2iIcuBVO6MXtsvfzGX3QeiIJLic0Yh0tdUGyk57BZ41v7DI5XmxsvyySRMpFkiXrTrhkYgq4m9ljoa7LUAr73T6rL57e9f66ccmPohMVCtk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: eJXna8xeCu24WBwaLqU2qmM6AiXx6vUi X-Proofpoint-ORIG-GUID: eJXna8xeCu24WBwaLqU2qmM6AiXx6vUi 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 --- hw/virtio/vhost.c | 11 +++++++++++ include/hw/virtio/vhost.h | 1 + migration/cpr.c | 2 ++ 3 files changed, 14 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 20913cf..35d0836 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1853,6 +1853,17 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev) hdev->vdev = NULL; } +void vhost_dev_reset_all(void) +{ + struct vhost_dev *dev; + + QLIST_FOREACH(dev, &vhost_devices, entry) { + if (dev->vhost_ops->vhost_reset_device(dev) < 0) { + VHOST_OPS_DEBUG("vhost_reset_device failed"); + } + } +} + int vhost_net_set_backend(struct vhost_dev *hdev, struct vhost_vring_file *file) { diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index 58a73e7..d436eba 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -114,6 +114,7 @@ int vhost_dev_init(struct vhost_dev *hdev, void *opaque, void vhost_dev_cleanup(struct vhost_dev *hdev); int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev); void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev); +void vhost_dev_reset_all(void); int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev); void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev); diff --git a/migration/cpr.c b/migration/cpr.c index cee82cf..4229c17 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -8,6 +8,7 @@ #include "qemu/osdep.h" #include "exec/memory.h" #include "hw/vfio/vfio-common.h" +#include "hw/virtio/vhost.h" #include "io/channel-buffer.h" #include "io/channel-file.h" #include "migration.h" @@ -109,6 +110,7 @@ void qmp_cpr_exec(strList *args, Error **errp) if (cpr_state_save(errp)) { return; } + vhost_dev_reset_all(); qemu_system_exec_request(args); } From patchwork Wed Dec 22 19:05:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572329 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=uXXC5IO2; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=T36Brc6K; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3xP0m51z9s3q for ; Thu, 23 Dec 2021 06:56:41 +1100 (AEDT) Received: from localhost ([::1]:60376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07j4-0002oK-UQ for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:56:38 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55836) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VN-00050m-9o for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:29 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:26734) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VL-0008Ng-JR for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:28 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsAh013618; Wed, 22 Dec 2021 19:42:12 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=kveEkWkvxeKAh6rfynJ5Eui2f/zOXWIb5V9hytChImc=; b=uXXC5IO2TT70/cEKkZrWPReARzw8VK0KPUOosxpqXiUcx0LE1K0BaTegpnE2NINS3ipb oDHSolOrZvPUbcChXhtnmx7i+xAPPdKKrFP58lQxyQWAhHb6zehZg92CdwNC3bC1jgQ7 6tr+zYp92URrmRvd2mOJFhpAoHs9mM5UQgADBWmg/t5oZ4zm9MbO6EOZLMlLupBHzoyi gXSKmeCSLTmTsRU/Ibqbhe464oI61Duz+A0TEdlVD63KNUIFhRcsd3G/mvphAY/ThQdi FMSHR646ym0Fn1shzMrz+Y/Ewx4isWIdSu6IQjI/sc29BeXUugK+GDr2zT7B3CvSJvHU eg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tm3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:12 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqP030437; Wed, 22 Dec 2021 19:42:11 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EQF4DlaMv07WzpIlCnRfQuYORHLRfmvznC3bwcQ0tFFT/3fWobsApdTHbq3t6LAubrFQpyr4w0waXwj1DQ/uLNMu+u5ygkDR6OHHjZqWm5j8iKc8iagEjrvn44wTjul+664Rw2TpLOYimloIbWrNTyrIC4myIzzDxB/UrKYrkpCGDKFOiw9tdBaf/LYs3UpxM5sDSNJVCVEkUUC3zOmlf6jqi7BDddnNkJWJcf0mQhZ9ARrVaXXb9SUBy0LAG3n2pdrutSfOee+ExWobOulmiEsd1gXm/jYOVfgX43STJlb2t2YnkZO2FjzF6x6ZkXXS9riNCQ/kICRbpAlGr9q1Yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kveEkWkvxeKAh6rfynJ5Eui2f/zOXWIb5V9hytChImc=; b=ZKiSISY3HPGHL+XCe/6gxAdkkmzgG1Y5xTdJzMt2vkqVtOTtEB5j09lDbu6L8GsZd4OtOlS2rUX6hSjg9Mb6xSdcuLRgjXErQV8KQ0CORdiiYRpJg1PYeTA/5w6XNk+Lo9pnzsIFN2XB6ZdOjf1IBa+y/ekggJNLvlX3+cbaVZN3VFPoNlPQky8q98RJt0goL4rdHCFQxjWUQ2AKUAqsqdJFICxDs3Y3lDPq/6xiUfkOm/M0KX4TamrBzH5OslNYEOdZcyYycvjSfk+PxcaSwkyf6GsZo4DYQV5vKtQ5NNfUvNDgQUZnjlpoHTp0X9AOSWpbdYPuctL88+pAoSu4Fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kveEkWkvxeKAh6rfynJ5Eui2f/zOXWIb5V9hytChImc=; b=T36Brc6KxTzWYRtg+gKk6Tqz8Vwkq/RKkbXhFi5Ox9wAKGT2jij0DtyPhc4UJljSZcgMCKNvuUwCik4C0KjS0U3AwNNdclK8cN95S0RERCBqG2N9sBiKu1iPVF84JKKQfCC0Y21lcqTWEuBvD1N8fkaA4VjUbQSbJh0vsQVHTSI= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:06 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:06 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 24/29] loader: suppress rom_reset during cpr Date: Wed, 22 Dec 2021 11:05:29 -0800 Message-Id: <1640199934-455149-25-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 084a1bb1-1405-46fd-0795-08d9c58322e4 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uBQxSqEim97fIUHdOnnH+H/PepiRobDekmbnjnoaUTfB4mi7eL6GW2ne7/g9ZFL2cZAiqFkS5aV/bERjZ5+AV8/SqWjzX98qn+XSUn+/pWEJzqgCKW6K//K6/muy1ishhPce8vDSATX+L0VukrVUn5juwWSW4GQkXYjN4Ch2BMa0pTOjYyqEY7scLj7znhg0kZ41gLnXL9TYTjJRtU9J8mwJMfxMHcj32/GirnRDWNtkSNRDTdbg4F13REIDHl0pU56g8GQxXBhm4oVmbRSn9fMRvBhl3RuJ9dsdwccn+xlIGkQkoJdYZ2UesUPAlmCAxHXCXa2V1UjcB6xexqmpWKfepOIvcKvyR1o1gEwvRTC+INQs8Fu7m+OgApecIwFnQeKVtgLkZJh1KbGmFuddJl70SYpmfFSzLb1mFhmkJabQPButIivg86AyuSNrCungwqqeQF+5ZASLhQr9y+NA+g/3DsFFqGeIYqPa7F99NGiY9z+9s3pDOXfVjNWWOmLEdyxo/I+taSL9SXiJRVo1sA8J8tpc1ygHx9YbwO2nUoMuq5+Ga1egfxUSuHCo/12MalhP9k1zDz1qo10GwBZ2MGbfh17n+bbrfdfq5Md1O4ACeO6JPcVFgjIjGVc34Sp/hMXC2C7fZ5pDA6p0wduBNYLOiDSZA/tec9aMXpdF1FWrgA81fe/bgdV+InUYGArkLYbC1pCJlvWG8gNwIkWk5A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: loVVwl2wdMiLYP2wpaqrEAeOhKaGkxSSnDUHUByRRTC5VHt3SjzJMbnSlPZ2AabHJfx0W+vKATuPa8G/myp57G7/4ikdVWV2HSImhTew4AoxxzPcMHDqNEJvWIiIfjI+OFSMWsXrhK+IVeKnyu7BxYhA5y6UhxGmLMtMJ0NuQtyYDm/DuEQskr6wogL0Nqxlo6RMxOBe8b745Oxe9mX7FTIoqHdMABqWoKYm8dOieIAVtJQtDfqDz/DSPhYNbhdVk2kF+npCpmoyqSIpnd0HxC1rgxMEGg9pSm2W6IHrQeTX09OWp8pJspLmHDmiSJQw6rc5IEoAJONIHi0yHCxhICfgwGlSVFxBwdXhuJlKlvEiWssfnBs5C3jVGm9Gd709lwMIw8XQd8kiWmrudFaOx02qGgI7CVEdF5shtdqaxKJM7jqD9CU5Fx6K5tbnShSYZLT2iSxA0TeJ136IIojB0OvZxbJkRufSVJupv2YlV48waXqFcmpMQCWv85lZ1L1ORnc+r5cG3vpfjqJrq2FmXu+tYQjJ3anATru/Mm/kRuDfwwn5OHVWdM39wurvWzi6FRAQl5syZk1o0ezzJtbcqOV1winje0Mv9E3AfFJgL8ggbIxiswyi9Vl3vhVcpPBr8RBbBynVATwBx0BdCFtVVyxVasw1uGEqQ0jXoyOi2HTU4G3HMBsJv/UUbbCh3u7O4yNujZEE5lr7EZVGp2TRFJw8BGXqpI5ssWPZM20QwgeicwScJrnJtyVeGLC6aQhcAq0xjFC60vNuvPIWObwgOSqKvLZhQn3IzXW2zDCA+TCaCuVNk24fLD6poMcztro959I/fWIJxNuGkxwfbOr4ArQg8nUuIHcUdV2zwUHjYdFvG80qwr2DBDhNYfeU0hh/UCJwZj82njNYRNowbigTX0rTBeGsmUmJiP/MGPpEGBQW93LJMJD2mOvHixGUYobchuF3/MR34G6RWeVZNsw/SxaX8L328e4T1q0P5AhGtmtX9YZ6IgXH3l9ZVWhNh6DNQfHzUKOVYUTJ49HTpe8rwX+qMvObn8i/JNkyg+MdcRk5FxFtymCF7ACSlsGtJbtLqoZbNqjzXesuXxD9WSowt2sUI2fR3kstF02yJQrTeyM4MTkico1/lrZIEwsDR7K8nbBwWohx2dH29u7vT79ATmnxogB5vmrQlMi6yAQ660y+gOT32+yvPqT86SMOWib3NOdLc5Szccmttv1nBNcK9Wh/lMU8bebNEZIAMTbJItkQeQ/Gd8Rv15xCdTxDdwLw2wwNFTmTJlv/tJ5tfIJEBgfkOBnkS7tVWQ4lP8QmUtTBaVM0FK2/6qT+NsSLoHZRpwmv7TqVK39iOuwe3HqrQiOXcqufU4onvJwaNc5eZNu4zVH0JCS83XzhsCqxiKS17O21jYyZA3vGGVGOxBd4DtqeemdAvdkRru68B6pud3O4yrJTAxqd0dKWomuGn0ErCt/259iXMLqSn96FNxXgozFl3R5VZgcCWgmgVCgUr4lZztj/OUVlZBUetUw8tota256f5GMHdhxiGBbbEJNhpLmt7xvPVQRcSuKXH7eZU2dv7vyHQozuW2Ah0WSrTzY4JYtsmCIHC6cZuPoZoiVXaj57g2J1DcTgaL4Bh3cwax8FKWk8zZ7rXPcqSBr/QNY4F+J0XiGvtcbqrFoYn0Pv1g== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 084a1bb1-1405-46fd-0795-08d9c58322e4 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:06.8267 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2Ttr96z3+ISo1iFkCj+xBN1+1z/aVFKD5MSNaZfKrt/dG8Rmm8b6Z9Zid0DdvZYDxsbGd0rcbCd+sxYrf3zN/+wyO7392dKvE5xihVfrOgc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: LiYsv7TXGr11aE67xLrEGrla9izG1uit X-Proofpoint-ORIG-GUID: LiYsv7TXGr11aE67xLrEGrla9izG1uit 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Reported-by: Zheng Chuan Signed-off-by: Steve Sistare --- hw/core/loader.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index 052a0fd..e88fab2 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -52,6 +52,7 @@ #include "hw/hw.h" #include "disas/disas.h" #include "migration/vmstate.h" +#include "migration/cpr.h" #include "monitor/monitor.h" #include "sysemu/reset.h" #include "sysemu/sysemu.h" @@ -1137,6 +1138,7 @@ int rom_add_option(const char *file, int32_t bootindex) static void rom_reset(void *unused) { Rom *rom; + bool cpr_is_active = (cpr_get_mode() != CPR_MODE_NONE); QTAILQ_FOREACH(rom, &roms, next) { if (rom->fw_file) { @@ -1147,7 +1149,7 @@ static void rom_reset(void *unused) * the data in during the next incoming migration in all cases. Note * that some of those RAMs can actually be modified by the guest. */ - if (runstate_check(RUN_STATE_INMIGRATE)) { + if (runstate_check(RUN_STATE_INMIGRATE) || cpr_is_active) { if (rom->data && rom->isrom) { /* * Free it so that a rom_reset after migration doesn't From patchwork Wed Dec 22 19:05:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572332 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=0SaQelE5; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=XE4ii9Cx; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK41Q728sz9s0r for ; Thu, 23 Dec 2021 07:00:10 +1100 (AEDT) Received: from localhost ([::1]:39446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07mS-0007rv-Pj for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:00:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VO-00052Q-M1 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:31 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:27964) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VM-0008O9-F8 for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:30 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXxKI028514; Wed, 22 Dec 2021 19:42:13 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=QFFQQ75FhmFktlCsGgHNOoVoT54FA8jKZtFqxdzItZg=; b=0SaQelE5SpGTkc1tNJquXvpT0yaJ51r8b02PWLPEr7BcBzPH+A+jTHZs5+vDZxcZUxUV fJnX2v+hG12vYbdvRsDN+sE0QXKt5VX+iXE84i3U7HtYd17QH3ziPtfbtngkpYe55hv9 jkfq9K0eSk6KqqCCe5n9kuQHIlYiEx3w3DcUTZa3JysuqkHlwh4y8ts4DwrgYXahq9C6 +WRu4PV2LjVUUjm7MC3dSHO1KPaXX38fh4C6KzIWfafDlVR6LzYslRUhNYro3G78O1EU P85Lj5ws0SH1eKWODoGrWqUagEMZ0Wyw84iDNy+mx0EZk9HwC46T5soMAgaTValuNuZ0 dg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397kf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:13 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqQ030437; Wed, 22 Dec 2021 19:42:12 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ciLQIOP6cyc702+C3suIiWe9P5xtsNosmcXJnX3TbDFQjmwB26XkCCvOR33sfcQa5HMxUDW+sUP7cMusrZViH5Iqgu/5gugnprUQ158SmwnjaLoPkzDkNtVvv9+eZNTfC3g/7RB8PYB2brzeZvTeUENF9xwdR/p51kCHBe9NJKOlw8Y7tUJE71Xu4rnSCVblqNcKXGvX+00pgi9l2k4rNPG6y7GEifgyvC02ZGo3dqb0EYcFHPzHVSavUb24Xj9HuCOnL6J95BmaBEoSGCym3UW1nSKleKxATErQHleh4GjtxCLuMBw9TweGgfEgKPehIH4gsbXiX+dmuC+tE7uwFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QFFQQ75FhmFktlCsGgHNOoVoT54FA8jKZtFqxdzItZg=; b=Zf3BC4+scmRwyf49I/D9KTHy0AR+P9rtTBpK5v4lhSr+3QjFO+Q9mTETb1qk9dQMb31rB0R7Ueql1i1c3sKLHFACEzRgZ0LcUyXbMaNyB+AADislBBPnw6Q5UZP3JhoXCFcnuNgIzLzHzXtWsjFVTwBY1g+6G23YQTcfiWRJkSa0pBj2AkK2SFhq4SKMXnf25ScmCT58q5JQREL4wzVzZhWhb1MQncyrtkW/TdKZloDlxLwAUuULUXeQcv1jmioabmqnMfrh/FUy7Dp5lrF8Dam0rU73ysn+iHRBIxtPzUTYXx+nUmOic/8HVXyrwSCfml7Nm9Oulx6UdFGeCn4caQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QFFQQ75FhmFktlCsGgHNOoVoT54FA8jKZtFqxdzItZg=; b=XE4ii9CxcWjExNW2C9h1Egnov6I8DUDVQwsBzrN9mfzKDzp3dtH5tTMAVYO0YNdwDNxPnBsOV5k13iF/WtZa1nP3hmsE3mdyZQNsC7pEiAHulVPKgp1gLqE78+ES9TuQu3ygNjQt9/QVXGaw+GDkWzaG3lunUi2AatTuG3cQ3tc= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:07 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:07 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 25/29] chardev: cpr framework Date: Wed, 22 Dec 2021 11:05:30 -0800 Message-Id: <1640199934-455149-26-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 80d8b977-81fa-4ac6-c85e-08d9c5832326 X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:147; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1/nyS83jwFPqwuEkv2x2eITwIpax1e3hYMAihfqKEOCqTmGekq0/7VbpuBdNjqhSoRBKAX1IAjgnQiVNNx5sfxoEU8aASBzjPBAAN9lLxDOWLYu8yb9h5nRwNfOTplP2mGgBa5w0Vc50wcWEgHjjaPG9SrxlRmj0dEUstt3XXHHeDLllcXuDnqipkAMOqF41MaJpu/KypyMq8gZTXfZlT4Wv+LTMuR2sETtYK5qQKlwoNnn5VIPHiwp6e7+PybRrXAC2qKCfkgM9B4EL3jKqe5UkhZ3c4imDKjEj42mWlQ7SnLD7+x+VuCKdUFWNb6B3dAtAMIuy0QNsi+bxGX6qZoWZRXXv5p0skf1zBzyRRlYszfrK0LC1Y93LI9isrj9DmJZ1jsi2jOqG3OyILryiArEIiA9eeMWQAFhTZjAdVn9kCXBSnzi+8+egH9RK3LJKXeNpEgoicB47GrRi0v8Gfc0TdjBOz54pomgb6HsYdyTk2jjYwN97L1D72BNrZw6XT4/9Vm3BlEi8hAJKeMaABjFzqzetRJvoWF0uBWpyil40BrL/5s/ateJqY/gCJpLvxuV2qNhkHbyWP+ROfmwtOswebNeqKbBF/NhwgX8+GQ9KQg5gsTiL1ZsagAliUBTjpCePQ833RPA+6Vhmd/Iqq7ycKXiDwB7xbPhfrJBUOeoBRbrE0Nu3uNs2sDfg601orO0fwh80Yr0Yf7unj2czKg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: iv3hjP/3QZVaFzej19xi5rrjbbDJSDrjo1MswWgHWPFdaw5YXqDyj6itAtYq7ETjfw41V6+0HXIXTJvvub12TWvN7ynXsDJLTDsXJENScpd79+dyYtsf4XuVjG5JX/mHBBkKziy/vp2N5yIZz8th93VxL4UqtHN+nEH9niVI/UMXV7Yr5EHfE5tYyH9/syY8dpyEE78JH2LZ67HQryINdxzzGKLlDvGMBe8b7V0gBHe6nA+x/Lxag+4Oyt2NrpOzDEmBtXXS/HFgdQ+GYtgdWFvJyMSTaz3BlUNloDAhL1yQU3kZDMB2TbaqWSIbq7zhvu1lkyUlYVSeC58EcP+er2oS4lDL9Hy0rqkSxrGNOJaA4p4ogFyQxUxj0Oq66x5dGYluHi+1Cv5EKH3Iyy4JwZnRWBI7XI3uMMxPy0PEeMOeoJ4/dczvvN/RGIwnUhfl+W+YFLy4mGDKkztS95JeQyAgEK4e9yqyV04OYGg1G5WniThWpb6ZtFpaTfYQ/+2xajAsf2FfgsoW9phasgSx8VK3tdWpX3EvxP9AtOqF+N2YsFhfPWMuJ8iMRxRTdRtBPadnqDCog4B9xnRGFlb7eAiQrbSrgbKqumxvM9ZnM+mjb78EGi54CYMjKVu9n2MPcEQ1ciras308Xvdd22MCy9LTpWXL1BcCQVqz7SFnguLZgPIZQfYOQ/SWFZIRs998+UIPJA8uCy8G0CkS4hoZN2OCwEHvIgliNxeIcV6aUBtzYUxK1G4GM1+9QRffB8M8mSJ0hzm6TMJUZ6o/4/G2+LsS9BPj+oWsCY2/hlBZb9STzdASbdQbfLbpRnZtLEHC1x482emCjNweqWGU7UMhXcDg7yb6EcVd4t3CGkixL/+TKfwQoJKLTQjO5h51FIr1ZeapweRSFLzsIkiqIBfcNtWgqvcsURcLEQwdtvABrbaOsBARSfLvuHBhW6EfjYrXYgzlQwbfCIzENFFqV8Z2F0W773WSGZ8cbtYrU6EzGA7e59kUm4RBn19T2C28xH01nniCtTnGfj76WV398FT5W4byuQdD8enqceUxu1FYvaF+zdunCqxn+MLDGuk3gb/pIZG8xCst6yneQ/nxyZFSroDMcsDV9TBYZkR1/ii46QQB1Wj4jafGuZSGHPVvqvz5qyEeF/AfD3RRTTLMuS1iEBSn3vWrer8tUdRWmkFWss1FOy45I9aQm/XRvnYECHqq+OzjdnOx+Ja6IqT1zgKWfOrkOKJuVCX9V5rLDlYuRXDQy7AzWCRoRxjMVvvc24FKRA8iFj4gErcq3IEYQHcvtvBwfs49/LnwHYso7+xXNLI2Ns0t1cLn21WuEF5YifHpLFcDaBSlSX/RnDNGpuitMRzsgmS97+zW5uKyyfPjGkgvXQp5FtjYs4ufle6UTbWqypoPp11wOqo0RZ+WUq+md7a0ZMYJSiMBw5CE8tvCWdzctl/4wbx4C/eKri6SnluTty+NL7+P/7ud2C2jRhVakjB2p0usWfBTRKlE2+Usc+tBjaO3tsNhE5pXDcImo3XgWqJJSFW5REHGtdaCaGF0pwOGC05Uo1T7j5xzRssc7sycBDOnscJIEZPS1r40o7LSB6ZXxGmXiljhmpd0nUL65jgWBT7badwJ6hC1M14qO1OnFNmwHdozgZ3LgIUFlQCQJ4C9I2WLWo8pNPXZgdR6uQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 80d8b977-81fa-4ac6-c85e-08d9c5832326 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:07.3580 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rEBgtUn7ejMJDA0Zhk2pvAfddLHb0rG6+qgHUbCjC/lZVyQNOKen7EgDYgsmBSeZvU2dVX4QnjtsWUEWWkj3/LP/04oOD0+52EqNH/CyhOA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: iQrxIY69WiuBa8QHlkUHQhKALL5JEK1U X-Proofpoint-GUID: iQrxIY69WiuBa8QHlkUHQhKALL5JEK1U 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add QEMU_CHAR_FEATURE_CPR for devices that support cpr. Add the chardev reopen-on-cpr option for devices that can be closed on cpr and reopened after exec. cpr is allowed only if either QEMU_CHAR_FEATURE_CPR or reopen-on-cpr is set for all chardevs in the configuration. Signed-off-by: Steve Sistare --- chardev/char.c | 45 ++++++++++++++++++++++++++++++++++++++++++--- include/chardev/char.h | 5 +++++ migration/cpr.c | 1 + qapi/char.json | 7 ++++++- qemu-options.hx | 26 ++++++++++++++++++++++---- 5 files changed, 76 insertions(+), 8 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 0169d8d..230bf16 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -36,6 +36,7 @@ #include "qemu/help_option.h" #include "qemu/module.h" #include "qemu/option.h" +#include "migration/cpr.h" #include "qemu/id.h" #include "qemu/coroutine.h" #include "qemu/yank.h" @@ -240,15 +241,24 @@ static void qemu_char_open(Chardev *chr, ChardevBackend *backend, /* Any ChardevCommon member would work */ ChardevCommon *common = backend ? backend->u.null.data : NULL; + chr->reopen_on_cpr = (common && common->reopen_on_cpr); + if (common && common->has_logfile) { int flags = O_WRONLY; + g_autofree char *fdname = g_strdup_printf("%s_log", chr->label); if (common->has_logappend && common->logappend) { flags |= O_APPEND; } else { flags |= O_TRUNC; } - chr->logfd = qemu_create(common->logfile, flags, 0666, errp); + chr->logfd = cpr_find_fd(fdname, 0); + if (chr->logfd < 0) { + chr->logfd = qemu_create(common->logfile, flags, 0666, errp); + if (!chr->reopen_on_cpr) { + cpr_save_fd(fdname, 0, chr->logfd); + } + } if (chr->logfd < 0) { return; } @@ -297,11 +307,15 @@ static void char_finalize(Object *obj) if (chr->be) { chr->be->chr = NULL; } - g_free(chr->filename); - g_free(chr->label); if (chr->logfd != -1) { + g_autofree char *fdname = g_strdup_printf("%s_log", chr->label); + if (!chr->reopen_on_cpr) { + cpr_delete_fd(fdname, 0); + } close(chr->logfd); } + g_free(chr->filename); + g_free(chr->label); qemu_mutex_destroy(&chr->chr_write_lock); } @@ -501,6 +515,8 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend) backend->has_logappend = true; backend->logappend = qemu_opt_get_bool(opts, "logappend", false); + + backend->reopen_on_cpr = qemu_opt_get_bool(opts, "reopen-on-cpr", false); } static const ChardevClass *char_get_class(const char *driver, Error **errp) @@ -942,6 +958,9 @@ QemuOptsList qemu_chardev_opts = { },{ .name = "abstract", .type = QEMU_OPT_BOOL, + },{ + .name = "reopen-on-cpr", + .type = QEMU_OPT_BOOL, #endif }, { /* end of list */ } @@ -1217,6 +1236,26 @@ GSource *qemu_chr_timeout_add_ms(Chardev *chr, guint ms, return source; } +static int chr_cpr_capable(Object *obj, void *opaque) +{ + Chardev *chr = (Chardev *)obj; + Error **errp = opaque; + + if (qemu_chr_has_feature(chr, QEMU_CHAR_FEATURE_CPR) || + chr->reopen_on_cpr) { + return 0; + } + error_setg(errp, + "chardev %s -> %s is not capable of cpr. See reopen-on-cpr", + chr->label, chr->filename); + return -1; +} + +bool qemu_chr_is_cpr_capable(Error **errp) +{ + return !object_child_foreach(get_chardevs_root(), chr_cpr_capable, errp); +} + void qemu_chr_cleanup(void) { object_unparent(get_chardevs_root()); diff --git a/include/chardev/char.h b/include/chardev/char.h index a319b5f..299e129 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, QEMU_CHAR_FEATURE_LAST, } ChardevFeature; @@ -67,6 +69,7 @@ struct Chardev { int be_open; /* used to coordinate the chardev-change special-case: */ bool handover_yank_instance; + bool reopen_on_cpr; GSource *gsource; GMainContext *gcontext; DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST); @@ -323,4 +326,6 @@ void resume_mux_open(void); /* console.c */ void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend, Error **errp); +bool qemu_chr_is_cpr_capable(Error **errp); + #endif diff --git a/migration/cpr.c b/migration/cpr.c index 4229c17..3bda83e 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -6,6 +6,7 @@ */ #include "qemu/osdep.h" +#include "chardev/char.h" #include "exec/memory.h" #include "hw/vfio/vfio-common.h" #include "hw/virtio/vhost.h" diff --git a/qapi/char.json b/qapi/char.json index 7b42151..dfa6baf 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 after +# cpr-exec. Set this to allow CPR on a device that does not +# support QEMU_CHAR_FEATURE_CPR. defaults to false. +# since 6.2. # # Since: 2.6 ## { 'struct': 'ChardevCommon', 'data': { '*logfile': 'str', - '*logappend': 'bool' } } + '*logappend': 'bool', + '*reopen-on-cpr': 'bool' } } ## # @ChardevFile: diff --git a/qemu-options.hx b/qemu-options.hx index 33c8173..1859b55 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3227,43 +3227,57 @@ DEFHEADING(Character device options:) DEF("chardev", HAS_ARG, QEMU_OPTION_chardev, "-chardev help\n" - "-chardev null,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + "-chardev null,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off][,reopen-on-cpr=on|off]\n" "-chardev socket,id=id[,host=host],port=port[,to=to][,ipv4=on|off][,ipv6=on|off][,nodelay=on|off]\n" " [,server=on|off][,wait=on|off][,telnet=on|off][,websocket=on|off][,reconnect=seconds][,mux=on|off]\n" - " [,logfile=PATH][,logappend=on|off][,tls-creds=ID][,tls-authz=ID] (tcp)\n" + " [,logfile=PATH][,logappend=on|off][,tls-creds=ID][,tls-authz=ID][,reopen-on-cpr=on|off] (tcp)\n" "-chardev socket,id=id,path=path[,server=on|off][,wait=on|off][,telnet=on|off][,websocket=on|off][,reconnect=seconds]\n" - " [,mux=on|off][,logfile=PATH][,logappend=on|off][,abstract=on|off][,tight=on|off] (unix)\n" + " [,mux=on|off][,logfile=PATH][,logappend=on|off][,abstract=on|off][,tight=on|off][,reopen-on-cpr=on|off] (unix)\n" "-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]\n" " [,localport=localport][,ipv4=on|off][,ipv6=on|off][,mux=on|off]\n" - " [,logfile=PATH][,logappend=on|off]\n" + " [,logfile=PATH][,logappend=on|off][,reopen-on-cpr=on|off]\n" "-chardev msmouse,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]\n" " [,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev ringbuf,id=id[,size=size][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev file,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev pipe,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" #ifdef _WIN32 "-chardev console,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" "-chardev serial,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" #else "-chardev pty,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev stdio,id=id[,mux=on|off][,signal=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" #endif #ifdef CONFIG_BRLAPI "-chardev braille,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" #endif #if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \ || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) "-chardev serial,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev tty,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" #endif #if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) "-chardev parallel,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev parport,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" #endif #if defined(CONFIG_SPICE) "-chardev spicevmc,id=id,name=name[,debug=debug][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" "-chardev spiceport,id=id,name=name[,debug=debug][,logfile=PATH][,logappend=on|off]\n" + " [,reopen-on-cpr=on|off]\n" #endif , QEMU_ARCH_ALL ) @@ -3338,6 +3352,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. + Every backend supports the ``reopen-on-cpr`` option. If on, the + devices's descriptor is closed during cpr-save, and reopened after exec. + This is useful for devices that do not support cpr. + The available backends are: ``-chardev null,id=id`` From patchwork Wed Dec 22 19:05:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572341 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=k5eLY2uL; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=zoLzQYMq; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK4KD3nL5z9s0r for ; Thu, 23 Dec 2021 07:13:52 +1100 (AEDT) Received: from localhost ([::1]:43022 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07zh-0004PY-Eh for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:13:49 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55872) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VP-00053L-8h for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:31 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:29066) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VN-0008OZ-3U for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:30 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXwoM028486; Wed, 22 Dec 2021 19:42:13 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=O1zvOkHtw2VovC7NTTfDUOwga8ADZKRv7dvwBwYKSjU=; b=k5eLY2uLQbYNVKu8gKNNuRxXEEE3pC4NUM/LiLAYSuJ/GsvNE0yUmnAz09q3zLfNaRwR hDCE3i7ktc4hsk0dSWGuQnl5+RNUTKc9t1Euj6OCFSXSU4w83kGV8RM5NolY7sg9QbxO zVaKgIUdjzLQj90w6yU/HoHYj3M15hbYIW9kp+fBY57ZZDvTNOJLN/8yQM3nxOxWM7X1 GxFOKNdnAin2FHp2ZnFclsg4NDxfGTrx7k58DITubSk5FTwOYLjszN/ArG2h82CvmglA 6hlPMjSNt4vuZTwm7zXf3ml0TjZtjMKX+jeafOTAHwzKxJkB1JJYl1YSv44QZgSnHbm0 rw== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397kh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:13 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelTj030497; Wed, 22 Dec 2021 19:42:12 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2049.outbound.protection.outlook.com [104.47.56.49]) by userp3020.oracle.com with ESMTP id 3d193qamws-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WAMZVbg9fcmOVUYC2crODMPGbSrTIGZcTwKFwgxjsFsOBjGfxUOUuE6ndlrd+I/q6Q/vU/ZLWIHbbf2Qcj4hlvWXFFNRFM66LlKcjbxVzobaofh83S0MpCDUkA111BxG2WIgvQGs6lUZrCZSeRL57WAPjvAWSNYt3BVS2xdkNRHV4TWugItJydriKZVDldn5kMRc1JTycvsuuor8JdBAhr5a4sEY9hOe/VfrQ435jVr+LqTGamtnxZVZ403BX9esu80ehPsq7ZxO7uLuHH4DYt+w44GrB6z0bv1t7pMsz3lX/47La7SuLUQR4IGfNc2Qew3XiVJzFfgmcHzIzi2zRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=O1zvOkHtw2VovC7NTTfDUOwga8ADZKRv7dvwBwYKSjU=; b=ZOcm5NOIeHpoPYxQVchIe5dZvHlJc7VHDDeL3iJbmfA8cD7PlPdzCr7IqK2Ot+WnWIIBP3jZogtK5FOpHUJbvba7J2NG560Oqfhz0cEy9whp2ZSR9pcZXLE22udVuowseeyZaX8VpvjqKHfxYrgx4+dUWrTe2d8HsXEPZYl7TDSPLI5ktko++g1L6uHEsRrjKgxPYc7X2QKMBHVVnaeiA3cL2QAh6iF7iQjC/YdvL/orV6649Bc3aTwEg90ZADGG/F0nfXLXFj/MRXzMmRUIryP5mTko+wd6XIrjgT0sFcm42MYnl09jpXYlrHIRclIHfAg6+SYclkTlVrztvb1qaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O1zvOkHtw2VovC7NTTfDUOwga8ADZKRv7dvwBwYKSjU=; b=zoLzQYMq968CNhhXNjhHvG+pBuTQsgvNRQe59NnMzj1WocmsqSBO55H8VYTA2mDpFS+yzW4uBnHAF2JPWDvTzffbVMEuSnCsEydmZvMoZErjh30V23EpVqbnpSCssxRoups4iQXjPy02Q+DKo44ge+u4DoVVOjdlmgKHQe/ksBg= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:07 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:07 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 26/29] chardev: cpr for simple devices Date: Wed, 22 Dec 2021 11:05:31 -0800 Message-Id: <1640199934-455149-27-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3d0d30a8-fa0b-4df6-9bb0-08d9c583237c X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:281; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BRYwsFwTLy+q+f4QXmW8k04SXxqX69+DsVLJmN/F5asDXND3+m1QQHUEprp783h98lMVcR9X/TBD6dLZKyuNqg2cPFoX0ZN6ig9D0kGNKICydOcoBZygiMj8on1npz8QpXgvqZ8KSJHABfKlNbhFTKCuNL0x2aeu7uwu9cre1MquWqf7YwJkxaX4Euc+Dv72anTp90ck5+BYk70Q/XgqeOl3mI89uzkHvIj5EQL77G/bB23EO54FuNxlJ6Lv9wYgDc2qNMwEiNHHIR5BdSZbjeuG7QOj0Zyt2sxVloLAez0b+9pAEi3hDcHW+wlxkm/S/J+3d32ZGUpGlEQGfrif4wD5RXPiOBtycEutyeBY8uykss7HHd11kPVx3i2GCooxT2OudI0jI+/U5dCi3mwp1Y7JAW9KI7WmOIxR7GQQg30PXPjZBCOLYBKAEcTG1wgoAUPEFoykXy4BUW3clKggMotclt3PqlFF2pMjOuH+ZuUdClhoDgMF7g593Q+klVjkigNZTbzdkDgLGEw2vNy3JqERfQMfHXFeghQmNDvkKn+r1RwDRAUaQ99bFeWTObf+kzWDiVxVlszh+pod+Q1q8c7MUgoOCBr9JZO4LcznrfWf3YWR/71YOByqJ+d9aaT1vpr1xyf7hSAv4bt0QxTKH99r2znl+DWw21Y6rl9Bc0684ou7xiIbElbSMCiUBM89TxyRxfAqJpKBCM9D819g4w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: O9tPM6IpW51i/EWypinjpQen89Ay4OxI8jPzKlJq8WUo4HnYLhQTP/AJGLf6JfBDBYW+uyr0UNvlRMTPaKXkqkVwkMUh7e8T28vGgyfbigtrCzmYsjjqo5GYMROEel6gQIxAPKNGXCrOxz35RSNi1M93SMfN2JifnraKdOf2zi8oztIlD3tHvsuGq3WCbIriZ8i/xZpL4DZCou3P+DIaaJR3RvMwqimQP8JiF/4HpBvN+HfcTgd7hQR9GV34ObdAKsUlT7H8gd40YcSwd3b/1iEAx04NYn6903sS41j3GqSuQvoqeqtepIvu/WdrHrfIxaQndntrQrU87BQQjCRklxM3BxasSKL9qX8m5EZz5hE2xS72jTNPqXNM+oF+iWMMrvVTMG11RbWCXX4jramto9FAu6+exHczRpy3Dtz4dUjK/zjLWrNlapLBY3X9Mz3v4pwB/UqG4zEOnkwPz1QlA7YR3e7Bz7chn8WRXlraD6qjtiXjVhbyj2Z8fxXOPAQLqx4SXTzTlhaYWC2Y1hHcjcrK8Xe2wMmfjlwMCBHAthP54Cx3oJ2t7IzsptuK6/WuqkW7aIxdbS/lT+YFpRX84ELQWLAxlJWoRc9TIZDgPzyGqA6Ssps+dzDAUCRWLu3nSk7ndYcV7tpUpUNUkJ13mADhTwMZ7UhBTMi+DuAaclZrQb0nSI3xrQhp0tKnF8JxvV2dV7iNRrag1CHsZSPayyAMXVlZrZKCFE1itsU2nFa0zjABf83wQxTnZBbHtl091Slui+TbOjcQ2R/bAqhl8oaZGV3fXqxUHhkAYBYZJ+yE0Ym6IFFYV7AnlpxbaQBXxUOqM7kkXbEqokS0jadIrJ04VxUmQc47x+CrvsfP/bvnbjB/ko+ITyxD8BezTEVCTrMELd1G2gRqyONa7dMO87Pnk6p/365PvQWA3Je7r6qBOmAx/AtywL/ZmjFVzm5RyR67XGERYviPqlbpH1FiLD9bvGSoh8aGhGsafL9DIOnc9VdQCjq0OfQQpgXtFYNsejSkaD6UOa3NfmKmpKpDSnCGoNaJigGL8Te0KsTqcX2taMipKcbkWAkcspy41qy6dZabBQvBQnsreqTTd5cLD2t+22GNBTb83XrY5ok1xYg5/ltyyxGfWnyNuZSw/bBUpakS/KoUSvy0rLiBc+tX2PLl/McRM3WqrhPXjmc4C3cygJ7OVo1NQhVlg+W/IOWf/c0pyqE8XAHnRRti4OOpkCQIh5zHIPkWimQ3TvzfMeGQ052UgdHFtCi3tXLeidJO3ygj6684ry++SnjWQRJbdQANR0K+Gm+pMbTnKJa4KRr4AOuj+Z7WH1Q8dlVykZ9Rc9ZgEe4iGaEqZHAx/2WRIdRZp48SAJt07MF7DVvnGp9k9GEAyORP7Bo3JEPlNiuDqdSy62mI7kG9wgpVUS7m3pitJAj5h3TUrhXubHe2YZWBP6ufsOBdO3a0n5HRb0JMyy6V+Wn5X3PKggbSKeM0D+LQInx3eTp7lBJPbNCFtQDD2DKDPy9jf02V2vxoaEe5TqtBILeA6C38wu7pkrec5mlbHsYpcpNsI51a9apTOi5Xl12164n+75vyf3TimikrQ4/unjZMLAiLq+MDQNDSAW8zHRzH9xrI2OQ3xF08MlvOoWOHgdZo5xA0WjESKt6bynHMPCZVdoN0lD/fso204A== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d0d30a8-fa0b-4df6-9bb0-08d9c583237c X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:07.8267 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: A6PokcSBoMH8J4LQZp78FDv8pSQ6Vh900rfUUoW1fa5eQB2mTxKcC/1YUxkJA6knIEs84Y6StPbEeyukzuZ3Te8owI+HosqbyKyeoYKKNhc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: dXAfZyB25FjaYzW8xCnh0Iv6lP0iWEj1 X-Proofpoint-GUID: dXAfZyB25FjaYzW8xCnh0Iv6lP0iWEj1 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Set QEMU_CHAR_FEATURE_CPR for devices that trivially support cpr. char-stdio is slightly less trivial. Allow the gdb server by closing it on exec. Signed-off-by: Steve Sistare --- chardev/char-mux.c | 1 + chardev/char-null.c | 1 + chardev/char-serial.c | 1 + chardev/char-stdio.c | 8 ++++++++ gdbstub.c | 1 + include/chardev/char.h | 1 + migration/cpr.c | 1 + 7 files changed, 14 insertions(+) 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 = muxes_opened; qemu_chr_fe_init(&d->chr, drv, errp); + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); } 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 = false; + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); } static void char_null_class_init(ObjectClass *oc, void *data) diff --git a/chardev/char-serial.c b/chardev/char-serial.c index 7c3d84a..b585085 100644 --- a/chardev/char-serial.c +++ b/chardev/char-serial.c @@ -274,6 +274,7 @@ static void qmp_chardev_open_serial(Chardev *chr, qemu_set_nonblock(fd); tty_serial_init(fd, 115200, 'N', 8, 1); + 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 403da30..9410c16 100644 --- a/chardev/char-stdio.c +++ b/chardev/char-stdio.c @@ -114,9 +114,17 @@ static void qemu_chr_open_stdio(Chardev *chr, stdio_allow_signal = !opts->has_signal || opts->signal; qemu_chr_set_echo_stdio(chr, false); + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); } #endif +void qemu_term_exit(void) +{ +#ifndef _WIN32 + term_exit(); +#endif +} + static void qemu_chr_parse_stdio(QemuOpts *opts, ChardevBackend *backend, Error **errp) { diff --git a/gdbstub.c b/gdbstub.c index 3c14c6a..137deeb 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -3569,6 +3569,7 @@ int gdbserver_start(const char *device) mon_chr = gdbserver_state.mon_chr; reset_gdbserver_state(); } + mon_chr->reopen_on_cpr = true; create_processes(&gdbserver_state); diff --git a/include/chardev/char.h b/include/chardev/char.h index 299e129..fc24d28 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -327,5 +327,6 @@ void resume_mux_open(void); void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend, Error **errp); bool qemu_chr_is_cpr_capable(Error **errp); +void qemu_term_exit(void); #endif diff --git a/migration/cpr.c b/migration/cpr.c index 3bda83e..eb8ce2a 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -112,6 +112,7 @@ void qmp_cpr_exec(strList *args, Error **errp) return; } vhost_dev_reset_all(); + qemu_term_exit(); qemu_system_exec_request(args); } From patchwork Wed Dec 22 19:05:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572331 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=b3948ar7; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=huvOY7T4; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK4170PC3z9s0r for ; Thu, 23 Dec 2021 06:59:55 +1100 (AEDT) Received: from localhost ([::1]:39354 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07mC-0007oU-SC for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 14:59:52 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55868) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VO-00052I-KK for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:30 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:28778) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VM-0008OS-Ur for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:30 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsgq013630; Wed, 22 Dec 2021 19:42:13 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=DNZ2CYcJ/oLlAXGF1oUF2K6d66Kqq+cbuPN82Q2Y1Tg=; b=b3948ar7TLyGfACLDPA9eGLCtNa8hZc7eaSXWEdjHL2V+aLI2xXg20UyC5TFpC2BWoSW ylElvqBpbCXEhVKZV/tR7noQNcHMCH5IQQ0kbH53gRxLZEoU4XObSSw1oOQYkacY17aY YtMArPvf+EGNiYYzVqRXvkxutIMZLvppQKUB55FbaSczqFLXp6NaqxQ0wCfSiBAO20vM 1HJkvXXZKw5r03oL+oCF88HMk5OOpFaktmu/BbqVVgqHYEdL1SqZUZj+73EO9BFtZG7D ywzSPCClJZkR2UWZe3e06gVXAh6eI7efn5o3KcCItiV7nfmQ1Tfdb6tfSNpEtp5e5BYr Qg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tm6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:13 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqS030437; Wed, 22 Dec 2021 19:42:12 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ae31T1AZxxbs//pPYHCrfB98egzGHpDvXEhAHN5/Y7H7q55W60YRmF1vDfVKRJuh2w4rFFTw7Ed+x/aeX4ZbbD+baU5zb1ww4Zo/2NLqN0pM+ACDlKdYDSYJq7NeHk+c4XyW2D2xoyluLebhWO13Do/bM2262gssSo5HKJRaDXmJqJbeMJW4nDR9yTH3OVBo+8dG7smxnL65hvFVmyPW9t7C4GpaV/0b38JpdfvjF5qhJU9QnDCU/5OrHPL87zDjeUVMLHte1ywdI1o004bPWK3jl+IsyOyo3eKrNgFOUMwnmLjTvoSDGLbSPSSEMihVF185YOxjDL76T9vLj79JGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DNZ2CYcJ/oLlAXGF1oUF2K6d66Kqq+cbuPN82Q2Y1Tg=; b=V4hbXX8IoUjZ2iGE+zQUku+h1IpSfxvMTjabmu4JvVT+UguDCQLgKp+mG/N3MVD51ggFnag5VnZkVgz6fYGe1KjP8OIVdnJgPt7MB5tprkW31jCUA9eIIO6X5PvlpNMnMlLmsknoX+12i7bdVzjYIhy4IVkX8/u9TY9NlZVBtT86iBcdd15OW3Y2iPZ7v+I36QzmfiJsjhCou+IXVL8plv7M0/5zODjjlwuoxMUo9TMcOXyHChKxywYz/biyxgS1kBgbNg/rFjvcqg8T4Z9DmPPeNSoV4O3B0QpbSFuebS+sQqfXepN6i84W9nv8MIj56Cqk11OWe2G94Fx4UvnW7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DNZ2CYcJ/oLlAXGF1oUF2K6d66Kqq+cbuPN82Q2Y1Tg=; b=huvOY7T4a0c3Ngq+pFLcYA/MGe3+zFaVACgzc+NLGlT5yQ5L6sipwELRHkZgoKzZ51IIdUCQpt2rjJ4aXpTcB5S5i2UXom3SgsN2yem4zBy7p/CCktJT2AjM+trSdGrogACMVcPvJXLxzxGLBWG/YIyl98EhUtCrgUKjy4bRLd4= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:08 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:08 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 27/29] chardev: cpr for pty Date: Wed, 22 Dec 2021 11:05:32 -0800 Message-Id: <1640199934-455149-28-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: beceb82d-3f7b-461c-fa1e-08d9c58323bc X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:113; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5h5jQQ0hrHP37Fgfh7vSoxQpU7q6nAvp2HeyV8vc00wkCZP7w0Kn9DkVNa+OGOFWRsD4ZMXbuoubthJz+51GYYgB4yJ3Zv9NGlL62KXMAxPA4Rn+SPxF+YoDqipVxkJS/ixlT2zUEMha5R6i+c6jnVxVgTcXnBTfDR2ZF/wGy7q9weBYLaEoi5sGyjHirHET7U3iMDuF3/EPFmf1DXMcsXdaalLFeox6HyNRiM9hW+GP/6YiZLAET4siPHtj3hhY5qLJ3fXtGMA5aeeCt4viQLSQPnjoG8Nbo5TCauPQ9XaP4C0/kV8WfiQLisbr5sJZ7rysYoO7/Zp+/W+Yr0Cy1gqShcHtW5pSstXhEjnA+eAX5R22yg+vn5f7OeeRflcPLvIk0yHfn4rE+f6azmJhfSZEB9n9w4y6+KlMM6E2V41n2GccMm0QLNVR4bz7eKt6U6XfGtVMj9RPnASCtm0NRhhJ6OTTwyGsY1ghzZPdayzLISx3tJNSy/owx7c/cHC122cVnxHIWtvU0sT5ilH4EpuvjLbuHnYVnfifu6N64ktwjZDoBApuQm5dy5DrIU0BeSb2sYZwrTJcbyiEE7wOm9wNm0F0gFGcPDKH1Kqph+wIdQTyof8ed8IbPDDa5f34fgyj+h4rkI2s1cjomNXCr5JPddIf0MO7Sv3XIaocWvChcjiF2dcRONTfgQOcLywB X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ImRZfdmw2l1ZUuNzufh3eCtOmWjfObGKnK5vxcgwKE6gUVSlcmGxs+wIa5QfgQrFE1CsR+U18coy0xsA/orPQvK9XF4IqeFyp7H/F8w3awNsZVvNqHKP2NShZtlAYoQBHrveJELofuvwLVhHh/lEcmHXT7Qg953FTg8NL6F1W7hRr1+G0g2ruW9oYtXK/n6hNC4Bw4PZhZ9BC+/1g8BYYyAMYr0tTzakgJMbGIrxMlnRidsLBJnZN6ndDL/UlPT9yhqGGmO/VFf6ClNQ82Mo8OSFXSYA/S89hJwyHYKTfjj5ePycfu4GctumgXv1MvRNiE/UKxMl2eNHwge55IHznUHbOOmsJgrq/Njq4zBmcg3eb11NueOF18/lzho0L7vRZmC3EjO+oxRW0bzA5rTfh84SW8yHtfGmaY8OYMmb+LKSZc72l3YTAMo/Kye8MlclRxy9aeoCLnqGCDGklNa1MzycSisqnd+QMrylysaNDZ9diF123hOCRtF2pIUE0lgj0Tow9c492CFl946LBwe+pGG/XXxpSQ11350vYNUL0AViP8gFcJuZAEqp02NyGyYy/sgnzAEuYMCMF80/xjJF/HPsJjvJmb8Y2VBV/zKmLNWqC0ZFzl/UzGol43WOyKNjefw+wnv1f2QK5E0smmwQiHqvZil6SvtvO9FH3z3TTHqR7xKLHNL4U3hUIqG2XbJo1HpdvSMkIMibDXdfV/tLs/wX6NMw3Rc+OdV1trXwMaMw5bDHQg2yRiDMorV4HqofhtawP5O/Yfb7uB0cjKWgl1DZRxW/ssDIeAFbl/VJVx/MtZYaZ6eCIMl17TCUg7C+Dst+nSMJ/cCKWaoH0O4DveApZ4/BcWiop/Im08rUBFMTU3Wrsxu0VscLV/2cR2KxnKPwukN9P2G8SNQfO0t3DFSY+M5pxqGaL1F0cjtWbIqtjZJ0QrQlHhAKRQtRqpForcLCAXxaEbF8i3bH1AnHv3eQRfgOX2rUKN58hELmVyFkJTyah9gmaYFKf95UVw2NuLEtSrw52A0q+YkzsCZOVMROqNu99RKCFi8E25pxpb5rl490lhUESeSrkli8Vi2Z1OHwhrjcarB+RlA46euMe6Z8OQIhLGdZGNbl//HSJgecir6sGdKLb9YrQPD414K9RHAng7dmDKbDFxeJ6eF0MEP/b8r24Uwt+v/vVkM9AFzFwO+H22noQhiWxxQRPuhThSGv5jvWh9M+PqvXeASEZgPd8x0wwjdbhiNPk6SVYgtggDCjY51VhBq1I4aOItOQKt+alTVqBckTiYsQ/pBbefXy8wsHSEyrg/HevdHbNfsOyIsWYcsQ4Re+mw/BST/PaQWsjqXhWZqYuyHVrZy7A9Ip4qYxAaZsGXw+A9s5RoY3HTGevUVjfBwjQMgjMg+FnwYm+SiURx7FesIRIfwCyKPUX9xbTrRipWsRH+t4OO+sE6RKcXqzObCKt1VexclH678CqLYwZxXdrr0Qzr1qmmVVubO+oRqxFS/XCMlNK0/LKsQWs6duEs8E/C5Svg1dba3s23v/W+X79xiIdiU0/C8edSpTwrD4GgKieHj43dEXnlnapLjtYtxqbfBgWHWSB4ZlD1uNR6u250VmrYJAeT70zT2/P8K8fm3BBZg2zqf4dJsPy/Rd8CHhH8oOuLB8TRt3Sst4hSlm0lg1+QjX+A== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: beceb82d-3f7b-461c-fa1e-08d9c58323bc X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:08.2173 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nM3PyXMa1i32hOOWccstfV04uDg36s6pHC+DYpO8a8miTa5o7sKop/05GufzLhbPAFM6+SK1FiO/4OKGnj0w79gfsvCkkPEVbKQMUSJOCZI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: HYinMoPv8GpNDpqXNni-WTyC7ZUYO0wx X-Proofpoint-ORIG-GUID: HYinMoPv8GpNDpqXNni-WTyC7ZUYO0wx 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Save and restore pty descriptors across cpr-save and cpr-load. Signed-off-by: Steve Sistare --- 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 a2d1e7c..9801a4f 100644 --- a/chardev/char-pty.c +++ b/chardev/char-pty.c @@ -30,6 +30,7 @@ #include "qemu/sockets.h" #include "qemu/error-report.h" #include "qemu/module.h" +#include "migration/cpr.h" #include "qemu/qemu-print.h" #include "chardev/char-io.h" @@ -191,6 +192,9 @@ static void char_pty_finalize(Object *obj) Chardev *chr = CHARDEV(obj); PtyChardev *s = PTY_CHARDEV(obj); + if (!chr->reopen_on_cpr) { + cpr_delete_fd(chr->label, 0); + } pty_chr_state(chr, 0); object_unref(OBJECT(s->ioc)); pty_chr_timer_cancel(s); @@ -207,12 +211,20 @@ static void char_pty_open(Chardev *chr, char pty_name[PATH_MAX]; char *name; + master_fd = cpr_find_fd(chr->label, 0); + if (master_fd >= 0) { + chr->filename = g_strdup_printf("pty:unknown"); + goto have_fd; + } + master_fd = qemu_openpty_raw(&slave_fd, pty_name); if (master_fd < 0) { error_setg_errno(errp, errno, "Failed to create PTY"); return; } - + if (!chr->reopen_on_cpr) { + cpr_save_fd(chr->label, 0, master_fd); + } close(slave_fd); qemu_set_nonblock(master_fd); @@ -220,6 +232,8 @@ static void char_pty_open(Chardev *chr, qemu_printf("char device redirected to %s (label %s)\n", pty_name, chr->label); +have_fd: + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); s = PTY_CHARDEV(chr); s->ioc = QIO_CHANNEL(qio_channel_file_new_fd(master_fd)); name = g_strdup_printf("chardev-pty-%s", chr->label); From patchwork Wed Dec 22 19:05:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572337 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=UvUe2pLp; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=qBfN37K1; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK49S0kw9z9s0r for ; Thu, 23 Dec 2021 07:07:08 +1100 (AEDT) Received: from localhost ([::1]:54164 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07tB-00012e-U1 for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:07:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:56142) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07Wa-0006ln-Qh for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:43:45 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:63126) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07WL-0000QP-Ky for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:43:31 -0500 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXwoN028486; Wed, 22 Dec 2021 19:42:14 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=lV+ZcClg/TFbPtkvlXzcH1KXAbV7Z12iavCzhI5yYEI=; b=UvUe2pLpksRb6EzKVj6GvoO8Mz3ly/EcxGeFhT+zNwsHhmFSYIFAy4ZmGAqJb/dGZ/qS 4bO1WZMK7MJSqYDeSqXQFvngJEjGtFtwAUJzKro5zPGzAEdMghIZt7O+nlPc4bVzMgSS CVMSIV48VqauQvTK2ks7/6DWNTCR7X+O5zKeVARrqUehxWlull34ZXHdRgvhL9Nd/u6I daIZn5xml7g+X+2MVIZhZ+3KFqVgGbFbdKea4W4e2SosgA0Kpz5Rc5/X9CoXnkQ7iHan zZ8yS2Cqu/ZGddL5eWme+0lT1vXrG7GuCNgCN8joB0ljFVs76YQltbYKopf6Py61W2VK 6Q== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d410397km-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:14 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelTk030497; Wed, 22 Dec 2021 19:42:13 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2049.outbound.protection.outlook.com [104.47.56.49]) by userp3020.oracle.com with ESMTP id 3d193qamws-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UZ4uXC/kpBk59+zcKkVGBpVAdIBVTtc4cXpPioapnZtbwQp5ynYnxC6sL9Tw4X2dYnP83vwfDUI/Gs7IGiY8sncFqxsaUrQwBzfRDGzEes+Ctf/c6yg3nBylDMvXYk/B9bMyAPs8lWU/iPSSaL37B0JUEooCuHDnU/016jQ2gU6sFhw1OTJtlWV/qVqnCS6ujWplRKrVPYgkC8mfpinwvAl8rwGJIYZ1po8PiA/fvgWZikokOg4GJ9XLgVcuiYKO1L0qf1r8C4QscnmW3ERsmKm9wcVPSx16uEmxQvfGlN0I5sJKHG3/nE9XNdQNUqifNTheBK0nMvLImP/aLdGrbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lV+ZcClg/TFbPtkvlXzcH1KXAbV7Z12iavCzhI5yYEI=; b=RKViO6lLeNHCTZ+LEUEdoos+v17dhNQNvmy9M4rmZy/kPl5N2fHp76BZekRE8j7/bDXCxu6w7fssImR9/Y7sS/TVgHJ3zPB6lQLsKZ9qsjIVNcO0HYvG6PPdkAQG+SZx2gf5rx0yI8BqasWJsFsVJ8WmEYczPB57it6o+1on10pvE7ErqT5LqeX/ad2dDY7Nnp+UgvzHEpd+Sm22GIAeda2nxAF8kj1p/eZKfQNYYhDR+YPLIJIoyDOskI4FBiyH3kfoT8m1M9YHfWocRJvI79wsjb/ZdBk543hvA5iml4gmA9yLLs6LDljd0kMc4c5w+UsqzP5xx+dOoJlJfuUutQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lV+ZcClg/TFbPtkvlXzcH1KXAbV7Z12iavCzhI5yYEI=; b=qBfN37K1KEL25btWIUXOlH2PcfPuUYc3ZwroZA/3MaxB3XViF3IZrtdzS1/lIMRwXDUdjY6EemG1UtrlXcJqTvJK/jVIPRnBt+WHmKZqv+9NE8RVE0xVySDKQqFPkxRMrrUxEbejn27ZNPHeTzlXWPRH/LThzYw6csz8PuzeikU= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:08 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:08 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 28/29] chardev: cpr for sockets Date: Wed, 22 Dec 2021 11:05:33 -0800 Message-Id: <1640199934-455149-29-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 914ec8d6-0234-48a9-58b4-08d9c58323fd X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:843; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 00IntqUJQDAShRzRZYKrTSGPPChBtpej1TEg14NkeOO5J+AElZQzPai1tMiWNL65qhnVOPCK4QfKOHvBNZoiJ+ewl9OJE3viFjDjXf4Ul1yjAU21RPhod81LPAhNAdt+e9zCOUK3kXm0vni3ABE70ueePuc+XqJysld2e9gShZOvBhSjcLo+SksS1CQWmpa50U81sSaatMXoYVkrf4pjPu2FKdAcMfz0x6KWqpZjbgV5fclcmcEeYr7Y6KBzDUpnaOnqHcsr20RdRCRFOsU7Dp5TLV/YrcMVBq/s71Rtdydwlm7afsWZNjA9e4sAmAlOg1/REBva6i7NRlC1O0akEMpS0MRkzFGBbc2G+thZf2s5Xy+FBAT663+IX9byUBq0ZF1msgvwzVdzwp98pZocpG3Mnb4hQCYteaUXWJt0DKVjB3dE+5lRLYU3QksqBS786S7PcEwegV1RQfCtJn276d3mgrvr9ry1CCGI3bnETy9iHhxD/zvRMrxUil3mwQYOZBPa2buDOkH8HMjSHjW/zm9Sv8ROhEc57Ytlzuf182VU7O/KsaaoqOipDhRuxqHmQgu/GPDJB6s1f/vl0HY2oO7grOwmTjcUirrCeNIwjp1afJmR33dT3V/1p78GkxrQx0tjk/NBTTY0Wn1H+OzKPGCnsfXelSAj56ZdjiPEKgPbVS/6Tj+dqDaiH8fhiK45B06zHvVA7Ly/YxzmNdwBOA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: aS7YcTtYXfFOHhiL29BcEq78YwP5nFOojG+hB9NofKZaFraEsIeMhWO9yiJtD5kNCDwtZ2K7+twq9KvtS2CCuaS/fGfxJMn5dijUhyNwd/Z+p47hQoS02l1z0w8H6otttcHcioBAKchRfMI0l9dLI2ZRO7Q3AShbyhvVDtrjeo4cK/N1gYww5NuTvOmL35qGcKAfQyHud9d3io/oM4TUrzu5socERKF4jwlt+qTyS3yetrKjU5zF+Z10/Ctm5wLtVBZroB+jHuhxbZCE3lS5+Dq+S5wjFqRUwUHbWwpUiVgnr9gyiUQvADUOiAhuPK+FG4eHlA5xTQmwKk+1iNQ7sg0mHis60LxsXjvlPnvbAJ1/iq/Y5YG2FnvQ0KiWGJj4ExIhb7i8jGdxc6fzSiZ4RWiKjyWQzBsHOGUQ4pOhJB0gaygr2HpXfD3LAFEL1ZhyGhM2sq3R3oJ1Lq2I1ut/MkBlc248gd/QYzvYt/ICoLhFK+/G7asnEN1967OcsvL7TcaC9aaqrJ5itRD3/89P1gG5swDndyOooxOe2SlIO9LqbcLNlHgM6gJKeoHR4fdcDi7WcotSIWZpyfxpSnpivYq6WwP8Qs9bfCVjG0B7VX0wjrzEKKAtGjqU5jcf+GYPiZp2lU0iSGn68C12IjAJtX1aMFN74IzzObBAg8k7UPNMx1r+QkKhJBE46AmSJwxPW4RCs4FaOp0U4UFjc7K60PvQ9580LKVetLdr5bn0iKWBO6lFW5b3IZOGejZ3mcCVGSaz5OHtoGfhJIVT21KeEn8HYK9AoCXOStA+obn35pgEHogJRg0JKCA2ZB9YLvvV+DZ7DflybU1ITMFNYPNF1gpC7ZhKwjc0UmHuLcpJFXxx2yWijfGt2dwVtCe+tk4ohv9wuGU7ApTwygxeIwu8taC65BuD8LcdZ1SdndIT5XhErsNGwXxMhB9mvLZdjjJ6oR/IRryHiPWafdjwyAze//h27fuiUVtXeAizUC/n66sluR47gqn2miRusLYzlP416XEFQ8L0+8/TRqImPBvmMA3xOxginaUE8ZJYEQs0xVMxhxlf6DMbQha7WaKdheKi9+RrhqvVAFjuDVnZOgQ5opv9Tt+ismilLoBzrPKwj/F1Vwx577E1t9++1/2c8jMZ/yvRAlxQP89/2OcGtTJbPtX0x57oRQgA9kL/Y40rAv76u+lEfB5hV+HhwHJjyMyohbz0gdiRbkfJarbvBSFZ9ahxbiqS0GRoEGA3YSN5N+25aw1ykKqzu7xOllVaydzzfGQhb6B7TXPYWUsr6bp90FQn+6MQuVCz0kkw5sgq2VyoEMzOqlJqT99a8J0VMZC5XSIyILjT84IbI39I8Ie293g5djx2uxXRiwJoDLfEhFgXZGN4ouUJFUwovxVdnEKXRnZHBk0k+uMCo2vbPipjIauSrlOKK/rPtTLuZRxYpZTKPw8Xn1UOKKWwe9AqzPeDfCRr/KwbNMVJVevyznrgHMAh9uQPDA+Z729vwWfxNOKpTllKlFBrSDXiTLCNmlWPQiTzSOOrudXveUnIPa1dfxzkFJWRi2jhSxMF82wuhkf3o5SWgJfjvlUgorinrdE8DwfnJJQR3+GgK6KMS4t5EwkYOnvkkq5uKGNuHsmIhw+r8SE69HHzfbRZfH87kFJvb490pT9xWAxNBWhE+0jkiQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 914ec8d6-0234-48a9-58b4-08d9c58323fd X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:08.6391 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8cQ8ShQqvnBmrJTq6fZKY2KugubPh48TJfBqfc44g5CRaVuwdvakeHwJV43vjBL6Pqoq781W2z7/vlMZEbceIQOCh2u+HXkjQx32h+JF8dc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-ORIG-GUID: Gog8-W2_zBO4v5v1vtKrV9fxyRlvhy21 X-Proofpoint-GUID: Gog8-W2_zBO4v5v1vtKrV9fxyRlvhy21 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Save accepted socket fds before cpr-save, and look for them after cpr-load. in the environment after cpr-load. Reject 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 --- chardev/char-socket.c | 35 +++++++++++++++++++++++++++++++++++ monitor/hmp.c | 3 +++ monitor/qmp.c | 3 +++ 3 files changed, 41 insertions(+) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index d619088..c111e17 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -26,6 +26,7 @@ #include "chardev/char.h" #include "io/channel-socket.h" #include "io/channel-websock.h" +#include "migration/cpr.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "qemu/option.h" @@ -358,6 +359,10 @@ static void tcp_chr_free_connection(Chardev *chr) SocketChardev *s = SOCKET_CHARDEV(chr); int i; + if (!chr->reopen_on_cpr) { + cpr_delete_fd(chr->label, 0); + } + if (s->read_msgfds_num) { for (i = 0; i < s->read_msgfds_num; i++) { close(s->read_msgfds[i]); @@ -920,6 +925,10 @@ static void tcp_chr_accept(QIONetListener *listener, QIO_CHANNEL(cioc)); } tcp_chr_new_client(chr, cioc); + + if (s->sioc && !chr->reopen_on_cpr) { + cpr_save_fd(chr->label, 0, s->sioc->fd); + } } @@ -1175,6 +1184,26 @@ static gboolean socket_reconnect_timeout(gpointer opaque) return false; } +static int load_char_socket_fd(Chardev *chr, Error **errp) +{ + SocketChardev *sockchar = SOCKET_CHARDEV(chr); + QIOChannelSocket *sioc; + const char *label = chr->label; + int fd = cpr_find_fd(label, 0); + + if (fd != -1) { + sockchar = SOCKET_CHARDEV(chr); + sioc = qio_channel_socket_new_fd(fd, errp); + if (sioc) { + tcp_chr_accept(sockchar->listener, sioc, chr); + object_unref(OBJECT(sioc)); + } else { + error_setg(errp, "could not restore socket for %s", label); + return -1; + } + } + return 0; +} static int qmp_chardev_open_socket_server(Chardev *chr, bool is_telnet, @@ -1385,6 +1414,10 @@ static void qmp_chardev_open_socket(Chardev *chr, } s->registered_yank = true; + if (!s->tls_creds && !s->is_websock) { + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); + } + /* be isn't opened until we get a connection */ *be_opened = false; @@ -1400,6 +1433,8 @@ static void qmp_chardev_open_socket(Chardev *chr, return; } } + + load_char_socket_fd(chr, errp); } static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, diff --git a/monitor/hmp.c b/monitor/hmp.c index b20737e..a425894 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -1484,4 +1484,7 @@ void monitor_init_hmp(Chardev *chr, bool use_readline, Error **errp) qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, monitor_read, monitor_event, NULL, &mon->common, NULL, true); monitor_list_append(&mon->common); + + /* monitor cannot yet be preserved across cpr */ + chr->reopen_on_cpr = true; } diff --git a/monitor/qmp.c b/monitor/qmp.c index 092c527..0043459 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -535,4 +535,7 @@ 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 = true; } From patchwork Wed Dec 22 19:05:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Sistare X-Patchwork-Id: 1572335 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2021-07-09 header.b=YavX52AB; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=pNRgmKdN; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK45g3TYFz9s0r for ; Thu, 23 Dec 2021 07:03:51 +1100 (AEDT) Received: from localhost ([::1]:47710 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1n07pw-00055U-9k for incoming@patchwork.ozlabs.org; Wed, 22 Dec 2021 15:03:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55888) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VR-000578-Si for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:34 -0500 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:32016) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1n07VP-0008On-SP for qemu-devel@nongnu.org; Wed, 22 Dec 2021 14:42:33 -0500 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJXsli013624; Wed, 22 Dec 2021 19:42:14 GMT 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 : content-type : mime-version; s=corp-2021-07-09; bh=Y5g3tYwoOio6haCICRgNzdV2wUuK+KL6/UlZTAYnNKY=; b=YavX52ABU//texm8L2VgEXiGj4bZaF8BrO4W9+tBybICjcuIpX5g2DcyBJwGpRxeDLus T5d18O4dkOtmKMkrpcIAb27z6Nfy1EJldpDgKrWFAG3GVS4rPMmEUIGeKWijeVpxfJ0P Kx7q09h1D4iijM9UroBurL4XiElaDWbn1ooT1n9/yXr3M3yueYgtWuGzW+q5teUerdkK eRi+ztAP3I2yoaDwyjaqYfm9ek0m8kWVhGxDF+2FdHcdkrw1kLxASxl9QAF+6lIyk8HY b3pEYMp8FNzl/52TFOT0ePHJXtrOkFNcq+OIjp7xvI6bwXruyIm/h3MwcYBdF0GUz4Kk 3A== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 3d46rm0tm8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:14 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.1.2/8.16.1.2) with SMTP id 1BMJelqT030437; Wed, 22 Dec 2021 19:42:13 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam07lp2040.outbound.protection.outlook.com [104.47.56.40]) by userp3020.oracle.com with ESMTP id 3d193qamtk-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 19:42:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lKdk4MBn0JtZwG2LH4ZdmVO9uVTrxcNaQKSAP9xYNf6MCO4BtdAncPuuMn1oAfBslSro4OWQe+k9GqPHojCRLlju1x4oWvjoLnFU2kRqpxNMbfk3hE4sPFjguRSTVmTtrQs4SkoBAkGRapZlNdAC6rL3pqsz1Z2kFSGlTjFoQF58vH5EkywCCyZyqmFNqvhzuxGcDbW0JM5UPrsmjOAhs/eyCIa2tKitLlA7stcOhwFJ+/WUJW9Su7i06G6FZu2gB5cEKC4Gm/VxtuWTGxWv00tAPFlXAkTlKOq/LqkXrJYTyKXk8X0cJyKWlt/QwF2u3guUMJi3P0rWo67hfG+BLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Y5g3tYwoOio6haCICRgNzdV2wUuK+KL6/UlZTAYnNKY=; b=AAN2X1ZRSKl1Fl56Hz3k0x554IF+M4rv/O5pST53Z/+YCko4yquINE5DYqiUYzueOp0J3D85BX0Kgj6/8FlttbnW4dE5ZQTGt0eLrH2wJzEzBDpFmHnOo5vXoNDa+QU5P9Rlt/D3Dzrp6SbiKq568+JaFDw221MprAQPhZhdHy74Iu8q3L2zY1r9UAnG4vdbALyE15u4u5T7LEz3MPYONnuKlykIy6D8LUQWcxcTewehaHZCX+r0aGFVxsSntg4UobGWsaO+9lCFfmoK6WJlrxfsu9ROds03pHi6V6Xd/3b8vfZdST8mKkKQzdx0JYr0h4oG1KE8VjeebVamTtEtsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Y5g3tYwoOio6haCICRgNzdV2wUuK+KL6/UlZTAYnNKY=; b=pNRgmKdN1VZ53E07tasMCUJJ0DXXuHinvhBD5gZ/xgLLUvqRMNzOUJre4euVgRAEOlZHRUfSqB/JTxkuEjRr3txSM/AYEBnH6iNfjN4LEL+n618cU1DNtcm61reSt0iMW68VT3F8W/kYfVnYegkwlgI4uD+OWBJUAzaQfRnEUDw= Received: from BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) by BY5PR10MB4242.namprd10.prod.outlook.com (2603:10b6:a03:20d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.16; Wed, 22 Dec 2021 19:42:09 +0000 Received: from BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623]) by BYAPR10MB3240.namprd10.prod.outlook.com ([fe80::d91d:1a8b:56bd:6623%4]) with mapi id 15.20.4801.020; Wed, 22 Dec 2021 19:42:09 +0000 From: Steve Sistare To: qemu-devel@nongnu.org Subject: [PATCH V7 29/29] cpr: only-cpr-capable option Date: Wed, 22 Dec 2021 11:05:34 -0800 Message-Id: <1640199934-455149-30-git-send-email-steven.sistare@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> References: <1640199934-455149-1-git-send-email-steven.sistare@oracle.com> X-ClientProxiedBy: SJ0PR13CA0196.namprd13.prod.outlook.com (2603:10b6:a03:2c3::21) To BYAPR10MB3240.namprd10.prod.outlook.com (2603:10b6:a03:155::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0ca95e36-35db-4f6d-b52f-08d9c583245c X-MS-TrafficTypeDiagnostic: BY5PR10MB4242:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1417; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: T2H7AI1H4DY+XUD/CZin+cgyedIFPNbGFp7MCBceA15FMs50MJDqlztzsWtnOh3eYhHS/1x7YbEinKCq7D+ArbcL8ju10ZaQKyXpaY2yYgHusx3u2dvspGMMSo6YJ9R/e+vZ6PUxKAp8s9xZdwFDTKUHZR68p8gnw7YUI+9iLxH8RnE721WkuNzLnBOThenU5RsBhQULj8m3qyIxxo/s/hD5WWFJjJnWaTU0UARe0agvjHMSC8dSGge9EIwUks5jKOnu5iOY4eD1jZOOymmE4OCO4QHsuG42sm6S7hYRdV3+jooN8+y9SBzrtXnrcLT2L+RGBp+vpS45qLf84CLda53OM6Py2daOgp+hilspO0Byy9t6M6uvJ9Tt2L76SXv8PFJdls86g39qjgIvX1B+ZriunlpYOXiab5eIIXW1+Ri8tnnIOhQtAfQm3f+Rak0lmByY/zJPgnZ79aFavJZzpPmztIV9kHqyt/IAn9dTa1TZizSReT5l4tuoW/jsPCnObNr6/fBa1E2okWWqnl9O7GUNcj0JgIPyeYfQYhgHHkwdQ/LDjdtuX35BWwcz4lG3Becy/8KE2Q9R2PWqcYSDhfj0tbffYSUoUn62VR+K0X8SW/J/ZCqLI5jrNIBjo+P/3ldbvg0SxE247ILU/0m9GJLxyxl845QjB0MxATkg88bWB8jbTWNk1xRg7jFxJV1ZWY7ZbS/ztgiMrD8Wg9YzBA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB3240.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(186003)(83380400001)(316002)(6916009)(38350700002)(52116002)(54906003)(8676002)(7416002)(38100700002)(8936002)(508600001)(5660300002)(66556008)(6512007)(66476007)(6486002)(36756003)(4326008)(2616005)(6666004)(107886003)(66946007)(2906002)(26005)(86362001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rMeW7W2LTTOT6UNcGUKn9zSMYkWpjtmtZwtN6EelmEX2wssF4tYBpRGWsG3vEE7Bj/yn46zEYu99qq0a1/qncmsgQhhT+pwC3LLOp6+mcFCTOJEgeXf371MxyxWPw5sbB5dY/tcnqjEloGLutqQDnELgh9AbpgWyxCgT4Gcca0op/yyqC4JRQEusy8vSEGCRvvwI+uzOLXUAsXgPHY9LaxBXcEtLFK5f7Im4db+kGzeruJ1vVg4tFK/kBgXQPDWCIqH1gk9P5e+HooZ5ME5anHIrUn1vqB7of8yydwSmJbgHopWZ5odmHfLykN3KO/yUFlemofIPB1Sx/lT5gJT5/5JcnVsFFtdko47KjHaB8jjhWqURjM47s194iB0R+MEwE7rBSBdGTlIhrxfxms9dTGsArZZpONOI1d6Ks7Oowf9FVaqcxXsqWK9wm50Ljky6x5eEcrRbpCo54cdAWBhyZXsa2FKLhfTJ0DV+wHeW+Go9BmhUOoVxJUgb2DVWwdAXOfsuF55wVX/SKzc6ya0Q1U57pJ136SPFv34VBpzqR1kqXGhESuj7ZRtL3LHtb/X5yEghjYMrebO3cEhei6aiCacUvVphfuV8jKBeWBdOtWHTxzlyvln+U9YRBRIRPLpyK9HcIlm1b9as0bYAnQmqxcOg/bhToT3a8YX6MzePFYPAj3Zf9OcM53w9+bPJ61Eeu0FyFzU8eGHNs2hiQWWXMIg3/cV2s9GbYTHCpJdPGdQrJPvIXoQn0xtfqclqRn0MwslRyAZrRVbOh3A0HYm3bpNK+OX82YHaCqAQcAFOEq0/bVKXQxO7CBsFmBcbUt+TxHZa68BsxvaaTEGfPxqUhHeghpknm4f0OoQbfRt2HSRJpw+EqMqQcZwcwqai7qznM6fXINO25hQMC9It8BtvZ/tJmsO6HWcPp33oi8Ilw2P4OKs8SDqfZLdVDBnAuUzUhX7hXjn6y5II2Geqr8Kq128kbe0aReXR2axu23gFEFkHe5IWioo1xw50tMRTCMHjtVy34/ferKKQxpFt67+kSAHXZWQM81GqgPIY1xsuIROKf62ARJx9r6o+5vWcBzqgkHNiWpKEZ185jxMFkAwj6ADv2V8bcv+RZDc3vfgapgMYk5lcIOfsoTuRQkpGstOnulNgH2JO/c/SvttqITk7ldpnNFdXIljtBaiTlvpXE9Zfe1zWtzewzAdyO6/bqY1OXGHXhyg3LhhZdi/QxVh8Opzryi4fIsAj8oqLYta1Pio0pOlgnPVMq8huZwfz1JXts6Sv4xCiFyBOUHiDdeAwNXpKBs/Es+kLVvnDHk0jFYyG1+PAEZ8cnQLHMPKOCU0Vto1yndLMawRNgfjC0PgaXtmlWk+hwG0s8OUJMbXaF4I5nmuunUAPXY2wrJL4KhA4jhPDOYsXuw+CgrD9+1Akof0rRUSKjqWQOo3l718uaSm43byCrBekT5h8zy/DIL4jMWUQU3QDDG243D0KuG8hcbg5RVliKXaKX+Sukw9gWeDS2IZyQgEMynVPqmpDq0cnxBgCq6eI459YIq1zSzw+QjvA9As0mLDJWnAICcx4EjKTqUiSysgBK8pYWu/LyTg4p2/aq+GT8O/QJEYbaONwbpC2VL0jqE1V/tJzxzlxQbfxGpXy9N8zmFjNc9JEbRM4mAaTtOPMh5qyuORp9xzi8Q== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ca95e36-35db-4f6d-b52f-08d9c583245c X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3240.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2021 19:42:09.3422 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8K/iOIeCj4tKU+RtoHhzjidKHN+fxZGdnr1x9RPt2Kqi6IxFcBMqYGd7pm3CUka4qKKjZNrjL/0WPWDUQ9JZMwBlkLP0BUHqziDduGMEDAE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4242 X-Proofpoint-Virus-Version: vendor=nai engine=6300 definitions=10206 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220107 X-Proofpoint-GUID: 53XPxPsGkw8M1m9X9SJA5DqeOCMHlfVq X-Proofpoint-ORIG-GUID: 53XPxPsGkw8M1m9X9SJA5DqeOCMHlfVq 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, 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 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: , Cc: "Daniel P. Berrange" , "Michael S. Tsirkin" , Jason Zeng , =?utf-8?q?Alex_Benn=C3=A9e?= , Juan Quintela , "Dr. David Alan Gilbert" , Eric Blake , Markus Armbruster , Zheng Chuan , Alex Williamson , Steve Sistare , Stefan Hajnoczi , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 a cpr-exec operation will not fail with an unsupported device error. Signed-off-by: Steve Sistare --- MAINTAINERS | 1 + chardev/char-socket.c | 4 ++++ hw/vfio/common.c | 6 ++++++ include/sysemu/sysemu.h | 1 + migration/migration.c | 5 +++++ qemu-options.hx | 8 ++++++++ softmmu/globals.c | 1 + softmmu/physmem.c | 5 +++++ softmmu/vl.c | 14 +++++++++++++- stubs/cpr.c | 3 +++ stubs/meson.build | 1 + 11 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 stubs/cpr.c diff --git a/MAINTAINERS b/MAINTAINERS index feed239..af5abc3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2998,6 +2998,7 @@ F: migration/cpr.c F: qapi/cpr.json F: migration/cpr-state.c F: stubs/cpr-state.c +F: stubs/cpr.c Record/replay M: Pavel Dovgalyuk diff --git a/chardev/char-socket.c b/chardev/char-socket.c index c111e17..a4513a7 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -34,6 +34,7 @@ #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-sockets.h" #include "qemu/yank.h" +#include "sysemu/sysemu.h" #include "chardev/char-io.h" #include "chardev/char-socket.h" @@ -1416,6 +1417,9 @@ static void qmp_chardev_open_socket(Chardev *chr, if (!s->tls_creds && !s->is_websock) { qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_CPR); + } else if (only_cpr_capable) { + error_setg(errp, "error: socket %s is not cpr capable due to %s option", + chr->label, (s->tls_creds ? "TLS" : "websocket")); } /* be isn't opened until we get a connection */ diff --git a/hw/vfio/common.c b/hw/vfio/common.c index f2b4a81..605ffbb 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -38,6 +38,7 @@ #include "sysemu/kvm.h" #include "sysemu/reset.h" #include "sysemu/runstate.h" +#include "sysemu/sysemu.h" #include "trace.h" #include "qapi/error.h" #include "migration/migration.h" @@ -1923,12 +1924,17 @@ static void vfio_put_address_space(VFIOAddressSpace *space) static int vfio_get_iommu_type(VFIOContainer *container, Error **errp) { + ERRP_GUARD(); int iommu_types[] = { VFIO_TYPE1v2_IOMMU, VFIO_TYPE1_IOMMU, VFIO_SPAPR_TCE_v2_IOMMU, VFIO_SPAPR_TCE_IOMMU }; int i; for (i = 0; i < ARRAY_SIZE(iommu_types); i++) { if (ioctl(container->fd, VFIO_CHECK_EXTENSION, iommu_types[i])) { + if (only_cpr_capable && !vfio_is_cpr_capable(container, errp)) { + error_prepend(errp, "only-cpr-capable is specified: "); + return -EINVAL; + } return iommu_types[i]; } } diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 8fae667..6241c20 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -9,6 +9,7 @@ /* vl.c */ extern int only_migratable; +extern bool only_cpr_capable; extern const char *qemu_name; extern QemuUUID qemu_uuid; extern bool qemu_uuid_set; diff --git a/migration/migration.c b/migration/migration.c index 3de11ae..f08db0d 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1257,6 +1257,11 @@ static bool migrate_caps_check(bool *cap_list, return false; } + if (cap_list[MIGRATION_CAPABILITY_X_COLO] && only_cpr_capable) { + error_setg(errp, "x-colo is not compatible with -only-cpr-capable"); + return false; + } + return true; } diff --git a/qemu-options.hx b/qemu-options.hx index 1859b55..0cbf2e3 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4434,6 +4434,14 @@ SRST an unmigratable state. ERST +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-save and + cpr-exec will not fail with an unsupported device error. +ERST + DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \ "-nodefaults don't create default devices\n", QEMU_ARCH_ALL) SRST diff --git a/softmmu/globals.c b/softmmu/globals.c index 7d0fc81..a18fd8d 100644 --- a/softmmu/globals.c +++ b/softmmu/globals.c @@ -59,6 +59,7 @@ int boot_menu; bool boot_strict; uint8_t *boot_splash_filedata; int only_migratable; /* turn it off unless user states otherwise */ +bool only_cpr_capable; int icount_align_option; /* The bytes in qemu_uuid are in the order specified by RFC4122, _not_ in the diff --git a/softmmu/physmem.c b/softmmu/physmem.c index e227195..e7869f8 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -47,6 +47,7 @@ #include "sysemu/dma.h" #include "sysemu/hostmem.h" #include "sysemu/hw_accel.h" +#include "sysemu/sysemu.h" #include "sysemu/xen-mapcache.h" #include "trace/trace-root.h" @@ -2010,6 +2011,10 @@ static void ram_block_add(RAMBlock *new_block, Error **errp) addr = file_ram_alloc(new_block, maxlen, mfd, false, false, 0, errp); trace_anon_memfd_alloc(name, maxlen, addr, mfd); + } else if (only_cpr_capable) { + error_setg(errp, + "only-cpr-capable requires -machine memfd-alloc=on"); + return; } else { addr = qemu_anon_ram_alloc(maxlen, &mr->align, shared, noreserve); diff --git a/softmmu/vl.c b/softmmu/vl.c index 4319e1a..f14e29e 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2743,11 +2743,20 @@ void qmp_x_exit_preconfig(Error **errp) qemu_create_cli_devices(); qemu_machine_creation_done(); + if (only_cpr_capable && !qemu_chr_is_cpr_capable(errp)) { + ; /* not reached due to error_fatal */ + } + if (loadvm) { load_snapshot(loadvm, NULL, false, NULL, &error_fatal); } if (replay_mode != REPLAY_MODE_NONE) { - replay_vmstate_init(); + if (only_cpr_capable) { + error_setg(errp, "replay is not compatible with -only-cpr-capable"); + /* not reached due to error_fatal */ + } else { + replay_vmstate_init(); + } } if (incoming) { @@ -3507,6 +3516,9 @@ void qemu_init(int argc, char **argv, char **envp) case QEMU_OPTION_only_migratable: only_migratable = 1; break; + case QEMU_OPTION_only_cpr_capable: + only_cpr_capable = true; + break; case QEMU_OPTION_nodefaults: has_defaults = 0; break; diff --git a/stubs/cpr.c b/stubs/cpr.c new file mode 100644 index 0000000..aaa189e --- /dev/null +++ b/stubs/cpr.c @@ -0,0 +1,3 @@ +#include "qemu/osdep.h" + +bool only_cpr_capable; diff --git a/stubs/meson.build b/stubs/meson.build index 9565c7d..4c9c4ea 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.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'))