Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2223784/?format=api
{ "id": 2223784, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2223784/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260416-vhost-user-rtc-v2-1-100a53bfc6ce@linaro.org/", "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": "<20260416-vhost-user-rtc-v2-1-100a53bfc6ce@linaro.org>", "date": "2026-04-16T08:00:34", "name": "[v2] virtio: Add vhost-user-rtc and vhost-user-rtc-pci", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "7e202c88acfc28c9b6bed7228c7f7f859f3152cc", "submitter": { "id": 86526, "url": "http://patchwork.ozlabs.org/api/1.1/people/86526/?format=api", "name": "Manos Pitsidianakis", "email": "manos.pitsidianakis@linaro.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260416-vhost-user-rtc-v2-1-100a53bfc6ce@linaro.org/mbox/", "series": [ { "id": 500102, "url": "http://patchwork.ozlabs.org/api/1.1/series/500102/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=500102", "date": "2026-04-16T08:00:34", "name": "[v2] virtio: Add vhost-user-rtc and vhost-user-rtc-pci", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/500102/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2223784/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2223784/checks/", "tags": {}, "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=nvJqYOwz;\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 4fx9SS1crkz1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 18:01:10 +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 1wDHeZ-0004Yp-5r; Thu, 16 Apr 2026 04:00:47 -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 <manos.pitsidianakis@linaro.org>)\n id 1wDHeX-0004YW-4r\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 04:00:45 -0400", "from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <manos.pitsidianakis@linaro.org>)\n id 1wDHeU-0005w3-CK\n for qemu-devel@nongnu.org; Thu, 16 Apr 2026 04:00:44 -0400", "by mail-wm1-x32f.google.com with SMTP id\n 5b1f17b1804b1-4887fd35e60so52965455e9.2\n for <qemu-devel@nongnu.org>; Thu, 16 Apr 2026 01:00:41 -0700 (PDT)", "from [127.0.1.1] (athedsl-4440559.home.otenet.gr. [79.129.177.223])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-488f095e68dsm66010615e9.2.2026.04.16.01.00.38\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 16 Apr 2026 01:00:39 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776326440; x=1776931240; darn=nongnu.org;\n h=cc:to:message-id:content-transfer-encoding:mime-version:subject\n :date:from:from:to:cc:subject:date:message-id:reply-to;\n bh=sbDZolMShqp6MfbBZTH0s4blYMYuL54CKjxI3W12a64=;\n b=nvJqYOwzkbIHpS7t/K5ESaDHzpgrWls3WM3v3uYjfTnJwsex030/YMGgL4ikOViE2c\n UqxKTHYIYqdC2UNvI9HE46KCyrtR1/MsndNAM2xRW2BrsmT6FzmumZMkrSv365R61BQ3\n RkRS+N/quUitZ9a4Uy/olxZQ+SPAuHa8WJ/1mHKSTRCKPzIUof4RtwrdOo4u3I0FCeGW\n 8HW5avXbAqbn9EAocXUxiLnCkQYuILZ6Jb4J6r18EsKu3YPiPEJQ2Zbg0HghHQSlZDQK\n 2qZdiivwn3GZHBfPhhDXTzpv/bq9t3NAV2PzyoA+j39uOi6K/aFeNUFzgC83Yr4kVmzT\n jRXQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776326440; x=1776931240;\n h=cc:to:message-id:content-transfer-encoding:mime-version:subject\n :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=sbDZolMShqp6MfbBZTH0s4blYMYuL54CKjxI3W12a64=;\n b=mveWLBHdNiBXDe8jGv4/fhVdg6JakwghuF6zf5txYEdqXnAqJuZwfNpLInNsCPUVN7\n DSq/HYEHWsPoMZtul3belyd3LnoddJXJKjgOndI51zcoiDHvax+l3AkCtnXJEG6iHhT/\n AcJuvXDzrPn//7S2bMv5UHipm56M1QjYjB7ZiquQsXl+CKt8+y8jdroyXX7ifV82L+5X\n snX+wgQlYu4DTKV5jLcCoe8J/ttyoFMpsv22cLqD/WDUs0VpESN192ZvELqy5q9Ul55p\n pJoGg+j8C3hM8JEdhr72r4v7l1AoTSY82wtvCmCV5/g9NdxaaucDqZE7Osabarc1Qb2h\n mdsg==", "X-Gm-Message-State": "AOJu0Yx8pFFFthy0Z9v7AQpMPBOWzEgZ7ylRbPH8/dALJ4gmwVZ6ALsH\n 1n/qUsmo8hQNjlOIBKzdljnHHefIJK8QEM3fhsAAEs7zl8cnIlvQoyie7XazFMHI6Uo=", "X-Gm-Gg": "AeBDieus9QzPQoYaw+3U3Mllz9bxFCnEDc2l6QQLqUOPMSeAqyoDixhrvLtQeEDTMS4\n HkYJQg/SZ0tCGM+lwqQvBoOmIGVbhkBmDwwA3GkSm9l65LxVESdBzB1X1Zzlbp3ycOStjaBsEcM\n /smUBIhe3+4a/LKwfDQC9LCmc/kKjfkjI4TAHAVU9zSeOJRIWgtNq/54snrPXTjuHLa6vNx1jXl\n DFbiwHpW9EYcA/oCUlMpUtNPeje0ObhBrOKjHgGknM3WBBu8CPuPC6bK6QuwUnAEDGkR3ByLh6X\n ccFf63Y7lvfdo3iEk2wyZVQRFISANcN9sFueNgAPF2sR4DAmZz3UCITU3LyqSpx9Y4uBvRoHyMM\n hThkpk4+aVGhE2Xd1iiFKbEKBxRutsbGBMi6k1j2bM4EoI7SOQ+rXaLHQbGtz3+Wt3Ny6HkWgBm\n Rt12tv9Rz/x34dAnPP6p33U3E8OAE6FkFDJH1aP1eRkIovUeSOR90E6dOclQa9jZNu1ZJcwNCqs\n CLWr/+SwLt1468d/+O92J4yn2hzPQ3L4k9KVEYC", "X-Received": "by 2002:a05:600c:a109:b0:488:af7f:7751 with SMTP id\n 5b1f17b1804b1-488d6836508mr238620235e9.15.1776326439668;\n Thu, 16 Apr 2026 01:00:39 -0700 (PDT)", "From": "Manos Pitsidianakis <manos.pitsidianakis@linaro.org>", "Date": "Thu, 16 Apr 2026 11:00:34 +0300", "Subject": "[PATCH v2] virtio: Add vhost-user-rtc and vhost-user-rtc-pci", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "8bit", "Message-Id": "<20260416-vhost-user-rtc-v2-1-100a53bfc6ce@linaro.org>", "X-B4-Tracking": "v=1; b=H4sIACGX4GkC/3WMwQ7CIBAFf6XZsxhKkaIn/8P0UCmUTQyYBYmm4\n d/F3s07zUtmNkiW0Ca4dBuQLZgwhgbi0IHxc1gtw6UxCC4Ul71ixceU2atpjLJhxmrn+DCOw0l\n Bk55kHb734G1q7DHlSJ+9X/rf+zdVetZ2F4uUjhutz9cHhpniMdIKU631C8IVzUitAAAA", "X-Change-ID": "20260416-vhost-user-rtc-ce8ff0377356", "To": "qemu-devel@nongnu.org", "Cc": "=?utf-8?b?TWl0c3V5YSBJa3V5YSAo5LiJ44OE5bGLIOmDgeWTiSk=?=\n <mitsuya.ikuya@jp.panasonic.com>, =?utf-8?b?S1VaVSBLQVpVS0kgKOiRm+eUnyA=?=\n\t=?utf-8?b?5LiA5qi5KQ==?= <kuzu.kazuki@jp.panasonic.com>,\n Stefano Garzarella <sgarzare@redhat.com>,\n =?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>,\n \"Michael S. Tsirkin\" <mst@redhat.com>,\n Manos Pitsidianakis <manos.pitsidianakis@linaro.org>", "X-Mailer": "b4 0.14.2", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=9402;\n i=manos.pitsidianakis@linaro.org; h=from:subject:message-id;\n bh=GTPfy8d/1NH/oEqhRnnj3TBvPcVEKQMY/rS5xbxeyPU=;\n b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0VCYlFLUy9aQU5Bd0FLQVhjcHgzQi9mZ\n 25RQWNzbVlnQnA0SmNtdXZMS3Q0NDc5R1dzN1dkckk4Qkl5NWRqCnRITC9tWXp5a0hLQkR3UytK\n SjZKQWpNRUFBRUtBQjBXSVFUTVhCdE9SS0JXODRkd0hSQjNLY2R3ZjM0SjBBVUMKYWVDWEpnQUt\n DUkIzS2Nkd2YzNEowTnNiRC9zRlhEVW9BVTZjbTlhaE1NTUdWdlZvY25SZ1R6cXI0cEhFMGh1QQ\n pEQzBpVERhcG50cThyemJjVTd6MEN3SVNWcHROeGNqZk5ReXUrN1VtUGxUY0NjeHU0STBmSTJFZ\n mJHTmo0VlErCm1nWjVsQUJmYS95b2ZuU3AxaVgrN2s4ZUQ0cmJrSUU1TVhDUEFoeVc2TTNtZHhI\n V0tBYWhLNVZaWCtDZ2hETzQKQVZNNENxY2ZJNUJoMEhNSUFjN290MVpzMWV3VDZkUkRwamZuQzh\n JSFIrdm5PcWVjd3N4TzBvRXREVTJ6MW9IbgppekxyWHQ1WlRqTGh3T0ZCamZkM0J1blRXc0hZVD\n RDaER3dUgvc0xSb2QzQVVaLzRNSitmWW00MWkwVEJzMVVRCkd5czBObG16MS9VOS83TGVwT1lZV\n ExRdjBnNVcvamgyQ0pNZy96ejhxTE1sYzgvV1MyVDFlcjdJd3hYK2tzakMKbjB2ZGhmSTRpVDZ4\n TFUzeG9mRFBYSlJCWERrWmhrQzQrT0RVSklNQml4S0Ywbit5SWJWSmNlOG00Z0Y5Um45TwpoOVR\n YZlV6UElxZ1RGL0wyelJxVGVyKzgrK0RlUVUrUit5YVJ0ZnNlZ1RHeHY4bUZQL2VtNm5RNk1qdG\n V2MXY5ClBjcXg1Z2xaMm9ES3JDcTZaNGpHaHpmMHZOaUl3aGszcjl2YnoxMVRHb21QWktaRWNHb\n mdTZW9tWmt5UC8yMmEKSHpaUjNEY2VmWTlJOUVrNlVUOGtaRmM0TjBaN0FCK0JvQ29yZVJyVGVw\n OUpCd2Z3M2htQ1R5VXBaZWNQWnE3YQpsdFFuYXkwNUpKV0VmOTVwNGJScUl1ZGViZVZOR0lkMkl\n NTmR2NkpsdzVtMnMzYlRrTldUV0VCRFNVTndoUCs5Cm5wdmVZZz09Cj1tL05rCi0tLS0tRU5EIF\n BHUCBNRVNTQUdFLS0tLS0K", "X-Developer-Key": "i=manos.pitsidianakis@linaro.org; a=openpgp;\n fpr=7C721DF9DB3CC7182311C0BF68BC211D47B421E1", "Received-SPF": "pass client-ip=2a00:1450:4864:20::32f;\n envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm1-x32f.google.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=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": "Authored solely by me for Panasonic Automotive Systems Co., Ltd., but\nbased on existing vhost-user devices I wrote in 2025, so the copyright\nis mixed.\n\nSigned-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>\n---\nChanges in v2:\n- Explain \"unusual\" authorship situation\n- Link to v1: https://lore.kernel.org/qemu-devel/20260416-vhost-user-rtc-v1-1-1b2d44f0c889@linaro.org\n---\n include/hw/virtio/vhost-user-rtc.h | 22 ++++++++++\n MAINTAINERS | 6 +++\n docs/system/devices/virtio/vhost-user.rst | 3 ++\n hw/virtio/Kconfig | 5 +++\n hw/virtio/meson.build | 3 ++\n hw/virtio/vhost-user-rtc-pci.c | 70 +++++++++++++++++++++++++++++++\n hw/virtio/vhost-user-rtc.c | 64 ++++++++++++++++++++++++++++\n 7 files changed, 173 insertions(+)\n\n\n---\nbase-commit: da6c4fe60fee30dd77267764d55b38af9cb89d4b\nchange-id: 20260416-vhost-user-rtc-ce8ff0377356\n\n--\nγαῖα πυρί μιχθήτω", "diff": "diff --git a/include/hw/virtio/vhost-user-rtc.h b/include/hw/virtio/vhost-user-rtc.h\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..6b7b53c28f93032886d82687199585aba0edd917\n--- /dev/null\n+++ b/include/hw/virtio/vhost-user-rtc.h\n@@ -0,0 +1,22 @@\n+/*\n+ * Vhost-user RTC virtio device\n+ *\n+ * Copyright (c) 2025 Manos Pitsidianakis <manos.pitsidianakis@linaro.org>\n+ * Copyright 2026 Panasonic Automotive Systems Co., Ltd.\n+ *\n+ * SPDX-License-Identifier: GPL-2.0-or-later\n+ */\n+\n+#ifndef QEMU_VHOST_USER_RTC_H\n+#define QEMU_VHOST_USER_RTC_H\n+\n+#include \"hw/virtio/vhost-user-base.h\"\n+\n+#define TYPE_VHOST_USER_RTC \"vhost-user-rtc\"\n+OBJECT_DECLARE_SIMPLE_TYPE(VHostUserRTC, VHOST_USER_RTC)\n+\n+struct VHostUserRTC {\n+ VHostUserBase parent_obj;\n+};\n+\n+#endif /* QEMU_VHOST_USER_RTC_H */\ndiff --git a/MAINTAINERS b/MAINTAINERS\nindex ad215eced84d1ac58956ea374ee012acbb3cbd18..da6376b0f5e6fa99495504e88da9fef5a7a969e3 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -2573,6 +2573,12 @@ S: Maintained\n F: include/hw/virtio/vhost-user-spi.h\n F: hw/virtio/vhost-user-spi*\n \n+vhost-user-rtc\n+M: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>\n+S: Supported\n+F: include/hw/virtio/vhost-user-rtc.h\n+F: hw/virtio/vhost-user-rtc*\n+\n virtio-crypto\n M: Gonglei <arei.gonglei@huawei.com>\n S: Supported\ndiff --git a/docs/system/devices/virtio/vhost-user.rst b/docs/system/devices/virtio/vhost-user.rst\nindex 2806d81ca201551a91246a10e0d98fd36d74200b..acfbd609d0f9c87e3af684797adf156a8a61bc88 100644\n--- a/docs/system/devices/virtio/vhost-user.rst\n+++ b/docs/system/devices/virtio/vhost-user.rst\n@@ -61,6 +61,9 @@ platform details for what sort of virtio bus to use.\n * - vhost-user-spi\n - Proxy spi devices to host\n - `vhost-device-spi <https://github.com/rust-vmm/vhost-device/tree/main/vhost-device-spi>`_\n+ * - vhost-user-rtc\n+ - Real time clock\n+ - `vhost-device-rtc <https://github.com/rust-vmm/vhost-device/tree/main/vhost-device-rtc>`_\n \n The referenced *daemons* are not exhaustive, any conforming backend\n implementing the device and using the vhost-user protocol should work.\ndiff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig\nindex 8895682c619402eb3c9cd7269d3319f39711b4bd..2ebdac16b31aec3ec283c0285a4dcfa67f0a5157 100644\n--- a/hw/virtio/Kconfig\n+++ b/hw/virtio/Kconfig\n@@ -136,3 +136,8 @@ config VHOST_USER_TEST\n bool\n default y\n depends on VIRTIO && VHOST_USER\n+\n+config VHOST_USER_RTC\n+ bool\n+ default y\n+ depends on VIRTIO && VHOST_USER\ndiff --git a/hw/virtio/meson.build b/hw/virtio/meson.build\nindex 415e359e9fc79b6b1adbbcfc4f87a7106ef1d4a6..e0566a60de7989c4048956e268f151659467fe34 100644\n--- a/hw/virtio/meson.build\n+++ b/hw/virtio/meson.build\n@@ -27,6 +27,7 @@ if have_vhost\n system_virtio_ss.add(when: 'CONFIG_VHOST_USER_SND', if_true: files('vhost-user-snd.c'))\n system_virtio_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input.c'))\n system_virtio_ss.add(when: 'CONFIG_VHOST_USER_SPI', if_true: files('vhost-user-spi.c'))\n+ system_virtio_ss.add(when: 'CONFIG_VHOST_USER_RTC', if_true: files('vhost-user-rtc.c'))\n \n # PCI Stubs\n system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_TEST'],\n@@ -43,6 +44,8 @@ if have_vhost\n if_true: files('vhost-user-input-pci.c'))\n system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_SPI'],\n if_true: files('vhost-user-spi-pci.c'))\n+ system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_RTC'],\n+ if_true: files('vhost-user-rtc-pci.c'))\n endif\n if have_vhost_vdpa\n system_virtio_ss.add(files('vhost-vdpa.c'))\ndiff --git a/hw/virtio/vhost-user-rtc-pci.c b/hw/virtio/vhost-user-rtc-pci.c\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..449368d27009acde20aa4af2542a912ac8b82cbc\n--- /dev/null\n+++ b/hw/virtio/vhost-user-rtc-pci.c\n@@ -0,0 +1,70 @@\n+/*\n+ * Vhost-user RTC virtio device PCI glue\n+ *\n+ * Copyright (c) 2025 Manos Pitsidianakis <manos.pitsidianakis@linaro.org>\n+ * Copyright 2026 Panasonic Automotive Systems Co., Ltd.\n+ *\n+ * SPDX-License-Identifier: GPL-2.0-or-later\n+ */\n+\n+#include \"qemu/osdep.h\"\n+#include \"hw/virtio/vhost-user-rtc.h\"\n+#include \"hw/virtio/virtio-pci.h\"\n+\n+struct VHostUserRTCPCI {\n+ VirtIOPCIProxy parent_obj;\n+ VHostUserRTC vdev;\n+};\n+\n+typedef struct VHostUserRTCPCI VHostUserRTCPCI;\n+\n+#define TYPE_VHOST_USER_RTC_PCI \"vhost-user-rtc-pci-base\"\n+\n+DECLARE_INSTANCE_CHECKER(VHostUserRTCPCI, VHOST_USER_RTC_PCI,\n+ TYPE_VHOST_USER_RTC_PCI)\n+\n+static void vhost_user_rtc_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)\n+{\n+ VHostUserRTCPCI *dev = VHOST_USER_RTC_PCI(vpci_dev);\n+ DeviceState *vdev = DEVICE(&dev->vdev);\n+\n+ vpci_dev->nvectors = 1;\n+\n+ qdev_realize(vdev, BUS(&vpci_dev->bus), errp);\n+}\n+\n+static void vhost_user_rtc_pci_class_init(ObjectClass *klass, const void *data)\n+{\n+ DeviceClass *dc = DEVICE_CLASS(klass);\n+ VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);\n+ PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);\n+ k->realize = vhost_user_rtc_pci_realize;\n+ set_bit(DEVICE_CATEGORY_MISC, dc->categories);\n+ pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;\n+ pcidev_k->device_id = 0; /* Set by virtio-pci based on virtio id */\n+ pcidev_k->revision = 0x00;\n+ pcidev_k->class_id = PCI_CLASS_SYSTEM_RTC;\n+}\n+\n+static void vhost_user_rtc_pci_instance_init(Object *obj)\n+{\n+ VHostUserRTCPCI *dev = VHOST_USER_RTC_PCI(obj);\n+\n+ virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),\n+ TYPE_VHOST_USER_RTC);\n+}\n+\n+static const VirtioPCIDeviceTypeInfo vhost_user_rtc_pci_info = {\n+ .base_name = TYPE_VHOST_USER_RTC_PCI,\n+ .non_transitional_name = \"vhost-user-rtc-pci\",\n+ .instance_size = sizeof(VHostUserRTCPCI),\n+ .instance_init = vhost_user_rtc_pci_instance_init,\n+ .class_init = vhost_user_rtc_pci_class_init,\n+};\n+\n+static void vhost_user_rtc_pci_register(void)\n+{\n+ virtio_pci_types_register(&vhost_user_rtc_pci_info);\n+}\n+\n+type_init(vhost_user_rtc_pci_register);\ndiff --git a/hw/virtio/vhost-user-rtc.c b/hw/virtio/vhost-user-rtc.c\nnew file mode 100644\nindex 0000000000000000000000000000000000000000..88b0c70b903363fc9ac7ccb65a1b1755e095c6bc\n--- /dev/null\n+++ b/hw/virtio/vhost-user-rtc.c\n@@ -0,0 +1,64 @@\n+/*\n+ * Vhost-user RTC virtio device\n+ *\n+ * Copyright (c) 2025 Manos Pitsidianakis <manos.pitsidianakis@linaro.org>\n+ * Copyright 2026 Panasonic Automotive Systems Co., Ltd.\n+ *\n+ * Simple wrapper of the generic vhost-user-device.\n+ *\n+ * SPDX-License-Identifier: GPL-2.0-or-later\n+ */\n+\n+#include \"qemu/osdep.h\"\n+#include \"qapi/error.h\"\n+#include \"hw/virtio/vhost-user-rtc.h\"\n+#include \"standard-headers/linux/virtio_ids.h\"\n+\n+static const VMStateDescription vu_rtc_vmstate = {\n+ .name = \"vhost-user-rtc\",\n+ .unmigratable = 1,\n+};\n+\n+static const Property vrtc_properties[] = {\n+ DEFINE_PROP_CHR(\"chardev\", VHostUserBase, chardev),\n+};\n+\n+static void vu_rtc_base_realize(DeviceState *dev, Error **errp)\n+{\n+ VHostUserBase *vub = VHOST_USER_BASE(dev);\n+ VHostUserBaseClass *vubs = VHOST_USER_BASE_GET_CLASS(dev);\n+\n+ vub->virtio_id = VIRTIO_ID_CLOCK;\n+ vub->num_vqs = 2;\n+ vub->config_size = 0;\n+ vub->vq_size = 1024;\n+\n+ vubs->parent_realize(dev, errp);\n+}\n+\n+static void vu_rtc_class_init(ObjectClass *klass, const void *data)\n+{\n+ DeviceClass *dc = DEVICE_CLASS(klass);\n+ VHostUserBaseClass *vubc = VHOST_USER_BASE_CLASS(klass);\n+\n+ dc->vmsd = &vu_rtc_vmstate;\n+ device_class_set_props(dc, vrtc_properties);\n+ device_class_set_parent_realize(dc, vu_rtc_base_realize,\n+ &vubc->parent_realize);\n+\n+ set_bit(DEVICE_CATEGORY_MISC, dc->categories);\n+}\n+\n+static const TypeInfo vu_rtc_info = {\n+ .name = TYPE_VHOST_USER_RTC,\n+ .parent = TYPE_VHOST_USER_BASE,\n+ .instance_size = sizeof(VHostUserRTC),\n+ .class_init = vu_rtc_class_init,\n+};\n+\n+static void vu_rtc_register_types(void)\n+{\n+ type_register_static(&vu_rtc_info);\n+}\n+\n+type_init(vu_rtc_register_types)\n", "prefixes": [ "v2" ] }