mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 18:44:58 -06:00
* hot-unplug fixes for ioport
* purge qatomic_mb_read/set from monitor * build system fixes * OHCI fix from gitlab * provide EPYC-Rome CPU model not susceptible to XSAVES erratum -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmRvGpEUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroOa/Af/WS5/tmIlEYgH7UOPERQXNqf7+Jwj bA2wgqv3ZoQwcgp5f4EVjfA8ABfpGxLZy6xIdUSbWANb8lDJNuh/nPd/em3rWUAU LnJGGdo1vF31gfsVQnlzb7hJi3ur+e2f8JqkRVskDCk3a7YY44OCN42JdKWLrN9u CFf2zYqxMqXHjrYrY0Kx2oTkfGDZrfwUlx0vM4dHb8IEoxaplfDd8lJXQzjO4htr 3nPBPjQ+h08EeC7mObH4XoJE0omzovR10GkBo8K4q952xGOQ041Y/2YY7JwLfx0D na7IanVo+ZAmvTJZoJFSBwNnXkTMHvDH5+Hc45NSTsDBtz0YJhRxPw/z/A== =A5Lp -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * hot-unplug fixes for ioport * purge qatomic_mb_read/set from monitor * build system fixes * OHCI fix from gitlab * provide EPYC-Rome CPU model not susceptible to XSAVES erratum # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmRvGpEUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroOa/Af/WS5/tmIlEYgH7UOPERQXNqf7+Jwj # bA2wgqv3ZoQwcgp5f4EVjfA8ABfpGxLZy6xIdUSbWANb8lDJNuh/nPd/em3rWUAU # LnJGGdo1vF31gfsVQnlzb7hJi3ur+e2f8JqkRVskDCk3a7YY44OCN42JdKWLrN9u # CFf2zYqxMqXHjrYrY0Kx2oTkfGDZrfwUlx0vM4dHb8IEoxaplfDd8lJXQzjO4htr # 3nPBPjQ+h08EeC7mObH4XoJE0omzovR10GkBo8K4q952xGOQ041Y/2YY7JwLfx0D # na7IanVo+ZAmvTJZoJFSBwNnXkTMHvDH5+Hc45NSTsDBtz0YJhRxPw/z/A== # =A5Lp # -----END PGP SIGNATURE----- # gpg: Signature made Thu 25 May 2023 01:21:37 AM PDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [undefined] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # 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 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: monitor: do not use mb_read/mb_set monitor: extract request dequeuing to a new function monitor: introduce qmp_dispatcher_co_wake monitor: cleanup fetching of QMP requests monitor: cleanup detection of qmp_dispatcher_co shutting down monitor: do not use mb_read/mb_set for suspend_cnt monitor: add more *_locked() functions monitor: allow calling monitor_resume under mon_lock monitor: use QEMU_LOCK_GUARD a bit more softmmu/ioport.c: make MemoryRegionPortioList owner of portio_list MemoryRegions softmmu/ioport.c: QOMify MemoryRegionPortioList softmmu/ioport.c: allocate MemoryRegionPortioList ports on the heap usb/ohci: Set pad to 0 after frame update meson: move -no-pie from linker to compiler meson: fix rule for qemu-ga installer meson.build: Fix glib -Wno-unused-function workaround target/i386: EPYC-Rome model without XSAVES Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
6ad2c71c23
12 changed files with 218 additions and 131 deletions
|
@ -32,11 +32,16 @@
|
|||
#include "exec/address-spaces.h"
|
||||
#include "trace.h"
|
||||
|
||||
typedef struct MemoryRegionPortioList {
|
||||
struct MemoryRegionPortioList {
|
||||
Object obj;
|
||||
|
||||
MemoryRegion mr;
|
||||
void *portio_opaque;
|
||||
MemoryRegionPortio ports[];
|
||||
} MemoryRegionPortioList;
|
||||
MemoryRegionPortio *ports;
|
||||
};
|
||||
|
||||
#define TYPE_MEMORY_REGION_PORTIO_LIST "memory-region-portio-list"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(MemoryRegionPortioList, MEMORY_REGION_PORTIO_LIST)
|
||||
|
||||
static uint64_t unassigned_io_read(void *opaque, hwaddr addr, unsigned size)
|
||||
{
|
||||
|
@ -147,7 +152,7 @@ void portio_list_destroy(PortioList *piolist)
|
|||
for (i = 0; i < piolist->nr; ++i) {
|
||||
mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr);
|
||||
object_unparent(OBJECT(&mrpio->mr));
|
||||
g_free(mrpio);
|
||||
object_unref(mrpio);
|
||||
}
|
||||
g_free(piolist->regions);
|
||||
}
|
||||
|
@ -224,12 +229,15 @@ static void portio_list_add_1(PortioList *piolist,
|
|||
unsigned off_low, unsigned off_high)
|
||||
{
|
||||
MemoryRegionPortioList *mrpio;
|
||||
Object *owner;
|
||||
char *name;
|
||||
unsigned i;
|
||||
|
||||
/* Copy the sub-list and null-terminate it. */
|
||||
mrpio = g_malloc0(sizeof(MemoryRegionPortioList) +
|
||||
sizeof(MemoryRegionPortio) * (count + 1));
|
||||
mrpio = MEMORY_REGION_PORTIO_LIST(
|
||||
object_new(TYPE_MEMORY_REGION_PORTIO_LIST));
|
||||
mrpio->portio_opaque = piolist->opaque;
|
||||
mrpio->ports = g_malloc0(sizeof(MemoryRegionPortio) * (count + 1));
|
||||
memcpy(mrpio->ports, pio_init, sizeof(MemoryRegionPortio) * count);
|
||||
memset(mrpio->ports + count, 0, sizeof(MemoryRegionPortio));
|
||||
|
||||
|
@ -239,8 +247,25 @@ static void portio_list_add_1(PortioList *piolist,
|
|||
mrpio->ports[i].base = start + off_low;
|
||||
}
|
||||
|
||||
memory_region_init_io(&mrpio->mr, piolist->owner, &portio_ops, mrpio,
|
||||
/*
|
||||
* The MemoryRegion owner is the MemoryRegionPortioList since that manages
|
||||
* the lifecycle via the refcount
|
||||
*/
|
||||
memory_region_init_io(&mrpio->mr, OBJECT(mrpio), &portio_ops, mrpio,
|
||||
piolist->name, off_high - off_low);
|
||||
|
||||
/* Reparent the MemoryRegion to the piolist owner */
|
||||
object_ref(&mrpio->mr);
|
||||
object_unparent(OBJECT(&mrpio->mr));
|
||||
if (!piolist->owner) {
|
||||
owner = container_get(qdev_get_machine(), "/unattached");
|
||||
} else {
|
||||
owner = piolist->owner;
|
||||
}
|
||||
name = g_strdup_printf("%s[*]", piolist->name);
|
||||
object_property_add_child(owner, name, OBJECT(&mrpio->mr));
|
||||
g_free(name);
|
||||
|
||||
if (piolist->flush_coalesced_mmio) {
|
||||
memory_region_set_flush_coalesced(&mrpio->mr);
|
||||
}
|
||||
|
@ -297,3 +322,25 @@ void portio_list_del(PortioList *piolist)
|
|||
memory_region_del_subregion(piolist->address_space, &mrpio->mr);
|
||||
}
|
||||
}
|
||||
|
||||
static void memory_region_portio_list_finalize(Object *obj)
|
||||
{
|
||||
MemoryRegionPortioList *mrpio = MEMORY_REGION_PORTIO_LIST(obj);
|
||||
|
||||
object_unref(&mrpio->mr);
|
||||
g_free(mrpio->ports);
|
||||
}
|
||||
|
||||
static const TypeInfo memory_region_portio_list_info = {
|
||||
.parent = TYPE_OBJECT,
|
||||
.name = TYPE_MEMORY_REGION_PORTIO_LIST,
|
||||
.instance_size = sizeof(MemoryRegionPortioList),
|
||||
.instance_finalize = memory_region_portio_list_finalize,
|
||||
};
|
||||
|
||||
static void ioport_register_types(void)
|
||||
{
|
||||
type_register_static(&memory_region_portio_list_info);
|
||||
}
|
||||
|
||||
type_init(ioport_register_types)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue