[{"id":3678478,"web_url":"http://patchwork.ozlabs.org/comment/3678478/","msgid":"<c49201c7-55ac-43ae-a8ee-3efeb804ddbc@linaro.org>","list_archive_url":null,"date":"2026-04-17T04:54:26","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":85046,"url":"http://patchwork.ozlabs.org/api/people/85046/","name":"Philippe Mathieu-Daudé","email":"philmd@linaro.org"},"content":"On 16/4/26 03:49, Jamin Lin wrote:\n> Change internal EHCI descriptor addresses from uint32_t to uint64_t.\n> \n> The following fields are updated:\n> - EHCIPacket::qtdaddr\n> - EHCIQueue::{qhaddr, qtdaddr}\n> - EHCIState::{a_fetch_addr, p_fetch_addr}\n> \n> Update get_dwords() and put_dwords() to take 64-bit addresses and\n> propagate the type change through the descriptor traversal paths.\n> \n> Adjust NLPTR_GET() to operate on 64-bit values:\n> \n>      #define NLPTR_GET(x) ((x) & ~0x1fULL)\n> \n> so that link pointer masking works correctly when descriptor\n> addresses exceed 32-bit space. The previous mask (0xffffffe0)\n> implicitly truncated addresses to 32 bits.\n> \n> This patch does not change the on-wire descriptor layout yet.\n> It only removes the internal 32-bit address limit and prepares\n> for later patches that will add full 64-bit QH/qTD/iTD/siTD support.\n> \n> Update the EHCI trace-events prototypes for QH, qTD, iTD, and siTD to\n> use uint64_t for the address argument and print it with PRIx64. This\n> ensures full 64-bit addresses are shown in trace output and improves\n> debugging of queue heads and transfer descriptors.\n> \n> Migration compatibility:\n> \n> The fetch address fields in EHCIState are extended from 32-bit to\n> 64-bit, requiring a VMState version bump (v2 -> v3).\n> \n> Backward compatibility is preserved by keeping the legacy 32-bit\n> fields (a_fetch_addr_pre_v3, p_fetch_addr_pre_v3) for pre-v3\n> migration streams via VMSTATE_UINT32_TEST(), and introducing new\n> 64-bit fields for v3+.\n> \n> In post_load, pre-v3 state is promoted to the 64-bit fields.\n> \n> No functional change.\n> \n> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\n> ---\n>   hw/usb/hcd-ehci.h   | 12 +++++----\n>   hw/usb/hcd-ehci.c   | 64 +++++++++++++++++++++++++++++----------------\n>   hw/usb/trace-events | 24 ++++++++---------\n>   3 files changed, 60 insertions(+), 40 deletions(-)\n\nReviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>","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=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=EilcURQh;\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 4fxjHN5mM2z1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 14:55:12 +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 1wDbE4-0002FN-AV; Fri, 17 Apr 2026 00:54:44 -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 <philmd@linaro.org>) id 1wDbDu-0002Dl-7Z\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 00:54:34 -0400","from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1wDbDs-0005DF-CL\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 00:54:33 -0400","by mail-wm1-x32c.google.com with SMTP id\n 5b1f17b1804b1-488a14c31eeso1557185e9.0\n for <qemu-devel@nongnu.org>; Thu, 16 Apr 2026 21:54:31 -0700 (PDT)","from [192.168.69.228] (88-187-86-199.subs.proxad.net.\n [88.187.86.199]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e4daf2sm1389605f8f.33.2026.04.16.21.54.26\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 16 Apr 2026 21:54:28 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776401670; x=1777006470; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=RswCezjul7SiRoikcBxbY5C2ZOOnN8Qs8fMA80JbeJI=;\n b=EilcURQhGAy/dd0ZcFV10Nd1L7RM3zhDhy5O3+cFy/qKVImH9RMjg0TmO2kB0KyUAj\n Eg9vzhRwNj1S6A34viopr1AEtqykpPoO6BZXQhHUweOsQI0wW0V2kCS4nOQvCl1FPck3\n MLa/WlfZkP8TAKHIIRUaagjoBYSy3hLe18GC5P5gAbsgPnZtZaYQ5U9e/8ggZxUlItMw\n uVw5BeCTkb8aPtccfcIKzJ65FnJp0TTfZjNFJsOiaOqlgWhzuvQTUuBTzC37rqoAbpnq\n GAEwGd7soRzs7ShehvFZ1yDyCfvHwG3yu3NokQWTXgsq39A8hwPqwZDSyzp7/lNrHAQ/\n Zl7g==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776401670; x=1777006470;\n h=content-transfer-encoding:in-reply-to:from:references:cc:to\n :content-language:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=RswCezjul7SiRoikcBxbY5C2ZOOnN8Qs8fMA80JbeJI=;\n b=lAixKEfqHiSmxLatVEeucLs8YWnkIFwCq3OUPbRSEnPoc8rIIUK9VMISzk8Ba9Pfrf\n j+JwJgYcUHSYIs7JXh12+4xElR31NN30V9WhiAv5FHt0E+VLqGKxXztuH1FkgCeR+LR2\n V3fcnABQbQQjPGO9BaXEHWNDyZcWFtRVrte88+pNoxw1wmSeD0K9HIKY0nxE7mArlYxd\n bT4O4lAS1nnFWz/gRCWJXYoeM62ZHOBn63so59zl1zy6NPCFo/d1NI/sRn0cVA6ECQ65\n sFYkfV+6YKFiIT7r33YjuEUPFIOd3g/Q/hbWc4kU00fClTnSM21zVSyYyf6H9TxH/W2Z\n u7Pg==","X-Forwarded-Encrypted":"i=1;\n AFNElJ9ANLUEcuDapF4eSQLPQHvp9pOirBJMYcSHnXHDyOmybXcGBmXzVJ2ayt4PnQnHjMnxmLafdpF0wgjP@nongnu.org","X-Gm-Message-State":"AOJu0YxgLUt8UmuCV/hAE2xXoQhDsFwXNZMC77HZgqkpYlfW3lRI4Vtz\n suD7p+NeP3gmIIYj9/EZ3yO6ACKTkBjKSbf0Q0eQLeOp7XhcBN6fRm5zzOaUNYrCN3M=","X-Gm-Gg":"AeBDieuhql0dlxzEMCtxbfsd1Ai6bQMdWUmsydDhuQckpx2rqoBZUoOM4S1ahV4OMxx\n f8YPNXxTrU3c72CpVkrfunTfjZbH4bgDqOn8N5gr74TMtgQvcHjlRweem7vuRWWgo7xyoVk6SnQ\n qD7QkcdY9AYDfCe0m3GZup9Yx8KkyCGQ2toyGNbgOj/p6q0InEwXuPBgVjP4S1HFk8AL8GweR++\n /+yDVlXuRfXLwBfnYTjXcujoKe8Le+NCXrL4wqBkrCdEbGqRzBiyzd+OqQtbZ4PuHMAb/QvVZiz\n THgTy5jfNkzj4IRdNNAQl9ONp/LdUfOcChsQrQgcQDde0EN0nfyTg/DEC1buIv9uIg29C8uEFwy\n E95NDVw88c17tBnZM1e8YVW1BPK33mIz6T4Dn1ImTdjhcw6x7vDMzse+qJJe8sQrVXskE3UZkgA\n +OZHyeTUbKPe0wIk5JmnsjeDsSdUcBCO+sYbDNZVsCNAHeJjkQplKmvvqHUAYja63gVApEXrFxB\n Wy5","X-Received":"by 2002:a05:600c:c096:b0:488:af14:f1de with SMTP id\n 5b1f17b1804b1-488fb73b27dmr11566325e9.4.1776401669998;\n Thu, 16 Apr 2026 21:54:29 -0700 (PDT)","Message-ID":"<c49201c7-55ac-43ae-a8ee-3efeb804ddbc@linaro.org>","Date":"Fri, 17 Apr 2026 06:54:26 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Content-Language":"en-US","To":"Jamin Lin <jamin_lin@aspeedtech.com>,\n =?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>","Cc":"Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","In-Reply-To":"<20260416014928.1279360-7-jamin_lin@aspeedtech.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::32c;\n envelope-from=philmd@linaro.org; helo=mail-wm1-x32c.google.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 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable 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":3678522,"web_url":"http://patchwork.ozlabs.org/comment/3678522/","msgid":"<3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>","list_archive_url":null,"date":"2026-04-17T07:01:34","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":68548,"url":"http://patchwork.ozlabs.org/api/people/68548/","name":"Cédric Le Goater","email":"clg@kaod.org"},"content":"+ Peter, Fabiano,\n\nOn 4/16/26 03:49, Jamin Lin wrote:\n> Change internal EHCI descriptor addresses from uint32_t to uint64_t.\n> \n> The following fields are updated:\n> - EHCIPacket::qtdaddr\n> - EHCIQueue::{qhaddr, qtdaddr}\n> - EHCIState::{a_fetch_addr, p_fetch_addr}\n> \n> Update get_dwords() and put_dwords() to take 64-bit addresses and\n> propagate the type change through the descriptor traversal paths.\n> \n> Adjust NLPTR_GET() to operate on 64-bit values:\n> \n>      #define NLPTR_GET(x) ((x) & ~0x1fULL)\n> \n> so that link pointer masking works correctly when descriptor\n> addresses exceed 32-bit space. The previous mask (0xffffffe0)\n> implicitly truncated addresses to 32 bits.\n> \n> This patch does not change the on-wire descriptor layout yet.\n> It only removes the internal 32-bit address limit and prepares\n> for later patches that will add full 64-bit QH/qTD/iTD/siTD support.\n> \n> Update the EHCI trace-events prototypes for QH, qTD, iTD, and siTD to\n> use uint64_t for the address argument and print it with PRIx64. This\n> ensures full 64-bit addresses are shown in trace output and improves\n> debugging of queue heads and transfer descriptors.\n> \n> Migration compatibility:\n> \n> The fetch address fields in EHCIState are extended from 32-bit to\n> 64-bit, requiring a VMState version bump (v2 -> v3).\n> \n> Backward compatibility is preserved by keeping the legacy 32-bit\n> fields (a_fetch_addr_pre_v3, p_fetch_addr_pre_v3) for pre-v3\n> migration streams via VMSTATE_UINT32_TEST(), and introducing new\n> 64-bit fields for v3+.\n> \n> In post_load, pre-v3 state is promoted to the 64-bit fields.\n\nSince ehci is supported by downstream, I'd prefer that the\nmigration maintainers also verify the implementation.\n\nThanks,\n\nC.\n\n\n> No functional change.\n> \n> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\n> ---\n>   hw/usb/hcd-ehci.h   | 12 +++++----\n>   hw/usb/hcd-ehci.c   | 64 +++++++++++++++++++++++++++++----------------\n>   hw/usb/trace-events | 24 ++++++++---------\n>   3 files changed, 60 insertions(+), 40 deletions(-)\n> \n> diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\n> index 4234591cb4..24eea9d23b 100644\n> --- a/hw/usb/hcd-ehci.h\n> +++ b/hw/usb/hcd-ehci.h\n> @@ -208,7 +208,7 @@ struct EHCIPacket {\n>       QTAILQ_ENTRY(EHCIPacket) next;\n>   \n>       EHCIqtd qtd;           /* copy of current QTD (being worked on) */\n> -    uint32_t qtdaddr;      /* address QTD read from                 */\n> +    uint64_t qtdaddr;      /* address QTD read from                 */\n>   \n>       USBPacket packet;\n>       QEMUSGList sgl;\n> @@ -229,8 +229,8 @@ struct EHCIQueue {\n>        * when guest removes an entry (doorbell, handshake sequence)\n>        */\n>       EHCIqh qh;             /* copy of current QH (being worked on) */\n> -    uint32_t qhaddr;       /* address QH read from                 */\n> -    uint32_t qtdaddr;      /* address QTD read from                */\n> +    uint64_t qhaddr;       /* address QH read from                 */\n> +    uint64_t qtdaddr;      /* address QTD read from                */\n>       int last_pid;          /* pid of last packet executed          */\n>       USBDevice *dev;\n>       QTAILQ_HEAD(, EHCIPacket) packets;\n> @@ -294,8 +294,10 @@ struct EHCIState {\n>       EHCIQueueHead pqueues;\n>   \n>       /* which address to look at next */\n> -    uint32_t a_fetch_addr;\n> -    uint32_t p_fetch_addr;\n> +    uint32_t a_fetch_addr_pre_v3;\n> +    uint32_t p_fetch_addr_pre_v3;\n> +    uint64_t a_fetch_addr;\n> +    uint64_t p_fetch_addr;\n>   \n>       USBPacket ipacket;\n>       QEMUSGList isgl;\n> diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c\n> index d0ea4949f9..35173d27b4 100644\n> --- a/hw/usb/hcd-ehci.c\n> +++ b/hw/usb/hcd-ehci.c\n> @@ -72,7 +72,7 @@ typedef enum {\n>   } EHCI_STATES;\n>   \n>   /* macros for accessing fields within next link pointer entry */\n> -#define NLPTR_GET(x)             ((x) & 0xffffffe0)\n> +#define NLPTR_GET(x)             ((x) & ~0x1fULL)\n>   #define NLPTR_TYPE_GET(x)        (((x) >> 1) & 3)\n>   #define NLPTR_TBIT(x)            ((x) & 1)  /* 1=invalid, 0=valid */\n>   \n> @@ -287,7 +287,7 @@ static int ehci_get_state(EHCIState *s, int async)\n>       return async ? s->astate : s->pstate;\n>   }\n>   \n> -static void ehci_set_fetch_addr(EHCIState *s, int async, uint32_t addr)\n> +static void ehci_set_fetch_addr(EHCIState *s, int async, uint64_t addr)\n>   {\n>       if (async) {\n>           s->a_fetch_addr = addr;\n> @@ -296,7 +296,7 @@ static void ehci_set_fetch_addr(EHCIState *s, int async, uint32_t addr)\n>       }\n>   }\n>   \n> -static int ehci_get_fetch_addr(EHCIState *s, int async)\n> +static uint64_t ehci_get_fetch_addr(EHCIState *s, int async)\n>   {\n>       return async ? s->a_fetch_addr : s->p_fetch_addr;\n>   }\n> @@ -373,7 +373,7 @@ static inline bool ehci_periodic_enabled(EHCIState *s)\n>   }\n>   \n>   /* Get an array of dwords from main memory */\n> -static inline int get_dwords(EHCIState *ehci, uint32_t addr,\n> +static inline int get_dwords(EHCIState *ehci, uint64_t addr,\n>                                uint32_t *buf, int num)\n>   {\n>       int i;\n> @@ -395,7 +395,7 @@ static inline int get_dwords(EHCIState *ehci, uint32_t addr,\n>   }\n>   \n>   /* Put an array of dwords in to main memory */\n> -static inline int put_dwords(EHCIState *ehci, uint32_t addr,\n> +static inline int put_dwords(EHCIState *ehci, uint64_t addr,\n>                                uint32_t *buf, int num)\n>   {\n>       int i;\n> @@ -549,7 +549,7 @@ static void ehci_free_packet(EHCIPacket *p)\n>   \n>   /* queue management */\n>   \n> -static EHCIQueue *ehci_alloc_queue(EHCIState *ehci, uint32_t addr, int async)\n> +static EHCIQueue *ehci_alloc_queue(EHCIState *ehci, uint64_t addr, int async)\n>   {\n>       EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues;\n>       EHCIQueue *q;\n> @@ -622,7 +622,7 @@ static void ehci_free_queue(EHCIQueue *q, const char *warn)\n>       g_free(q);\n>   }\n>   \n> -static EHCIQueue *ehci_find_queue_by_qh(EHCIState *ehci, uint32_t addr,\n> +static EHCIQueue *ehci_find_queue_by_qh(EHCIState *ehci, uint64_t addr,\n>                                           int async)\n>   {\n>       EHCIQueueHead *head = async ? &ehci->aqueues : &ehci->pqueues;\n> @@ -1135,7 +1135,7 @@ static void ehci_flush_qh(EHCIQueue *q)\n>   {\n>       uint32_t *qh = (uint32_t *) &q->qh;\n>       uint32_t dwords = sizeof(EHCIqh) >> 2;\n> -    uint32_t addr = NLPTR_GET(q->qhaddr);\n> +    uint64_t addr = NLPTR_GET(q->qhaddr);\n>   \n>       put_dwords(q->ehci, addr + 3 * sizeof(uint32_t), qh + 3, dwords - 3);\n>   }\n> @@ -1406,12 +1406,13 @@ static int ehci_execute(EHCIPacket *p, const char *action)\n>   /* 4.7.2 */\n>   static int ehci_process_itd(EHCIState *ehci,\n>                               EHCIitd *itd,\n> -                            uint32_t addr)\n> +                            uint64_t addr)\n>   {\n>       USBDevice *dev;\n>       USBEndpoint *ep;\n>       uint32_t i, len, pid, dir, devaddr, endp;\n> -    uint32_t pg, off, ptr1, ptr2, max, mult;\n> +    uint32_t pg, off, max, mult;\n> +    uint64_t ptr1, ptr2;\n>   \n>       ehci->periodic_sched_active = PERIODIC_ACTIVE;\n>   \n> @@ -1528,7 +1529,7 @@ static int ehci_state_waitlisthead(EHCIState *ehci,  int async)\n>       EHCIqh qh;\n>       int i = 0;\n>       int again = 0;\n> -    uint32_t entry = ehci->asynclistaddr;\n> +    uint64_t entry = ehci->asynclistaddr;\n>   \n>       /* set reclamation flag at start event (4.8.6) */\n>       if (async) {\n> @@ -1578,7 +1579,7 @@ out:\n>   static int ehci_state_fetchentry(EHCIState *ehci, int async)\n>   {\n>       int again = 0;\n> -    uint32_t entry = ehci_get_fetch_addr(ehci, async);\n> +    uint64_t entry = ehci_get_fetch_addr(ehci, async);\n>   \n>       if (NLPTR_TBIT(entry)) {\n>           ehci_set_state(ehci, async, EST_ACTIVE);\n> @@ -1610,8 +1611,10 @@ static int ehci_state_fetchentry(EHCIState *ehci, int async)\n>   \n>       default:\n>           /* TODO: handle FSTN type */\n> -        qemu_log_mask(LOG_GUEST_ERROR, \"FETCHENTRY: entry at %X is of type %u \"\n> -                \"which is not supported yet\\n\", entry, NLPTR_TYPE_GET(entry));\n> +        qemu_log_mask(LOG_GUEST_ERROR,\n> +                      \"FETCHENTRY: entry at %\" PRIx64 \"is of type %\" PRIu64\n> +                      \"which is not supported yet\\n\",\n> +                      entry, NLPTR_TYPE_GET(entry));\n>           return -1;\n>       }\n>   \n> @@ -1621,7 +1624,7 @@ out:\n>   \n>   static EHCIQueue *ehci_state_fetchqh(EHCIState *ehci, int async)\n>   {\n> -    uint32_t entry;\n> +    uint64_t entry;\n>       EHCIQueue *q;\n>       EHCIqh qh;\n>   \n> @@ -1710,7 +1713,7 @@ out:\n>   \n>   static int ehci_state_fetchitd(EHCIState *ehci, int async)\n>   {\n> -    uint32_t entry;\n> +    uint64_t entry;\n>       EHCIitd itd;\n>   \n>       assert(!async);\n> @@ -1736,7 +1739,7 @@ static int ehci_state_fetchitd(EHCIState *ehci, int async)\n>   \n>   static int ehci_state_fetchsitd(EHCIState *ehci, int async)\n>   {\n> -    uint32_t entry;\n> +    uint64_t entry;\n>       EHCIsitd sitd;\n>   \n>       assert(!async);\n> @@ -1794,7 +1797,7 @@ static int ehci_state_fetchqtd(EHCIQueue *q)\n>       EHCIqtd qtd;\n>       EHCIPacket *p;\n>       int again = 1;\n> -    uint32_t addr;\n> +    uint64_t addr;\n>   \n>       addr = NLPTR_GET(q->qtdaddr);\n>       if (get_dwords(q->ehci, addr +  8, &qtd.token,   1) < 0) {\n> @@ -1877,7 +1880,7 @@ static int ehci_fill_queue(EHCIPacket *p)\n>       USBEndpoint *ep = p->packet.ep;\n>       EHCIQueue *q = p->queue;\n>       EHCIqtd qtd = p->qtd;\n> -    uint32_t qtdaddr;\n> +    uint64_t qtdaddr;\n>   \n>       for (;;) {\n>           if (NLPTR_TBIT(qtd.next) != 0) {\n> @@ -2000,7 +2003,8 @@ static int ehci_state_executing(EHCIQueue *q)\n>   static int ehci_state_writeback(EHCIQueue *q)\n>   {\n>       EHCIPacket *p = QTAILQ_FIRST(&q->packets);\n> -    uint32_t *qtd, addr;\n> +    uint32_t *qtd;\n> +    uint64_t addr;\n>       int again = 0;\n>   \n>       /*  Write back the QTD from the QH area */\n> @@ -2441,6 +2445,11 @@ static int usb_ehci_post_load(void *opaque, int version_id)\n>           }\n>       }\n>   \n> +    if (version_id < 3) {\n> +        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> +        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> +    }\n> +\n>       return 0;\n>   }\n>   \n> @@ -2470,9 +2479,14 @@ static void usb_ehci_vm_state_change(void *opaque, bool running, RunState state)\n>       }\n>   }\n>   \n> +static bool ehci_core_is_before_version_3(void *opaque, int version_id)\n> +{\n> +    return version_id < 3;\n> +}\n> +\n>   const VMStateDescription vmstate_ehci = {\n>       .name        = \"ehci-core\",\n> -    .version_id  = 2,\n> +    .version_id  = 3,\n>       .minimum_version_id  = 1,\n>       .pre_save    = usb_ehci_pre_save,\n>       .post_load   = usb_ehci_post_load,\n> @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n>           /* schedule state */\n>           VMSTATE_UINT32(astate, EHCIState),\n>           VMSTATE_UINT32(pstate, EHCIState),\n> -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> +                            ehci_core_is_before_version_3),\n> +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> +                            ehci_core_is_before_version_3),\n> +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n>           VMSTATE_END_OF_LIST()\n>       }\n>   };\n> diff --git a/hw/usb/trace-events b/hw/usb/trace-events\n> index 0d4318dcf1..8c90688bb3 100644\n> --- a/hw/usb/trace-events\n> +++ b/hw/usb/trace-events\n> @@ -86,15 +86,15 @@ usb_ehci_portsc_write(uint32_t addr, uint32_t port, uint32_t val) \"wr mmio 0x%04\n>   usb_ehci_portsc_change(uint32_t addr, uint32_t port, uint32_t new, uint32_t old) \"ch mmio 0x%04x [port %d] = 0x%x (old: 0x%x)\"\n>   usb_ehci_usbsts(const char *sts, int state) \"usbsts %s %d\"\n>   usb_ehci_state(const char *schedule, const char *state) \"%s schedule %s\"\n> -usb_ehci_qh_ptrs(void *q, uint32_t addr, uint32_t nxt, uint32_t c_qtd, uint32_t n_qtd, uint32_t a_qtd) \"q %p - QH @ 0x%08x: next 0x%08x qtds 0x%08x,0x%08x,0x%08x\"\n> -usb_ehci_qh_fields(uint32_t addr, int rl, int mplen, int eps, int ep, int devaddr) \"QH @ 0x%08x - rl %d, mplen %d, eps %d, ep %d, dev %d\"\n> -usb_ehci_qh_bits(uint32_t addr, int c, int h, int dtc, int i) \"QH @ 0x%08x - c %d, h %d, dtc %d, i %d\"\n> +usb_ehci_qh_ptrs(void *q, uint64_t addr, uint32_t nxt, uint32_t c_qtd, uint32_t n_qtd, uint32_t a_qtd) \"q %p - QH @ 0x%\" PRIx64 \": next 0x%08x qtds 0x%08x,0x%08x,0x%08x\"\n> +usb_ehci_qh_fields(uint64_t addr, int rl, int mplen, int eps, int ep, int devaddr) \"QH @ 0x%\" PRIx64 \" - rl %d, mplen %d, eps %d, ep %d, dev %d\"\n> +usb_ehci_qh_bits(uint64_t addr, int c, int h, int dtc, int i) \"QH @ 0x%\" PRIx64 \" - c %d, h %d, dtc %d, i %d\"\n>   usb_ehci_qh_tbytes(uint32_t tbytes) \"updating tbytes to %d\"\n> -usb_ehci_qtd_ptrs(void *q, uint32_t addr, uint32_t nxt, uint32_t altnext) \"q %p - QTD @ 0x%08x: next 0x%08x altnext 0x%08x\"\n> -usb_ehci_qtd_fields(uint32_t addr, int tbytes, int cpage, int cerr, int pid) \"QTD @ 0x%08x - tbytes %d, cpage %d, cerr %d, pid %d\"\n> -usb_ehci_qtd_bits(uint32_t addr, int ioc, int active, int halt, int babble, int xacterr) \"QTD @ 0x%08x - ioc %d, active %d, halt %d, babble %d, xacterr %d\"\n> -usb_ehci_itd(uint32_t addr, uint32_t nxt, uint32_t mplen, uint32_t mult, uint32_t ep, uint32_t devaddr) \"ITD @ 0x%08x: next 0x%08x - mplen %d, mult %d, ep %d, dev %d\"\n> -usb_ehci_sitd(uint32_t addr, uint32_t nxt, uint32_t active) \"ITD @ 0x%08x: next 0x%08x - active %d\"\n> +usb_ehci_qtd_ptrs(void *q, uint64_t addr, uint32_t nxt, uint32_t altnext) \"q %p - QTD @ 0x%\" PRIx64 \": next 0x%08x altnext 0x%08x\"\n> +usb_ehci_qtd_fields(uint64_t addr, int tbytes, int cpage, int cerr, int pid) \"QTD @ 0x%\" PRIx64 \" - tbytes %d, cpage %d, cerr %d, pid %d\"\n> +usb_ehci_qtd_bits(uint64_t addr, int ioc, int active, int halt, int babble, int xacterr) \"QTD @ 0x%\" PRIx64 \" - ioc %d, active %d, halt %d, babble %d, xacterr %d\"\n> +usb_ehci_itd(uint64_t addr, uint32_t nxt, uint32_t mplen, uint32_t mult, uint32_t ep, uint32_t devaddr) \"ITD @ 0x%\" PRIx64 \": next 0x%08x - mplen %d, mult %d, ep %d, dev %d\"\n> +usb_ehci_sitd(uint64_t addr, uint32_t nxt, uint32_t active) \"SITD @ 0x%\" PRIx64 \": next 0x%08x - active %d\"\n>   usb_ehci_port_attach(uint32_t port, const char *owner, const char *device) \"attach port #%d, owner %s, device %s\"\n>   usb_ehci_port_detach(uint32_t port, const char *owner) \"detach port #%d, owner %s\"\n>   usb_ehci_port_reset(uint32_t port, int enable) \"reset port #%d - %d\"\n> @@ -104,15 +104,15 @@ usb_ehci_port_resume(uint32_t port) \"port #%d\"\n>   usb_ehci_port_disable(uint32_t port) \"port #%d\"\n>   usb_ehci_queue_action(void *q, const char *action) \"q %p: %s\"\n>   usb_ehci_packet_action(void *q, void *p, const char *action) \"q %p p %p: %s\"\n> -usb_ehci_packet_submit(uint32_t qhaddr, uint32_t next, uint32_t qtdaddr, int pid, size_t len, int endp, int status, int actual_length) \"qh=0x%x, next=0x%x, qtd=0x%x, pid=0x%x, len=%zd, endp=0x%x, status=%d, actual_length=%d\"\n> +usb_ehci_packet_submit(uint64_t qhaddr, uint32_t next, uint64_t qtdaddr, int pid, size_t len, int endp, int status, int actual_length) \"qh=0x%\" PRIx64 \", next=0x%x, qtd=0x%\" PRIx64 \", pid=0x%x, len=%zd, endp=0x%x, status=%d, actual_length=%d\"\n>   usb_ehci_irq(uint32_t level, uint32_t frindex, uint32_t sts, uint32_t mask) \"level %d, frindex 0x%04x, sts 0x%x, mask 0x%x\"\n>   usb_ehci_guest_bug(const char *reason) \"%s\"\n>   usb_ehci_doorbell_ring(void) \"\"\n>   usb_ehci_doorbell_ack(void) \"\"\n>   usb_ehci_dma_error(void) \"\"\n> -usb_ehci_execute_complete(uint32_t qhaddr, uint32_t next, uint32_t qtdaddr, int status, int actual_length) \"qhaddr=0x%x, next=0x%x, qtdaddr=0x%x, status=%d, actual_length=%d\"\n> -usb_ehci_fetchqh_reclaim_done(uint32_t qhaddr) \"QH 0x%08x H-bit set, reclamation status reset - done processing\"\n> -usb_ehci_fetchqh_dbg(uint32_t qhaddr, uint32_t h, uint32_t halt, uint32_t active, uint32_t next) \"QH 0x%08x (h 0x%x halt 0x%x active 0x%x) next 0x%08x\"\n> +usb_ehci_execute_complete(uint64_t qhaddr, uint32_t next, uint64_t qtdaddr, int status, int actual_length) \"qhaddr=0x%\" PRIx64 \", next=0x%x, qtdaddr=0x%\" PRIx64 \", status=%d, actual_length=%d\"\n> +usb_ehci_fetchqh_reclaim_done(uint64_t qhaddr) \"QH 0x%\" PRIx64 \" H-bit set, reclamation status reset - done processing\"\n> +usb_ehci_fetchqh_dbg(uint64_t qhaddr, uint32_t h, uint32_t halt, uint32_t active, uint32_t next) \"QH 0x%\" PRIx64 \" (h 0x%x halt 0x%x active 0x%x) next 0x%08x\"\n>   usb_ehci_periodic_state_advance(uint32_t frame, uint32_t list, uint32_t entry) \"frame=%d, list=0x%x, entry=0x%x\"\n>   usb_ehci_skipped_uframes(uint64_t skipped_uframes) \"skipped %\" PRIu64 \" uframes\"\n>   usb_ehci_log(const char *msg) \"%s\"","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=kaod.org header.i=@kaod.org header.a=rsa-sha256\n header.s=ovhmo393970-selector1 header.b=e36rCK4p;\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)","garm.ovh; auth=pass\n (GARM-110S00407485341-c795-4775-bc7d-338f2ad570c0,\n AF90ED76F5B1EEBCDFB51C8C68949B04E112CC0D) smtp.auth=clg@kaod.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 4fxm6W24RBz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 17 Apr 2026 17:02:41 +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 1wDdD2-00043G-8o; Fri, 17 Apr 2026 03:01:48 -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 <clg@kaod.org>) id 1wDdD0-00042u-7J\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 03:01:46 -0400","from smtpout2.mo534.mail-out.ovh.net ([51.210.94.141])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <clg@kaod.org>) id 1wDdCw-0004ln-I5\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 03:01:45 -0400","from director3.derp.mail-out.ovh.net\n (director3.derp.mail-out.ovh.net [152.228.215.222])\n by mo534.mail-out.ovh.net (Postfix) with ESMTPS id 4fxm5G0cdyz5vP2;\n Fri, 17 Apr 2026 07:01:38 +0000 (UTC)","from director3.derp.mail-out.ovh.net\n (director3.derp.mail-out.ovh.net. [127.0.0.1])\n by director3.derp.mail-out.ovh.net (inspect_sender_mail_agent) with SMTP\n for <jamin_lin@aspeedtech.com>; Fri, 17 Apr 2026 07:01:37 +0000 (UTC)","from mta6.priv.ovhmail-u2.ea.mail.ovh.net (unknown [10.110.188.36])\n by director3.derp.mail-out.ovh.net (Postfix) with ESMTPS id\n 4fxm5F6Rl6z5vdT; Fri, 17 Apr 2026 07:01:37 +0000 (UTC)","from kaod.org (unknown [10.1.6.7])\n (Authenticated sender: clg@kaod.org)\n by mta6.priv.ovhmail-u2.ea.mail.ovh.net (Postfix) with ESMTPSA id\n 6F9431B43A78;\n Fri, 17 Apr 2026 07:01:35 +0000 (UTC)"],"X-OVh-ClientIp":"82.64.250.170","Message-ID":"<3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>","Date":"Fri, 17 Apr 2026 09:01:34 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","To":"Jamin Lin <jamin_lin@aspeedtech.com>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>","Cc":"Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>, 'Peter Xu' <peterx@redhat.com>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>","Content-Language":"en-US, fr","From":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>","Autocrypt":"addr=clg@kaod.org; keydata=\n xsFNBFu8o3UBEADP+oJVJaWm5vzZa/iLgpBAuzxSmNYhURZH+guITvSySk30YWfLYGBWQgeo\n 8NzNXBY3cH7JX3/a0jzmhDc0U61qFxVgrPqs1PQOjp7yRSFuDAnjtRqNvWkvlnRWLFq4+U5t\n yzYe4SFMjFb6Oc0xkQmaK2flmiJNnnxPttYwKBPd98WfXMmjwAv7QfwW+OL3VlTPADgzkcqj\n 53bfZ4VblAQrq6Ctbtu7JuUGAxSIL3XqeQlAwwLTfFGrmpY7MroE7n9Rl+hy/kuIrb/TO8n0\n ZxYXvvhT7OmRKvbYuc5Jze6o7op/bJHlufY+AquYQ4dPxjPPVUT/DLiUYJ3oVBWFYNbzfOrV\n RxEwNuRbycttMiZWxgflsQoHF06q/2l4ttS3zsV4TDZudMq0TbCH/uJFPFsbHUN91qwwaN/+\n gy1j7o6aWMz+Ib3O9dK2M/j/O/Ube95mdCqN4N/uSnDlca3YDEWrV9jO1mUS/ndOkjxa34ia\n 70FjwiSQAsyIwqbRO3CGmiOJqDa9qNvd2TJgAaS2WCw/TlBALjVQ7AyoPEoBPj31K74Wc4GS\n Rm+FSch32ei61yFu6ACdZ12i5Edt+To+hkElzjt6db/UgRUeKfzlMB7PodK7o8NBD8outJGS\n tsL2GRX24QvvBuusJdMiLGpNz3uqyqwzC5w0Fd34E6G94806fwARAQABzSBDw6lkcmljIExl\n IEdvYXRlciA8Y2xnQGthb2Qub3JnPsLBeAQTAQIAIgUCW7yjdQIbAwYLCQgHAwIGFQgCCQoL\n BBYCAwECHgECF4AACgkQUaNDx8/77KGRSxAAuMJJMhJdj7acTcFtwof7CDSfoVX0owE2FJdd\n M43hNeTwPWlV5oLCj1BOQo0MVilIpSd9Qu5wqRD8KnN2Bv/rllKPqK2+i8CXymi9hsuzF56m\n 76wiPwbsX54jhv/VYY9Al7NBknh6iLYJiC/pgacRCHtSj/wofemSCM48s61s1OleSPSSvJE/\n jYRa0jMXP98N5IEn8rEbkPua/yrm9ynHqi4dKEBCq/F7WDQ+FfUaFQb4ey47A/aSHstzpgsl\n TSDTJDD+Ms8y9x2X5EPKXnI3GRLaCKXVNNtrvbUd9LsKymK3WSbADaX7i0gvMFq7j51P/8yj\n neaUSKSkktHauJAtBNXHMghWm/xJXIVAW8xX5aEiSK7DNp5AM478rDXn9NZFUdLTAScVf7LZ\n VzMFKR0jAVG786b/O5vbxklsww+YXJGvCUvHuysEsz5EEzThTJ6AC5JM2iBn9/63PKiS3ptJ\n QAqzasT6KkZ9fKLdK3qtc6yPaSm22C5ROM3GS+yLy6iWBkJ/nEYh/L/du+TLw7YNbKejBr/J\n ml+V3qZLfuhDjW0GbeJVPzsENuxiNiBbyzlSnAvKlzda/sBDvxmvWhC+nMRQCf47mFr8Xx3w\n WtDSQavnz3zTa0XuEucpwfBuVdk4RlPzNPri6p2KTBhPEvRBdC9wNOdRBtsP9rAPjd52d73O\n wU0EW7yjdQEQALyDNNMw/08/fsyWEWjfqVhWpOOrX2h+z4q0lOHkjxi/FRIRLfXeZjFfNQNL\n SoL8j1y2rQOs1j1g+NV3K5hrZYYcMs0xhmrZKXAHjjDx7FW3sG3jcGjFW5Xk4olTrZwFsZVU\n cP8XZlArLmkAX3UyrrXEWPSBJCXxDIW1hzwpbV/nVbo/K9XBptT/wPd+RPiOTIIRptjypGY+\n S23HYBDND3mtfTz/uY0Jytaio9GETj+fFis6TxFjjbZNUxKpwftu/4RimZ7qL+uM1rG1lLWc\n 9SPtFxRQ8uLvLOUFB1AqHixBcx7LIXSKZEFUCSLB2AE4wXQkJbApye48qnZ09zc929df5gU6\n hjgqV9Gk1rIfHxvTsYltA1jWalySEScmr0iSYBZjw8Nbd7SxeomAxzBv2l1Fk8fPzR7M616d\n tb3Z3HLjyvwAwxtfGD7VnvINPbzyibbe9c6gLxYCr23c2Ry0UfFXh6UKD83d5ybqnXrEJ5n/\n t1+TLGCYGzF2erVYGkQrReJe8Mld3iGVldB7JhuAU1+d88NS3aBpNF6TbGXqlXGF6Yua6n1c\n OY2Yb4lO/mDKgjXd3aviqlwVlodC8AwI0SdujWryzL5/AGEU2sIDQCHuv1QgzmKwhE58d475\n KdVX/3Vt5I9kTXpvEpfW18TjlFkdHGESM/JxIqVsqvhAJkalABEBAAHCwV8EGAECAAkFAlu8\n o3UCGwwACgkQUaNDx8/77KEhwg//WqVopd5k8hQb9VVdk6RQOCTfo6wHhEqgjbXQGlaxKHoX\n ywEQBi8eULbeMQf5l4+tHJWBxswQ93IHBQjKyKyNr4FXseUI5O20XVNYDJZUrhA4yn0e/Af0\n IX25d94HXQ5sMTWr1qlSK6Zu79lbH3R57w9jhQm9emQEp785ui3A5U2Lqp6nWYWXz0eUZ0Ta\n d2zC71Gg9VazU9MXyWn749s0nXbVLcLS0yops302Gf3ZmtgfXTX/W+M25hiVRRKCH88yr6it\n +OMJBUndQVAA/fE9hYom6t/zqA248j0QAV/pLHH3hSirE1mv+7jpQnhMvatrwUpeXrOiEw1n\n HzWCqOJUZ4SY+HmGFW0YirWV2mYKoaGO2YBUwYF7O9TI3GEEgRMBIRT98fHa0NPwtlTktVIS\n l73LpgVscdW8yg9Gc82oe8FzU1uHjU8b10lUXOMHpqDDEV9//r4ZhkKZ9C4O+YZcTFu+mvAY\n 3GlqivBNkmYsHYSlFsbxc37E1HpTEaSWsGfAHQoPn9qrDJgsgcbBVc1gkUT6hnxShKPp4Pls\n ZVMNjvPAnr5TEBgHkk54HQRhhwcYv1T2QumQizDiU6iOrUzBThaMhZO3i927SG2DwWDVzZlt\n KrCMD1aMPvb3NU8FOYRhNmIFR3fcalYr+9gDuVKe8BVz4atMOoktmt0GWTOC8P4=","In-Reply-To":"<20260416014928.1279360-7-jamin_lin@aspeedtech.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","x-ovh-tracer-id":"15767383771480632365","X-VR-SPAMSTATE":"OK","X-VR-SPAMSCORE":"-100","X-VR-SPAMCAUSE":"\n dmFkZTFWAFYZaTXYRribQpa4/JfuJsTC8+uHzkOlghMEniX/+VTYsWC0ew9r1hcZooaCK48uvrp80mA4ZgpHpdddpga/WJ3rtSe6Q6U52mh96o+IieGiC2fLf7PJ9WwB8ZnQglujt3dU1K2bZ2XJbUpf1NlmRDKqB54GrPYo/6bcKGwYhciuKBUcVDhbT0r1FWnC8UAqs8Jcx/GTjYKaWMDxbahXO1VYMmSk1V5j57FMtrjEP2PaN/9Ps6JL2TQanZSfLYjN0UbeSbst3Xa0zCEQAKo3amjS4tWFg/ZW/qGiJxAXqTaVNjvThSlgEo5GVJDT2EnLuQ0nMf1xpalKAr1Tuw71LDxetVrPnIp+6Tvf+i85t+eTpyKH2BzczElFTLa5T727y1ubojTvtB/v4luK+Xwpchi3PWDdORnRL8wbDoYPQ1T0GhXA7sd1+XpY5vFXuKGejNf+RXjrTlxbfTIDMTHh/tb00+0ybhxpZetCjsVRw3Ph6tl5ZppIDrJEDlne9xDPns6od1KNXXjpwCl4noTlIr0s4q8vh7pQoOydspTcgTnXXBanLeFSy7kp6d7/jwiGZZ4j9zTMvHfDZVKmnI78yRPtjiPMLFGPuNeG2am3wyWdSF7apum96pK8tu3wZCg8j8lmURR0P2b/wthmX5zw/3jDg+NMdlvioVwO2Ydz/Q","DKIM-Signature":"a=rsa-sha256; bh=btCI24/GWhjAh+xbuglw11ON+DNbib5MSfWo+MJQJyI=;\n c=relaxed/relaxed; d=kaod.org; h=From; s=ovhmo393970-selector1;\n t=1776409298; v=1;\n b=e36rCK4phXXpQhLPkfvk86d7rvmrOygadzWGUvuarV0JfC0kGeOa6piBP9Po1crI7sCq9DXe\n a0ApsnHSOf+VN4yESeE41+ZWfApmFhaUW+IJkETr1FIEA27U9jyhq/qxAcduIQH8wujs8csnTDb\n r49xeA3mRZDuR6kRrPrEofUzfCGCyxofUVmzSdI691Kk1fOehyCLoJEHkYQeat3gBM0LtT+pj8+\n YbTTlSSd7ZLHKWE975ZwxCQUJvBu9GFCYKg4l4wAg/UKSc1NUQsl51TjUkJ7gmGb86prO4p8T9Q\n zIR6GAbE6b4/9PxNiUybg+ykyvnH2EnZXBluiBzlUMwqg==","Received-SPF":"pass client-ip=51.210.94.141; envelope-from=clg@kaod.org;\n helo=smtpout2.mo534.mail-out.ovh.net","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 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=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_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":"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":3678760,"web_url":"http://patchwork.ozlabs.org/comment/3678760/","msgid":"<aeJNdLTRSZQiEiP_@x1.local>","list_archive_url":null,"date":"2026-04-17T15:10:44","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":67717,"url":"http://patchwork.ozlabs.org/api/people/67717/","name":"Peter Xu","email":"peterx@redhat.com"},"content":"On Fri, Apr 17, 2026 at 09:01:34AM +0200, Cédric Le Goater wrote:\n> + Peter, Fabiano,\n> \n> On 4/16/26 03:49, Jamin Lin wrote:\n> > Change internal EHCI descriptor addresses from uint32_t to uint64_t.\n> > \n> > The following fields are updated:\n> > - EHCIPacket::qtdaddr\n> > - EHCIQueue::{qhaddr, qtdaddr}\n> > - EHCIState::{a_fetch_addr, p_fetch_addr}\n> > \n> > Update get_dwords() and put_dwords() to take 64-bit addresses and\n> > propagate the type change through the descriptor traversal paths.\n> > \n> > Adjust NLPTR_GET() to operate on 64-bit values:\n> > \n> >      #define NLPTR_GET(x) ((x) & ~0x1fULL)\n> > \n> > so that link pointer masking works correctly when descriptor\n> > addresses exceed 32-bit space. The previous mask (0xffffffe0)\n> > implicitly truncated addresses to 32 bits.\n> > \n> > This patch does not change the on-wire descriptor layout yet.\n> > It only removes the internal 32-bit address limit and prepares\n> > for later patches that will add full 64-bit QH/qTD/iTD/siTD support.\n> > \n> > Update the EHCI trace-events prototypes for QH, qTD, iTD, and siTD to\n> > use uint64_t for the address argument and print it with PRIx64. This\n> > ensures full 64-bit addresses are shown in trace output and improves\n> > debugging of queue heads and transfer descriptors.\n> > \n> > Migration compatibility:\n> > \n> > The fetch address fields in EHCIState are extended from 32-bit to\n> > 64-bit, requiring a VMState version bump (v2 -> v3).\n> > \n> > Backward compatibility is preserved by keeping the legacy 32-bit\n> > fields (a_fetch_addr_pre_v3, p_fetch_addr_pre_v3) for pre-v3\n> > migration streams via VMSTATE_UINT32_TEST(), and introducing new\n> > 64-bit fields for v3+.\n> > \n> > In post_load, pre-v3 state is promoted to the 64-bit fields.\n> \n> Since ehci is supported by downstream, I'd prefer that the\n> migration maintainers also verify the implementation.\n\nThanks, I'll only look at the migration bits.\n\n[...]\n\n> > @@ -2441,6 +2445,11 @@ static int usb_ehci_post_load(void *opaque, int version_id)\n> >           }\n> >       }\n> > +    if (version_id < 3) {\n> > +        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> > +        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> > +    }\n> > +\n> >       return 0;\n> >   }\n> > @@ -2470,9 +2479,14 @@ static void usb_ehci_vm_state_change(void *opaque, bool running, RunState state)\n> >       }\n> >   }\n> > +static bool ehci_core_is_before_version_3(void *opaque, int version_id)\n> > +{\n> > +    return version_id < 3;\n> > +}\n> > +\n> >   const VMStateDescription vmstate_ehci = {\n> >       .name        = \"ehci-core\",\n> > -    .version_id  = 2,\n> > +    .version_id  = 3,\n> >       .minimum_version_id  = 1,\n> >       .pre_save    = usb_ehci_pre_save,\n> >       .post_load   = usb_ehci_post_load,\n> > @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n> >           /* schedule state */\n> >           VMSTATE_UINT32(astate, EHCIState),\n> >           VMSTATE_UINT32(pstate, EHCIState),\n> > -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> > -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> > +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> > +                            ehci_core_is_before_version_3),\n> > +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> > +                            ehci_core_is_before_version_3),\n> > +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n\nTL;DR: I feel like we still need machine type compat properties.\n\nDetails:\n\nWhen a v2 stream arrives, two _TEST()s will do the loading, then\npost_load() extend it to 64bits, looks fine.\n\nWhen a v3 stream arrives, two _TEST()s got skipped then latter two take\neffect.  post_load() skips.  Looks fine.\n\nWhen migrating to another QEMU, due to the fact saving vmstates always take\nvmsd's version declared (3), I don't see how it can migrate back to a v2\nstream; it didn't know about v3.\n\nJiamin, have you tested migrating from a new QEMU binary back to another\nold one?  For upstream and serious devices, we need to guarantee\nbi-directional migrations, back and forth.\n\nThanks,\n\n> >           VMSTATE_END_OF_LIST()\n> >       }\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=JBVdcMXg;\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=C8kbQ02T;\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 4fxyyz3Fjjz1yD3\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 18 Apr 2026 01:11:53 +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 1wDkqR-00060u-MP; Fri, 17 Apr 2026 11:10:59 -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 <peterx@redhat.com>) id 1wDkqQ-00060e-GO\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 11:10:58 -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 <peterx@redhat.com>) id 1wDkqO-0007Rb-DD\n for qemu-devel@nongnu.org; Fri, 17 Apr 2026 11:10:58 -0400","from mail-wr1-f69.google.com (mail-wr1-f69.google.com\n [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-623-ss7H3vKENhysPa6mDfevEw-1; Fri, 17 Apr 2026 11:10:52 -0400","by mail-wr1-f69.google.com with SMTP id\n ffacd0b85a97d-43d70e3e4e7so872325f8f.1\n for <qemu-devel@nongnu.org>; Fri, 17 Apr 2026 08:10:52 -0700 (PDT)","from x1.local ([142.189.10.167]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e4633bsm5228592f8f.26.2026.04.17.08.10.45\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Fri, 17 Apr 2026 08:10:48 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776438654;\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=s92uyUk+uNDIf6n63xBX8YC66tbvXrwMqpU+Qn6/kNw=;\n b=JBVdcMXgMa7iOcC8KCPBcK3dJ6cbvVtDIzfdzakGYGqJZEqBG/CXE2iCfF0sZmKYZYcJMZ\n TqrgySv1AU4VKC10Ur9bBobURfbVGpHqQaN7U4fJMyf1viG7bmEW2gMwqhK/bN9tmCQRqq\n xrjp3F0zpoFUrPWFW2dzQT+VrfQ8P4w=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1776438651; x=1777043451; darn=nongnu.org;\n h=in-reply-to:content-transfer-encoding:content-disposition\n :mime-version:references:message-id:subject:cc:to:from:date:from:to\n :cc:subject:date:message-id:reply-to;\n bh=s92uyUk+uNDIf6n63xBX8YC66tbvXrwMqpU+Qn6/kNw=;\n b=C8kbQ02TX5ho5LF3mUI1yslsd7ihqO5MEEeigs3RdbXBP+zTRC9ID46Hb7DOXKXdlB\n h+mQcHBxY4bYxVR4WkGdbRpKJLxrQf9Eif5Bk7iF470ba8ZNheIboyNygYrZLBI+DiQx\n W2CabHII5NiiJIbBhkIpRqA1sHbv0aoYFeRv/WllK3UAtOJ3Iakhgrr+8GWl5VaPwZz1\n kQoHYhEcw0dpoEVHwbc2h9ZHJ60A6qNSjp5B0+ibFtWNDE8s8RW114gGwkiQPhX/Ecwp\n C/kWUpQDXKDjLYb9Pvn3qZ63FQPm7SSzmb3uCFZvuquXOef4Acmll8drbcveRTm4ypir\n zJtQ=="],"X-MC-Unique":"ss7H3vKENhysPa6mDfevEw-1","X-Mimecast-MFC-AGG-ID":"ss7H3vKENhysPa6mDfevEw_1776438651","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776438651; x=1777043451;\n h=in-reply-to:content-transfer-encoding:content-disposition\n :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=s92uyUk+uNDIf6n63xBX8YC66tbvXrwMqpU+Qn6/kNw=;\n b=Klm+c9BU2Pf/Bs50CN2cc1/3dTGdHD8TocVRTv26Pt6GQ5Z1fJDKvmUcv9brv6VaWA\n tlM+KKinkaVbIQii2+pQ4g9GDaL8YFStH7snRLJKtQcxaPGFouB5sdrpPv3dE6n/jFkB\n ozTGkk86qylC2iPMinaaR/WUo5eWFuBMUTActJa21vfNzhILrc8MXURnh1bpwsPZW1AH\n rx03I+PkYkdpV5HL+db+vkz1XAbdrS5cr++vt/FQP7V4Nt2EIszHfwZ0/RTRynCP27mH\n 68UX8Ahlm5L0SUJCpvdQsvVyZCMNhnoGu3xITU+u9i25tVqobjIJQ7N6xaZaoxRBmP9K\n jK3A==","X-Forwarded-Encrypted":"i=1;\n AFNElJ8+1JKPydwAZyiOSH8JUyAHLguJ29ghh43yUdXW+UZqWRfLXnVr+qWRstKBzRcjHGzO9sgbU7V5Srx4@nongnu.org","X-Gm-Message-State":"AOJu0Yzg93nrKDk43oKQmT3g5CP2DsaNlYrmO5chq/2rdqvUsS0dsM9C\n C3KFpq9lB1I7p75b3yYDSKhT7QbuUKt2PvYdx1bKXtCcXCsAz9fdclLxGpfsE5lNJ52/lkOhJx2\n XB/P9DHpY0NNqGJSl0HOCD+TRQLyz1iXAr7QNSriqzuLBuRljTBz31/2K","X-Gm-Gg":"AeBDieuhyd7jb/+uc1bUzFFqwrgGzbmWv2J9z1LpK4tddUptapS7Zj3E74i20vaEqtJ\n ESsikpCvDjfD1yN81qBRE+Fue+I43MvLV26zEXsuH02vPn+dIEzMqqL+2ktUwrGKcOUW3bXJK7a\n c/EynOQoV65zwA6RjaLzEQ8GD0Jdi7HCbwr2se/sQZthHORXu4lkbi5B4++AGT7qH8YWDdErz/e\n 39xUHVCDu5BmgTRL41OGjiUG0LUjUS3spqaH5Zl/L0jABfebYnDeGi5JSQjhvSc12insLx5/9tB\n 4EAoOt5bVe0rYCI884Wd5W8mF9boKi9TY2ZWaot2q5Mtkwb6XvsEGX0mdcs2oInzR3dCB5dZl7U\n 6hH2IFythqexqW5b+qprJVBWyD9Sb7YUC/Hpv0IwLkp9xch5vgkz6LTRH1Q==","X-Received":["by 2002:a05:6000:2902:b0:43d:77a8:3baa with SMTP id\n ffacd0b85a97d-43fe3dc551dmr5099579f8f.3.1776438650768;\n Fri, 17 Apr 2026 08:10:50 -0700 (PDT)","by 2002:a05:6000:2902:b0:43d:77a8:3baa with SMTP id\n ffacd0b85a97d-43fe3dc551dmr5099379f8f.3.1776438648677;\n Fri, 17 Apr 2026 08:10:48 -0700 (PDT)"],"Date":"Fri, 17 Apr 2026 11:10:44 -0400","From":"Peter Xu <peterx@redhat.com>","To":"=?utf-8?q?C=C3=A9dric?= Le Goater <clg@kaod.org>","Cc":"Jamin Lin <jamin_lin@aspeedtech.com>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>,\n Troy Lee <leetroy@gmail.com>, Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>,\n Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Message-ID":"<aeJNdLTRSZQiEiP_@x1.local>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>","Received-SPF":"pass client-ip=170.10.129.124; envelope-from=peterx@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"}},{"id":3679225,"web_url":"http://patchwork.ozlabs.org/comment/3679225/","msgid":"<TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>","list_archive_url":null,"date":"2026-04-20T05:56:11","subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":81768,"url":"http://patchwork.ozlabs.org/api/people/81768/","name":"Jamin Lin","email":"jamin_lin@aspeedtech.com"},"content":"Hi Peter, Philippe, Cédric\n\n> Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> 64-bit\n> \n> On Fri, Apr 17, 2026 at 09:01:34AM +0200, Cédric Le Goater wrote:\n> > + Peter, Fabiano,\n> >\n> > On 4/16/26 03:49, Jamin Lin wrote:\n> > > Change internal EHCI descriptor addresses from uint32_t to uint64_t.\n> > >\n> > > The following fields are updated:\n> > > - EHCIPacket::qtdaddr\n> > > - EHCIQueue::{qhaddr, qtdaddr}\n> > > - EHCIState::{a_fetch_addr, p_fetch_addr}\n> > >\n> > > Update get_dwords() and put_dwords() to take 64-bit addresses and\n> > > propagate the type change through the descriptor traversal paths.\n> > >\n> > > Adjust NLPTR_GET() to operate on 64-bit values:\n> > >\n> > >      #define NLPTR_GET(x) ((x) & ~0x1fULL)\n> > >\n> > > so that link pointer masking works correctly when descriptor\n> > > addresses exceed 32-bit space. The previous mask (0xffffffe0)\n> > > implicitly truncated addresses to 32 bits.\n> > >\n> > > This patch does not change the on-wire descriptor layout yet.\n> > > It only removes the internal 32-bit address limit and prepares for\n> > > later patches that will add full 64-bit QH/qTD/iTD/siTD support.\n> > >\n> > > Update the EHCI trace-events prototypes for QH, qTD, iTD, and siTD\n> > > to use uint64_t for the address argument and print it with PRIx64.\n> > > This ensures full 64-bit addresses are shown in trace output and\n> > > improves debugging of queue heads and transfer descriptors.\n> > >\n> > > Migration compatibility:\n> > >\n> > > The fetch address fields in EHCIState are extended from 32-bit to\n> > > 64-bit, requiring a VMState version bump (v2 -> v3).\n> > >\n> > > Backward compatibility is preserved by keeping the legacy 32-bit\n> > > fields (a_fetch_addr_pre_v3, p_fetch_addr_pre_v3) for pre-v3\n> > > migration streams via VMSTATE_UINT32_TEST(), and introducing new\n> > > 64-bit fields for v3+.\n> > >\n> > > In post_load, pre-v3 state is promoted to the 64-bit fields.\n> >\n> > Since ehci is supported by downstream, I'd prefer that the migration\n> > maintainers also verify the implementation.\n> \n> Thanks, I'll only look at the migration bits.\n> \n> [...]\n> \n> > > @@ -2441,6 +2445,11 @@ static int usb_ehci_post_load(void *opaque, int\n> version_id)\n> > >           }\n> > >       }\n> > > +    if (version_id < 3) {\n> > > +        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> > > +        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> > > +    }\n> > > +\n> > >       return 0;\n> > >   }\n> > > @@ -2470,9 +2479,14 @@ static void usb_ehci_vm_state_change(void\n> *opaque, bool running, RunState state)\n> > >       }\n> > >   }\n> > > +static bool ehci_core_is_before_version_3(void *opaque, int\n> > > +version_id) {\n> > > +    return version_id < 3;\n> > > +}\n> > > +\n> > >   const VMStateDescription vmstate_ehci = {\n> > >       .name        = \"ehci-core\",\n> > > -    .version_id  = 2,\n> > > +    .version_id  = 3,\n> > >       .minimum_version_id  = 1,\n> > >       .pre_save    = usb_ehci_pre_save,\n> > >       .post_load   = usb_ehci_post_load,\n> > > @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n> > >           /* schedule state */\n> > >           VMSTATE_UINT32(astate, EHCIState),\n> > >           VMSTATE_UINT32(pstate, EHCIState),\n> > > -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> > > -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> > > +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> > > +                            ehci_core_is_before_version_3),\n> > > +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> > > +                            ehci_core_is_before_version_3),\n> > > +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > > +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> \n> TL;DR: I feel like we still need machine type compat properties.\n> \n\nI don't understand this: Could you please describe it in more detail?\n\n> Details:\n> \n> When a v2 stream arrives, two _TEST()s will do the loading, then\n> post_load() extend it to 64bits, looks fine.\n> \n> When a v3 stream arrives, two _TEST()s got skipped then latter two take effect.\n> post_load() skips.  Looks fine.\n> \n> When migrating to another QEMU, due to the fact saving vmstates always take\n> vmsd's version declared (3), I don't see how it can migrate back to a v2 stream;\n> it didn't know about v3.\n> \n> Jiamin, have you tested migrating from a new QEMU binary back to another\n> old one?  For upstream and serious devices, we need to guarantee\n> bi-directional migrations, back and forth.\n> \n\nSorry, I am not familiar with the design of QEMU migration, and I don't know how to test it.\nI added these hook functions based on Philippe's suggestion and review.\nCould you tell me how to test migration to ensure both version 3 and version 2 are workable?\n\nThanks for the help, review, and suggestions.\n\n> Thanks,\n> \n> > >           VMSTATE_END_OF_LIST()\n> > >       }\n> > >   };\n> \n> --\n> Peter Xu","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=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=jcSrrcQq;\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=aspeedtech.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 4fzZW35w5Dz1yHB\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 15:56:46 +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 1wEhcO-0005LW-SG; Mon, 20 Apr 2026 01:56:24 -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 <jamin_lin@aspeedtech.com>)\n id 1wEhcM-0005Ko-38; Mon, 20 Apr 2026 01:56:22 -0400","from mail-japanwestazlp170120003.outbound.protection.outlook.com\n ([2a01:111:f403:c406::3] helo=OS8PR02CU002.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 <jamin_lin@aspeedtech.com>)\n id 1wEhcJ-0005M2-PA; Mon, 20 Apr 2026 01:56:21 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by TY0PR06MB5032.apcprd06.prod.outlook.com (2603:1096:400:1bc::12)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.30; Mon, 20 Apr\n 2026 05:56:12 +0000","from TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3%3]) with mapi id 15.20.9818.032; Mon, 20 Apr 2026\n 05:56:11 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=h1hlNXedgSnXpR+wcH7y2Eb7oX1RomSoczV0glz7fUEMRqwyhB1FjC5xXKeQh0wd2Y2ICq/Yt274KetonTGbLMdzD7YxrkxExqi70TqmWkhLgSaHW5tiuAN+z9OyYrsU/GcG9S+yvPYtUUZCb3tHlFmtLJCcpYCxy+4MTH5WIi7+zJjgsJMhcCCbGEmF2nkSe9E8FSmovgwXcShDb3EtGhKdqCkUKi3I9840j6rVzo3JVEF7BkurVx1RwDNGSTMRFjWSqDdlbCIkjGxT40rFmAVx3k828r2G4z+e3ZZFTIODq6YYKwUCcmQLVxYgkWV01p14PiX5TZAD7PddM5E6Pg==","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=c/N1bCehV+OOkupOE6DdgNlmLfSblwJp7VpcO1yibEg=;\n b=NuwJ5wWcjJJeqKmUtCV/F+vmSTx+hGhk+3cMroVXbw5svX+gAZlfMIc8qnGHhIEZekJih1UeGGoCy/OOjX6/0JlKWjH5Gico2O7/KTCAUELY9pbzAIDYrRZ3xH5PequYXB50C3c8qoxbPWqaS6qjpB7X2gSgYTbGSruY1KVtsnnREoAweJ1loIZj4IgBFBW+rKljbtybAlh8+y40l93CXuQDVfNqXaq2LOJVUxlBwZ54IhKN9vxT5zz9H67GUWZUnEpi5sLbgm+J3xYz8ci+iUm4kQgmNcX5i28+LQZB5UsPbl+66Blt0NvG2YK+G2+I09DuscQSEc7P86C1HsnvVQ==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=aspeedtech.com; dmarc=pass action=none\n header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=c/N1bCehV+OOkupOE6DdgNlmLfSblwJp7VpcO1yibEg=;\n b=jcSrrcQqdsqdo7lnJA4U6D7mtvKUhizygU/GHF1YVaOC7mQoGOEd9efdlL5igqCkyVGuNmDJK35s0TZPDRLnO3PT6kGShVCDDWWwxQefa6e9fKZr6BJT9k87V1iiQWYAJp6WUyTa7dhZqBa4BvPD5GzEvatyWlbWeyDtw+Eek/IclafxO0UXFs74tz9Euz0CBF6gF9FaxqzZEvimxQlPfaZLnToOGjQp/Ddr8E+gyYZInNpll5NhyXHd4rdguohyg9/KxAGfJ3t8NJ0nbVmtVSn9bpDFvAfHO4ybFY0ArMdO8A/JpDTmatERQcq2fBmonDswWQbM2orLjwlkhJZPqA==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"Peter Xu <peterx@redhat.com>,\n =?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>","CC":"\"philmd@linaro.org\" <philmd@linaro.org>, Peter Maydell\n <peter.maydell@linaro.org>, Steven Lee <steven_lee@aspeedtech.com>, Troy Lee\n <leetroy@gmail.com>, Kane Chen <kane_chen@aspeedtech.com>, Andrew Jeffery\n <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>, \"open\n list:ASPEED BMCs\" <qemu-arm@nongnu.org>, \"open list:All patches CC here\"\n <qemu-devel@nongnu.org>, Troy Lee <troy_lee@aspeedtech.com>,\n \"flwu@google.com\" <flwu@google.com>, \"nabihestefan@google.com\"\n <nabihestefan@google.com>, Fabiano Rosas <farosas@suse.de>","Subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Topic":"[PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Index":"AQHczUNKKWmZ+R83iUmW5is8kUw4XrXi1YYAgACIrACABBnIQA==","Date":"Mon, 20 Apr 2026 05:56:11 +0000","Message-ID":"\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org> <aeJNdLTRSZQiEiP_@x1.local>","In-Reply-To":"<aeJNdLTRSZQiEiP_@x1.local>","Accept-Language":"zh-TW, en-US","Content-Language":"zh-TW","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=jcSrrcQq;\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=aspeedtech.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"TYPPR06MB8206:EE_|TY0PR06MB5032:EE_","x-ms-office365-filtering-correlation-id":"b1225b44-f932-4a80-1703-08de9ea1869f","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|366016|376014|7416014|1800799024|38070700021|56012099003|22082099003|18002099003;","x-microsoft-antispam-message-info":"\n Jk/wE6McK/trvUwV3PvuM7LGqA8hC7GSBpBY17zrgybkMNXx373Amyp+6t56xoYM0tbGbNGnDHxldcUuCvW5689ldKv/GM/MKzrMtb/2930WSGK37x1Pic24tJ2RNU6Wj/I6mqcOLIuRFZOYDN/z0fy9CD6/45uS6XXcb53OZ00BDCR6BNSVX6n29Iau0bv5L0IISThPizcqOaPxGoEJiHcp4OpZP+3iTHsQee7h7gRBvsWjjN7pCNTjoSlf/yXXyLMKNxaWcaudJ3KMMJDWsVDUHC0xawEBENGG45q3NoIjZ/6kN7tkUwARiRknVZoRkoo4AKDdVyEOjBHQ3eY0PuMtavNX5iuCaY7fRRCx0zdspe9/YPvDyE2spxXCYr/phT+a0aulP2szZW/X3Rc6HV/jJ5BkrY7qts7ffIvmCWMevAB7XmgpfU9R0WgLafVsefxVfOGOLSWrX5YfZo95vyK3fLRqhUgxfYE7h3bx92uS4TvSDIvrYMQ2enT+RxDdyn+tO1qXrLyBhzBcmBE56kt+hgQ8YSH4PPlEe/yly3zOUkCB3CPF1p11b4f/RgghxCAzjVd+TqDGG4MydiKnlxfATTzwVyYg9NZaQzG33WLo/1MaJ/8iQ982GO6IVjsi0KhJc0rywmlnh1Obr/6xtlwrqFIZYEXoc7roxlB4q1ZlTdfZ5hxBt29hX/v9sp32NgyLzNxJn7qJ3Pav1jAj9DDY4whkgq4smPrZfOZsVRtanxc7su3XVXBf74jX3WRuBteHAWD/TOcXBKcttEyfC0UG0mllDirSF5hDmy0q9A8=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-tw; SCL:1;\n SRV:; IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(366016)(376014)(7416014)(1800799024)(38070700021)(56012099003)(22082099003)(18002099003);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?M3UnHgcE6caSvghAINeEw80OPp9a?=\n\t=?utf-8?q?LzGCv5Mon6QEVuKGDnSMyxQ+lYKoMyIXjpD5Drk4Q/ijAY2JbPUZ1P/s7YNKddMgz?=\n\t=?utf-8?q?c6KtAuNIjmO/+POsvdmBIAtjTMuzpl3qsj20VtO7MxIk9HPPvTeUKxAerX/n1m6D6?=\n\t=?utf-8?q?YRBitV3E/ahrLe8Jot3FahOxpLw5Nzo3xXHaYLUUlXxC4Q6ktZXPxNs+kb50cdWf7?=\n\t=?utf-8?q?hqxN3mJVyYB0ZFC4Hx7MpGQbiQM9eJV3j6NrPmv8dexeD/d35zYSjd0DHL9/Qy8Fq?=\n\t=?utf-8?q?8JH9y/iJLp6trZ89OVZ51lqxBS1U94dyNooM4mtEdvrCZ1bfiEqvJ5Fn1RaFTgfTU?=\n\t=?utf-8?q?AdP4jxegl4m7cKDR1/7TKVwW+/CijUzVOBibKBACWYIr3OnErjUIsHd6zc72eBPED?=\n\t=?utf-8?q?IZLsWx8mcelfQXmlQDhTW5issFoqQrMVh8kdiwPhDnD2+jcosnChKD8qbERFFw27B?=\n\t=?utf-8?q?ubM6ti8WtEv/1PG8qg6YBHS1X5FHwi1A2YWWeqiybvSfsBWD+STdzglU9X+i2AeV9?=\n\t=?utf-8?q?KLEhnDRu5qUKY2vEz7jmeLfQJr6GmHmWY5xxwYCw+w080V84mSA3Ru2YiorObfaGq?=\n\t=?utf-8?q?c49xyzIhhS/VHI8jx4K6ox9BvDgmtBx1aebdUXX1bYkBKX09Pknu78FNQr9uS2sL3?=\n\t=?utf-8?q?A2N+g5BWnXwYDlLU5QGpekpseAPBg32qSjwUlTrnEj7AqWQAr1gKLnmnn7C5+FNtI?=\n\t=?utf-8?q?i0y6Z467CaUBExDwri3gjd0YYmgjK2ArsAxT0J8ntVE4l1Lc5JYnXSrmlgChdCYeq?=\n\t=?utf-8?q?CYiiwN9o4svhuj5LeM5L0Ck1PUwW7YlBdZfm+P6lHAFG/OJK5ZsC4Xaf7a66h2js6?=\n\t=?utf-8?q?2GHaePevh94pknXxvlxLPkyWdA3FiSnQrJZKITuJK+nmJTveRR99MLAqvs0ApY73I?=\n\t=?utf-8?q?X0IXBWvu6cR2HkKM+KBsTlV4GEvDObhk2KH0Hw2eBpePbnDPGPzC8GMughjYDXpDD?=\n\t=?utf-8?q?/mmbzYxk4+gW+C607wuT+sFG08dzOfriAZa4z5Dxe7xxEwOnvDiuiFKZFkVRZSnWd?=\n\t=?utf-8?q?AF4D9fa7fd0SfwgDAo6Zue5SfbH8w3z6/T824pzXeubKCFzRkVnXCWLzva3Yenzm0?=\n\t=?utf-8?q?08TjHMoseGZCPKHGqKZv4M+OWImEFMdIODD1oJDCNp4Sthlw8ArpJ2wQHOuCh/bsN?=\n\t=?utf-8?q?htVqGailQP7idwAuywhjLWpALGwL+r0pssXt+u7GhshokEUdnJ8iB/+Hrw4gvDHal?=\n\t=?utf-8?q?1x7yK5KieaYeQsNZTQGNH+Rh5Zx6J8v3TdVrgaJG+SrKcZyeZAJBQQ8+3iMqHQ/Sl?=\n\t=?utf-8?q?L7vbukjRPAFrN1WVn7u0RyBDjs5B2Lfr+xMknUV0WT7mbt8Mw0zZH/+sEbdpyUHwd?=\n\t=?utf-8?q?bKblfyLw+I/xRQq+c/H6mjUeM0dGt9f2IXNZgsoaX5XXaOrR2O/hWBOb+HKwBI88G?=\n\t=?utf-8?q?n6DTSXa2AgZyduZmJKUtEKqX4ofwByFnHSo159ljar8beIxpZfxF57Lmcpv2wVEQc?=\n\t=?utf-8?q?9KYsmBsS6KHuj1LdkFwnHyfrqCV4GcpfrB42bVY/4JceQtLxO1ER7BCD5CVyQbfkL?=\n\t=?utf-8?q?3hrBRh0t362cyOp38utrM1ESFX9mxelaWWZ6Nxoe289fpQAPkclXZVRhIAX7KnKcX?=\n\t=?utf-8?q?Mci+S7/n5nQB9Ia7cxtRKfuFBG6qMwrjI9p2km6ha+aT9DHyqWNPHhNsVKTlaBEXi?=\n\t=?utf-8?q?XsJ6wxvQGX6T3KD2nt2Yj+3RYQ2dA6gw=3D=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n TSSJ+CeZkLiKas2fcNX92JTNGBwyTNfuq21g0Uxk+E5JqEgiKT64MpwlNUCyZGg8iQ8H+Sa5NhHvOsZ53nj+KYiN7PtfjDARIaSqlzTzbS4uT8TGcsDArJHraBOWX1/c3gSNKddyUccWVpQGNS6oisOv2b2X+F/zYh0VlwEshrWaPX69Ca/clxUXsrLEj6PrY+k9Ur/dmmxkkRM8CNzaPSC1Nw6O3uS8QhuLApzlMsAjCr8lpKg00lNxBbRxsxbqKfYcR8fGHq3N8UaEdawNBMTnkfN81Y8sq96zmHh+1z5Rsr6vxN+ZH6cdNvl591QqMF7zdXEkT6WViP25Lqcg0A==","X-OriginatorOrg":"aspeedtech.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"TYPPR06MB8206.apcprd06.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n b1225b44-f932-4a80-1703-08de9ea1869f","X-MS-Exchange-CrossTenant-originalarrivaltime":"20 Apr 2026 05:56:11.8330 (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"43d4aa98-e35b-4575-8939-080e90d5a249","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n x072+qQav6AeYME41qmAdCQkqMxWGnpDZPXi3OixR+ToGLeB0QLhCXtx53HfYT3Z9EKohujayMLqWH9yNhELBafW4+CGFGzj7fUBdZnarH4=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TY0PR06MB5032","Received-SPF":"pass client-ip=2a01:111:f403:c406::3;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=OS8PR02CU002.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, SPF_HELO_NONE=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"}},{"id":3679406,"web_url":"http://patchwork.ozlabs.org/comment/3679406/","msgid":"<aeYrfQuAsEaOpH_O@x1.local>","list_archive_url":null,"date":"2026-04-20T13:34:53","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":67717,"url":"http://patchwork.ozlabs.org/api/people/67717/","name":"Peter Xu","email":"peterx@redhat.com"},"content":"On Mon, Apr 20, 2026 at 05:56:11AM +0000, Jamin Lin wrote:\n> Hi Peter, Philippe, Cédric\n\nHi, Jamin,\n\n[...]\n\n> > > > @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n> > > >           /* schedule state */\n> > > >           VMSTATE_UINT32(astate, EHCIState),\n> > > >           VMSTATE_UINT32(pstate, EHCIState),\n> > > > -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> > > > -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> > > > +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> > > > +                            ehci_core_is_before_version_3),\n> > > > +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> > > > +                            ehci_core_is_before_version_3),\n> > > > +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > > > +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> > \n> > TL;DR: I feel like we still need machine type compat properties.\n> > \n> \n> I don't understand this: Could you please describe it in more detail?\n\nSee hw/core/machine.c and entries added into hw_compat_*[] arrays.  IIUC,\nif this is an important device and if we want to guarantee bidirectional\nmigration (I'll explain later), then we should stick with machine compat\nproperties.\n\n> \n> > Details:\n> > \n> > When a v2 stream arrives, two _TEST()s will do the loading, then\n> > post_load() extend it to 64bits, looks fine.\n> > \n> > When a v3 stream arrives, two _TEST()s got skipped then latter two take effect.\n> > post_load() skips.  Looks fine.\n> > \n> > When migrating to another QEMU, due to the fact saving vmstates always take\n> > vmsd's version declared (3), I don't see how it can migrate back to a v2 stream;\n> > it didn't know about v3.\n> > \n> > Jiamin, have you tested migrating from a new QEMU binary back to another\n> > old one?  For upstream and serious devices, we need to guarantee\n> > bi-directional migrations, back and forth.\n> > \n> \n> Sorry, I am not familiar with the design of QEMU migration, and I don't know how to test it.\n> I added these hook functions based on Philippe's suggestion and review.\n> Could you tell me how to test migration to ensure both version 3 and version 2 are workable?\n\nSince this patch already modified VMSDs, I believe migration test should\nhave been carried out at the very minimum..  Logically if vmsd versioning\nis used, we should also have tested forward migrations, because that's only\nfor that.\n\nWhat I'm talking about is I think backward migration will fail.\n\nForward migration describes the case when a VM hosted by an old QEMU binary\n(e.g. QEMU v10.2.0) is migrated to a new QEMU (e.g., after this patch\napplied on top of master).\n\nBackward migration describes the case when a VM hosted by a new QEMU binary\n(e.g., after this patch applied on top of master) is migrated back to an\nold QEMU binary (e.g. QEMU v10.2.0).\n\nFor different devices, we should allow different level of support on\nmigration.  Any device that may be important to either upstream QEMU or\ndownstreams should better allow bi-directional migration.  In this case we\nneed to use machine compat properties I mentioned.  I'm not yet sure where\nEHCI controller falls e.g. v.s. XHCI.. when not sure, we can also just\nstick with machine compat properties to be on the safe side.\n\nFor more info, you can also refer to:\n\nhttps://www.qemu.org/docs/master/devel/migration/compatibility.html\n\nThanks,","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=KGyKNnLQ;\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=JhMD7AEf;\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 4fzmhy1mz6z1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 23:36:00 +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 1wEomF-000679-2W; Mon, 20 Apr 2026 09:35:03 -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 <peterx@redhat.com>) id 1wEomD-000652-Fx\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 09:35:01 -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 <peterx@redhat.com>) id 1wEomB-0001Co-GJ\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 09:35:01 -0400","from mail-vk1-f199.google.com (mail-vk1-f199.google.com\n [209.85.221.199]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-414-G1hAp_j8OVSsekoBOSOLHg-1; Mon, 20 Apr 2026 09:34:56 -0400","by mail-vk1-f199.google.com with SMTP id\n 71dfb90a1353d-56efe2b00daso2042309e0c.2\n for <qemu-devel@nongnu.org>; Mon, 20 Apr 2026 06:34:56 -0700 (PDT)","from x1.local ([142.189.10.167]) by smtp.gmail.com with ESMTPSA id\n 6a1803df08f44-8b02ae5eaf1sm77805746d6.30.2026.04.20.06.34.53\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 20 Apr 2026 06:34:54 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776692097;\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=fqk6bMsX2PsB474lKYgiEH+ZlR33fDYdf2OiMeOiJK8=;\n b=KGyKNnLQHlrT0kkX4Y1Y1Qc2lByoIuaPR/GJG4PMU5jdxq9LcUW4qPK84YHIAEFgr9S9C5\n xDkTof6Z9aSNo8XZFJX7x4jHwKhzb/ZDo8RUJYIcuF6BglCwcEQjO0qHioDPdCP9C6skIw\n F7yFK1hzlbcg867CfwNr9DGuzd/f3rU=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1776692096; x=1777296896; darn=nongnu.org;\n h=in-reply-to:content-transfer-encoding:content-disposition\n :mime-version:references:message-id:subject:cc:to:from:date:from:to\n :cc:subject:date:message-id:reply-to;\n bh=fqk6bMsX2PsB474lKYgiEH+ZlR33fDYdf2OiMeOiJK8=;\n b=JhMD7AEftWNrt/v9YnET4Fkr3PUZgXZlC0P8k0Ke2Haoqy8KfunKpyGLFrqw3R9+gC\n 51yGocOG5/OFgIMTwT3CEIDA+586gC3QZA+XbL/A3JNbNK1zNk8QONbF7petiI4mMxIE\n /SfcugJ4xEEz+2ArCOPhJvU4lsuo/xAEolsK4bIw2wIaDrSNuiMdoTn8iEn7L1ucHLdq\n scs9MWxCViO37ZCxWJ0ETklxzYeF+xsM8ilSE3jc4+PME6aEuR3qMDjUpmOIkXHNYGlJ\n OXps9g0kcCCnwEC/7bpok+RfNIE/W9IYjP40vKMNv5DSGGeEXvu2s4fKs9WBSDS/euCT\n 9RYg=="],"X-MC-Unique":"G1hAp_j8OVSsekoBOSOLHg-1","X-Mimecast-MFC-AGG-ID":"G1hAp_j8OVSsekoBOSOLHg_1776692096","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776692096; x=1777296896;\n h=in-reply-to:content-transfer-encoding:content-disposition\n :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=fqk6bMsX2PsB474lKYgiEH+ZlR33fDYdf2OiMeOiJK8=;\n b=FgqX7nGniMClFGriLLPo+NbUV2SSWNafRiu2Hcnlc4uAo5DqGjf3IcfhblIsZhfSVU\n ZaSSSEwT5zBOALwOdRt3C2JccHhVJNGvhkzzrT7Me9tjDfkxPlYSDe9nZDb28zsb+i2I\n RAFHtSBtGTVT4vfU0KdRPt4U4K37qI9zfkXXQyiCwESDJ68Zu8bsYo2stQOrytILrdTK\n G/UZ/7NI7seiLLQTY258wcSVsWwXLC9oeNmmjxq+h6j472ouRqwtR7ySLeftpxTKnC2r\n wC8IEGpQ/HHegZwGzmhX4E5lSGxoaJqELCjvr0jo2oYvg5dRK17j/sIf2mz78w63Zepi\n JlSw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/Lik803PkHTqpjIwfw9vH6yp2kGQiZ4I85amoS1PIjYP7bYX4l/+5WsNYw4patpQ2n8/zHyUkEjaif@nongnu.org","X-Gm-Message-State":"AOJu0YxsVUI+2uH4+co6YXBS48EU6tfBHv9F0BHffT/8PtqAAFpJmwO5\n fIsZZfzYvQI8hDvcmMMAkWB2fLvqMM1n75z+SnKZIUZEZdw0TNHcgu97ZMq0Jmd/h6vh4HW2T6k\n drenRRQswlP6gFRIorYnrxNktV0E6c6euSMSo+E0syTkEZO98tX6HjXBo","X-Gm-Gg":"AeBDieukKqUYBTO9/aMgQBSlQemWr5YNx04aGS9Z7SWjgJkgYrOV/V8KQ5gn3WOBmF6\n Hx3bE3LWlFnjq6VsP9It5eqAdYoFkb5CmcR/W7m+vXzu4tYi9FnsLJCxrnQ1aXF/xzxYNi/aoTQ\n pRCmVt7/IRqakE2/qhydi/NoQf2+V4RCnEjJ5jRvTgKCvH/ZATgICsAwPBN+485ezkX60mIoYFj\n N5eSLFv4DlMuWE/qxozztdqTrH/saDJdpJo9UALz1bZrCIbe+HBuwv1yCLJ6s8dVBfYD/tN9il/\n YOdR/LY6cdVbWipHhyWg+4aCZWmYZfaN1u0z7GzAofU9HKdgdahwr8JgGmQDllwPMex7D75xQbY\n E42O6rgcpH2SY+E9YctdsNRuL/xPtGnzb1X/8sGID+XKbThLLzq2BBPvnsA==","X-Received":["by 2002:a05:6122:829e:b0:56b:8e1c:582d with SMTP id\n 71dfb90a1353d-56fa5a76856mr5100651e0c.14.1776692095704;\n Mon, 20 Apr 2026 06:34:55 -0700 (PDT)","by 2002:a05:6122:829e:b0:56b:8e1c:582d with SMTP id\n 71dfb90a1353d-56fa5a76856mr5100567e0c.14.1776692095007;\n Mon, 20 Apr 2026 06:34:55 -0700 (PDT)"],"Date":"Mon, 20 Apr 2026 09:34:53 -0400","From":"Peter Xu <peterx@redhat.com>","To":"Jamin Lin <jamin_lin@aspeedtech.com>","Cc":"=?utf-8?q?C=C3=A9dric?= Le Goater <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Message-ID":"<aeYrfQuAsEaOpH_O@x1.local>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>\n <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>","Received-SPF":"pass client-ip=170.10.133.124; envelope-from=peterx@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\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, 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"}},{"id":3679454,"web_url":"http://patchwork.ozlabs.org/comment/3679454/","msgid":"<0c533df3-b06c-4fc6-a4b9-6e17206525a3@kaod.org>","list_archive_url":null,"date":"2026-04-20T16:04:41","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":68548,"url":"http://patchwork.ozlabs.org/api/people/68548/","name":"Cédric Le Goater","email":"clg@kaod.org"},"content":"On 4/20/26 07:56, Jamin Lin wrote:\n> Hi Peter, Philippe, Cédric\n> \n>> Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n>> 64-bit\n>>\n>> On Fri, Apr 17, 2026 at 09:01:34AM +0200, Cédric Le Goater wrote:\n>>> + Peter, Fabiano,\n>>>\n>>> On 4/16/26 03:49, Jamin Lin wrote:\n>>>> Change internal EHCI descriptor addresses from uint32_t to uint64_t.\n>>>>\n>>>> The following fields are updated:\n>>>> - EHCIPacket::qtdaddr\n>>>> - EHCIQueue::{qhaddr, qtdaddr}\n>>>> - EHCIState::{a_fetch_addr, p_fetch_addr}\n>>>>\n>>>> Update get_dwords() and put_dwords() to take 64-bit addresses and\n>>>> propagate the type change through the descriptor traversal paths.\n>>>>\n>>>> Adjust NLPTR_GET() to operate on 64-bit values:\n>>>>\n>>>>       #define NLPTR_GET(x) ((x) & ~0x1fULL)\n>>>>\n>>>> so that link pointer masking works correctly when descriptor\n>>>> addresses exceed 32-bit space. The previous mask (0xffffffe0)\n>>>> implicitly truncated addresses to 32 bits.\n>>>>\n>>>> This patch does not change the on-wire descriptor layout yet.\n>>>> It only removes the internal 32-bit address limit and prepares for\n>>>> later patches that will add full 64-bit QH/qTD/iTD/siTD support.\n>>>>\n>>>> Update the EHCI trace-events prototypes for QH, qTD, iTD, and siTD\n>>>> to use uint64_t for the address argument and print it with PRIx64.\n>>>> This ensures full 64-bit addresses are shown in trace output and\n>>>> improves debugging of queue heads and transfer descriptors.\n>>>>\n>>>> Migration compatibility:\n>>>>\n>>>> The fetch address fields in EHCIState are extended from 32-bit to\n>>>> 64-bit, requiring a VMState version bump (v2 -> v3).\n>>>>\n>>>> Backward compatibility is preserved by keeping the legacy 32-bit\n>>>> fields (a_fetch_addr_pre_v3, p_fetch_addr_pre_v3) for pre-v3\n>>>> migration streams via VMSTATE_UINT32_TEST(), and introducing new\n>>>> 64-bit fields for v3+.\n>>>>\n>>>> In post_load, pre-v3 state is promoted to the 64-bit fields.\n>>>\n>>> Since ehci is supported by downstream, I'd prefer that the migration\n>>> maintainers also verify the implementation.\n>>\n>> Thanks, I'll only look at the migration bits.\n>>\n>> [...]\n>>\n>>>> @@ -2441,6 +2445,11 @@ static int usb_ehci_post_load(void *opaque, int\n>> version_id)\n>>>>            }\n>>>>        }\n>>>> +    if (version_id < 3) {\n>>>> +        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n>>>> +        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n>>>> +    }\n>>>> +\n>>>>        return 0;\n>>>>    }\n>>>> @@ -2470,9 +2479,14 @@ static void usb_ehci_vm_state_change(void\n>> *opaque, bool running, RunState state)\n>>>>        }\n>>>>    }\n>>>> +static bool ehci_core_is_before_version_3(void *opaque, int\n>>>> +version_id) {\n>>>> +    return version_id < 3;\n>>>> +}\n>>>> +\n>>>>    const VMStateDescription vmstate_ehci = {\n>>>>        .name        = \"ehci-core\",\n>>>> -    .version_id  = 2,\n>>>> +    .version_id  = 3,\n>>>>        .minimum_version_id  = 1,\n>>>>        .pre_save    = usb_ehci_pre_save,\n>>>>        .post_load   = usb_ehci_post_load,\n>>>> @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n>>>>            /* schedule state */\n>>>>            VMSTATE_UINT32(astate, EHCIState),\n>>>>            VMSTATE_UINT32(pstate, EHCIState),\n>>>> -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n>>>> -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n>>>> +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n>>>> +                            ehci_core_is_before_version_3),\n>>>> +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n>>>> +                            ehci_core_is_before_version_3),\n>>>> +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n>>>> +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n>>\n>> TL;DR: I feel like we still need machine type compat properties.\n>>\n> \n> I don't understand this: Could you please describe it in more detail?\n> \n>> Details:\n>>\n>> When a v2 stream arrives, two _TEST()s will do the loading, then\n>> post_load() extend it to 64bits, looks fine.\n>>\n>> When a v3 stream arrives, two _TEST()s got skipped then latter two take effect.\n>> post_load() skips.  Looks fine.\n>>\n>> When migrating to another QEMU, due to the fact saving vmstates always take\n>> vmsd's version declared (3), I don't see how it can migrate back to a v2 stream;\n>> it didn't know about v3.\n>>\n>> Jiamin, have you tested migrating from a new QEMU binary back to another\n>> old one?  For upstream and serious devices, we need to guarantee\n>> bi-directional migrations, back and forth.\n>>\n> \n> Sorry, I am not familiar with the design of QEMU migration, and I don't know how to test it.\n> I added these hook functions based on Philippe's suggestion and review.\n> Could you tell me how to test migration to ensure both version 3 and version 2 are workable?\n\n\nMigrating a running guest back and forth between QEMU [1] and [2]\nshould be possible :\n\n[1] path/to/qemu-10.2/install/bin/qemu-system-x86_64 -M pc-q35-10.2 \\\n     ... \\\n     -device usb-ehci \\\n     -device usb-kbd\n      \n[2] path/to/myqemu-with-patches/install/bin/qemu-system-x86_64 -M pc-q35-10.2 \\\n     ... \\\n     -device usb-ehci \\\n     -device usb-kbd\n\nThis is required to guarantee forward and backward compatibility of\nQEMU pc-q35-10.2 machine instances.\n\n\n\nC.","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=kaod.org header.i=@kaod.org header.a=rsa-sha256\n header.s=ovhmo393970-selector1 header.b=ihts3t80;\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)","garm.ovh; auth=pass\n (GARM-106R006c14620b7-62dd-4835-b067-d1c837c195b1,\n EAA5D49A92D75878AB6B5DB8F91ADF3A5E4E180D) smtp.auth=clg@kaod.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 4fzr2J1DWnz1yD4\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 02:06:14 +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 1wEr7P-0002aV-2E; Mon, 20 Apr 2026 12:05:03 -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 <clg@kaod.org>) id 1wEr7F-0002Zs-8a\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 12:04:54 -0400","from 12.mo534.mail-out.ovh.net ([46.105.38.145])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <clg@kaod.org>) id 1wEr7B-0008La-Kj\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 12:04:52 -0400","from director5.derp.mail-out.ovh.net\n (director5.derp.mail-out.ovh.net [51.68.94.138])\n by mo534.mail-out.ovh.net (Postfix) with ESMTPS id 4fzr0X0XjWz69Df;\n Mon, 20 Apr 2026 16:04:44 +0000 (UTC)","from director5.derp.mail-out.ovh.net\n (director5.derp.mail-out.ovh.net. [127.0.0.1])\n by director5.derp.mail-out.ovh.net (inspect_sender_mail_agent) with SMTP\n for <jamin_lin@aspeedtech.com>; Mon, 20 Apr 2026 16:04:43 +0000 (UTC)","from mta10.priv.ovhmail-u2.ea.mail.ovh.net (unknown\n [10.110.118.110])\n by director5.derp.mail-out.ovh.net (Postfix) with ESMTPS id 4fzr0W2X9Zz7tpv;\n Mon, 20 Apr 2026 16:04:43 +0000 (UTC)","from kaod.org (unknown [10.1.6.2])\n (Authenticated sender: clg@kaod.org)\n by mta10.priv.ovhmail-u2.ea.mail.ovh.net (Postfix) with ESMTPSA id\n A0BA21923A4E; Mon, 20 Apr 2026 16:04:41 +0000 (UTC)"],"X-OVh-ClientIp":"82.64.250.170","Message-ID":"<0c533df3-b06c-4fc6-a4b9-6e17206525a3@kaod.org>","Date":"Mon, 20 Apr 2026 18:04:41 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","To":"Jamin Lin <jamin_lin@aspeedtech.com>, Peter Xu <peterx@redhat.com>,\n \"philmd@linaro.org\" <philmd@linaro.org>","Cc":"Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org> <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>","Content-Language":"en-US, fr","From":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>","Autocrypt":"addr=clg@kaod.org; keydata=\n xsFNBFu8o3UBEADP+oJVJaWm5vzZa/iLgpBAuzxSmNYhURZH+guITvSySk30YWfLYGBWQgeo\n 8NzNXBY3cH7JX3/a0jzmhDc0U61qFxVgrPqs1PQOjp7yRSFuDAnjtRqNvWkvlnRWLFq4+U5t\n yzYe4SFMjFb6Oc0xkQmaK2flmiJNnnxPttYwKBPd98WfXMmjwAv7QfwW+OL3VlTPADgzkcqj\n 53bfZ4VblAQrq6Ctbtu7JuUGAxSIL3XqeQlAwwLTfFGrmpY7MroE7n9Rl+hy/kuIrb/TO8n0\n ZxYXvvhT7OmRKvbYuc5Jze6o7op/bJHlufY+AquYQ4dPxjPPVUT/DLiUYJ3oVBWFYNbzfOrV\n RxEwNuRbycttMiZWxgflsQoHF06q/2l4ttS3zsV4TDZudMq0TbCH/uJFPFsbHUN91qwwaN/+\n gy1j7o6aWMz+Ib3O9dK2M/j/O/Ube95mdCqN4N/uSnDlca3YDEWrV9jO1mUS/ndOkjxa34ia\n 70FjwiSQAsyIwqbRO3CGmiOJqDa9qNvd2TJgAaS2WCw/TlBALjVQ7AyoPEoBPj31K74Wc4GS\n Rm+FSch32ei61yFu6ACdZ12i5Edt+To+hkElzjt6db/UgRUeKfzlMB7PodK7o8NBD8outJGS\n tsL2GRX24QvvBuusJdMiLGpNz3uqyqwzC5w0Fd34E6G94806fwARAQABzSBDw6lkcmljIExl\n IEdvYXRlciA8Y2xnQGthb2Qub3JnPsLBeAQTAQIAIgUCW7yjdQIbAwYLCQgHAwIGFQgCCQoL\n BBYCAwECHgECF4AACgkQUaNDx8/77KGRSxAAuMJJMhJdj7acTcFtwof7CDSfoVX0owE2FJdd\n M43hNeTwPWlV5oLCj1BOQo0MVilIpSd9Qu5wqRD8KnN2Bv/rllKPqK2+i8CXymi9hsuzF56m\n 76wiPwbsX54jhv/VYY9Al7NBknh6iLYJiC/pgacRCHtSj/wofemSCM48s61s1OleSPSSvJE/\n jYRa0jMXP98N5IEn8rEbkPua/yrm9ynHqi4dKEBCq/F7WDQ+FfUaFQb4ey47A/aSHstzpgsl\n TSDTJDD+Ms8y9x2X5EPKXnI3GRLaCKXVNNtrvbUd9LsKymK3WSbADaX7i0gvMFq7j51P/8yj\n neaUSKSkktHauJAtBNXHMghWm/xJXIVAW8xX5aEiSK7DNp5AM478rDXn9NZFUdLTAScVf7LZ\n VzMFKR0jAVG786b/O5vbxklsww+YXJGvCUvHuysEsz5EEzThTJ6AC5JM2iBn9/63PKiS3ptJ\n QAqzasT6KkZ9fKLdK3qtc6yPaSm22C5ROM3GS+yLy6iWBkJ/nEYh/L/du+TLw7YNbKejBr/J\n ml+V3qZLfuhDjW0GbeJVPzsENuxiNiBbyzlSnAvKlzda/sBDvxmvWhC+nMRQCf47mFr8Xx3w\n WtDSQavnz3zTa0XuEucpwfBuVdk4RlPzNPri6p2KTBhPEvRBdC9wNOdRBtsP9rAPjd52d73O\n wU0EW7yjdQEQALyDNNMw/08/fsyWEWjfqVhWpOOrX2h+z4q0lOHkjxi/FRIRLfXeZjFfNQNL\n SoL8j1y2rQOs1j1g+NV3K5hrZYYcMs0xhmrZKXAHjjDx7FW3sG3jcGjFW5Xk4olTrZwFsZVU\n cP8XZlArLmkAX3UyrrXEWPSBJCXxDIW1hzwpbV/nVbo/K9XBptT/wPd+RPiOTIIRptjypGY+\n S23HYBDND3mtfTz/uY0Jytaio9GETj+fFis6TxFjjbZNUxKpwftu/4RimZ7qL+uM1rG1lLWc\n 9SPtFxRQ8uLvLOUFB1AqHixBcx7LIXSKZEFUCSLB2AE4wXQkJbApye48qnZ09zc929df5gU6\n hjgqV9Gk1rIfHxvTsYltA1jWalySEScmr0iSYBZjw8Nbd7SxeomAxzBv2l1Fk8fPzR7M616d\n tb3Z3HLjyvwAwxtfGD7VnvINPbzyibbe9c6gLxYCr23c2Ry0UfFXh6UKD83d5ybqnXrEJ5n/\n t1+TLGCYGzF2erVYGkQrReJe8Mld3iGVldB7JhuAU1+d88NS3aBpNF6TbGXqlXGF6Yua6n1c\n OY2Yb4lO/mDKgjXd3aviqlwVlodC8AwI0SdujWryzL5/AGEU2sIDQCHuv1QgzmKwhE58d475\n KdVX/3Vt5I9kTXpvEpfW18TjlFkdHGESM/JxIqVsqvhAJkalABEBAAHCwV8EGAECAAkFAlu8\n o3UCGwwACgkQUaNDx8/77KEhwg//WqVopd5k8hQb9VVdk6RQOCTfo6wHhEqgjbXQGlaxKHoX\n ywEQBi8eULbeMQf5l4+tHJWBxswQ93IHBQjKyKyNr4FXseUI5O20XVNYDJZUrhA4yn0e/Af0\n IX25d94HXQ5sMTWr1qlSK6Zu79lbH3R57w9jhQm9emQEp785ui3A5U2Lqp6nWYWXz0eUZ0Ta\n d2zC71Gg9VazU9MXyWn749s0nXbVLcLS0yops302Gf3ZmtgfXTX/W+M25hiVRRKCH88yr6it\n +OMJBUndQVAA/fE9hYom6t/zqA248j0QAV/pLHH3hSirE1mv+7jpQnhMvatrwUpeXrOiEw1n\n HzWCqOJUZ4SY+HmGFW0YirWV2mYKoaGO2YBUwYF7O9TI3GEEgRMBIRT98fHa0NPwtlTktVIS\n l73LpgVscdW8yg9Gc82oe8FzU1uHjU8b10lUXOMHpqDDEV9//r4ZhkKZ9C4O+YZcTFu+mvAY\n 3GlqivBNkmYsHYSlFsbxc37E1HpTEaSWsGfAHQoPn9qrDJgsgcbBVc1gkUT6hnxShKPp4Pls\n ZVMNjvPAnr5TEBgHkk54HQRhhwcYv1T2QumQizDiU6iOrUzBThaMhZO3i927SG2DwWDVzZlt\n KrCMD1aMPvb3NU8FOYRhNmIFR3fcalYr+9gDuVKe8BVz4atMOoktmt0GWTOC8P4=","In-Reply-To":"\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","x-ovh-tracer-id":"5664120960398634029","X-VR-SPAMSTATE":"OK","X-VR-SPAMSCORE":"-100","X-VR-SPAMCAUSE":"\n dmFkZTGvwZSjt39E3HlnwmuEG8hDeh17NAVdT5eVOqgxCxFCkjjPXHU7aSo5ft44RwcFezCW87m3vSkjGIhC2uD+aVm0+0XjD/yrh6evairdT1LDhzjkLrBda8vscQ3+W1L4UTHhrp/WE1LAgk9jTk5WvEbfBv1jXSBCzJB0EldqNJ92ezYtsr1iA2zg4c6SjBWGOt5cooDjWbof9ay/tozsWd+fMlghWmzTbxawBlhOWjam4pzNkJbnZ8lWhiCRTjhs69y4/AmIv5QwflDtpIzgVCcJb5k62CwfIMpP9pKgySAveigw/8ZJzC8/ueQgA+ssT3EM0nBXM3zz104sk1K+lQwrS7aartV24n9CzenXehCLzDaj4vqZREBdY9haGdpeaBdiX3LAHxRPN2ga6wtbgIsaejBLK6Yeofs+3gugnEvQt+nM+YCB3xxOTdk9EceDOApbiGj+1S2/Ct+x1uQm+AuoLMqfjzoljIAff4lcddjRTyhVZAU6kWkoK8q+uPxkiECyuZZMwa0jUZfdSDC3UJgirSfOXthw2DkOyDarNyYfgI2Xg/wuC4ayccawlOHIavixorUL7/y9Oo20bCTs4IcslE9s4eHVWUIxCUD1YLBaQxWgVE7ZeuseE37d7tfNhZVs0N5wjr2l/hwyIOn6ba8eQUA7s/zPoPAhENB2NSOK5Q","DKIM-Signature":"a=rsa-sha256; bh=elFmBHnkOK5JuvbSDcpWtsM1VRPeh5OWZrEiTqAmlgQ=;\n c=relaxed/relaxed; d=kaod.org; h=From; s=ovhmo393970-selector1;\n t=1776701085; v=1;\n b=ihts3t80fCUW5CHg8aNkuUGWchzzXsGe8gBOwGp7Zmsnwduj3iaV2gVHrDX3DqDAM1MzfbNp\n 2A2vweMmIpE6qjnBci0izYu+mhNdxFD79b+w5XKuSTQZH+UOvXSGptxWGHCQ8BJFe4aYs7nv0rq\n xHjbHTb7xs64SRnV+t88t6HX9p97OhGF7czSg1sLjTNFIRQKcZog5b6uVf5H0vKo3StoVByZyLD\n H77l8oSSSnDSIbdnFJkUVHO30xygSfRytKZT6LvncZTyuGIaIczzvHy/X+wNczLtqZCbjFHtdzC\n DHKKQC54xT9molCUM7NCB4zrjgU6Q9952X64XIT7Wjd1Q==","Received-SPF":"pass client-ip=46.105.38.145; envelope-from=clg@kaod.org;\n helo=12.mo534.mail-out.ovh.net","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 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_NONE=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"}},{"id":3680363,"web_url":"http://patchwork.ozlabs.org/comment/3680363/","msgid":"<TYPPR06MB82064F4FC063BAF8EF29C3FFFC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>","list_archive_url":null,"date":"2026-04-22T09:10:35","subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":81768,"url":"http://patchwork.ozlabs.org/api/people/81768/","name":"Jamin Lin","email":"jamin_lin@aspeedtech.com"},"content":"Hi Cédric\n\n> Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> 64-bit\n> \n> On 4/20/26 07:56, Jamin Lin wrote:\n> > Hi Peter, Philippe, Cédric\n> >\n> >> Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor\n> >> addresses to 64-bit\n> >>\n> >> On Fri, Apr 17, 2026 at 09:01:34AM +0200, Cédric Le Goater wrote:\n> >>> + Peter, Fabiano,\n> >>>\n> >>> On 4/16/26 03:49, Jamin Lin wrote:\n> >>>> Change internal EHCI descriptor addresses from uint32_t to uint64_t.\n> >>>>\n> >>>> The following fields are updated:\n> >>>> - EHCIPacket::qtdaddr\n> >>>> - EHCIQueue::{qhaddr, qtdaddr}\n> >>>> - EHCIState::{a_fetch_addr, p_fetch_addr}\n> >>>>\n> >>>> Update get_dwords() and put_dwords() to take 64-bit addresses and\n> >>>> propagate the type change through the descriptor traversal paths.\n> >>>>\n> >>>> Adjust NLPTR_GET() to operate on 64-bit values:\n> >>>>\n> >>>>       #define NLPTR_GET(x) ((x) & ~0x1fULL)\n> >>>>\n> >>>> so that link pointer masking works correctly when descriptor\n> >>>> addresses exceed 32-bit space. The previous mask (0xffffffe0)\n> >>>> implicitly truncated addresses to 32 bits.\n> >>>>\n> >>>> This patch does not change the on-wire descriptor layout yet.\n> >>>> It only removes the internal 32-bit address limit and prepares for\n> >>>> later patches that will add full 64-bit QH/qTD/iTD/siTD support.\n> >>>>\n> >>>> Update the EHCI trace-events prototypes for QH, qTD, iTD, and siTD\n> >>>> to use uint64_t for the address argument and print it with PRIx64.\n> >>>> This ensures full 64-bit addresses are shown in trace output and\n> >>>> improves debugging of queue heads and transfer descriptors.\n> >>>>\n> >>>> Migration compatibility:\n> >>>>\n> >>>> The fetch address fields in EHCIState are extended from 32-bit to\n> >>>> 64-bit, requiring a VMState version bump (v2 -> v3).\n> >>>>\n> >>>> Backward compatibility is preserved by keeping the legacy 32-bit\n> >>>> fields (a_fetch_addr_pre_v3, p_fetch_addr_pre_v3) for pre-v3\n> >>>> migration streams via VMSTATE_UINT32_TEST(), and introducing new\n> >>>> 64-bit fields for v3+.\n> >>>>\n> >>>> In post_load, pre-v3 state is promoted to the 64-bit fields.\n> >>>\n> >>> Since ehci is supported by downstream, I'd prefer that the migration\n> >>> maintainers also verify the implementation.\n> >>\n> >> Thanks, I'll only look at the migration bits.\n> >>\n> >> [...]\n> >>\n> >>>> @@ -2441,6 +2445,11 @@ static int usb_ehci_post_load(void *opaque,\n> >>>> int\n> >> version_id)\n> >>>>            }\n> >>>>        }\n> >>>> +    if (version_id < 3) {\n> >>>> +        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> >>>> +        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> >>>> +    }\n> >>>> +\n> >>>>        return 0;\n> >>>>    }\n> >>>> @@ -2470,9 +2479,14 @@ static void usb_ehci_vm_state_change(void\n> >> *opaque, bool running, RunState state)\n> >>>>        }\n> >>>>    }\n> >>>> +static bool ehci_core_is_before_version_3(void *opaque, int\n> >>>> +version_id) {\n> >>>> +    return version_id < 3;\n> >>>> +}\n> >>>> +\n> >>>>    const VMStateDescription vmstate_ehci = {\n> >>>>        .name        = \"ehci-core\",\n> >>>> -    .version_id  = 2,\n> >>>> +    .version_id  = 3,\n> >>>>        .minimum_version_id  = 1,\n> >>>>        .pre_save    = usb_ehci_pre_save,\n> >>>>        .post_load   = usb_ehci_post_load,\n> >>>> @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n> >>>>            /* schedule state */\n> >>>>            VMSTATE_UINT32(astate, EHCIState),\n> >>>>            VMSTATE_UINT32(pstate, EHCIState),\n> >>>> -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> >>>> -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> >>>> +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> >>>> +                            ehci_core_is_before_version_3),\n> >>>> +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> >>>> +                            ehci_core_is_before_version_3),\n> >>>> +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> >>>> +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> >>\n> >> TL;DR: I feel like we still need machine type compat properties.\n> >>\n> >\n> > I don't understand this: Could you please describe it in more detail?\n> >\n> >> Details:\n> >>\n> >> When a v2 stream arrives, two _TEST()s will do the loading, then\n> >> post_load() extend it to 64bits, looks fine.\n> >>\n> >> When a v3 stream arrives, two _TEST()s got skipped then latter two take\n> effect.\n> >> post_load() skips.  Looks fine.\n> >>\n> >> When migrating to another QEMU, due to the fact saving vmstates\n> >> always take vmsd's version declared (3), I don't see how it can\n> >> migrate back to a v2 stream; it didn't know about v3.\n> >>\n> >> Jiamin, have you tested migrating from a new QEMU binary back to\n> >> another old one?  For upstream and serious devices, we need to\n> >> guarantee bi-directional migrations, back and forth.\n> >>\n> >\n> > Sorry, I am not familiar with the design of QEMU migration, and I don't know\n> how to test it.\n> > I added these hook functions based on Philippe's suggestion and review.\n> > Could you tell me how to test migration to ensure both version 3 and version\n> 2 are workable?\n> \n> \n> Migrating a running guest back and forth between QEMU [1] and [2] should be\n> possible :\n> \n> [1] path/to/qemu-10.2/install/bin/qemu-system-x86_64 -M pc-q35-10.2 \\\n>      ... \\\n>      -device usb-ehci \\\n>      -device usb-kbd\n> \n> [2] path/to/myqemu-with-patches/install/bin/qemu-system-x86_64 -M\n> pc-q35-10.2 \\\n>      ... \\\n>      -device usb-ehci \\\n>      -device usb-kbd\n> \n> This is required to guarantee forward and backward compatibility of QEMU\n> pc-q35-10.2 machine instances.\n> \n> \n\nThanks for the migration test steps.\nI have tested both forward and backward migration for EHCI and observed failures in both directions. \nI will revise my changes in a follow-up patch to address these issues and ensure that the migration tests pass.\n\nThanks,\nJamin\n \n> C.","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=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=Cfz/SvUs;\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=aspeedtech.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 4g0tl40L9Wz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 19:11:42 +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 1wFTbi-00008N-KW; Wed, 22 Apr 2026 05:10:54 -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 <jamin_lin@aspeedtech.com>)\n id 1wFTbc-00007q-FE; Wed, 22 Apr 2026 05:10:48 -0400","from mail-japaneastazlp170120005.outbound.protection.outlook.com\n ([2a01:111:f403:c405::5] helo=TYPPR03CU001.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 <jamin_lin@aspeedtech.com>)\n id 1wFTbZ-0002oZ-MU; Wed, 22 Apr 2026 05:10:48 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by KL1PR06MB6212.apcprd06.prod.outlook.com (2603:1096:820:d7::8) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.17; Wed, 22 Apr\n 2026 09:10:36 +0000","from TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3%3]) with mapi id 15.20.9846.017; Wed, 22 Apr 2026\n 09:10:36 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=eiIs/nxyov0Lp18K3PyJg9To9elT6ziSWi3A7w338grBAjMJp9hwbaixaEx4svhHq05OabvsfnNZqsAvWcb+hoNkkefMYEr6FTbqgpMaSo7WQ9y3SNXZ1X5MRfJPPBkx1Ri8UuGm3olgYYNtE3LcJTH9bzMe1sYM17mvaPEaWhnnQzjkiCCEJvFT/bNlk9fGw43BxW+fiDgz9w2EkYXajzYMUeNkZFGansawY2uFYMmhL2xuFP3kIaNR2WKkEPsq5NEbuHqUPSqHJuTDsARBE3rfmhCix7iK4T6HSXV8j5SLTNi27lPUH5uphGox9yqYV2vnUUlVUL5g+JfdZDYWbA==","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=Sg2H459451L7X+M+37D1XpjastGvVlXhft6ZAa6DlVQ=;\n b=FsH7vnZycLL6nK+MCuUKP21KV5fAm/NJTQmeUd3EMfdebxfpVesM6C/k5ozZVH0qNtnlj6JCbkDZ4qCTc7wDqGI1ZGY51V/RWY+oxrZeWq0ZVwcxC6tdYblCUSwlJS3ZnQQF9Kg1MCUTzH5+A5BSLoV4I1xU4MXO7QFPzzfE0R3zcn58/+hOY2jdrrxX9A+Rv8UUsMh+TPF7B5+yCvRl+8Z09SXuENz/aRHd06a2+VN0CjQ/g22YrUSBUgP1Q8NVZSxo3CPFFAv9VBjI1UfSCnwuXHu5ORin+CQGae33k2i65J3Rsi0oMRz+IvTiritY4PFwbme72E3P75WHDc9UTg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=aspeedtech.com; dmarc=pass action=none\n header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Sg2H459451L7X+M+37D1XpjastGvVlXhft6ZAa6DlVQ=;\n b=Cfz/SvUssIB8jvFScyiYXYDZcmUXhZ23VVp6eZ0WuRr/zOM+ElZdFfk8g4dyWsJrnjrec5Rcfi5ml1E3LGrXLI3t1DGLApT5XANv6OQkXthheV+BD8ql4Vn7fZzEA7xkBAPRRX7U2bf47JyL50MsJDjt0Oxhrg60sWm/RFcDclDq/HNl1BWzD91maf8AYDeeb6kbXIGUm6lZiCVkoQS3AR9jOA2/g4aHVAGm2mV+D1XGIsvdGXr6/btee++1px20/t+g/ytm2nD3WCt+vzcWQCjVdYZQEOC4B3IzAX8PZSmx9SFrUSvHW1YktccprYyRyMXw4nKTOUXWUtg993CrFw==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n Peter Xu <peterx@redhat.com>, \"philmd@linaro.org\" <philmd@linaro.org>","CC":"Peter Maydell <peter.maydell@linaro.org>, Steven Lee\n <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>, Kane Chen\n <kane_chen@aspeedtech.com>, Andrew Jeffery <andrew@codeconstruct.com.au>,\n Joel Stanley <joel@jms.id.au>, \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>, Troy Lee\n <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>, Fabiano Rosas\n <farosas@suse.de>","Subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Topic":"[PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Index":"AQHczUNKKWmZ+R83iUmW5is8kUw4XrXi1YYAgACIrACABBnIQIAArEqAgAKwMhA=","Date":"Wed, 22 Apr 2026 09:10:35 +0000","Message-ID":"\n <TYPPR06MB82064F4FC063BAF8EF29C3FFFC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org> <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <0c533df3-b06c-4fc6-a4b9-6e17206525a3@kaod.org>","In-Reply-To":"<0c533df3-b06c-4fc6-a4b9-6e17206525a3@kaod.org>","Accept-Language":"zh-TW, en-US","Content-Language":"zh-TW","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=Cfz/SvUs;\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=aspeedtech.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"TYPPR06MB8206:EE_|KL1PR06MB6212:EE_","x-ms-office365-filtering-correlation-id":"4bfeb039-3956-4a00-71fd-08dea04f03c8","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|366016|376014|7416014|1800799024|22082099003|56012099003|18002099003|38070700021;","x-microsoft-antispam-message-info":"\n 0+0bLkpExImpBtg5MmHN3ZDOQ+XB4eRifhbIdqUpJ5+yri7vC0JmbVVUse6Ir6hrsWhvxKCD3alcb9gtlYnDvPNntiw3J6JOFG9BmDGcyIL7mJi/72axE5VZ1lsNL+tV9kv1nOQLSTL+S/7Zilheac4RO6FQ9TtKNgQWhZSDwtm02qNyzKsr+uwn9gBxI8GbPIgDfQNsOF41ViUnhfq2g0g48/kLJ4q/BPeR0jP0IQ7HecK8+1V6AT9MzboGh7qTF6bJrVKYpYxqYjl9yqYIuFNI3RVDpo5QQb9IEvaD/hoc9oLfaUPFRGfmTcSEtU41sjhEfl2X5woEl4VPbwjllzEyKnbdOdvhadun8RsEX7eWS9+MZIzNwvdZ7iidA24J5sbaDPTPRIIp3lRi0XitAgXsPiBWwHWLZXr1ffPpYRPlgrg4A3xcYDUqx9DRTWKj0Mk/2OW8JWjYFU9lmVpk/6cuIyOBVZJ1G5Qt4X/DalsY/DYw+2t1h3spBYZbCidTp5VsjnxcJv9O/SDOSSOMUYHXXbBAJKBjXGhPVJ6cAoSsXqDXvqIb7q1twwui+A16pWbO/kFfQUrymhk58vx8VS4amfusmVoztv12mXrXANH9nrCIfgbXhEG85NGC9qAVziSdVDYeLqUkog0QEwMxYP1VMs/3svbcAnV7oXWeBrP0/FcbMgoooF9oRW0rvnld6Ah0xmANzYcTba0CZu6y0yNJLl4QfY4dGv7ru/Ll+a0X57bnVBVjrQIGlXQ2rZLIADT7cXGwk/OZfGGdt2JKaQDwrfvwauK2jWzdxalAQY0=","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-tw; SCL:1;\n SRV:; IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(366016)(376014)(7416014)(1800799024)(22082099003)(56012099003)(18002099003)(38070700021);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?FgduvHDHHBJ5Xx2mtYuszFnr+dV1?=\n\t=?utf-8?q?UbA4zbsIITfU4KUqXsc/iTuoJlONx0k8D0Y/kHbNuPS//HdM+v7kNv4HudvpiIjoe?=\n\t=?utf-8?q?bx5MpcJpvjCyBFpr2rHvJKu4Xk7GtVwB9fftA65N3YeZP49bOCSbUdV1sZyxMtnPd?=\n\t=?utf-8?q?ndHKPa0sIdk1FaR3W84Q6aYCrtSlKoxrDusLb5zGX5Z90SELQhCccd52sG7xGmaJ6?=\n\t=?utf-8?q?3PaFKP2i40IDbtdQlBVPADYp7cqHTFCZm0NBFPbyXWBRXKxQnESB6WRR6DnzPaV42?=\n\t=?utf-8?q?SttDcL5qaos7IRxhwIh2fO0sPqzk0K+Jq7A5inME2TCfCRyIfXECyWrtCAuxwuHwy?=\n\t=?utf-8?q?LtTFADXjA7X2+pDIfAOqM9F5E1OSpEu8FuIutjP2gSaoZ7ruCefC/UHpXPypGU/e7?=\n\t=?utf-8?q?T1PiKQ/uHL65s2Zu5AyGeKXuYq1K0nwdlFIqJAdWayha/VxfZ4EPCe4YD9wq5WBd/?=\n\t=?utf-8?q?HrRByn8KFzlZu2S/T4o/27z/u/DgIfirXTRZ6ZK7IDX57UUskpBzqlNW7aPqZtr6j?=\n\t=?utf-8?q?d5raVa90XqpptzwfqVs5ufOhsCU++/bXgp6FHMh2LDrri9DJj0i231KRA99mNGkSO?=\n\t=?utf-8?q?U7oLseoxLqA9nIxtTIreSpCrYkwiSGENLvgy2DGmHy3CWQ2CRX/WKMwMxpL+dHiPZ?=\n\t=?utf-8?q?epY3JwlQdijz61ed/dVZabp9e/IZTPJP24lVVPOTypCs59c8fYgQTAi3qN1SDEOW7?=\n\t=?utf-8?q?vpEHD6Svsr7m0O3EaV8AxfYYrCiuw9+IFAcYhLCLM2hRziMfplcvPVUjXwBAYc/6I?=\n\t=?utf-8?q?/4CYd2vWqk8IuLCTQHDoY9ooBmBGufVcj7sZci4Qu8ijTzWurTG5LEOT8ufDGUch5?=\n\t=?utf-8?q?AYCcDEnrArXZZAkGBrji29qeOj9qxqteGpY7+U+OJ0rTSKntsPb+V4rEJOuG1fBfF?=\n\t=?utf-8?q?mM26pfOkOowIPzlQvm8LZ+5Rhx0LW9MSI2ZpfJ5oposPS5NmZPipEKZx+YqWh8JgB?=\n\t=?utf-8?q?u4tkKtZo5BpzQyZn3Ouc3ZUyqxYFjKQTAbXRgfmy/otg6gemUCVCSp4bUDIRTHjmo?=\n\t=?utf-8?q?ucv0wgHhSRqVU7cBKuZ3DEzsEv5nXeYmXJEVkgKYogux8WcqFyH1w9ArqVYi26Q+/?=\n\t=?utf-8?q?F9K8n5houFEV9U7Y6kXGJvTQ32riz96WDPrFa363cukq60wufkgq4tqnwO2A6fnPu?=\n\t=?utf-8?q?jHqPFBm+OfK+EZjZivBKsM8lM8EpZa7UWUvrrS4LffxzyDaKcaB3k8WPTI1o8/f+O?=\n\t=?utf-8?q?dQM2nUHEy/oFph4lG1PPykMYcgk4lLCM4G/KKbxUKuQmJuxicRRB83jBljL4Hu/76?=\n\t=?utf-8?q?Ya9HEp83mgDk9GoHylqQiMr6fXy6C8hoxwP+RnHopFM2pL8vrGVDVFIa2HTNC50qR?=\n\t=?utf-8?q?3g/aTi5+m4Wl+7259FFYCeUXT4YE7LiwRrBcJxw3ZbYXaRdeYevNsD4oLAar/tLlv?=\n\t=?utf-8?q?zc7YBfxXIhBCdKx0RkUAFBZUslCY/m7DhiVSVA+ezcweChVVgBBSpENSNB9xBh0cp?=\n\t=?utf-8?q?WX5DgGeq1xYlQbH+4UWx6XH5PBIUYEjzgQIzJeaq5tYAGJNvGKdi/sXM1JDE5cHt9?=\n\t=?utf-8?q?3c3P5UOxO2LLJUMHWi5v1VSJ9CicyidoM8HmgsFqC+DXxFfj4k8NW80H3l+8mkiYb?=\n\t=?utf-8?q?2FeT6H2uUmOQlaK3QxjcExS+Vw3YVgPlKzF4mc3T93wsWsx6geuipjBYd2dhWuJ3M?=\n\t=?utf-8?q?cJEYx35Lx0AR4YKIcYhIDM5/zOBE1Xvg=3D=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n EdkeNH3yRYPjIQzU3bMmO46pL4BfS+Q5KKRFzVJYXcTYZKynBzbd5Lu+59ng3TNQron3tI9tmURx5/S5TyxjBdN6RP8/Pz7JBkxc8PH1nHbU8tD0wldESfPWMFZ+6aFrU09Mlm+ODbn6YqN6d3kDTk2pkIRZUbTt2NMgyfHnL5EAB4rZ7+qNJ8ceWGcDHnAwercoecxOj5Khdy8+mG+07qQIzd5hcQdIZLhv/vcxzqIFndJInm47BfcPlow1AdwhZDIiXctV4oTnT8ASodH7jI4sd8fezQGikl7TMGdz8Z8izvbf0PAHq8h72xrsO9ytdEfRyIBdSFOAkbuU0L34wQ==","X-OriginatorOrg":"aspeedtech.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"TYPPR06MB8206.apcprd06.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 4bfeb039-3956-4a00-71fd-08dea04f03c8","X-MS-Exchange-CrossTenant-originalarrivaltime":"22 Apr 2026 09:10:35.9272 (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"43d4aa98-e35b-4575-8939-080e90d5a249","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n Y3hNqs3Hv0fCnuqmfsOPt2YiLHU42L1/y+YQSI1dHBpQcDtP30zenk0mqM1QDvCy28wT6IT8Z14YQUaoKxvgazZgGxZJnj3ZbdwY7N3rvtM=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"KL1PR06MB6212","Received-SPF":"pass client-ip=2a01:111:f403:c405::5;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=TYPPR03CU001.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"}},{"id":3680369,"web_url":"http://patchwork.ozlabs.org/comment/3680369/","msgid":"<TYPPR06MB82066A191FB2B0AD05F7C295FC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>","list_archive_url":null,"date":"2026-04-22T09:21:55","subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":81768,"url":"http://patchwork.ozlabs.org/api/people/81768/","name":"Jamin Lin","email":"jamin_lin@aspeedtech.com"},"content":"Hi Peter, Cédric and Philippe\n\n> Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> 64-bit\n> \n> On Mon, Apr 20, 2026 at 05:56:11AM +0000, Jamin Lin wrote:\n> > Hi Peter, Philippe, Cédric\n> \n> Hi, Jamin,\n> \n> [...]\n> \n> > > > > @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n> > > > >           /* schedule state */\n> > > > >           VMSTATE_UINT32(astate, EHCIState),\n> > > > >           VMSTATE_UINT32(pstate, EHCIState),\n> > > > > -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> > > > > -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> > > > > +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> > > > > +                            ehci_core_is_before_version_3),\n> > > > > +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> > > > > +                            ehci_core_is_before_version_3),\n> > > > > +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > > > > +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> > >\n> > > TL;DR: I feel like we still need machine type compat properties.\n> > >\n> >\n> > I don't understand this: Could you please describe it in more detail?\n> \n> See hw/core/machine.c and entries added into hw_compat_*[] arrays.  IIUC,\n> if this is an important device and if we want to guarantee bidirectional\n> migration (I'll explain later), then we should stick with machine compat\n> properties.\n> \n> >\n> > > Details:\n> > >\n> > > When a v2 stream arrives, two _TEST()s will do the loading, then\n> > > post_load() extend it to 64bits, looks fine.\n> > >\n> > > When a v3 stream arrives, two _TEST()s got skipped then latter two take\n> effect.\n> > > post_load() skips.  Looks fine.\n> > >\n> > > When migrating to another QEMU, due to the fact saving vmstates\n> > > always take vmsd's version declared (3), I don't see how it can\n> > > migrate back to a v2 stream; it didn't know about v3.\n> > >\n> > > Jiamin, have you tested migrating from a new QEMU binary back to\n> > > another old one?  For upstream and serious devices, we need to\n> > > guarantee bi-directional migrations, back and forth.\n> > >\n> >\n> > Sorry, I am not familiar with the design of QEMU migration, and I don't know\n> how to test it.\n> > I added these hook functions based on Philippe's suggestion and review.\n> > Could you tell me how to test migration to ensure both version 3 and version\n> 2 are workable?\n> \n> Since this patch already modified VMSDs, I believe migration test should have\n> been carried out at the very minimum..  Logically if vmsd versioning is used,\n> we should also have tested forward migrations, because that's only for that.\n> \n> What I'm talking about is I think backward migration will fail.\n> \n> Forward migration describes the case when a VM hosted by an old QEMU\n> binary (e.g. QEMU v10.2.0) is migrated to a new QEMU (e.g., after this patch\n> applied on top of master).\n> \n> Backward migration describes the case when a VM hosted by a new QEMU\n> binary (e.g., after this patch applied on top of master) is migrated back to an\n> old QEMU binary (e.g. QEMU v10.2.0).\n> \n> For different devices, we should allow different level of support on migration.\n> Any device that may be important to either upstream QEMU or downstreams\n> should better allow bi-directional migration.  In this case we need to use\n> machine compat properties I mentioned.  I'm not yet sure where EHCI\n> controller falls e.g. v.s. XHCI.. when not sure, we can also just stick with\n> machine compat properties to be on the safe side.\n> \n> For more info, you can also refer to:\n> \n> https://www.qemu.org/docs/master/devel/migration/compatibility.html\n> \n> Thanks,\n> \n> --\n> Peter Xu\nThanks for your support and the detailed explanation.\nFollowing Cédric’s comments, I now understand how to properly test migration. With the changes below, both forward and backward migration tests pass.\nCould you please review these changes, or would you prefer that I resend them as v4?\n\nThanks again for your guidance and support.\n\nJamin\n\ndiff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\nindex 310183bbc4..bd165c793c 100644\n--- a/hw/usb/hcd-ehci.h\n+++ b/hw/usb/hcd-ehci.h\n@@ -264,6 +264,7 @@ struct EHCIState {\n     uint32_t maxframes;\n     bool caps_64bit_addr;\n     uint32_t ctrldssegment_default;\n+    bool migrate_fetch_addr_64bit;\n \n     /*\n      *  EHCI spec version 1.0 Section 2.3\n@@ -321,7 +322,9 @@ struct EHCIState {\n     DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128), \\\n     DEFINE_PROP_BOOL(\"caps-64bit-addr\", _state, ehci.caps_64bit_addr, false), \\\n     DEFINE_PROP_UINT32(\"ctrldssegment-default\", _state, \\\n-                       ehci.ctrldssegment_default, 0)\n+                       ehci.ctrldssegment_default, 0), \\\n+    DEFINE_PROP_BOOL(\"x-migrate-fetch-addr-64bit\", _state, \\\n+                     ehci.migrate_fetch_addr_64bit, true)\n \n extern const VMStateDescription vmstate_ehci;\n \ndiff --git a/hw/core/machine.c b/hw/core/machine.c\nindex 0aa77a57e9..e77400c7ab 100644\n--- a/hw/core/machine.c\n+++ b/hw/core/machine.c\n@@ -41,6 +41,8 @@\n GlobalProperty hw_compat_10_2[] = {\n     { \"scsi-block\", \"migrate-pr\", \"off\" },\n     { \"isa-cirrus-vga\", \"global-vmstate\", \"true\" },\n+    { \"sysbus-ehci-usb\", \"x-migrate-fetch-addr-64bit\", \"off\" },\n+    { \"pci-ehci-usb\", \"x-migrate-fetch-addr-64bit\", \"off\" },\n };\n const size_t hw_compat_10_2_len = G_N_ELEMENTS(hw_compat_10_2);\n \ndiff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c\nindex 983b1731f9..87528ddc02 100644\n--- a/hw/usb/hcd-ehci.c\n+++ b/hw/usb/hcd-ehci.c\n@@ -2469,6 +2469,9 @@ static int usb_ehci_pre_save(void *opaque)\n     ehci->last_run_ns -= (ehci->frindex - new_frindex) * UFRAME_TIMER_NS;\n     ehci->frindex = new_frindex;\n \n+    ehci->a_fetch_addr_pre_v3 = ehci->a_fetch_addr;\n+    ehci->p_fetch_addr_pre_v3 = ehci->p_fetch_addr;\n+\n     return 0;\n }\n \n@@ -2489,10 +2492,8 @@ static int usb_ehci_post_load(void *opaque, int version_id)\n         }\n     }\n \n-    if (version_id < 3) {\n-        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n-        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n-    }\n+    s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n+    s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n \n     return 0;\n }\n@@ -2523,14 +2524,29 @@ static void usb_ehci_vm_state_change(void *opaque, bool running, RunState state)\n     }\n }\n \n-static bool ehci_core_is_before_version_3(void *opaque, int version_id)\n+static bool ehci_fetch_addr_64_needed(void *opaque)\n {\n-    return version_id < 3;\n+    EHCIState *s = opaque;\n+\n+    return s->migrate_fetch_addr_64bit;\n }\n \n+static const VMStateDescription vmstate_ehci_fetch_addr_64 = {\n+    .name = \"ehci-core/fetch-addr64\",\n+    .version_id = 1,\n+    .minimum_version_id = 1,\n+    .needed = ehci_fetch_addr_64_needed,\n+    .fields = (const VMStateField[]) {\n+        /* mmio registers */\n+        VMSTATE_UINT64(a_fetch_addr, EHCIState),\n+        VMSTATE_UINT64(p_fetch_addr, EHCIState),\n+        VMSTATE_END_OF_LIST()\n+    }\n+};\n+\n const VMStateDescription vmstate_ehci = {\n     .name        = \"ehci-core\",\n-    .version_id  = 3,\n+    .version_id  = 2,\n     .minimum_version_id  = 1,\n     .pre_save    = usb_ehci_pre_save,\n     .post_load   = usb_ehci_post_load,\n@@ -2559,14 +2575,14 @@ const VMStateDescription vmstate_ehci = {\n         /* schedule state */\n         VMSTATE_UINT32(astate, EHCIState),\n         VMSTATE_UINT32(pstate, EHCIState),\n-        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n-                            ehci_core_is_before_version_3),\n-        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n-                            ehci_core_is_before_version_3),\n-        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n-        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n+        VMSTATE_UINT32(a_fetch_addr_pre_v3, EHCIState),\n+        VMSTATE_UINT32(p_fetch_addr_pre_v3, EHCIState),\n         VMSTATE_END_OF_LIST()\n-    }\n+    },\n+    .subsections = (const VMStateDescription * const []) {\n+        &vmstate_ehci_fetch_addr_64,\n+        NULL,\n+    },\n };\n \n void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)","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=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=SD3NAXHK;\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=aspeedtech.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 4g0tzd5Crrz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 19:22:37 +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 1wFTmY-0002i8-FU; Wed, 22 Apr 2026 05:22:06 -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 <jamin_lin@aspeedtech.com>)\n id 1wFTmX-0002ht-4p; Wed, 22 Apr 2026 05:22:05 -0400","from mail-koreacentralazlp170130006.outbound.protection.outlook.com\n ([2a01:111:f403:c40f::6] helo=SEYPR02CU001.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 <jamin_lin@aspeedtech.com>)\n id 1wFTmU-0006Fm-Ck; Wed, 22 Apr 2026 05:22:04 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by SEZPR06MB7123.apcprd06.prod.outlook.com (2603:1096:101:22e::5)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.32; Wed, 22 Apr\n 2026 09:21:55 +0000","from TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3%3]) with mapi id 15.20.9846.017; Wed, 22 Apr 2026\n 09:21:55 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=sUkOCs1DsjLgs3j7CZ3PPdCDFQTlRmwD7O0byTcxHI5Ob51BMD8aTo1GaHvwDBhPsq8BwUKz6mLqhf+KlS/cOfTp7jrsRerqB3/1rmigGW+YVUNfp8yXcL6TSarXyeFpj4DN25bMwqPi3tbqllgMFKd1WfItgujD4FIA69uyHp+QzGZQqugZJuEg9o/+3tKA7R7zefGvmPWhvjWexTxTdbETaTuygJqNsG4EGjz6xYahUY4JqGLV8FBoXtXyhBeXKgDenJ2Fn2Ga0l2IRK5J2JUKwbxAHl1PzPWjsTv663dbNN8GWx+K9GQpsstlH1OO7wJg0BCpYu/4ecyqoaSbnQ==","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=4P6koazVzHvHCBobisJv4/PEueCL20IR+lgSHoWdGbs=;\n b=HlTRjS9RoqlyVEMMpGNCUAibcKNl4wWeW38Yu1YJVWvfocc/viKz/xIrelgX6n7X4IiNzsM1PHH8DHrsEcWfzlZ1UcSEawC56yHQbeNdNAb1pw8wJluMF384p0tg4qoTREqAbEbmbpycVUSDIJWENd3CBLJqW+JWhjWeYX92ZW2uTob0UehfJS3x/shlUKn4jgQxjyBoOXB/plnLy/hRdsPg0ksjxT0E85Mq6OQqUdaixWkKogoT+sEFfzqwmXYMF6O4Kq7feiTMcnQboh76dbpdRA94SWQdTvIGFT9X1vUbX53byKqXtjUrOmRCZhRmiRwEIJMpn50O7SoqgVW4eQ==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=aspeedtech.com; dmarc=pass action=none\n header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=4P6koazVzHvHCBobisJv4/PEueCL20IR+lgSHoWdGbs=;\n b=SD3NAXHKLHce4/XS81DTDDJI6ExDOL77UTHUYmTnXuyv8tbxxqEGXGqWxtf6PHK4liTKyL+P5OPUFbfb36k7D17bhkNgmXI1nnQlJSD8Jzwx5pRdjfxkzrKosZL/BJ2Oyb/I4VbDpr0rVqpBRwmtEgfOb0iourj6l3XoP/SoZ5blqmwyo8SKAOcCAIkLK+r3RC/gLbbOhovUq/qu/G1Td/r911xe4bJFhw7wlKnTfLRXv1oevv9k8MMLj6hzObhfgLX7vRRhptR8iSRg+2jagJ8eb6Gl3DVuTFOyiMieQh1Nn1HKIivja1rDCmb5WYjTTGsZwONOcCGtHSf4Wav8Mg==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"Peter Xu <peterx@redhat.com>,\n =?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>","CC":"Peter Maydell <peter.maydell@linaro.org>, Steven Lee\n <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>, Kane Chen\n <kane_chen@aspeedtech.com>, Andrew Jeffery <andrew@codeconstruct.com.au>,\n Joel Stanley <joel@jms.id.au>, \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>, Troy Lee\n <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>, Fabiano Rosas\n <farosas@suse.de>","Subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Topic":"[PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Index":"AQHczUNKKWmZ+R83iUmW5is8kUw4XrXi1YYAgACIrACABBnIQIAAgm+AgALbxRA=","Date":"Wed, 22 Apr 2026 09:21:55 +0000","Message-ID":"\n <TYPPR06MB82066A191FB2B0AD05F7C295FC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org> <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <aeYrfQuAsEaOpH_O@x1.local>","In-Reply-To":"<aeYrfQuAsEaOpH_O@x1.local>","Accept-Language":"zh-TW, en-US","Content-Language":"zh-TW","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=SD3NAXHK;\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=aspeedtech.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"TYPPR06MB8206:EE_|SEZPR06MB7123:EE_","x-ms-office365-filtering-correlation-id":"e662e7c6-2385-4616-585e-08dea050988f","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|376014|366016|1800799024|7416014|38070700021|56012099003|22082099003|18002099003;","x-microsoft-antispam-message-info":"\n jig9uP9oXai6Cq+jK2dSkBK6YqwBx2e2n0dXlL8CQsoJ0xiPSnQ2a6e9+TP30kOFIsrXboSge9PdbF5HwdLbD4tJnvIqIyv1KDBklNC3ik9ZpoJg0SDyDZPkBX75/xyNv+Y6Bql0Ru12HMgKcXiGrLih0R284INbadCr0DOW9DmXFgnRYgDOAiJPxzqsnmvluQEovF3swVI3KiYqEF2X2CagpJOafpmNC2dNsi3gaErR8jS9rOWp5qbx29hZUlcDCV+nu4VquMOtzmqxgtUTQ5wStJ0LEMQIGZmgYgVPeejiWH2kEQ18naZwsuIlu9sehEYRbNxfGExoIGEnPuOSer5rFT97BhJcmtuf5ZgJtoKNQjZx3yeMRU8SDYAK9MKZiQ6UKNGySJlvaeA2XJfQMhve+7sFBromsjt7+P1nUsmXxL4vCnA/00FB1bNh2gFmaQj3kMUODqJBktxUmBHHeXGSo3jY0apDNokkIJoC6FlRPvklRvfeJoB4B/44OrKwfbq14CHvdzYHpLIejeJGvW8aNg+jRzTde69U92I8sKyszXTLKiZPor5ISwbET+rpLHFkf6XcqTdeJloPbn1gUszrS6B2loEjGLn7lnp9KLuazhsS/en2UDR1NZo3gAwEKNqK34wHQNua36Zs3oGzOwAzEQo3963mFoFYOLc9CSIBsAmWnxxckTuSYNLJGfUR883uVWqMonhyvE8owh/IUrS1k5OJ/1tmnqF4Ze2GUiC659svtLijBKv7l0OiY73r","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-tw; SCL:1;\n SRV:; IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(376014)(366016)(1800799024)(7416014)(38070700021)(56012099003)(22082099003)(18002099003);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?lsCTrzRq1aXkq5S5hP6nMJOfMgtH?=\n\t=?utf-8?q?T+H8z/e3/+eymxINHN05DHXZ7ZRIOh8EEgRS1vm8oFmlGN1I12uvbcah+R+h80aTY?=\n\t=?utf-8?q?Do+Gpl508YD9+UJmhY81T/WXjvCPLEGXqlgrpj2iuqQQVkvRWO2aXev9yfCcZ1/hA?=\n\t=?utf-8?q?nfhxHoNK6tEwczaHnksgJfKiPin3w/trvcJSimUq54LoG8ZS1LR5koceEfjb6xLQN?=\n\t=?utf-8?q?Nl8ZaU5df4TsBfVX22myNp3eFrdcdiN8uXDu8UcstlmAHAfD21NNnusZLBZQwzK5R?=\n\t=?utf-8?q?P0l+Fcl2nmXY/YRLElRdd8BpopVuqivrbdDSUZuwHF5/Jt4X1yQ0SUILG6sXf1O1G?=\n\t=?utf-8?q?We+HV17a4xuNreFCPmb/n05OY3KQLN2xxeVdFlcOL6lV2FKS3svh9W7aHLnMvoF33?=\n\t=?utf-8?q?bbgrHOzdTpI0f0D9KiD7SUvtJBmCJ9pxFg1fDuBbjrSVXcxEv8VfQKhYglsAYTlqi?=\n\t=?utf-8?q?sXT12dNEWxfC+l88zDvDY8n3v/gsdViCWb+I3AumQMc8VEHQ8OCBmuIiRO98PYlUC?=\n\t=?utf-8?q?l7SU2lXyibRkKUcw3U5RstIl8HeH5YGLIHE21NCI8p6KP740/hsg5o175++RVA3Zp?=\n\t=?utf-8?q?N5up9SEuq+DBhm6Dul5vYDqNsOeBOxW6xQK+uVdgsk/uoMNJVUXAPVCb4MJQrMI58?=\n\t=?utf-8?q?jt8QUGS8VmMD9vuQW5t59gwg75PziRmGJ90zpGXlKGYhwdGZsJW8yCKcEql9NUGFH?=\n\t=?utf-8?q?iu42a+o0un1Y4A6UKo9IuAljg7OT8tS4xMba+pVpuwIRZE+G6wTcwWiLMu1cAaKab?=\n\t=?utf-8?q?nowp6wLt6Bjir04cEpddGPO5Ia8SfQ96N24GoYjv2QjbihXQt/CxzUD7/PLabGSJ8?=\n\t=?utf-8?q?KqD5JLpStUO7+6fFW82nq20ClQqQkforNhmiLGBQ8Whu4HSYd/AQwa/RiQzfEG0Ls?=\n\t=?utf-8?q?+lIIw3i7Z+WdpkpsjO0NXJZ/3E8UoD7F6arSGJ3cwiBvInl2neJQUk5MdlrZH3cPz?=\n\t=?utf-8?q?V84tEEVsDvMFSwf45uFYoPUDMu8R0hfJs2ZEpGJuX5ojMLxmcFOf94awVhZh7uSXU?=\n\t=?utf-8?q?gHoV+6MmR4kNB580dQS867dytaBY8g4xChPQ+q4eFiwPX2aI2PaXPpnpQSbYJkGxv?=\n\t=?utf-8?q?gw/Jr2zaq/d3Gya+T3rC1v/BZjiP9+8SRhF09Tv8uU9t3wh2G68bffNwIinpWu7p9?=\n\t=?utf-8?q?BzatfHgXl2NTCnCMTZotWTuOQ/apQdjUp8sbvGgXsxh0+6b7s8DyXNA+A+lKCQoYx?=\n\t=?utf-8?q?6qRJDHcAF13fzlGSaJjLuHalqvVEmQSGDS0h9pqaP7hCNkfW0pL3RsbqCXaffRayI?=\n\t=?utf-8?q?R7dUycq4zx6qsxN7xr4GRjcE9aymcx0sTTS80vaomwXmnrA270R26rkXj62dBVvTM?=\n\t=?utf-8?q?lvj/4OZSpy7dVyBUDC977HpoIzL2SZdMoV2rocqzz1vrv6SHRgXKOEA34v9cuzzMU?=\n\t=?utf-8?q?EIr/2smXLwuz1xM5/xZwUcKG11f3Ld/+mGCeSS6pIn5whbJcQF00G3od5RRTGRMeL?=\n\t=?utf-8?q?Zw6H6gY/VxrHqTMUMKLZzYW85GEGBtiHsqxyRqcErPMD/adSg2FAo62Fza0uJP2UQ?=\n\t=?utf-8?q?qGpybI8YLTvGbG9pycM8MQONQ9GmjWebXgzbV0KZqgiSVfFDbRuixU0KhzjFmRYmz?=\n\t=?utf-8?q?Y/WFPVkvEXRd6jbawLxa2wn7DAq84h1uZ6fJ2dD8y2DvU8V8tan/eovT7VDf9Nxhg?=\n\t=?utf-8?q?+wG0vo0l81UNgUFcllxAU/lm9YLh4Q+g=3D=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n b6D5pNP9/zHuY2j4wr+ujpmbtOeW5XL6joeP/AodZfHZLsH5KfRC6RsvEqrHP2eN1gvfzsQ8TFB39lXN5Jwi0oibaTfZt9fqbxXBfu4LucadPKfHLJ6MKeXGK2gj9vPPWIiKOuAeqx8cpabneeOX0vRDb62u34Dj41E3g/puzOyUyjuroUObtMkL1KNRdCwtoE3uoV79++bMn4I7S8/oRMFfl21yI4eT6aURINvD6O8fCorekHjA38yEK0xNNIjEk31669T3/k/oPafbk1+zPDvf8um1WFi/UgljjijJuSNjAIgOrqY4aYs/Xhsblo/Ors8xyAVRJvZoTsr6av+juA==","X-OriginatorOrg":"aspeedtech.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"TYPPR06MB8206.apcprd06.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n e662e7c6-2385-4616-585e-08dea050988f","X-MS-Exchange-CrossTenant-originalarrivaltime":"22 Apr 2026 09:21:55.0116 (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"43d4aa98-e35b-4575-8939-080e90d5a249","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n 9UsXg+lWv2SKXKE5c1SIpKipQldliNAXJkqAe5j/DYpvMGtjIgPkf05w9yk/PoOC+cOSuBbjzchRaCaEAn+f5dxpkNJkRUOlQ9Qdj475a+0=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"SEZPR06MB7123","Received-SPF":"pass client-ip=2a01:111:f403:c40f::6;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=SEYPR02CU001.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"}},{"id":3680656,"web_url":"http://patchwork.ozlabs.org/comment/3680656/","msgid":"<aejdEO2CXg-QuGcL@x1.local>","list_archive_url":null,"date":"2026-04-22T14:37:04","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":67717,"url":"http://patchwork.ozlabs.org/api/people/67717/","name":"Peter Xu","email":"peterx@redhat.com"},"content":"On Wed, Apr 22, 2026 at 09:21:55AM +0000, Jamin Lin wrote:\n> Hi Peter, Cédric and Philippe\n> \n> > Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> > 64-bit\n> > \n> > On Mon, Apr 20, 2026 at 05:56:11AM +0000, Jamin Lin wrote:\n> > > Hi Peter, Philippe, Cédric\n> > \n> > Hi, Jamin,\n> > \n> > [...]\n> > \n> > > > > > @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci = {\n> > > > > >           /* schedule state */\n> > > > > >           VMSTATE_UINT32(astate, EHCIState),\n> > > > > >           VMSTATE_UINT32(pstate, EHCIState),\n> > > > > > -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> > > > > > -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> > > > > > +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> > > > > > +                            ehci_core_is_before_version_3),\n> > > > > > +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> > > > > > +                            ehci_core_is_before_version_3),\n> > > > > > +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > > > > > +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> > > >\n> > > > TL;DR: I feel like we still need machine type compat properties.\n> > > >\n> > >\n> > > I don't understand this: Could you please describe it in more detail?\n> > \n> > See hw/core/machine.c and entries added into hw_compat_*[] arrays.  IIUC,\n> > if this is an important device and if we want to guarantee bidirectional\n> > migration (I'll explain later), then we should stick with machine compat\n> > properties.\n> > \n> > >\n> > > > Details:\n> > > >\n> > > > When a v2 stream arrives, two _TEST()s will do the loading, then\n> > > > post_load() extend it to 64bits, looks fine.\n> > > >\n> > > > When a v3 stream arrives, two _TEST()s got skipped then latter two take\n> > effect.\n> > > > post_load() skips.  Looks fine.\n> > > >\n> > > > When migrating to another QEMU, due to the fact saving vmstates\n> > > > always take vmsd's version declared (3), I don't see how it can\n> > > > migrate back to a v2 stream; it didn't know about v3.\n> > > >\n> > > > Jiamin, have you tested migrating from a new QEMU binary back to\n> > > > another old one?  For upstream and serious devices, we need to\n> > > > guarantee bi-directional migrations, back and forth.\n> > > >\n> > >\n> > > Sorry, I am not familiar with the design of QEMU migration, and I don't know\n> > how to test it.\n> > > I added these hook functions based on Philippe's suggestion and review.\n> > > Could you tell me how to test migration to ensure both version 3 and version\n> > 2 are workable?\n> > \n> > Since this patch already modified VMSDs, I believe migration test should have\n> > been carried out at the very minimum..  Logically if vmsd versioning is used,\n> > we should also have tested forward migrations, because that's only for that.\n> > \n> > What I'm talking about is I think backward migration will fail.\n> > \n> > Forward migration describes the case when a VM hosted by an old QEMU\n> > binary (e.g. QEMU v10.2.0) is migrated to a new QEMU (e.g., after this patch\n> > applied on top of master).\n> > \n> > Backward migration describes the case when a VM hosted by a new QEMU\n> > binary (e.g., after this patch applied on top of master) is migrated back to an\n> > old QEMU binary (e.g. QEMU v10.2.0).\n> > \n> > For different devices, we should allow different level of support on migration.\n> > Any device that may be important to either upstream QEMU or downstreams\n> > should better allow bi-directional migration.  In this case we need to use\n> > machine compat properties I mentioned.  I'm not yet sure where EHCI\n> > controller falls e.g. v.s. XHCI.. when not sure, we can also just stick with\n> > machine compat properties to be on the safe side.\n> > \n> > For more info, you can also refer to:\n> > \n> > https://www.qemu.org/docs/master/devel/migration/compatibility.html\n> > \n> > Thanks,\n> > \n> > --\n> > Peter Xu\n> Thanks for your support and the detailed explanation.\n> Following Cédric’s comments, I now understand how to properly test migration. With the changes below, both forward and backward migration tests pass.\n> Could you please review these changes, or would you prefer that I resend them as v4?\n\nPer what I read on Phil's reply on the cover letter, he prefers you to\nresend anyway.  Better do it.  Comments inline.\n\n> \n> Thanks again for your guidance and support.\n> \n> Jamin\n> \n> diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\n> index 310183bbc4..bd165c793c 100644\n> --- a/hw/usb/hcd-ehci.h\n> +++ b/hw/usb/hcd-ehci.h\n> @@ -264,6 +264,7 @@ struct EHCIState {\n>      uint32_t maxframes;\n>      bool caps_64bit_addr;\n>      uint32_t ctrldssegment_default;\n> +    bool migrate_fetch_addr_64bit;\n>  \n>      /*\n>       *  EHCI spec version 1.0 Section 2.3\n> @@ -321,7 +322,9 @@ struct EHCIState {\n>      DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128), \\\n>      DEFINE_PROP_BOOL(\"caps-64bit-addr\", _state, ehci.caps_64bit_addr, false), \\\n>      DEFINE_PROP_UINT32(\"ctrldssegment-default\", _state, \\\n> -                       ehci.ctrldssegment_default, 0)\n> +                       ehci.ctrldssegment_default, 0), \\\n> +    DEFINE_PROP_BOOL(\"x-migrate-fetch-addr-64bit\", _state, \\\n> +                     ehci.migrate_fetch_addr_64bit, true)\n\nThe diff looks a bit weird; this chunk is not present in hw/usb/hcd-ehci.h\nin master branch, but maybe this series touched it.. in that case it's\nfine.\n\n>  \n>  extern const VMStateDescription vmstate_ehci;\n>  \n> diff --git a/hw/core/machine.c b/hw/core/machine.c\n> index 0aa77a57e9..e77400c7ab 100644\n> --- a/hw/core/machine.c\n> +++ b/hw/core/machine.c\n> @@ -41,6 +41,8 @@\n>  GlobalProperty hw_compat_10_2[] = {\n>      { \"scsi-block\", \"migrate-pr\", \"off\" },\n>      { \"isa-cirrus-vga\", \"global-vmstate\", \"true\" },\n> +    { \"sysbus-ehci-usb\", \"x-migrate-fetch-addr-64bit\", \"off\" },\n> +    { \"pci-ehci-usb\", \"x-migrate-fetch-addr-64bit\", \"off\" },\n\nI'm still looking at master branch, vmstate_ehci is referenced in both\n\"ehci-sysbus\" (vmstate_ehci_sysbus) and \"ehci\" (vmstate_ehci_pci).  Here\nyou used different names, I'm not sure if it's relevant to your other\npatches, please double check.\n\nAlso if there're two drivers involved, IIUC we should need to add two bool\nproperties.. I only saw one above.  Again, not sure if it's relevant to\nwhat your prior patch did, but please double check.\n\n>  };\n>  const size_t hw_compat_10_2_len = G_N_ELEMENTS(hw_compat_10_2);\n>  \n> diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c\n> index 983b1731f9..87528ddc02 100644\n> --- a/hw/usb/hcd-ehci.c\n> +++ b/hw/usb/hcd-ehci.c\n> @@ -2469,6 +2469,9 @@ static int usb_ehci_pre_save(void *opaque)\n>      ehci->last_run_ns -= (ehci->frindex - new_frindex) * UFRAME_TIMER_NS;\n>      ehci->frindex = new_frindex;\n>  \n> +    ehci->a_fetch_addr_pre_v3 = ehci->a_fetch_addr;\n> +    ehci->p_fetch_addr_pre_v3 = ehci->p_fetch_addr;\n\nThis looks fine if you always prepare the 32bit versions of the addr, but\nit can also be put under a \"if (!ehci_fetch_addr_64_needed(...))\".  Not a\nbig deal.\n\n> +\n>      return 0;\n>  }\n>  \n> @@ -2489,10 +2492,8 @@ static int usb_ehci_post_load(void *opaque, int version_id)\n>          }\n>      }\n>  \n> -    if (version_id < 3) {\n> -        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> -        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> -    }\n> +    s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> +    s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n\nThis one looks risky, it will also run on new machine types, I think a \"if\n(!ehci_fetch_addr_64_needed(...))\" is required here (unlike the pre_save),\notherwise I suspect you may overwrite the 64bits with 32bits after\nmigration.  It may explode when high 32bits have something nonzero?\n\n>  \n>      return 0;\n>  }\n> @@ -2523,14 +2524,29 @@ static void usb_ehci_vm_state_change(void *opaque, bool running, RunState state)\n>      }\n>  }\n>  \n> -static bool ehci_core_is_before_version_3(void *opaque, int version_id)\n> +static bool ehci_fetch_addr_64_needed(void *opaque)\n>  {\n> -    return version_id < 3;\n> +    EHCIState *s = opaque;\n> +\n> +    return s->migrate_fetch_addr_64bit;\n>  }\n\nYes this is the traditional way.\n\n>  \n> +static const VMStateDescription vmstate_ehci_fetch_addr_64 = {\n> +    .name = \"ehci-core/fetch-addr64\",\n> +    .version_id = 1,\n> +    .minimum_version_id = 1,\n> +    .needed = ehci_fetch_addr_64_needed,\n> +    .fields = (const VMStateField[]) {\n> +        /* mmio registers */\n> +        VMSTATE_UINT64(a_fetch_addr, EHCIState),\n> +        VMSTATE_UINT64(p_fetch_addr, EHCIState),\n> +        VMSTATE_END_OF_LIST()\n> +    }\n> +};\n> +\n>  const VMStateDescription vmstate_ehci = {\n>      .name        = \"ehci-core\",\n> -    .version_id  = 3,\n> +    .version_id  = 2,\n>      .minimum_version_id  = 1,\n>      .pre_save    = usb_ehci_pre_save,\n>      .post_load   = usb_ehci_post_load,\n> @@ -2559,14 +2575,14 @@ const VMStateDescription vmstate_ehci = {\n>          /* schedule state */\n>          VMSTATE_UINT32(astate, EHCIState),\n>          VMSTATE_UINT32(pstate, EHCIState),\n> -        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> -                            ehci_core_is_before_version_3),\n> -        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> -                            ehci_core_is_before_version_3),\n> -        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> -        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> +        VMSTATE_UINT32(a_fetch_addr_pre_v3, EHCIState),\n> +        VMSTATE_UINT32(p_fetch_addr_pre_v3, EHCIState),\n>          VMSTATE_END_OF_LIST()\n> -    }\n> +    },\n> +    .subsections = (const VMStateDescription * const []) {\n> +        &vmstate_ehci_fetch_addr_64,\n\nIMHO you don't need to make it a subsection, you can use\nVMSTATE_UINT64_TEST().\n\nSimilarly you can also use VMSTATE_UINT32_TEST() to only migrate 32bit\nversions in old machine types.\n\nWith those you can keep them together and add a comment, may look better\nthan subsections where you split them apart, it'll be harder to follow in\nthe future.\n\nThanks,\n\n> +        NULL,\n> +    },\n>  };\n>  \n>  void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)","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=TD0FB6yv;\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=Q/KYWUi9;\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 4g11zP4q2vz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 00:37:52 +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 1wFYhZ-0005XO-Ei; Wed, 22 Apr 2026 10:37:17 -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 <peterx@redhat.com>) id 1wFYhX-0005Ww-8I\n for qemu-devel@nongnu.org; Wed, 22 Apr 2026 10:37:15 -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 <peterx@redhat.com>) id 1wFYhV-0004gi-3s\n for qemu-devel@nongnu.org; Wed, 22 Apr 2026 10:37:15 -0400","from mail-qk1-f199.google.com (mail-qk1-f199.google.com\n [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-574-a2Op4qH0Pu6YkSBRkQejTA-1; Wed, 22 Apr 2026 10:37:08 -0400","by mail-qk1-f199.google.com with SMTP id\n af79cd13be357-8eb04352924so637388585a.1\n for <qemu-devel@nongnu.org>; Wed, 22 Apr 2026 07:37:08 -0700 (PDT)","from x1.local ([142.189.10.167]) by smtp.gmail.com with ESMTPSA id\n af79cd13be357-8e7d98c15a9sm1520123685a.43.2026.04.22.07.37.04\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 22 Apr 2026 07:37:05 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776868631;\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=+y8dDOcL2TGY8RwRMF+ZJao4Mtt36PyCZPoOztGf8ZY=;\n b=TD0FB6yvSN/dySkuoGV2Jx3oMRCIBFM3JKgy0RlQ8qPZEMfbo0n46uKGPy9S3/3vNwdLaX\n yDiBNCbahmwqzelRRadDw5byIVyzxMVeOdhCk/oIDFfSrDwVbjCivnePVTqtlq5tGweZmp\n Lpy4QVNJe0LasZrehzh56mwOVUNaldA=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1776868628; x=1777473428; darn=nongnu.org;\n h=in-reply-to:content-transfer-encoding:content-disposition\n :mime-version:references:message-id:subject:cc:to:from:date:from:to\n :cc:subject:date:message-id:reply-to;\n bh=+y8dDOcL2TGY8RwRMF+ZJao4Mtt36PyCZPoOztGf8ZY=;\n b=Q/KYWUi9qCOziq3RcpkMzAB4xCxyvXEV3rFfe3Hu2cipJ8ZpgtEY+j3aC+219xbiNe\n +oTakTu726/I1+Yd/wcYFvE2UMsnecyXWxUOPq6G6Pm5hgUVPs6l+C8i3Mbn0BDw7qHx\n IVVlUqZ0aASBHOy3RqHdn26UcjZRL1JS/qDdxLFvglx3V5L61SPHqXOtUxnn+eHbq0Qi\n AC+IGVt9zoXvAZIiQzNjaK4Jcs9pLnK93OXh158kPBIbk6bgL75/3zMBLHsZcf+28J3p\n r8Yg8MNxeNyL7dKisa2kbZ4xsWQNI+GiAI2c64ILyL7uyG6OqsUfQ+mEvtHu2qiZzQjj\n gQ5Q=="],"X-MC-Unique":"a2Op4qH0Pu6YkSBRkQejTA-1","X-Mimecast-MFC-AGG-ID":"a2Op4qH0Pu6YkSBRkQejTA_1776868628","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776868628; x=1777473428;\n h=in-reply-to:content-transfer-encoding:content-disposition\n :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg\n :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n bh=+y8dDOcL2TGY8RwRMF+ZJao4Mtt36PyCZPoOztGf8ZY=;\n b=gexBL6rf0x5BrWOf+hIZ0uKUl6zhPdEMoLLzVnrELlGeAGjthnhH1c946gatUXfcEh\n kjHWj4OZSsbXG38X2D5W0LTaktsSSaHgabUdypWfxyIF9Le5Z5cUHW5ooOIsvOE3ocAb\n VKsTEC8bbErX4h7jgufECRkt2eWQkcXvp2AluvCnCrhn5IAxHdQ1qQTjJMDCtyS2V3Nu\n /5szmpJQIz8Ka7f2I0QRx2NV6Rt6i1yHlBgxdAykLcRRjKhCtS068LvgSsZLoSYWwVIn\n KvBREnPGSZlwo4nYrRzOJyMH0up9LAMskds3N4MpFSUaKOEge/ZqP6I6MPSiN1+i/boM\n iTMw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/2mviOpx4LYLSDJ7ACb8kcUbGtRn147HKuEUJHIxpYuRhiQ/krsFWMFzOOvoHGXO+3d+439+qkksxw@nongnu.org","X-Gm-Message-State":"AOJu0YwzRvaCU+WQaxhMAHFkd/9mWZhIFEBS6b4K5P61ikg0zYuXKX4T\n X6Lwm1UwJTzh/S2YQ0jNQfdZmHAsc83sSIAmHUYc/3mbeNmt9BcsbZnRVN0CRBDYGNW+YAlD9I+\n DmVCIzpDUyLn0oMA0uiFdjybKU7lAeRHCKFY2wAu/95PuMa102PkMJy63","X-Gm-Gg":"AeBDieuyzwp2kpwTMcQMWcxuFoCezHzlqDDvyQ2zXD/ZqiLJBmC421NYexxPOS/1Mot\n rqvNKIsy8LxySrEkibGzA6gcfOxQ7+zEmKxMgpH13nz9qLwGA+LSuPd5J8v1K1an8WNOfFWL1Ja\n fOf1KGGS4gue3iHpGazBuToaanUTnw/RZ9WFQi4ivh95TJV6e45Eo4xFTr1SHdVl9i2o74W6faE\n HASuGZqgL4/ise4EESzf/LdwGykUxKNZh53tdNQxVgBQfhT9pZTIaff+qD63FF1i8D/Q87PQZOP\n AkyR28Sy1cBN3U8UQghzJLvAzJt25S7MlJ3jpSXfFF/j0InTrf/NTHDxCTG69Uld7Kt+KdX7jqf\n iB1OoynKar65p8UpJ+D8H2XhaKlF7Fn14zB8IWdqw1ZRZ/gMTtyWe2JZNZA==","X-Received":["by 2002:a05:620a:28d1:b0:8d7:3f45:b95f with SMTP id\n af79cd13be357-8e78fb18dc2mr3122869585a.16.1776868627322;\n Wed, 22 Apr 2026 07:37:07 -0700 (PDT)","by 2002:a05:620a:28d1:b0:8d7:3f45:b95f with SMTP id\n af79cd13be357-8e78fb18dc2mr3122858685a.16.1776868626332;\n Wed, 22 Apr 2026 07:37:06 -0700 (PDT)"],"Date":"Wed, 22 Apr 2026 10:37:04 -0400","From":"Peter Xu <peterx@redhat.com>","To":"Jamin Lin <jamin_lin@aspeedtech.com>","Cc":"=?utf-8?q?C=C3=A9dric?= Le Goater <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Message-ID":"<aejdEO2CXg-QuGcL@x1.local>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>\n <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <aeYrfQuAsEaOpH_O@x1.local>\n <TYPPR06MB82066A191FB2B0AD05F7C295FC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"\n <TYPPR06MB82066A191FB2B0AD05F7C295FC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>","Received-SPF":"pass client-ip=170.10.133.124; envelope-from=peterx@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\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, 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"}},{"id":3681231,"web_url":"http://patchwork.ozlabs.org/comment/3681231/","msgid":"<TYPPR06MB820607B5BBAD8C8DC0A4D2DFFC2A2@TYPPR06MB8206.apcprd06.prod.outlook.com>","list_archive_url":null,"date":"2026-04-23T01:48:36","subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":81768,"url":"http://patchwork.ozlabs.org/api/people/81768/","name":"Jamin Lin","email":"jamin_lin@aspeedtech.com"},"content":"Hi Peter,\n\n> Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> 64-bit\n> \n> On Wed, Apr 22, 2026 at 09:21:55AM +0000, Jamin Lin wrote:\n> > Hi Peter, Cédric and Philippe\n> >\n> > > Subject: Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor\n> > > addresses to 64-bit\n> > >\n> > > On Mon, Apr 20, 2026 at 05:56:11AM +0000, Jamin Lin wrote:\n> > > > Hi Peter, Philippe, Cédric\n> > >\n> > > Hi, Jamin,\n> > >\n> > > [...]\n> > >\n> > > > > > > @@ -2501,8 +2515,12 @@ const VMStateDescription vmstate_ehci\n> = {\n> > > > > > >           /* schedule state */\n> > > > > > >           VMSTATE_UINT32(astate, EHCIState),\n> > > > > > >           VMSTATE_UINT32(pstate, EHCIState),\n> > > > > > > -        VMSTATE_UINT32(a_fetch_addr, EHCIState),\n> > > > > > > -        VMSTATE_UINT32(p_fetch_addr, EHCIState),\n> > > > > > > +        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3,\n> EHCIState,\n> > > > > > > +\n> ehci_core_is_before_version_3),\n> > > > > > > +        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3,\n> EHCIState,\n> > > > > > > +\n> ehci_core_is_before_version_3),\n> > > > > > > +        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > > > > > > +        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> > > > >\n> > > > > TL;DR: I feel like we still need machine type compat properties.\n> > > > >\n> > > >\n> > > > I don't understand this: Could you please describe it in more detail?\n> > >\n> > > See hw/core/machine.c and entries added into hw_compat_*[] arrays.\n> > > IIUC, if this is an important device and if we want to guarantee\n> > > bidirectional migration (I'll explain later), then we should stick\n> > > with machine compat properties.\n> > >\n> > > >\n> > > > > Details:\n> > > > >\n> > > > > When a v2 stream arrives, two _TEST()s will do the loading, then\n> > > > > post_load() extend it to 64bits, looks fine.\n> > > > >\n> > > > > When a v3 stream arrives, two _TEST()s got skipped then latter\n> > > > > two take\n> > > effect.\n> > > > > post_load() skips.  Looks fine.\n> > > > >\n> > > > > When migrating to another QEMU, due to the fact saving vmstates\n> > > > > always take vmsd's version declared (3), I don't see how it can\n> > > > > migrate back to a v2 stream; it didn't know about v3.\n> > > > >\n> > > > > Jiamin, have you tested migrating from a new QEMU binary back to\n> > > > > another old one?  For upstream and serious devices, we need to\n> > > > > guarantee bi-directional migrations, back and forth.\n> > > > >\n> > > >\n> > > > Sorry, I am not familiar with the design of QEMU migration, and I\n> > > > don't know\n> > > how to test it.\n> > > > I added these hook functions based on Philippe's suggestion and review.\n> > > > Could you tell me how to test migration to ensure both version 3\n> > > > and version\n> > > 2 are workable?\n> > >\n> > > Since this patch already modified VMSDs, I believe migration test\n> > > should have been carried out at the very minimum..  Logically if\n> > > vmsd versioning is used, we should also have tested forward migrations,\n> because that's only for that.\n> > >\n> > > What I'm talking about is I think backward migration will fail.\n> > >\n> > > Forward migration describes the case when a VM hosted by an old QEMU\n> > > binary (e.g. QEMU v10.2.0) is migrated to a new QEMU (e.g., after\n> > > this patch applied on top of master).\n> > >\n> > > Backward migration describes the case when a VM hosted by a new QEMU\n> > > binary (e.g., after this patch applied on top of master) is migrated\n> > > back to an old QEMU binary (e.g. QEMU v10.2.0).\n> > >\n> > > For different devices, we should allow different level of support on\n> migration.\n> > > Any device that may be important to either upstream QEMU or\n> > > downstreams should better allow bi-directional migration.  In this\n> > > case we need to use machine compat properties I mentioned.  I'm not\n> > > yet sure where EHCI controller falls e.g. v.s. XHCI.. when not sure,\n> > > we can also just stick with machine compat properties to be on the safe\n> side.\n> > >\n> > > For more info, you can also refer to:\n> > >\n> > > https://www.qemu.org/docs/master/devel/migration/compatibility.html\n> > >\n> > > Thanks,\n> > >\n> > > --\n> > > Peter Xu\n> > Thanks for your support and the detailed explanation.\n> > Following Cédric’s comments, I now understand how to properly test\n> migration. With the changes below, both forward and backward migration tests\n> pass.\n> > Could you please review these changes, or would you prefer that I resend\n> them as v4?\n> \n> Per what I read on Phil's reply on the cover letter, he prefers you to resend\n> anyway.  Better do it.  Comments inline.\n> \nThanks for the review and suggestion.\nWill resend v4 soon and loop you.\n\n> >\n> > Thanks again for your guidance and support.\n> >\n> > Jamin\n> >\n> > diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index\n> > 310183bbc4..bd165c793c 100644\n> > --- a/hw/usb/hcd-ehci.h\n> > +++ b/hw/usb/hcd-ehci.h\n> > @@ -264,6 +264,7 @@ struct EHCIState {\n> >      uint32_t maxframes;\n> >      bool caps_64bit_addr;\n> >      uint32_t ctrldssegment_default;\n> > +    bool migrate_fetch_addr_64bit;\n> >\n> >      /*\n> >       *  EHCI spec version 1.0 Section 2.3 @@ -321,7 +322,9 @@ struct\n> > EHCIState {\n> >      DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128), \\\n> >      DEFINE_PROP_BOOL(\"caps-64bit-addr\", _state, ehci.caps_64bit_addr,\n> false), \\\n> >      DEFINE_PROP_UINT32(\"ctrldssegment-default\", _state, \\\n> > -                       ehci.ctrldssegment_default, 0)\n> > +                       ehci.ctrldssegment_default, 0), \\\n> > +    DEFINE_PROP_BOOL(\"x-migrate-fetch-addr-64bit\", _state, \\\n> > +                     ehci.migrate_fetch_addr_64bit, true)\n> \n> The diff looks a bit weird; this chunk is not present in hw/usb/hcd-ehci.h in\n> master branch, but maybe this series touched it.. in that case it's fine.\n> \n> >\n> >  extern const VMStateDescription vmstate_ehci;\n> >\n> > diff --git a/hw/core/machine.c b/hw/core/machine.c index\n> > 0aa77a57e9..e77400c7ab 100644\n> > --- a/hw/core/machine.c\n> > +++ b/hw/core/machine.c\n> > @@ -41,6 +41,8 @@\n> >  GlobalProperty hw_compat_10_2[] = {\n> >      { \"scsi-block\", \"migrate-pr\", \"off\" },\n> >      { \"isa-cirrus-vga\", \"global-vmstate\", \"true\" },\n> > +    { \"sysbus-ehci-usb\", \"x-migrate-fetch-addr-64bit\", \"off\" },\n> > +    { \"pci-ehci-usb\", \"x-migrate-fetch-addr-64bit\", \"off\" },\n> \n> I'm still looking at master branch, vmstate_ehci is referenced in both\n> \"ehci-sysbus\" (vmstate_ehci_sysbus) and \"ehci\" (vmstate_ehci_pci).  Here you\n> used different names, I'm not sure if it's relevant to your other patches, please\n> double check.\n> \nIt seems that we need to use the device type name here.\nFor the PCI EHCI controller, looking at hcd-ehci-pci.c:\n\nThe VMStateDescription name is \"ehci\":\n\nstatic const VMStateDescription vmstate_ehci_pci = {\n    .name        = \"ehci\",\n    .version_id  = 2,\n    .minimum_version_id  = 1,\n    .fields = (const VMStateField[]) {\n        VMSTATE_PCI_DEVICE(pcidev, EHCIPCIState),\n        VMSTATE_STRUCT(ehci, EHCIPCIState, 2, vmstate_ehci, EHCIState),\n        VMSTATE_END_OF_LIST()\n    }\n};\n\nHowever, the actual device type name is defined via TYPE_PCI_EHCI,\nwhich resolves to \"pci-ehci-usb\" and is used when registering the device:\n\nstatic void ehci_pci_register_types(void)\n{\n    TypeInfo ehci_type_info = {\n        .parent        = TYPE_PCI_EHCI,\n        .class_init    = ehci_data_class_init,\n    };\n    int i;\n\n    type_register_static(&ehci_pci_type_info);\n\n    for (i = 0; i < ARRAY_SIZE(ehci_pci_info); i++) {\n        ehci_type_info.name = ehci_pci_info[i].name;\n        ehci_type_info.class_data = ehci_pci_info + i;\n        type_register_static(&ehci_type_info);\n    }\n}\n\nSo in machine compat properties, it seems we should use the device type\nname (\"pci-ehci-usb\"), rather than the VMStateDescription name (\"ehci\").\n\nI also tried changing it to \"ehci\", but migration failed in that case,\nso it looks like \"pci-ehci-usb\" is the correct one to use here.\n\nCould you please confirm if this is the expected usage?\n\n> Also if there're two drivers involved, IIUC we should need to add two bool\n> properties.. I only saw one above.  Again, not sure if it's relevant to what your\n> prior patch did, but please double check.\n> \n> >  };\n> >  const size_t hw_compat_10_2_len = G_N_ELEMENTS(hw_compat_10_2);\n> >\n> > diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index\n> > 983b1731f9..87528ddc02 100644\n> > --- a/hw/usb/hcd-ehci.c\n> > +++ b/hw/usb/hcd-ehci.c\n> > @@ -2469,6 +2469,9 @@ static int usb_ehci_pre_save(void *opaque)\n> >      ehci->last_run_ns -= (ehci->frindex - new_frindex) *\n> UFRAME_TIMER_NS;\n> >      ehci->frindex = new_frindex;\n> >\n> > +    ehci->a_fetch_addr_pre_v3 = ehci->a_fetch_addr;\n> > +    ehci->p_fetch_addr_pre_v3 = ehci->p_fetch_addr;\n> \n> This looks fine if you always prepare the 32bit versions of the addr, but it can\n> also be put under a \"if (!ehci_fetch_addr_64_needed(...))\".  Not a big deal.\n> \nWill add\n> > +\n> >      return 0;\n> >  }\n> >\n> > @@ -2489,10 +2492,8 @@ static int usb_ehci_post_load(void *opaque, int\n> version_id)\n> >          }\n> >      }\n> >\n> > -    if (version_id < 3) {\n> > -        s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> > -        s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> > -    }\n> > +    s->a_fetch_addr = s->a_fetch_addr_pre_v3;\n> > +    s->p_fetch_addr = s->p_fetch_addr_pre_v3;\n> \n> This one looks risky, it will also run on new machine types, I think a \"if\n> (!ehci_fetch_addr_64_needed(...))\" is required here (unlike the pre_save),\n> otherwise I suspect you may overwrite the 64bits with 32bits after migration.\n> It may explode when high 32bits have something nonzero?\n> \nWill add\n> >\n> >      return 0;\n> >  }\n> > @@ -2523,14 +2524,29 @@ static void usb_ehci_vm_state_change(void\n> *opaque, bool running, RunState state)\n> >      }\n> >  }\n> >\n> > -static bool ehci_core_is_before_version_3(void *opaque, int\n> > version_id)\n> > +static bool ehci_fetch_addr_64_needed(void *opaque)\n> >  {\n> > -    return version_id < 3;\n> > +    EHCIState *s = opaque;\n> > +\n> > +    return s->migrate_fetch_addr_64bit;\n> >  }\n> \n> Yes this is the traditional way.\n> \n> >\n> > +static const VMStateDescription vmstate_ehci_fetch_addr_64 = {\n> > +    .name = \"ehci-core/fetch-addr64\",\n> > +    .version_id = 1,\n> > +    .minimum_version_id = 1,\n> > +    .needed = ehci_fetch_addr_64_needed,\n> > +    .fields = (const VMStateField[]) {\n> > +        /* mmio registers */\n> > +        VMSTATE_UINT64(a_fetch_addr, EHCIState),\n> > +        VMSTATE_UINT64(p_fetch_addr, EHCIState),\n> > +        VMSTATE_END_OF_LIST()\n> > +    }\n> > +};\n> > +\nWill remove\n\n> >  const VMStateDescription vmstate_ehci = {\n> >      .name        = \"ehci-core\",\n> > -    .version_id  = 3,\n> > +    .version_id  = 2,\n> >      .minimum_version_id  = 1,\n> >      .pre_save    = usb_ehci_pre_save,\n> >      .post_load   = usb_ehci_post_load,\n> > @@ -2559,14 +2575,14 @@ const VMStateDescription vmstate_ehci = {\n> >          /* schedule state */\n> >          VMSTATE_UINT32(astate, EHCIState),\n> >          VMSTATE_UINT32(pstate, EHCIState),\n> > -        VMSTATE_UINT32_TEST(a_fetch_addr_pre_v3, EHCIState,\n> > -                            ehci_core_is_before_version_3),\n> > -        VMSTATE_UINT32_TEST(p_fetch_addr_pre_v3, EHCIState,\n> > -                            ehci_core_is_before_version_3),\n> > -        VMSTATE_UINT64_V(a_fetch_addr, EHCIState, 3),\n> > -        VMSTATE_UINT64_V(p_fetch_addr, EHCIState, 3),\n> > +        VMSTATE_UINT32(a_fetch_addr_pre_v3, EHCIState),\n> > +        VMSTATE_UINT32(p_fetch_addr_pre_v3, EHCIState),\n> >          VMSTATE_END_OF_LIST()\n> > -    }\n> > +    },\n> > +    .subsections = (const VMStateDescription * const []) {\n> > +        &vmstate_ehci_fetch_addr_64,\n> \n> IMHO you don't need to make it a subsection, you can use\n> VMSTATE_UINT64_TEST().\n> \nWill add\n\n> Similarly you can also use VMSTATE_UINT32_TEST() to only migrate 32bit\n> versions in old machine types.\n> \nWill add\n\n> With those you can keep them together and add a comment, may look better\n> than subsections where you split them apart, it'll be harder to follow in the\n> future.\n> \n> Thanks,\n> \n> > +        NULL,\n> > +    },\n> >  };\n> >\n> >  void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)\n> \n> --\n> Peter Xu\n\nThanks,\nJamin","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=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=YxjTIjVF;\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=aspeedtech.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 4g1JtB3R9fz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 11:49:22 +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 1wFjBU-0001YC-0u; Wed, 22 Apr 2026 21:48:52 -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 <jamin_lin@aspeedtech.com>)\n id 1wFjBR-0001Us-6n; Wed, 22 Apr 2026 21:48:49 -0400","from mail-japanwestazlp170120003.outbound.protection.outlook.com\n ([2a01:111:f403:c406::3] helo=OS8PR02CU002.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 <jamin_lin@aspeedtech.com>)\n id 1wFjBN-0004bS-Pu; Wed, 22 Apr 2026 21:48:48 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by TY0PR06MB5380.apcprd06.prod.outlook.com (2603:1096:400:217::6)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.21; Thu, 23 Apr\n 2026 01:48:37 +0000","from TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3]) by TYPPR06MB8206.apcprd06.prod.outlook.com\n ([fe80::e659:1ead:77cb:f6d3%3]) with mapi id 15.20.9846.021; Thu, 23 Apr 2026\n 01:48:36 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=rtwe4eJ8H5teQqxunKzZfGsx4BlGtDqfc8XpOOhRf06Goa69YNVqgFcwaILZ1+rjWypH9a89lYEEcjnJTe+dM8tCT/ip1CWJFw5KQkR0j2v3oba1pjo4nZNPlTIXF04vxX1aFRUSl04kLr/kfwPNNrpzM0533l6KYzT1CLwByGeSTxZyti7IRTPkV+CfmvOETMcP5KaRE4lEtqCoCMyo02sa9vj1bcjLjWzKVPyWC+SljNRN7ATxC1GlMYyxvPYELMQXcaEU7Pq7bzJaoUwptOTnucxDbtJTLOXXe4cke4lU8ZoaRhbZyL2cM8nvooQdN2/Se4mD5MT25Nc9V9qZOw==","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=j5QMR2vt/BlxKeia1quco6/p8+2/kyZjElXbdIIoKpk=;\n b=Sl2W4+Gezt9RBvNPiNh/RxMqCA8sgQ5JWXtsLVJoSZ+pPCaaHYZqXKsgKmRCj9+1VmMBLbdHCzraFuBqKDvYqLbx5ksir53wL10fanv7POEAQQxS5Zc/1prnEgvT03QbL677S6DCjFtek+Q9oz8ePcaTRZ2//TWSyNY+KbJ+H70q7HYTJ7G2BvPXAVGsGrZ0zCg6YbTn7r/s+8Y6EFWEuMtbM2dAHu+clpPVkjLL/Ou9PKljc6OTAvpq/KGXVPaqIgEzwRecA0vh2OQPbCfGmLx5HCj8iorMPnmrGUpWF/aG8KGTyi3JyF3qFdGT2yY4y/BHXQuTiRWMCXCFq2lG+g==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=aspeedtech.com; dmarc=pass action=none\n header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=j5QMR2vt/BlxKeia1quco6/p8+2/kyZjElXbdIIoKpk=;\n b=YxjTIjVF4MnyXGTVESF3Fw2cWfAny7YbP36oql9TVqdx2pSbZDAojfwzKtwwI4x7YCDWja1pvLJC97GKCbhZhrTf+uz6o75Jj+uLI+XBSm9rZ3dTAwZ36IveNBgc37scsRWF55vdt2XGsD13Anw4840xQcPQ2z00sRPklLActWZ9J+94wTrfu0YUF7vNQ/Sa90qNRsyS4ffNkVwqWrJQ73KRIzeDlWFJ6oD0x93h/HQo3zos4ilKPQuZ6MKG0WHmHU9HwvXN3zxgKnOnwsABcq+LWDbtWO3POdzPPOzJ4MvwnKuFdxkJ+QTgN3GH+jXloADWg7VXZTf5yyJsd/MOJQ==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"Peter Xu <peterx@redhat.com>","CC":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n  \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>","Subject":"RE: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Topic":"[PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Thread-Index":"\n AQHczUNKKWmZ+R83iUmW5is8kUw4XrXi1YYAgACIrACABBnIQIAAgm+AgALbxRCAAFpEAIAAuN4w","Date":"Thu, 23 Apr 2026 01:48:36 +0000","Message-ID":"\n <TYPPR06MB820607B5BBAD8C8DC0A4D2DFFC2A2@TYPPR06MB8206.apcprd06.prod.outlook.com>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org> <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <aeYrfQuAsEaOpH_O@x1.local>\n <TYPPR06MB82066A191FB2B0AD05F7C295FC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <aejdEO2CXg-QuGcL@x1.local>","In-Reply-To":"<aejdEO2CXg-QuGcL@x1.local>","Accept-Language":"zh-TW, en-US","Content-Language":"zh-TW","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=YxjTIjVF;\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=aspeedtech.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"TYPPR06MB8206:EE_|TY0PR06MB5380:EE_","x-ms-office365-filtering-correlation-id":"27a910ce-d9df-4408-59dc-08dea0da6f85","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|7416014|376014|1800799024|366016|22082099003|18002099003|56012099003|38070700021;","x-microsoft-antispam-message-info":"\n 4LZQMYYwIk/FlSwoLDMWU/bkVGs3xZPHWch7gelQ83WpBVz8/flZjc7UfWY19wnadsEUtjvard71MqEMqH+HqHiUamqsfcyW9ZmWdMYiIuUReolLXu6nopqJXsx1v/gNyicLiW7Xsh1e9Gz7XSxbbSgoqIXV32GOfJwNFqJKzXDJrEeq/X7E2PbWoT4kvKk2Odf3lqXq2DNy1LJeoz/Tti8o5BsySZUp4ozEkboTlwYP129XlevjAknfN1+L7Tc/4wMhniGpfo0v0gZbjbs7zKbQID0su2O6IuRjd2DE8t1EmvzmGJ8VIq8JbYthLqdJi1VREnhpFhXtyjoPJFZu1ZPixPEubwo8jyaEHNv+wWhlybAhHqzDh6tHefQswmvYkXKpJknDAieZr4SWj6iR+/CmppnjUKT3H6viwHSXTbsV8pzDeF3EnHHIGMJCFVMlj4UsSK4n8YeLh64uBYFqpwmJsSu98WvkyL9SqnDLItT8Y19RzT781MCZ7dlfGKrw9jRJIrisUoMoAcB0CqGry/VZ4VdNMzKVV8ai5ziIIy0UuN7Y7+uzRzR9iRmgohce6R+EftW7CZd5wSjXOxm3FEnhAg9vRfa8lfOdaYGJqjJhV8Ra+peg9mKMdrwGe1acODJe5p4pzU3uwWztFUyWpoKLXrRliUcNPVgYl6AOr2tSKQtH3Oke+UhjMy5TV/dCszWtDWDkYbauvlnymA37lTzJ+wqfk+nqRaMCCn58Cx6NMrDXN7xRPFRkLOOtb3Lu","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:zh-tw; SCL:1;\n SRV:; IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(7416014)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003)(38070700021);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?l3inhGZTsrNtqLAXHOY/vptIzwV0?=\n\t=?utf-8?q?bhmHwxEX5x2JUVOXBLN6XRxfQCoJwHwT0WnUqjWEQoGFemNtXhwjLU/8vjURi1mQ8?=\n\t=?utf-8?q?+RUVCwCRvxVcXR8QrLZy0Ooh+WqjvdcFyQdUuFb9SnoNNUl0OcIY1Z9sfOajQEvYa?=\n\t=?utf-8?q?0yT09WORtU31YJYBq+h0Zz3AgP5l/5x7PAB+PViqibN53i5iP5uS+e4GHL5eKTx3c?=\n\t=?utf-8?q?2Rd/a9GM1ldJeiPac0NSvIf9wzk8x1U0tOtJe7svuA27s/mC/gZUs7aXliNUcnCkZ?=\n\t=?utf-8?q?F4lYv8Plb5TM8/ien4RiSh8/PLPbarj6ubVk7+xqoSA874zwzVy+WfZX7UPR8DDDj?=\n\t=?utf-8?q?jfs77V+2NAIqQOuFXpccUWUjY93EmTN9nA3kVrxJnh8knW1YJTqIEsV24RF2Xv8Lj?=\n\t=?utf-8?q?H2pjvswVKFwxB0BVyOLx3Q0SHy6xBJeYjetYC/ifzjefPvK6XWoopKAb8DLEXmE/S?=\n\t=?utf-8?q?l2cBb/ajkZg2cYYsV3nSnMZuPqTza9hBmgrWEa/uuvaME+7P1H7pUtBgtcI8Cj5y+?=\n\t=?utf-8?q?TJUNHSN1jCXb8kaZeJsJis47w7uoWMAWC8h+w/UeGqX6btcxS7t7MIp5wwADcJ8QD?=\n\t=?utf-8?q?p6OybstJarpdxdgWTG0I7IIoy/ETn8qMcD1MSAvz/sSZZgbjHHPemnEOPOJv8SaJ5?=\n\t=?utf-8?q?467igr2LVXMrQcFIsF3D0cPEBN91Tu2T6oZmAJxytsRJ93g4ZhZ69bKm9FkiM1owM?=\n\t=?utf-8?q?TRQ6r+xr/epLPSayIWPgDHUr4tHsbwp5pn3eija4vcNCbtxN9QEjxS9QZdEAX/Wh6?=\n\t=?utf-8?q?kWHilMSJvGrXJ6o/gEMhKttKCzJrYdFOZyaAvfSW8sTfMTjp+XVafTUcxqSDnlMvN?=\n\t=?utf-8?q?GMuCXyVgwo2Fc+mK7ZZ6BPqj+46PFmlSdUku7K7jmhV3v1tE3dwlKsrh2Iy+ma6n7?=\n\t=?utf-8?q?wafbc7JFo+Khx3mIqigdMCKGJd7j7LpimND1j+9UdCBzDLGFG4gsKk4l57L9NBcdT?=\n\t=?utf-8?q?Z/uQDHCa2mLXUKfH+JAks9ZYyyoSa689rC7NnUSgFYCah57PNFOz83IJQwL+AVuZS?=\n\t=?utf-8?q?PepLc9mgT6XhSBOxguaf/FznLTmmMdv49KZU+amY8ocKlZo+34aQgzjIPXZhQNTRG?=\n\t=?utf-8?q?p8XdJQ4BitiIWQiXdJUtGsA72PzD80OQMdvkUzkX1m7czPlBmXYkXJjY+arUHrUc7?=\n\t=?utf-8?q?wBuHE/q/vRl2fqDyNsrV3eigcsmMXxIJEIQ4rCdkf+QVo/szeYIqlIfJPDvbWuqUD?=\n\t=?utf-8?q?fw2EGO6kuJcWL71sl2Px4whT1W6IsSxYLZmcy8DLMehKdJg+1Og8BgwJKCcdhGBSN?=\n\t=?utf-8?q?oep/4h2hGOUs5VXyOmVVnKrZGbkaErdkfaJjbao5vP/84xADViSJUh6YKxqZcIX3B?=\n\t=?utf-8?q?ovixZygyg72r+CDCueMRrfdgGpcrwj7tI505hKNBlVvx6KBnOqCzBPUrWygQSbpUT?=\n\t=?utf-8?q?PIpZpNUyQjmx6tt8mKk0JOgbjCbpvPQIYJn9+2P88j2AyPGJ3DDjoed2xGyfFN16y?=\n\t=?utf-8?q?Z970NbVHDG7hNWt5QITwF6+3TThqpXLU8tMNkCndmC5LwLBlRkomLLEBP315kgn8U?=\n\t=?utf-8?q?L3wq/81niyxondnDtHf8TE0rjORwRDzVmDdzEGgmE7pIn4S1pdH5K0LmpzD2CWSDZ?=\n\t=?utf-8?q?5sUd01cDCzj6+atV81ruaLjX7y69c1z/Ap1TzZFWfG+2uuUzY5VmhbwjaQqZhXbuA?=\n\t=?utf-8?q?BVaEHyg07AO0HGPCzYMi+0pfTyEeFLBg=3D=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n LCeIhV+9mrWG5iJPsat1gXLVVdDcMnsBz/ZRClftGpqvS2WUe18D9+1YyeBkZpsDtxy/Am6XZeogu3hDXvxenuwrqEBmuWiVwCCdPMSZSIF5S8JZwv+z+j9VasfPV20kWpMS0jYAaENrCniQ+qryDZYpowGU9B8FnYtc+YcV4Cb2VB3Gt5JGLgy4jFrbrzMKvV2F0Irx5qTAz/FYfUY8zNYkvsQUeYld+M2aoH65S5hVnaLn5gUUn7OHtij/Wxhwhyn+igrex1dpDUhUIV+Cx2utaMmsq6/EgkASz+BcE0PjvWH9ZRlvRxnp5Y+43h8UEQMcYS8ADynzxs8FPHKWWg==","X-OriginatorOrg":"aspeedtech.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"TYPPR06MB8206.apcprd06.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 27a910ce-d9df-4408-59dc-08dea0da6f85","X-MS-Exchange-CrossTenant-originalarrivaltime":"23 Apr 2026 01:48:36.7231 (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"43d4aa98-e35b-4575-8939-080e90d5a249","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n zTmevCwaTZyBZU4+z6DijbsBJPEpQFyc7t6JZETwSZ86k44Cpda+8Ggj1JNjdVWirWkb3OA4YELNDrPhCcWQyf9NPsedNcU/Y2a88arYXNM=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TY0PR06MB5380","Received-SPF":"pass client-ip=2a01:111:f403:c406::3;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=OS8PR02CU002.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, SPF_HELO_NONE=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"}},{"id":3681553,"web_url":"http://patchwork.ozlabs.org/comment/3681553/","msgid":"<aepCuBHa8kl0qT96@x1.local>","list_archive_url":null,"date":"2026-04-23T16:03:04","subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","submitter":{"id":67717,"url":"http://patchwork.ozlabs.org/api/people/67717/","name":"Peter Xu","email":"peterx@redhat.com"},"content":"On Thu, Apr 23, 2026 at 01:48:36AM +0000, Jamin Lin wrote:\n> It seems that we need to use the device type name here.\n\nHeh, yeah, you should be right.","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=hH0mnndd;\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=MkvXnT3U;\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 4g1grr5mctz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 02:04:27 +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 1wFwWy-0002MA-S6; Thu, 23 Apr 2026 12:03:56 -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 <peterx@redhat.com>) id 1wFwWN-00026A-Sr\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 12:03:29 -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 <peterx@redhat.com>) id 1wFwWG-00074l-TX\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 12:03:17 -0400","from mail-qk1-f198.google.com (mail-qk1-f198.google.com\n [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-655-71kO8YcePmyfMO-PoFMNxw-1; Thu, 23 Apr 2026 12:03:08 -0400","by mail-qk1-f198.google.com with SMTP id\n af79cd13be357-8eb04352924so900303085a.1\n for <qemu-devel@nongnu.org>; Thu, 23 Apr 2026 09:03:08 -0700 (PDT)","from x1.local ([142.189.10.167]) by smtp.gmail.com with ESMTPSA id\n af79cd13be357-8ef47be2d91sm612562585a.12.2026.04.23.09.03.06\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 23 Apr 2026 09:03:07 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776960190;\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 in-reply-to:in-reply-to:references:references;\n bh=4+jjOKI3lM3aGymycKN4JAGzsgHGzIKbItTOkEQ6LxU=;\n b=hH0mnnddFB3nAuCz+NiyEzslka505keSQNBDKtu5KpokFfx/B1OKp5S++kLP6XEx9TM1/J\n 1eMfKyuL/5KqPQXqlt6SlvfvNeYlJZM5Xu86eNiKCDZi8l+I9TjRboRwAuMboJliUpPSmf\n tyJRPvxRQqIuGfB0+zFtzzyuCJ32OzE=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1776960188; x=1777564988; darn=nongnu.org;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;\n bh=4+jjOKI3lM3aGymycKN4JAGzsgHGzIKbItTOkEQ6LxU=;\n b=MkvXnT3UDXPv5E0CTauMdaMwDQCGTSA22NpOIade55P0u4Aw0+BiBCk9/c7l5yKPYO\n Or28TGnHMT8eZQDwTkd7cwNsTVttBq2ZkpUqL1oxXSIsZmh4xuxzSJApNoGF+gk97qYF\n DQY8UvmizeaU9NqPnqXXjiAxATQxmlLTiLm+W8/ZtOYMTpVFDLUht87tb3UMD38y/gHc\n 7+Zs3VzJNSEupn8VGhISmQEyEyFos9H6B4icmHk2ZNAZcNbr8U4wcN76LHOOjRSC6Qyd\n VjLYdQFBz9MWPFwaIZi6O+yoXLPvraQ88AkLfKzcz/QE1b7QsAUFb4cWl0YiLmdzTW3L\n tQ1g=="],"X-MC-Unique":"71kO8YcePmyfMO-PoFMNxw-1","X-Mimecast-MFC-AGG-ID":"71kO8YcePmyfMO-PoFMNxw_1776960188","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776960188; x=1777564988;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=4+jjOKI3lM3aGymycKN4JAGzsgHGzIKbItTOkEQ6LxU=;\n b=m76bPQLuhp3FzPB+FLQgmhwy8LBJgDQcBVfJ27c8q3wb+Evn22R1pCOFl1JMm/ztxo\n E2PUUdYSDpvuj6sEIKcoXP6Hga3x2Nvsd+WBv30bRte8np7Iu8Fj6zqhaIW386avGL29\n HG1DyVEaxrLN/Un90XfYZzNvTKwHx9uN7rS/Og/uLii74n82vVdz/xTfABDMfbqVz2ZR\n 0wBNZst3iI+O9Jq5NB0lmQ7pm1AnxkRt4F2rGVBiHRK4sq+P6hUSldr7Q/D3hVvIUyn+\n 3COEH6pUC6jgKh9GxB6Y+/HKiDJYAL61knToN91FqX7dlXrqW8cg6Di+OqBo6mlNCyS8\n reyw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ8UlWnbaL5kBGujwZ2oNqtaAFTlr5G7/XBswDs60n3G++eI5XIsUFhdZm5KonMy62Ekcc8Kk1W+M72u@nongnu.org","X-Gm-Message-State":"AOJu0YybphEWS2lu9wb7J+InisDQdS6xy6c9tOSp0j+F1fk5xw1a21sV\n WASHYk9Pi4umBVihNXJdf1oCEivJoPTl6Xkb2q/O2Vvx+sXeT3O56gOGxsDo3/PQx1uBLHGjpNH\n p0AOyiC+B70YfSIVFD/t6+KgW9zP/rnKsRCKCUG9XOJyqIajd9edmtYjI","X-Gm-Gg":"AeBDies7n6D0U4gY4kcdyzerqS+dEHVaWo6kLkIlekAH96t8cte+mgqnYXaA22XnAn7\n vs1ymIDcHxqaGNrx/GPv6FJ/ryQskyWvlv+maomrSFiSIgvzUj1lP4MYemorIxAGQ3pG8BI24W7\n 8EoeFHRWTQc+8v8Cst25wpnpa6dox/yes2WnT49OdHCD7OhVN37NrowXxUjIRNULUYpZ5OSgwmC\n z2qFlIKCN+ykmWrpp/wcJy87Ix1Z2FzeGz4ViPzv8Kc26fkYIpEDIAtd2MfyVLcZMHiuvNK9CFV\n H0c4cPjMIuoZCP5PvjHAvQ6BeRT/fy2ffV6/zI0WGdHQ93aiDfGuKBh22+SI8GaCLj3Cgto+A6t\n 9o5zCNmO1VpmOP2W8y39a5ACBURsIJuzDaVU5DkRMU/xz50PIffq9rV23Lg==","X-Received":["by 2002:a05:620a:4455:b0:8ea:addd:8954 with SMTP id\n af79cd13be357-8eaaddd8df1mr2638346785a.24.1776960188156;\n Thu, 23 Apr 2026 09:03:08 -0700 (PDT)","by 2002:a05:620a:4455:b0:8ea:addd:8954 with SMTP id\n af79cd13be357-8eaaddd8df1mr2638338685a.24.1776960187476;\n Thu, 23 Apr 2026 09:03:07 -0700 (PDT)"],"Date":"Thu, 23 Apr 2026 12:03:04 -0400","From":"Peter Xu <peterx@redhat.com>","To":"Jamin Lin <jamin_lin@aspeedtech.com>","Cc":"=?utf-8?q?C=C3=A9dric?= Le Goater <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n \"open list:ASPEED BMCs\" <qemu-arm@nongnu.org>,\n \"open list:All patches CC here\" <qemu-devel@nongnu.org>,\n Troy Lee <troy_lee@aspeedtech.com>, \"flwu@google.com\" <flwu@google.com>,\n \"nabihestefan@google.com\" <nabihestefan@google.com>,\n Fabiano Rosas <farosas@suse.de>","Subject":"Re: [PATCH v3 06/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit","Message-ID":"<aepCuBHa8kl0qT96@x1.local>","References":"<20260416014928.1279360-1-jamin_lin@aspeedtech.com>\n <20260416014928.1279360-7-jamin_lin@aspeedtech.com>\n <3ee36a34-573e-48aa-91e3-9140244717f0@kaod.org>\n <aeJNdLTRSZQiEiP_@x1.local>\n <TYPPR06MB8206C244CD249505E6B543F8FC2F2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <aeYrfQuAsEaOpH_O@x1.local>\n <TYPPR06MB82066A191FB2B0AD05F7C295FC2D2@TYPPR06MB8206.apcprd06.prod.outlook.com>\n <aejdEO2CXg-QuGcL@x1.local>\n <TYPPR06MB820607B5BBAD8C8DC0A4D2DFFC2A2@TYPPR06MB8206.apcprd06.prod.outlook.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"\n <TYPPR06MB820607B5BBAD8C8DC0A4D2DFFC2A2@TYPPR06MB8206.apcprd06.prod.outlook.com>","Received-SPF":"pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\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 SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=unavailable 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"}}]