On Fri, Sep 4, 2026 at 12:28 AM Pierrick Bouvier <
[email protected]> wrote:
>
> On 9/3/2026 3:33 AM, Yonggang Luo wrote:
> >
> >
> >>
> >> > Pierrick Bouvier (14):
> >> > qom/object: add is_available callback to TypeInfo
> >>
> >
> > Patches for is_available callback to TypeInfo, it's can be merged latter
> >
>
> It's needed because files in patch 2 already depend on existing
> filtering mechanism to distinguish between arm and aarch64.
> We found other places where such filter could be used to specify target
> related types within a single C file, thus allowing to remove #ifdef
> TARGET_X easily.
>
> > The reason is for the following command to execute:
> >
> > we need add target_info_select and pass TargetInfo to is_available
> >
> > - Move target_info() into qom/object.c. Default to SYS_EMU_TARGET_NONE
> > until a real target is selected.
> > - Add target_info_select(); it may be called only once with a non-NULL
> > TargetInfo that is not SYS_EMU_TARGET_NONE.
> > - Invoke TypeInfo.is_available after select, passing target_info().
> > - Change target_* helpers to take const TargetInfo *.
>
> We can wait to have a need for this. As long as there is no
> heterogeneous support, it's safe to assume there is a single target
> active globally.
Because we would have more and more usage of target_* , that's why I would
suggest merge it as early as possible. I means directly usage of these
functions.
Not use is_avaible, for example:
--- a/hw/arm/aspeed_ast27x0.c
+++ b/hw/arm/aspeed_ast27x0.c
@@ -420,7 +420,7 @@ static void aspeed_soc_ast2700_init(Object *obj)
}
for (i = 0; i < sc->num_cpus; i++) {
- if (qtest_enabled() && !target_aarch64()) {
+ if (qtest_enabled() && !target_aarch64(target_info())) {
/*
* Introspection qtest just want to create this object
* without realizing it. ARM_CPU_TYPE_NAME("cortex-a35")
@@ -703,7 +703,7 @@ static void aspeed_soc_ast2700_realize(DeviceState
*dev, Error **errp)
qemu_irq irq;
int uart;
- if (qtest_enabled() && !target_aarch64()) {
+ if (qtest_enabled() && !target_aarch64(target_info())) {
g_assert_not_reached();
}
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 0871a35e11f..dbdf55dfea9 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -4132,7 +4132,7 @@ static GPtrArray *virt_get_valid_cpu_types(const
MachineState *ms)
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a15")));
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("max-v8")));
}
- if (tcg_enabled() && target_aarch64()) {
+ if (tcg_enabled() && target_aarch64(target_info())) {
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a35")));
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a55")));
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a72")));
@@ -4144,7 +4144,7 @@ static GPtrArray *virt_get_valid_cpu_types(const
MachineState *ms)
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("neoverse-n2")));
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("max-v9")));
}
- if (target_aarch64()) {
+ if (target_aarch64(target_info())) {
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a53")));
g_ptr_array_add(vct, g_strdup(ARM_CPU_TYPE_NAME("cortex-a57")));
if (kvm_enabled() || hvf_enabled() || whpx_enabled()) {
diff --git a/hw/nitro/machine.c b/hw/nitro/machine.c
index 88d01960a01..2a924cab4f7 100644
--- a/hw/nitro/machine.c
+++ b/hw/nitro/machine.c
@@ -97,7 +97,7 @@ static char *build_eif(const char *kernel_data, gsize
kernel_size,
hdr = (EifHeader) {
.magic = EIF_MAGIC,
.version = cpu_to_be16(4),
- .flags = cpu_to_be16(target_aarch64() ? EIF_HDR_ARCH_ARM64 : 0),
+ .flags = cpu_to_be16(target_aarch64(target_info()) ?
EIF_HDR_ARCH_ARM64 : 0),
};
g_byte_array_append(buf, (const uint8_t *)&hdr, sizeof(hdr));
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index c15f2b9f084..26003f2b4df 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2888,7 +2888,7 @@ void pci_qdev_property_add_specifics(DeviceClass *dc)
ObjectClass *oc = OBJECT_CLASS(dc);
/* The loadparm property is only supported on s390x */
- if (target_s390x()) {
+ if (target_s390x(target_info())) {
object_class_property_add_str(oc, "loadparm",
pci_qdev_property_get_loadparm,
pci_qdev_property_set_loadparm);
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index a42f7d8e77d..31170e87a33 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -3190,7 +3190,7 @@ static void scsi_property_add_specifics(DeviceClass
*dc)
ObjectClass *oc = OBJECT_CLASS(dc);
/* The loadparm property is only supported on s390x */
- if (target_s390x()) {
+ if (target_s390x(target_info())) {
object_class_property_add_str(oc, "loadparm",
scsi_property_get_loadparm,
scsi_property_set_loadparm);
diff --git a/hw/vfio/migration-multifd.c b/hw/vfio/migration-multifd.c
index a06cbf3c646..3d747b470cc 100644
--- a/hw/vfio/migration-multifd.c
+++ b/hw/vfio/migration-multifd.c
@@ -54,7 +54,7 @@ bool vfio_load_config_after_iter(VFIODevice *vbasedev)
* See commit d329f5032e17 ("vfio: Move the saving of the config space
to
* the right place in VFIO migration").
*/
- return target_base_arm();
+ return target_base_arm(target_info());
}
/* type safety */
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index 2881cec72d9..3383af64859 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -2631,7 +2631,7 @@ static int vhost_user_backend_init(struct vhost_dev
*dev, void *opaque,
return -EINVAL;
}
- const uint64_t vhost_user_max_ram_slots = target_base_ppc() ?
+ const uint64_t vhost_user_max_ram_slots =
target_base_ppc(target_info()) ?
SPAPR_MAX_RAM_SLOTS : VHOST_USER_MAX_RAM_SLOTS;
u->user->memory_slots = MIN(ram_slots,
vhost_user_max_ram_slots);
}
diff --git a/include/qemu/target-info-impl.h
b/include/qemu/target-info-impl.h
index cf42aabbc8b..61404baa4b5 100644
--- a/include/qemu/target-info-impl.h
any way, we can wait the following pull to be merged first
[PULL 00/51] Misc HW/accel patches for 2026-09-03
https://patchew.org/QEMU/[email protected]/
and a better way to deal with it would be appreciated.
I also have patches for riscv needs this.
--
此致
礼
罗勇刚
Yours
sincerely,
Yonggang Luo