Show a cover letter.

GET /api/1.1/covers/2222017/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2222017,
    "url": "http://patchwork.ozlabs.org/api/1.1/covers/2222017/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260410160458.3778874-1-berrange@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.1/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": ""
    },
    "msgid": "<20260410160458.3778874-1-berrange@redhat.com>",
    "date": "2026-04-10T16:04:41",
    "name": "[RFC,00/17] monitor: turn QMP and HMP into QOM objects",
    "submitter": {
        "id": 2694,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/2694/?format=api",
        "name": "Daniel P. Berrangé",
        "email": "berrange@redhat.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260410160458.3778874-1-berrange@redhat.com/mbox/",
    "series": [
        {
            "id": 499483,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/499483/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=499483",
            "date": "2026-04-10T16:04:41",
            "name": "monitor: turn QMP and HMP into QOM objects",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499483/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/covers/2222017/comments/",
    "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=Xp7Sqf6p;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (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 4fshVp4XVwz20HT\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 11 Apr 2026 02:06:09 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wBEMB-0003ua-1q; Fri, 10 Apr 2026 12:05:19 -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 <berrange@redhat.com>)\n id 1wBEM4-0003pJ-Tz\n for qemu-devel@nongnu.org; Fri, 10 Apr 2026 12:05:13 -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 <berrange@redhat.com>)\n id 1wBEM2-0006Lb-BR\n for qemu-devel@nongnu.org; Fri, 10 Apr 2026 12:05:12 -0400",
            "from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-114-ke4vb9EDMc2uaEa0zHTE4w-1; Fri,\n 10 Apr 2026 12:05:06 -0400",
            "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 16B411955DB9; Fri, 10 Apr 2026 16:05:04 +0000 (UTC)",
            "from toolbx.redhat.corp (headnet01.pony-001.prod.iad2.dc.redhat.com\n [10.2.32.101])\n by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 5A38F195608E; Fri, 10 Apr 2026 16:05:00 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1775837109;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=JtP4WTryhH9guBAN2A7tyUb+cg0JFkESkEjp9nk3qS4=;\n b=Xp7Sqf6pqswSGn4Tt0zmuet7Hh/+PHu9lTeXeHe6w3j4GeP+thO84BhsHrn2z7styHNwk1\n oQwt9nfaVZ7KmhK0jNUspOCRoDJWMjANx7GR5WVs3F5dDiHtScQO83tvEiL5wCkoUX6P5M\n fzH4c2rfEWv1iSROS9rLzcR/L5I83s8=",
        "X-MC-Unique": "ke4vb9EDMc2uaEa0zHTE4w-1",
        "X-Mimecast-MFC-AGG-ID": "ke4vb9EDMc2uaEa0zHTE4w_1775837104",
        "From": "=?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= <berrange@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "Paolo Bonzini <pbonzini@redhat.com>,\n Markus Armbruster <armbru@redhat.com>,\n Christian Brauner <brauner@kernel.org>,\n =?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>, =?utf-8?q?Philippe_M?=\n\t=?utf-8?q?athieu-Daud=C3=A9?= <philmd@linaro.org>,\n Fabiano Rosas <farosas@suse.de>,\n =?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Peter Xu <peterx@redhat.com>, Kevin Wolf <kwolf@redhat.com>, =?utf-8?q?Dani?=\n\t=?utf-8?q?el_P=2E_Berrang=C3=A9?= <berrange@redhat.com>,\n qemu-block@nongnu.org, \"Dr. David Alan Gilbert\" <dave@treblig.org>,\n Eric Blake <eblake@redhat.com>",
        "Subject": "[PATCH RFC 00/17] monitor: turn QMP and HMP into QOM objects",
        "Date": "Fri, 10 Apr 2026 17:04:41 +0100",
        "Message-ID": "<20260410160458.3778874-1-berrange@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17",
        "Received-SPF": "pass client-ip=170.10.133.124;\n envelope-from=berrange@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com",
        "X-Spam_score_int": "7",
        "X-Spam_score": "0.7",
        "X-Spam_bar": "/",
        "X-Spam_report": "(0.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.54,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_SBL_CSS=3.335,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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": "Conceptually -object and object_add/object_del should be sufficient\nfor essentially all QEMU configuration....if only we ported all our\ninternal custom backends/devices/etc to QOM. That is of course a big\njob which is why it hasn't happened.\n\nThis series started with the premise that the monitor is one of the\neasier areas to convert since we have no more than three classes,\na common base, and QMP and HMP subclasses. So why not give it a go\nand thus unlock the ability to dynamically create/delete monitors\nin QMP/HMP.\n\nThis series does the conversion in as many small steps as I could\nachieve. At the end it is possible to create HMP and QMP monitors\nwith -object and object_add.\n\nIn theory object_del is possible but is unsafe since there's no\nsynchronization wrt \"in use\" monitors. Christian Brauner sent\na proposal for monitor_add/monitor_del commands that address the\nsafety/synchronization issues, but I've not yet integrated the\nrelevent bits of that series with this proposal:\n\n  https://lists.nongnu.org/archive/html/qemu-devel/2026-04/msg01349.html\n\nMy overall feeling is that we're better off turning monitors\ninto QOM classes, rather than inventing more type specific\nQMP commands.\n\nWhat's missing:\n\n - Integration of code for safe deletion of monitors\n - The existing -mon/-qmp/-monitor args should be turned\n   into syntax sugar around -object & -chardev\n - The new approach must be documented\n - Functional tests are needed for the hot add/remove of\n   monitors and new -object syntax. (The pre-existing\n   test suites cover the static config with the traditional\n   args).\n\nDaniel P. Berrangé (17):\n  monitor: replace 'common' with 'parent' in MonitorHMP\n  monitor: replace 'common' with 'parent' in MonitorQMP\n  monitor: rename monitor_init* to monitor_new*\n  monitor: minimal conversion of monitors to QOM\n  monitor: remove 'skip_flush' field\n  monitor: move monitor_data_(init|destroy) into QOM init/finalize\n  monitor: use class methods for monitor_vprintf\n  monitor: use class methods for monitor_qapi_event_emit\n  monitor: use class methods for monitor_accept_input\n  monitor: use dynamic cast in monitor_qmp_requests_pop_any_with_lock\n  util: use dynamic cast in error vreport\n  monitor: drop unused monitor_cur_is_qmp\n  monitor: use dynamic cast in QMP commands\n  monitor: use dynamic cast in monitor_is_hmp_non_interactive\n  monitor: drop unused monitor_is_qmp method\n  monitor: eliminate monitor_is_hmp_non_interactive method\n  FIXME: monitor: implement \"user creatable\" interface\n\n chardev/char.c                       |  10 +-\n gdbstub/system.c                     |  10 +-\n include/monitor/monitor.h            |  21 ++-\n migration/migration-hmp-cmds.c       |   5 +-\n monitor/hmp-cmds.c                   |   7 +-\n monitor/hmp.c                        | 159 ++++++++++++++-----\n monitor/monitor-internal.h           |  44 +++---\n monitor/monitor.c                    | 222 +++++++++++++--------------\n monitor/qmp-cmds-control.c           |  12 +-\n monitor/qmp-cmds.c                   |  14 +-\n monitor/qmp.c                        | 138 ++++++++++++-----\n qapi/qom.json                        |  43 ++++++\n storage-daemon/qemu-storage-daemon.c |   2 +-\n stubs/monitor-core.c                 |   5 -\n stubs/monitor-internal.c             |   4 -\n system/vl.c                          |  10 +-\n tests/unit/test-util-sockets.c       |   1 -\n ui/ui-hmp-cmds.c                     |   2 +-\n util/error-report.c                  |  13 +-\n 19 files changed, 465 insertions(+), 257 deletions(-)"
}