get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2227039/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2227039,
    "url": "http://patchwork.ozlabs.org/api/patches/2227039/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423051804.362095-7-jamin_lin@aspeedtech.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260423051804.362095-7-jamin_lin@aspeedtech.com>",
    "list_archive_url": null,
    "date": "2026-04-23T05:18:13",
    "name": "[v4,06/17] hw/usb/hcd-ehci: Replace DPRINTF debug logs with trace events",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9b76643968f0cc9912afe985d74fbebfb3fc9f54",
    "submitter": {
        "id": 81768,
        "url": "http://patchwork.ozlabs.org/api/people/81768/?format=api",
        "name": "Jamin Lin",
        "email": "jamin_lin@aspeedtech.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423051804.362095-7-jamin_lin@aspeedtech.com/mbox/",
    "series": [
        {
            "id": 501145,
            "url": "http://patchwork.ozlabs.org/api/series/501145/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501145",
            "date": "2026-04-23T05:18:08",
            "name": "hw/usb/ehci: Add 64-bit descriptor addressing support",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/501145/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2227039/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227039/checks/",
    "tags": {},
    "related": [],
    "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=ahHTQJTL;\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 4g1PYm4z8sz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 15:20:28 +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 1wFmSL-0007Uo-6r; Thu, 23 Apr 2026 01:18:29 -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 1wFmSJ-0007TT-Ex; Thu, 23 Apr 2026 01:18:27 -0400",
            "from mail-japaneastazlp170130007.outbound.protection.outlook.com\n ([2a01:111:f403:c405::7] helo=TYDPR03CU002.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 1wFmSH-0003DU-In; Thu, 23 Apr 2026 01:18:27 -0400",
            "from TYPPR06MB8206.apcprd06.prod.outlook.com (2603:1096:405:383::19)\n by KUXPR06MB8534.apcprd06.prod.outlook.com (2603:1096:d10:9d::22)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.16; Thu, 23 Apr\n 2026 05:18:13 +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 05:18:13 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=s74rHniUq4YVNp7MZ0fTBfkHg0RQtrZNZmR11oGFKC3iZLDlK8oZAMl7yWSCs/APanbwTssNIo4n9zMi9NKriESSyLAPJakDtUaLkVNYIIxjokL11G+prEDCBGi0nX63Lrcci/6hQlgstCOKnAuZJvmiVlxsZp6rJ4QqQgA9e/xLD4h6KnN3jEnpDAQWm3WQ4+dFhvcGSKLfLWc72+cLLjbaWz9Xt0iVRelILXpsAY+s4JnejANdllmTJ1HT3zrKIxT2SrjNi9gki+n8vIzJT3sFE56iqvQMOz4YtdxNvm3cNnBEHdsN+FgTA5bTDLnpdUxxrx/Wst3HGOXaJIt6Ng==",
        "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=GIY1fG4h3zp2izRpjJocKSCoNpoYrGe5n8/GcTDKgfA=;\n b=eulrvtWwS+9Hg3DFhQv5p6IM7XKLRPmYECwTyY8TAx6PJ+S8My2feZMGj4xhZyjTjGl60FdwVLQi03CaaGvzpG/ovQ2e0iXLKgGL8YiqznPljbGwmUFRssd2Z6yPVD2oufDmwkwx6v6R8FUewP57npcaN7MANnnb5PVaP4bR1qNHdvHPJDoSDQwAkcdegOOCm6pIkCxH/zDi56bDTKNSnXk4zLvKnK+7lpnVvq6uxpj/lR3DJxdxP1bJuREJnjgkqJbcLys4FA8kqKOu4Hxku1MGhQE3XQYq1YvCsLiPHKgZ+x/1EIqFQlKpE/0Qd106/hu6Zucm7jkxLs6xjGSG+Q==",
        "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=GIY1fG4h3zp2izRpjJocKSCoNpoYrGe5n8/GcTDKgfA=;\n b=ahHTQJTLgGjvfJqW2bdghl9molVrYjzdMG6G5cqWCpZ7w2D7ELXymBIYe+QjpZ18Hxa/sirxxAFXpQnGN1cNVy6doGRc8D+n1MI6MefMP22whv7E9pL0ox47tnM5Mi5Bk4UpKMFpIdS8ICaJBHhKr+8cbBlI5uxFXDBe/YtQro7dxJtkzr1KhdL8g5xV5n1z+jh1LPvL/grvxvmQ1aKVnEC8BJYxb7Ep70jJ5D8LvyZYDr6DF1hIZEK0hJYiZAhMHfPKU75BEHR0118o5OsGrbf4Wx0WBsic9S6BAmluGa+d5DvIcVeVYN8eAF5Y1JQdfC09+no6vYVPg8KWfCw6Pw==",
        "From": "Jamin Lin <jamin_lin@aspeedtech.com>",
        "To": "\"philmd@linaro.org\" <philmd@linaro.org>,\n \"peterx@redhat.com\" <peterx@redhat.com>,\n =?iso-8859-1?q?C=E9dric_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>",
        "CC": "Jamin Lin <jamin_lin@aspeedtech.com>, Troy Lee <troy_lee@aspeedtech.com>,\n \"flwu@google.com\" <flwu@google.com>, \"nabihestefan@google.com\"\n <nabihestefan@google.com>, \"farosas@suse.de\" <farosas@suse.de>",
        "Subject": "[PATCH v4 06/17] hw/usb/hcd-ehci: Replace DPRINTF debug logs with\n trace events",
        "Thread-Topic": "[PATCH v4 06/17] hw/usb/hcd-ehci: Replace DPRINTF debug logs\n with trace events",
        "Thread-Index": "AQHc0uCVz4VnYYr8ekyfkX/uN+EXRg==",
        "Date": "Thu, 23 Apr 2026 05:18:13 +0000",
        "Message-ID": "<20260423051804.362095-7-jamin_lin@aspeedtech.com>",
        "References": "<20260423051804.362095-1-jamin_lin@aspeedtech.com>",
        "In-Reply-To": "<20260423051804.362095-1-jamin_lin@aspeedtech.com>",
        "Accept-Language": "zh-TW, en-US",
        "Content-Language": "en-US",
        "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=ahHTQJTL;\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_|KUXPR06MB8534:EE_",
        "x-ms-office365-filtering-correlation-id": "06c8b5da-f33a-4a01-e52e-08dea0f7b7ab",
        "x-ms-exchange-senderadcheck": "1",
        "x-ms-exchange-antispam-relay": "0",
        "x-microsoft-antispam": "BCL:0;\n ARA:13230040|376014|7416014|1800799024|366016|38070700021|921020|18002099003|22082099003|56012099003;",
        "x-microsoft-antispam-message-info": "\n ZqYcfAxVgyc0m4uFP1u7qkE7Wgc2b0QWxPzYRr1nxVBL+8BUnfKh63fziL4C9WAQMJTQnPv7boLuSEmFWE4J7qZ0QC97HV53nv4p7P1wV1AZh/hYvO0xM3IXneF9UmFXXE6Lc2S4EFxX2TP0eTCR/887qPkeYS+3PP3hBgF8oMoC2JHDGvoLlFbF1S2U1y1ZPt+jFJIh9k61nvoOyXnQEnbaeifmAgmN3TauMT/gamh6VzwUsxHSviYiw3/TL8R78b4W7FL+61U+vet6rck6Q6W/zoja/jiTimcJ//buDJYVoTbQST4pKhgOEUohbmzd5/XtOdCLct8G6T8Q5dYbxrFZnX0ohauPmXZpQJw3gItKfh1WfUtL7/Bup0uY4ITw29S1hF+VtB0/dRoLdenG5LnmRkT+eVEIMgvRa3+NLBd02hMtSPUfxZn+yv8WG8TdLRfWnOVipXEBYZOjRqNcdA5GhUVaxwA8YIVUsI3zSkd2jkAp1Xhjw8fXEWWYmZMIcGClNwMa7QfHMLZs78a4p0oV3tNyZjHx12ptxDWC8jCTBSUJztgwKQf6PdP5KmRYQa/PUhDsG5Dx0g4m79WT86aS0XUC7AftQLEi74IhzUBS0KAVtckXIxopvGiSqYk9rBURzOJ2zjIDtjQTvtIoSZGB1upwDG1WIALr9UmTyUq7S1xQLHRyNcWlFM9eh7FjWyryUUREA2r69GLRwIkt5oAH0wvJla/aZXLUTSoQ0ARBVTbd0zJfYvKJ8gEuRU+ffqhiTmwPpP3g1I8fVlrzBF16GZQtly4oXgg+LQ/k0tg5++euQm8ZQrQnpR0u/vXD",
        "x-forefront-antispam-report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:TYPPR06MB8206.apcprd06.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(376014)(7416014)(1800799024)(366016)(38070700021)(921020)(18002099003)(22082099003)(56012099003);\n DIR:OUT; SFP:1102;",
        "x-ms-exchange-antispam-messagedata-chunkcount": "1",
        "x-ms-exchange-antispam-messagedata-0": "=?iso-8859-1?q?BzTNDIoRRwINK8RaRgZ7jP2?=\n\t=?iso-8859-1?q?11K6AbehH6s199LpFcA7TpfjfUXq203RE1madhSsyCMSIMKbzCkkhL9Ipa5q?=\n\t=?iso-8859-1?q?EcSHzg37OIbXDhtvFVSk1M4usUEuxSOmEPWrLB3PiyHV5h3cv1y0s5brl4FG?=\n\t=?iso-8859-1?q?eFpnRhkQxb8CQv5pjCCtOj5ZN3N5exFsaCbmPLbnFK8DXcdN9LNF7jahlyEJ?=\n\t=?iso-8859-1?q?vNMIFCoOYtqQag7b+sx2czim9HgwRsGMdJ6W5VaXywztcu+ZMUv/xzUxKAOz?=\n\t=?iso-8859-1?q?GuZMm+nEi/10n0z/UWJtXarJ3Z+0UfMl6mQGuSCLkl/JF0LrehgE0l0RyGz2?=\n\t=?iso-8859-1?q?vEBJaL7rh1Q94l1wJVX0uECYjRHqo5Zgtg0h2jV6Od9YLI1dDAnKaxnqKaKU?=\n\t=?iso-8859-1?q?lZsgdv09LUkKq+ItcxBUxBYgmD8hYiM07NOxmE/EH6/+5rZxq8PJDHBqU+Gw?=\n\t=?iso-8859-1?q?AsJinhWMn2PqxMyVaAdeNJ8AxtLPcevUjdQ7q2WdNsWcdTgiE/5/JQMxtiYu?=\n\t=?iso-8859-1?q?wv30zmnK0/i/jM2Pc2SIRZHNrOwwkdQRAfaXJ/az7mbd9RL7emWV8WWtqy7D?=\n\t=?iso-8859-1?q?WyaURRvAVUsQRem2XVYQFW5AAtEnFd71/Gi0xgVs77nxUluwvPX9XZ49nZYJ?=\n\t=?iso-8859-1?q?hvv+xCzRseCBoovJHNphKnititNsYj6HI8g2i5UHyCa7b6YgGKZTh996Y1so?=\n\t=?iso-8859-1?q?Rh0M3YVlO7STN2VVbLtAKm6J+8qPnwBw8dkz2O3vz1GW01iDbJgCkE35m1JT?=\n\t=?iso-8859-1?q?84nxiTfFn47Un1PHhQfhNHO5vt6qvAj13Ojehr8m6S78KYxRwz3ZFfIi5jaj?=\n\t=?iso-8859-1?q?QO9i5wZ8x6A1YC7qOqHI3RL5/zYExUpoSHXV0Z87ZMU0YlaZ+Uqai0/QKssH?=\n\t=?iso-8859-1?q?v/C/i7K6ibk5mUF1vW4IczsMnVj5hvnZEZC11sy4GCmSn45A+67bOeDfZTRU?=\n\t=?iso-8859-1?q?fOU/M9fP6pB+50HNbGX/+A8h+IHthjtmTvMnWOiASVkVfqJCCj9KHlcuc1zX?=\n\t=?iso-8859-1?q?zMy4Wtaj5R6iyRwY9Yz9xD9IZlemmR7NvhSHMITswl3aULEc4pt3iwlogfSl?=\n\t=?iso-8859-1?q?MN29TVHPHLO1k+QBhc5rFecy9dUegY1Z9Fxz7A97OlkTlbsgzei7nGXiycB1?=\n\t=?iso-8859-1?q?QqFV/vRQPM7jIPdaVeAx2+U05DHeFVZk5uzFgUeu3N/7rqWbSj1t/zRqAeqN?=\n\t=?iso-8859-1?q?xpiaxTsnR5uwFulTFJcFKTpNXgcBOvJDVkaasH/+HeSGli1caXWtSz3aYT82?=\n\t=?iso-8859-1?q?14rcymVhJzIYG2sPoDFMjJKHQMT7upQzCaFGAVzcvo+K0AoWKGdC4qvucw0E?=\n\t=?iso-8859-1?q?qubTJFPMrmRg18HNPRR7guC7dG2TAOxLCSMadtWFEqw5/fDbuVx/h0xA7kET?=\n\t=?iso-8859-1?q?E//bjpfmIhybhTeWs5nU0wWw3JRz9TWR9z9/ncrOsHtEnKrCn23cPzJ+/sOi?=\n\t=?iso-8859-1?q?l/OgWEd5eDLnk2iDJiSh2J4cqnb4o97jTLP2RfJ1oZkd3XiulgmBss+GI0bk?=\n\t=?iso-8859-1?q?xDgFVmEZKLOupf/iKQewdI6j2a9/Lnbe8KQQTz5k9T/lrvG0hpP2zsUDJy7m?=\n\t=?iso-8859-1?q?fs+yE9jP8SyW7sNtzEGhMd63m9Q+jCu7ifJxpkiEC7A2PKDSLez1pa9piZiv?=\n\t=?iso-8859-1?q?Aiuf8fqPdDJhM+GXK9pImfCoVrGQM6YffJ90ITDIDAWRbTbOm1YDn/dwtj9A?=\n\t=?iso-8859-1?q?7UD2UMw9mLN3pxeUQL59JK0AIT1BpcmXyYkjKg0yzn7Aw1rYGBkLC0Jnu6E+?=\n\t=?iso-8859-1?q?v9o7fYvQ0NuMncClsHFwYZVMTDogA9zYimiytW8UtIJs3wQ=3D=3D?=",
        "Content-Type": "text/plain; charset=\"iso-8859-1\"",
        "Content-Transfer-Encoding": "quoted-printable",
        "MIME-Version": "1.0",
        "X-Exchange-RoutingPolicyChecked": "\n gJoY3g5SVn+MHArdz9cLvz1cfKXax9kmVx4c8nPrQPD4Z/D+OUbqe4BCgUaBoN7C+6oYlpO/grvQ92GPwCAeC4wzz1KjY4tyfEakQLVEm+BwYnsV7aTfwk2o0F+ppeW7IMFsUDcZk9idvDaZZXXmJtKbIHTRUXsNH6k2gQYFFsmUvZ2qZfBEA3mC4crfwRJdbfutCiRVf/3kBk3gdFZE9hsyzDhHNKKhUU1cp7gbkpQHuKW5Xoa15Bi2ab81jL24DKrc7FKHLgvBFhJQUgV8cuBnInifR5vjMK6biMh8b+KCuD5xzhLGNS83srOw2gjvixY+cVKRaYA6grB1fRPTqg==",
        "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 06c8b5da-f33a-4a01-e52e-08dea0f7b7ab",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "23 Apr 2026 05:18:13.1975 (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 8kov3Z+n/7jP8pT+yU2IAKI2LhX0VULbwyIcEFNeNQpnuz0ud6bpU+YJWDfpcOBas5G0jBIWFkeIk+Haa6xO9+qc1LyQ3EZAJzJq4H+Mk0c=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "KUXPR06MB8534",
        "Received-SPF": "pass client-ip=2a01:111:f403:c405::7;\n envelope-from=jamin_lin@aspeedtech.com;\n helo=TYDPR03CU002.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"
    },
    "content": "Replace legacy DPRINTF() debug logging in the EHCI host controller\nimplementation with QEMU trace events.\n\nThe EHCI_DEBUG macro and associated DPRINTF() definitions are\nremoved as they are no longer needed.\n\nTrace events are added for:\n- packet submission and completion\n- queue head execution state\n- periodic schedule advancement\n- ITD error conditions\n- port state handling\n- skipped microframes\n\nNo functional change.\n\nSigned-off-by: Jamin Lin <jamin_lin@aspeedtech.com>\nReviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n---\n hw/usb/hcd-ehci.h   | 10 ---------\n hw/usb/hcd-ehci.c   | 49 +++++++++++++++++++--------------------------\n hw/usb/trace-events |  9 +++++++++\n 3 files changed, 30 insertions(+), 38 deletions(-)",
    "diff": "diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h\nindex 736407fd52..4234591cb4 100644\n--- a/hw/usb/hcd-ehci.h\n+++ b/hw/usb/hcd-ehci.h\n@@ -24,16 +24,6 @@\n #include \"hw/pci/pci_device.h\"\n #include \"hw/core/sysbus.h\"\n \n-#ifndef EHCI_DEBUG\n-#define EHCI_DEBUG   0\n-#endif\n-\n-#if EHCI_DEBUG\n-#define DPRINTF printf\n-#else\n-#define DPRINTF(...)\n-#endif\n-\n #define MMIO_SIZE        0x1000\n #define CAPA_SIZE        0x10\n \ndiff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c\nindex 8acaedeaa9..28a60e4c1a 100644\n--- a/hw/usb/hcd-ehci.c\n+++ b/hw/usb/hcd-ehci.c\n@@ -839,7 +839,7 @@ static USBDevice *ehci_find_device(EHCIState *ehci, uint8_t addr)\n     for (i = 0; i < EHCI_PORTS; i++) {\n         port = &ehci->ports[i];\n         if (!(ehci->portsc[i] & PORTSC_PED)) {\n-            DPRINTF(\"Port %d not enabled\\n\", i);\n+            trace_usb_ehci_port_disable(i);\n             continue;\n         }\n         dev = usb_find_device(port, addr);\n@@ -1281,10 +1281,8 @@ static void ehci_execute_complete(EHCIQueue *q)\n     assert(p->async == EHCI_ASYNC_INITIALIZED ||\n            p->async == EHCI_ASYNC_FINISHED);\n \n-    DPRINTF(\"execute_complete: qhaddr 0x%x, next 0x%x, qtdaddr 0x%x, \"\n-            \"status %d, actual_length %d\\n\",\n-            q->qhaddr, q->qh.next, q->qtdaddr,\n-            p->packet.status, p->packet.actual_length);\n+    trace_usb_ehci_execute_complete(q->qhaddr, q->qh.next, q->qtdaddr,\n+                                    p->packet.status, p->packet.actual_length);\n \n     switch (p->packet.status) {\n     case USB_RET_SUCCESS:\n@@ -1327,7 +1325,7 @@ static void ehci_execute_complete(EHCIQueue *q)\n     } else {\n         tbytes = 0;\n     }\n-    DPRINTF(\"updating tbytes to %d\\n\", tbytes);\n+    trace_usb_ehci_qh_tbytes(tbytes);\n     set_field(&q->qh.token, tbytes, QTD_TOKEN_TBYTES);\n \n     ehci_finish_transfer(q, p->packet.actual_length);\n@@ -1392,10 +1390,9 @@ static int ehci_execute(EHCIPacket *p, const char *action)\n \n     trace_usb_ehci_packet_action(p->queue, p, action);\n     usb_handle_packet(p->queue->dev, &p->packet);\n-    DPRINTF(\"submit: qh 0x%x next 0x%x qtd 0x%x pid 0x%x len %zd endp 0x%x \"\n-            \"status %d actual_length %d\\n\", p->queue->qhaddr, p->qtd.next,\n-            p->qtdaddr, p->pid, p->packet.iov.size, endp, p->packet.status,\n-            p->packet.actual_length);\n+    trace_usb_ehci_packet_submit(p->queue->qhaddr, p->qtd.next, p->qtdaddr,\n+                                 p->pid, p->packet.iov.size, endp,\n+                                 p->packet.status, p->packet.actual_length);\n \n     if (p->packet.actual_length > BUFF_SIZE) {\n         qemu_log_mask(LOG_GUEST_ERROR,\n@@ -1472,7 +1469,8 @@ static int ehci_process_itd(EHCIState *ehci,\n                     usb_handle_packet(dev, &ehci->ipacket);\n                     usb_packet_unmap(&ehci->ipacket, &ehci->isgl);\n                 } else {\n-                    DPRINTF(\"ISOCH: attempt to address non-iso endpoint\\n\");\n+                    trace_usb_ehci_log(\"ISOCH: \"\n+                                       \"attempt to address non-iso endpoint\");\n                     ehci->ipacket.status = USB_RET_NAK;\n                     ehci->ipacket.actual_length = 0;\n                 }\n@@ -1677,24 +1675,22 @@ static EHCIQueue *ehci_state_fetchqh(EHCIState *ehci, int async)\n         if (ehci->usbsts & USBSTS_REC) {\n             ehci_clear_usbsts(ehci, USBSTS_REC);\n         } else {\n-            DPRINTF(\"FETCHQH:  QH 0x%08x. H-bit set, reclamation status reset\"\n-                       \" - done processing\\n\", q->qhaddr);\n+            trace_usb_ehci_fetchqh_reclaim_done(q->qhaddr);\n             ehci_set_state(ehci, async, EST_ACTIVE);\n             q = NULL;\n             goto out;\n         }\n     }\n \n-#if EHCI_DEBUG\n-    if (q->qhaddr != q->qh.next) {\n-        DPRINTF(\"FETCHQH:  QH 0x%08x (h %x halt %x active %x) next 0x%08x\\n\",\n-               q->qhaddr,\n-               q->qh.epchar & QH_EPCHAR_H,\n-               q->qh.token & QTD_TOKEN_HALT,\n-               q->qh.token & QTD_TOKEN_ACTIVE,\n-               q->qh.next);\n+    if (trace_event_get_state_backends(TRACE_USB_EHCI_FETCHQH_DBG)) {\n+        if (q->qhaddr != q->qh.next) {\n+            trace_usb_ehci_fetchqh_dbg(q->qhaddr,\n+                                       q->qh.epchar & QH_EPCHAR_H,\n+                                       q->qh.token & QTD_TOKEN_HALT,\n+                                       q->qh.token & QTD_TOKEN_ACTIVE,\n+                                       q->qh.next);\n+        }\n     }\n-#endif\n \n     if (q->qh.token & QTD_TOKEN_HALT) {\n         ehci_set_state(ehci, async, EST_HORIZONTALQH);\n@@ -2161,7 +2157,7 @@ static void ehci_advance_async_state(EHCIState *ehci)\n         /* make sure guest has acknowledged the doorbell interrupt */\n         /* TO-DO: is this really needed? */\n         if (ehci->usbsts & USBSTS_IAA) {\n-            DPRINTF(\"IAA status bit still set.\\n\");\n+            trace_usb_ehci_log(\"IAA status bit still set.\");\n             break;\n         }\n \n@@ -2226,9 +2222,7 @@ static void ehci_advance_periodic_state(EHCIState *ehci)\n         if (get_dwords(ehci, list, &entry, 1) < 0) {\n             break;\n         }\n-\n-        DPRINTF(\"PERIODIC state adv fr=%d.  [%08X] -> %08X\\n\",\n-                ehci->frindex / 8, list, entry);\n+        trace_usb_ehci_periodic_state_advance(ehci->frindex / 8, list, entry);\n         ehci_set_fetch_addr(ehci, async, entry);\n         ehci_set_state(ehci, async, EST_FETCHENTRY);\n         ehci_advance_state(ehci, async);\n@@ -2294,8 +2288,7 @@ static void ehci_work_bh(void *opaque)\n             ehci_update_frindex(ehci, skipped_uframes);\n             ehci->last_run_ns += UFRAME_TIMER_NS * skipped_uframes;\n             uframes -= skipped_uframes;\n-            DPRINTF(\"WARNING - EHCI skipped %\"PRIu64\" uframes\\n\",\n-                    skipped_uframes);\n+            trace_usb_ehci_skipped_uframes(skipped_uframes);\n         }\n \n         for (i = 0; i < uframes; i++) {\ndiff --git a/hw/usb/trace-events b/hw/usb/trace-events\nindex dd04f14add..0d4318dcf1 100644\n--- a/hw/usb/trace-events\n+++ b/hw/usb/trace-events\n@@ -89,6 +89,7 @@ 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_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@@ -100,13 +101,21 @@ usb_ehci_port_reset(uint32_t port, int enable) \"reset port #%d - %d\"\n usb_ehci_port_suspend(uint32_t port) \"port #%d\"\n usb_ehci_port_wakeup(uint32_t port) \"port #%d\"\n 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_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_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\"\n \n # hcd-uhci.c\n usb_uhci_reset(void) \"=== RESET ===\"\n",
    "prefixes": [
        "v4",
        "06/17"
    ]
}