- Compile-test the Windows installer in the Gitlab-CI

- Fix endianess detection problem with LTO in "configure"
 - Fix two abort()s in the vmxnet code
 - Fix crash with x-remote machine and IDE devices
 -----BEGIN PGP SIGNATURE-----
 
 iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmD1SiARHHRodXRoQHJl
 ZGhhdC5jb20ACgkQLtnXdP5wLbVMaQ/8Dlwc1P4kPsbcBJxinZ4SAGRXH5+PKRf1
 HTpIRnxY1oFFMzbkFNaWj0bt/UtQmqB0k85CeQHAwTamfkAZf8NRaq5DkPvUXJqD
 8e9X4rY66EFZ2dQ3vXxnKYit9IZUV4ZR2mSzocYvELTHibH4wzXLmMmGAmlS19xC
 gu1WG4//IgZ693EGTn/cSsoIB0L87SGEUvLB6aBrGLVXRge8X+UD+axETkglWZo0
 78QgTWGF+hGuTvu70/zONyotPzIfWmmIYHVcVJfaO/3MMIOt95JoeFXPeY7znv58
 hTVgnbQ9e67qPLt2uCJV3zdBRQ4x7Mo5SGggzL+qE576tvHiF/i/tleXEQOD6l8k
 FsXW1/pcnmBocmOB54lZkIxpirh9zITO+tSW8EIHvv1SidqXuSDq0ZKMy9amAQzC
 gsF9cGY/6Hs4hHFhKw6jiQH+vaTB8iQGdAcE66mO7l0p2ujR5/R9SdCymb915TDv
 euoyK3RidfIujfysb7EvimGX/aKvagcSBMVlxPaayPOp0+X/LANSr1JnE3kh5YJS
 HfA2jpHRm7bqUAsgHe1fDB05pIle4atyH4wyiTsm0R1Nw39WtS21Cu3zEvvltTmb
 UD//FBM9VwaGs/EvAGbLN/6E1zNiQYQKbq0OPs3/eco6FqPiKJiGXKluRE+2i8oQ
 BP9am3fJBBY=
 =Xzo/
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/thuth-gitlab/tags/pull-request-2021-07-19' into staging

- Compile-test the Windows installer in the Gitlab-CI
- Fix endianess detection problem with LTO in "configure"
- Fix two abort()s in the vmxnet code
- Fix crash with x-remote machine and IDE devices

# gpg: Signature made Mon 19 Jul 2021 10:47:12 BST
# gpg:                using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg:                issuer "thuth@redhat.com"
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full]
# gpg:                 aka "Thomas Huth <thuth@redhat.com>" [full]
# gpg:                 aka "Thomas Huth <huth@tuxfamily.org>" [full]
# gpg:                 aka "Thomas Huth <th.huth@posteo.de>" [unknown]
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3  EAB9 2ED9 D774 FE70 2DB5

* remotes/thuth-gitlab/tags/pull-request-2021-07-19:
  hw/ide: Fix crash when plugging a piix3-ide device into the x-remote machine
  hw/net/net_tx_pkt: Fix crash detected by fuzzer
  hw/net/vmxnet3: Do not abort if the guest is trying to use an invalid TX queue
  configure: Fix endianess test with LTO
  ci: build & store windows installer

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2021-07-19 11:34:08 +01:00
commit 7457b407ed
11 changed files with 81 additions and 34 deletions

View File

@ -11,6 +11,11 @@
i386-softmmu microblaze-softmmu mips-softmmu mipsel-softmmu i386-softmmu microblaze-softmmu mips-softmmu mipsel-softmmu
mips64-softmmu ppc-softmmu sh4-softmmu xtensa-softmmu" mips64-softmmu ppc-softmmu sh4-softmmu xtensa-softmmu"
- make -j$(expr $(nproc) + 1) all check-build $MAKE_CHECK_ARGS - make -j$(expr $(nproc) + 1) all check-build $MAKE_CHECK_ARGS
- if grep -q "EXESUF=.exe" config-host.mak;
then make installer;
version="$(git describe --match v[0-9]*)";
mv -v qemu-setup*.exe qemu-setup-${version}.exe;
fi
# Job to cross-build specific accelerators. # Job to cross-build specific accelerators.
# #

View File

@ -160,6 +160,9 @@ cross-win32-system:
job: win32-fedora-cross-container job: win32-fedora-cross-container
variables: variables:
IMAGE: fedora-win32-cross IMAGE: fedora-win32-cross
artifacts:
paths:
- build/qemu-setup*.exe
cross-win64-system: cross-win64-system:
extends: .cross_system_build_job extends: .cross_system_build_job
@ -167,6 +170,9 @@ cross-win64-system:
job: win64-fedora-cross-container job: win64-fedora-cross-container
variables: variables:
IMAGE: fedora-win64-cross IMAGE: fedora-win64-cross
artifacts:
paths:
- build/qemu-setup*.exe
cross-amd64-xen-only: cross-amd64-xen-only:
extends: .cross_accel_build_job extends: .cross_accel_build_job

15
configure vendored
View File

@ -2365,24 +2365,27 @@ feature_not_found() {
# --- # ---
# big/little endian test # big/little endian test
cat > $TMPC << EOF cat > $TMPC << EOF
#include <stdio.h>
short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
extern int foo(short *, short *); int main(int argc, char *argv[])
int main(int argc, char *argv[]) { {
return foo(big_endian, little_endian); return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
} }
EOF EOF
if compile_object ; then if compile_prog ; then
if strings -a $TMPO | grep -q BiGeNdIaN ; then if strings -a $TMPE | grep -q BiGeNdIaN ; then
bigendian="yes" bigendian="yes"
elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
bigendian="no" bigendian="no"
else else
echo big/little test failed echo big/little test failed
exit 1
fi fi
else else
echo big/little test failed echo big/little test failed
exit 1
fi fi
########################################## ##########################################

View File

@ -50,15 +50,19 @@ static const MemoryRegionPortio ide_portio2_list[] = {
PORTIO_END_OF_LIST(), PORTIO_END_OF_LIST(),
}; };
void ide_init_ioport(IDEBus *bus, ISADevice *dev, int iobase, int iobase2) int ide_init_ioport(IDEBus *bus, ISADevice *dev, int iobase, int iobase2)
{ {
int ret;
/* ??? Assume only ISA and PCI configurations, and that the PCI-ISA /* ??? Assume only ISA and PCI configurations, and that the PCI-ISA
bridge has been setup properly to always register with ISA. */ bridge has been setup properly to always register with ISA. */
isa_register_portio_list(dev, &bus->portio_list, ret = isa_register_portio_list(dev, &bus->portio_list,
iobase, ide_portio_list, bus, "ide"); iobase, ide_portio_list, bus, "ide");
if (iobase2) { if (ret == 0 && iobase2) {
isa_register_portio_list(dev, &bus->portio2_list, ret = isa_register_portio_list(dev, &bus->portio2_list,
iobase2, ide_portio2_list, bus, "ide"); iobase2, ide_portio2_list, bus, "ide");
} }
return ret;
} }

View File

@ -26,6 +26,7 @@
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "hw/pci/pci.h" #include "hw/pci/pci.h"
#include "migration/vmstate.h" #include "migration/vmstate.h"
#include "qapi/error.h"
#include "qemu/module.h" #include "qemu/module.h"
#include "sysemu/block-backend.h" #include "sysemu/block-backend.h"
#include "sysemu/blockdev.h" #include "sysemu/blockdev.h"
@ -123,7 +124,8 @@ static void piix_ide_reset(DeviceState *dev)
pci_conf[0x20] = 0x01; /* BMIBA: 20-23h */ pci_conf[0x20] = 0x01; /* BMIBA: 20-23h */
} }
static void pci_piix_init_ports(PCIIDEState *d) { static int pci_piix_init_ports(PCIIDEState *d)
{
static const struct { static const struct {
int iobase; int iobase;
int iobase2; int iobase2;
@ -132,24 +134,30 @@ static void pci_piix_init_ports(PCIIDEState *d) {
{0x1f0, 0x3f6, 14}, {0x1f0, 0x3f6, 14},
{0x170, 0x376, 15}, {0x170, 0x376, 15},
}; };
int i; int i, ret;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(d), i, 2); ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(d), i, 2);
ide_init_ioport(&d->bus[i], NULL, port_info[i].iobase, ret = ide_init_ioport(&d->bus[i], NULL, port_info[i].iobase,
port_info[i].iobase2); port_info[i].iobase2);
if (ret) {
return ret;
}
ide_init2(&d->bus[i], isa_get_irq(NULL, port_info[i].isairq)); ide_init2(&d->bus[i], isa_get_irq(NULL, port_info[i].isairq));
bmdma_init(&d->bus[i], &d->bmdma[i], d); bmdma_init(&d->bus[i], &d->bmdma[i], d);
d->bmdma[i].bus = &d->bus[i]; d->bmdma[i].bus = &d->bus[i];
ide_register_restart_cb(&d->bus[i]); ide_register_restart_cb(&d->bus[i]);
} }
return 0;
} }
static void pci_piix_ide_realize(PCIDevice *dev, Error **errp) static void pci_piix_ide_realize(PCIDevice *dev, Error **errp)
{ {
PCIIDEState *d = PCI_IDE(dev); PCIIDEState *d = PCI_IDE(dev);
uint8_t *pci_conf = dev->config; uint8_t *pci_conf = dev->config;
int rc;
pci_conf[PCI_CLASS_PROG] = 0x80; // legacy ATA mode pci_conf[PCI_CLASS_PROG] = 0x80; // legacy ATA mode
@ -158,7 +166,11 @@ static void pci_piix_ide_realize(PCIDevice *dev, Error **errp)
vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d); vmstate_register(VMSTATE_IF(dev), 0, &vmstate_ide_pci, d);
pci_piix_init_ports(d); rc = pci_piix_init_ports(d);
if (rc) {
error_setg_errno(errp, -rc, "Failed to realize %s",
object_get_typename(OBJECT(dev)));
}
} }
int pci_piix3_xen_ide_unplug(DeviceState *dev, bool aux) int pci_piix3_xen_ide_unplug(DeviceState *dev, bool aux)

View File

@ -131,13 +131,17 @@ void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start)
isa_init_ioport(dev, start); isa_init_ioport(dev, start);
} }
void isa_register_portio_list(ISADevice *dev, int isa_register_portio_list(ISADevice *dev,
PortioList *piolist, uint16_t start, PortioList *piolist, uint16_t start,
const MemoryRegionPortio *pio_start, const MemoryRegionPortio *pio_start,
void *opaque, const char *name) void *opaque, const char *name)
{ {
assert(piolist && !piolist->owner); assert(piolist && !piolist->owner);
if (!isabus) {
return -ENODEV;
}
/* START is how we should treat DEV, regardless of the actual /* START is how we should treat DEV, regardless of the actual
contents of the portio array. This is how the old code contents of the portio array. This is how the old code
actually handled e.g. the FDC device. */ actually handled e.g. the FDC device. */
@ -145,6 +149,8 @@ void isa_register_portio_list(ISADevice *dev,
portio_list_init(piolist, OBJECT(dev), pio_start, opaque, name); portio_list_init(piolist, OBJECT(dev), pio_start, opaque, name);
portio_list_add(piolist, isabus->address_space_io, start); portio_list_add(piolist, isabus->address_space_io, start);
return 0;
} }
static void isa_device_init(Object *obj) static void isa_device_init(Object *obj)

View File

@ -450,11 +450,13 @@ void net_tx_pkt_reset(struct NetTxPkt *pkt)
pkt->payload_len = 0; pkt->payload_len = 0;
pkt->payload_frags = 0; pkt->payload_frags = 0;
if (pkt->max_raw_frags > 0) {
assert(pkt->raw); assert(pkt->raw);
for (i = 0; i < pkt->raw_frags; i++) { for (i = 0; i < pkt->raw_frags; i++) {
assert(pkt->raw[i].iov_base); assert(pkt->raw[i].iov_base);
pci_dma_unmap(pkt->pci_dev, pkt->raw[i].iov_base, pkt->raw[i].iov_len, pci_dma_unmap(pkt->pci_dev, pkt->raw[i].iov_base,
DMA_DIRECTION_TO_DEVICE, 0); pkt->raw[i].iov_len, DMA_DIRECTION_TO_DEVICE, 0);
}
} }
pkt->raw_frags = 0; pkt->raw_frags = 0;

View File

@ -23,6 +23,7 @@
#include "net/checksum.h" #include "net/checksum.h"
#include "sysemu/sysemu.h" #include "sysemu/sysemu.h"
#include "qemu/bswap.h" #include "qemu/bswap.h"
#include "qemu/log.h"
#include "qemu/module.h" #include "qemu/module.h"
#include "hw/pci/msix.h" #include "hw/pci/msix.h"
#include "hw/pci/msi.h" #include "hw/pci/msi.h"
@ -1093,8 +1094,12 @@ vmxnet3_io_bar0_write(void *opaque, hwaddr addr,
int tx_queue_idx = int tx_queue_idx =
VMW_MULTIREG_IDX_BY_ADDR(addr, VMXNET3_REG_TXPROD, VMW_MULTIREG_IDX_BY_ADDR(addr, VMXNET3_REG_TXPROD,
VMXNET3_REG_ALIGN); VMXNET3_REG_ALIGN);
assert(tx_queue_idx <= s->txq_num); if (tx_queue_idx <= s->txq_num) {
vmxnet3_process_tx_queue(s, tx_queue_idx); vmxnet3_process_tx_queue(s, tx_queue_idx);
} else {
qemu_log_mask(LOG_GUEST_ERROR, "vmxnet3: Illegal TX queue %d/%d\n",
tx_queue_idx, s->txq_num);
}
return; return;
} }

View File

@ -624,7 +624,7 @@ int ide_init_drive(IDEState *s, BlockBackend *blk, IDEDriveKind kind,
int chs_trans, Error **errp); int chs_trans, Error **errp);
void ide_init2(IDEBus *bus, qemu_irq irq); void ide_init2(IDEBus *bus, qemu_irq irq);
void ide_exit(IDEState *s); void ide_exit(IDEState *s);
void ide_init_ioport(IDEBus *bus, ISADevice *isa, int iobase, int iobase2); int ide_init_ioport(IDEBus *bus, ISADevice *isa, int iobase, int iobase2);
void ide_register_restart_cb(IDEBus *bus); void ide_register_restart_cb(IDEBus *bus);
void ide_exec_cmd(IDEBus *bus, uint32_t val); void ide_exec_cmd(IDEBus *bus, uint32_t val);

View File

@ -132,8 +132,11 @@ void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start);
* @portio: the ports, sorted by offset. * @portio: the ports, sorted by offset.
* @opaque: passed into the portio callbacks. * @opaque: passed into the portio callbacks.
* @name: passed into memory_region_init_io. * @name: passed into memory_region_init_io.
*
* Returns: 0 on success, negative error code otherwise (e.g. if the
* ISA bus is not available)
*/ */
void isa_register_portio_list(ISADevice *dev, int isa_register_portio_list(ISADevice *dev,
PortioList *piolist, PortioList *piolist,
uint16_t start, uint16_t start,
const MemoryRegionPortio *portio, const MemoryRegionPortio *portio,

View File

@ -13,6 +13,7 @@ ENV PACKAGES \
hostname \ hostname \
make \ make \
meson \ meson \
mingw32-nsis \
mingw64-bzip2 \ mingw64-bzip2 \
mingw64-curl \ mingw64-curl \
mingw64-glib2 \ mingw64-glib2 \