Message ID | 20230110095351.611724-3-thuth@redhat.com |
---|---|
State | New |
Headers | show |
Series | Make the mc146818 RTC device target independent | expand |
Am 10. Januar 2023 09:53:49 UTC schrieb Thomas Huth <thuth@redhat.com>: >The 'slew' tick policy is currently enforced to be only available on >x86 via some "#ifdef TARGET_I386" statements in mc146818rtc.c. We >want to get rid of those #ifdefs, so we need a different way of >checking whether the policy is allowed or not. Using the setter >function in hw/core/qdev-properties-system.c seems to be a good >place, so let's add a check here. > >Suggested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> >Signed-off-by: Thomas Huth <thuth@redhat.com> >--- > hw/core/qdev-properties-system.c | 28 +++++++++++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-) > >diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c >index 54a09fa9ac..d42493f630 100644 >--- a/hw/core/qdev-properties-system.c >+++ b/hw/core/qdev-properties-system.c >@@ -33,6 +33,7 @@ > #include "net/net.h" > #include "hw/pci/pci.h" > #include "hw/pci/pcie.h" >+#include "hw/i386/x86.h" > #include "util/block-helpers.h" > > static bool check_prop_still_unset(Object *obj, const char *name, >@@ -558,13 +559,38 @@ void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd) > > /* --- lost tick policy --- */ > >+static void qdev_propinfo_set_losttickpolicy(Object *obj, Visitor *v, >+ const char *name, void *opaque, >+ Error **errp) >+{ >+ Property *prop = opaque; >+ int *ptr = object_field_prop_ptr(obj, prop); >+ int value; >+ >+ if (!visit_type_enum(v, name, &value, prop->info->enum_table, errp)) { >+ return; >+ } >+ >+ if (value == LOST_TICK_POLICY_SLEW) { >+ MachineState *ms = MACHINE(qdev_get_machine()); >+ >+ if (!object_dynamic_cast(OBJECT(ms), TYPE_X86_MACHINE)) { >+ error_setg(errp, >+ "the 'slew' policy is only available for x86 machines"); >+ return; >+ } >+ } >+ >+ *ptr = value; >+} >+ > QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int)); > > const PropertyInfo qdev_prop_losttickpolicy = { > .name = "LostTickPolicy", > .enum_table = &LostTickPolicy_lookup, > .get = qdev_propinfo_get_enum, >- .set = qdev_propinfo_set_enum, >+ .set = qdev_propinfo_set_losttickpolicy, > .set_default_value = qdev_propinfo_set_default_value_enum, > }; > Reviewed-by: Bernhard Beschow <shentey@gmail.com>
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c index 54a09fa9ac..d42493f630 100644 --- a/hw/core/qdev-properties-system.c +++ b/hw/core/qdev-properties-system.c @@ -33,6 +33,7 @@ #include "net/net.h" #include "hw/pci/pci.h" #include "hw/pci/pcie.h" +#include "hw/i386/x86.h" #include "util/block-helpers.h" static bool check_prop_still_unset(Object *obj, const char *name, @@ -558,13 +559,38 @@ void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd) /* --- lost tick policy --- */ +static void qdev_propinfo_set_losttickpolicy(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + Property *prop = opaque; + int *ptr = object_field_prop_ptr(obj, prop); + int value; + + if (!visit_type_enum(v, name, &value, prop->info->enum_table, errp)) { + return; + } + + if (value == LOST_TICK_POLICY_SLEW) { + MachineState *ms = MACHINE(qdev_get_machine()); + + if (!object_dynamic_cast(OBJECT(ms), TYPE_X86_MACHINE)) { + error_setg(errp, + "the 'slew' policy is only available for x86 machines"); + return; + } + } + + *ptr = value; +} + QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int)); const PropertyInfo qdev_prop_losttickpolicy = { .name = "LostTickPolicy", .enum_table = &LostTickPolicy_lookup, .get = qdev_propinfo_get_enum, - .set = qdev_propinfo_set_enum, + .set = qdev_propinfo_set_losttickpolicy, .set_default_value = qdev_propinfo_set_default_value_enum, };
The 'slew' tick policy is currently enforced to be only available on x86 via some "#ifdef TARGET_I386" statements in mc146818rtc.c. We want to get rid of those #ifdefs, so we need a different way of checking whether the policy is allowed or not. Using the setter function in hw/core/qdev-properties-system.c seems to be a good place, so let's add a check here. Suggested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Thomas Huth <thuth@redhat.com> --- hw/core/qdev-properties-system.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-)