From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37264) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gNc0l-0007lc-G3 for qemu-devel@nongnu.org; Fri, 16 Nov 2018 06:10:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gNc0k-0005xJ-0j for qemu-devel@nongnu.org; Fri, 16 Nov 2018 06:10:07 -0500 Date: Fri, 16 Nov 2018 12:09:48 +0100 From: Igor Mammedov Message-ID: <20181116120948.7ce7bcd5@redhat.com> In-Reply-To: <20181105014047.26447-23-sameo@linux.intel.com> References: <20181105014047.26447-1-sameo@linux.intel.com> <20181105014047.26447-23-sameo@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v5 22/24] hw: pci-host: piix: Return PCI host pointer instead of PCI bus List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Samuel Ortiz Cc: qemu-devel@nongnu.org, Shannon Zhao , Stefano Stabellini , Anthony Perard , Richard Henderson , Marcel Apfelbaum , xen-devel@lists.xenproject.org, Paolo Bonzini , "Michael S. Tsirkin" , qemu-arm@nongnu.org, Peter Maydell , Eduardo Habkost , Auger Eric , Andrew Jones On Mon, 5 Nov 2018 02:40:45 +0100 Samuel Ortiz wrote: All remaining patches a bit out of proper order, they should be around patch 12/24 where you started to touch MCFG code. > For building the MCFG table, we need to track a given machine > type PCI host pointer, and we can't get it from the bus pointer alone. > As piix returns a PCI bus pointer, we simply modify its builder to > return a PCI host pointer instead. PC machine doesn't build MCFG so we don't really need it to provide this pointer, having this patch doesn't hurt but I'm not sure we need it. CCing ARM folks since we are talking about generalizing MCFG table generation. we have following invariants wrt using MCFG: pc [pci_host != NULL] -> bail out early + do not build MCFG pc [pci_host == NULL] -> would explode if not only for [has_acpi_build = false] guard should be: do not even call acpi_get_mcfg(). q35 [pci_host == NULL] -> not valid combo and must assert q35 [pci_host != NULL && mcfg_base != PCIE_BASE_ADDR_UNMAPPED] generate MCFG using mcfg_base/size q35 [pci_host != NULL && mcfg_base == PCIE_BASE_ADDR_UNMAPPED] generate place-holder 'QEMU' table for legacy machine versions without resizable MemoryRegion support. Mapped/not mapped could be dynamic accross reboots, so we need access to PCIE(pci_host) to fetch current values. arm/virt gpex [memmap[ecam_id].base/size] do build MCFG hacked up variant that doesn't use pci_host mcfg_base/size fields not sure if it's possible to disable ecam as on q35 (does it need any fixing?) we should fix arm/virt to use pci-host mcfg_base/size so we could reuse properties PCIE_HOST_MCFG_BASE/PCIE_HOST_MCFG_SIZE on ARM and generic build_mcfg() So we have quite a mess here, the current acpi_get_mcfg() does 2 things 1. indirectly checks that pci_host is PCI-E (presence of PCIE_HOST_MCFG_BASE property) 2. fetches mcfg_base/size if it's PCI-E host and i386/build_mcfg() is called only when #1 is true As far as see we use pci_host only to fetch mcfg_base/size and not for anything else. Maybe as refactoring plan we should" * pass to acpi_setup(PCIHostState* pcie_host) as an argument pcie host pointer, which for PC will be NULL and for the rest set it to q35/gxpe/... PCI-E host. * call build_mcfg() if pcie_host != NULL (no more indirect guessing using PCIE_HOST_MCFG_BASE property presence) * move MCFG/QEMU table signature decision out of build_mcfg() and pass it as argument 'build_mcfg(...,char *mcfg_signature)'. It moves out masking table quirk into caller, where q35 can decide to change signature if ECAM is not mapped. The rest (arm|i386/virt) will always pass 'MCFG'. Or even better if ecam is mapped, create MCFG (with masking trick if q35 machine is old and do not support resizable MemoryRegions). > Signed-off-by: Samuel Ortiz > --- > include/hw/i386/pc.h | 21 +++++++++++---------- > hw/i386/pc_piix.c | 18 +++++++++++------- > hw/pci-host/piix.c | 24 ++++++++++++------------ > 3 files changed, 34 insertions(+), 29 deletions(-) > > diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h > index 8e5f1464eb..b6b79e146d 100644 > --- a/include/hw/i386/pc.h > +++ b/include/hw/i386/pc.h > @@ -244,16 +244,17 @@ typedef struct PCII440FXState PCII440FXState; > */ > #define RCR_IOPORT 0xcf9 > > -PCIBus *i440fx_init(const char *host_type, const char *pci_type, > - PCII440FXState **pi440fx_state, int *piix_devfn, > - ISABus **isa_bus, qemu_irq *pic, > - MemoryRegion *address_space_mem, > - MemoryRegion *address_space_io, > - ram_addr_t ram_size, > - ram_addr_t below_4g_mem_size, > - ram_addr_t above_4g_mem_size, > - MemoryRegion *pci_memory, > - MemoryRegion *ram_memory); > +struct PCIHostState *i440fx_init(const char *host_type, const char *pci_type, > + PCII440FXState **pi440fx_state, > + int *piix_devfn, > + ISABus **isa_bus, qemu_irq *pic, > + MemoryRegion *address_space_mem, > + MemoryRegion *address_space_io, > + ram_addr_t ram_size, > + ram_addr_t below_4g_mem_size, > + ram_addr_t above_4g_mem_size, > + MemoryRegion *pci_memory, > + MemoryRegion *ram_memory); > > /* piix4.c */ > extern PCIDevice *piix4_dev; > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index 0620d10715..f5b139a3eb 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -32,6 +32,7 @@ > #include "hw/display/ramfb.h" > #include "hw/smbios/smbios.h" > #include "hw/pci/pci.h" > +#include "hw/pci/pci_host.h" > #include "hw/pci/pci_ids.h" > #include "hw/usb.h" > #include "net/net.h" > @@ -75,6 +76,7 @@ static void pc_init1(MachineState *machine, > MemoryRegion *system_memory = get_system_memory(); > MemoryRegion *system_io = get_system_io(); > int i; > + struct PCIHostState *pci_host; > PCIBus *pci_bus; > ISABus *isa_bus; > PCII440FXState *i440fx_state; > @@ -196,15 +198,17 @@ static void pc_init1(MachineState *machine, > } > > if (pcmc->pci_enabled) { > - pci_bus = i440fx_init(host_type, > - pci_type, > - &i440fx_state, &piix3_devfn, &isa_bus, pcms->gsi, > - system_memory, system_io, machine->ram_size, > - acpi_conf->below_4g_mem_size, > - acpi_conf->above_4g_mem_size, > - pci_memory, ram_memory); > + pci_host = i440fx_init(host_type, > + pci_type, > + &i440fx_state, &piix3_devfn, &isa_bus, pcms->gsi, > + system_memory, system_io, machine->ram_size, > + acpi_conf->below_4g_mem_size, > + acpi_conf->above_4g_mem_size, > + pci_memory, ram_memory); > + pci_bus = pci_host->bus; > pcms->bus = pci_bus; > } else { > + pci_host = NULL; > pci_bus = NULL; > i440fx_state = NULL; > isa_bus = isa_bus_new(NULL, get_system_memory(), system_io, > diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c > index 658460264b..4a412db44c 100644 > --- a/hw/pci-host/piix.c > +++ b/hw/pci-host/piix.c > @@ -342,17 +342,17 @@ static void i440fx_realize(PCIDevice *dev, Error **errp) > } > } > > -PCIBus *i440fx_init(const char *host_type, const char *pci_type, > - PCII440FXState **pi440fx_state, > - int *piix3_devfn, > - ISABus **isa_bus, qemu_irq *pic, > - MemoryRegion *address_space_mem, > - MemoryRegion *address_space_io, > - ram_addr_t ram_size, > - ram_addr_t below_4g_mem_size, > - ram_addr_t above_4g_mem_size, > - MemoryRegion *pci_address_space, > - MemoryRegion *ram_memory) > +struct PCIHostState *i440fx_init(const char *host_type, const char *pci_type, > + PCII440FXState **pi440fx_state, > + int *piix3_devfn, > + ISABus **isa_bus, qemu_irq *pic, > + MemoryRegion *address_space_mem, > + MemoryRegion *address_space_io, > + ram_addr_t ram_size, > + ram_addr_t below_4g_mem_size, > + ram_addr_t above_4g_mem_size, > + MemoryRegion *pci_address_space, > + MemoryRegion *ram_memory) > { > DeviceState *dev; > PCIBus *b; > @@ -442,7 +442,7 @@ PCIBus *i440fx_init(const char *host_type, const char *pci_type, > > i440fx_update_memory_mappings(f); > > - return b; > + return s; > } > > /* PIIX3 PCI to ISA bridge */ From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igor Mammedov Subject: Re: [PATCH v5 22/24] hw: pci-host: piix: Return PCI host pointer instead of PCI bus Date: Fri, 16 Nov 2018 12:09:48 +0100 Message-ID: <20181116120948.7ce7bcd5@redhat.com> References: <20181105014047.26447-1-sameo@linux.intel.com> <20181105014047.26447-23-sameo@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gNc0d-000419-CU for xen-devel@lists.xenproject.org; Fri, 16 Nov 2018 11:09:59 +0000 In-Reply-To: <20181105014047.26447-23-sameo@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Samuel Ortiz Cc: Peter Maydell , Andrew Jones , Stefano Stabellini , Eduardo Habkost , "Michael S. Tsirkin" , qemu-devel@nongnu.org, Shannon Zhao , qemu-arm@nongnu.org, Marcel Apfelbaum , Paolo Bonzini , Anthony Perard , xen-devel@lists.xenproject.org, Auger Eric , Richard Henderson List-Id: xen-devel@lists.xenproject.org T24gTW9uLCAgNSBOb3YgMjAxOCAwMjo0MDo0NSArMDEwMApTYW11ZWwgT3J0aXogPHNhbWVvQGxp bnV4LmludGVsLmNvbT4gd3JvdGU6CgpBbGwgcmVtYWluaW5nIHBhdGNoZXMgYSBiaXQgb3V0IG9m IHByb3BlciBvcmRlciwKdGhleSBzaG91bGQgYmUgYXJvdW5kIHBhdGNoIDEyLzI0IHdoZXJlIHlv dSBzdGFydGVkIHRvIHRvdWNoIE1DRkcgY29kZS4KCj4gRm9yIGJ1aWxkaW5nIHRoZSBNQ0ZHIHRh YmxlLCB3ZSBuZWVkIHRvIHRyYWNrIGEgZ2l2ZW4gbWFjaGluZQo+IHR5cGUgUENJIGhvc3QgcG9p bnRlciwgYW5kIHdlIGNhbid0IGdldCBpdCBmcm9tIHRoZSBidXMgcG9pbnRlciBhbG9uZS4KPiBB cyBwaWl4IHJldHVybnMgYSBQQ0kgYnVzIHBvaW50ZXIsIHdlIHNpbXBseSBtb2RpZnkgaXRzIGJ1 aWxkZXIgdG8KPiByZXR1cm4gYSBQQ0kgaG9zdCBwb2ludGVyIGluc3RlYWQuClBDIG1hY2hpbmUg ZG9lc24ndCBidWlsZCBNQ0ZHIHNvIHdlIGRvbid0IHJlYWxseSBuZWVkIGl0IHRvIHByb3ZpZGUK dGhpcyBwb2ludGVyLCBoYXZpbmcgdGhpcyBwYXRjaCBkb2Vzbid0IGh1cnQgYnV0IEknbSBub3Qg c3VyZSB3ZQpuZWVkIGl0LgoKQ0NpbmcgQVJNIGZvbGtzIHNpbmNlIHdlIGFyZSB0YWxraW5nIGFi b3V0IGdlbmVyYWxpemluZyBNQ0ZHIHRhYmxlIGdlbmVyYXRpb24uCgp3ZSBoYXZlIGZvbGxvd2lu ZyBpbnZhcmlhbnRzIHdydCB1c2luZyBNQ0ZHOgoKICAgcGMgW3BjaV9ob3N0ICE9IE5VTExdIC0+ IGJhaWwgb3V0IGVhcmx5ICsgZG8gbm90IGJ1aWxkIE1DRkcKCiAgIHBjIFtwY2lfaG9zdCA9PSBO VUxMXSAtPiB3b3VsZCBleHBsb2RlIGlmIG5vdCBvbmx5IGZvciBbaGFzX2FjcGlfYnVpbGQgPSBm YWxzZV0gZ3VhcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZTogZG8gbm90 IGV2ZW4gY2FsbCBhY3BpX2dldF9tY2ZnKCkuCgogICBxMzUgW3BjaV9ob3N0ID09IE5VTExdIC0+ IG5vdCB2YWxpZCBjb21ibyBhbmQgbXVzdCBhc3NlcnQKCiAgIHEzNSBbcGNpX2hvc3QgIT0gTlVM TCAmJiBtY2ZnX2Jhc2UgIT0gUENJRV9CQVNFX0FERFJfVU5NQVBQRURdCiAgICAgICAgZ2VuZXJh dGUgTUNGRyB1c2luZyBtY2ZnX2Jhc2Uvc2l6ZQoKICAgcTM1IFtwY2lfaG9zdCAhPSBOVUxMICYm IG1jZmdfYmFzZSA9PSBQQ0lFX0JBU0VfQUREUl9VTk1BUFBFRF0KICAgICAgICBnZW5lcmF0ZSBw bGFjZS1ob2xkZXIgJ1FFTVUnIHRhYmxlIGZvciBsZWdhY3kgbWFjaGluZSB2ZXJzaW9ucyB3aXRo b3V0CiAgICAgICAgcmVzaXphYmxlIE1lbW9yeVJlZ2lvbiBzdXBwb3J0LgogICAgICAgIE1hcHBl ZC9ub3QgbWFwcGVkIGNvdWxkIGJlIGR5bmFtaWMgYWNjcm9zcyByZWJvb3RzLCBzbyB3ZSBuZWVk CiAgICAgICAgYWNjZXNzIHRvIFBDSUUocGNpX2hvc3QpIHRvIGZldGNoIGN1cnJlbnQgdmFsdWVz LgoKICAgYXJtL3ZpcnQgZ3BleCBbbWVtbWFwW2VjYW1faWRdLmJhc2Uvc2l6ZV0gZG8gYnVpbGQg TUNGRwogICAgICAgIGhhY2tlZCB1cCB2YXJpYW50IHRoYXQgZG9lc24ndCB1c2UgcGNpX2hvc3Qg bWNmZ19iYXNlL3NpemUgZmllbGRzCiAgICAgICAgbm90IHN1cmUgaWYgaXQncyBwb3NzaWJsZSB0 byBkaXNhYmxlIGVjYW0gYXMgb24gcTM1IChkb2VzIGl0IG5lZWQgYW55IGZpeGluZz8pCiAgICAg ICAgd2Ugc2hvdWxkIGZpeCBhcm0vdmlydCB0byB1c2UgcGNpLWhvc3QgbWNmZ19iYXNlL3NpemUg c28gd2UKICAgICAgICBjb3VsZCByZXVzZSBwcm9wZXJ0aWVzIFBDSUVfSE9TVF9NQ0ZHX0JBU0Uv UENJRV9IT1NUX01DRkdfU0laRQogICAgICAgIG9uIEFSTSBhbmQgZ2VuZXJpYyBidWlsZF9tY2Zn KCkKClNvIHdlIGhhdmUgcXVpdGUgYSBtZXNzIGhlcmUsIHRoZSBjdXJyZW50IGFjcGlfZ2V0X21j ZmcoKSBkb2VzIDIgdGhpbmdzCiAgMS4gaW5kaXJlY3RseSBjaGVja3MgdGhhdCBwY2lfaG9zdCBp cyBQQ0ktRSAocHJlc2VuY2Ugb2YgUENJRV9IT1NUX01DRkdfQkFTRSBwcm9wZXJ0eSkKICAyLiBm ZXRjaGVzIG1jZmdfYmFzZS9zaXplIGlmIGl0J3MgUENJLUUgaG9zdAoKYW5kIGkzODYvYnVpbGRf bWNmZygpIGlzIGNhbGxlZCBvbmx5IHdoZW4gIzEgaXMgdHJ1ZQoKQXMgZmFyIGFzIHNlZSB3ZSB1 c2UgcGNpX2hvc3Qgb25seSB0byBmZXRjaCBtY2ZnX2Jhc2Uvc2l6ZSBhbmQgbm90IGZvciBhbnl0 aGluZwplbHNlLgpNYXliZSBhcyByZWZhY3RvcmluZyBwbGFuIHdlIHNob3VsZCIKICogcGFzcyB0 byBhY3BpX3NldHVwKFBDSUhvc3RTdGF0ZSogcGNpZV9ob3N0KSBhcyBhbiBhcmd1bWVudCBwY2ll IGhvc3QgcG9pbnRlciwKICAgd2hpY2ggZm9yIFBDIHdpbGwgYmUgTlVMTCBhbmQgZm9yIHRoZSBy ZXN0IHNldCBpdCB0byBxMzUvZ3hwZS8uLi4gUENJLUUgaG9zdC4KICogY2FsbCBidWlsZF9tY2Zn KCkgaWYgcGNpZV9ob3N0ICE9IE5VTEwKICAgKG5vIG1vcmUgaW5kaXJlY3QgZ3Vlc3NpbmcgdXNp bmcgUENJRV9IT1NUX01DRkdfQkFTRSBwcm9wZXJ0eSBwcmVzZW5jZSkKICogbW92ZSBNQ0ZHL1FF TVUgdGFibGUgc2lnbmF0dXJlIGRlY2lzaW9uIG91dCBvZiBidWlsZF9tY2ZnKCkgYW5kIHBhc3MK ICAgaXQgYXMgYXJndW1lbnQgJ2J1aWxkX21jZmcoLi4uLGNoYXIgKm1jZmdfc2lnbmF0dXJlKScu IEl0IG1vdmVzIG91dCBtYXNraW5nCiAgIHRhYmxlIHF1aXJrIGludG8gY2FsbGVyLCB3aGVyZSBx MzUgY2FuIGRlY2lkZSB0byBjaGFuZ2Ugc2lnbmF0dXJlCiAgIGlmIEVDQU0gaXMgbm90IG1hcHBl ZC4gVGhlIHJlc3QgKGFybXxpMzg2L3ZpcnQpIHdpbGwgYWx3YXlzIHBhc3MgJ01DRkcnLgogICBP ciBldmVuIGJldHRlciBpZiBlY2FtIGlzIG1hcHBlZCwgY3JlYXRlIE1DRkcgKHdpdGggbWFza2lu ZyB0cmljayBpZiBxMzUKICAgbWFjaGluZSBpcyBvbGQgYW5kIGRvIG5vdCBzdXBwb3J0IHJlc2l6 YWJsZSBNZW1vcnlSZWdpb25zKS4KCj4gU2lnbmVkLW9mZi1ieTogU2FtdWVsIE9ydGl6IDxzYW1l b0BsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGluY2x1ZGUvaHcvaTM4Ni9wYy5oIHwgMjEgKysr KysrKysrKystLS0tLS0tLS0tCj4gIGh3L2kzODYvcGNfcGlpeC5jICAgIHwgMTggKysrKysrKysr KystLS0tLS0tCj4gIGh3L3BjaS1ob3N0L3BpaXguYyAgIHwgMjQgKysrKysrKysrKysrLS0tLS0t LS0tLS0tCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcvaTM4Ni9wYy5oIGIvaW5jbHVkZS9ody9p Mzg2L3BjLmgKPiBpbmRleCA4ZTVmMTQ2NGViLi5iNmI3OWUxNDZkIDEwMDY0NAo+IC0tLSBhL2lu Y2x1ZGUvaHcvaTM4Ni9wYy5oCj4gKysrIGIvaW5jbHVkZS9ody9pMzg2L3BjLmgKPiBAQCAtMjQ0 LDE2ICsyNDQsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgUENJSTQ0MEZYU3RhdGUgUENJSTQ0MEZYU3Rh dGU7Cj4gICAqLwo+ICAjZGVmaW5lIFJDUl9JT1BPUlQgMHhjZjkKPiAgCj4gLVBDSUJ1cyAqaTQ0 MGZ4X2luaXQoY29uc3QgY2hhciAqaG9zdF90eXBlLCBjb25zdCBjaGFyICpwY2lfdHlwZSwKPiAt ICAgICAgICAgICAgICAgICAgICBQQ0lJNDQwRlhTdGF0ZSAqKnBpNDQwZnhfc3RhdGUsIGludCAq cGlpeF9kZXZmbiwKPiAtICAgICAgICAgICAgICAgICAgICBJU0FCdXMgKippc2FfYnVzLCBxZW11 X2lycSAqcGljLAo+IC0gICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqYWRkcmVzc19z cGFjZV9tZW0sCj4gLSAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uICphZGRyZXNzX3Nw YWNlX2lvLAo+IC0gICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3QgcmFtX3NpemUsCj4gLSAg ICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBiZWxvd180Z19tZW1fc2l6ZSwKPiAtICAgICAg ICAgICAgICAgICAgICByYW1fYWRkcl90IGFib3ZlXzRnX21lbV9zaXplLAo+IC0gICAgICAgICAg ICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqcGNpX21lbW9yeSwKPiAtICAgICAgICAgICAgICAgICAg ICBNZW1vcnlSZWdpb24gKnJhbV9tZW1vcnkpOwo+ICtzdHJ1Y3QgUENJSG9zdFN0YXRlICppNDQw ZnhfaW5pdChjb25zdCBjaGFyICpob3N0X3R5cGUsIGNvbnN0IGNoYXIgKnBjaV90eXBlLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lJNDQwRlhTdGF0ZSAqKnBpNDQwZnhf c3RhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGlpeF9kZXZm biwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNBQnVzICoqaXNhX2J1cywg cWVtdV9pcnEgKnBpYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5 UmVnaW9uICphZGRyZXNzX3NwYWNlX21lbSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTWVtb3J5UmVnaW9uICphZGRyZXNzX3NwYWNlX2lvLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByYW1fYWRkcl90IHJhbV9zaXplLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByYW1fYWRkcl90IGJlbG93XzRnX21lbV9zaXplLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fYWRkcl90IGFib3ZlXzRnX21lbV9zaXplLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZWdpb24gKnBjaV9tZW1v cnksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqcmFt X21lbW9yeSk7Cj4gIAo+ICAvKiBwaWl4NC5jICovCj4gIGV4dGVybiBQQ0lEZXZpY2UgKnBpaXg0 X2RldjsKPiBkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9wY19waWl4LmMgYi9ody9pMzg2L3BjX3BpaXgu Ywo+IGluZGV4IDA2MjBkMTA3MTUuLmY1YjEzOWEzZWIgMTAwNjQ0Cj4gLS0tIGEvaHcvaTM4Ni9w Y19waWl4LmMKPiArKysgYi9ody9pMzg2L3BjX3BpaXguYwo+IEBAIC0zMiw2ICszMiw3IEBACj4g ICNpbmNsdWRlICJody9kaXNwbGF5L3JhbWZiLmgiCj4gICNpbmNsdWRlICJody9zbWJpb3Mvc21i aW9zLmgiCj4gICNpbmNsdWRlICJody9wY2kvcGNpLmgiCj4gKyNpbmNsdWRlICJody9wY2kvcGNp X2hvc3QuaCIKPiAgI2luY2x1ZGUgImh3L3BjaS9wY2lfaWRzLmgiCj4gICNpbmNsdWRlICJody91 c2IuaCIKPiAgI2luY2x1ZGUgIm5ldC9uZXQuaCIKPiBAQCAtNzUsNiArNzYsNyBAQCBzdGF0aWMg dm9pZCBwY19pbml0MShNYWNoaW5lU3RhdGUgKm1hY2hpbmUsCj4gICAgICBNZW1vcnlSZWdpb24g KnN5c3RlbV9tZW1vcnkgPSBnZXRfc3lzdGVtX21lbW9yeSgpOwo+ICAgICAgTWVtb3J5UmVnaW9u ICpzeXN0ZW1faW8gPSBnZXRfc3lzdGVtX2lvKCk7Cj4gICAgICBpbnQgaTsKPiArICAgIHN0cnVj dCBQQ0lIb3N0U3RhdGUgKnBjaV9ob3N0Owo+ICAgICAgUENJQnVzICpwY2lfYnVzOwo+ICAgICAg SVNBQnVzICppc2FfYnVzOwo+ICAgICAgUENJSTQ0MEZYU3RhdGUgKmk0NDBmeF9zdGF0ZTsKPiBA QCAtMTk2LDE1ICsxOTgsMTcgQEAgc3RhdGljIHZvaWQgcGNfaW5pdDEoTWFjaGluZVN0YXRlICpt YWNoaW5lLAo+ICAgICAgfQo+ICAKPiAgICAgIGlmIChwY21jLT5wY2lfZW5hYmxlZCkgewo+IC0g ICAgICAgIHBjaV9idXMgPSBpNDQwZnhfaW5pdChob3N0X3R5cGUsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBjaV90eXBlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmaTQ0MGZ4X3N0YXRlLCAmcGlpeDNfZGV2Zm4sICZpc2FfYnVzLCBwY21zLT5nc2ksCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9tZW1vcnksIHN5c3RlbV9pbywgbWFj aGluZS0+cmFtX3NpemUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfY29u Zi0+YmVsb3dfNGdfbWVtX3NpemUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj cGlfY29uZi0+YWJvdmVfNGdfbWVtX3NpemUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBjaV9tZW1vcnksIHJhbV9tZW1vcnkpOwo+ICsgICAgICAgIHBjaV9ob3N0ID0gaTQ0MGZ4 X2luaXQoaG9zdF90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3R5 cGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaTQ0MGZ4X3N0YXRlLCAmcGlp eDNfZGV2Zm4sICZpc2FfYnVzLCBwY21zLT5nc2ksCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzeXN0ZW1fbWVtb3J5LCBzeXN0ZW1faW8sIG1hY2hpbmUtPnJhbV9zaXplLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNwaV9jb25mLT5iZWxvd180Z19tZW1fc2l6 ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjcGlfY29uZi0+YWJvdmVfNGdf bWVtX3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfbWVtb3J5LCBy YW1fbWVtb3J5KTsKPiArICAgICAgICBwY2lfYnVzID0gcGNpX2hvc3QtPmJ1czsKPiAgICAgICAg ICBwY21zLT5idXMgPSBwY2lfYnVzOwo+ICAgICAgfSBlbHNlIHsKPiArICAgICAgICBwY2lfaG9z dCA9IE5VTEw7Cj4gICAgICAgICAgcGNpX2J1cyA9IE5VTEw7Cj4gICAgICAgICAgaTQ0MGZ4X3N0 YXRlID0gTlVMTDsKPiAgICAgICAgICBpc2FfYnVzID0gaXNhX2J1c19uZXcoTlVMTCwgZ2V0X3N5 c3RlbV9tZW1vcnkoKSwgc3lzdGVtX2lvLAo+IGRpZmYgLS1naXQgYS9ody9wY2ktaG9zdC9waWl4 LmMgYi9ody9wY2ktaG9zdC9waWl4LmMKPiBpbmRleCA2NTg0NjAyNjRiLi40YTQxMmRiNDRjIDEw MDY0NAo+IC0tLSBhL2h3L3BjaS1ob3N0L3BpaXguYwo+ICsrKyBiL2h3L3BjaS1ob3N0L3BpaXgu Ywo+IEBAIC0zNDIsMTcgKzM0MiwxNyBAQCBzdGF0aWMgdm9pZCBpNDQwZnhfcmVhbGl6ZShQQ0lE ZXZpY2UgKmRldiwgRXJyb3IgKiplcnJwKQo+ICAgICAgfQo+ICB9Cj4gIAo+IC1QQ0lCdXMgKmk0 NDBmeF9pbml0KGNvbnN0IGNoYXIgKmhvc3RfdHlwZSwgY29uc3QgY2hhciAqcGNpX3R5cGUsCj4g LSAgICAgICAgICAgICAgICAgICAgUENJSTQ0MEZYU3RhdGUgKipwaTQ0MGZ4X3N0YXRlLAo+IC0g ICAgICAgICAgICAgICAgICAgIGludCAqcGlpeDNfZGV2Zm4sCj4gLSAgICAgICAgICAgICAgICAg ICAgSVNBQnVzICoqaXNhX2J1cywgcWVtdV9pcnEgKnBpYywKPiAtICAgICAgICAgICAgICAgICAg ICBNZW1vcnlSZWdpb24gKmFkZHJlc3Nfc3BhY2VfbWVtLAo+IC0gICAgICAgICAgICAgICAgICAg IE1lbW9yeVJlZ2lvbiAqYWRkcmVzc19zcGFjZV9pbywKPiAtICAgICAgICAgICAgICAgICAgICBy YW1fYWRkcl90IHJhbV9zaXplLAo+IC0gICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3QgYmVs b3dfNGdfbWVtX3NpemUsCj4gLSAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBhYm92ZV80 Z19tZW1fc2l6ZSwKPiAtICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZWdpb24gKnBjaV9hZGRy ZXNzX3NwYWNlLAo+IC0gICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqcmFtX21lbW9y eSkKPiArc3RydWN0IFBDSUhvc3RTdGF0ZSAqaTQ0MGZ4X2luaXQoY29uc3QgY2hhciAqaG9zdF90 eXBlLCBjb25zdCBjaGFyICpwY2lfdHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUENJSTQ0MEZYU3RhdGUgKipwaTQ0MGZ4X3N0YXRlLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKnBpaXgzX2RldmZuLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJU0FCdXMgKippc2FfYnVzLCBxZW11X2lycSAqcGljLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZWdpb24gKmFkZHJlc3Nfc3BhY2VfbWVt LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZWdpb24gKmFkZHJl c3Nfc3BhY2VfaW8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRy X3QgcmFtX3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRy X3QgYmVsb3dfNGdfbWVtX3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJhbV9hZGRyX3QgYWJvdmVfNGdfbWVtX3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqcGNpX2FkZHJlc3Nfc3BhY2UsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqcmFtX21lbW9yeSkKPiAgewo+ICAg ICAgRGV2aWNlU3RhdGUgKmRldjsKPiAgICAgIFBDSUJ1cyAqYjsKPiBAQCAtNDQyLDcgKzQ0Miw3 IEBAIFBDSUJ1cyAqaTQ0MGZ4X2luaXQoY29uc3QgY2hhciAqaG9zdF90eXBlLCBjb25zdCBjaGFy ICpwY2lfdHlwZSwKPiAgCj4gICAgICBpNDQwZnhfdXBkYXRlX21lbW9yeV9tYXBwaW5ncyhmKTsK PiAgCj4gLSAgICByZXR1cm4gYjsKPiArICAgIHJldHVybiBzOwo+ICB9Cj4gIAo+ICAvKiBQSUlY MyBQQ0kgdG8gSVNBIGJyaWRnZSAqLwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m by94ZW4tZGV2ZWw=