[{"id":3683379,"web_url":"http://patchwork.ozlabs.org/comment/3683379/","msgid":"<2b383d39-4107-49d7-a106-e442a822d8a3@virtuozzo.com>","list_archive_url":null,"date":"2026-04-28T10:59:26","subject":"Re: [PATCH 2/4] qemu-io: Add 'aio_discard' command","submitter":{"id":68167,"url":"http://patchwork.ozlabs.org/api/people/68167/","name":"Denis V. Lunev","email":"den@virtuozzo.com"},"content":"On 4/27/26 19:05, Kevin Wolf wrote:\n> Testing interactions between multiple requests that include discard\n> requests require that qemu-io can do the discard asynchronously, like it\n> already does for reads and writes. To this effect, add an 'aio_discard'\n> command.\n>\n> Signed-off-by: Kevin Wolf <kwolf@redhat.com>\n> ---\n>  qemu-io-cmds.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++++\n>  1 file changed, 113 insertions(+)\n>\n> diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c\n> index 13e03301624..0f5baa70f94 100644\n> --- a/qemu-io-cmds.c\n> +++ b/qemu-io-cmds.c\n> @@ -2218,6 +2218,118 @@ static int discard_f(BlockBackend *blk, int argc, char **argv)\n>      return 0;\n>  }\n>  \n> +static void aio_discard_help(void)\n> +{\n> +    printf(\n> +\"\\n\"\n> +\" asynchronously discards a range of bytes from the given offset\\n\"\n> +\"\\n\"\n> +\" Example:\\n\"\n> +\" 'aio_discard 512 1k' - discards 1 kilobyte from 512 bytes into the file\\n\"\n> +\"\\n\"\n> +\" Discards a segment of the currently open file.\\n\"\n> +\" -C, -- report statistics in a machine parsable format\\n\"\n> +\" -q, -- quiet mode, do not show I/O statistics\\n\"\n> +\" The discard is performed asynchronously and the aio_flush command must be\\n\"\n> +\" used to ensure all outstanding aio requests have been completed.\\n\"\n> +\" Note that due to its asynchronous nature, this command will be\\n\"\n> +\" considered successful once the request is submitted, independently\\n\"\n> +\" of potential I/O errors.\\n\"\n> +\"\\n\");\n> +}\n> +\n> +static int aio_discard_f(BlockBackend *blk, int argc, char **argv);\n> +\n> +static const cmdinfo_t aio_discard_cmd = {\n> +    .name       = \"aio_discard\",\n> +    .cfunc      = aio_discard_f,\n> +    .perm       = BLK_PERM_WRITE,\n> +    .argmin     = 2,\n> +    .argmax     = -1,\n> +    .args       = \"[-Cq] off len\",\n> +    .oneline    = \"asynchronously discards a number of bytes\",\n> +    .help       = aio_discard_help,\n> +};\n> +\n> +static void aio_discard_done(void *opaque, int ret)\n> +{\n> +    struct aio_ctx *ctx = opaque;\n> +    struct timespec t2;\n> +\n> +    clock_gettime(CLOCK_MONOTONIC, &t2);\n> +\n> +    if (ret < 0) {\n> +        printf(\"aio_discard failed: %s\\n\", strerror(-ret));\n> +        block_acct_failed(blk_get_stats(ctx->blk), &ctx->acct);\n> +        goto out;\n> +    }\n> +\n> +    block_acct_done(blk_get_stats(ctx->blk), &ctx->acct);\n> +\n> +    if (ctx->qflag) {\n> +        goto out;\n> +    }\n> +\n> +    /* Finally, report back -- -C gives a parsable format */\n> +    t2 = tsub(t2, ctx->t1);\n> +    print_report(\"discarded \", &t2, ctx->offset, ctx->qiov.size,\n> +                 ctx->qiov.size, 1, ctx->Cflag);\n> +out:\n> +    g_free(ctx);\n> +}\n> +\n> +static int aio_discard_f(BlockBackend *blk, int argc, char **argv)\n> +{\n> +    int c, ret;\n> +    int64_t count;\n> +    struct aio_ctx *ctx = g_new0(struct aio_ctx, 1);\n> +\n> +    ctx->blk = blk;\n> +\n> +    while ((c = getopt(argc, argv, \"Cq\")) != -1) {\n> +        switch (c) {\n> +        case 'C':\n> +            ctx->Cflag = true;\n> +            break;\n> +        case 'q':\n> +            ctx->qflag = true;\n> +            break;\n> +        default:\n> +            qemuio_command_usage(&aio_discard_cmd);\nleaked ctx\n\n> +            return -EINVAL;\n> +        }\n> +    }\n> +\n> +    if (optind != argc - 2) {\n> +        qemuio_command_usage(&aio_discard_cmd);\nleaked ctx\n\n> +        return -EINVAL;\n> +    }\n> +\n> +    ctx->offset = cvtnum(argv[optind]);\n> +    if (ctx->offset < 0) {\n> +        ret = ctx->offset;\n> +        print_cvtnum_err(ret, argv[optind]);\n> +        g_free(ctx);\n> +        return ret;\n> +    }\n> +    optind++;\n> +\n> +    count = cvtnum(argv[optind]);\n> +    if (count < 0) {\n> +        print_cvtnum_err(count, argv[optind]);\n> +        g_free(ctx);\n> +        return count;\n> +    }\n> +\n> +    clock_gettime(CLOCK_MONOTONIC, &ctx->t1);\n> +    ctx->qiov.size = count;\n> +    block_acct_start(blk_get_stats(blk), &ctx->acct, ctx->qiov.size,\n> +                     BLOCK_ACCT_UNMAP);\n> +    blk_aio_pdiscard(blk, ctx->offset, count, aio_discard_done, ctx);\n> +\n> +    return 0;\n> +}\n> +\n>  static int alloc_f(BlockBackend *blk, int argc, char **argv)\n>  {\n>      BlockDriverState *bs = blk_bs(blk);\n> @@ -2800,6 +2912,7 @@ static void __attribute((constructor)) init_qemuio_commands(void)\n>      qemuio_add_command(&length_cmd);\n>      qemuio_add_command(&info_cmd);\n>      qemuio_add_command(&discard_cmd);\n> +    qemuio_add_command(&aio_discard_cmd);\n>      qemuio_add_command(&alloc_cmd);\n>      qemuio_add_command(&map_cmd);\n>      qemuio_add_command(&reopen_cmd);","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com\n header.a=rsa-sha256 header.s=selector2 header.b=wMX+bn6k;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=virtuozzo.com;"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g4csq4rGgz1xrS\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 21:00:31 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wHgAG-0007xB-QQ; Tue, 28 Apr 2026 06:59:40 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <den@virtuozzo.com>)\n id 1wHgAE-0007vz-13; Tue, 28 Apr 2026 06:59:38 -0400","from mail-norwayeastazlp170130007.outbound.protection.outlook.com\n ([2a01:111:f403:c20f::7] helo=OSPPR02CU001.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <den@virtuozzo.com>)\n id 1wHgAC-0004b0-1y; Tue, 28 Apr 2026 06:59:37 -0400","from AM9PR08MB5892.eurprd08.prod.outlook.com (2603:10a6:20b:2dd::16)\n by GVUPR08MB11930.eurprd08.prod.outlook.com (2603:10a6:150:347::13)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 28 Apr\n 2026 10:59:27 +0000","from AM9PR08MB5892.eurprd08.prod.outlook.com\n ([fe80::94bb:633f:1f55:4bbd]) by AM9PR08MB5892.eurprd08.prod.outlook.com\n ([fe80::94bb:633f:1f55:4bbd%4]) with mapi id 15.20.9846.025; Tue, 28 Apr 2026\n 10:59:27 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=EZMAMf6E+8NlZyGPXsJOGQVuGGS4fCD048xmK8Hu37Nl4HNKp7JxKRUDWrb8Vz9tiYBRK/AhrGbcb+6f0ifUcvpxI4Q6irRfItFXd9fn3FGGQn3hUVlF4xrqBlRptPfcGoCZGoIeHuR3ZAh+GFn0zU4qMkSXWUM9HQULu5dBMkxtj58oUxAK/zNHAvd4HhMEBAdIENUlZr+nwn/UOEijqHeKZl7mfVQnIxUZbK3kgLh/evvvoCf/sfFWYtMNo1jMaUhxw1J3PeNbJ8xXtEmeXISAXetXM59pvvDH7XHHrbyKguRbtL/qWaTI8fYUKaVHfMi2m9AuO+jvTb+UO6A7aA==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=3CvsNPdw/OXLxW95lGTJGXUcF78HtvwH9b1gLVBRjL8=;\n b=pCuBBpBWfLU2FZ+6dCq0SDXCzDcpNLCnhWXyHcAoF99kJz9I4W1KKMib/Cm/qaT/qDsoDAzxvTIxAbkznCubvi9bN2gCX/cEtzO0fMeH2KYWAEtrQwSDJinX889Gu3pP3Be5n4kwdqKbZpVQI6fOetLIphwGn+AAsiLT1UJiYvYl60a1Al/EWkhhMEMofqDR+7JpHofMcsb+FtKgOV1citFi4aILQglOkC4kcQIqukl33Dvpd6p2RB+n4sZbmLa51nHS/kcz9f9JV/M7+NjbLEo/uxt2KREtgJ8Jns6p5kkJgdJL2C00rCiDbDMJbSdmBzLb0C65ooE1IH73jQV19g==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=virtuozzo.com; dmarc=pass action=none\n header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=3CvsNPdw/OXLxW95lGTJGXUcF78HtvwH9b1gLVBRjL8=;\n b=wMX+bn6kgsLwB8O5aqJm1drT1sg7j319i6I962qduV2h+WVU1D1EfOsDksJHkmJgX1xIvclBBshds7kj/UfeqsvKvoBtpsE7n20qtQGIhiKzwSln93PBrzobp2iXL3HUIYemEZ/r06UtnkCTcMYXX2Ofdu+w7j70TLKK4a5ubWCekx32K+2U5UahQ1lHSg5wJgeN6xb3wTHmlAeIHlVhnnHZgkjxIWQvmr1RkHGj25Xs5kDfZTBAQZ+4Pj162LeafO7qMck7CZmi9bPW8qee9GrOIhUA+4zhQRQFFppi4iZKL/ggHGCndCCs2EUptL3dMUvspfu/zO1eYOBp5UYJFw==","Message-ID":"<2b383d39-4107-49d7-a106-e442a822d8a3@virtuozzo.com>","Date":"Tue, 28 Apr 2026 12:59:26 +0200","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 2/4] qemu-io: Add 'aio_discard' command","To":"Kevin Wolf <kwolf@redhat.com>, qemu-block@nongnu.org","Cc":"hreitz@redhat.com, den@openvz.org, stefanha@redhat.com,\n qemu-stable@nongnu.org, qemu-devel@nongnu.org","References":"<20260427170520.101242-1-kwolf@redhat.com>\n <20260427170520.101242-3-kwolf@redhat.com>","Content-Language":"en-US","From":"\"Denis V. Lunev\" <den@virtuozzo.com>","In-Reply-To":"<20260427170520.101242-3-kwolf@redhat.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-ClientProxiedBy":"VI1PR07CA0251.eurprd07.prod.outlook.com\n (2603:10a6:803:b4::18) To AM9PR08MB5892.eurprd08.prod.outlook.com\n (2603:10a6:20b:2dd::16)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AM9PR08MB5892:EE_|GVUPR08MB11930:EE_","X-MS-Office365-Filtering-Correlation-Id":"2a0d68a6-97ef-41bf-0fbf-08dea5153737","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|1800799024|366016|376014|10070799003|56012099003|18002099003|22082099003;","X-Microsoft-Antispam-Message-Info":"\n nrHVFRVvpD/CRh/R7BBCrwmkuMszqXhuhz1SLKKfGT4RwBSjGsc/Nj1KgXD2YEGzXCefTkjRTebxSdyMRiTDj621a7CdUdRXuH6v8ayVZLUsb+N3Z8mwClHgxREniOVJmHp6YnJ6x4j3gm9nT5dN6LrOCwc+d3A9Z2QGyorH4rCt/2DWNB2WEYoNu0cotfaDjqm6WZsz/jykOnQK9HLDtcYAk/OhrC5ICcX7AiMluy5NDJ+sfRtfkpk6ueNz7+KB6gbcn1kDAr6V0yKon6wRWejlU/olouYjeAZTOxbh0EZlK7Psi25jUX74nK+Afx19PQqBuINvzjXYeuZxPehpYldjs2aviX7LIgwNVOVfPPSY0Mnt5yBi/co5YWzZE+BZQ/ZTdgX4XT2xz4RnyFWpkssKclr0FMan+dIEQkTZOHaIiTdUDBXHQ2gil+tsuZQIPw5OwWx08YZFdlFqSiGnHZ0tKxymJuzZ6sk++vMIKUO1tnf0VrljPV3uObHED3/9THXBoOtlwW0vNhwYHWRTzQMh7/Ba/nc2Iy+zphRS9CCQrh6V3n1lGLpDBllpLizAmKnUP2+ggo/GMg8H/CzLBCqXxysARsJDtFxowCNqw97mOX9YROCi9kCKyohRx+CF3y+agTwJv7rhCONfC4o3numQQXiFjwA2sRIqdddOZuY05lYLkWkLAVEzSG5GmUcXhK5TZvxuAKrsr3/3YLM4iXTN0EwfbRUNyM2fSJbciVc=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:AM9PR08MB5892.eurprd08.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(1800799024)(366016)(376014)(10070799003)(56012099003)(18002099003)(22082099003);\n DIR:OUT; SFP:1102;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"2","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?bosFvdAL5Rw+fBa8lhOALCTvAfNe?=\n\t=?utf-8?q?Ngxi9gwJJrrABB1L7nXMTr1jDTECRJB1UfeonOh57/dW7G5q1WJk/6s9et4uB4hSG?=\n\t=?utf-8?q?w9ejVog2bAtebsqYaoNPNlACSF2ESQIhKqntpA9jTeBZB3CWI+e6oSwHaItlp+UE6?=\n\t=?utf-8?q?YEXHCfm4WXuXrTmDnKt4SLCQtqzaU3sCNW04V1mbYeX05j1bp/0jl28NpaNLYtsV8?=\n\t=?utf-8?q?AayuCwllIep1ZH7hudyCsF0r9hjDxfvApPcXDT2ZOcfM4N465sDfyGh4X7+h5yQvC?=\n\t=?utf-8?q?abMbtS5EYkpx7t7doCw8Ny0kWWyFjD4J4/pR0I2+Edo1qksww12mFXDN1Y4aCruxH?=\n\t=?utf-8?q?zyLbMMyBSsBUShvPnkC49IGsFgq9P8A6QgyqxscOHQIK7xLSkxnCxGPdbIgHUGNim?=\n\t=?utf-8?q?YhA68v5G0qlPME1Zi+++TKF7NDn0U8jnEGY6lQKzIy2KXoKJAnEJAeLu91vV2jYJ0?=\n\t=?utf-8?q?Aj7wmgG22RlP/KIZT0nOHN7aXlnn8lAonEUEHkiyltEOHPWLP8QO8UmPJMe7r3Zrn?=\n\t=?utf-8?q?ph7ibZkZ7j1uj7PxiUnv6animqudoCucJgWVyBnUqmzrJ0XteWuAU35eY5sfCExWt?=\n\t=?utf-8?q?4wugWkdMo0GkXd0N1Zru6yHdD1X0z3zJ1SuvQ5nzQcvB3CikXjYhfi/HTNSqUrcAb?=\n\t=?utf-8?q?Dvmc0bYSOGgLCO28hyheBJ7qnx4MsAXX1vtViSCdDk1l7l+e8DqENT/9bwPuZ5JVX?=\n\t=?utf-8?q?iwkvQ7nEJ7Pt75USaO9/C9eVNGiMAPdvTX7rwPtvUSGrETmH8WoezWpLnmTwxudvn?=\n\t=?utf-8?q?DSWxfVBUdxZYvQiO3iP73thlJah0mN+9G7NLUiuczWKIXTb1TwBeB+odXSeSoOj64?=\n\t=?utf-8?q?5HjQeVUNZXZC+zaU39kBiAX2GzqJhUcr3kQ8YZgeSvYp0hKtna4nQORfQYMpUKB5c?=\n\t=?utf-8?q?YGocfwlRkKdwwzVQfqA+XLLOoMlyQNZHdUEbYSzgIBvJ5etae4huG1nxOZUG/mjnU?=\n\t=?utf-8?q?1imQVqctbTmx6A8knSEPk3i6fxSG45jwrTy86PGg+rbYwwMT7uP+j5E3Y3qW7BteX?=\n\t=?utf-8?q?gatCkGm85EG9XmcipVHoXcKvtcNFZFbPpQhDbjxIrcgscQadRV9tcy1aWdhByVbnr?=\n\t=?utf-8?q?mPUJRBrTN9BfdDpTbremlksiCbtCCUliTsHnPT3XHHFtyKulcd72B3DL8qlW6PS+d?=\n\t=?utf-8?q?0OkKQpoU/P+Ipbk+p1SPDzuCMv8s1ksS7v45t8FUvP4oI6QDiQa+5SDNOTQKH27QM?=\n\t=?utf-8?q?PA7mKqgrMHXN9BjflXqQHzeLwjXRuP7pBbu13bfOQC/6FuZxJ+Ta5lOWhiNmKj+ce?=\n\t=?utf-8?q?awaBvfaD75BT9RUcG5XPuYfNAzrkamCNaFb8tb3Un9+6VLVkPpUm3qJAUXZKhM7RQ?=\n\t=?utf-8?q?YQSFrf1G98yjR3pMknY64OXkvwqrJ1afqX3CUX1AuhkPh6tVA81c7cDo6EAgVqqTh?=\n\t=?utf-8?q?eCMoA6MEBCblD2rZLP5eu3zA7fmH8L+l/1zQVU6XUg5YvboTKwZU71rVkmJvkrRI/?=\n\t=?utf-8?q?MsY7bvKawKIsqQ4FxR/v5uRGS+yP4OwrOnEiJ2QKHKvESEw6UF35VEQTm1EtU6ee5?=\n\t=?utf-8?q?RKhkMdsNMS3jVhzdLmoFl17pZ4YebWqewcHgaVaanC7J1/fZNncbIe+/ojkIBiald?=\n\t=?utf-8?q?hZangdS8Y50hOUajYf80DY8dbM4Vp9eQ5u4FcqLPyNZX4td6svftlRrMMyHGqkPU7?=\n\t=?utf-8?q?IV+HMDVJxJHUZnG1fBNimgwEl3ESd0PkU3S/eUBveU/b1jNdwhIM/f0iqHYnByoEn?=\n\t=?utf-8?q?4xDqf9eo4LXx46smd?=","X-MS-Exchange-AntiSpam-MessageData-1":"WBsfq4E68vZPhw==","X-OriginatorOrg":"virtuozzo.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 2a0d68a6-97ef-41bf-0fbf-08dea5153737","X-MS-Exchange-CrossTenant-AuthSource":"AM9PR08MB5892.eurprd08.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"28 Apr 2026 10:59:27.5509 (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"0bc7f26d-0264-416e-a6fc-8352af79c58f","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n u06BX/f0mbYn5esGjXy0at4hZ8Wwa4Qx+5uXyvpcd2kIH57U07PJb64r3m46faP5QyLk6zEzd0IUnfRKhwRbXA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"GVUPR08MB11930","Received-SPF":"pass client-ip=2a01:111:f403:c20f::7;\n envelope-from=den@virtuozzo.com;\n helo=OSPPR02CU001.outbound.protection.outlook.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n SPF_HELO_PASS=-0.001,\n 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":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]