[{"id":3674360,"web_url":"http://patchwork.ozlabs.org/comment/3674360/","msgid":"<CAMxuvaxU=1nds7QAysem_j0jSOM8DK-E0Y74xCs3kS35Se_JKQ@mail.gmail.com>","list_archive_url":null,"date":"2026-04-07T10:40:51","subject":"Re: [PATCH v3 05/10] test/qtest: Add test for tpm crb chunking","submitter":{"id":66774,"url":"http://patchwork.ozlabs.org/api/people/66774/","name":"Marc-André Lureau","email":"marcandre.lureau@redhat.com"},"content":"Hi\n\nOn Mon, Apr 6, 2026 at 6:18 PM Arun Menon <armenon@redhat.com> wrote:\n>\n> From: Arun Menon <armenon@redhat.com>\n>\n> - New test case added to the swtpm test. Data is written and read from\n>   the buffer in chunks.\n> - The chunk size is dynamically calculated by reading the\n>   CRB_CTRL_CMD_SIZE address. This can be changed manually to test.\n> - Add a helper function tpm_wait_till_bit_clear()\n>\n> Signed-off-by: Arun Menon <armenon@redhat.com>\n\nThis alone doesn't yet test the chunked write/read, as the transfers\naren't larger. The following patch \"tests: Use ML-DSA-87 operations to\ncaused large TPM transfers with CRB\" will. It may be worth to say in\nthe commit message\n\nwith other minor style nitpicks below\n\nReviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n\n> ---\n>  tests/qtest/tpm-crb-swtpm-test.c |  10 +++\n>  tests/qtest/tpm-util.c           | 108 ++++++++++++++++++++++++++-----\n>  tests/qtest/tpm-util.h           |   5 ++\n>  3 files changed, 108 insertions(+), 15 deletions(-)\n>\n> diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-test.c\n> index ffeb1c396b..050c7b0c1f 100644\n> --- a/tests/qtest/tpm-crb-swtpm-test.c\n> +++ b/tests/qtest/tpm-crb-swtpm-test.c\n> @@ -33,6 +33,14 @@ static void tpm_crb_swtpm_test(const void *data)\n>                          \"tpm-crb\", NULL);\n>  }\n>\n> +static void tpm_crb_chunk_swtpm_test(const void *data)\n> +{\n> +    const TestState *ts = data;\n> +\n> +    tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer,\n> +                        \"tpm-crb\", NULL);\n> +}\n> +\n>  static void tpm_crb_swtpm_migration_test(const void *data)\n>  {\n>      const TestState *ts = data;\n> @@ -54,6 +62,8 @@ int main(int argc, char **argv)\n>      g_test_init(&argc, &argv, NULL);\n>\n>      qtest_add_data_func(\"/tpm/crb-swtpm/test\", &ts, tpm_crb_swtpm_test);\n> +    qtest_add_data_func(\"/tpm/crb-chunk-swtpm/test\", &ts,\n> +                        tpm_crb_chunk_swtpm_test);\n>      qtest_add_data_func(\"/tpm/crb-swtpm-migration/test\", &ts,\n>                          tpm_crb_swtpm_migration_test);\n>      ret = g_test_run();\n> diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c\n> index 2cb2dd4796..603c5a825d 100644\n> --- a/tests/qtest/tpm-util.c\n> +++ b/tests/qtest/tpm-util.c\n> @@ -14,16 +14,44 @@\n>\n>  #include \"qemu/osdep.h\"\n>  #include <glib/gstdio.h>\n> +#include \"qemu/bswap.h\"\n>\n>  #include \"hw/acpi/tpm.h\"\n>  #include \"libqtest.h\"\n>  #include \"tpm-util.h\"\n>  #include \"qobject/qdict.h\"\n>\n> +#define CRB_ADDR_START (TPM_CRB_ADDR_BASE + A_CRB_CTRL_START)\n> +#define CRB_ADDR_CTRL_STS (TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS)\n> +#define CRB_ADDR_CTRL_CMD_SIZE \\\n> +    (TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_SIZE)\n> +\n> +#define CRB_START_INVOKE  (1 << 0)\n> +#define CRB_START_RSP_RETRY (1 << 1)\n> +#define CRB_START_NEXT_CHUNK (1 << 2)\n> +\n> +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask)\n> +{\n> +    uint32_t sts;\n> +    uint64_t end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;\n> +\n> +    while (true) {\n> +        sts = qtest_readl(s, addr);\n> +        if ((sts & mask) == 0) {\n> +            break;\n> +        }\n> +        if (g_get_monotonic_time() >= end_time) {\n> +            g_assert_cmphex(sts & mask, ==, 0);\n> +            break;\n> +        }\n> +    }\n> +}\n> +\n>  void tpm_util_crb_transfer(QTestState *s,\n>                             const unsigned char *req, size_t req_size,\n>                             unsigned char *rsp, size_t rsp_size)\n>  {\n> +    uint32_t tpm_sts;\n>      uint64_t caddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_LADDR);\n>      uint64_t raddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_ADDR);\n>\n> @@ -31,24 +59,74 @@ void tpm_util_crb_transfer(QTestState *s,\n>\n>      qtest_memwrite(s, caddr, req, req_size);\n>\n> -    uint32_t sts, start = 1;\n> -    uint64_t end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;\n> -    qtest_writel(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START, start);\n> -    while (true) {\n> -        start = qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START);\n> -        if ((start & 1) == 0) {\n> -            break;\n> +    qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE);\n> +    tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE);\n> +\n> +    tpm_sts = qtest_readl(s, CRB_ADDR_CTRL_STS);\n> +    g_assert_cmpint(tpm_sts & 1, ==, 0);\n> +\n> +    qtest_memread(s, raddr, rsp, rsp_size);\n> +}\n> +\n> +void tpm_util_crb_chunk_transfer(QTestState *s,\n> +                                 const unsigned char *req, size_t req_size,\n> +                                 unsigned char *rsp, size_t rsp_size)\n> +{\n> +    uint32_t tpm_sts;\n> +\n> +    uint64_t caddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_LADDR);\n> +    uint64_t raddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_ADDR);\n> +    uint32_t crb_ctrl_cmd_size = qtest_readl(s, CRB_ADDR_CTRL_CMD_SIZE);\n> +\n> +    size_t chunk_size = crb_ctrl_cmd_size;\n> +\n> +    qtest_writeb(s, TPM_CRB_ADDR_BASE + A_CRB_LOC_CTRL, 1);\n> +\n> +    for (size_t i = 0 ; i < req_size; i += chunk_size) {\n\nextra space before ;\n\n> +        bool last_chunk = false;\n> +        size_t current_chunk_size = chunk_size;\n> +\n> +        if (i + chunk_size > req_size) {\n> +            last_chunk = true;\n> +            current_chunk_size = req_size - i;\n>          }\n> -        if (g_get_monotonic_time() >= end_time) {\n> -            break;\n> +\n> +        qtest_memwrite(s, caddr, req + i, current_chunk_size);\n> +\n> +        if (last_chunk) {\n> +            qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE);\n> +            tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE);\n> +        } else {\n> +            qtest_writel(s, CRB_ADDR_START , CRB_START_NEXT_CHUNK);\n\nextra space after START\n\n> +            tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK);\n>          }\n> -    };\n> -    start = qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START);\n> -    g_assert_cmpint(start & 1, ==, 0);\n> -    sts = qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS);\n> -    g_assert_cmpint(sts & 1, ==, 0);\n> +    }\n> +    tpm_sts = qtest_readl(s, CRB_ADDR_CTRL_STS);\n> +    g_assert_cmpint(tpm_sts & 1, ==, 0);\n>\n> -    qtest_memread(s, raddr, rsp, rsp_size);\n> +    /*\n> +     * Read response in chunks\n> +     */\n> +\n> +    unsigned char header[10];\n> +    qtest_memread(s, raddr, header, sizeof(header));\n> +\n> +    uint32_t actual_response_size = ldl_be_p(&header[2]);\n\navoid mixing code & declaration per qemu coding style.\n\n> +\n> +    if (actual_response_size > rsp_size) {\n> +        actual_response_size = rsp_size;\n> +    }\n> +\n> +    for (size_t i = 0; i < actual_response_size; i += chunk_size) {\n> +        size_t to_read = i + chunk_size > actual_response_size\n> +                       ? actual_response_size - i\n> +                       : chunk_size;\n> +        if (i > 0) {\n> +            qtest_writel(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK);\n> +            tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK);\n> +        }\n> +        qtest_memread(s, raddr, rsp + i, to_read);\n> +    }\n>  }\n>\n>  void tpm_util_startup(QTestState *s, tx_func *tx)\n> diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h\n> index 0cb28dd6e5..681544e7d8 100644\n> --- a/tests/qtest/tpm-util.h\n> +++ b/tests/qtest/tpm-util.h\n> @@ -24,10 +24,15 @@ typedef void (tx_func)(QTestState *s,\n>                         const unsigned char *req, size_t req_size,\n>                         unsigned char *rsp, size_t rsp_size);\n>\n> +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask);\n>  void tpm_util_crb_transfer(QTestState *s,\n>                             const unsigned char *req, size_t req_size,\n>                             unsigned char *rsp, size_t rsp_size);\n>\n> +void tpm_util_crb_chunk_transfer(QTestState *s,\n> +                                 const unsigned char *req, size_t req_size,\n> +                                 unsigned char *rsp, size_t rsp_size);\n> +\n>  void tpm_util_startup(QTestState *s, tx_func *tx);\n>  void tpm_util_pcrextend(QTestState *s, tx_func *tx);\n>  void tpm_util_pcrread(QTestState *s, tx_func *tx,\n> --\n> 2.53.0\n>","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 (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=HzC6GeNC;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=google header.b=InFhSyVM;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.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 4fqwsC6cGrz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 08 Apr 2026 05:15:59 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wABVv-0007Wz-Ej; Tue, 07 Apr 2026 14:51:03 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mlureau@redhat.com>)\n id 1wABTl-0004Gt-8v\n for qemu-devel@nongnu.org; Tue, 07 Apr 2026 14:48:49 -0400","from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mlureau@redhat.com>)\n id 1wA3rq-0005Oc-Ij\n for qemu-devel@nongnu.org; Tue, 07 Apr 2026 06:41:14 -0400","from mail-pj1-f70.google.com (mail-pj1-f70.google.com\n [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-594-PaWPqLiaNMmcceij-KAaLA-1; Tue, 07 Apr 2026 06:41:04 -0400","by mail-pj1-f70.google.com with SMTP id\n 98e67ed59e1d1-35842aa350fso11416110a91.0\n for <qemu-devel@nongnu.org>; Tue, 07 Apr 2026 03:41:04 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1775558466;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=v+eezsYA2JqlbT8f/6WoNRXz1UDCXKGIYdbPcDx165w=;\n b=HzC6GeNCQftaXBoe39to3Ko7RjQRMYFFEZXSasNKsoSJFTJx94qoBihzwEwWLufX/bP1BD\n 5bcCj8WyE7pscKnBU8NdYkOe0QfevZ8qM7H5yxkSz//JhOQVJdQeB+x/i/FuC2vVgrJ7Lm\n AZ4+gQST+n8qj0xo257SD0SIvlS99Do=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1775558463; x=1776163263; darn=nongnu.org;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:from:to:cc:subject:date\n :message-id:reply-to;\n bh=v+eezsYA2JqlbT8f/6WoNRXz1UDCXKGIYdbPcDx165w=;\n b=InFhSyVMP5Pi/LcsEQG6jpjRdCviV7cVCDA6aXb0GxiIAsxCPM34XGboHPQ6w0YJIz\n BU2Rj9ZiTNivl500ZIx2qNXpYlfgXde6o6NoD3ibX0WzX77RP1BxbWBPqhW+kktafuXT\n 2DN7IBNV+wTTbvw+9dryDd4Q/8hP8dp811zEBtiyl9TpMEK6ulHf/AZgxOc4FxP38pHk\n unbam1tJwIi0jwOb4FHYhaUnXok3dYxnC7ivznJi8r9Fs3NlcMouD2ne10dQGtMkZuyd\n KK7kV8yYWoRf1YH/4TPZpAJMABjQ5/Slyn6eAlEcR9iBDrrGkjhmkxowqErFyJXxA7S5\n VEXA=="],"X-MC-Unique":"PaWPqLiaNMmcceij-KAaLA-1","X-Mimecast-MFC-AGG-ID":"PaWPqLiaNMmcceij-KAaLA_1775558463","ARC-Seal":"i=1; a=rsa-sha256; t=1775558463; cv=none;\n d=google.com; s=arc-20240605;\n b=gWCiKrLEjput0SQpB0+EAAnjsftmzVqL4JVcQLVR5Ova8l7FAII/cseQFiqpxsbwZP\n 2ONjhkNWz93niQmHuouA+9r1ho/E0wpOYZeHhaPXTou5fynbCJgpS+XpCTg7hKvm6lYH\n Gi2Va5kzxEw9PQo4Twiy+1utygRuMT0I1h9xNCGdUr2a7TcJI5Ua3lvT6CAriKGE2+tL\n MB3y7+CWkIm+CQAJiUGPG5jX9it8j/ROG+hSCUT/hHcN8mKIJS3YOjw2CpD33IFN7FME\n GYUuUNVssbv4QTP0L/ZBMGo2uDnBBCrGkj4M1Vl5AL4i23W6Brc9tNPcc34yDbL/tr/P\n Vy7Q==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:dkim-signature;\n bh=v+eezsYA2JqlbT8f/6WoNRXz1UDCXKGIYdbPcDx165w=;\n fh=DjCsBAlzHiQ7urn9emqwzALbJ1ZadaQmzpiSJrrLJFk=;\n b=F+4sexAovCKpR30lMH/mBBrjKL3GU6faLlDEV4wS5Kkb1oUMAKY1EaRGzKLvPyt39z\n phko5ls76hdLe62CQEYI0Pvr8SGIwKNKQI8H23++UaIB3Lw/bcAjsB/ng/ac8tDZs1+U\n hX2AyjCWNSnS+kdRzq94JMdH7Adktxxrdhiyun23aJXHCVHyT0y57qh2S/7HQ2DDaQu/\n h88YBeE/kAJwE85pivoUYrf22laEHzJIGl0lenhVfPMle9HtSr5g9kbA/MgY13j4bZCt\n XHxIZ64AWa9u4AwUM3uzxbZMKyxFtQ3gxAqtsa9K6/jCByfhuaM9KOeX+CJ6JuDVgWNA\n 2LMA==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775558463; x=1776163263;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=v+eezsYA2JqlbT8f/6WoNRXz1UDCXKGIYdbPcDx165w=;\n b=H7uZA64p24VmJIt9mne8NTflVJGU+L0DwR4Q/tNLedJTzyXU5g6Mib3EPj/s43Ts35\n nMlmGztMmakuHFzjz/S43Ro6tujjuFxa5RMi4XX4foNbApHdkKPH//JIP9idc3NmpKkG\n R/E6+MSSeTYCWIe7TKxBEt1XDKgor3CX81O4u9u1xYmFKX4oL9QXYPMBBeG+Dr6UCJju\n xfcQ/y86O4rRUE1zQrx4OB3wUkAakkI4yyYX+subsM4r50b5t9ClAMYRGPDqi5x8zTWk\n 0uwzXRSHCq32vz9WwwSwHP3gdKy1+iVONWs2VzLx7k2wdEe+JXhwG41EUsq6It/ZdXtk\n iyJQ==","X-Gm-Message-State":"AOJu0YznGklY1EyPpcsqLMvecf6l14AuqcvAE6W6ySHQ9m+3OcFA4PVz\n KUlZ0tcYIm3fXZqW+20muRkuAsZqj+yTNPLLsUNNYtAi8ka8vNvNyOoNbsWmnqDLNbvGrKNZUcT\n KoM6Yttkkg4kH9HAi9ytqOl9un38HfJ5kjfasX0ac+kXXq/oh9SCAob7OCXs+BiaC0ArGgu2up6\n kju0NNUDx2ahmbYHsxabRIEU88yfKWgLk=","X-Gm-Gg":"AeBDieuRPYR19C87VrkDAZUt+SuIXSSd8HXQ3dXGK6xxYGL9kvVqvXtTeTiVksZK5Ed\n 5unPIwK2qgH1tBhtdxNPC6KmBc8r0tfnjQp+qTP9EOlrzCEYs491j4ASiLtEHZV6BaU9dGbAORV\n MKzmsO7Y7FEnGfujOi4B4Lw7zm9t/Zqq9b8AQCfTxHh6ygMLbtXLN+mXC5tT+6MFJXi5/Xpb5pg\n cmVtWYkZGwGMM5axwPLelymGH/0c4/yF5dXL2b+anOzX0vLJ34IxPTz/lDrqeL7vygRMA8io8p9\n QITWoc3ZXvFOA/W0ryy2LvQ=","X-Received":["by 2002:a17:90b:35c8:b0:35b:ea35:c3ce with SMTP id\n 98e67ed59e1d1-35de6952e00mr15916185a91.27.1775558463173;\n Tue, 07 Apr 2026 03:41:03 -0700 (PDT)","by 2002:a17:90b:35c8:b0:35b:ea35:c3ce with SMTP id\n 98e67ed59e1d1-35de6952e00mr15916144a91.27.1775558462659; Tue, 07 Apr 2026\n 03:41:02 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260406141735.25844-1-armenon@redhat.com>\n <20260406141735.25844-6-armenon@redhat.com>","In-Reply-To":"<20260406141735.25844-6-armenon@redhat.com>","From":"=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>","Date":"Tue, 7 Apr 2026 14:40:51 +0400","X-Gm-Features":"AQROBzBPX_O0jjmnYFNNMK9DzWdntFwFTuSnY9I8SBpAsB7AKE1ixjLldGLnnqI","Message-ID":"\n <CAMxuvaxU=1nds7QAysem_j0jSOM8DK-E0Y74xCs3kS35Se_JKQ@mail.gmail.com>","Subject":"Re: [PATCH v3 05/10] test/qtest: Add test for tpm crb chunking","To":"Arun Menon <armenon@redhat.com>","Cc":"qemu-devel@nongnu.org, Ani Sinha <anisinha@redhat.com>,\n  Laurent Vivier <lvivier@redhat.com>, Zhao Liu <zhao1.liu@intel.com>,\n  Stefan Berger <stefanb@linux.vnet.ibm.com>,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n  Paolo Bonzini <pbonzini@redhat.com>, Fabiano Rosas <farosas@suse.de>,\n  \"Michael S. Tsirkin\" <mst@redhat.com>, Yanan Wang <wangyanan55@huawei.com>,\n  Igor Mammedov <imammedo@redhat.com>,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","Received-SPF":"pass client-ip=170.10.133.124; envelope-from=mlureau@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-25","X-Spam_score":"-2.6","X-Spam_bar":"--","X-Spam_report":"(-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-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":"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"}},{"id":3677670,"web_url":"http://patchwork.ozlabs.org/comment/3677670/","msgid":"<CAE_eyq_HPtkkpKURPwca1MBWkHQTHP2ajvPv9NoMJ7LwNLdndg@mail.gmail.com>","list_archive_url":null,"date":"2026-04-15T13:34:43","subject":"Re: [PATCH v3 05/10] test/qtest: Add test for tpm crb chunking","submitter":{"id":91136,"url":"http://patchwork.ozlabs.org/api/people/91136/","name":"Arun Menon","email":"armenon@redhat.com"},"content":"On Tue, Apr 07, 2026 at 02:40:51PM +0400, Marc-André Lureau wrote:\n> Hi\n>\n> On Mon, Apr 6, 2026 at 6:18 PM Arun Menon <armenon@redhat.com> wrote:\n> >\n> > From: Arun Menon <armenon@redhat.com>\n> >\n> > - New test case added to the swtpm test. Data is written and read from\n> >   the buffer in chunks.\n> > - The chunk size is dynamically calculated by reading the\n> >   CRB_CTRL_CMD_SIZE address. This can be changed manually to test.\n> > - Add a helper function tpm_wait_till_bit_clear()\n> >\n> > Signed-off-by: Arun Menon <armenon@redhat.com>\n>\n> This alone doesn't yet test the chunked write/read, as the transfers\n> aren't larger. The following patch \"tests: Use ML-DSA-87 operations to\n> caused large TPM transfers with CRB\" will. It may be worth to say in\n> the commit message\n>\n> with other minor style nitpicks below\n\nThanks for the review, I have incorporated the feedback in the next\nrevision.\n\n>\n> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n>\n> > ---\n> >  tests/qtest/tpm-crb-swtpm-test.c |  10 +++\n> >  tests/qtest/tpm-util.c           | 108 ++++++++++++++++++++++++++-----\n> >  tests/qtest/tpm-util.h           |   5 ++\n> >  3 files changed, 108 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-test.c\n> > index ffeb1c396b..050c7b0c1f 100644\n> > --- a/tests/qtest/tpm-crb-swtpm-test.c\n> > +++ b/tests/qtest/tpm-crb-swtpm-test.c\n> > @@ -33,6 +33,14 @@ static void tpm_crb_swtpm_test(const void *data)\n> >                          \"tpm-crb\", NULL);\n> >  }\n> >\n> > +static void tpm_crb_chunk_swtpm_test(const void *data)\n> > +{\n> > +    const TestState *ts = data;\n> > +\n> > +    tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer,\n> > +                        \"tpm-crb\", NULL);\n> > +}\n> > +\n> >  static void tpm_crb_swtpm_migration_test(const void *data)\n> >  {\n> >      const TestState *ts = data;\n> > @@ -54,6 +62,8 @@ int main(int argc, char **argv)\n> >      g_test_init(&argc, &argv, NULL);\n> >\n> >      qtest_add_data_func(\"/tpm/crb-swtpm/test\", &ts, tpm_crb_swtpm_test);\n> > +    qtest_add_data_func(\"/tpm/crb-chunk-swtpm/test\", &ts,\n> > +                        tpm_crb_chunk_swtpm_test);\n> >      qtest_add_data_func(\"/tpm/crb-swtpm-migration/test\", &ts,\n> >                          tpm_crb_swtpm_migration_test);\n> >      ret = g_test_run();\n> > diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c\n> > index 2cb2dd4796..603c5a825d 100644\n> > --- a/tests/qtest/tpm-util.c\n> > +++ b/tests/qtest/tpm-util.c\n> > @@ -14,16 +14,44 @@\n> >\n> >  #include \"qemu/osdep.h\"\n> >  #include <glib/gstdio.h>\n> > +#include \"qemu/bswap.h\"\n> >\n> >  #include \"hw/acpi/tpm.h\"\n> >  #include \"libqtest.h\"\n> >  #include \"tpm-util.h\"\n> >  #include \"qobject/qdict.h\"\n> >\n> > +#define CRB_ADDR_START (TPM_CRB_ADDR_BASE + A_CRB_CTRL_START)\n> > +#define CRB_ADDR_CTRL_STS (TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS)\n> > +#define CRB_ADDR_CTRL_CMD_SIZE \\\n> > +    (TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_SIZE)\n> > +\n> > +#define CRB_START_INVOKE  (1 << 0)\n> > +#define CRB_START_RSP_RETRY (1 << 1)\n> > +#define CRB_START_NEXT_CHUNK (1 << 2)\n> > +\n> > +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask)\n> > +{\n> > +    uint32_t sts;\n> > +    uint64_t end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;\n> > +\n> > +    while (true) {\n> > +        sts = qtest_readl(s, addr);\n> > +        if ((sts & mask) == 0) {\n> > +            break;\n> > +        }\n> > +        if (g_get_monotonic_time() >= end_time) {\n> > +            g_assert_cmphex(sts & mask, ==, 0);\n> > +            break;\n> > +        }\n> > +    }\n> > +}\n> > +\n> >  void tpm_util_crb_transfer(QTestState *s,\n> >                             const unsigned char *req, size_t req_size,\n> >                             unsigned char *rsp, size_t rsp_size)\n> >  {\n> > +    uint32_t tpm_sts;\n> >      uint64_t caddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_LADDR);\n> >      uint64_t raddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_ADDR);\n> >\n> > @@ -31,24 +59,74 @@ void tpm_util_crb_transfer(QTestState *s,\n> >\n> >      qtest_memwrite(s, caddr, req, req_size);\n> >\n> > -    uint32_t sts, start = 1;\n> > -    uint64_t end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;\n> > -    qtest_writel(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START, start);\n> > -    while (true) {\n> > -        start = qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START);\n> > -        if ((start & 1) == 0) {\n> > -            break;\n> > +    qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE);\n> > +    tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE);\n> > +\n> > +    tpm_sts = qtest_readl(s, CRB_ADDR_CTRL_STS);\n> > +    g_assert_cmpint(tpm_sts & 1, ==, 0);\n> > +\n> > +    qtest_memread(s, raddr, rsp, rsp_size);\n> > +}\n> > +\n> > +void tpm_util_crb_chunk_transfer(QTestState *s,\n> > +                                 const unsigned char *req, size_t req_size,\n> > +                                 unsigned char *rsp, size_t rsp_size)\n> > +{\n> > +    uint32_t tpm_sts;\n> > +\n> > +    uint64_t caddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_LADDR);\n> > +    uint64_t raddr = qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_ADDR);\n> > +    uint32_t crb_ctrl_cmd_size = qtest_readl(s, CRB_ADDR_CTRL_CMD_SIZE);\n> > +\n> > +    size_t chunk_size = crb_ctrl_cmd_size;\n> > +\n> > +    qtest_writeb(s, TPM_CRB_ADDR_BASE + A_CRB_LOC_CTRL, 1);\n> > +\n> > +    for (size_t i = 0 ; i < req_size; i += chunk_size) {\n>\n> extra space before ;\n>\n> > +        bool last_chunk = false;\n> > +        size_t current_chunk_size = chunk_size;\n> > +\n> > +        if (i + chunk_size > req_size) {\n> > +            last_chunk = true;\n> > +            current_chunk_size = req_size - i;\n> >          }\n> > -        if (g_get_monotonic_time() >= end_time) {\n> > -            break;\n> > +\n> > +        qtest_memwrite(s, caddr, req + i, current_chunk_size);\n> > +\n> > +        if (last_chunk) {\n> > +            qtest_writel(s, CRB_ADDR_START, CRB_START_INVOKE);\n> > +            tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_INVOKE);\n> > +        } else {\n> > +            qtest_writel(s, CRB_ADDR_START , CRB_START_NEXT_CHUNK);\n>\n> extra space after START\n>\n> > +            tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK);\n> >          }\n> > -    };\n> > -    start = qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START);\n> > -    g_assert_cmpint(start & 1, ==, 0);\n> > -    sts = qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS);\n> > -    g_assert_cmpint(sts & 1, ==, 0);\n> > +    }\n> > +    tpm_sts = qtest_readl(s, CRB_ADDR_CTRL_STS);\n> > +    g_assert_cmpint(tpm_sts & 1, ==, 0);\n> >\n> > -    qtest_memread(s, raddr, rsp, rsp_size);\n> > +    /*\n> > +     * Read response in chunks\n> > +     */\n> > +\n> > +    unsigned char header[10];\n> > +    qtest_memread(s, raddr, header, sizeof(header));\n> > +\n> > +    uint32_t actual_response_size = ldl_be_p(&header[2]);\n>\n> avoid mixing code & declaration per qemu coding style.\n>\n> > +\n> > +    if (actual_response_size > rsp_size) {\n> > +        actual_response_size = rsp_size;\n> > +    }\n> > +\n> > +    for (size_t i = 0; i < actual_response_size; i += chunk_size) {\n> > +        size_t to_read = i + chunk_size > actual_response_size\n> > +                       ? actual_response_size - i\n> > +                       : chunk_size;\n> > +        if (i > 0) {\n> > +            qtest_writel(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK);\n> > +            tpm_wait_till_bit_clear(s, CRB_ADDR_START, CRB_START_NEXT_CHUNK);\n> > +        }\n> > +        qtest_memread(s, raddr, rsp + i, to_read);\n> > +    }\n> >  }\n> >\n> >  void tpm_util_startup(QTestState *s, tx_func *tx)\n> > diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h\n> > index 0cb28dd6e5..681544e7d8 100644\n> > --- a/tests/qtest/tpm-util.h\n> > +++ b/tests/qtest/tpm-util.h\n> > @@ -24,10 +24,15 @@ typedef void (tx_func)(QTestState *s,\n> >                         const unsigned char *req, size_t req_size,\n> >                         unsigned char *rsp, size_t rsp_size);\n> >\n> > +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask);\n> >  void tpm_util_crb_transfer(QTestState *s,\n> >                             const unsigned char *req, size_t req_size,\n> >                             unsigned char *rsp, size_t rsp_size);\n> >\n> > +void tpm_util_crb_chunk_transfer(QTestState *s,\n> > +                                 const unsigned char *req, size_t req_size,\n> > +                                 unsigned char *rsp, size_t rsp_size);\n> > +\n> >  void tpm_util_startup(QTestState *s, tx_func *tx);\n> >  void tpm_util_pcrextend(QTestState *s, tx_func *tx);\n> >  void tpm_util_pcrread(QTestState *s, tx_func *tx,\n> > --\n> > 2.53.0\n> >\n>\n\nRegards,\nArun Menon","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 (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=QZLEBCJ/;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=google header.b=k7J7N+fl;\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)"],"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 4fwhx44jgfz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 23:35:51 +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 1wD0P0-0003Nr-P6; Wed, 15 Apr 2026 09:35:34 -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 <armenon@redhat.com>)\n id 1wD0Oy-0003N8-Iw\n for qemu-devel@nongnu.org; Wed, 15 Apr 2026 09:35:32 -0400","from us-smtp-delivery-124.mimecast.com ([170.10.129.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <armenon@redhat.com>)\n id 1wD0Ou-0006N3-49\n for qemu-devel@nongnu.org; Wed, 15 Apr 2026 09:35:32 -0400","from mail-oo1-f72.google.com (mail-oo1-f72.google.com\n [209.85.161.72]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-171-A9aBuLqHNu-Ef4xNQj9Abg-1; Wed, 15 Apr 2026 09:35:23 -0400","by mail-oo1-f72.google.com with SMTP id\n 006d021491bc7-68e924f632bso9020483eaf.0\n for <qemu-devel@nongnu.org>; Wed, 15 Apr 2026 06:35:23 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776260125;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=mJtIDh78hVz2Og/caLm5pOUhFBAnjSYPwwsVV79UXS8=;\n b=QZLEBCJ/pC5U/jR27tSIcSs9PQZ8QxJLpX85JJJccideCAmR7PdDiMAiRKxUT0BaVEkQXP\n p8uTOIpEHqGprvKaep7tO3O5o8BrHEuWCH2mRjhemBNAOlqwb37gu9VWwVeUGNnh+PAPxW\n N5YRK7lNeo0hlLnw27EPnuZI8Yyi9og=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1776260123; x=1776864923; darn=nongnu.org;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:from:to:cc:subject:date\n :message-id:reply-to;\n bh=mJtIDh78hVz2Og/caLm5pOUhFBAnjSYPwwsVV79UXS8=;\n b=k7J7N+fluHqLWQ5vQ2S9yNdHhQm+7Oc650GK0c7kfzjHk8t2Rclbpfa2rt0d0oLLKZ\n bA8WMTMbaNwFUrL6Fo+Iu2s8GX3XrGvWmsj6176j7Rea3zwsYwDlk73H4ytvGp6l8HZn\n T1sHh4RjuV8oL+GKAkN0Fvy7+KlPXq52NBydHu39albXEt4WYWE17dIDei09TyIPoq7l\n aDG9RaVtu2vdfl7yejcayb323JD3mjMyn7HzQwcd0eBxfUB3EiQSDbkSAMRSWVGsaKjg\n yeT8yUomEjSA2slrHqmjW64Xb3iSXJa3bHzpOxU02O6jVocIV21882Inqcwvcfmg5zpc\n 4nVg=="],"X-MC-Unique":"A9aBuLqHNu-Ef4xNQj9Abg-1","X-Mimecast-MFC-AGG-ID":"A9aBuLqHNu-Ef4xNQj9Abg_1776260123","ARC-Seal":"i=1; a=rsa-sha256; t=1776260123; cv=none;\n d=google.com; s=arc-20240605;\n b=MoCMqtrRI/a77+KShAH1vARhzyD63y7FF6RX2rA8sp+TCZpKkVih0U9CC8pyJTaIkr\n mOjVjqZoWV+dc0rQYaU/PqZU1LwWN3tvrPV9M9zp7VMyalu82p8EAliqAc0P9R4MCPgA\n ZygTAYDq6HRaooEO4GlZ8WTwoFio9/XTGgSVR6Qf/vcmtNcRkh//022mhWeKp72EcT7L\n ouM8sXq/vMFcemMxllW6kD+ly4rPZ+0aLmogbd/FRC4gDVAWpo2/NCoxFHV+eJs2RwOB\n 5odxsks8W9KFgru+1tVgbYGwOXoaZo4ro7vnQVhvMt/RQbnwG33RrtW5wQj9Cx+O73dy\n /Yjg==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:dkim-signature;\n bh=mJtIDh78hVz2Og/caLm5pOUhFBAnjSYPwwsVV79UXS8=;\n fh=ey4PBSvBqeQkg4f2UbbK4rf17z3h5yS3KmmMBcBtgh4=;\n b=FOC/Fnn3f2H8bVK31FdqAeoBbryFPc++d+3xoAdiFv0WajC2fMdJVqCZh0DD1JgeHW\n +SdbquTkj3QqK60z5p6UKRqUugQZnoriQ1Q6WjvHQ0rgRMpNL44U0Ya8QIDaBxh0/6SQ\n t1urwbeWoLFbob6broa41HzhFWHHL6LP5otlW15qphj4EyIPYcbME75ttyYL7FfOw4cP\n iFeHaMssPKwv5X2Ph7B9RBFgJHIPs1SyhqDTl06XCN1wQvMW1xfFi5uf157ba09Pcwyy\n +BQYj2h6Uh5PbP6XTMMiAKKGVIM6tYpTmEaEs6Vdx9bk/B+MzuFqm9g7SIs6bR+ghyQx\n oqrw==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776260123; x=1776864923;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=mJtIDh78hVz2Og/caLm5pOUhFBAnjSYPwwsVV79UXS8=;\n b=Y8rwG1AsuTkOjs6ygRgW3yfl3KY703PzqBLwh2DScXjWFnh06Up9koubh7qgFD1XfC\n eOfI/qvmuvdKV7TTQa4OTgqD5y9oiqzilpCSMjmepe5w7x9jBbw9pQuQlwMIJQtzubRx\n uu395QIQcVOiHV0daNv8oATuRDUPVIlMDR5mr8Mt6T0DTiUKKdQeo7QOMjEr2eL70Aop\n uL0nF2Cg+znrJ3pnlDikYsNQ3daf0bgqdO64tS+X4x3CULU3/iWYvCQGsfAY1uMC3aap\n 9bFPWRrL+o6fRFGILp6/ykJUWXlYrNDSH8ezTK71wV2jjMbH80u8zyMHT0qQfcFml97N\n kDkQ==","X-Gm-Message-State":"AOJu0YxFanGflN4GVTvzTMCemnO+J9HJ7NPPNUi5tnLmcvbyxQg5rtbo\n UzM3wM8p/u/OKp7Rd2Ca1j/VP7qUDX/W5npkic6+WSX4BQR4G35+L9pu6jYBMoUUFZ4ifTg82t+\n 3TPYTQyPOyLJiEJXz5ZsmNGblAQM5KBjJ0LVe6MIS7V9/8RGRiiIcGmpkyftCEJM11M0vXfnoqV\n sYGlTzfJVM29WChYtYf+vCa9kMsWL04G8=","X-Gm-Gg":"AeBDieutwHEQATY9gxbKOCI1BwCQLCaUOQSaCPdBGWPqQ+dVAk9pR50v3Mx0wZgPzIT\n yzWpwvu6wk26X0Oy+RCNwPuT8acTWAR8uQ9p1yh8CmTR/pW96KS0lgn/JtD7MMlU8v4gXwlez0Q\n 6+aMRE9TvUxeobgJuYQcfue4yPPyZ6UM+oy15RIhID57tCvG2IvmZs6x30Fu9Evf1IYgHgh5gNq\n oC9cVlEwgZK8WygHIr9j+Tq4AUEl0pw19kXU1P3ih/ovw==","X-Received":["by 2002:a05:6820:98a:b0:68c:a53c:8ff1 with SMTP id\n 006d021491bc7-68ca54bd3eamr10729392eaf.11.1776260122732;\n Wed, 15 Apr 2026 06:35:22 -0700 (PDT)","by 2002:a05:6820:98a:b0:68c:a53c:8ff1 with SMTP id\n 006d021491bc7-68ca54bd3eamr10729367eaf.11.1776260122238; Wed, 15 Apr 2026\n 06:35:22 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260406141735.25844-1-armenon@redhat.com>\n <20260406141735.25844-6-armenon@redhat.com>\n <CAMxuvaxU=1nds7QAysem_j0jSOM8DK-E0Y74xCs3kS35Se_JKQ@mail.gmail.com>","In-Reply-To":"\n <CAMxuvaxU=1nds7QAysem_j0jSOM8DK-E0Y74xCs3kS35Se_JKQ@mail.gmail.com>","From":"Arun Menon <armenon@redhat.com>","Date":"Wed, 15 Apr 2026 19:04:43 +0530","X-Gm-Features":"AQROBzAeoFQkp0bAZvHvPa2_bbrqU9d_xtHg3BvQYR4riX9NzFClZjwJ5Y-Bups","Message-ID":"\n <CAE_eyq_HPtkkpKURPwca1MBWkHQTHP2ajvPv9NoMJ7LwNLdndg@mail.gmail.com>","Subject":"Re: [PATCH v3 05/10] test/qtest: Add test for tpm crb chunking","To":"=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>","Cc":"qemu-devel@nongnu.org, Ani Sinha <anisinha@redhat.com>,\n  Laurent Vivier <lvivier@redhat.com>, Zhao Liu <zhao1.liu@intel.com>,\n  Stefan Berger <stefanb@linux.vnet.ibm.com>,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n  Paolo Bonzini <pbonzini@redhat.com>, Fabiano Rosas <farosas@suse.de>,\n  \"Michael S. Tsirkin\" <mst@redhat.com>, Yanan Wang <wangyanan55@huawei.com>,\n  Igor Mammedov <imammedo@redhat.com>,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","Received-SPF":"pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-25","X-Spam_score":"-2.6","X-Spam_bar":"--","X-Spam_report":"(-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-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":"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"}}]