Misc HW patches
Few fixes in hw/; also including qtest and replay fixes. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmkmI9YACgkQ4+MsLN6t wN6sSg/9EsnXLpMCfW1HyvgI67Yxb397YCvAxacPqFA+Xm9q6xCo2jKcjBnVI61A 4DkSsYC7OE2wdRzzziiWaXEfydGKHa7rXNGdunYSY52XLk2oElhSS0ykPsUWeFS+ 66+YzSgNgBKHIdDHSVRgoTPDOYW6LSLU+Zfbj40FfApnuRw8AFRB+qVQaXvCV8h/ W6fI4B2ce/0Rv8o0AJDWnN3HP6rZZ+l+eyhj9ODPusAC+OU4nowiJBCoCJa8GwDY KiASI9+mA4jY2vcoCiXG4Bbg1VzOte2TKudZwTwvhqkmGh0S6VejqO/Pn6IKh3j0 H3YrXMDn6h4GrJ3gd3YTseeuEhApYnUP76MWuPy+MjMwp605rMCh/voVkzRvBdmn xXzklO48hpk8cRD3W4kfvJIlrBZIrMSFG8Q4m6S9FXZkGUP9zm2bOCkRqMxfdEdI H1/J/sJ5iPOIwd87yElSV16i9BZyalcWZDYkQLKgtroq1uPaGxUR46mlnhMFKeBP 68Xjh9ux6zOuFwb4FIqbEyyKTMVdGrkHuD267YHEKQo0X0frGjFfdRtrW3zJbMIw vAFsQl2oPAKJ7DpEHae/CeD10piQRb/nTav9UdscaXoIUJdFJ+nPfHNwUkKW30Gw SSmueD2qJcqwzVa36SRhYxwG5+EW2RsN1kL5wkHv3qhRaoEfKJ8= =hq47 -----END PGP SIGNATURE----- Merge tag 'hw-misc-20251125' of https://github.com/philmd/qemu into staging Misc HW patches Few fixes in hw/; also including qtest and replay fixes. # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmkmI9YACgkQ4+MsLN6t # wN6sSg/9EsnXLpMCfW1HyvgI67Yxb397YCvAxacPqFA+Xm9q6xCo2jKcjBnVI61A # 4DkSsYC7OE2wdRzzziiWaXEfydGKHa7rXNGdunYSY52XLk2oElhSS0ykPsUWeFS+ # 66+YzSgNgBKHIdDHSVRgoTPDOYW6LSLU+Zfbj40FfApnuRw8AFRB+qVQaXvCV8h/ # W6fI4B2ce/0Rv8o0AJDWnN3HP6rZZ+l+eyhj9ODPusAC+OU4nowiJBCoCJa8GwDY # KiASI9+mA4jY2vcoCiXG4Bbg1VzOte2TKudZwTwvhqkmGh0S6VejqO/Pn6IKh3j0 # H3YrXMDn6h4GrJ3gd3YTseeuEhApYnUP76MWuPy+MjMwp605rMCh/voVkzRvBdmn # xXzklO48hpk8cRD3W4kfvJIlrBZIrMSFG8Q4m6S9FXZkGUP9zm2bOCkRqMxfdEdI # H1/J/sJ5iPOIwd87yElSV16i9BZyalcWZDYkQLKgtroq1uPaGxUR46mlnhMFKeBP # 68Xjh9ux6zOuFwb4FIqbEyyKTMVdGrkHuD267YHEKQo0X0frGjFfdRtrW3zJbMIw # vAFsQl2oPAKJ7DpEHae/CeD10piQRb/nTav9UdscaXoIUJdFJ+nPfHNwUkKW30Gw # SSmueD2qJcqwzVa36SRhYxwG5+EW2RsN1kL5wkHv3qhRaoEfKJ8= # =hq47 # -----END PGP SIGNATURE----- # gpg: Signature made Tue 25 Nov 2025 01:47:02 PM PST # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [unknown] # 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: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * tag 'hw-misc-20251125' of https://github.com/philmd/qemu: hw/aspeed/{xdma, rtc, sdhci}: Fix endianness to DEVICE_LITTLE_ENDIAN hw/core/machine: Provide a description for aux-ram-share property replay: Improve assert in replay_char_read_all_load() hw/virtio: Use error_setg_file_open() for a better error message hw/scsi: Use error_setg_file_open() for a better error message hw/usb: Convert to qemu_create() for a better error message docs/deprecated: Remove undeprecated SMP description hw/pci: Make msix_init take a uint32_t for nentries qtest: Allow and ignore blank lines in input Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
9ef49528b5
12 changed files with 28 additions and 30 deletions
|
|
@ -54,20 +54,6 @@ as short-form boolean values, and passed to plugins as ``arg_name=on``.
|
|||
However, short-form booleans are deprecated and full explicit ``arg_name=on``
|
||||
form is preferred.
|
||||
|
||||
``-smp`` (Unsupported "parameter=1" SMP configurations) (since 9.0)
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Specified CPU topology parameters must be supported by the machine.
|
||||
|
||||
In the SMP configuration, users should provide the CPU topology parameters that
|
||||
are supported by the target machine.
|
||||
|
||||
However, historically it was allowed for users to specify the unsupported
|
||||
topology parameter as "1", which is meaningless. So support for this kind of
|
||||
configurations (e.g. -smp drawers=1,books=1,clusters=1 for x86 PC machine) is
|
||||
marked deprecated since 9.0, users have to ensure that all the topology members
|
||||
described with -smp are supported by the target machine.
|
||||
|
||||
QEMU Machine Protocol (QMP) commands
|
||||
------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -1204,6 +1204,8 @@ static void machine_class_init(ObjectClass *oc, const void *data)
|
|||
object_class_property_add_bool(oc, "aux-ram-share",
|
||||
machine_get_aux_ram_share,
|
||||
machine_set_aux_ram_share);
|
||||
object_class_property_set_description(oc, "aux-ram-share",
|
||||
"Use anonymous shared memory for auxiliary guest RAMs");
|
||||
#endif
|
||||
|
||||
object_class_property_add_bool(oc, "usb",
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ static void aspeed_xdma_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
static const MemoryRegionOps aspeed_xdma_ops = {
|
||||
.read = aspeed_xdma_read,
|
||||
.write = aspeed_xdma_write,
|
||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
.valid.min_access_size = 4,
|
||||
.valid.max_access_size = 4,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ static void msix_mask_all(struct PCIDevice *dev, unsigned nentries)
|
|||
* also means a programming error, except device assignment, which can check
|
||||
* if a real HW is broken.
|
||||
*/
|
||||
int msix_init(struct PCIDevice *dev, unsigned short nentries,
|
||||
int msix_init(struct PCIDevice *dev, uint32_t nentries,
|
||||
MemoryRegion *table_bar, uint8_t table_bar_nr,
|
||||
unsigned table_offset, MemoryRegion *pba_bar,
|
||||
uint8_t pba_bar_nr, unsigned pba_offset, uint8_t cap_pos,
|
||||
|
|
@ -392,7 +392,7 @@ int msix_init(struct PCIDevice *dev, unsigned short nentries,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int msix_init_exclusive_bar(PCIDevice *dev, unsigned short nentries,
|
||||
int msix_init_exclusive_bar(PCIDevice *dev, uint32_t nentries,
|
||||
uint8_t bar_nr, Error **errp)
|
||||
{
|
||||
int ret;
|
||||
|
|
@ -401,6 +401,12 @@ int msix_init_exclusive_bar(PCIDevice *dev, unsigned short nentries,
|
|||
uint32_t bar_pba_offset = bar_size / 2;
|
||||
uint32_t bar_pba_size = QEMU_ALIGN_UP(nentries, 64) / 8;
|
||||
|
||||
/* Sanity-check nentries before we use it in BAR size calculations */
|
||||
if (nentries < 1 || nentries > PCI_MSIX_FLAGS_QSIZE + 1) {
|
||||
error_setg(errp, "The number of MSI-X vectors is invalid");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Migration compatibility dictates that this remains a 4k
|
||||
* BAR with the vector table in the lower half and PBA in
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ static void aspeed_rtc_reset(DeviceState *d)
|
|||
static const MemoryRegionOps aspeed_rtc_ops = {
|
||||
.read = aspeed_rtc_read,
|
||||
.write = aspeed_rtc_write,
|
||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
static const VMStateDescription vmstate_aspeed_rtc = {
|
||||
|
|
|
|||
|
|
@ -245,8 +245,7 @@ static void vhost_scsi_realize(DeviceState *dev, Error **errp)
|
|||
} else {
|
||||
vhostfd = open("/dev/vhost-scsi", O_RDWR);
|
||||
if (vhostfd < 0) {
|
||||
error_setg(errp, "vhost-scsi: open vhost char device failed: %s",
|
||||
strerror(errno));
|
||||
error_setg_file_open(errp, errno, "/dev/vhost-scsi");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ static void aspeed_sdhci_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
static const MemoryRegionOps aspeed_sdhci_ops = {
|
||||
.read = aspeed_sdhci_read,
|
||||
.write = aspeed_sdhci_write,
|
||||
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
.valid.min_access_size = 4,
|
||||
.valid.max_access_size = 4,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -259,10 +259,9 @@ static void usb_qdev_realize(DeviceState *qdev, Error **errp)
|
|||
}
|
||||
|
||||
if (dev->pcap_filename) {
|
||||
int fd = qemu_open_old(dev->pcap_filename,
|
||||
O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, 0666);
|
||||
int fd = qemu_create(dev->pcap_filename,
|
||||
O_WRONLY | O_TRUNC | O_BINARY, 0666, errp);
|
||||
if (fd < 0) {
|
||||
error_setg(errp, "open %s failed", dev->pcap_filename);
|
||||
usb_qdev_unrealize(qdev);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -153,8 +153,7 @@ static void vhost_vsock_device_realize(DeviceState *dev, Error **errp)
|
|||
} else {
|
||||
vhostfd = open("/dev/vhost-vsock", O_RDWR);
|
||||
if (vhostfd < 0) {
|
||||
error_setg_errno(errp, errno,
|
||||
"vhost-vsock: failed to open vhost device");
|
||||
error_setg_file_open(errp, errno, "/dev/vhost-vsock");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
|
||||
void msix_set_message(PCIDevice *dev, int vector, MSIMessage msg);
|
||||
MSIMessage msix_get_message(PCIDevice *dev, unsigned int vector);
|
||||
int msix_init(PCIDevice *dev, unsigned short nentries,
|
||||
int msix_init(PCIDevice *dev, uint32_t nentries,
|
||||
MemoryRegion *table_bar, uint8_t table_bar_nr,
|
||||
unsigned table_offset, MemoryRegion *pba_bar,
|
||||
uint8_t pba_bar_nr, unsigned pba_offset, uint8_t cap_pos,
|
||||
Error **errp);
|
||||
int msix_init_exclusive_bar(PCIDevice *dev, unsigned short nentries,
|
||||
int msix_init_exclusive_bar(PCIDevice *dev, uint32_t nentries,
|
||||
uint8_t bar_nr, Error **errp);
|
||||
|
||||
void msix_write_config(PCIDevice *dev, uint32_t address, uint32_t val, int len);
|
||||
|
|
|
|||
|
|
@ -126,8 +126,8 @@ int replay_char_read_all_load(uint8_t *buf)
|
|||
int res;
|
||||
replay_get_array(buf, &size);
|
||||
replay_finish_event();
|
||||
assert(size <= INT_MAX);
|
||||
res = (int)size;
|
||||
assert(res >= 0);
|
||||
return res;
|
||||
} else if (replay_next_event_is(EVENT_CHAR_READ_ALL_ERROR)) {
|
||||
int res = replay_get_dword();
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@ static void *qtest_server_send_opaque;
|
|||
* so clients should always handle many async messages before the response
|
||||
* comes in.
|
||||
*
|
||||
* Extra ASCII space characters in command inputs are permitted and ignored.
|
||||
* Lines containing only spaces are permitted and ignored.
|
||||
*
|
||||
* Valid requests
|
||||
* ^^^^^^^^^^^^^^
|
||||
*
|
||||
|
|
@ -367,7 +370,11 @@ static void qtest_process_command(CharFrontend *chr, gchar **words)
|
|||
fprintf(qtest_log_fp, "\n");
|
||||
}
|
||||
|
||||
g_assert(command);
|
||||
if (!command) {
|
||||
/* Input line was blank: ignore it */
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(words[0], "irq_intercept_out") == 0
|
||||
|| strcmp(words[0], "irq_intercept_in") == 0) {
|
||||
DeviceState *dev;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue