qapi: expose rtc-reset-reinjection command unconditionally

This removes the TARGET_I386 condition from the rtc-reset-reinjection
command. This requires providing a QMP command stub for non-i386 target.
This in turn requires moving the command out of misc-target.json, since
that will trigger symbol poisoning errors when built from target
independent code.

Rather than putting the command into misc.json, it is proposed to create
misc-$TARGET.json files to hold commands whose impl is conceptually
only applicable to a single target. This gives an obvious docs hint to
consumers that the command is only useful in relation a specific target,
while misc.json is for commands applicable to 2 or more targets.

The current impl of qmp_rtc_reset_reinject() is a no-op if the i386
RTC is disabled in Kconfig, or if the running machine type lack any
RTC device.

The stub impl for non-i386 targets retains this no-op behaviour.
However, it is now reporting an Error mentioning this command is not
available for current target.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-ID: <20250522190542.588267-2-pierrick.bouvier@linaro.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2025-05-22 12:05:28 -07:00 committed by Markus Armbruster
parent 80db93b2b8
commit a78a91feee
7 changed files with 40 additions and 18 deletions

View file

@ -26,7 +26,7 @@
#include "monitor/monitor.h" #include "monitor/monitor.h"
#include "qobject/qdict.h" #include "qobject/qdict.h"
#include "qapi/error.h" #include "qapi/error.h"
#include "qapi/qapi-commands-misc-target.h" #include "qapi/qapi-commands-misc-i386.h"
#include "hw/i386/x86.h" #include "hw/i386/x86.h"
#include "hw/rtc/mc146818rtc.h" #include "hw/rtc/mc146818rtc.h"

View file

@ -64,6 +64,7 @@ if have_system
'qdev', 'qdev',
'pci', 'pci',
'rocker', 'rocker',
'misc-i386',
'tpm', 'tpm',
'uefi', 'uefi',
] ]

24
qapi/misc-i386.json Normal file
View file

@ -0,0 +1,24 @@
# -*- Mode: Python -*-
# vim: filetype=python
#
# SPDX-License-Identifier: GPL-2.0-or-later
##
# @rtc-reset-reinjection:
#
# This command will reset the RTC interrupt reinjection backlog. Can
# be used if another mechanism to synchronize guest time is in effect,
# for example QEMU guest agent's guest-set-time command.
#
# Use of this command is only applicable for x86 machines with an RTC,
# and on other machines will silently return without performing any
# action.
#
# Since: 2.1
#
# .. qmp-example::
#
# -> { "execute": "rtc-reset-reinjection" }
# <- { "return": {} }
##
{ 'command': 'rtc-reset-reinjection' }

View file

@ -2,23 +2,6 @@
# vim: filetype=python # vim: filetype=python
# #
##
# @rtc-reset-reinjection:
#
# This command will reset the RTC interrupt reinjection backlog. Can
# be used if another mechanism to synchronize guest time is in effect,
# for example QEMU guest agent's guest-set-time command.
#
# Since: 2.1
#
# .. qmp-example::
#
# -> { "execute": "rtc-reset-reinjection" }
# <- { "return": {} }
##
{ 'command': 'rtc-reset-reinjection',
'if': 'TARGET_I386' }
## ##
# @SevState: # @SevState:
# #

View file

@ -61,6 +61,7 @@
{ 'include': 'replay.json' } { 'include': 'replay.json' }
{ 'include': 'yank.json' } { 'include': 'yank.json' }
{ 'include': 'misc.json' } { 'include': 'misc.json' }
{ 'include': 'misc-i386.json' }
{ 'include': 'misc-target.json' } { 'include': 'misc-target.json' }
{ 'include': 'audio.json' } { 'include': 'audio.json' }
{ 'include': 'acpi.json' } { 'include': 'acpi.json' }

View file

@ -77,6 +77,7 @@ if have_system
stub_ss.add(files('target-monitor-defs.c')) stub_ss.add(files('target-monitor-defs.c'))
stub_ss.add(files('win32-kbd-hook.c')) stub_ss.add(files('win32-kbd-hook.c'))
stub_ss.add(files('xen-hw-stub.c')) stub_ss.add(files('xen-hw-stub.c'))
stub_ss.add(files('monitor-i386-rtc.c'))
endif endif
if have_system or have_user if have_system or have_user

12
stubs/monitor-i386-rtc.c Normal file
View file

@ -0,0 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qapi/qapi-commands-misc-i386.h"
void qmp_rtc_reset_reinjection(Error **errp)
{
error_setg(errp,
"RTC interrupt reinjection backlog reset is not available for"
"this machine");
}