From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E976C433F5 for ; Wed, 5 Jan 2022 15:42:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241607AbiAEPmM (ORCPT ); Wed, 5 Jan 2022 10:42:12 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:45030 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241591AbiAEPmI (ORCPT ); Wed, 5 Jan 2022 10:42:08 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id C2523B81C13; Wed, 5 Jan 2022 15:42:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 74594C36AE0; Wed, 5 Jan 2022 15:42:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641397324; bh=GKAQ42RZcdIIQCU3yp/+Sv3dVSkX4wU6K9fG42E3/sQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=tr24Vi/ZRTDrbc3akawKgrama59YeUezddflSt+YoYZkifCc3g8bnkdbdkquvsv4+ RTeGFD5Jti5CrYVDsLQbULCeKKuO4mzFcqVeZfXhfHpv5i/P68VvANYVzJW/hSoNDZ zkCs/CA9I2W8inBNmGCyLW9+Lo/HpdOzIOa27Lsk9JYmiT6RTP5oClJrhVSrJAT+Vo Ceo8Q6jg9AoeJKQDnw9YB9SR3HwgHdqGNs1fdiT8OM0ouZt5HVtvHqwg69+zmEI8lI r0Y8B0yq3BrpCk5U+1kyU7xA1UlYEYiY1cyxGFTw7iBR62OcF8gixchUM3piiMIBfB ScqPE0GA34klw== Received: by mail-ed1-f46.google.com with SMTP id j6so163571022edw.12; Wed, 05 Jan 2022 07:42:04 -0800 (PST) X-Gm-Message-State: AOAM533YBeFiP0Tiy3tEOZ3/QqvzIUdzxmoW1h5a22vI2bSfXWAKqfnG iQi+zLgziV3931P9+TP42rxXJmyhH+7+h1eWZA== X-Google-Smtp-Source: ABdhPJwSTFNkL54cksD1y2ff7+zMlmVqgaahzlxZU86O4ZotYRJ6oJLBDkT3nMMfJ8/zPYxf0Xq+7PbpQdFcqCTVfA0= X-Received: by 2002:aa7:dc05:: with SMTP id b5mr52817117edu.46.1641397322789; Wed, 05 Jan 2022 07:42:02 -0800 (PST) MIME-Version: 1.0 References: <20220105150239.9628-1-pali@kernel.org> <20220105150239.9628-9-pali@kernel.org> In-Reply-To: <20220105150239.9628-9-pali@kernel.org> From: Rob Herring Date: Wed, 5 Jan 2022 09:41:51 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 08/11] PCI: mvebu: Use child_ops API To: =?UTF-8?Q?Pali_Roh=C3=A1r?= Cc: Lorenzo Pieralisi , Bjorn Helgaas , Thomas Petazzoni , =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= , =?UTF-8?B?TWFyZWsgQmVow7pu?= , Russell King , PCI , "linux-kernel@vger.kernel.org" , linux-arm-kernel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jan 5, 2022 at 9:03 AM Pali Roh=C3=A1r wrote: > > Split struct pci_ops between ops and child_ops. Member ops is used for > accessing PCIe Root Ports via pci-bridge-emul.c driver and child_ops for > accessing real PCIe cards. > > There is no need to mix these two struct pci_ops into one as PCI core cod= e > already provides separate callbacks via bridge->ops and bridge->child_ops= . I had similar patches including mvebu that I never got around to sending out. I pushed the branch out now at least[1]. > Signed-off-by: Pali Roh=C3=A1r > --- > drivers/pci/controller/pci-mvebu.c | 82 ++++++++++++++++-------------- > 1 file changed, 44 insertions(+), 38 deletions(-) > > diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/= pci-mvebu.c > index 9ea2f6a7c2b0..1e90ab888075 100644 > --- a/drivers/pci/controller/pci-mvebu.c > +++ b/drivers/pci/controller/pci-mvebu.c > @@ -294,11 +294,29 @@ static void mvebu_pcie_setup_hw(struct mvebu_pcie_p= ort *port) > mvebu_writel(port, mask, PCIE_MASK_OFF); > } > > -static int mvebu_pcie_hw_rd_conf(struct mvebu_pcie_port *port, > - struct pci_bus *bus, > - u32 devfn, int where, int size, u32 *val= ) > +static struct mvebu_pcie_port *mvebu_pcie_find_port(struct mvebu_pcie *p= cie, > + struct pci_bus *bus, > + int devfn); > + > +static int mvebu_pcie_child_rd_conf(struct pci_bus *bus, u32 devfn, int = where, > + int size, u32 *val) > { > - void __iomem *conf_data =3D port->base + PCIE_CONF_DATA_OFF; > + struct mvebu_pcie *pcie =3D bus->sysdata; > + struct mvebu_pcie_port *port; > + void __iomem *conf_data; > + > + port =3D mvebu_pcie_find_port(pcie, bus, devfn); > + if (!port) { > + *val =3D 0xffffffff; > + return PCIBIOS_DEVICE_NOT_FOUND; > + } > + > + if (!mvebu_pcie_link_up(port)) { > + *val =3D 0xffffffff; > + return PCIBIOS_DEVICE_NOT_FOUND; > + } > + > + conf_data =3D port->base + PCIE_CONF_DATA_OFF; > > mvebu_writel(port, PCIE_CONF_ADDR(bus->number, devfn, where), > PCIE_CONF_ADDR_OFF); > @@ -321,11 +339,21 @@ static int mvebu_pcie_hw_rd_conf(struct mvebu_pcie_= port *port, > return PCIBIOS_SUCCESSFUL; > } > > -static int mvebu_pcie_hw_wr_conf(struct mvebu_pcie_port *port, > - struct pci_bus *bus, > - u32 devfn, int where, int size, u32 val) > +static int mvebu_pcie_child_wr_conf(struct pci_bus *bus, u32 devfn, > + int where, int size, u32 val) > { > - void __iomem *conf_data =3D port->base + PCIE_CONF_DATA_OFF; > + struct mvebu_pcie *pcie =3D bus->sysdata; > + struct mvebu_pcie_port *port; > + void __iomem *conf_data; > + > + port =3D mvebu_pcie_find_port(pcie, bus, devfn); > + if (!port) > + return PCIBIOS_DEVICE_NOT_FOUND; > + > + if (!mvebu_pcie_link_up(port)) > + return PCIBIOS_DEVICE_NOT_FOUND; > + > + conf_data =3D port->base + PCIE_CONF_DATA_OFF; The same code in read and write is a hint to use .map_bus(). > > mvebu_writel(port, PCIE_CONF_ADDR(bus->number, devfn, where), > PCIE_CONF_ADDR_OFF); > @@ -347,6 +375,11 @@ static int mvebu_pcie_hw_wr_conf(struct mvebu_pcie_p= ort *port, > return PCIBIOS_SUCCESSFUL; > } > > +static struct pci_ops mvebu_pcie_child_ops =3D { > + .read =3D mvebu_pcie_child_rd_conf, > + .write =3D mvebu_pcie_child_wr_conf, > +}; > + > /* > * Remove windows, starting from the largest ones to the smallest > * ones. > @@ -862,25 +895,12 @@ static int mvebu_pcie_wr_conf(struct pci_bus *bus, = u32 devfn, > { > struct mvebu_pcie *pcie =3D bus->sysdata; > struct mvebu_pcie_port *port; > - int ret; > > port =3D mvebu_pcie_find_port(pcie, bus, devfn); > if (!port) > return PCIBIOS_DEVICE_NOT_FOUND; It would be nice to go from 'bus' to 'bridge' ptr directly, but I still had this in my version. I guess a standard RP struct as part of decoupling host bridges from RPs would solve this issue. Rob [1] https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git/log/?h= =3Dpci-child-bus-ops From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 80CE3C433F5 for ; Wed, 5 Jan 2022 15:43:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=XJCKmY4IQieCFcAzc52URyKT3keBrURb5+xzP/Fx9E0=; b=bdcNCdIG0VTvkf epHw8Mp05h3EIYFohXobSg1YQxK+dxzGiTZDjv6aAdbcvCPEnzQmkgB+a73NarodtAKyLE1Eq67lv 4320+zfNDcupoiL9y0TQ1FVKC4lGKuMRoIa5QUkzhkpYdkc12pf7nJcZ9v9MWJ39xUBqLdQl3mLO1 tEYbIxokZjYI2zU2ZZvvHs1t7f86Fj06CVOtMpmuTMnjNPq9NIST/X+1Wxq+0sfhodmszq9/XyaoU CnRFJNpGvcrVlPlmRUSozjZcNCUue732ciU4ycUZv9dPg8wm38kk2UyPazd70f6ZUv5Cea2X/eb1k vhI4ReBdQMR9+OWUF23g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n58QU-00FCW9-AY; Wed, 05 Jan 2022 15:42:10 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n58QQ-00FCV0-4s for linux-arm-kernel@lists.infradead.org; Wed, 05 Jan 2022 15:42:07 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 13CB961698 for ; Wed, 5 Jan 2022 15:42:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 76DABC36AE9 for ; Wed, 5 Jan 2022 15:42:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641397324; bh=GKAQ42RZcdIIQCU3yp/+Sv3dVSkX4wU6K9fG42E3/sQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=tr24Vi/ZRTDrbc3akawKgrama59YeUezddflSt+YoYZkifCc3g8bnkdbdkquvsv4+ RTeGFD5Jti5CrYVDsLQbULCeKKuO4mzFcqVeZfXhfHpv5i/P68VvANYVzJW/hSoNDZ zkCs/CA9I2W8inBNmGCyLW9+Lo/HpdOzIOa27Lsk9JYmiT6RTP5oClJrhVSrJAT+Vo Ceo8Q6jg9AoeJKQDnw9YB9SR3HwgHdqGNs1fdiT8OM0ouZt5HVtvHqwg69+zmEI8lI r0Y8B0yq3BrpCk5U+1kyU7xA1UlYEYiY1cyxGFTw7iBR62OcF8gixchUM3piiMIBfB ScqPE0GA34klw== Received: by mail-ed1-f43.google.com with SMTP id z29so163616414edl.7 for ; Wed, 05 Jan 2022 07:42:04 -0800 (PST) X-Gm-Message-State: AOAM531tIis47wjpx228vU0edVe9OxKbMt7/6KvJkSXJcLPVZB0PSwwn fpjdFgmdgwdmgCZClRwY31TTz1SYt0/Gt0lwmg== X-Google-Smtp-Source: ABdhPJwSTFNkL54cksD1y2ff7+zMlmVqgaahzlxZU86O4ZotYRJ6oJLBDkT3nMMfJ8/zPYxf0Xq+7PbpQdFcqCTVfA0= X-Received: by 2002:aa7:dc05:: with SMTP id b5mr52817117edu.46.1641397322789; Wed, 05 Jan 2022 07:42:02 -0800 (PST) MIME-Version: 1.0 References: <20220105150239.9628-1-pali@kernel.org> <20220105150239.9628-9-pali@kernel.org> In-Reply-To: <20220105150239.9628-9-pali@kernel.org> From: Rob Herring Date: Wed, 5 Jan 2022 09:41:51 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 08/11] PCI: mvebu: Use child_ops API To: =?UTF-8?Q?Pali_Roh=C3=A1r?= Cc: Lorenzo Pieralisi , Bjorn Helgaas , Thomas Petazzoni , =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= , =?UTF-8?B?TWFyZWsgQmVow7pu?= , Russell King , PCI , "linux-kernel@vger.kernel.org" , linux-arm-kernel X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220105_074206_315739_0C9AC45C X-CRM114-Status: GOOD ( 26.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCBKYW4gNSwgMjAyMiBhdCA5OjAzIEFNIFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5v cmc+IHdyb3RlOgo+Cj4gU3BsaXQgc3RydWN0IHBjaV9vcHMgYmV0d2VlbiBvcHMgYW5kIGNoaWxk X29wcy4gTWVtYmVyIG9wcyBpcyB1c2VkIGZvcgo+IGFjY2Vzc2luZyBQQ0llIFJvb3QgUG9ydHMg dmlhIHBjaS1icmlkZ2UtZW11bC5jIGRyaXZlciBhbmQgY2hpbGRfb3BzIGZvcgo+IGFjY2Vzc2lu ZyByZWFsIFBDSWUgY2FyZHMuCj4KPiBUaGVyZSBpcyBubyBuZWVkIHRvIG1peCB0aGVzZSB0d28g c3RydWN0IHBjaV9vcHMgaW50byBvbmUgYXMgUENJIGNvcmUgY29kZQo+IGFscmVhZHkgcHJvdmlk ZXMgc2VwYXJhdGUgY2FsbGJhY2tzIHZpYSBicmlkZ2UtPm9wcyBhbmQgYnJpZGdlLT5jaGlsZF9v cHMuCgpJIGhhZCBzaW1pbGFyIHBhdGNoZXMgaW5jbHVkaW5nIG12ZWJ1IHRoYXQgSSBuZXZlciBn b3QgYXJvdW5kIHRvCnNlbmRpbmcgb3V0LiBJIHB1c2hlZCB0aGUgYnJhbmNoIG91dCBub3cgYXQg bGVhc3RbMV0uCgo+IFNpZ25lZC1vZmYtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+ Cj4gLS0tCj4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLW12ZWJ1LmMgfCA4MiArKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMo KyksIDM4IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvcGNpLW12ZWJ1LmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1tdmVidS5jCj4gaW5k ZXggOWVhMmY2YTdjMmIwLi4xZTkwYWI4ODgwNzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2ktbXZlYnUuYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp LW12ZWJ1LmMKPiBAQCAtMjk0LDExICsyOTQsMjkgQEAgc3RhdGljIHZvaWQgbXZlYnVfcGNpZV9z ZXR1cF9odyhzdHJ1Y3QgbXZlYnVfcGNpZV9wb3J0ICpwb3J0KQo+ICAgICAgICAgbXZlYnVfd3Jp dGVsKHBvcnQsIG1hc2ssIFBDSUVfTUFTS19PRkYpOwo+ICB9Cj4KPiAtc3RhdGljIGludCBtdmVi dV9wY2llX2h3X3JkX2NvbmYoc3RydWN0IG12ZWJ1X3BjaWVfcG9ydCAqcG9ydCwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwg dTMyICp2YWwpCj4gK3N0YXRpYyBzdHJ1Y3QgbXZlYnVfcGNpZV9wb3J0ICptdmVidV9wY2llX2Zp bmRfcG9ydChzdHJ1Y3QgbXZlYnVfcGNpZSAqcGNpZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9idXMgKmJ1cywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmZu KTsKPiArCj4gK3N0YXRpYyBpbnQgbXZlYnVfcGNpZV9jaGlsZF9yZF9jb25mKHN0cnVjdCBwY2lf YnVzICpidXMsIHUzMiBkZXZmbiwgaW50IHdoZXJlLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBzaXplLCB1MzIgKnZhbCkKPiAgewo+IC0gICAgICAgdm9pZCBfX2lv bWVtICpjb25mX2RhdGEgPSBwb3J0LT5iYXNlICsgUENJRV9DT05GX0RBVEFfT0ZGOwo+ICsgICAg ICAgc3RydWN0IG12ZWJ1X3BjaWUgKnBjaWUgPSBidXMtPnN5c2RhdGE7Cj4gKyAgICAgICBzdHJ1 Y3QgbXZlYnVfcGNpZV9wb3J0ICpwb3J0Owo+ICsgICAgICAgdm9pZCBfX2lvbWVtICpjb25mX2Rh dGE7Cj4gKwo+ICsgICAgICAgcG9ydCA9IG12ZWJ1X3BjaWVfZmluZF9wb3J0KHBjaWUsIGJ1cywg ZGV2Zm4pOwo+ICsgICAgICAgaWYgKCFwb3J0KSB7Cj4gKyAgICAgICAgICAgICAgICp2YWwgPSAw eGZmZmZmZmZmOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZP VU5EOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmICghbXZlYnVfcGNpZV9saW5rX3VwKHBv cnQpKSB7Cj4gKyAgICAgICAgICAgICAgICp2YWwgPSAweGZmZmZmZmZmOwo+ICsgICAgICAgICAg ICAgICByZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwo+ICsgICAgICAgfQo+ICsKPiAr ICAgICAgIGNvbmZfZGF0YSA9IHBvcnQtPmJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkY7Cj4KPiAg ICAgICAgIG12ZWJ1X3dyaXRlbChwb3J0LCBQQ0lFX0NPTkZfQUREUihidXMtPm51bWJlciwgZGV2 Zm4sIHdoZXJlKSwKPiAgICAgICAgICAgICAgICAgICAgICBQQ0lFX0NPTkZfQUREUl9PRkYpOwo+ IEBAIC0zMjEsMTEgKzMzOSwyMSBAQCBzdGF0aWMgaW50IG12ZWJ1X3BjaWVfaHdfcmRfY29uZihz dHJ1Y3QgbXZlYnVfcGNpZV9wb3J0ICpwb3J0LAo+ICAgICAgICAgcmV0dXJuIFBDSUJJT1NfU1VD Q0VTU0ZVTDsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgbXZlYnVfcGNpZV9od193cl9jb25mKHN0cnVj dCBtdmVidV9wY2llX3BvcnQgKnBvcnQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHBjaV9idXMgKmJ1cywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1MzIgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCj4gK3N0YXRpYyBpbnQg bXZlYnVfcGNpZV9jaGlsZF93cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hlcmUsIGludCBzaXpl LCB1MzIgdmFsKQo+ICB7Cj4gLSAgICAgICB2b2lkIF9faW9tZW0gKmNvbmZfZGF0YSA9IHBvcnQt PmJhc2UgKyBQQ0lFX0NPTkZfREFUQV9PRkY7Cj4gKyAgICAgICBzdHJ1Y3QgbXZlYnVfcGNpZSAq cGNpZSA9IGJ1cy0+c3lzZGF0YTsKPiArICAgICAgIHN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBv cnQ7Cj4gKyAgICAgICB2b2lkIF9faW9tZW0gKmNvbmZfZGF0YTsKPiArCj4gKyAgICAgICBwb3J0 ID0gbXZlYnVfcGNpZV9maW5kX3BvcnQocGNpZSwgYnVzLCBkZXZmbik7Cj4gKyAgICAgICBpZiAo IXBvcnQpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7 Cj4gKwo+ICsgICAgICAgaWYgKCFtdmVidV9wY2llX2xpbmtfdXAocG9ydCkpCj4gKyAgICAgICAg ICAgICAgIHJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Cj4gKwo+ICsgICAgICAgY29u Zl9kYXRhID0gcG9ydC0+YmFzZSArIFBDSUVfQ09ORl9EQVRBX09GRjsKClRoZSBzYW1lIGNvZGUg aW4gcmVhZCBhbmQgd3JpdGUgaXMgYSBoaW50IHRvIHVzZSAubWFwX2J1cygpLgoKPgo+ICAgICAg ICAgbXZlYnVfd3JpdGVsKHBvcnQsIFBDSUVfQ09ORl9BRERSKGJ1cy0+bnVtYmVyLCBkZXZmbiwg d2hlcmUpLAo+ICAgICAgICAgICAgICAgICAgICAgIFBDSUVfQ09ORl9BRERSX09GRik7Cj4gQEAg LTM0Nyw2ICszNzUsMTEgQEAgc3RhdGljIGludCBtdmVidV9wY2llX2h3X3dyX2NvbmYoc3RydWN0 IG12ZWJ1X3BjaWVfcG9ydCAqcG9ydCwKPiAgICAgICAgIHJldHVybiBQQ0lCSU9TX1NVQ0NFU1NG VUw7Cj4gIH0KPgo+ICtzdGF0aWMgc3RydWN0IHBjaV9vcHMgbXZlYnVfcGNpZV9jaGlsZF9vcHMg PSB7Cj4gKyAgICAgICAucmVhZCA9IG12ZWJ1X3BjaWVfY2hpbGRfcmRfY29uZiwKPiArICAgICAg IC53cml0ZSA9IG12ZWJ1X3BjaWVfY2hpbGRfd3JfY29uZiwKPiArfTsKPiArCj4gIC8qCj4gICAq IFJlbW92ZSB3aW5kb3dzLCBzdGFydGluZyBmcm9tIHRoZSBsYXJnZXN0IG9uZXMgdG8gdGhlIHNt YWxsZXN0Cj4gICAqIG9uZXMuCj4gQEAgLTg2MiwyNSArODk1LDEyIEBAIHN0YXRpYyBpbnQgbXZl YnVfcGNpZV93cl9jb25mKHN0cnVjdCBwY2lfYnVzICpidXMsIHUzMiBkZXZmbiwKPiAgewo+ICAg ICAgICAgc3RydWN0IG12ZWJ1X3BjaWUgKnBjaWUgPSBidXMtPnN5c2RhdGE7Cj4gICAgICAgICBz dHJ1Y3QgbXZlYnVfcGNpZV9wb3J0ICpwb3J0Owo+IC0gICAgICAgaW50IHJldDsKPgo+ICAgICAg ICAgcG9ydCA9IG12ZWJ1X3BjaWVfZmluZF9wb3J0KHBjaWUsIGJ1cywgZGV2Zm4pOwo+ICAgICAg ICAgaWYgKCFwb3J0KQo+ICAgICAgICAgICAgICAgICByZXR1cm4gUENJQklPU19ERVZJQ0VfTk9U X0ZPVU5EOwoKSXQgd291bGQgYmUgbmljZSB0byBnbyBmcm9tICdidXMnIHRvICdicmlkZ2UnIHB0 ciBkaXJlY3RseSwgYnV0IEkKc3RpbGwgaGFkIHRoaXMgaW4gbXkgdmVyc2lvbi4gSSBndWVzcyBh IHN0YW5kYXJkIFJQIHN0cnVjdCBhcyBwYXJ0IG9mCmRlY291cGxpbmcgaG9zdCBicmlkZ2VzIGZy b20gUlBzIHdvdWxkIHNvbHZlIHRoaXMgaXNzdWUuCgpSb2IKClsxXSBodHRwczovL2dpdC5rZXJu ZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9yb2JoL2xpbnV4LmdpdC9sb2cvP2g9cGNp LWNoaWxkLWJ1cy1vcHMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK