From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34198) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cjOcN-0003aj-O2 for qemu-devel@nongnu.org; Thu, 02 Mar 2017 06:09:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cjOcL-0005Po-GS for qemu-devel@nongnu.org; Thu, 02 Mar 2017 06:09:55 -0500 Received: from smtp.citrix.com ([66.165.176.89]:56528) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1cjOcL-0005PH-7q for qemu-devel@nongnu.org; Thu, 02 Mar 2017 06:09:53 -0500 From: Paul Durrant Date: Thu, 2 Mar 2017 11:09:46 +0000 Message-ID: <1488452986-24501-6-git-send-email-paul.durrant@citrix.com> In-Reply-To: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> References: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH v2 5/5] xen: use libxendevicemodel when available List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xen-devel@lists.xenproject.org, qemu-devel@nongnu.org Cc: Paul Durrant , Stefano Stabellini , Anthony Perard This patch modifies the wrapper functions in xen_common.h to use the new xendevicemodel interface if it is available along with compatibility code to use the old libxenctrl interface if it is not. Signed-off-by: Paul Durrant --- Cc: Stefano Stabellini Cc: Anthony Perard v2: - Add a compat define for xenforeignmemory_close() since this is now used. --- include/hw/xen/xen_common.h | 115 +++++++++++++++++++++++++++++++------------- xen-common.c | 8 +++ 2 files changed, 90 insertions(+), 33 deletions(-) diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h index 31cf25f..48444e5 100644 --- a/include/hw/xen/xen_common.h +++ b/include/hw/xen/xen_common.h @@ -9,6 +9,7 @@ #undef XC_WANT_COMPAT_EVTCHN_API #undef XC_WANT_COMPAT_GNTTAB_API #undef XC_WANT_COMPAT_MAP_FOREIGN_API +#undef XC_WANT_COMPAT_DEVICEMODEL_API #include #include @@ -26,48 +27,95 @@ extern xc_interface *xen_xc; * We don't support Xen prior to 4.2.0. */ +#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 490 + +typedef xc_interface xendevicemodel_handle; + +#define xendevicemodel_open(l, f) xen_xc + +#define xendevicemodel_map_io_range_to_ioreq_server \ + xc_hvm_map_io_range_to_ioreq_server +#define xendevicemodel_unmap_io_range_from_ioreq_server \ + xc_hvm_unmap_io_range_from_ioreq_server +#define xendevicemodel_map_pcidev_to_ioreq_server \ + xc_hvm_map_pcidev_to_ioreq_server +#define xendevicemodel_unmap_pcidev_from_ioreq_server \ + xc_hvm_unmap_pcidev_from_ioreq_server +#define xendevicemodel_create_ioreq_server \ + xc_hvm_create_ioreq_server +#define xendevicemodel_destroy_ioreq_server \ + xc_hvm_destroy_ioreq_server +#define xendevicemodel_get_ioreq_server_info \ + xc_hvm_get_ioreq_server_info +#define xendevicemodel_set_ioreq_server_state \ + xc_hvm_set_ioreq_server_state +#define xendevicemodel_set_pci_intx_level \ + xc_hvm_set_pci_intx_level +#define xendevicemodel_set_pci_link_route \ + xc_hvm_set_pci_link_route +#define xendevicemodel_set_isa_irq_level \ + xc_hvm_set_isa_irq_level +#define xendevicemodel_inject_msi \ + xc_hvm_inject_msi +#define xendevicemodel_set_mem_type \ + xc_hvm_set_mem_type +#define xendevicemodel_track_dirty_vram \ + xc_hvm_track_dirty_vram +#define xendevicemodel_modified_memory \ + xc_hvm_modified_memory + +#else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 490 */ + +#include + +#endif + +extern xendevicemodel_handle *xen_dmod; + static inline int xen_set_mem_type(domid_t domid, hvmmem_type_t type, uint64_t first_pfn, uint32_t nr) { - return xc_hvm_set_mem_type(xen_xc, domid, type, first_pfn, nr); + return xendevicemodel_set_mem_type(xen_dmod, domid, type, first_pfn, + nr); } static inline int xen_set_pci_intx_level(domid_t domid, uint16_t segment, uint8_t bus, uint8_t device, uint8_t intx, unsigned int level) { - return xc_hvm_set_pci_intx_level(xen_xc, domid, segment, bus, device, - intx, level); + return xendevicemodel_set_pci_intx_level(xen_dmod, domid, segment, bus, + device, intx, level); } static inline int xen_set_pci_link_route(domid_t domid, uint8_t link, uint8_t irq) { - return xc_hvm_set_pci_link_route(xen_xc, domid, link, irq); + return xendevicemodel_set_pci_link_route(xen_dmod, domid, link, irq); } static inline int xen_inject_msi(domid_t domid, uint64_t msi_addr, uint32_t msi_data) { - return xc_hvm_inject_msi(xen_xc, domid, msi_addr, msi_data); + return xendevicemodel_inject_msi(xen_dmod, domid, msi_addr, msi_data); } static inline int xen_set_isa_irq_level(domid_t domid, uint8_t irq, unsigned int level) { - return xc_hvm_set_isa_irq_level(xen_xc, domid, irq, level); + return xendevicemodel_set_isa_irq_level(xen_dmod, domid, irq, level); } static inline int xen_track_dirty_vram(domid_t domid, uint64_t first_pfn, uint32_t nr, unsigned long *bitmap) { - return xc_hvm_track_dirty_vram(xen_xc, domid, first_pfn, nr, bitmap); + return xendevicemodel_track_dirty_vram(xen_dmod, domid, first_pfn, nr, + bitmap); } static inline int xen_modified_memory(domid_t domid, uint64_t first_pfn, uint32_t nr) { - return xc_hvm_modified_memory(xen_xc, domid, first_pfn, nr); + return xendevicemodel_modified_memory(xen_dmod, domid, first_pfn, nr); } /* Xen 4.2 through 4.6 */ @@ -97,6 +145,7 @@ typedef xc_gnttab xengnttab_handle; xc_gnttab_map_domain_grant_refs(h, c, d, r, p) #define xenforeignmemory_open(l, f) xen_xc +#define xenforeignmemory_close(h) static inline void *xenforeignmemory_map(xc_interface *h, uint32_t dom, int prot, size_t pages, @@ -285,8 +334,8 @@ static inline void xen_map_memory_section(domid_t dom, } trace_xen_map_mmio_range(ioservid, start_addr, end_addr); - xc_hvm_map_io_range_to_ioreq_server(xen_xc, dom, ioservid, 1, - start_addr, end_addr); + xendevicemodel_map_io_range_to_ioreq_server(xen_dmod, dom, ioservid, 1, + start_addr, end_addr); } static inline void xen_unmap_memory_section(domid_t dom, @@ -302,8 +351,8 @@ static inline void xen_unmap_memory_section(domid_t dom, } trace_xen_unmap_mmio_range(ioservid, start_addr, end_addr); - xc_hvm_unmap_io_range_from_ioreq_server(xen_xc, dom, ioservid, - 1, start_addr, end_addr); + xendevicemodel_unmap_io_range_from_ioreq_server(xen_dmod, dom, ioservid, + 1, start_addr, end_addr); } static inline void xen_map_io_section(domid_t dom, @@ -319,8 +368,8 @@ static inline void xen_map_io_section(domid_t dom, } trace_xen_map_portio_range(ioservid, start_addr, end_addr); - xc_hvm_map_io_range_to_ioreq_server(xen_xc, dom, ioservid, 0, - start_addr, end_addr); + xendevicemodel_map_io_range_to_ioreq_server(xen_dmod, dom, ioservid, 0, + start_addr, end_addr); } static inline void xen_unmap_io_section(domid_t dom, @@ -336,8 +385,8 @@ static inline void xen_unmap_io_section(domid_t dom, } trace_xen_unmap_portio_range(ioservid, start_addr, end_addr); - xc_hvm_unmap_io_range_from_ioreq_server(xen_xc, dom, ioservid, - 0, start_addr, end_addr); + xendevicemodel_unmap_io_range_from_ioreq_server(xen_dmod, dom, ioservid, + 0, start_addr, end_addr); } static inline void xen_map_pcidev(domid_t dom, @@ -350,10 +399,10 @@ static inline void xen_map_pcidev(domid_t dom, trace_xen_map_pcidev(ioservid, pci_bus_num(pci_dev->bus), PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn)); - xc_hvm_map_pcidev_to_ioreq_server(xen_xc, dom, ioservid, 0, - pci_bus_num(pci_dev->bus), - PCI_SLOT(pci_dev->devfn), - PCI_FUNC(pci_dev->devfn)); + xendevicemodel_map_pcidev_to_ioreq_server(xen_dmod, dom, ioservid, 0, + pci_bus_num(pci_dev->bus), + PCI_SLOT(pci_dev->devfn), + PCI_FUNC(pci_dev->devfn)); } static inline void xen_unmap_pcidev(domid_t dom, @@ -366,18 +415,18 @@ static inline void xen_unmap_pcidev(domid_t dom, trace_xen_unmap_pcidev(ioservid, pci_bus_num(pci_dev->bus), PCI_SLOT(pci_dev->devfn), PCI_FUNC(pci_dev->devfn)); - xc_hvm_unmap_pcidev_from_ioreq_server(xen_xc, dom, ioservid, 0, - pci_bus_num(pci_dev->bus), - PCI_SLOT(pci_dev->devfn), - PCI_FUNC(pci_dev->devfn)); + xendevicemodel_unmap_pcidev_from_ioreq_server(xen_dmod, dom, ioservid, 0, + pci_bus_num(pci_dev->bus), + PCI_SLOT(pci_dev->devfn), + PCI_FUNC(pci_dev->devfn)); } static inline void xen_create_ioreq_server(domid_t dom, ioservid_t *ioservid) { - int rc = xc_hvm_create_ioreq_server(xen_xc, dom, - HVM_IOREQSRV_BUFIOREQ_ATOMIC, - ioservid); + int rc = xendevicemodel_create_ioreq_server(xen_dmod, dom, + HVM_IOREQSRV_BUFIOREQ_ATOMIC, + ioservid); if (rc == 0) { trace_xen_ioreq_server_create(*ioservid); @@ -397,7 +446,7 @@ static inline void xen_destroy_ioreq_server(domid_t dom, } trace_xen_ioreq_server_destroy(ioservid); - xc_hvm_destroy_ioreq_server(xen_xc, dom, ioservid); + xendevicemodel_destroy_ioreq_server(xen_dmod, dom, ioservid); } static inline int xen_get_ioreq_server_info(domid_t dom, @@ -412,9 +461,9 @@ static inline int xen_get_ioreq_server_info(domid_t dom, bufioreq_evtchn); } - return xc_hvm_get_ioreq_server_info(xen_xc, dom, ioservid, - ioreq_pfn, bufioreq_pfn, - bufioreq_evtchn); + return xendevicemodel_get_ioreq_server_info(xen_dmod, dom, ioservid, + ioreq_pfn, bufioreq_pfn, + bufioreq_evtchn); } static inline int xen_set_ioreq_server_state(domid_t dom, @@ -426,8 +475,8 @@ static inline int xen_set_ioreq_server_state(domid_t dom, } trace_xen_ioreq_server_state(ioservid, enable); - return xc_hvm_set_ioreq_server_state(xen_xc, dom, ioservid, - enable); + return xendevicemodel_set_ioreq_server_state(xen_dmod, dom, ioservid, + enable); } #endif diff --git a/xen-common.c b/xen-common.c index 703e7a5..ae76150 100644 --- a/xen-common.c +++ b/xen-common.c @@ -27,6 +27,7 @@ xc_interface *xen_xc; xenforeignmemory_handle *xen_fmem; +xendevicemodel_handle *xen_dmod; static int store_dev_info(int domid, Chardev *cs, const char *string) { @@ -128,6 +129,13 @@ static int xen_init(MachineState *ms) xc_interface_close(xen_xc); return -1; } + xen_dmod = xendevicemodel_open(0, 0); + if (xen_dmod == NULL) { + xen_pv_printf(NULL, 0, "can't open xen devicemodel interface\n"); + xenforeignmemory_close(xen_fmem); + xc_interface_close(xen_xc); + return -1; + } qemu_add_vm_change_state_handler(xen_change_state_handler, NULL); global_state_set_optional(); -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH v2 5/5] xen: use libxendevicemodel when available Date: Thu, 2 Mar 2017 11:09:46 +0000 Message-ID: <1488452986-24501-6-git-send-email-paul.durrant@citrix.com> References: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cjOcL-0000d7-QF for xen-devel@lists.xenproject.org; Thu, 02 Mar 2017 11:09:53 +0000 In-Reply-To: <1488452986-24501-1-git-send-email-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, qemu-devel@nongnu.org Cc: Anthony Perard , Paul Durrant , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgd3JhcHBlciBmdW5jdGlvbnMgaW4geGVuX2NvbW1vbi5o IHRvIHVzZSB0aGUKbmV3IHhlbmRldmljZW1vZGVsIGludGVyZmFjZSBpZiBpdCBpcyBhdmFpbGFi bGUgYWxvbmcgd2l0aCBjb21wYXRpYmlsaXR5CmNvZGUgdG8gdXNlIHRoZSBvbGQgbGlieGVuY3Ry bCBpbnRlcmZhY2UgaWYgaXQgaXMgbm90LgoKU2lnbmVkLW9mZi1ieTogUGF1bCBEdXJyYW50IDxw YXVsLmR1cnJhbnRAY2l0cml4LmNvbT4KLS0tCkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFi ZWxsaW5pQGtlcm5lbC5vcmc+CkNjOiBBbnRob255IFBlcmFyZCA8YW50aG9ueS5wZXJhcmRAY2l0 cml4LmNvbT4KCnYyOgotIEFkZCBhIGNvbXBhdCBkZWZpbmUgZm9yIHhlbmZvcmVpZ25tZW1vcnlf Y2xvc2UoKSBzaW5jZSB0aGlzIGlzIG5vdwogIHVzZWQuCi0tLQogaW5jbHVkZS9ody94ZW4veGVu X2NvbW1vbi5oIHwgMTE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tCiB4ZW4tY29tbW9uLmMgICAgICAgICAgICAgICAgfCAgIDggKysrCiAyIGZpbGVzIGNoYW5n ZWQsIDkwIGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvaHcveGVuL3hlbl9jb21tb24uaCBiL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaAppbmRl eCAzMWNmMjVmLi40ODQ0NGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9u LmgKKysrIGIvaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oCkBAIC05LDYgKzksNyBAQAogI3Vu ZGVmIFhDX1dBTlRfQ09NUEFUX0VWVENITl9BUEkKICN1bmRlZiBYQ19XQU5UX0NPTVBBVF9HTlRU QUJfQVBJCiAjdW5kZWYgWENfV0FOVF9DT01QQVRfTUFQX0ZPUkVJR05fQVBJCisjdW5kZWYgWENf V0FOVF9DT01QQVRfREVWSUNFTU9ERUxfQVBJCiAKICNpbmNsdWRlIDx4ZW5jdHJsLmg+CiAjaW5j bHVkZSA8eGVuc3RvcmUuaD4KQEAgLTI2LDQ4ICsyNyw5NSBAQCBleHRlcm4geGNfaW50ZXJmYWNl ICp4ZW5feGM7CiAgKiBXZSBkb24ndCBzdXBwb3J0IFhlbiBwcmlvciB0byA0LjIuMC4KICAqLwog CisjaWYgQ09ORklHX1hFTl9DVFJMX0lOVEVSRkFDRV9WRVJTSU9OIDwgNDkwCisKK3R5cGVkZWYg eGNfaW50ZXJmYWNlIHhlbmRldmljZW1vZGVsX2hhbmRsZTsKKworI2RlZmluZSB4ZW5kZXZpY2Vt b2RlbF9vcGVuKGwsIGYpIHhlbl94YworCisjZGVmaW5lIHhlbmRldmljZW1vZGVsX21hcF9pb19y YW5nZV90b19pb3JlcV9zZXJ2ZXIgXAorICAgIHhjX2h2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFf c2VydmVyCisjZGVmaW5lIHhlbmRldmljZW1vZGVsX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFf c2VydmVyIFwKKyAgICB4Y19odm1fdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIKKyNk ZWZpbmUgeGVuZGV2aWNlbW9kZWxfbWFwX3BjaWRldl90b19pb3JlcV9zZXJ2ZXIgXAorICAgIHhj X2h2bV9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcgorI2RlZmluZSB4ZW5kZXZpY2Vtb2RlbF91 bm1hcF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIgXAorICAgIHhjX2h2bV91bm1hcF9wY2lkZXZf ZnJvbV9pb3JlcV9zZXJ2ZXIKKyNkZWZpbmUgeGVuZGV2aWNlbW9kZWxfY3JlYXRlX2lvcmVxX3Nl cnZlciBcCisgICAgeGNfaHZtX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIKKyNkZWZpbmUgeGVuZGV2aWNl bW9kZWxfZGVzdHJveV9pb3JlcV9zZXJ2ZXIgXAorICAgIHhjX2h2bV9kZXN0cm95X2lvcmVxX3Nl cnZlcgorI2RlZmluZSB4ZW5kZXZpY2Vtb2RlbF9nZXRfaW9yZXFfc2VydmVyX2luZm8gXAorICAg IHhjX2h2bV9nZXRfaW9yZXFfc2VydmVyX2luZm8KKyNkZWZpbmUgeGVuZGV2aWNlbW9kZWxfc2V0 X2lvcmVxX3NlcnZlcl9zdGF0ZSBcCisgICAgeGNfaHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUK KyNkZWZpbmUgeGVuZGV2aWNlbW9kZWxfc2V0X3BjaV9pbnR4X2xldmVsIFwKKyAgICB4Y19odm1f c2V0X3BjaV9pbnR4X2xldmVsCisjZGVmaW5lIHhlbmRldmljZW1vZGVsX3NldF9wY2lfbGlua19y b3V0ZSBcCisgICAgeGNfaHZtX3NldF9wY2lfbGlua19yb3V0ZQorI2RlZmluZSB4ZW5kZXZpY2Vt b2RlbF9zZXRfaXNhX2lycV9sZXZlbCBcCisgICAgeGNfaHZtX3NldF9pc2FfaXJxX2xldmVsCisj ZGVmaW5lIHhlbmRldmljZW1vZGVsX2luamVjdF9tc2kgXAorICAgIHhjX2h2bV9pbmplY3RfbXNp CisjZGVmaW5lIHhlbmRldmljZW1vZGVsX3NldF9tZW1fdHlwZSBcCisgICAgeGNfaHZtX3NldF9t ZW1fdHlwZQorI2RlZmluZSB4ZW5kZXZpY2Vtb2RlbF90cmFja19kaXJ0eV92cmFtIFwKKyAgICB4 Y19odm1fdHJhY2tfZGlydHlfdnJhbQorI2RlZmluZSB4ZW5kZXZpY2Vtb2RlbF9tb2RpZmllZF9t ZW1vcnkgXAorICAgIHhjX2h2bV9tb2RpZmllZF9tZW1vcnkKKworI2Vsc2UgLyogQ09ORklHX1hF Tl9DVFJMX0lOVEVSRkFDRV9WRVJTSU9OID49IDQ5MCAqLworCisjaW5jbHVkZSA8eGVuZGV2aWNl bW9kZWwuaD4KKworI2VuZGlmCisKK2V4dGVybiB4ZW5kZXZpY2Vtb2RlbF9oYW5kbGUgKnhlbl9k bW9kOworCiBzdGF0aWMgaW5saW5lIGludCB4ZW5fc2V0X21lbV90eXBlKGRvbWlkX3QgZG9taWQs IGh2bW1lbV90eXBlX3QgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDY0X3QgZmlyc3RfcGZuLCB1aW50MzJfdCBucikKIHsKLSAgICByZXR1cm4geGNfaHZtX3Nl dF9tZW1fdHlwZSh4ZW5feGMsIGRvbWlkLCB0eXBlLCBmaXJzdF9wZm4sIG5yKTsKKyAgICByZXR1 cm4geGVuZGV2aWNlbW9kZWxfc2V0X21lbV90eXBlKHhlbl9kbW9kLCBkb21pZCwgdHlwZSwgZmly c3RfcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnIpOwogfQog CiBzdGF0aWMgaW5saW5lIGludCB4ZW5fc2V0X3BjaV9pbnR4X2xldmVsKGRvbWlkX3QgZG9taWQs IHVpbnQxNl90IHNlZ21lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QgYnVzLCB1aW50OF90IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCBpbnR4LCB1bnNpZ25lZCBpbnQgbGV2ZWwpCiB7Ci0g ICAgcmV0dXJuIHhjX2h2bV9zZXRfcGNpX2ludHhfbGV2ZWwoeGVuX3hjLCBkb21pZCwgc2VnbWVu dCwgYnVzLCBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 eCwgbGV2ZWwpOworICAgIHJldHVybiB4ZW5kZXZpY2Vtb2RlbF9zZXRfcGNpX2ludHhfbGV2ZWwo eGVuX2Rtb2QsIGRvbWlkLCBzZWdtZW50LCBidXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZpY2UsIGludHgsIGxldmVsKTsKIH0KIAogc3RhdGljIGlu bGluZSBpbnQgeGVuX3NldF9wY2lfbGlua19yb3V0ZShkb21pZF90IGRvbWlkLCB1aW50OF90IGxp bmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgaXJx KQogewotICAgIHJldHVybiB4Y19odm1fc2V0X3BjaV9saW5rX3JvdXRlKHhlbl94YywgZG9taWQs IGxpbmssIGlycSk7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3NldF9wY2lfbGlua19yb3V0 ZSh4ZW5fZG1vZCwgZG9taWQsIGxpbmssIGlycSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhl bl9pbmplY3RfbXNpKGRvbWlkX3QgZG9taWQsIHVpbnQ2NF90IG1zaV9hZGRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbXNpX2RhdGEpCiB7Ci0gICAgcmV0dXJu IHhjX2h2bV9pbmplY3RfbXNpKHhlbl94YywgZG9taWQsIG1zaV9hZGRyLCBtc2lfZGF0YSk7Cisg ICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX2luamVjdF9tc2koeGVuX2Rtb2QsIGRvbWlkLCBtc2lf YWRkciwgbXNpX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB4ZW5fc2V0X2lzYV9pcnFf bGV2ZWwoZG9taWRfdCBkb21pZCwgdWludDhfdCBpcnEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxldmVsKQogewotICAgIHJldHVybiB4Y19o dm1fc2V0X2lzYV9pcnFfbGV2ZWwoeGVuX3hjLCBkb21pZCwgaXJxLCBsZXZlbCk7CisgICAgcmV0 dXJuIHhlbmRldmljZW1vZGVsX3NldF9pc2FfaXJxX2xldmVsKHhlbl9kbW9kLCBkb21pZCwgaXJx LCBsZXZlbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhlbl90cmFja19kaXJ0eV92cmFtKGRv bWlkX3QgZG9taWQsIHVpbnQ2NF90IGZpcnN0X3BmbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IG5yLCB1bnNpZ25lZCBsb25nICpiaXRtYXApCiB7Ci0g ICAgcmV0dXJuIHhjX2h2bV90cmFja19kaXJ0eV92cmFtKHhlbl94YywgZG9taWQsIGZpcnN0X3Bm biwgbnIsIGJpdG1hcCk7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3RyYWNrX2RpcnR5X3Zy YW0oeGVuX2Rtb2QsIGRvbWlkLCBmaXJzdF9wZm4sIG5yLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhl bl9tb2RpZmllZF9tZW1vcnkoZG9taWRfdCBkb21pZCwgdWludDY0X3QgZmlyc3RfcGZuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBucikKIHsKLSAgICBy ZXR1cm4geGNfaHZtX21vZGlmaWVkX21lbW9yeSh4ZW5feGMsIGRvbWlkLCBmaXJzdF9wZm4sIG5y KTsKKyAgICByZXR1cm4geGVuZGV2aWNlbW9kZWxfbW9kaWZpZWRfbWVtb3J5KHhlbl9kbW9kLCBk b21pZCwgZmlyc3RfcGZuLCBucik7CiB9CiAKIC8qIFhlbiA0LjIgdGhyb3VnaCA0LjYgKi8KQEAg LTk3LDYgKzE0NSw3IEBAIHR5cGVkZWYgeGNfZ250dGFiIHhlbmdudHRhYl9oYW5kbGU7CiAgICAg eGNfZ250dGFiX21hcF9kb21haW5fZ3JhbnRfcmVmcyhoLCBjLCBkLCByLCBwKQogCiAjZGVmaW5l IHhlbmZvcmVpZ25tZW1vcnlfb3BlbihsLCBmKSB4ZW5feGMKKyNkZWZpbmUgeGVuZm9yZWlnbm1l bW9yeV9jbG9zZShoKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnhlbmZvcmVpZ25tZW1vcnlfbWFw KHhjX2ludGVyZmFjZSAqaCwgdWludDMyX3QgZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcHJvdCwgc2l6ZV90IHBhZ2VzLApAQCAtMjg1LDggKzMzNCw4 IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fbWFwX21lbW9yeV9zZWN0aW9uKGRvbWlkX3QgZG9t LAogICAgIH0KIAogICAgIHRyYWNlX3hlbl9tYXBfbW1pb19yYW5nZShpb3NlcnZpZCwgc3RhcnRf YWRkciwgZW5kX2FkZHIpOwotICAgIHhjX2h2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVy KHhlbl94YywgZG9tLCBpb3NlcnZpZCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGFydF9hZGRyLCBlbmRfYWRkcik7CisgICAgeGVuZGV2aWNlbW9kZWxfbWFw X2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlcih4ZW5fZG1vZCwgZG9tLCBpb3NlcnZpZCwgMSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2FkZHIs IGVuZF9hZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHhlbl91bm1hcF9tZW1vcnlfc2Vj dGlvbihkb21pZF90IGRvbSwKQEAgLTMwMiw4ICszNTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg eGVuX3VubWFwX21lbW9yeV9zZWN0aW9uKGRvbWlkX3QgZG9tLAogICAgIH0KIAogICAgIHRyYWNl X3hlbl91bm1hcF9tbWlvX3JhbmdlKGlvc2VydmlkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7Ci0g ICAgeGNfaHZtX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2VydmVyKHhlbl94YywgZG9tLCBp b3NlcnZpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg c3RhcnRfYWRkciwgZW5kX2FkZHIpOworICAgIHhlbmRldmljZW1vZGVsX3VubWFwX2lvX3Jhbmdl X2Zyb21faW9yZXFfc2VydmVyKHhlbl9kbW9kLCBkb20sIGlvc2VydmlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHN0YXJ0X2FkZHIsIGVu ZF9hZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHhlbl9tYXBfaW9fc2VjdGlvbihkb21p ZF90IGRvbSwKQEAgLTMxOSw4ICszNjgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGVuX21hcF9p b19zZWN0aW9uKGRvbWlkX3QgZG9tLAogICAgIH0KIAogICAgIHRyYWNlX3hlbl9tYXBfcG9ydGlv X3JhbmdlKGlvc2VydmlkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7Ci0gICAgeGNfaHZtX21hcF9p b19yYW5nZV90b19pb3JlcV9zZXJ2ZXIoeGVuX3hjLCBkb20sIGlvc2VydmlkLCAwLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsK KyAgICB4ZW5kZXZpY2Vtb2RlbF9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKHhlbl9kbW9k LCBkb20sIGlvc2VydmlkLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZv aWQgeGVuX3VubWFwX2lvX3NlY3Rpb24oZG9taWRfdCBkb20sCkBAIC0zMzYsOCArMzg1LDggQEAg c3RhdGljIGlubGluZSB2b2lkIHhlbl91bm1hcF9pb19zZWN0aW9uKGRvbWlkX3QgZG9tLAogICAg IH0KIAogICAgIHRyYWNlX3hlbl91bm1hcF9wb3J0aW9fcmFuZ2UoaW9zZXJ2aWQsIHN0YXJ0X2Fk ZHIsIGVuZF9hZGRyKTsKLSAgICB4Y19odm1fdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2 ZXIoeGVuX3hjLCBkb20sIGlvc2VydmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7CisgICAgeGVuZGV2aWNlbW9k ZWxfdW5tYXBfaW9fcmFuZ2VfZnJvbV9pb3JlcV9zZXJ2ZXIoeGVuX2Rtb2QsIGRvbSwgaW9zZXJ2 aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgeGVuX21h cF9wY2lkZXYoZG9taWRfdCBkb20sCkBAIC0zNTAsMTAgKzM5OSwxMCBAQCBzdGF0aWMgaW5saW5l IHZvaWQgeGVuX21hcF9wY2lkZXYoZG9taWRfdCBkb20sCiAKICAgICB0cmFjZV94ZW5fbWFwX3Bj aWRldihpb3NlcnZpZCwgcGNpX2J1c19udW0ocGNpX2Rldi0+YnVzKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICBQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBjaV9kZXYtPmRl dmZuKSk7Ci0gICAgeGNfaHZtX21hcF9wY2lkZXZfdG9faW9yZXFfc2VydmVyKHhlbl94YywgZG9t LCBpb3NlcnZpZCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNp X2J1c19udW0ocGNpX2Rldi0+YnVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbikpOworICAgIHhlbmRldmljZW1v ZGVsX21hcF9wY2lkZXZfdG9faW9yZXFfc2VydmVyKHhlbl9kbW9kLCBkb20sIGlvc2VydmlkLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9idXNf bnVtKHBjaV9kZXYtPmJ1cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKSk7CiB9CiAK IHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fdW5tYXBfcGNpZGV2KGRvbWlkX3QgZG9tLApAQCAtMzY2 LDE4ICs0MTUsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHhlbl91bm1hcF9wY2lkZXYoZG9taWRf dCBkb20sCiAKICAgICB0cmFjZV94ZW5fdW5tYXBfcGNpZGV2KGlvc2VydmlkLCBwY2lfYnVzX251 bShwY2lfZGV2LT5idXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX1NMT1QocGNp X2Rldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbikpOwotICAgIHhjX2h2bV91bm1h cF9wY2lkZXZfZnJvbV9pb3JlcV9zZXJ2ZXIoeGVuX3hjLCBkb20sIGlvc2VydmlkLCAwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2J1c19udW0ocGNpX2Rl di0+YnVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9T TE9UKHBjaV9kZXYtPmRldmZuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKSk7CisgICAgeGVuZGV2aWNlbW9kZWxfdW5t YXBfcGNpZGV2X2Zyb21faW9yZXFfc2VydmVyKHhlbl9kbW9kLCBkb20sIGlvc2VydmlkLCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfYnVz X251bShwY2lfZGV2LT5idXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9GVU5DKHBjaV9kZXYtPmRldmZu KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5fY3JlYXRlX2lvcmVxX3NlcnZlcihkb21p ZF90IGRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nl cnZpZF90ICppb3NlcnZpZCkKIHsKLSAgICBpbnQgcmMgPSB4Y19odm1fY3JlYXRlX2lvcmVxX3Nl cnZlcih4ZW5feGMsIGRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIVk1fSU9SRVFTUlZfQlVGSU9SRVFfQVRPTUlDLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlvc2VydmlkKTsKKyAgICBpbnQgcmMgPSB4ZW5kZXZpY2Vtb2RlbF9j cmVhdGVfaW9yZXFfc2VydmVyKHhlbl9kbW9kLCBkb20sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIVk1fSU9SRVFTUlZfQlVGSU9SRVFfQVRPTUlDLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zZXJ2aWQp OwogCiAgICAgaWYgKHJjID09IDApIHsKICAgICAgICAgdHJhY2VfeGVuX2lvcmVxX3NlcnZlcl9j cmVhdGUoKmlvc2VydmlkKTsKQEAgLTM5Nyw3ICs0NDYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg eGVuX2Rlc3Ryb3lfaW9yZXFfc2VydmVyKGRvbWlkX3QgZG9tLAogICAgIH0KIAogICAgIHRyYWNl X3hlbl9pb3JlcV9zZXJ2ZXJfZGVzdHJveShpb3NlcnZpZCk7Ci0gICAgeGNfaHZtX2Rlc3Ryb3lf aW9yZXFfc2VydmVyKHhlbl94YywgZG9tLCBpb3NlcnZpZCk7CisgICAgeGVuZGV2aWNlbW9kZWxf ZGVzdHJveV9pb3JlcV9zZXJ2ZXIoeGVuX2Rtb2QsIGRvbSwgaW9zZXJ2aWQpOwogfQogCiBzdGF0 aWMgaW5saW5lIGludCB4ZW5fZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKGRvbWlkX3QgZG9tLApAQCAt NDEyLDkgKzQ2MSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IHhlbl9nZXRfaW9yZXFfc2VydmVyX2lu Zm8oZG9taWRfdCBkb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnVmaW9yZXFfZXZ0Y2huKTsKICAgICB9CiAKLSAgICByZXR1cm4geGNfaHZtX2dl dF9pb3JlcV9zZXJ2ZXJfaW5mbyh4ZW5feGMsIGRvbSwgaW9zZXJ2aWQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9yZXFfcGZuLCBidWZpb3JlcV9wZm4sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW9yZXFfZXZ0Y2huKTsKKyAg ICByZXR1cm4geGVuZGV2aWNlbW9kZWxfZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKHhlbl9kbW9kLCBk b20sIGlvc2VydmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW9yZXFfcGZuLCBidWZpb3JlcV9wZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBidWZpb3JlcV9ldnRjaG4pOwogfQogCiBzdGF0aWMgaW5s aW5lIGludCB4ZW5fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZShkb21pZF90IGRvbSwKQEAgLTQyNiw4 ICs0NzUsOCBAQCBzdGF0aWMgaW5saW5lIGludCB4ZW5fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZShk b21pZF90IGRvbSwKICAgICB9CiAKICAgICB0cmFjZV94ZW5faW9yZXFfc2VydmVyX3N0YXRlKGlv c2VydmlkLCBlbmFibGUpOwotICAgIHJldHVybiB4Y19odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0 ZSh4ZW5feGMsIGRvbSwgaW9zZXJ2aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVuYWJsZSk7CisgICAgcmV0dXJuIHhlbmRldmljZW1vZGVsX3NldF9pb3JlcV9z ZXJ2ZXJfc3RhdGUoeGVuX2Rtb2QsIGRvbSwgaW9zZXJ2aWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlKTsKIH0KIAogI2VuZGlmCmRpZmYg LS1naXQgYS94ZW4tY29tbW9uLmMgYi94ZW4tY29tbW9uLmMKaW5kZXggNzAzZTdhNS4uYWU3NjE1 MCAxMDA2NDQKLS0tIGEveGVuLWNvbW1vbi5jCisrKyBiL3hlbi1jb21tb24uYwpAQCAtMjcsNiAr MjcsNyBAQAogCiB4Y19pbnRlcmZhY2UgKnhlbl94YzsKIHhlbmZvcmVpZ25tZW1vcnlfaGFuZGxl ICp4ZW5fZm1lbTsKK3hlbmRldmljZW1vZGVsX2hhbmRsZSAqeGVuX2Rtb2Q7CiAKIHN0YXRpYyBp bnQgc3RvcmVfZGV2X2luZm8oaW50IGRvbWlkLCBDaGFyZGV2ICpjcywgY29uc3QgY2hhciAqc3Ry aW5nKQogewpAQCAtMTI4LDYgKzEyOSwxMyBAQCBzdGF0aWMgaW50IHhlbl9pbml0KE1hY2hpbmVT dGF0ZSAqbXMpCiAgICAgICAgIHhjX2ludGVyZmFjZV9jbG9zZSh4ZW5feGMpOwogICAgICAgICBy ZXR1cm4gLTE7CiAgICAgfQorICAgIHhlbl9kbW9kID0geGVuZGV2aWNlbW9kZWxfb3BlbigwLCAw KTsKKyAgICBpZiAoeGVuX2Rtb2QgPT0gTlVMTCkgeworICAgICAgICB4ZW5fcHZfcHJpbnRmKE5V TEwsIDAsICJjYW4ndCBvcGVuIHhlbiBkZXZpY2Vtb2RlbCBpbnRlcmZhY2VcbiIpOworICAgICAg ICB4ZW5mb3JlaWdubWVtb3J5X2Nsb3NlKHhlbl9mbWVtKTsKKyAgICAgICAgeGNfaW50ZXJmYWNl X2Nsb3NlKHhlbl94Yyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgcWVtdV9hZGRf dm1fY2hhbmdlX3N0YXRlX2hhbmRsZXIoeGVuX2NoYW5nZV9zdGF0ZV9oYW5kbGVyLCBOVUxMKTsK IAogICAgIGdsb2JhbF9zdGF0ZV9zZXRfb3B0aW9uYWwoKTsKLS0gCjIuMS40CgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==