pcie_root_port: Allow ACS to be disabled

ACS was added in 4.0 unconditionally, this breaks migration
compatibility.
Allow ACS to be disabled by adding a property that's
checked by pcie_root_port.

Unfortunately pcie-root-port doesn't have any instance data,
so there's no where for that flag to live, so stuff it into
PCIESlot.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20190730093719.12958-2-dgilbert@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Dr. David Alan Gilbert 2019-07-30 10:37:18 +01:00 committed by Michael S. Tsirkin
parent 22235bb609
commit a58dfba201
2 changed files with 4 additions and 1 deletions

View file

@ -111,7 +111,7 @@ static void rp_realize(PCIDevice *d, Error **errp)
pcie_aer_root_init(d); pcie_aer_root_init(d);
rp_aer_vector_update(d); rp_aer_vector_update(d);
if (rpc->acs_offset) { if (rpc->acs_offset && !s->disable_acs) {
pcie_acs_init(d, rpc->acs_offset); pcie_acs_init(d, rpc->acs_offset);
} }
return; return;
@ -145,6 +145,7 @@ static void rp_exit(PCIDevice *d)
static Property rp_props[] = { static Property rp_props[] = {
DEFINE_PROP_BIT(COMPAT_PROP_PCP, PCIDevice, cap_present, DEFINE_PROP_BIT(COMPAT_PROP_PCP, PCIDevice, cap_present,
QEMU_PCIE_SLTCAP_PCP_BITNR, true), QEMU_PCIE_SLTCAP_PCP_BITNR, true),
DEFINE_PROP_BOOL("disable-acs", PCIESlot, disable_acs, false),
DEFINE_PROP_END_OF_LIST() DEFINE_PROP_END_OF_LIST()
}; };

View file

@ -53,6 +53,8 @@ struct PCIESlot {
PCIExpLinkSpeed speed; PCIExpLinkSpeed speed;
PCIExpLinkWidth width; PCIExpLinkWidth width;
/* Disable ACS (really for a pcie_root_port) */
bool disable_acs;
QLIST_ENTRY(PCIESlot) next; QLIST_ENTRY(PCIESlot) next;
}; };