From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1evSIc-0008KY-DC for qemu-devel@nongnu.org; Mon, 12 Mar 2018 14:35:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1evSIZ-0005SS-8j for qemu-devel@nongnu.org; Mon, 12 Mar 2018 14:35:54 -0400 Received: from mail-pl0-x243.google.com ([2607:f8b0:400e:c01::243]:37678) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1evSIZ-0005SB-2X for qemu-devel@nongnu.org; Mon, 12 Mar 2018 14:35:51 -0400 Received: by mail-pl0-x243.google.com with SMTP id w12-v6so9830422plp.4 for ; Mon, 12 Mar 2018 11:35:50 -0700 (PDT) From: Alexey Gerasimenko Date: Tue, 13 Mar 2018 04:34:05 +1000 Message-Id: In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [RFC PATCH 20/30] xen/pt: determine the legacy/PCIe mode for a passed through device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xen-devel@lists.xenproject.org Cc: Alexey Gerasimenko , qemu-devel@nongnu.org, Stefano Stabellini , Anthony Perard Even if we have some real PCIe device being passed through to a guest, there are situations when we cannot use its PCIe features, primarily allowing to access extended (>256) config space. Basically, we can allow reading PCIe extended config space only if both the device and emulated system are PCIe-capable. So it's a combination of checks: - PCI Express capability presence - pci_is_express(device) - pci_bus_is_express(device bus) The AND-product of these checks is stored to pcie_enabled_dev flag in XenPCIPassthroughState for later use in functions like xen_pt_pci_config_access_check. This way we get consistent behavior when the same PCIe device being passed through to either i440 domain or Q35 one. Signed-off-by: Alexey Gerasimenko --- hw/xen/xen_pt.c | 28 ++++++++++++++++++++++++++-- hw/xen/xen_pt.h | 1 + 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index 9b7a960de1..a902a9b685 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -687,6 +687,21 @@ static const MemoryListener xen_pt_io_listener = { .priority = 10, }; +static inline bool xen_pt_dev_is_pcie_mode(PCIDevice *d) +{ + XenPCIPassthroughState *s = XEN_PT_DEVICE(d); + PCIBus *bus = pci_get_bus(d); + + if (bus != NULL) { + if (pci_is_express(d) && pci_bus_is_express(bus) && + xen_host_pci_find_next_cap(&s->real_device, 0, PCI_CAP_ID_EXP)) { + return true; + } + } + + return false; +} + static void xen_igd_passthrough_isa_bridge_create(XenPCIPassthroughState *s, XenHostPCIDevice *dev) @@ -794,8 +809,17 @@ static void xen_pt_realize(PCIDevice *d, Error **errp) s->real_device.dev, s->real_device.func); } - /* Initialize virtualized PCI configuration (Extended 256 Bytes) */ - memset(d->config, 0, PCI_CONFIG_SPACE_SIZE); + s->pcie_enabled_dev = xen_pt_dev_is_pcie_mode(d); + if (s->pcie_enabled_dev) { + XEN_PT_LOG(d, "Host device %04x:%02x:%02x.%d passed thru " + "in PCIe mode\n", s->real_device.domain, + s->real_device.bus, s->real_device.dev, + s->real_device.func); + } + + /* Initialize virtualized PCI configuration space (256/4K bytes) */ + memset(d->config, 0, pci_is_express(d) ? PCIE_CONFIG_SPACE_SIZE + : PCI_CONFIG_SPACE_SIZE); s->memory_listener = xen_pt_memory_listener; s->io_listener = xen_pt_io_listener; diff --git a/hw/xen/xen_pt.h b/hw/xen/xen_pt.h index aa39a9aa5f..1204acbdce 100644 --- a/hw/xen/xen_pt.h +++ b/hw/xen/xen_pt.h @@ -212,6 +212,7 @@ struct XenPCIPassthroughState { PCIHostDeviceAddress hostaddr; bool is_virtfn; + bool pcie_enabled_dev; bool permissive; bool permissive_warned; XenHostPCIDevice real_device; -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey Gerasimenko Subject: [RFC PATCH 20/30] xen/pt: determine the legacy/PCIe mode for a passed through device Date: Tue, 13 Mar 2018 04:34:05 +1000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1evSIa-00087e-Ek for xen-devel@lists.xenproject.org; Mon, 12 Mar 2018 18:35:52 +0000 Received: by mail-pl0-x241.google.com with SMTP id f5-v6so2246394plj.13 for ; Mon, 12 Mar 2018 11:35:51 -0700 (PDT) In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Anthony Perard , Stefano Stabellini , Alexey Gerasimenko , qemu-devel@nongnu.org List-Id: xen-devel@lists.xenproject.org RXZlbiBpZiB3ZSBoYXZlIHNvbWUgcmVhbCBQQ0llIGRldmljZSBiZWluZyBwYXNzZWQgdGhyb3Vn aCB0byBhIGd1ZXN0LAp0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVuIHdlIGNhbm5vdCB1c2UgaXRz IFBDSWUgZmVhdHVyZXMsIHByaW1hcmlseQphbGxvd2luZyB0byBhY2Nlc3MgZXh0ZW5kZWQgKD4y NTYpIGNvbmZpZyBzcGFjZS4KCkJhc2ljYWxseSwgd2UgY2FuIGFsbG93IHJlYWRpbmcgUENJZSBl eHRlbmRlZCBjb25maWcgc3BhY2Ugb25seSBpZiBib3RoCnRoZSBkZXZpY2UgYW5kIGVtdWxhdGVk IHN5c3RlbSBhcmUgUENJZS1jYXBhYmxlLiBTbyBpdCdzIGEgY29tYmluYXRpb24Kb2YgY2hlY2tz OgotIFBDSSBFeHByZXNzIGNhcGFiaWxpdHkgcHJlc2VuY2UKLSBwY2lfaXNfZXhwcmVzcyhkZXZp Y2UpCi0gcGNpX2J1c19pc19leHByZXNzKGRldmljZSBidXMpCgpUaGUgQU5ELXByb2R1Y3Qgb2Yg dGhlc2UgY2hlY2tzIGlzIHN0b3JlZCB0byBwY2llX2VuYWJsZWRfZGV2IGZsYWcKaW4gWGVuUENJ UGFzc3Rocm91Z2hTdGF0ZSBmb3IgbGF0ZXIgdXNlIGluIGZ1bmN0aW9ucyBsaWtlCnhlbl9wdF9w Y2lfY29uZmlnX2FjY2Vzc19jaGVjay4KClRoaXMgd2F5IHdlIGdldCBjb25zaXN0ZW50IGJlaGF2 aW9yIHdoZW4gdGhlIHNhbWUgUENJZSBkZXZpY2UgYmVpbmcgcGFzc2VkCnRocm91Z2ggdG8gZWl0 aGVyIGk0NDAgZG9tYWluIG9yIFEzNSBvbmUuCgpTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgR2VyYXNp bWVua28gPHgxOTE3eEBnbWFpbC5jb20+Ci0tLQogaHcveGVuL3hlbl9wdC5jIHwgMjggKysrKysr KysrKysrKysrKysrKysrKysrKystLQogaHcveGVuL3hlbl9wdC5oIHwgIDEgKwogMiBmaWxlcyBj aGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2h3 L3hlbi94ZW5fcHQuYyBiL2h3L3hlbi94ZW5fcHQuYwppbmRleCA5YjdhOTYwZGUxLi5hOTAyYTli Njg1IDEwMDY0NAotLS0gYS9ody94ZW4veGVuX3B0LmMKKysrIGIvaHcveGVuL3hlbl9wdC5jCkBA IC02ODcsNiArNjg3LDIxIEBAIHN0YXRpYyBjb25zdCBNZW1vcnlMaXN0ZW5lciB4ZW5fcHRfaW9f bGlzdGVuZXIgPSB7CiAgICAgLnByaW9yaXR5ID0gMTAsCiB9OwogCitzdGF0aWMgaW5saW5lIGJv b2wgeGVuX3B0X2Rldl9pc19wY2llX21vZGUoUENJRGV2aWNlICpkKQoreworICAgIFhlblBDSVBh c3N0aHJvdWdoU3RhdGUgKnMgPSBYRU5fUFRfREVWSUNFKGQpOworICAgIFBDSUJ1cyAqYnVzID0g cGNpX2dldF9idXMoZCk7CisKKyAgICBpZiAoYnVzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHBj aV9pc19leHByZXNzKGQpICYmIHBjaV9idXNfaXNfZXhwcmVzcyhidXMpICYmCisgICAgICAgICAg ICB4ZW5faG9zdF9wY2lfZmluZF9uZXh0X2NhcCgmcy0+cmVhbF9kZXZpY2UsIDAsIFBDSV9DQVBf SURfRVhQKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkCiB4ZW5faWdkX3Bhc3N0aHJvdWdo X2lzYV9icmlkZ2VfY3JlYXRlKFhlblBDSVBhc3N0aHJvdWdoU3RhdGUgKnMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhlbkhvc3RQQ0lEZXZpY2UgKmRldikKQEAgLTc5 NCw4ICs4MDksMTcgQEAgc3RhdGljIHZvaWQgeGVuX3B0X3JlYWxpemUoUENJRGV2aWNlICpkLCBF cnJvciAqKmVycnApCiAgICAgICAgICAgICAgICAgICAgcy0+cmVhbF9kZXZpY2UuZGV2LCBzLT5y ZWFsX2RldmljZS5mdW5jKTsKICAgICB9CiAKLSAgICAvKiBJbml0aWFsaXplIHZpcnR1YWxpemVk IFBDSSBjb25maWd1cmF0aW9uIChFeHRlbmRlZCAyNTYgQnl0ZXMpICovCi0gICAgbWVtc2V0KGQt PmNvbmZpZywgMCwgUENJX0NPTkZJR19TUEFDRV9TSVpFKTsKKyAgICBzLT5wY2llX2VuYWJsZWRf ZGV2ID0geGVuX3B0X2Rldl9pc19wY2llX21vZGUoZCk7CisgICAgaWYgKHMtPnBjaWVfZW5hYmxl ZF9kZXYpIHsKKyAgICAgICAgWEVOX1BUX0xPRyhkLCAiSG9zdCBkZXZpY2UgJTA0eDolMDJ4OiUw MnguJWQgcGFzc2VkIHRocnUgIgorICAgICAgICAgICAgICAgICAgICJpbiBQQ0llIG1vZGVcbiIs IHMtPnJlYWxfZGV2aWNlLmRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgcy0+cmVhbF9kZXZp Y2UuYnVzLCBzLT5yZWFsX2RldmljZS5kZXYsCisgICAgICAgICAgICAgICAgICAgIHMtPnJlYWxf ZGV2aWNlLmZ1bmMpOworICAgIH0KKworICAgIC8qIEluaXRpYWxpemUgdmlydHVhbGl6ZWQgUENJ IGNvbmZpZ3VyYXRpb24gc3BhY2UgKDI1Ni80SyBieXRlcykgKi8KKyAgICBtZW1zZXQoZC0+Y29u ZmlnLCAwLCBwY2lfaXNfZXhwcmVzcyhkKSA/IFBDSUVfQ09ORklHX1NQQUNFX1NJWkUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBDSV9DT05GSUdfU1BBQ0Vf U0laRSk7CiAKICAgICBzLT5tZW1vcnlfbGlzdGVuZXIgPSB4ZW5fcHRfbWVtb3J5X2xpc3RlbmVy OwogICAgIHMtPmlvX2xpc3RlbmVyID0geGVuX3B0X2lvX2xpc3RlbmVyOwpkaWZmIC0tZ2l0IGEv aHcveGVuL3hlbl9wdC5oIGIvaHcveGVuL3hlbl9wdC5oCmluZGV4IGFhMzlhOWFhNWYuLjEyMDRh Y2JkY2UgMTAwNjQ0Ci0tLSBhL2h3L3hlbi94ZW5fcHQuaAorKysgYi9ody94ZW4veGVuX3B0LmgK QEAgLTIxMiw2ICsyMTIsNyBAQCBzdHJ1Y3QgWGVuUENJUGFzc3Rocm91Z2hTdGF0ZSB7CiAKICAg ICBQQ0lIb3N0RGV2aWNlQWRkcmVzcyBob3N0YWRkcjsKICAgICBib29sIGlzX3ZpcnRmbjsKKyAg ICBib29sIHBjaWVfZW5hYmxlZF9kZXY7CiAgICAgYm9vbCBwZXJtaXNzaXZlOwogICAgIGJvb2wg cGVybWlzc2l2ZV93YXJuZWQ7CiAgICAgWGVuSG9zdFBDSURldmljZSByZWFsX2RldmljZTsKLS0g CjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0 dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=