SYS_EMU_TARGET__MAX is already 29, nearing the 32-target limit. So increase width of QEMU_ARCH_* masks enums and related types; So that we can add needed Linux user-mode targets to EmuTarget; And also enabled the possibility add more system-mode targets in future.
Signed-off-by: Yonggang Luo <[email protected]> --- include/qemu/base-arch-defs.h | 7 ++++--- monitor/monitor-hmp-internal.h | 2 +- system/arch_init.c | 4 ++-- system/qdev-monitor.c | 2 +- system/vl.c | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/qemu/base-arch-defs.h b/include/qemu/base-arch-defs.h index a6478c2d3ff..f2e3bc54203 100644 --- a/include/qemu/base-arch-defs.h +++ b/include/qemu/base-arch-defs.h @@ -9,7 +9,7 @@ #include "qapi/qapi-types-machine.h" -#define QEMU_ARCH_BIT(target) (1UL << (target)) +#define QEMU_ARCH_BIT(target) (1ULL << (target)) enum { QEMU_ARCH_ALPHA = QEMU_ARCH_BIT(SYS_EMU_TARGET_ALPHA), @@ -44,7 +44,8 @@ enum { QEMU_ARCH_ALL = QEMU_ARCH_BIT(SYS_EMU_TARGET__MAX) - 1, }; -QEMU_BUILD_BUG_ON(SYS_EMU_TARGET__MAX > 32); +/* Keep target-specific masks within qemu_opt_set_number()'s int64_t range. */ +QEMU_BUILD_BUG_ON(SYS_EMU_TARGET__MAX > 63); /** * qemu_arch_available: @@ -52,6 +53,6 @@ QEMU_BUILD_BUG_ON(SYS_EMU_TARGET__MAX > 32); * * Return whether the current target architecture is contained in @arch_bitmask */ -bool qemu_arch_available(uint32_t arch_bitmask); +bool qemu_arch_available(uint64_t arch_bitmask); #endif diff --git a/monitor/monitor-hmp-internal.h b/monitor/monitor-hmp-internal.h index 4e2430551ab..b61d2717076 100644 --- a/monitor/monitor-hmp-internal.h +++ b/monitor/monitor-hmp-internal.h @@ -69,7 +69,7 @@ typedef struct HMPCommand { * Allow to restrict the command for a particular set of * target architectures. */ - uint32_t arch_bitmask; + uint64_t arch_bitmask; bool coroutine; } HMPCommand; diff --git a/system/arch_init.c b/system/arch_init.c index 1ad2f3d6f78..b8362b12a6d 100644 --- a/system/arch_init.c +++ b/system/arch_init.c @@ -26,7 +26,7 @@ #include "qemu/bitops.h" #include "qemu/target-info-qapi.h" -bool qemu_arch_available(uint32_t arch_bitmask) +bool qemu_arch_available(uint64_t arch_bitmask) { - return extract32(arch_bitmask, target_arch(), 1); + return extract64(arch_bitmask, target_arch(), 1); } diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index 8185822daa7..b3ca619f3c9 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -54,7 +54,7 @@ typedef struct QDevAlias { const char *typename; const char *alias; - uint32_t arch_mask; + uint64_t arch_mask; } QDevAlias; /* default virtio transport per architecture */ diff --git a/system/vl.c b/system/vl.c index 468a9fc247a..fbe580746d3 100644 --- a/system/vl.c +++ b/system/vl.c @@ -928,7 +928,7 @@ typedef struct QEMUOption { const char *name; int flags; int index; - uint32_t arch_mask; + uint64_t arch_mask; } QEMUOption; static const QEMUOption qemu_options[] = { -- 2.55.0.windows.3
