[{"id":3681398,"web_url":"http://patchwork.ozlabs.org/comment/3681398/","msgid":"<5666c107-0033-4f67-9fcb-dd404886252b@kaod.org>","list_archive_url":null,"date":"2026-04-23T11:45:17","subject":"Re: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","submitter":{"id":68548,"url":"http://patchwork.ozlabs.org/api/people/68548/","name":"Cédric Le Goater","email":"clg@kaod.org"},"content":"Hello Jamin,\n\nOn 4/23/26 07:18, 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> To preserve backward migration compatibility, keep the legacy 32-bit\n> fetch address fields (a_fetch_addr_32, p_fetch_addr_32) alongside the\n> new 64-bit fields.\n> \n> Migration format is selected using a machine compat property\n> \"x-migrate-fetch-addr-64bit\":\n> \n> - Old machine types migrate 32-bit fetch addresses\n> - New machine types migrate full 64-bit fetch addresses\n> \n> This is implemented using VMSTATE_UINT32_TEST() and\n> VMSTATE_UINT64_TEST() so that only the appropriate format is migrated.\n> \n> In pre_save, the 32-bit shadow fields are populated when migrating\n> to old machine types. In post_load, the 32-bit values are restored\n> into the 64-bit fields when loading old migration streams.\n> \n> No functional change.\n> \n> Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\n> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n\nThis patch was reworked significantly to handle migration and I don't\nthink Philippe's Reviewed-by stands anymore.\n\nCould you please explain how you tested ? QEMU command lines, which\nOS, etc. ?\n\nThanks,\n\nC.\n\n> ---\n>   hw/usb/hcd-ehci.h   | 17 +++++++----\n>   hw/core/machine.c   |  2 ++\n>   hw/usb/hcd-ehci.c   | 72 ++++++++++++++++++++++++++++++++-------------\n>   hw/usb/trace-events | 24 +++++++--------\n>   4 files changed, 76 insertions(+), 39 deletions(-)\n> \n> diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\n> index d038ee1e31..3acbddfc5c 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> @@ -256,6 +256,7 @@ struct EHCIState {\n>   \n>       /* properties */\n>       uint32_t maxframes;\n> +    bool migrate_fetch_addr_64bit;\n>   \n>       /*\n>        *  EHCI spec version 1.0 Section 2.3\n> @@ -294,8 +295,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_32;\n> +    uint32_t p_fetch_addr_32;\n> +    uint64_t a_fetch_addr;\n> +    uint64_t p_fetch_addr;\n>   \n>       USBPacket ipacket;\n>       QEMUSGList isgl;\n> @@ -308,7 +311,9 @@ struct EHCIState {\n>   };\n>   \n>   #define DEFINE_EHCI_COMMON_PROPERTIES(_state) \\\n> -    DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128)\n> +    DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128), \\\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>   \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>   };\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 28a60e4c1a..0c8bdb48ad 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> @@ -1611,7 +1612,7 @@ static int ehci_state_fetchentry(EHCIState *ehci, int async)\n>       default:\n>           /* TODO: handle FSTN type */\n>           qemu_log_mask(LOG_GUEST_ERROR,\n> -                      \"FETCHENTRY: entry at 0x%x is of type %u \"\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> @@ -1623,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> @@ -1712,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> @@ -1738,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> @@ -1802,7 +1803,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> @@ -1885,7 +1886,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> @@ -2008,7 +2009,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> @@ -2414,6 +2416,18 @@ static USBBusOps ehci_bus_ops_standalone = {\n>       .wakeup_endpoint = ehci_wakeup_endpoint,\n>   };\n>   \n> +static bool ehci_fetch_addr_64_needed(void *opaque, int version_id)\n> +{\n> +    EHCIState *s = opaque;\n> +\n> +    return s->migrate_fetch_addr_64bit;\n> +}\n> +\n> +static bool ehci_fetch_addr_32_needed(void *opaque, int version_id)\n> +{\n> +    return !ehci_fetch_addr_64_needed(opaque, version_id);\n> +}\n> +\n>   static int usb_ehci_pre_save(void *opaque)\n>   {\n>       EHCIState *ehci = opaque;\n> @@ -2424,6 +2438,11 @@ 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> +    if (!ehci->migrate_fetch_addr_64bit) {\n> +        ehci->a_fetch_addr_32 = ehci->a_fetch_addr;\n> +        ehci->p_fetch_addr_32 = ehci->p_fetch_addr;\n> +    }\n> +\n>       return 0;\n>   }\n>   \n> @@ -2444,6 +2463,11 @@ static int usb_ehci_post_load(void *opaque, int version_id)\n>           }\n>       }\n>   \n> +    if (!s->migrate_fetch_addr_64bit) {\n> +        s->a_fetch_addr = s->a_fetch_addr_32;\n> +        s->p_fetch_addr = s->p_fetch_addr_32;\n> +    }\n> +\n>       return 0;\n>   }\n>   \n> @@ -2504,8 +2528,14 @@ 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_32, EHCIState,\n> +                            ehci_fetch_addr_32_needed),\n> +        VMSTATE_UINT32_TEST(p_fetch_addr_32, EHCIState,\n> +                            ehci_fetch_addr_32_needed),\n> +        VMSTATE_UINT64_TEST(a_fetch_addr, EHCIState,\n> +                            ehci_fetch_addr_64_needed),\n> +        VMSTATE_UINT64_TEST(p_fetch_addr, EHCIState,\n> +                            ehci_fetch_addr_64_needed),\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=GzEgsBEN;\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-103G0055f68832e-19e0-4ba8-a30d-dff1762825e8,\n C846149266E0C9F4D826987B86006927C6E58490) 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 4g1Z7r2MXLz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 21:47:04 +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 1wFsVB-0007Cf-ED; Thu, 23 Apr 2026 07:45:49 -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 1wFsUt-0006qQ-7I\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 07:45:40 -0400","from smtpout4.mo533.mail-out.ovh.net ([46.105.32.238])\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 1wFsUn-0006RW-NN\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 07:45:30 -0400","from director2.derp.mail-out.ovh.net\n (director2.derp.mail-out.ovh.net [79.137.60.36])\n by mo533.mail-out.ovh.net (Postfix) with ESMTPS id 4g1Z5r3B9cz60PL;\n Thu, 23 Apr 2026 11:45:20 +0000 (UTC)","from director2.derp.mail-out.ovh.net\n (director2.derp.mail-out.ovh.net. [127.0.0.1])\n by director2.derp.mail-out.ovh.net (inspect_sender_mail_agent) with SMTP\n for <jamin_lin@aspeedtech.com>; Thu, 23 Apr 2026 11:45:20 +0000 (UTC)","from mta7.priv.ovhmail-u2.ea.mail.ovh.net (unknown [10.110.43.171])\n by director2.derp.mail-out.ovh.net (Postfix) with ESMTPS id\n 4g1Z5r23NSz1xpG; Thu, 23 Apr 2026 11:45:20 +0000 (UTC)","from kaod.org (unknown [10.1.6.6])\n (Authenticated sender: clg@kaod.org)\n by mta7.priv.ovhmail-u2.ea.mail.ovh.net (Postfix) with ESMTPSA id\n 3DDDE203AAD;\n Thu, 23 Apr 2026 11:45:18 +0000 (UTC)"],"X-OVh-ClientIp":"82.64.250.170","Message-ID":"<5666c107-0033-4f67-9fcb-dd404886252b@kaod.org>","Date":"Thu, 23 Apr 2026 13:45:17 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","To":"Jamin Lin <jamin_lin@aspeedtech.com>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n \"peterx@redhat.com\" <peterx@redhat.com>,\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 Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>,\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 \"farosas@suse.de\" <farosas@suse.de>","References":"<20260423051804.362095-1-jamin_lin@aspeedtech.com>\n <20260423051804.362095-9-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":"<20260423051804.362095-9-jamin_lin@aspeedtech.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","x-ovh-tracer-id":"454863565005696045","X-VR-SPAMSTATE":"OK","X-VR-SPAMSCORE":"-100","X-VR-SPAMCAUSE":"\n dmFkZTFmpTyLFUu30wZgBgUtilxbLUkxRWkYiiC4FZxkIFGVsbPNw5D2au/ttmW+VFv3NnFwleZrZcD2z6ho0k3K6lvQygLHsYZXeUbBM2gvoBeSSaNYOLhFTuOgY/dLNahuqhQYnEuidJ2nPPdXwOYIUyt1XcJdRvuY+esVWJzyhnYAJNnPm+kK/4a1r5qEdzF6dEImIGp9LFBQDHfsDH2sZfO+KkxwJfgigR70OqyzxBrYaHWQFaKAcVNVCeDXwKHoFHUDdynQeoi4SmcVL5I9afw5AWUMH6jfF3WNMoVtPAl/uJTPPNMiUAlaXs95oZFnsNaoEtjP4LH7qLq7PM6jXIKtcTseWVq2+jxuIEF6Qe9YQ9w3dLr75CPFMKhWj8JrtibaUaqpMC1cwG/ety/nJe5owIPcTxsP8eG8AmdW4MdjiN6kFy/K0ARxMK6GIP1Z0HWeFg7CAT25A8RNCBzKFi6eDsPgpLASkntC1MxIGPOeevracZz1GzW0Mq2LVcAtFmu3rxwGlYmjzMOid4aFztp3ayr62+T1uCWAAw+cD0+q0MwTaEwmlL15md2n0+sDCEg+QqKvZddDByN+fOEmA73UCEarWM8srXBsob3LeRVcjRDH9ef6yDHgwY3fRopI97mg0ZFJbxmQ9QR/XT69R6vgMOgaXoLuWnK73ZkeW68l6w","DKIM-Signature":"a=rsa-sha256; bh=Z9tTDuLToTw94v4qvsbX5pK6orQ0S1qWG9sICqQ7CFo=;\n c=relaxed/relaxed; d=kaod.org; h=From; s=ovhmo393970-selector1;\n t=1776944721; v=1;\n b=GzEgsBEN+VQMM1E3rzYJkAv721JBpfA++tHSHpOlwLEuZ5GxnbovOWlL3ep2cHZyiy3PmYYN\n ITCb7Vd8Vbpo/eJGeqgL88KU9TissY+S4uPmf4stOmIUiWGFq5bUqqWNL8oI4cPtu59i2nDGk+k\n gG92TBuvCQcgm51+gmDtM9Di21B4+pERWyz9e2nW7Mu/hbbUwOugHEC91XDehSOJr/AxV+SOVB3\n 3lzzxp2O8qV7QN48PZiUxBjIatu+UIZHztWPomZzA2uxpq/eH3aDvT+Nk0pEIzKELKwTkXTFJgf\n juR46q+O/9ewDip3MJXCaO6N75XN7LSNkvZhWuzww5FiQ==","Received-SPF":"pass client-ip=46.105.32.238; envelope-from=clg@kaod.org;\n helo=smtpout4.mo533.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 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":3681556,"web_url":"http://patchwork.ozlabs.org/comment/3681556/","msgid":"<aepDtUYjYfag6TeC@x1.local>","list_archive_url":null,"date":"2026-04-23T16:07:17","subject":"Re: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","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 05:18:15AM +0000, Jamin Lin wrote:\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>  };\n\nSorry I forgot to comment here previously: we just released 11.0, I think\nit means you want hw_compat_11_0[] now, otherwise someone using 11.0.0\nreleased binary may hit issues migrating to some newer binaries before 11.1.","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=NigN/Nb4;\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=ii67jrV7;\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 4g1gxJ2wq7z1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 02:08:20 +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 1wFwaj-0004fL-S9; Thu, 23 Apr 2026 12:07:51 -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 1wFwaW-0004dm-Io\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 12:07:38 -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 1wFwaM-00012N-Ag\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 12:07:34 -0400","from mail-qv1-f69.google.com (mail-qv1-f69.google.com\n [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-192-Awoyn8BuNUSjhgqquWWnbQ-1; Thu, 23 Apr 2026 12:07:21 -0400","by mail-qv1-f69.google.com with SMTP id\n 6a1803df08f44-8aca6420fe3so100761616d6.0\n for <qemu-devel@nongnu.org>; Thu, 23 Apr 2026 09:07:21 -0700 (PDT)","from x1.local ([142.189.10.167]) by smtp.gmail.com with ESMTPSA id\n 6a1803df08f44-8b02ae5ec2dsm167327096d6.29.2026.04.23.09.07.18\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 23 Apr 2026 09:07:19 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776960442;\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=QiK8IP/k+DnDYnRKizravr/pRsAQbIxHBJ6gwM6XuqU=;\n b=NigN/Nb47Mj9akBHyjJSYVxM8v20aTpWmiumD0MLQWDZjPiv65kt4opdUsIrQdpcAC9dad\n I++b2yL6FTNYKDlJ39XnE4yJxkM6QaMRN3xMfIW4exStT2/NrvDzC3rDgVdx7mBhDZRYFG\n 8eODsR3kK/G3muWYCzLTEC/ETVXqtgY=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1776960441; x=1777565241; 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=QiK8IP/k+DnDYnRKizravr/pRsAQbIxHBJ6gwM6XuqU=;\n b=ii67jrV7U5jfkLyzieJryOSNasB01BLrNCvUnQf2zGYdPpiTrn+JBt7JcdAxOWVXdU\n CqZYIEscryH/1NgxiwEtQ95yrDGEy8zpLgp6tqZ+7r4Gsk/59XBNfG3vwom1P+R96Ee8\n GeLhWnRXmKvcOXSSj92Z3CWOmy1pvFB+ciSnx406RBa75LmHTuDYZM15MWFr6Jglizvo\n /sKn5TUxKyAFVc2HEtFiMosgBkAxVr8v9+/zc8zommOKjwW5DThT4LR/UDaNU+YEIb10\n 198saLTEiI186BQVcKBpftY/vMJsjCYmUGHIk1hIWiI0KRKFylp/eqjNRXi8sCYpuzrA\n OUcg=="],"X-MC-Unique":"Awoyn8BuNUSjhgqquWWnbQ-1","X-Mimecast-MFC-AGG-ID":"Awoyn8BuNUSjhgqquWWnbQ_1776960441","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776960441; x=1777565241;\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=QiK8IP/k+DnDYnRKizravr/pRsAQbIxHBJ6gwM6XuqU=;\n b=T2BNikz2HgRDd8lQQSJ8jWx1q+j5oIOd3gOmVB4YPQ5upxcJTncdbEeZibjPy9hnbI\n llFIdQTh3e0FGOqQYyTfdwA+6ggzCfKET1speGgP/tysQnOD4VqWgqvnJlW3OFVfhy7m\n /euTifQVPRu9ajP6kE4NRyIBPN+4V7mR04gyrGkejwV6wsjLHGucr5l8ZrHdaPDbhzY9\n rVAiToHsMQAv7U93GNNggWzNo1VHtrRyLE98mtmbJCmmry4vJ0Px8ZRc9RYkyZRApkuv\n keqkvdn+qvvu98N4rCWG4rC2w6xxd6kYQ3yGJ5JUHZBvHiKW74VCWTneAEbX1Vs8BVXZ\n c3Pg==","X-Forwarded-Encrypted":"i=1;\n AFNElJ9G+TDVe7KAJTxQ96SsHRw6SbMhK5tQaRTVU08955W4lK/277SK+1gdOrdtTx2cwtlzyvfD911uRaTU@nongnu.org","X-Gm-Message-State":"AOJu0Yw2fIcKFl09gxPojveJnLU+57TAaF+cfn8nqygoXd5WpRa9B+4w\n 8BmBJdAxK72OAssO0GCO3S1jslxRJtB2pE0LZOI/ZS0CbLEWQpFxVvGabVUBwf1Naa6NQiAztyA\n jhOXv+904W7XHTkwLrDvGaEa10hIyErmQ199/WlUyuMKan1lgaoYaZads","X-Gm-Gg":"AeBDieujDySYqjJ1an5TIYrO3zSJ9L65q3ZITpJhHZllt00cITysTnDZFqe+tBpY0OA\n mCgInMxx/UwDfEBsPb1OxmdIIWs3zFwQZAlsjPJsSOAgNUhWAkibvj9YJdI11ROBCcdqZvtk0zS\n tkEnuhzDWAdeI3PnTTJjMU9VOSLPnIxTMPSfLM1VPeGstcdpDm91JdngOyn/POb1WNi99KqdxhM\n NthrF1qmMQ2s7X/ToE4s8v0ELejKSaAhIh/IhaoQqT1piL97JU/wwWjjnPMO97p0v79IsVyUy51\n pNeWNdLjxPmCElyWlK/AgGjTb0KblNSh2Szp+lVhDENOGKJS5XZ7jWwPTBV6rwcZNZyTyW9gB1D\n 6HLgQFSq9O2oKft2a4vZbz7WhTuo4cq7O5fzLn+VIjSMF4gwiIy5+TZlGWA==","X-Received":["by 2002:ad4:5765:0:b0:8b0:2b9e:9639 with SMTP id\n 6a1803df08f44-8b02b9e9e6dmr428012396d6.19.1776960440644;\n Thu, 23 Apr 2026 09:07:20 -0700 (PDT)","by 2002:ad4:5765:0:b0:8b0:2b9e:9639 with SMTP id\n 6a1803df08f44-8b02b9e9e6dmr428011796d6.19.1776960440100;\n Thu, 23 Apr 2026 09:07:20 -0700 (PDT)"],"Date":"Thu, 23 Apr 2026 12:07:17 -0400","From":"Peter Xu <peterx@redhat.com>","To":"Jamin Lin <jamin_lin@aspeedtech.com>","Cc":"\"philmd@linaro.org\" <philmd@linaro.org>,\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 Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>,\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 \"farosas@suse.de\" <farosas@suse.de>","Subject":"Re: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","Message-ID":"<aepDtUYjYfag6TeC@x1.local>","References":"<20260423051804.362095-1-jamin_lin@aspeedtech.com>\n <20260423051804.362095-9-jamin_lin@aspeedtech.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20260423051804.362095-9-jamin_lin@aspeedtech.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=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":3681766,"web_url":"http://patchwork.ozlabs.org/comment/3681766/","msgid":"<TYPPR06MB8206A52949493F5BBCA5CF73FC2B2@TYPPR06MB8206.apcprd06.prod.outlook.com>","list_archive_url":null,"date":"2026-04-24T03:53:32","subject":"RE: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","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 v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> 64-bit with migration compatibility\n> \n> Hello Jamin,\n> \n> On 4/23/26 07:18, 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 addresses\n> > exceed 32-bit space. The previous mask (0xffffffe0) implicitly\n> > 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 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> > To preserve backward migration compatibility, keep the legacy 32-bit\n> > fetch address fields (a_fetch_addr_32, p_fetch_addr_32) alongside the\n> > new 64-bit fields.\n> >\n> > Migration format is selected using a machine compat property\n> > \"x-migrate-fetch-addr-64bit\":\n> >\n> > - Old machine types migrate 32-bit fetch addresses\n> > - New machine types migrate full 64-bit fetch addresses\n> >\n> > This is implemented using VMSTATE_UINT32_TEST() and\n> > VMSTATE_UINT64_TEST() so that only the appropriate format is migrated.\n> >\n> > In pre_save, the 32-bit shadow fields are populated when migrating to\n> > old machine types. In post_load, the 32-bit values are restored into\n> > the 64-bit fields when loading old migration streams.\n> >\n> > No functional change.\n> >\n> > Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\n> > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n> \n> This patch was reworked significantly to handle migration and I don't think\n> Philippe's Reviewed-by stands anymore.\n> \n> Could you please explain how you tested ? QEMU command lines, which OS,\n> etc. ?\n> \n\nThe following are my test commands. I used the pc-q35-10.2 machine with the ubuntu-24.04-server-cloudimg-amd64 image.\n\nA. 10.2 forward to 11.0 + my patch\n\n1. QEMU version 10.2\n./build-10.2/qemu-system-x86_64 -M pc-q35-10.2 -m 2G -serial mon:stdio -nographic \\\n    -drive file=ubuntu-24.04-server-cloudimg-amd64.img,format=qcow2 \\\n    -drive file=user-data.img,format=raw \\\n    -device usb-ehci,id=myehci0 \\\n    -drive id=usbdisk,if=none,file=image0.ext4,format=raw \\\n    -device usb-storage,bus=myehci0.0,id=mystorage,drive=usbdisk\n\n(qemu) migrate tcp:127.0.0.1:4444\n \n2. QEMU version 11.0 with my patches\n\n./build/qemu-system-x86_64 -M pc-q35-10.2 -m 2G -serial mon:stdio -nographic \\\n    -drive file=../qemu-migration-test/ubuntu-24.04-server-cloudimg-amd64.img,format=qcow2 \\\n    -drive file=../qemu-migration-test/user-data.img,format=raw \\\n    -device usb-ehci,id=myehci0 \\\n    -drive id=usbdisk,if=none,file=../qemu-migration-test/image0.ext4,format=raw \\\n    -device usb-storage,bus=myehci0.0,id=mystorage,drive=usbdisk \\\n    -incoming tcp:0:4444\n\nRun step 2 first. Then run step 1 and enter monitor mode to issue:\n(qemu) migrate tcp:127.0.0.1:4444\n\nA. 11.0 + my patch backward to 10.2\n\n1. QEMU version 10.2\n./build-10.2/qemu-system-x86_64 -M pc-q35-10.2 -m 2G -serial mon:stdio -nographic \\\n    -drive file=ubuntu-24.04-server-cloudimg-amd64.img,format=qcow2 \\\n    -drive file=user-data.img,format=raw \\\n    -device usb-ehci,id=myehci0 \\\n    -drive id=usbdisk,if=none,file=image0.ext4,format=raw \\\n    -device usb-storage,bus=myehci0.0,id=mystorage,drive=usbdisk \\\n    -incoming tcp:0:4444\n\n2. QEMU version 11.0 with my patches\n\n./build/qemu-system-x86_64 -M pc-q35-10.2 -m 2G -serial mon:stdio -nographic \\\n    -drive file=../qemu-migration-test/ubuntu-24.04-server-cloudimg-amd64.img,format=qcow2 \\\n    -drive file=../qemu-migration-test/user-data.img,format=raw \\\n    -device usb-ehci,id=myehci0 \\\n    -drive id=usbdisk,if=none,file=../qemu-migration-test/image0.ext4,format=raw \\\n    -device usb-storage,bus=myehci0.0,id=mystorage,drive=usbdisk\n(qemu) migrate tcp:127.0.0.1:4444\n\nRun step 1 first. Then run step 2 and enter monitor mode to issue:\n(qemu) migrate tcp:127.0.0.1:4444\n\nThe following logs are shown on the server side:\n\nubuntu login: ubuntu\nPassword:\nWelcome to Ubuntu 24.04.4 LTS (GNU/Linux 6.8.0-106-generic x86_64)\n\nubuntu@ubuntu:~$ lsusb\nBus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub\nBus 001 Device 002: ID 46f4:0001 QEMU QEMU USB HARDDRIVE\nubuntu@ubuntu:~$ lspci\n00:03.0 USB controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 10)\nubuntu@ubuntu:~$ sudo mount /dev/sdc /mnt\nubuntu@ubuntu:~$ sha256sum /mnt/test_read_file\n4bbda032a9c844dd34d2dd8754f67a510b2109734b9e6ac367efb13b6144038f  /mnt/test_read_file\n\nThanks,\nJamin\n\n> Thanks,\n> \n> C.\n> \n> > ---\n> >   hw/usb/hcd-ehci.h   | 17 +++++++----\n> >   hw/core/machine.c   |  2 ++\n> >   hw/usb/hcd-ehci.c   | 72\n> ++++++++++++++++++++++++++++++++-------------\n> >   hw/usb/trace-events | 24 +++++++--------\n> >   4 files changed, 76 insertions(+), 39 deletions(-)\n> >\n> > diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index\n> > d038ee1e31..3acbddfc5c 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> */\n> > -    uint32_t qtdaddr;      /* address QTD read from\n> */\n> > +    uint64_t qtdaddr;      /* address QTD read from\n> */\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> */\n> > -    uint32_t qhaddr;       /* address QH read from\n> */\n> > -    uint32_t qtdaddr;      /* address QTD read from\n> */\n> > +    uint64_t qhaddr;       /* address QH read from\n> */\n> > +    uint64_t qtdaddr;      /* address QTD read from\n> */\n> >       int last_pid;          /* pid of last packet executed          */\n> >       USBDevice *dev;\n> >       QTAILQ_HEAD(, EHCIPacket) packets; @@ -256,6 +256,7 @@ struct\n> > EHCIState {\n> >\n> >       /* properties */\n> >       uint32_t maxframes;\n> > +    bool migrate_fetch_addr_64bit;\n> >\n> >       /*\n> >        *  EHCI spec version 1.0 Section 2.3 @@ -294,8 +295,10 @@\n> > 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_32;\n> > +    uint32_t p_fetch_addr_32;\n> > +    uint64_t a_fetch_addr;\n> > +    uint64_t p_fetch_addr;\n> >\n> >       USBPacket ipacket;\n> >       QEMUSGList isgl;\n> > @@ -308,7 +311,9 @@ struct EHCIState {\n> >   };\n> >\n> >   #define DEFINE_EHCI_COMMON_PROPERTIES(_state) \\\n> > -    DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128)\n> > +    DEFINE_PROP_UINT32(\"maxframes\", _state, ehci.maxframes, 128), \\\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> >\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> >   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> > 28a60e4c1a..0c8bdb48ad 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\n> > addr)\n> > +static void ehci_set_fetch_addr(EHCIState *s, int async, uint64_t\n> > +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\n> 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\n> *s)\n> >   }\n> >\n> >   /* Get an array of dwords from main memory */ -static inline int\n> > 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\n> addr,\n> >   }\n> >\n> >   /* Put an array of dwords in to main memory */ -static inline int\n> > 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,\n> > int async)\n> > +static EHCIQueue *ehci_alloc_queue(EHCIState *ehci, uint64_t addr,\n> > +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\n> char *warn)\n> >       g_free(q);\n> >   }\n> >\n> > -static EHCIQueue *ehci_find_queue_by_qh(EHCIState *ehci, uint32_t\n> > addr,\n> > +static EHCIQueue *ehci_find_queue_by_qh(EHCIState *ehci, uint64_t\n> > +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\n> 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,\n> 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); @@ -1611,7 +1612,7\n> > @@ static int ehci_state_fetchentry(EHCIState *ehci, int async)\n> >       default:\n> >           /* TODO: handle FSTN type */\n> >           qemu_log_mask(LOG_GUEST_ERROR,\n> > -                      \"FETCHENTRY: entry at 0x%x is of type %u \"\n> > +                      \"FETCHENTRY: entry at %\" PRIx64 \"is of type %\"\n> > + PRIu64\n> >                         \"which is not supported yet\\n\",\n> >                         entry, NLPTR_TYPE_GET(entry));\n> >           return -1;\n> > @@ -1623,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> > @@ -1712,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> > @@ -1738,7 +1739,7 @@ static int ehci_state_fetchitd(EHCIState *ehci,\n> > 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> > @@ -1802,7 +1803,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> > @@ -1885,7 +1886,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) { @@ -2008,7 +2009,8 @@\n> > 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 */ @@ -2414,6 +2416,18\n> > @@ static USBBusOps ehci_bus_ops_standalone = {\n> >       .wakeup_endpoint = ehci_wakeup_endpoint,\n> >   };\n> >\n> > +static bool ehci_fetch_addr_64_needed(void *opaque, int version_id) {\n> > +    EHCIState *s = opaque;\n> > +\n> > +    return s->migrate_fetch_addr_64bit; }\n> > +\n> > +static bool ehci_fetch_addr_32_needed(void *opaque, int version_id) {\n> > +    return !ehci_fetch_addr_64_needed(opaque, version_id); }\n> > +\n> >   static int usb_ehci_pre_save(void *opaque)\n> >   {\n> >       EHCIState *ehci = opaque;\n> > @@ -2424,6 +2438,11 @@ 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> > +    if (!ehci->migrate_fetch_addr_64bit) {\n> > +        ehci->a_fetch_addr_32 = ehci->a_fetch_addr;\n> > +        ehci->p_fetch_addr_32 = ehci->p_fetch_addr;\n> > +    }\n> > +\n> >       return 0;\n> >   }\n> >\n> > @@ -2444,6 +2463,11 @@ static int usb_ehci_post_load(void *opaque, int\n> version_id)\n> >           }\n> >       }\n> >\n> > +    if (!s->migrate_fetch_addr_64bit) {\n> > +        s->a_fetch_addr = s->a_fetch_addr_32;\n> > +        s->p_fetch_addr = s->p_fetch_addr_32;\n> > +    }\n> > +\n> >       return 0;\n> >   }\n> >\n> > @@ -2504,8 +2528,14 @@ 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_32, EHCIState,\n> > +                            ehci_fetch_addr_32_needed),\n> > +        VMSTATE_UINT32_TEST(p_fetch_addr_32, EHCIState,\n> > +                            ehci_fetch_addr_32_needed),\n> > +        VMSTATE_UINT64_TEST(a_fetch_addr, EHCIState,\n> > +                            ehci_fetch_addr_64_needed),\n> > +        VMSTATE_UINT64_TEST(p_fetch_addr, EHCIState,\n> > +                            ehci_fetch_addr_64_needed),\n> >           VMSTATE_END_OF_LIST()\n> >       }\n> >   };\n> > diff --git a/hw/usb/trace-events b/hw/usb/trace-events index\n> > 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,\n> uint32_t val) \"wr mmio 0x%04\n> >   usb_ehci_portsc_change(uint32_t addr, uint32_t port, uint32_t new,\n> 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,\n> uint32_t n_qtd, uint32_t a_qtd) \"q %p - QH @ 0x%08x: next 0x%08x qtds\n> 0x%08x,0x%08x,0x%08x\"\n> > -usb_ehci_qh_fields(uint32_t addr, int rl, int mplen, int eps, int ep, int\n> 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\n> %d, h %d, dtc %d, i %d\"\n> > +usb_ehci_qh_ptrs(void *q, uint64_t addr, uint32_t nxt, uint32_t c_qtd,\n> uint32_t n_qtd, uint32_t a_qtd) \"q %p - QH @ 0x%\" PRIx64 \": next 0x%08x qtds\n> 0x%08x,0x%08x,0x%08x\"\n> > +usb_ehci_qh_fields(uint64_t addr, int rl, int mplen, int eps, int ep, int\n> 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%\"\n> 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\n> %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)\n> \"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\n> 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,\n> uint32_t ep, uint32_t devaddr) \"ITD @ 0x%08x: next 0x%08x - mplen %d, mult\n> %d, ep %d, dev %d\"\n> > -usb_ehci_sitd(uint32_t addr, uint32_t nxt, uint32_t active) \"ITD @ 0x%08x:\n> next 0x%08x - active %d\"\n> > +usb_ehci_qtd_ptrs(void *q, uint64_t addr, uint32_t nxt, uint32_t altnext) \"q\n> %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)\n> \"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\n> xacterr) \"QTD @ 0x%\" PRIx64 \" - ioc %d, active %d, halt %d, babble %d, xacterr\n> %d\"\n> > +usb_ehci_itd(uint64_t addr, uint32_t nxt, uint32_t mplen, uint32_t mult,\n> uint32_t ep, uint32_t devaddr) \"ITD @ 0x%\" PRIx64 \": next 0x%08x - mplen %d,\n> mult %d, ep %d, dev %d\"\n> > +usb_ehci_sitd(uint64_t addr, uint32_t nxt, uint32_t active) \"SITD @ 0x%\"\n> PRIx64 \": next 0x%08x - active %d\"\n> >   usb_ehci_port_attach(uint32_t port, const char *owner, const char\n> *device) \"attach port #%d, owner %s, device %s\"\n> >   usb_ehci_port_detach(uint32_t port, const char *owner) \"detach port\n> #%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:\n> %s\"\n> > -usb_ehci_packet_submit(uint32_t qhaddr, uint32_t next, uint32_t qtdaddr,\n> int pid, size_t len, int endp, int status, int actual_length) \"qh=0x%x, next=0x%x,\n> 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,\n> int pid, size_t len, int endp, int status, int actual_length) \"qh=0x%\" PRIx64 \",\n> next=0x%x, qtd=0x%\" PRIx64 \", pid=0x%x, len=%zd, endp=0x%x, status=%d,\n> actual_length=%d\"\n> >   usb_ehci_irq(uint32_t level, uint32_t frindex, uint32_t sts, uint32_t mask)\n> \"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\n> qtdaddr, int status, int actual_length) \"qhaddr=0x%x, next=0x%x, qtdaddr=0x%x,\n> status=%d, actual_length=%d\"\n> > -usb_ehci_fetchqh_reclaim_done(uint32_t qhaddr) \"QH 0x%08x H-bit set,\n> reclamation status reset - done processing\"\n> > -usb_ehci_fetchqh_dbg(uint32_t qhaddr, uint32_t h, uint32_t halt, uint32_t\n> active, uint32_t next) \"QH 0x%08x (h 0x%x halt 0x%x active 0x%x) next\n> 0x%08x\"\n> > +usb_ehci_execute_complete(uint64_t qhaddr, uint32_t next, uint64_t\n> qtdaddr, int status, int actual_length) \"qhaddr=0x%\" PRIx64 \", next=0x%x,\n> qtdaddr=0x%\" PRIx64 \", status=%d, actual_length=%d\"\n> > +usb_ehci_fetchqh_reclaim_done(uint64_t qhaddr) \"QH 0x%\" PRIx64 \" H-bit\n> set, reclamation status reset - done processing\"\n> > +usb_ehci_fetchqh_dbg(uint64_t qhaddr, uint32_t h, uint32_t halt, uint32_t\n> active, uint32_t next) \"QH 0x%\" PRIx64 \" (h 0x%x halt 0x%x active 0x%x) next\n> 0x%08x\"\n> >   usb_ehci_periodic_state_advance(uint32_t frame, uint32_t list, uint32_t\n> entry) \"frame=%d, list=0x%x, entry=0x%x\"\n> >   usb_ehci_skipped_uframes(uint64_t skipped_uframes) \"skipped %\"\n> 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=aspeedtech.com header.i=@aspeedtech.com\n header.a=rsa-sha256 header.s=selector1 header.b=TWqnR9lb;\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 4g1zcR5dPcz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 13:54: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 1wG7bx-0000Qx-Rk; Thu, 23 Apr 2026 23:53:49 -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 1wG7bv-0000QO-8Z; Thu, 23 Apr 2026 23:53:47 -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 1wG7bq-0005yJ-83; Thu, 23 Apr 2026 23:53:46 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by TYSPR06MB7136.apcprd06.prod.outlook.com (2603:1096:405:90::12)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.16; Fri, 24 Apr\n 2026 03:53:33 +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; Fri, 24 Apr 2026\n 03:53:32 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=qcUynY4BUZCbvwSssdPyAaf2YCsPynczENWOOT3fLk6DYVCo3QB9hnNKf6z62ejSssLst77UkFaWl4Y0WKBVMW4IiHk1QOwg6DvhdmsUj9NdsIHZp3Ma2zYfxuR5E9MMd0IWYmQhJKUwYnppmazUsCFPRvvum9kVpwX/o7Gi6oh85P8G0Ta/rwn37dXStcQXXH9l49aa0qsq0hwEsUZFre3fSbrh4UkZeII7w+HXu2ZPDqyJ68uY8dvptboqHWiA/LB3DnmBcx2dVEgGhfTQVrZjPUX0jiis8Xm9pSEK3MwEeNdRzLLdow19hfLW4S+BtlCvoMhCrGYMYeRSyBrzHQ==","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=BM3zxQhNRba5ey5weC29qziwDU5/X1pwXBPy0oxaY+U=;\n b=clrP2IK0iPuZ2ieJ+gbaJU/wwfZ83N2wC6x0NzTJeE3fXokFzyjOVtmD6b26Ne+TEguim7T2QxD2pjUk7way9LC7hXY9jh7p6dCwFfbAJOQL+aLQSw4quORhq83642oOjU2G7gHktZca2nX0C/nphkqloe3/NXkyJAg74KjJcRKukhaP/wQvri8jYtc+UjeFnE2f6lEy0teew83jYrS6C7CuS0u4G0gVmlsEHmRweHAOBRz8uOfPdc0ih4YM7RkAA07AbEDllRD3NwquMYKXtEFLDZasCrpA7oIGYTKwMj9vUQPOcLB/jMWlZinfn4gmnEuUG4F1I4DV+bNDr27cQg==","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=BM3zxQhNRba5ey5weC29qziwDU5/X1pwXBPy0oxaY+U=;\n b=TWqnR9lbCHizs/dyknqB1GtrG625VjPU3oKPsd0qUjDc0VYRinDH7+XEvZbis9IKmw5mCBFkY4M4mNfCzPwR0QwH9DC2PO7HLPJIjAtPJhECjUEYfkCLO1SBRUUfprZb2hg2ikdSNtELfcZyuFYhry5WQQWMzfm+zlItbumNjMTs5EXqWpAGhOOZ+42OrHTIh2VONkB6pFz+dSt6di07E/gwAzyQrcRIU74/umi8G+78IZ2QAgjkOlH99G7/0JBWBQEWHsJzDBNKmJIpDJifNBxxM1qj3Jet1UIvfLKAifkqvg0iKgT7C3Br0e1xl38z5knrfXlmPhbY9EVec84kSQ==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>,\n \"philmd@linaro.org\" <philmd@linaro.org>,\n \"peterx@redhat.com\" <peterx@redhat.com>,\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 Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>,\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>, \"farosas@suse.de\"\n <farosas@suse.de>","Subject":"RE: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","Thread-Topic":"[PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","Thread-Index":"AQHc0uCWDRW5scSU9kSZ62gwOB1gJLXsh46AgAEIXYA=","Date":"Fri, 24 Apr 2026 03:53:32 +0000","Message-ID":"\n <TYPPR06MB8206A52949493F5BBCA5CF73FC2B2@TYPPR06MB8206.apcprd06.prod.outlook.com>","References":"<20260423051804.362095-1-jamin_lin@aspeedtech.com>\n <20260423051804.362095-9-jamin_lin@aspeedtech.com>\n <5666c107-0033-4f67-9fcb-dd404886252b@kaod.org>","In-Reply-To":"<5666c107-0033-4f67-9fcb-dd404886252b@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=TWqnR9lb;\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_|TYSPR06MB7136:EE_","x-ms-office365-filtering-correlation-id":"d7847c7c-9d73-460e-1795-08dea1b50df3","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|7416014|376014|366016|1800799024|22082099003|18002099003|56012099003|38070700021|921020;","x-microsoft-antispam-message-info":"\n 4br2PAx/WDJ8dvJ87beUknq3JRePZCgxsoUmO1Xo0+NqHNb8lw/W2A67orGFth30g/acOvy/FtHS2lPkkpfT0KiNyx22KHeoTOs8EkrldnGGpP8fANEPdcJusgWcwZzkzcCXgorEkys9stDHhWu8iXevvKiPE67IL+WzyvJknKbQXSh8PGXc/GHOxH0/Binkt66E+IxpuZQZVBFK5vReupg+b+ljpicJJf1Ki+wrTZHDCVJGwIsaGSjYI3aK21T0W4M5eoJvS+VHGTv4I9AkGgiOxioKtdYKZuVQCTsF2NPrgsWI5RrDOriclcaEReOgQ4oK9wT8ZG7LOj/anSXr5wF2PrfaPrHjQb16XxAGVZ220LhFgKm1hIIYGPROJ7JEg01V5Ax2BNSbkoNOcX1WLNyrPe7QcBMIo4TYLPk+xGdSFoIozimppkVFoOOdC2toVeASYfOA4GFSz2rMSNd2CxTSymTLw5RraNa38tyz0wCokYyQF2u60A6WDU5Ow0Dy5fCRcnCTaspRdbTi2WnU/bCGd3h80VqnwOksvO9vyucLRWg7nO+FePHpU352GxOEYZDD/pgTdECzaUONuSTqro8GJhSAeWbRYQg2zkSNPBR5O5yOIY0/Kpg6lY1T3LXLq2DeJY1VA92kbhoeAa2RBlgwIIt1Mk6Ja41iDgo7F/nhIuFI9VtsVlBWcn4rC6QYm+NuDWPl7enlL6YY4otpStEovUo/S3yUEFuHS+gZk1EJvY51zYO/QQPuKAQhoOI7iiqV4anZ6/ctBgHCTKpMsW763XuJcSQPeim2U34vpaobsv70WrLyWCzpKUgJm6NS","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)(366016)(1800799024)(22082099003)(18002099003)(56012099003)(38070700021)(921020);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?7VdDbdvUkfP+k7vpeoDkiiaPkbZs?=\n\t=?utf-8?q?ScqqtrSP/wPQgVbRHBgjJkd+WtaPwkoT8S/rUw5A9gDo4zFiyM7ewG9pD9/AyfSH7?=\n\t=?utf-8?q?T8XRbXCbCmrXUPHTkqnAwSKDhu8V1JPQqwHZhf6UTKgvXaPlLJIE2Q/NGoyOShf67?=\n\t=?utf-8?q?+4IgqTz3aUgrm96+IIVaCMYNqTlpTQlyyZHN6MBh6tnR8NSlwT2H+ZLK7gUCz0YnW?=\n\t=?utf-8?q?jrM6+hmeW1dc5ZXCnPpo0UWwLo6CkLWVdO/cPpZgZAa7yNNRf21jLpw2vt072GDmr?=\n\t=?utf-8?q?BcgCUgytJh5VVn05GPMU7PDXCgQ8eOhAmEb+0X5jmiZ+S8uAvCUB3FKVvWMGAuNhO?=\n\t=?utf-8?q?o0VkccXyDFNhZw+1m3Z4LQAEV3Wsu3BsHF346P7LBVrdOiALmXmPuztIeqkTYUc3k?=\n\t=?utf-8?q?Oblf8ENCP0T83JjHd42QdMDXovPI6HVS+UbAlBQFiPf48C6u5174JnE+Gv5mcbOeQ?=\n\t=?utf-8?q?7kjjcgKhdCVukuM6deJP7329H2W9ABO2RGRGupkSdqMDmezhfuLENh82Fg+XO7rz5?=\n\t=?utf-8?q?L0tndFj3ekpf4H8YnqkxfMDPk0/gKkKvRJwEDI3JiZgTGyzfyVz0Vmb6DZZzq+o0z?=\n\t=?utf-8?q?uBct43G23ELKQhpcSlcYv1kVc+o5peA8FLIuqByhB/OYLKDBwhJUpv382gYxc+uSd?=\n\t=?utf-8?q?4zMP/7Bk35nGKa/UiD8h6k69lqNjTl3LTjiXYITlwb3mw0sOzgcyCf44ZB/4IHPvO?=\n\t=?utf-8?q?1MnUysAH3Mk/34uzMFlOT+SRENJ4296HG2JPrUPF7F2IwILSOfBcwbJ1tFwzZcSS8?=\n\t=?utf-8?q?92wJNgw/BUdT0AP6EwWTdbGkKGX48zC5TFF8bcbYTMnr1MZY3owfiBErLxJ9mIuJq?=\n\t=?utf-8?q?rqlNbe8MPxIkVwuRFFR5JtISwwJMeEQc2DVnSBNSp+zs9tsO5Cb7DxMmN3ME+lcLd?=\n\t=?utf-8?q?Y+7bhlT4dHAh8GnCyWpSaHLiYmdRuxGvtPEqAxI4glRo52lhOEUbqqKYYhrySZvPX?=\n\t=?utf-8?q?pJbjTmYQgvNtL56TdB4a1LrXKtEpqZOJfearxRP8L9hqdr6V+ryBn/v82O6TfZ7sG?=\n\t=?utf-8?q?8vzBYqiyvb0s1xLFZK0aqyz9RzvE607ce+yrkDSuz5vSGdMFzKMgRfrA/oZ5xPNUX?=\n\t=?utf-8?q?vpHeMSzQG9X5cAicLnax3isEv9cIzRh0dh8AndRVd6GlqrBCLlR2x/P8gnHSFsnvH?=\n\t=?utf-8?q?4cD/4cxLjo1MqK/bmxTg9ZR8XFM1WgViYNTePYZ7k5SDqmE/WvbCuAnCK0lCivv8J?=\n\t=?utf-8?q?owCfCcq30c5OYPf+eSKWdzqX8JbAEQ/24JpN2KwA6OqjiavxjBU89/iiRSUJuCALt?=\n\t=?utf-8?q?6oBdsPQ7GfSZ97GrN6Dm9lhVgg0GJEGPZNq0U91ydlXXcSk1Opdi8vlRFQYzghYGb?=\n\t=?utf-8?q?FbCuefRGJj/QuuIKfnjpudFrdAZOht6oQPhz7J/mGOK3vdZbsiktGvSXdTlyEofZg?=\n\t=?utf-8?q?ZBUD8YommWmJ0gi8f7EVYZ4Y8E8JNywqD5mZipS+U5bf7kYz7O6uxqGCXfhMBSrd+?=\n\t=?utf-8?q?fQYJPWsx720m++T5ojwFw4r+vcn7oH6d1RsnN6HnyhFtf86f5M/l0DP1WXlJE+Yw5?=\n\t=?utf-8?q?MWZxVAxd6DU2/kDSkyNNd9O6DxrwmLIyp9DNdQouTC13EYASJFfnj75UFrs8NSoYK?=\n\t=?utf-8?q?RvsnURQdf6Ubzsvayg8k+TdN3lr+QXlHz4Hpqet7FuCGAL8bUmOJUBSJgzk9ye5nU?=\n\t=?utf-8?q?G3bkh4PFkRxDGB/vB5X41ICjkEWMTJNw=3D=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n EdBId4FYMAqzabGlcF17lV9l2OxjaFNLUk/HtrukoJ0wSyhfdyGTIBa3cyfpM50oD+X9lhU7I7NkkfZzuDEQCCzZdThzGOunjRreLzFb+AXz1ldFXa34ZESIGxGIJS3cZ95fn2+dn9AvionULazHh7T6i6rTQjV3fKWvSHponc3HS9k+WNR8Ltt55HzwbxV1wy77zOOtwUPcKG7dCL6A3hxlwAz2+BWE5Wpy90e6yTUb6gA1Jj6KcKsEBiWgLVxjV6EZqRkA74zoFCepF3BJE2T7etMuc4g/8QoSrbMJeBsYwa2mDK5P0zYU2pFSLho1y36BtlYE8qDisKzz/1mFBQ==","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 d7847c7c-9d73-460e-1795-08dea1b50df3","X-MS-Exchange-CrossTenant-originalarrivaltime":"24 Apr 2026 03:53:32.7879 (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 EpSWsZgj3SXlE1axdoF3i3WSmQUs/Zfdkabanxt7a8xfT94jD2yotbcGS9GhvW4Dg0sxolxtrgwIuTaBORJ0GGsSQ5S+AigjFesXKqs9VCI=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYSPR06MB7136","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":3681776,"web_url":"http://patchwork.ozlabs.org/comment/3681776/","msgid":"<TYPPR06MB8206D2B9E0632433CB9D3C5BFC2B2@TYPPR06MB8206.apcprd06.prod.outlook.com>","list_archive_url":null,"date":"2026-04-24T06:03:38","subject":"RE: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","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 v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n> 64-bit with migration compatibility\n> \n> On Thu, Apr 23, 2026 at 05:18:15AM +0000, Jamin Lin wrote:\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> \n> Sorry I forgot to comment here previously: we just released 11.0, I think it\n> means you want hw_compat_11_0[] now, otherwise someone using 11.0.0\n> released binary may hit issues migrating to some newer binaries before 11.1.\n> \nThanks for the review and suggestion.\nWill do\nJamin\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=nxGH6cO+;\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 4g22VJ6ppRz1yDD\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 16:04:40 +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 1wG9dt-0001Vc-6g; Fri, 24 Apr 2026 02:03:57 -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 1wG9dq-0001UI-Sz; Fri, 24 Apr 2026 02:03:54 -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 1wG9dk-0003K9-R7; Fri, 24 Apr 2026 02:03:54 -0400","from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by SEZPR06MB5829.apcprd06.prod.outlook.com (2603:1096:101:c9::11)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Fri, 24 Apr\n 2026 06:03:38 +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; Fri, 24 Apr 2026\n 06:03:38 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=E+I/Ap57KsggPeHprnzhVuRNNdY6HXFNVtLQiuEoHau7IfX0gp1rIkyY6YVQ6igFNvTfdwV2EyWjKHwgkFdFeFAtQ6Ug2f3fxcx1JdcvdV1pUPodMoVAytn7uonnio3DVv6SVnAp6VgwyobXHCkTXrGChCq/cuTK5egnEIGA5n87YjCnLakR68AlzERgAT00ADIGlwzJcoZza4Nb0MGFfwLEzN78DAxOYJwxPdMJv7Z729WyxY7hFzglCFle177OKebirsE7MYpRBmfurD3VA/YdTdagIMHXPhpks28Stu+IxU6js2QiVhC/crb/aTviq+40I2/nhrlXhPso835oUg==","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=gM2yEi8tDmkwgZzfcD/SoD7Yxp7W8GptoH3e9H0e2cc=;\n b=ZRM9IF73Bel3enDpVVff8Pb/31s0MMaS0aeLGvY6v6ZBN4+c6NSnHBj4reL3JmnEfq/ysNmIJ+3LFQuCli2ZBVA1yDwlhx7//pJT721bEelg9REAMnkeE2VAs5ba4kGuSnKx6jiuR+f82GhAXulaTuzE/8aU+lQR1YIsIBxZoCOdmnw1i3mgpl5R4wFahREiDfolrg9GK2Htpk3DuM9xL4hXUGuQDCEfFrCj3j5KAYs8iVskESG8QrUjhM2gWNny2LAtNer3Ug1BGMo0k5xWpu/YZ70iTFpjhDJND0NBzqIcC4eI0XJjH1/cJNNVcnIEilQnuKyNVL40o6QcNMBy1w==","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=gM2yEi8tDmkwgZzfcD/SoD7Yxp7W8GptoH3e9H0e2cc=;\n b=nxGH6cO+v85au7fdrCAj7QhC158EPuhh22tDH7QkX4QRt4X73pmcp/7T09jBpYvUVxGHxLRd0hq+zKzVeZ2z5lWRmDHcCiqHLnAXLXYkhkkCxEl+bXphazFCcKzHF+q3HLFv8UfLPc4G0eMbRjaPK5yqcz7PuwbVTJnj4wZkEPvgL2RPlZt4XtJ7PljznbeBo5Xo4fcmYv3NAKLsMji02Dv1zEE0/WlrqANs/68VDjK/8c+GEMwnpjOV/Dj/8frK1N8Tlc3JHWs3VF3/gHfRhbec7FlID69iHQI0tW2XCSKI4XkLkFlOAKBuUDtSx+Je0owjd5imDeWD89oGQzDcxw==","From":"Jamin Lin <jamin_lin@aspeedtech.com>","To":"Peter Xu <peterx@redhat.com>","CC":"\"philmd@linaro.org\" <philmd@linaro.org>,\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 Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>,\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 \"farosas@suse.de\" <farosas@suse.de>","Subject":"RE: [PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","Thread-Topic":"[PATCH v4 08/17] hw/usb/hcd-ehci: Change descriptor addresses to\n 64-bit with migration compatibility","Thread-Index":"AQHc0uCWDRW5scSU9kSZ62gwOB1gJLXs0MGAgADpgKA=","Date":"Fri, 24 Apr 2026 06:03:38 +0000","Message-ID":"\n <TYPPR06MB8206D2B9E0632433CB9D3C5BFC2B2@TYPPR06MB8206.apcprd06.prod.outlook.com>","References":"<20260423051804.362095-1-jamin_lin@aspeedtech.com>\n <20260423051804.362095-9-jamin_lin@aspeedtech.com>\n <aepDtUYjYfag6TeC@x1.local>","In-Reply-To":"<aepDtUYjYfag6TeC@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=nxGH6cO+;\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_|SEZPR06MB5829:EE_","x-ms-office365-filtering-correlation-id":"333fb694-7ce8-4b00-2814-08dea1c73a75","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n ARA:13230040|366016|7416014|376014|1800799024|56012099003|22082099003|18002099003|38070700021;","x-microsoft-antispam-message-info":"\n cp0rYDNBnejylr1pAOrd21m1Cu92uf3i5+TLY+PwHLedA/cfnEjQh3S7ETE6B/gJwbDSJSrrazFOJOZBSh7S7CqRk54wlK1iAn0vVLcRwpheQsVTlzKuE7YFQ1aG92kccp6zyzDzAAjbD9yEUR6sl8F9ibC7qcyPkqDZ/fR06xCHcnJYiNfWgoLiIWXGS7HxUeNFkSddh/Yd9WAHVWe1pHJJi+5DGmqJ2nFld4pf/mVrh68lzvPs6l4eyWOQmrxwue50PF8R3Nypq6YnD85oSf12c19MtzECrGXofQxuO2QX8yE50vOXwC7DTaBMZOF1PkepoktXkkyCXDEMbCZ/V/rPH2yy4foKZ6oYRb5DLJ7HlbLY9z0UzfbIz4Uhb++2kQlvl3k8A7TMtcobL2KziF6r1LTEopmrkSv8VB5EOB5Rv+xcWvKudq3zqHcWri+ZMwC6SbpolV+J1H19//UBWpw+XAJgDo1sCP9U/vm29LKgsJItUs1Tw9542yz7wCf2YUEiJAAQbot246dEApOhOOIFAhpgmgtNt03E1DGcOv+xsVJqPU5pFoDKsO5vQl0RFLFDZRyWI84apqJn2I4vIPbjLASQ8XYqL04Gvoec44tAhmNItIa5sKcGxOJzWBnGxtOv+xKN4DUdFYz5VQer/PNictDgUsdI2zJbcgMD4H5a3z1vL8/sEp7oOg+3RsVN1QDTdNlUfjzm4KU4FueEZtJ2QkfD5rGrNLe9KCDPWrxJD4oxSll4KCDZ+PFirvVGeRK7o1Icv7+iBdLs16SJjtY/NMdfqQBwZIZoxFzC9gI=","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)(7416014)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(38070700021);\n DIR:OUT; SFP:1102;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?oruiKK6n2xG0fmq1kzXgoedun84l?=\n\t=?utf-8?q?a3/ZAurnUXFdfb7XZ/JuslD8TQiggiq40iCG29dLbqtJ/s/675EjnxGBxG3GbFG1E?=\n\t=?utf-8?q?YuhKkfxpEbqijlgzd2g5/JtxpkylG7ERBvdVkERe4JMRKa2soBs+viTjVs1Tt0PEr?=\n\t=?utf-8?q?188++ATYazcrG3G5voOXAVQ2+Qh712kOo7nUi/ByAZc6XalusH6gau4cEIgbXlkuq?=\n\t=?utf-8?q?NCS9ysL8nyrC8gYQbIPM93qBLmoc0CSiEHtXX/84gNuzokkusEvLg4+rkqep+fQbf?=\n\t=?utf-8?q?rbA4KeFvNHMHwheKgMwLca8Bhjr2sn0ujW+04f9GFH32v0CaBGJS6kSzYnozqsS9H?=\n\t=?utf-8?q?egZb3024L9p8x/Pf5w5OYGCvJ6JuhegYSB2WVvRYNVm2L97Tw6mJISp/GiBPROEDT?=\n\t=?utf-8?q?6up4/H1zA8fc9h0kYsoeqVLFvdnElnchvt5EoVKVWN1RHhsjoC9cBepCrnaVfJzy4?=\n\t=?utf-8?q?ry+SAnAzF0z9QKLaM/hEC3eF34xB3OslNKmJqFkkoWWe00dyjDkZediUjtsW6uino?=\n\t=?utf-8?q?1lcxz/Z5zi/hXPxQMIS+mOdmOkg7mHqUEmyLlaE//1NICSLCA9Zji+j0/fNTHB98K?=\n\t=?utf-8?q?kG9sEsAaNHX1yjpT/LYp4EPNUDTwgqxmZKDmQjBSkP1lBngp361cnSh8leowkFchh?=\n\t=?utf-8?q?hIc4rRHvNf4foFiImbL62ux2X5lDY3s2SXH3FGOSTgCGi18NXz+WTGuGoOg6sKiTF?=\n\t=?utf-8?q?uacbHke9lkSOSemq0I4E9HS+mq2AXNhXjGDJH4XkddagWPsAPNxJcyiw/VNEXglJN?=\n\t=?utf-8?q?eO2XIacx1dthO4oZanq1//d/Rnv0AAYfl/GPyzrgvkfgW5uQxPVbyL//1DUXWa/oy?=\n\t=?utf-8?q?EZrsX4mMexe20drDAzzKECwxb3d80VJWYKI26VufaqjCX04xETk6YBmkKE9wzkRJt?=\n\t=?utf-8?q?+7wplgaYHW4BwRPotIRjtmygKDMY29EAKoeCBQJ5Lq4EAoDj6WFF012oWXz/KFHBc?=\n\t=?utf-8?q?NTBOHBl4YDK12NlN8wYO9wf/b6Djupu0g1KOHxqLW5PPypIIM9XOC8h4QqtFsroNC?=\n\t=?utf-8?q?eCKHJ7NwIkm5dxBE94OUoLdZgKkGAZg1mEKpyuSQ09uLVYacZT4pd+zQeX0UeHu0T?=\n\t=?utf-8?q?Y1GvUqErgKkX8U7SUXBn1Qt8rTfoWhuwNx3LGK0QpIspitcaIz4wHrJ00TQm30DUL?=\n\t=?utf-8?q?pB56rhYI1G9FS7qRt1A4Q13bL0TEpgohyetU31VFkBmr/6IOAcsodZw0Faj7VX+s4?=\n\t=?utf-8?q?hBy7yuBdOu8tjbA+IngXuKWQxwqJSEOVMd+J/GGUV5iTO2Nh9q3xXILMrIzuj/AZy?=\n\t=?utf-8?q?h6kGx2LsKP5zz+eyFA/JYDXpuKCQGERO5MpWi0lzhc9/TOtRFRMWHMbjsXhcoX4Lk?=\n\t=?utf-8?q?P2BrbMZCSZDyqjlR9G9YNLSHsvN40hm6/7bWMPwdXcZYD3zO4ktvvpxUCOiMQqT7A?=\n\t=?utf-8?q?W3UmUGbAVTKlEMTcCILnGwmH31MugvioDgmV2sTAtwF5L/IvZvMdnso+dz41RdG5Y?=\n\t=?utf-8?q?rl7hjx6Z1YLse1kM3hQngOygkGtY3u4sdE92/1Aa3GYejUB5qg/SYebvkQaxBtR1I?=\n\t=?utf-8?q?WX6YR95DsMUODamxuabMDfGrNsaQnQL6rnizesuG9jAJOmbhY/vs0+7QEfDcrjpSc?=\n\t=?utf-8?q?OcIxKdOMlKhIb2DADk3CMnY6zCypR1q17dAWXou12hUYNz/r0iLUp30mfRzzis1IJ?=\n\t=?utf-8?q?wSTPvmAH7fW4vzZZLV9JNm5zkwCJUqkg=3D=3D?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-Exchange-RoutingPolicyChecked":"\n josT4DFYurntpH27ymJdhyOkC7HEOn8fVMKG9Nty5LEBqdxwcKmTp1QqQ/LBuIWuQ9IokN9PWvshb5gakbjKh/WUPQ+E73vGr6n/ZVmczD6BSdvOhWnjys5u+QYNZD0oyEhms7dQ/BMsPmK0Lc0Sz5wmRBzq4U39yxWZ7igigOiIrWe2jdSRzccuUzd40fw5O1FE9TZS3l7XPCh8f68It845T4iuYVteb9Dme8fPxEwX8tHXVRrdHR1jn2tuSwx/zsvABWY2xY56epLCPycYMshkeA70SfyFY0IPij8vYKBJ2kC9et1yHdk6xVcXCjHnFJ5rzbyA0KpSLRPV1bwgrQ==","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 333fb694-7ce8-4b00-2814-08dea1c73a75","X-MS-Exchange-CrossTenant-originalarrivaltime":"24 Apr 2026 06:03:38.4047 (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 XwkL1lD8M+ZesNSzLdFK9vp14tGyH3HcRcWnc52FAWZ0ObJeTTpdfOwlzP149CYLiUKXCaL+iDE0P4AU62mr73tdgiKQ4/m/M7LG0AuC9Jo=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"SEZPR06MB5829","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"}}]