* Bugfixes all over the place
* get/set_uint cleanups (Felipe) * Lock guard support (Stefan) * MemoryRegion ownership cleanup (Philippe) * AVX512 optimization for buffer_is_zero (Robert) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQEcBAABAgAGBQJecOZiAAoJEL/70l94x66DgGkH/jpY4IgqlSAAWCgaxfe1n1vg ahSzSLrC8wiJq2Jxbmxn+5BbH6BxQ9ibflsY5bvCY/sTb7UlOFCPkFhQ2iUgplkw ciB5UfgCA6OHpKEhpHhXtzlybtNOlxXNWYJ1SrcVXbRES8f7XdhMKs15mnJJuOOE k/tuZo/44yZRJl0Cv+nkvIFcCVgyu1q0Lln/1MMPngY2r9gt893cY9feTBSSWgnp +7HZr5TXI7mcIytczFKzbdujlG4391DGejKX66IIxGcWg9vXS7TwAStzH1vSKVfJ 73SKZBoCU5gpHHHC+dqVyouMerV+UE+WQPNtF+LCsNgJBw/2NXc1ZgDrtz1OI2c= =+LRX -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging * Bugfixes all over the place * get/set_uint cleanups (Felipe) * Lock guard support (Stefan) * MemoryRegion ownership cleanup (Philippe) * AVX512 optimization for buffer_is_zero (Robert) # gpg: Signature made Tue 17 Mar 2020 15:01:54 GMT # gpg: using RSA key BFFBD25F78C7AE83 # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini/tags/for-upstream: (62 commits) hw/arm: Let devices own the MemoryRegion they create hw/arm: Remove unnecessary memory_region_set_readonly() on ROM alias hw/ppc/ppc405: Use memory_region_init_rom() with read-only regions hw/arm/stm32: Use memory_region_init_rom() with read-only regions hw/char: Let devices own the MemoryRegion they create hw/riscv: Let devices own the MemoryRegion they create hw/dma: Let devices own the MemoryRegion they create hw/display: Let devices own the MemoryRegion they create hw/core: Let devices own the MemoryRegion they create scripts/cocci: Patch to let devices own their MemoryRegions scripts/cocci: Patch to remove unnecessary memory_region_set_readonly() scripts/cocci: Patch to detect potential use of memory_region_init_rom hw/sparc: Use memory_region_init_rom() with read-only regions hw/sh4: Use memory_region_init_rom() with read-only regions hw/riscv: Use memory_region_init_rom() with read-only regions hw/ppc: Use memory_region_init_rom() with read-only regions hw/pci-host: Use memory_region_init_rom() with read-only regions hw/net: Use memory_region_init_rom() with read-only regions hw/m68k: Use memory_region_init_rom() with read-only regions hw/display: Use memory_region_init_rom() with read-only regions ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d649689a8e
116 changed files with 1166 additions and 772 deletions
|
|
@ -152,7 +152,7 @@ typedef struct AcpiSerialPortConsoleRedirection
|
|||
*/
|
||||
struct AcpiRsdtDescriptorRev1 {
|
||||
ACPI_TABLE_HEADER_DEF /* ACPI common table header */
|
||||
uint32_t table_offset_entry[0]; /* Array of pointers to other */
|
||||
uint32_t table_offset_entry[]; /* Array of pointers to other */
|
||||
/* ACPI tables */
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiRsdtDescriptorRev1 AcpiRsdtDescriptorRev1;
|
||||
|
|
@ -162,7 +162,7 @@ typedef struct AcpiRsdtDescriptorRev1 AcpiRsdtDescriptorRev1;
|
|||
*/
|
||||
struct AcpiXsdtDescriptorRev2 {
|
||||
ACPI_TABLE_HEADER_DEF /* ACPI common table header */
|
||||
uint64_t table_offset_entry[0]; /* Array of pointers to other */
|
||||
uint64_t table_offset_entry[]; /* Array of pointers to other */
|
||||
/* ACPI tables */
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiXsdtDescriptorRev2 AcpiXsdtDescriptorRev2;
|
||||
|
|
@ -518,7 +518,7 @@ struct AcpiDmarDeviceScope {
|
|||
struct {
|
||||
uint8_t device;
|
||||
uint8_t function;
|
||||
} path[0];
|
||||
} path[];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiDmarDeviceScope AcpiDmarDeviceScope;
|
||||
|
||||
|
|
@ -530,7 +530,7 @@ struct AcpiDmarHardwareUnit {
|
|||
uint8_t reserved;
|
||||
uint16_t pci_segment; /* The PCI Segment associated with this unit */
|
||||
uint64_t address; /* Base address of remapping hardware register-set */
|
||||
AcpiDmarDeviceScope scope[0];
|
||||
AcpiDmarDeviceScope scope[];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiDmarHardwareUnit AcpiDmarHardwareUnit;
|
||||
|
||||
|
|
@ -541,7 +541,7 @@ struct AcpiDmarRootPortATS {
|
|||
uint8_t flags;
|
||||
uint8_t reserved;
|
||||
uint16_t pci_segment;
|
||||
AcpiDmarDeviceScope scope[0];
|
||||
AcpiDmarDeviceScope scope[];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiDmarRootPortATS AcpiDmarRootPortATS;
|
||||
|
||||
|
|
@ -604,7 +604,7 @@ typedef struct AcpiIortMemoryAccess AcpiIortMemoryAccess;
|
|||
struct AcpiIortItsGroup {
|
||||
ACPI_IORT_NODE_HEADER_DEF
|
||||
uint32_t its_count;
|
||||
uint32_t identifiers[0];
|
||||
uint32_t identifiers[];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiIortItsGroup AcpiIortItsGroup;
|
||||
|
||||
|
|
@ -621,7 +621,7 @@ struct AcpiIortSmmu3 {
|
|||
uint32_t pri_gsiv;
|
||||
uint32_t gerr_gsiv;
|
||||
uint32_t sync_gsiv;
|
||||
AcpiIortIdMapping id_mapping_array[0];
|
||||
AcpiIortIdMapping id_mapping_array[];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiIortSmmu3 AcpiIortSmmu3;
|
||||
|
||||
|
|
@ -630,7 +630,7 @@ struct AcpiIortRC {
|
|||
AcpiIortMemoryAccess memory_properties;
|
||||
uint32_t ats_attribute;
|
||||
uint32_t pci_segment_number;
|
||||
AcpiIortIdMapping id_mapping_array[0];
|
||||
AcpiIortIdMapping id_mapping_array[];
|
||||
} QEMU_PACKED;
|
||||
typedef struct AcpiIortRC AcpiIortRC;
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ typedef struct SMMUDevice {
|
|||
|
||||
typedef struct SMMUPciBus {
|
||||
PCIBus *bus;
|
||||
SMMUDevice *pbdev[0]; /* Parent array is sparse, so dynamically alloc */
|
||||
SMMUDevice *pbdev[]; /* Parent array is sparse, so dynamically alloc */
|
||||
} SMMUPciBus;
|
||||
|
||||
typedef struct SMMUIOTLBKey {
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ typedef struct CPUArchId {
|
|||
*/
|
||||
typedef struct {
|
||||
int len;
|
||||
CPUArchId cpus[0];
|
||||
CPUArchId cpus[];
|
||||
} CPUArchIdList;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -114,7 +114,8 @@ struct VTDAddressSpace {
|
|||
|
||||
struct VTDBus {
|
||||
PCIBus* bus; /* A reference to the bus to provide translation for */
|
||||
VTDAddressSpace *dev_as[0]; /* A table of VTDAddressSpace objects indexed by devfn */
|
||||
/* A table of VTDAddressSpace objects indexed by devfn */
|
||||
VTDAddressSpace *dev_as[];
|
||||
};
|
||||
|
||||
struct VTDIOTLBEntry {
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ typedef struct MDBO {
|
|||
|
||||
typedef struct MDB {
|
||||
MdbHeader header;
|
||||
MDBO mdbo[0];
|
||||
MDBO mdbo[];
|
||||
} QEMU_PACKED MDB;
|
||||
|
||||
typedef struct SclpMsg {
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ typedef struct ReadInfo {
|
|||
uint16_t highest_cpu;
|
||||
uint8_t _reserved5[124 - 122]; /* 122-123 */
|
||||
uint32_t hmfai;
|
||||
struct CPUEntry entries[0];
|
||||
struct CPUEntry entries[];
|
||||
} QEMU_PACKED ReadInfo;
|
||||
|
||||
typedef struct ReadCpuInfo {
|
||||
|
|
@ -142,7 +142,7 @@ typedef struct ReadCpuInfo {
|
|||
uint16_t nr_standby; /* 12-13 */
|
||||
uint16_t offset_standby; /* 14-15 */
|
||||
uint8_t reserved0[24-16]; /* 16-23 */
|
||||
struct CPUEntry entries[0];
|
||||
struct CPUEntry entries[];
|
||||
} QEMU_PACKED ReadCpuInfo;
|
||||
|
||||
typedef struct ReadStorageElementInfo {
|
||||
|
|
@ -151,7 +151,7 @@ typedef struct ReadStorageElementInfo {
|
|||
uint16_t assigned;
|
||||
uint16_t standby;
|
||||
uint8_t _reserved0[16 - 14]; /* 14-15 */
|
||||
uint32_t entries[0];
|
||||
uint32_t entries[];
|
||||
} QEMU_PACKED ReadStorageElementInfo;
|
||||
|
||||
typedef struct AttachStorageElement {
|
||||
|
|
@ -159,7 +159,7 @@ typedef struct AttachStorageElement {
|
|||
uint8_t _reserved0[10 - 8]; /* 8-9 */
|
||||
uint16_t assigned;
|
||||
uint8_t _reserved1[16 - 12]; /* 12-15 */
|
||||
uint32_t entries[0];
|
||||
uint32_t entries[];
|
||||
} QEMU_PACKED AttachStorageElement;
|
||||
|
||||
typedef struct AssignStorage {
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ typedef struct IOMMUDevice {
|
|||
|
||||
typedef struct IOMMUPciBus {
|
||||
PCIBus *bus;
|
||||
IOMMUDevice *pbdev[0]; /* Parent array is sparse, so dynamically alloc */
|
||||
IOMMUDevice *pbdev[]; /* Parent array is sparse, so dynamically alloc */
|
||||
} IOMMUPciBus;
|
||||
|
||||
typedef struct VirtIOIOMMU {
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@
|
|||
#ifndef bit_AVX2
|
||||
#define bit_AVX2 (1 << 5)
|
||||
#endif
|
||||
#ifndef bit_AVX512F
|
||||
#define bit_AVX512F (1 << 16)
|
||||
#endif
|
||||
#ifndef bit_BMI2
|
||||
#define bit_BMI2 (1 << 8)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ qemu_make_lockable(void *x, QemuLockable *lockable)
|
|||
#define QEMU_LOCK_FUNC(x) ((QemuLockUnlockFunc *) \
|
||||
QEMU_GENERIC(x, \
|
||||
(QemuMutex *, qemu_mutex_lock), \
|
||||
(QemuRecMutex *, qemu_rec_mutex_lock), \
|
||||
(CoMutex *, qemu_co_mutex_lock), \
|
||||
(QemuSpin *, qemu_spin_lock), \
|
||||
unknown_lock_type))
|
||||
|
|
@ -57,6 +58,7 @@ qemu_make_lockable(void *x, QemuLockable *lockable)
|
|||
#define QEMU_UNLOCK_FUNC(x) ((QemuLockUnlockFunc *) \
|
||||
QEMU_GENERIC(x, \
|
||||
(QemuMutex *, qemu_mutex_unlock), \
|
||||
(QemuRecMutex *, qemu_rec_mutex_unlock), \
|
||||
(CoMutex *, qemu_co_mutex_unlock), \
|
||||
(QemuSpin *, qemu_spin_unlock), \
|
||||
unknown_lock_type))
|
||||
|
|
@ -65,7 +67,7 @@ qemu_make_lockable(void *x, QemuLockable *lockable)
|
|||
* In C++ it would be different, but then C++ wouldn't need QemuLockable
|
||||
* either...
|
||||
*/
|
||||
#define QEMU_MAKE_LOCKABLE_(x) qemu_make_lockable((x), &(QemuLockable) { \
|
||||
#define QEMU_MAKE_LOCKABLE_(x) (&(QemuLockable) { \
|
||||
.object = (x), \
|
||||
.lock = QEMU_LOCK_FUNC(x), \
|
||||
.unlock = QEMU_UNLOCK_FUNC(x), \
|
||||
|
|
@ -73,12 +75,25 @@ qemu_make_lockable(void *x, QemuLockable *lockable)
|
|||
|
||||
/* QEMU_MAKE_LOCKABLE - Make a polymorphic QemuLockable
|
||||
*
|
||||
* @x: a lock object (currently one of QemuMutex, CoMutex, QemuSpin).
|
||||
* @x: a lock object (currently one of QemuMutex, QemuRecMutex, CoMutex, QemuSpin).
|
||||
*
|
||||
* Returns a QemuLockable object that can be passed around
|
||||
* to a function that can operate with locks of any kind, or
|
||||
* NULL if @x is %NULL.
|
||||
*/
|
||||
#define QEMU_MAKE_LOCKABLE(x) \
|
||||
QEMU_GENERIC(x, \
|
||||
(QemuLockable *, (x)), \
|
||||
qemu_make_lockable((x), QEMU_MAKE_LOCKABLE_(x)))
|
||||
|
||||
/* QEMU_MAKE_LOCKABLE_NONNULL - Make a polymorphic QemuLockable
|
||||
*
|
||||
* @x: a lock object (currently one of QemuMutex, QemuRecMutex, CoMutex, QemuSpin).
|
||||
*
|
||||
* Returns a QemuLockable object that can be passed around
|
||||
* to a function that can operate with locks of any kind.
|
||||
*/
|
||||
#define QEMU_MAKE_LOCKABLE(x) \
|
||||
#define QEMU_MAKE_LOCKABLE_NONNULL(x) \
|
||||
QEMU_GENERIC(x, \
|
||||
(QemuLockable *, (x)), \
|
||||
QEMU_MAKE_LOCKABLE_(x))
|
||||
|
|
@ -93,4 +108,69 @@ static inline void qemu_lockable_unlock(QemuLockable *x)
|
|||
x->unlock(x->object);
|
||||
}
|
||||
|
||||
static inline QemuLockable *qemu_lockable_auto_lock(QemuLockable *x)
|
||||
{
|
||||
qemu_lockable_lock(x);
|
||||
return x;
|
||||
}
|
||||
|
||||
static inline void qemu_lockable_auto_unlock(QemuLockable *x)
|
||||
{
|
||||
if (x) {
|
||||
qemu_lockable_unlock(x);
|
||||
}
|
||||
}
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(QemuLockable, qemu_lockable_auto_unlock)
|
||||
|
||||
#define WITH_QEMU_LOCK_GUARD_(x, var) \
|
||||
for (g_autoptr(QemuLockable) var = \
|
||||
qemu_lockable_auto_lock(QEMU_MAKE_LOCKABLE_NONNULL((x))); \
|
||||
var; \
|
||||
qemu_lockable_auto_unlock(var), var = NULL)
|
||||
|
||||
/**
|
||||
* WITH_QEMU_LOCK_GUARD - Lock a lock object for scope
|
||||
*
|
||||
* @x: a lock object (currently one of QemuMutex, CoMutex, QemuSpin).
|
||||
*
|
||||
* This macro defines a lock scope such that entering the scope takes the lock
|
||||
* and leaving the scope releases the lock. Return statements are allowed
|
||||
* within the scope and release the lock. Break and continue statements leave
|
||||
* the scope early and release the lock.
|
||||
*
|
||||
* WITH_QEMU_LOCK_GUARD(&mutex) {
|
||||
* ...
|
||||
* if (error) {
|
||||
* return; <-- mutex is automatically unlocked
|
||||
* }
|
||||
*
|
||||
* if (early_exit) {
|
||||
* break; <-- leave this scope early
|
||||
* }
|
||||
* ...
|
||||
* }
|
||||
*/
|
||||
#define WITH_QEMU_LOCK_GUARD(x) \
|
||||
WITH_QEMU_LOCK_GUARD_((x), qemu_lockable_auto##__COUNTER__)
|
||||
|
||||
/**
|
||||
* QEMU_LOCK_GUARD - Lock an object until the end of the scope
|
||||
*
|
||||
* @x: a lock object (currently one of QemuMutex, CoMutex, QemuSpin).
|
||||
*
|
||||
* This macro takes a lock until the end of the scope. Return statements
|
||||
* release the lock.
|
||||
*
|
||||
* ... <-- mutex not locked
|
||||
* QEMU_LOCK_GUARD(&mutex); <-- mutex locked from here onwards
|
||||
* ...
|
||||
* if (error) {
|
||||
* return; <-- mutex is automatically unlocked
|
||||
* }
|
||||
*/
|
||||
#define QEMU_LOCK_GUARD(x) \
|
||||
g_autoptr(QemuLockable) qemu_lockable_auto##__COUNTER__ = \
|
||||
qemu_lockable_auto_lock(QEMU_MAKE_LOCKABLE((x)))
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1664,69 +1664,101 @@ ObjectProperty *object_class_property_add_tm(ObjectClass *klass,
|
|||
void (*get)(Object *, struct tm *, Error **),
|
||||
Error **errp);
|
||||
|
||||
typedef enum {
|
||||
/* Automatically add a getter to the property */
|
||||
OBJ_PROP_FLAG_READ = 1 << 0,
|
||||
/* Automatically add a setter to the property */
|
||||
OBJ_PROP_FLAG_WRITE = 1 << 1,
|
||||
/* Automatically add a getter and a setter to the property */
|
||||
OBJ_PROP_FLAG_READWRITE = (OBJ_PROP_FLAG_READ | OBJ_PROP_FLAG_WRITE),
|
||||
} ObjectPropertyFlags;
|
||||
|
||||
/**
|
||||
* object_property_add_uint8_ptr:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @v: pointer to value
|
||||
* @flags: bitwise-or'd ObjectPropertyFlags
|
||||
* @errp: if an error occurs, a pointer to an area to store the error
|
||||
*
|
||||
* Add an integer property in memory. This function will add a
|
||||
* property of type 'uint8'.
|
||||
*/
|
||||
void object_property_add_uint8_ptr(Object *obj, const char *name,
|
||||
const uint8_t *v, Error **errp);
|
||||
const uint8_t *v, ObjectPropertyFlags flags,
|
||||
Error **errp);
|
||||
|
||||
ObjectProperty *object_class_property_add_uint8_ptr(ObjectClass *klass,
|
||||
const char *name,
|
||||
const uint8_t *v, Error **errp);
|
||||
const uint8_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_uint16_ptr:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @v: pointer to value
|
||||
* @flags: bitwise-or'd ObjectPropertyFlags
|
||||
* @errp: if an error occurs, a pointer to an area to store the error
|
||||
*
|
||||
* Add an integer property in memory. This function will add a
|
||||
* property of type 'uint16'.
|
||||
*/
|
||||
void object_property_add_uint16_ptr(Object *obj, const char *name,
|
||||
const uint16_t *v, Error **errp);
|
||||
const uint16_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **errp);
|
||||
|
||||
ObjectProperty *object_class_property_add_uint16_ptr(ObjectClass *klass,
|
||||
const char *name,
|
||||
const uint16_t *v, Error **errp);
|
||||
const uint16_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_uint32_ptr:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @v: pointer to value
|
||||
* @flags: bitwise-or'd ObjectPropertyFlags
|
||||
* @errp: if an error occurs, a pointer to an area to store the error
|
||||
*
|
||||
* Add an integer property in memory. This function will add a
|
||||
* property of type 'uint32'.
|
||||
*/
|
||||
void object_property_add_uint32_ptr(Object *obj, const char *name,
|
||||
const uint32_t *v, Error **errp);
|
||||
const uint32_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **errp);
|
||||
|
||||
ObjectProperty *object_class_property_add_uint32_ptr(ObjectClass *klass,
|
||||
const char *name,
|
||||
const uint32_t *v, Error **errp);
|
||||
const uint32_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **errp);
|
||||
|
||||
/**
|
||||
* object_property_add_uint64_ptr:
|
||||
* @obj: the object to add a property to
|
||||
* @name: the name of the property
|
||||
* @v: pointer to value
|
||||
* @flags: bitwise-or'd ObjectPropertyFlags
|
||||
* @errp: if an error occurs, a pointer to an area to store the error
|
||||
*
|
||||
* Add an integer property in memory. This function will add a
|
||||
* property of type 'uint64'.
|
||||
*/
|
||||
void object_property_add_uint64_ptr(Object *obj, const char *name,
|
||||
const uint64_t *v, Error **errp);
|
||||
const uint64_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **Errp);
|
||||
|
||||
ObjectProperty *object_class_property_add_uint64_ptr(ObjectClass *klass,
|
||||
const char *name,
|
||||
const uint64_t *v, Error **errp);
|
||||
const uint64_t *v,
|
||||
ObjectPropertyFlags flags,
|
||||
Error **Errp);
|
||||
|
||||
/**
|
||||
* object_property_add_alias:
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ typedef struct CryptoDevBackendSymOpInfo {
|
|||
uint8_t *dst;
|
||||
uint8_t *aad_data;
|
||||
uint8_t *digest_result;
|
||||
uint8_t data[0];
|
||||
uint8_t data[];
|
||||
} CryptoDevBackendSymOpInfo;
|
||||
|
||||
typedef struct CryptoDevBackendClass {
|
||||
|
|
|
|||
|
|
@ -35,4 +35,11 @@ int whpx_enabled(void);
|
|||
|
||||
#endif /* CONFIG_WHPX */
|
||||
|
||||
/* state subset only touched by the VCPU itself during runtime */
|
||||
#define WHPX_SET_RUNTIME_STATE 1
|
||||
/* state subset modified during VCPU reset */
|
||||
#define WHPX_SET_RESET_STATE 2
|
||||
/* full state set, modified during initialization or on vmload */
|
||||
#define WHPX_SET_FULL_STATE 3
|
||||
|
||||
#endif /* QEMU_WHPX_H */
|
||||
|
|
|
|||
|
|
@ -267,7 +267,7 @@ struct TCGLabel {
|
|||
typedef struct TCGPool {
|
||||
struct TCGPool *next;
|
||||
int size;
|
||||
uint8_t data[0] __attribute__ ((aligned));
|
||||
uint8_t data[] __attribute__ ((aligned));
|
||||
} TCGPool;
|
||||
|
||||
#define TCG_POOL_CHUNK_SIZE 32768
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue