- Some fixes for various tests
- Improve wordings in some files -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmLn6aYRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbWekg/+NVIT1jp3tcbfPIE6pB0vI/AhqN3i2hUd zfJ4V3rSe5tg54JpmuuSt542mp4BDM9bPfYcY/DYESWEtW0c9wv80iP/5LFdJF0G GYtk7Q4pRXvB32kF0v9OxjCEGPUeEqSRrDrsI/Ify5evEIhr55oHPnDjN/US1Bx+ TIuVfmyz8jhSPHsUvZzfVyFxkHre1+BWDxgM3zxoHFIaWEscIPE1KhwRILbKIxWx MHpL8JLAneGFwljQoUAMCl7GzHkVna59RhqkbBJ+8iTaNGipQj9FhHZBo2CulO0J SR7scWowYN8Jt2FNMe3tcKM2xQn/2Fg2TEK4sp6q+hCXhJuvFfWFHBiFYTNpagFA LGgZmPfDr4uZtMEqY4AdEZdL14YZcoM9E/RpW7GhSvMHy73wOj16O8luH1bU0jtG 6X1VvAZlw8/Son1Tbq2CC6WejlMfJFXSzF6Fy6M7SflMPW44vJOs5uKdW405MYjE Pksbfz1rwoNfK+1qBNQop7SccgDRvPtlLf3lDAU9V/JHWVEITs1KTfyS+46U8jKA 9SVBzKuTpVd+aXvMgvMAmmqnyvUBPHJ9KcFq4vHNbIETsGaQsXu0Q6waBmpcK8YB KUL/g0EsdfhkpVVgKYZ4Bzj7shG6SKTdwc/lUcOt+wQuDrZZzaC+A2cu/6ReQN6T BIHtoaxTz8E= =K6RW -----END PGP SIGNATURE----- Merge tag 'pull-request-2022-08-01' of https://gitlab.com/thuth/qemu into staging - Some fixes for various tests - Improve wordings in some files # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmLn6aYRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbWekg/+NVIT1jp3tcbfPIE6pB0vI/AhqN3i2hUd # zfJ4V3rSe5tg54JpmuuSt542mp4BDM9bPfYcY/DYESWEtW0c9wv80iP/5LFdJF0G # GYtk7Q4pRXvB32kF0v9OxjCEGPUeEqSRrDrsI/Ify5evEIhr55oHPnDjN/US1Bx+ # TIuVfmyz8jhSPHsUvZzfVyFxkHre1+BWDxgM3zxoHFIaWEscIPE1KhwRILbKIxWx # MHpL8JLAneGFwljQoUAMCl7GzHkVna59RhqkbBJ+8iTaNGipQj9FhHZBo2CulO0J # SR7scWowYN8Jt2FNMe3tcKM2xQn/2Fg2TEK4sp6q+hCXhJuvFfWFHBiFYTNpagFA # LGgZmPfDr4uZtMEqY4AdEZdL14YZcoM9E/RpW7GhSvMHy73wOj16O8luH1bU0jtG # 6X1VvAZlw8/Son1Tbq2CC6WejlMfJFXSzF6Fy6M7SflMPW44vJOs5uKdW405MYjE # Pksbfz1rwoNfK+1qBNQop7SccgDRvPtlLf3lDAU9V/JHWVEITs1KTfyS+46U8jKA # 9SVBzKuTpVd+aXvMgvMAmmqnyvUBPHJ9KcFq4vHNbIETsGaQsXu0Q6waBmpcK8YB # KUL/g0EsdfhkpVVgKYZ4Bzj7shG6SKTdwc/lUcOt+wQuDrZZzaC+A2cu/6ReQN6T # BIHtoaxTz8E= # =K6RW # -----END PGP SIGNATURE----- # gpg: Signature made Mon 01 Aug 2022 07:56:38 AM PDT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [undefined] # gpg: aka "Thomas Huth <thuth@redhat.com>" [undefined] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [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: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2022-08-01' of https://gitlab.com/thuth/qemu: tests/qtest/migration-test: Run the dirty ring tests only with the x86 target trivial: Fix duplicated words misc: fix commonly doubled up words tests/unit/test-qga: Replace the word 'blacklist' in the guest agent unit test migration-test: Allow test to run without uffd migration-test: Use migrate_ensure_converge() for auto-converge tests/tcg/linux-test: Fix random hangs in test_socket Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
b15bdb1d83
@ -461,7 +461,7 @@ LinuxAioState *laio_init(Error **errp)
|
||||
s = g_malloc0(sizeof(*s));
|
||||
rc = event_notifier_init(&s->e, false);
|
||||
if (rc < 0) {
|
||||
error_setg_errno(errp, -rc, "failed to to initialize event notifier");
|
||||
error_setg_errno(errp, -rc, "failed to initialize event notifier");
|
||||
goto out_free_state;
|
||||
}
|
||||
|
||||
|
@ -787,10 +787,10 @@ static int bitmap_list_store(BlockDriverState *bs, Qcow2BitmapList *bm_list,
|
||||
}
|
||||
}
|
||||
|
||||
/* Actually, even in in-place case ignoring QCOW2_OL_BITMAP_DIRECTORY is not
|
||||
* necessary, because we drop QCOW2_AUTOCLEAR_BITMAPS when updating bitmap
|
||||
* directory in-place (actually, turn-off the extension), which is checked
|
||||
* in qcow2_check_metadata_overlap() */
|
||||
/* Actually, even in the in-place case ignoring QCOW2_OL_BITMAP_DIRECTORY
|
||||
* is not necessary, because we drop QCOW2_AUTOCLEAR_BITMAPS when updating
|
||||
* bitmap directory in-place (actually, turn-off the extension), which is
|
||||
* checked in qcow2_check_metadata_overlap() */
|
||||
ret = qcow2_pre_write_overlap_check(
|
||||
bs, in_place ? QCOW2_OL_BITMAP_DIRECTORY : 0, dir_offset, dir_size,
|
||||
false);
|
||||
|
@ -38,7 +38,7 @@ enum EvictionPolicy policy;
|
||||
* put in any of the blocks inside the set. The number of block per set is
|
||||
* called the associativity (assoc).
|
||||
*
|
||||
* Each block contains the the stored tag and a valid bit. Since this is not
|
||||
* Each block contains the stored tag and a valid bit. Since this is not
|
||||
* a functional simulator, the data itself is not stored. We only identify
|
||||
* whether a block is in the cache or not by searching for its tag.
|
||||
*
|
||||
|
@ -371,8 +371,8 @@ This accepts an array of interface type names.
|
||||
{ TYPE_USER_CREATABLE },
|
||||
{ NULL })
|
||||
|
||||
If the type is not intended to be instantiated, then then
|
||||
the OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
|
||||
If the type is not intended to be instantiated, then the
|
||||
OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
|
||||
|
||||
.. code-block:: c
|
||||
:caption: Defining a simple abstract type
|
||||
|
@ -53,7 +53,7 @@ files in a disk image backing chain:
|
||||
|
||||
(1) Directional: 'base' and 'top'. Given the simple disk image chain
|
||||
above, image [A] can be referred to as 'base', and image [B] as
|
||||
'top'. (This terminology can be seen in in QAPI schema file,
|
||||
'top'. (This terminology can be seen in the QAPI schema file,
|
||||
block-core.json.)
|
||||
|
||||
(2) Relational: 'backing file' and 'overlay'. Again, taking the same
|
||||
@ -825,7 +825,7 @@ entire disk image chain, to a target, using ``blockdev-mirror`` would be:
|
||||
job ready to be completed
|
||||
|
||||
(5) Gracefully complete the 'mirror' block device job, and notice the
|
||||
the event ``BLOCK_JOB_COMPLETED``
|
||||
event ``BLOCK_JOB_COMPLETED``
|
||||
|
||||
(6) Shutdown the guest by issuing the QMP ``quit`` command so that
|
||||
caches are flushed
|
||||
|
@ -284,7 +284,7 @@ SVE CPU Property Parsing Semantics
|
||||
CPU Property Dependencies and Constraints").
|
||||
|
||||
4) If one or more vector lengths have been explicitly enabled and at
|
||||
at least one of the dependency lengths of the maximum enabled length
|
||||
least one of the dependency lengths of the maximum enabled length
|
||||
has been explicitly disabled, then an error is generated (see
|
||||
constraint (2) of "SVE CPU Property Dependencies and Constraints").
|
||||
|
||||
|
@ -15,7 +15,7 @@ with CXL Host Bridges, which have CXL Root Ports which may be directly
|
||||
attached to CXL or PCI End Points. Alternatively there may be CXL Switches
|
||||
with CXL and PCI Endpoints attached below them. In many cases additional
|
||||
control and capabilities are exposed via PCI Express interfaces.
|
||||
This sharing of interfaces and hence emulation code is is reflected
|
||||
This sharing of interfaces and hence emulation code is reflected
|
||||
in how the devices are emulated in QEMU. In most cases the various
|
||||
CXL elements are built upon an equivalent PCIe devices.
|
||||
|
||||
|
@ -65,7 +65,7 @@ you can specify it via the ``-global s390-ipl.netboot_fw=filename``
|
||||
command line option.
|
||||
|
||||
The ``bootindex`` property is especially important for booting via the network.
|
||||
If you don't specify the the ``bootindex`` property here, the network bootloader
|
||||
If you don't specify the ``bootindex`` property here, the network bootloader
|
||||
firmware code won't get loaded into the guest memory so that the network boot
|
||||
will fail. For a successful network boot, try something like this::
|
||||
|
||||
|
@ -182,7 +182,7 @@ certificates.
|
||||
--template client-hostNNN.info \
|
||||
--outfile client-hostNNN-cert.pem
|
||||
|
||||
The subject alt name extension data is not required for clients, so the
|
||||
The subject alt name extension data is not required for clients, so
|
||||
the ``dns_name`` and ``ip_address`` fields are not included. The
|
||||
``tls_www_client`` keyword is the key purpose extension to indicate this
|
||||
certificate is intended for usage in a web client. Although QEMU network
|
||||
|
@ -21,8 +21,8 @@ programs because incorrect usage can disrupt regular operation of the
|
||||
storage fabric. QEMU's SCSI passthrough devices ``scsi-block``
|
||||
and ``scsi-generic`` support passing guest persistent reservation
|
||||
requests to a privileged external helper program. :program:`qemu-pr-helper`
|
||||
is that external helper; it creates a socket which QEMU can
|
||||
connect to to communicate with it.
|
||||
is that external helper; it creates a listener socket which will
|
||||
accept incoming connections for communication with QEMU.
|
||||
|
||||
If you want to run VMs in a setup like this, this helper should be
|
||||
started as a system service, and you should read the QEMU manual
|
||||
|
@ -274,7 +274,7 @@ static void omap_eac_format_update(struct omap_eac_s *s)
|
||||
fmt.freq = s->codec.rate;
|
||||
/* TODO: signedness possibly depends on the CODEC hardware - or
|
||||
* does I2S specify it? */
|
||||
/* All register writes are 16 bits so we we store 16-bit samples
|
||||
/* All register writes are 16 bits so we store 16-bit samples
|
||||
* in the buffers regardless of AGCFR[B8_16] value. */
|
||||
fmt.fmt = AUDIO_FORMAT_U16;
|
||||
|
||||
|
@ -68,7 +68,7 @@ static uint64_t clock_get_child_period(Clock *clk)
|
||||
{
|
||||
/*
|
||||
* Return the period to be used for child clocks, which is the parent
|
||||
* clock period adjusted for for multiplier and divider effects.
|
||||
* clock period adjusted for multiplier and divider effects.
|
||||
*/
|
||||
return muldiv64(clk->period, clk->multiplier, clk->divider);
|
||||
}
|
||||
|
@ -492,7 +492,7 @@ static MemTxResult gicr_writel(GICv3CPUState *cs, hwaddr offset,
|
||||
return MEMTX_OK;
|
||||
case GICR_WAKER:
|
||||
/* Only the ProcessorSleep bit is writable. When the guest sets
|
||||
* it it requests that we transition the channel between the
|
||||
* it, it requests that we transition the channel between the
|
||||
* redistributor and the cpu interface to quiescent, and that
|
||||
* we set the ChildrenAsleep bit once the inteface has reached the
|
||||
* quiescent state.
|
||||
|
@ -114,7 +114,7 @@ static const uint8_t iotkit_secctl_ns_sse300_idregs[] = {
|
||||
* AHB expansion, APB expansion) are all set up so that they are
|
||||
* in 16-aligned blocks so offsets 0xN0, 0xN4, 0xN8, 0xNC are PPCs
|
||||
* 0, 1, 2, 3 of that type, so we can convert a register address offset
|
||||
* into an an index into a PPC array easily.
|
||||
* into an index into a PPC array easily.
|
||||
*/
|
||||
static inline int offset_to_ppc_idx(uint32_t offset)
|
||||
{
|
||||
|
@ -237,7 +237,7 @@ static uint64_t iotkit_sysctl_read(void *opaque, hwaddr offset,
|
||||
r = s->ewctrl;
|
||||
break;
|
||||
case ARMSSE_SSE300:
|
||||
/* In SSE300 this offset is is NMI_ENABLE */
|
||||
/* In SSE300 this offset is NMI_ENABLE */
|
||||
r = s->nmi_enable;
|
||||
break;
|
||||
default:
|
||||
@ -555,7 +555,7 @@ static void iotkit_sysctl_write(void *opaque, hwaddr offset,
|
||||
s->ewctrl = value;
|
||||
break;
|
||||
case ARMSSE_SSE300:
|
||||
/* In SSE300 this offset is is NMI_ENABLE */
|
||||
/* In SSE300 this offset is NMI_ENABLE */
|
||||
qemu_log_mask(LOG_UNIMP, "IoTKit SysCtl NMI_ENABLE unimplemented\n");
|
||||
s->nmi_enable = value;
|
||||
break;
|
||||
|
@ -587,7 +587,7 @@ static void adb_via_poll(void *opaque)
|
||||
/*
|
||||
* For older Linux kernels that switch to IDLE mode after sending the
|
||||
* ADB command, detect if there is an existing response and return that
|
||||
* as a a "fake" autopoll reply or bus timeout accordingly
|
||||
* as a "fake" autopoll reply or bus timeout accordingly
|
||||
*/
|
||||
*data = v1s->adb_data_out[0];
|
||||
olen = v1s->adb_data_in_size;
|
||||
|
@ -57,7 +57,7 @@ IOInstEnding s390_ccw_store(SubchDev *sch)
|
||||
|
||||
/*
|
||||
* This code is called for both virtual and passthrough devices,
|
||||
* but only applies to to the latter. This ugly check makes that
|
||||
* but only applies to the latter. This ugly check makes that
|
||||
* distinction for us.
|
||||
*/
|
||||
if (object_dynamic_cast(OBJECT(sch->driver_data), TYPE_S390_CCW)) {
|
||||
|
@ -74,7 +74,7 @@ typedef struct U2FKeyState {
|
||||
|
||||
/*
|
||||
* API to be used by the U2F key device variants (i.e. hw/u2f-*.c)
|
||||
* to interact with the the U2F key base device (i.e. hw/u2f.c)
|
||||
* to interact with the U2F key base device (i.e. hw/u2f.c)
|
||||
*/
|
||||
void u2f_send_to_guest(U2FKeyState *key,
|
||||
const uint8_t packet[U2FHID_PACKET_SIZE]);
|
||||
|
@ -386,7 +386,7 @@ bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp);
|
||||
*
|
||||
* - unrealize any child buses by calling qbus_unrealize()
|
||||
* (this will recursively unrealize any devices on those buses)
|
||||
* - call the the unrealize method of @dev
|
||||
* - call the unrealize method of @dev
|
||||
*
|
||||
* The device can then be freed by causing its reference count to go
|
||||
* to zero.
|
||||
|
@ -70,7 +70,7 @@
|
||||
* If the host libc is used then the implementation will appear to work
|
||||
* most of the time, but there will be a race condition where a
|
||||
* signal could arrive just before we make the host syscall inside libc,
|
||||
* and then then guest syscall will not correctly be interrupted.
|
||||
* and then the guest syscall will not correctly be interrupted.
|
||||
* Instead the implementation of the guest syscall can use the safe_syscall
|
||||
* function but otherwise just return the result or errno in the usual
|
||||
* way; the main loop code will take care of restarting the syscall
|
||||
|
@ -137,7 +137,7 @@ static void emulate_vsyscall(CPUX86State *env)
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate the the pointer arguments.
|
||||
* Validate the pointer arguments.
|
||||
*/
|
||||
switch (syscall) {
|
||||
case TARGET_NR_gettimeofday:
|
||||
|
@ -195,7 +195,7 @@ static bool scsi_read_capacity(VDev *vdev,
|
||||
/* virtio-scsi routines */
|
||||
|
||||
/*
|
||||
* Tries to locate a SCSI device and and adds the information for the found
|
||||
* Tries to locate a SCSI device and adds the information for the found
|
||||
* device to the vdev->scsi_device structure.
|
||||
* Returns 0 if SCSI device could be located, or a error code < 0 otherwise
|
||||
*/
|
||||
|
@ -29,7 +29,7 @@ help:
|
||||
@echo " Performs no environment setup of any kind."
|
||||
@echo ""
|
||||
@echo "make develop:"
|
||||
@echo " Install deps needed for for 'make check',"
|
||||
@echo " Install deps needed for 'make check',"
|
||||
@echo " and install the qemu package in editable mode."
|
||||
@echo " (Can be used in or outside of a venv.)"
|
||||
@echo ""
|
||||
|
@ -79,7 +79,7 @@ def add_visual_margin(
|
||||
:param content: The text to wrap and decorate.
|
||||
:param width:
|
||||
The number of columns to use, including for the decoration
|
||||
itself. The default (None) uses the the available width of the
|
||||
itself. The default (None) uses the available width of the
|
||||
current terminal, or a fallback of 72 lines. A negative number
|
||||
subtracts a fixed-width from the default size. The default obeys
|
||||
the COLUMNS environment variable, if set.
|
||||
|
@ -3898,7 +3898,7 @@ static const ARMCPRegInfo cache_dirty_status_cp_reginfo[] = {
|
||||
};
|
||||
|
||||
static const ARMCPRegInfo cache_block_ops_cp_reginfo[] = {
|
||||
/* We never have a a block transfer operation in progress */
|
||||
/* We never have a block transfer operation in progress */
|
||||
{ .name = "BXSR", .cp = 15, .crn = 7, .crm = 12, .opc1 = 0, .opc2 = 4,
|
||||
.access = PL0_R, .type = ARM_CP_CONST | ARM_CP_NO_RAW,
|
||||
.resetvalue = 0 },
|
||||
|
@ -8056,7 +8056,7 @@ static TCGv_i32 op_addr_block_pre(DisasContext *s, arg_ldst_block *a, int n)
|
||||
* If the writeback is incrementing SP rather than
|
||||
* decrementing it, and the initial SP is below the
|
||||
* stack limit but the final written-back SP would
|
||||
* be above, then then we must not perform any memory
|
||||
* be above, then we must not perform any memory
|
||||
* accesses, but it is IMPDEF whether we generate
|
||||
* an exception. We choose to do so in this case.
|
||||
* At this point 'addr' is the lowest address, so
|
||||
|
@ -3632,7 +3632,7 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
CPUID_7_0_EDX_CORE_CAPABILITY,
|
||||
.features[FEAT_CORE_CAPABILITY] =
|
||||
MSR_CORE_CAP_SPLIT_LOCK_DETECT,
|
||||
/* XSAVES is is added in version 3 */
|
||||
/* XSAVES is added in version 3 */
|
||||
.features[FEAT_XSAVE] =
|
||||
CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC |
|
||||
CPUID_XSAVE_XGETBV1,
|
||||
|
@ -1652,7 +1652,7 @@ static void tcg_out_branch(TCGContext *s, int call, const tcg_insn_unit *dest)
|
||||
} else {
|
||||
/* rip-relative addressing into the constant pool.
|
||||
This is 6 + 8 = 14 bytes, as compared to using an
|
||||
an immediate load 10 + 6 = 16 bytes, plus we may
|
||||
immediate load 10 + 6 = 16 bytes, plus we may
|
||||
be able to re-use the pool constant for more calls. */
|
||||
tcg_out_opc(s, OPC_GRP5, 0, 0, 0);
|
||||
tcg_out8(s, (call ? EXT5_CALLN_Ev : EXT5_JMPN_Ev) << 3 | 5);
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Docker Debian Native
|
||||
#
|
||||
# This this intended to build QEMU on native host systems. Debian is
|
||||
# This is intended to build QEMU on native host systems. Debian is
|
||||
# chosen due to the broadest range on supported host systems for QEMU.
|
||||
#
|
||||
# This docker target is based on the docker.io Debian Bullseye base
|
||||
|
@ -447,11 +447,11 @@ static void test_nrf51_timer(void)
|
||||
|
||||
timer_set_bitmode(qts, NRF51_TIMER_WIDTH_16); /* 16 MHz Timer */
|
||||
timer_set_prescaler(qts, 0);
|
||||
/* Swept over in first step */
|
||||
/* Swept over, during the first step */
|
||||
timer_set_cc(qts, 0, 2);
|
||||
/* Barely miss on first step */
|
||||
/* Barely miss, after the second step */
|
||||
timer_set_cc(qts, 1, 162);
|
||||
/* Spot on on third step */
|
||||
/* Spot on, after the third step */
|
||||
timer_set_cc(qts, 2, 480);
|
||||
|
||||
timer_assert_events(qts, 0, 0, 0, 0);
|
||||
|
@ -1768,7 +1768,7 @@ static void test_migrate_auto_converge(void)
|
||||
g_autofree char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
|
||||
MigrateStart args = {};
|
||||
QTestState *from, *to;
|
||||
int64_t remaining, percentage;
|
||||
int64_t percentage;
|
||||
|
||||
/*
|
||||
* We want the test to be stable and as fast as possible.
|
||||
@ -1776,14 +1776,6 @@ static void test_migrate_auto_converge(void)
|
||||
* so we need to decrease a bandwidth.
|
||||
*/
|
||||
const int64_t init_pct = 5, inc_pct = 50, max_pct = 95;
|
||||
const int64_t max_bandwidth = 400000000; /* ~400Mb/s */
|
||||
const int64_t downtime_limit = 250; /* 250ms */
|
||||
/*
|
||||
* We migrate through unix-socket (> 500Mb/s).
|
||||
* Thus, expected migration speed ~= bandwidth limit (< 500Mb/s).
|
||||
* So, we can predict expected_threshold
|
||||
*/
|
||||
const int64_t expected_threshold = max_bandwidth * downtime_limit / 1000;
|
||||
|
||||
if (test_migrate_start(&from, &to, uri, &args)) {
|
||||
return;
|
||||
@ -1818,8 +1810,7 @@ static void test_migrate_auto_converge(void)
|
||||
/* The first percentage of throttling should be equal to init_pct */
|
||||
g_assert_cmpint(percentage, ==, init_pct);
|
||||
/* Now, when we tested that throttling works, let it converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", downtime_limit);
|
||||
migrate_set_parameter_int(from, "max-bandwidth", max_bandwidth);
|
||||
migrate_ensure_converge(from);
|
||||
|
||||
/*
|
||||
* Wait for pre-switchover status to check last throttle percentage
|
||||
@ -1830,11 +1821,6 @@ static void test_migrate_auto_converge(void)
|
||||
/* The final percentage of throttling shouldn't be greater than max_pct */
|
||||
percentage = read_migrate_property_int(from, "cpu-throttle-percentage");
|
||||
g_assert_cmpint(percentage, <=, max_pct);
|
||||
|
||||
remaining = read_ram_property_int(from, "remaining");
|
||||
g_assert_cmpint(remaining, <,
|
||||
(expected_threshold + expected_threshold / 100));
|
||||
|
||||
migrate_continue(from, "pre-switchover");
|
||||
|
||||
qtest_qmp_eventwait(to, "RESUME");
|
||||
@ -1842,7 +1828,6 @@ static void test_migrate_auto_converge(void)
|
||||
wait_for_serial("dest_serial");
|
||||
wait_for_migration_complete(from);
|
||||
|
||||
|
||||
test_migrate_end(from, to, true);
|
||||
}
|
||||
|
||||
@ -2439,20 +2424,18 @@ int main(int argc, char **argv)
|
||||
{
|
||||
char template[] = "/tmp/migration-test-XXXXXX";
|
||||
const bool has_kvm = qtest_has_accel("kvm");
|
||||
const bool has_uffd = ufd_version_check();
|
||||
const char *arch = qtest_get_arch();
|
||||
int ret;
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
|
||||
if (!ufd_version_check()) {
|
||||
return g_test_run();
|
||||
}
|
||||
|
||||
/*
|
||||
* On ppc64, the test only works with kvm-hv, but not with kvm-pr and TCG
|
||||
* is touchy due to race conditions on dirty bits (especially on PPC for
|
||||
* some reason)
|
||||
*/
|
||||
if (g_str_equal(qtest_get_arch(), "ppc64") &&
|
||||
if (g_str_equal(arch, "ppc64") &&
|
||||
(!has_kvm || access("/sys/module/kvm_hv", F_OK))) {
|
||||
g_test_message("Skipping test: kvm_hv not available");
|
||||
return g_test_run();
|
||||
@ -2462,7 +2445,7 @@ int main(int argc, char **argv)
|
||||
* Similar to ppc64, s390x seems to be touchy with TCG, so disable it
|
||||
* there until the problems are resolved
|
||||
*/
|
||||
if (g_str_equal(qtest_get_arch(), "s390x") && !has_kvm) {
|
||||
if (g_str_equal(arch, "s390x") && !has_kvm) {
|
||||
g_test_message("Skipping test: s390x host with KVM is required");
|
||||
return g_test_run();
|
||||
}
|
||||
@ -2475,13 +2458,15 @@ int main(int argc, char **argv)
|
||||
|
||||
module_call_init(MODULE_INIT_QOM);
|
||||
|
||||
qtest_add_func("/migration/postcopy/unix", test_postcopy);
|
||||
qtest_add_func("/migration/postcopy/plain", test_postcopy);
|
||||
qtest_add_func("/migration/postcopy/recovery/plain",
|
||||
test_postcopy_recovery);
|
||||
qtest_add_func("/migration/postcopy/preempt/plain", test_postcopy_preempt);
|
||||
qtest_add_func("/migration/postcopy/preempt/recovery/plain",
|
||||
test_postcopy_preempt_recovery);
|
||||
if (has_uffd) {
|
||||
qtest_add_func("/migration/postcopy/unix", test_postcopy);
|
||||
qtest_add_func("/migration/postcopy/plain", test_postcopy);
|
||||
qtest_add_func("/migration/postcopy/recovery/plain",
|
||||
test_postcopy_recovery);
|
||||
qtest_add_func("/migration/postcopy/preempt/plain", test_postcopy_preempt);
|
||||
qtest_add_func("/migration/postcopy/preempt/recovery/plain",
|
||||
test_postcopy_preempt_recovery);
|
||||
}
|
||||
|
||||
qtest_add_func("/migration/bad_dest", test_baddest);
|
||||
qtest_add_func("/migration/precopy/unix/plain", test_precopy_unix_plain);
|
||||
@ -2489,18 +2474,21 @@ int main(int argc, char **argv)
|
||||
#ifdef CONFIG_GNUTLS
|
||||
qtest_add_func("/migration/precopy/unix/tls/psk",
|
||||
test_precopy_unix_tls_psk);
|
||||
/*
|
||||
* NOTE: psk test is enough for postcopy, as other types of TLS
|
||||
* channels are tested under precopy. Here what we want to test is the
|
||||
* general postcopy path that has TLS channel enabled.
|
||||
*/
|
||||
qtest_add_func("/migration/postcopy/tls/psk", test_postcopy_tls_psk);
|
||||
qtest_add_func("/migration/postcopy/recovery/tls/psk",
|
||||
test_postcopy_recovery_tls_psk);
|
||||
qtest_add_func("/migration/postcopy/preempt/tls/psk",
|
||||
test_postcopy_preempt_tls_psk);
|
||||
qtest_add_func("/migration/postcopy/preempt/recovery/tls/psk",
|
||||
test_postcopy_preempt_all);
|
||||
|
||||
if (has_uffd) {
|
||||
/*
|
||||
* NOTE: psk test is enough for postcopy, as other types of TLS
|
||||
* channels are tested under precopy. Here what we want to test is the
|
||||
* general postcopy path that has TLS channel enabled.
|
||||
*/
|
||||
qtest_add_func("/migration/postcopy/tls/psk", test_postcopy_tls_psk);
|
||||
qtest_add_func("/migration/postcopy/recovery/tls/psk",
|
||||
test_postcopy_recovery_tls_psk);
|
||||
qtest_add_func("/migration/postcopy/preempt/tls/psk",
|
||||
test_postcopy_preempt_tls_psk);
|
||||
qtest_add_func("/migration/postcopy/preempt/recovery/tls/psk",
|
||||
test_postcopy_preempt_all);
|
||||
}
|
||||
#ifdef CONFIG_TASN1
|
||||
qtest_add_func("/migration/precopy/unix/tls/x509/default-host",
|
||||
test_precopy_unix_tls_x509_default_host);
|
||||
@ -2572,7 +2560,7 @@ int main(int argc, char **argv)
|
||||
#endif /* CONFIG_TASN1 */
|
||||
#endif /* CONFIG_GNUTLS */
|
||||
|
||||
if (kvm_dirty_ring_supported()) {
|
||||
if (g_str_equal(arch, "x86_64") && has_kvm && kvm_dirty_ring_supported()) {
|
||||
qtest_add_func("/migration/dirty_ring",
|
||||
test_precopy_unix_dirty_ring);
|
||||
qtest_add_func("/migration/vcpu_dirty_limit",
|
||||
|
@ -263,7 +263,7 @@ static int server_socket(void)
|
||||
sockaddr.sin_port = htons(0); /* choose random ephemeral port) */
|
||||
sockaddr.sin_addr.s_addr = 0;
|
||||
chk_error(bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
|
||||
chk_error(listen(fd, 0));
|
||||
chk_error(listen(fd, 1));
|
||||
return fd;
|
||||
|
||||
}
|
||||
|
@ -629,7 +629,7 @@ static void test_qga_get_time(gconstpointer fix)
|
||||
g_assert_cmpint(time, >, 0);
|
||||
}
|
||||
|
||||
static void test_qga_blacklist(gconstpointer data)
|
||||
static void test_qga_blockedrpcs(gconstpointer data)
|
||||
{
|
||||
TestFixture fix;
|
||||
QDict *ret, *error;
|
||||
@ -637,7 +637,7 @@ static void test_qga_blacklist(gconstpointer data)
|
||||
|
||||
fixture_setup(&fix, "-b guest-ping,guest-get-time", NULL);
|
||||
|
||||
/* check blacklist */
|
||||
/* check blocked RPCs */
|
||||
ret = qmp_fd(fix.fd, "{'execute': 'guest-ping'}");
|
||||
g_assert_nonnull(ret);
|
||||
error = qdict_get_qdict(ret, "error");
|
||||
@ -968,7 +968,7 @@ int main(int argc, char **argv)
|
||||
g_test_add_data_func("/qga/fsfreeze-status", &fix,
|
||||
test_qga_fsfreeze_status);
|
||||
|
||||
g_test_add_data_func("/qga/blacklist", NULL, test_qga_blacklist);
|
||||
g_test_add_data_func("/qga/blockedrpcs", NULL, test_qga_blockedrpcs);
|
||||
g_test_add_data_func("/qga/config", NULL, test_qga_config);
|
||||
g_test_add_data_func("/qga/guest-exec", &fix, test_qga_guest_exec);
|
||||
g_test_add_data_func("/qga/guest-exec-invalid", &fix,
|
||||
|
@ -379,7 +379,7 @@ int virtio_send_data_iov(struct fuse_session *se, struct fuse_chan *ch,
|
||||
copy_iov(iov, count, in_sg, in_num, iov_len);
|
||||
|
||||
/*
|
||||
* Build a copy of the the in_sg iov so we can skip bits in it,
|
||||
* Build a copy of the in_sg iov so we can skip bits in it,
|
||||
* including changing the offsets
|
||||
*/
|
||||
in_sg_cpy = g_new(struct iovec, in_num);
|
||||
|
@ -544,7 +544,7 @@ static void vdagent_clipboard_recv_grab(VDAgentChardev *vd, uint8_t s, uint32_t
|
||||
if (size > sizeof(uint32_t) * 10) {
|
||||
/*
|
||||
* spice has 6 types as of 2021. Limiting to 10 entries
|
||||
* so we we have some wiggle room.
|
||||
* so we have some wiggle room.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user