mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-23 10:01:59 -06:00
virtio,pc,pci: bug fixes, new test
Some small bug fixes, notably a fix for a regression in cpu hotplug after migration. I also included a new test, just to help make sure we don't regress cxl. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmdHJRIPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpTkQIAJYFpFTPRnO8mA6gurfheB7Jt0ywAMrjKWfg uEkfZXXSQeCS8NBNPoZt7S8AE6xHE2a4b5lNWiS4a4coFmgTjtKPM8YsU01riyRk EasRxynGua2XGUWGK93r9L27v9zGz/vRC0Lujmw3VAUKGeL7a17KzmxwXLXe+DzS PgcI/H5hqoCDalT8aF6wOEDaWIHeo4dauDubYavW/+yaPtUvmy9MBkXbIV4iYqT5 V6geeYIKW/yE/GHxxXOw/RE1FgpiZhebtQP26jPTSk0z/JaV5S0DNYs07joXmbaU fW5LSLgH3+oDI/GIhvsZ6hP87rVXBdaAogeJqT8SsuChBR55TpY= =B7KB -----END PGP SIGNATURE----- Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging virtio,pc,pci: bug fixes, new test Some small bug fixes, notably a fix for a regression in cpu hotplug after migration. I also included a new test, just to help make sure we don't regress cxl. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # -----BEGIN PGP SIGNATURE----- # # iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmdHJRIPHG1zdEByZWRo # YXQuY29tAAoJECgfDbjSjVRpTkQIAJYFpFTPRnO8mA6gurfheB7Jt0ywAMrjKWfg # uEkfZXXSQeCS8NBNPoZt7S8AE6xHE2a4b5lNWiS4a4coFmgTjtKPM8YsU01riyRk # EasRxynGua2XGUWGK93r9L27v9zGz/vRC0Lujmw3VAUKGeL7a17KzmxwXLXe+DzS # PgcI/H5hqoCDalT8aF6wOEDaWIHeo4dauDubYavW/+yaPtUvmy9MBkXbIV4iYqT5 # V6geeYIKW/yE/GHxxXOw/RE1FgpiZhebtQP26jPTSk0z/JaV5S0DNYs07joXmbaU # fW5LSLgH3+oDI/GIhvsZ6hP87rVXBdaAogeJqT8SsuChBR55TpY= # =B7KB # -----END PGP SIGNATURE----- # gpg: Signature made Wed 27 Nov 2024 13:56:34 GMT # gpg: using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469 # gpg: issuer "mst@redhat.com" # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [full] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [full] # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu: vhost: fail device start if iotlb update fails bios-tables-test: Add data for complex numa test (GI, GP etc) bios-tables-test: Add complex SRAT / HMAT test for GI GP bios-tables-test: Allow for new acpihmat-generic-x test data. qapi/qom: Change Since entry for AcpiGenericPortProperties to 9.2 hw/acpi: Fix size of HID in build_append_srat_acpi_device_handle() qapi: fix device-sync-config since-version hw/cxl: Check for zero length features in cmd_features_set_feature() tests/acpi: update expected blobs Revert "hw/acpi: Make CPUs ACPI `presence` conditional during vCPU hot-unplug" Revert "hw/acpi: Update ACPI `_STA` method with QOM vCPU ACPI Hotplug states" qtest: allow ACPI DSDT Table changes vhost_net: fix assertion triggered by batch of host notifiers processing Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
24602b77f5
55 changed files with 145 additions and 65 deletions
|
@ -1960,7 +1960,7 @@ static void build_append_srat_acpi_device_handle(GArray *table_data,
|
|||
{
|
||||
assert(strlen(hid) == 8);
|
||||
/* Device Handle - ACPI */
|
||||
for (int i = 0; i < sizeof(hid); i++) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
build_append_int_noprefix(table_data, hid[i], 1);
|
||||
}
|
||||
build_append_int_noprefix(table_data, uid, 4);
|
||||
|
|
|
@ -50,18 +50,6 @@ void acpi_cpu_ospm_status(CPUHotplugState *cpu_st, ACPIOSTInfoList ***list)
|
|||
}
|
||||
}
|
||||
|
||||
static bool check_cpu_enabled_status(DeviceState *dev)
|
||||
{
|
||||
CPUClass *k = dev ? CPU_GET_CLASS(dev) : NULL;
|
||||
CPUState *cpu = CPU(dev);
|
||||
|
||||
if (cpu && (!k->cpu_enabled_status || k->cpu_enabled_status(cpu))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static uint64_t cpu_hotplug_rd(void *opaque, hwaddr addr, unsigned size)
|
||||
{
|
||||
uint64_t val = 0;
|
||||
|
@ -75,11 +63,10 @@ static uint64_t cpu_hotplug_rd(void *opaque, hwaddr addr, unsigned size)
|
|||
cdev = &cpu_st->devs[cpu_st->selector];
|
||||
switch (addr) {
|
||||
case ACPI_CPU_FLAGS_OFFSET_RW: /* pack and return is_* fields */
|
||||
val |= check_cpu_enabled_status(DEVICE(cdev->cpu)) ? 1 : 0;
|
||||
val |= cdev->cpu ? 1 : 0;
|
||||
val |= cdev->is_inserting ? 2 : 0;
|
||||
val |= cdev->is_removing ? 4 : 0;
|
||||
val |= cdev->fw_remove ? 16 : 0;
|
||||
val |= cdev->cpu ? 32 : 0;
|
||||
trace_cpuhp_acpi_read_flags(cpu_st->selector, val);
|
||||
break;
|
||||
case ACPI_CPU_CMD_DATA_OFFSET_RW:
|
||||
|
@ -246,17 +233,6 @@ void cpu_hotplug_hw_init(MemoryRegion *as, Object *owner,
|
|||
memory_region_add_subregion(as, base_addr, &state->ctrl_reg);
|
||||
}
|
||||
|
||||
static bool should_remain_acpi_present(DeviceState *dev)
|
||||
{
|
||||
CPUClass *k = CPU_GET_CLASS(dev);
|
||||
/*
|
||||
* A system may contain CPUs that are always present on one die, NUMA node,
|
||||
* or socket, yet may be non-present on another simultaneously. Check from
|
||||
* architecture specific code.
|
||||
*/
|
||||
return k->cpu_persistent_status && k->cpu_persistent_status(CPU(dev));
|
||||
}
|
||||
|
||||
static AcpiCpuStatus *get_cpu_status(CPUHotplugState *cpu_st, DeviceState *dev)
|
||||
{
|
||||
CPUClass *k = CPU_GET_CLASS(dev);
|
||||
|
@ -313,9 +289,7 @@ void acpi_cpu_unplug_cb(CPUHotplugState *cpu_st,
|
|||
return;
|
||||
}
|
||||
|
||||
if (!should_remain_acpi_present(dev)) {
|
||||
cdev->cpu = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_cpuhp_sts = {
|
||||
|
@ -362,7 +336,6 @@ const VMStateDescription vmstate_cpu_hotplug = {
|
|||
#define CPU_REMOVE_EVENT "CRMV"
|
||||
#define CPU_EJECT_EVENT "CEJ0"
|
||||
#define CPU_FW_EJECT_EVENT "CEJF"
|
||||
#define CPU_PRESENT "CPRS"
|
||||
|
||||
void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
|
||||
build_madt_cpu_fn build_madt_cpu, hwaddr base_addr,
|
||||
|
@ -423,9 +396,7 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
|
|||
aml_append(field, aml_named_field(CPU_EJECT_EVENT, 1));
|
||||
/* tell firmware to do device eject, write only */
|
||||
aml_append(field, aml_named_field(CPU_FW_EJECT_EVENT, 1));
|
||||
/* 1 if present, read only */
|
||||
aml_append(field, aml_named_field(CPU_PRESENT, 1));
|
||||
aml_append(field, aml_reserved_field(2));
|
||||
aml_append(field, aml_reserved_field(3));
|
||||
aml_append(field, aml_named_field(CPU_COMMAND, 8));
|
||||
aml_append(cpu_ctrl_dev, field);
|
||||
|
||||
|
@ -455,7 +426,6 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
|
|||
Aml *ctrl_lock = aml_name("%s.%s", cphp_res_path, CPU_LOCK);
|
||||
Aml *cpu_selector = aml_name("%s.%s", cphp_res_path, CPU_SELECTOR);
|
||||
Aml *is_enabled = aml_name("%s.%s", cphp_res_path, CPU_ENABLED);
|
||||
Aml *is_present = aml_name("%s.%s", cphp_res_path, CPU_PRESENT);
|
||||
Aml *cpu_cmd = aml_name("%s.%s", cphp_res_path, CPU_COMMAND);
|
||||
Aml *cpu_data = aml_name("%s.%s", cphp_res_path, CPU_DATA);
|
||||
Aml *ins_evt = aml_name("%s.%s", cphp_res_path, CPU_INSERT_EVENT);
|
||||
|
@ -484,26 +454,13 @@ void build_cpus_aml(Aml *table, MachineState *machine, CPUHotplugFeatures opts,
|
|||
{
|
||||
Aml *idx = aml_arg(0);
|
||||
Aml *sta = aml_local(0);
|
||||
Aml *ifctx2;
|
||||
Aml *else_ctx;
|
||||
|
||||
aml_append(method, aml_acquire(ctrl_lock, 0xFFFF));
|
||||
aml_append(method, aml_store(idx, cpu_selector));
|
||||
aml_append(method, aml_store(zero, sta));
|
||||
ifctx = aml_if(aml_equal(is_present, one));
|
||||
ifctx = aml_if(aml_equal(is_enabled, one));
|
||||
{
|
||||
ifctx2 = aml_if(aml_equal(is_enabled, one));
|
||||
{
|
||||
/* cpu is present and enabled */
|
||||
aml_append(ifctx2, aml_store(aml_int(0xF), sta));
|
||||
}
|
||||
aml_append(ifctx, ifctx2);
|
||||
else_ctx = aml_else();
|
||||
{
|
||||
/* cpu is present but disabled */
|
||||
aml_append(else_ctx, aml_store(aml_int(0xD), sta));
|
||||
}
|
||||
aml_append(ifctx, else_ctx);
|
||||
aml_append(ifctx, aml_store(aml_int(0xF), sta));
|
||||
}
|
||||
aml_append(method, ifctx);
|
||||
aml_append(method, aml_release(ctrl_lock));
|
||||
|
|
|
@ -1288,6 +1288,10 @@ static CXLRetCode cmd_features_set_feature(const struct cxl_cmd *cmd,
|
|||
set_feat_info->data_offset = hdr->offset;
|
||||
bytes_to_copy = len_in - sizeof(CXLSetFeatureInHeader);
|
||||
|
||||
if (bytes_to_copy == 0) {
|
||||
return CXL_MBOX_INVALID_PAYLOAD_LENGTH;
|
||||
}
|
||||
|
||||
if (qemu_uuid_is_equal(&hdr->uuid, &patrol_scrub_uuid)) {
|
||||
if (hdr->version != CXL_MEMDEV_PS_SET_FEATURE_VERSION) {
|
||||
return CXL_MBOX_UNSUPPORTED;
|
||||
|
|
|
@ -229,9 +229,24 @@ static int vhost_net_enable_notifiers(VirtIODevice *dev,
|
|||
int nvhosts = data_queue_pairs + cvq;
|
||||
struct vhost_net *net;
|
||||
struct vhost_dev *hdev;
|
||||
int r, i, j;
|
||||
int r, i, j, k;
|
||||
NetClientState *peer;
|
||||
|
||||
/*
|
||||
* We will pass the notifiers to the kernel, make sure that QEMU
|
||||
* doesn't interfere.
|
||||
*/
|
||||
for (i = 0; i < nvhosts; i++) {
|
||||
r = virtio_device_grab_ioeventfd(dev);
|
||||
if (r < 0) {
|
||||
error_report("vhost %d binding does not support host notifiers", i);
|
||||
for (k = 0; k < i; k++) {
|
||||
virtio_device_release_ioeventfd(dev);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Batch all the host notifiers in a single transaction to avoid
|
||||
* quadratic time complexity in address_space_update_ioeventfds().
|
||||
|
@ -247,16 +262,6 @@ static int vhost_net_enable_notifiers(VirtIODevice *dev,
|
|||
|
||||
net = get_vhost_net(peer);
|
||||
hdev = &net->dev;
|
||||
/*
|
||||
* We will pass the notifiers to the kernel, make sure that QEMU
|
||||
* doesn't interfere.
|
||||
*/
|
||||
r = virtio_device_grab_ioeventfd(dev);
|
||||
if (r < 0) {
|
||||
error_report("binding does not support host notifiers");
|
||||
memory_region_transaction_commit();
|
||||
goto fail_nvhosts;
|
||||
}
|
||||
|
||||
for (j = 0; j < hdev->nvqs; j++) {
|
||||
r = virtio_bus_set_host_notifier(VIRTIO_BUS(qbus),
|
||||
|
@ -277,6 +282,14 @@ static int vhost_net_enable_notifiers(VirtIODevice *dev,
|
|||
return 0;
|
||||
fail_nvhosts:
|
||||
vhost_net_disable_notifiers_nvhosts(dev, ncs, data_queue_pairs, i);
|
||||
/*
|
||||
* This for loop starts from i+1, not i, because the i-th ioeventfd
|
||||
* has already been released in vhost_dev_disable_notifiers_nvqs().
|
||||
*/
|
||||
for (k = i + 1; k < nvhosts; k++) {
|
||||
virtio_device_release_ioeventfd(dev);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -2095,11 +2095,22 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings)
|
|||
* vhost-kernel code requires for this.*/
|
||||
for (i = 0; i < hdev->nvqs; ++i) {
|
||||
struct vhost_virtqueue *vq = hdev->vqs + i;
|
||||
vhost_device_iotlb_miss(hdev, vq->used_phys, true);
|
||||
r = vhost_device_iotlb_miss(hdev, vq->used_phys, true);
|
||||
if (r) {
|
||||
goto fail_iotlb;
|
||||
}
|
||||
}
|
||||
}
|
||||
vhost_start_config_intr(hdev);
|
||||
return 0;
|
||||
fail_iotlb:
|
||||
if (vhost_dev_has_iommu(hdev) &&
|
||||
hdev->vhost_ops->vhost_set_iotlb_callback) {
|
||||
hdev->vhost_ops->vhost_set_iotlb_callback(hdev, false);
|
||||
}
|
||||
if (hdev->vhost_ops->vhost_dev_start) {
|
||||
hdev->vhost_ops->vhost_dev_start(hdev, false);
|
||||
}
|
||||
fail_start:
|
||||
if (vrings) {
|
||||
vhost_dev_set_vring_enable(hdev, false);
|
||||
|
|
|
@ -158,8 +158,6 @@ struct CPUClass {
|
|||
void (*dump_state)(CPUState *cpu, FILE *, int flags);
|
||||
void (*query_cpu_fast)(CPUState *cpu, CpuInfoFast *value);
|
||||
int64_t (*get_arch_id)(CPUState *cpu);
|
||||
bool (*cpu_persistent_status)(CPUState *cpu);
|
||||
bool (*cpu_enabled_status)(CPUState *cpu);
|
||||
void (*set_pc)(CPUState *cpu, vaddr value);
|
||||
vaddr (*get_pc)(CPUState *cpu);
|
||||
int (*gdb_read_register)(CPUState *cpu, GByteArray *buf, int reg);
|
||||
|
|
|
@ -182,7 +182,7 @@
|
|||
#
|
||||
# @unstable: The command is experimental.
|
||||
#
|
||||
# Since: 9.1
|
||||
# Since: 9.2
|
||||
##
|
||||
{ 'command': 'device-sync-config',
|
||||
'features': [ 'unstable' ],
|
||||
|
|
|
@ -877,7 +877,7 @@
|
|||
# complex as there may be interleaving across multiple devices
|
||||
# and shared links in the path.
|
||||
#
|
||||
# Since: 9.1
|
||||
# Since: 9.2
|
||||
##
|
||||
{ 'struct': 'AcpiGenericPortProperties',
|
||||
'data': { 'pci-bus': 'str',
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/data/acpi/x86/q35/APIC.acpihmat-generic-x
Normal file
BIN
tests/data/acpi/x86/q35/APIC.acpihmat-generic-x
Normal file
Binary file not shown.
BIN
tests/data/acpi/x86/q35/CEDT.acpihmat-generic-x
Normal file
BIN
tests/data/acpi/x86/q35/CEDT.acpihmat-generic-x
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/data/acpi/x86/q35/DSDT.acpihmat-generic-x
Normal file
BIN
tests/data/acpi/x86/q35/DSDT.acpihmat-generic-x
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/data/acpi/x86/q35/HMAT.acpihmat-generic-x
Normal file
BIN
tests/data/acpi/x86/q35/HMAT.acpihmat-generic-x
Normal file
Binary file not shown.
BIN
tests/data/acpi/x86/q35/SRAT.acpihmat-generic-x
Normal file
BIN
tests/data/acpi/x86/q35/SRAT.acpihmat-generic-x
Normal file
Binary file not shown.
|
@ -1936,6 +1936,101 @@ static void test_acpi_q35_tcg_acpi_hmat_noinitiator(void)
|
|||
free_test_data(&data);
|
||||
}
|
||||
|
||||
/* Test intended to hit corner cases of SRAT and HMAT */
|
||||
static void test_acpi_q35_tcg_acpi_hmat_generic_x(void)
|
||||
{
|
||||
test_data data = {};
|
||||
|
||||
data.machine = MACHINE_Q35;
|
||||
data.arch = "x86";
|
||||
data.variant = ".acpihmat-generic-x";
|
||||
test_acpi_one(" -machine hmat=on,cxl=on"
|
||||
" -smp 3,sockets=3"
|
||||
" -m 128M,maxmem=384M,slots=2"
|
||||
" -device pcie-root-port,chassis=1,id=pci.1"
|
||||
" -device pci-testdev,bus=pci.1,"
|
||||
"multifunction=on,addr=00.0"
|
||||
" -device pci-testdev,bus=pci.1,addr=00.1"
|
||||
" -device pci-testdev,bus=pci.1,id=gidev,addr=00.2"
|
||||
" -device pxb-cxl,bus_nr=64,bus=pcie.0,id=cxl.1"
|
||||
" -object memory-backend-ram,size=64M,id=ram0"
|
||||
" -object memory-backend-ram,size=64M,id=ram1"
|
||||
" -numa node,nodeid=0,cpus=0,memdev=ram0"
|
||||
" -numa node,nodeid=1"
|
||||
" -object acpi-generic-initiator,id=gi0,pci-dev=gidev,node=1"
|
||||
" -numa node,nodeid=2"
|
||||
" -object acpi-generic-port,id=gp0,pci-bus=cxl.1,node=2"
|
||||
" -numa node,nodeid=3,cpus=1"
|
||||
" -numa node,nodeid=4,memdev=ram1"
|
||||
" -numa node,nodeid=5,cpus=2"
|
||||
" -numa hmat-lb,initiator=0,target=0,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=10"
|
||||
" -numa hmat-lb,initiator=0,target=0,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=800M"
|
||||
" -numa hmat-lb,initiator=0,target=2,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=100"
|
||||
" -numa hmat-lb,initiator=0,target=2,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=200M"
|
||||
" -numa hmat-lb,initiator=0,target=4,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=100"
|
||||
" -numa hmat-lb,initiator=0,target=4,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=200M"
|
||||
" -numa hmat-lb,initiator=0,target=5,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=200"
|
||||
" -numa hmat-lb,initiator=0,target=5,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=400M"
|
||||
" -numa hmat-lb,initiator=1,target=0,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=500"
|
||||
" -numa hmat-lb,initiator=1,target=0,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=100M"
|
||||
" -numa hmat-lb,initiator=1,target=2,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=50"
|
||||
" -numa hmat-lb,initiator=1,target=2,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=400M"
|
||||
" -numa hmat-lb,initiator=1,target=4,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=50"
|
||||
" -numa hmat-lb,initiator=1,target=4,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=800M"
|
||||
" -numa hmat-lb,initiator=1,target=5,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=500"
|
||||
" -numa hmat-lb,initiator=1,target=5,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=100M"
|
||||
" -numa hmat-lb,initiator=3,target=0,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=20"
|
||||
" -numa hmat-lb,initiator=3,target=0,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=400M"
|
||||
" -numa hmat-lb,initiator=3,target=2,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=80"
|
||||
" -numa hmat-lb,initiator=3,target=2,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=200M"
|
||||
" -numa hmat-lb,initiator=3,target=4,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=80"
|
||||
" -numa hmat-lb,initiator=3,target=4,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=200M"
|
||||
" -numa hmat-lb,initiator=3,target=5,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=20"
|
||||
" -numa hmat-lb,initiator=3,target=5,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=400M"
|
||||
" -numa hmat-lb,initiator=5,target=0,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=20"
|
||||
" -numa hmat-lb,initiator=5,target=0,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=400M"
|
||||
" -numa hmat-lb,initiator=5,target=2,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=80"
|
||||
" -numa hmat-lb,initiator=5,target=4,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=200M"
|
||||
" -numa hmat-lb,initiator=5,target=4,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=80"
|
||||
" -numa hmat-lb,initiator=5,target=2,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=200M"
|
||||
" -numa hmat-lb,initiator=5,target=5,hierarchy=memory,"
|
||||
"data-type=access-latency,latency=10"
|
||||
" -numa hmat-lb,initiator=5,target=5,hierarchy=memory,"
|
||||
"data-type=access-bandwidth,bandwidth=800M",
|
||||
&data);
|
||||
free_test_data(&data);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_POSIX
|
||||
static void test_acpi_erst(const char *machine, const char *arch)
|
||||
{
|
||||
|
@ -2414,6 +2509,8 @@ int main(int argc, char *argv[])
|
|||
qtest_add_func("acpi/q35/nohpet", test_acpi_q35_tcg_nohpet);
|
||||
qtest_add_func("acpi/q35/acpihmat-noinitiator",
|
||||
test_acpi_q35_tcg_acpi_hmat_noinitiator);
|
||||
qtest_add_func("acpi/q35/acpihmat-genericx",
|
||||
test_acpi_q35_tcg_acpi_hmat_generic_x);
|
||||
|
||||
/* i386 does not support memory hotplug */
|
||||
if (strcmp(arch, "i386")) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue