From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2700200D2; Fri, 20 Oct 2023 17:44:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qN6wGAxb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 204F6C433C9; Fri, 20 Oct 2023 17:44:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1697823878; bh=tM18i9s5DyCKNvNL4uxB77beHUHrncqWw9WuGgi11Sc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=qN6wGAxbfAChNjoLr5JDLEMA1Yj+VXAm1mIrvIai0T7d3G6o655pNSQo+SYWECDNJ tkFS3gMulxYKpiNf3SesEVfzKyQjA/5DtMXpEuUMZ0dxODQ8d6kmjsSjqU1iGnX45t U+OBJowH14NvBAGCP93/5kVnK3CAzSZAQiJto8Fwnuewnn4E7yoXVAqHfIsJHL6ODQ SyDGio5RxL70E0jPTDGXylaFoJJ1Rmlb47upWX/MakTC510CcYcdjGU65YQmfWndaq 11TYcwA+E728enME8ni+F/2VRXXMIZQlLNiisg1bXJ79Yg5/pHzqZprTUWY3fifPJk B54UYuQvwVrbw== Date: Fri, 20 Oct 2023 23:14:28 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: manivannan.sadhasivam@linaro.org, aisheng.dong@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, festevam@gmail.com, imx@lists.linux.dev, jdmason@kudzu.us, kernel@pengutronix.de, kishon@kernel.org, kw@linux.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, maz@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org, tglx@linutronix.de Subject: Re: [PATCH v2 3/5] PCI: endpoint: pci-epf-test: add doorbell test Message-ID: <20231020174428.GB46191@thinkpad> References: <20230911220920.1817033-1-Frank.Li@nxp.com> <20230911220920.1817033-4-Frank.Li@nxp.com> Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230911220920.1817033-4-Frank.Li@nxp.com> On Mon, Sep 11, 2023 at 06:09:18PM -0400, Frank Li wrote: Subject could be, PCI: endpoint: pci-epf-test: Add doorbell support > Add three register: doorbell_bar, doorbell_addr, doorbell_data, > doorbell_done. Call pci_epf_alloc_doorbell() all a doorbell address space. > > Root complex(RC) side driver can trigger pci-epc-test's doorbell callback > handler by write doorbell_data to mapped doorbell_bar's address space. > > pci-epc-test will set doorbell_done in doorbell callback. > How about, Add doorbell support to the EPF test driver by introducing 3 new registers: doorbell_bar doorbell_addr doorbell_data The PCI RC driver can trigger the doorbell on the EP side by writing the content of "doorbell_data" to the address specified by the "doorbell_addr" register in the "doorbell_bar" BAR region. > Signed-off-by: Frank Li You should also update Documentation/PCI/endpoint/pci-test-* files in a separate commit with doorbell support. > --- > drivers/pci/endpoint/functions/pci-epf-test.c | 59 ++++++++++++++++++- > 1 file changed, 58 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c > index 1f0d2b84296a3..566549919b87b 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-test.c > +++ b/drivers/pci/endpoint/functions/pci-epf-test.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -39,17 +40,21 @@ > #define STATUS_IRQ_RAISED BIT(6) > #define STATUS_SRC_ADDR_INVALID BIT(7) > #define STATUS_DST_ADDR_INVALID BIT(8) > +#define STATUS_DOORBELL_SUCCESS BIT(9) > > #define FLAG_USE_DMA BIT(0) > > #define TIMER_RESOLUTION 1 > > +#define MAGIC_VERSION_MASK GENMASK(7, 0) > + > static struct workqueue_struct *kpcitest_workqueue; > > struct pci_epf_test { > void *reg[PCI_STD_NUM_BARS]; > struct pci_epf *epf; > enum pci_barno test_reg_bar; > + enum pci_barno doorbell_bar; > size_t msix_table_offset; > struct delayed_work cmd_handler; > struct dma_chan *dma_chan_tx; > @@ -74,6 +79,9 @@ struct pci_epf_test_reg { > u32 irq_type; > u32 irq_number; > u32 flags; > + u32 doorbell_bar; > + u32 doorbell_addr; > + u32 doorbell_data; > } __packed; > > static struct pci_epf_header test_header = { > @@ -693,6 +701,8 @@ static void pci_epf_test_unbind(struct pci_epf *epf) > struct pci_epf_bar *epf_bar; > int bar; > > + pci_epf_free_doorbell(epf); > + > cancel_delayed_work(&epf_test->cmd_handler); > pci_epf_test_clean_dma_chan(epf_test); > for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) { > @@ -808,9 +818,22 @@ static int pci_epf_test_link_up(struct pci_epf *epf) > return 0; > } > > +static int pci_epf_test_doorbell(struct pci_epf *epf, int index) > +{ > + struct pci_epf_test *epf_test = epf_get_drvdata(epf); > + enum pci_barno test_reg_bar = epf_test->test_reg_bar; > + struct pci_epf_test_reg *reg = epf_test->reg[test_reg_bar]; > + > + reg->status |= STATUS_DOORBELL_SUCCESS; > + pci_epf_test_raise_irq(epf_test, reg); > + > + return 0; > +} > + > static const struct pci_epc_event_ops pci_epf_test_event_ops = { > .core_init = pci_epf_test_core_init, > .link_up = pci_epf_test_link_up, > + .doorbell = pci_epf_test_doorbell, I would like to pass this callback directly to the pci_epf_alloc_doorbell() API. Would that be feasible? > }; > > static int pci_epf_test_alloc_space(struct pci_epf *epf) > @@ -859,7 +882,7 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > epf_bar = &epf->bar[bar]; > add = (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) ? 2 : 1; > > - if (bar == test_reg_bar) > + if (bar == test_reg_bar || bar == epf_test->doorbell_bar) > continue; > > if (!!(epc_features->reserved_bar & (1 << bar))) > @@ -900,9 +923,14 @@ static int pci_epf_test_bind(struct pci_epf *epf) > struct pci_epf_test *epf_test = epf_get_drvdata(epf); > const struct pci_epc_features *epc_features; > enum pci_barno test_reg_bar = BAR_0; > + enum pci_barno doorbell_bar = NO_BAR; > struct pci_epc *epc = epf->epc; > bool linkup_notifier = false; > bool core_init_notifier = false; > + struct pci_epf_test_reg *reg; > + struct msi_msg *msg; > + u64 doorbell_addr; > + u32 align; > > if (WARN_ON_ONCE(!epc)) > return -EINVAL; > @@ -923,10 +951,39 @@ static int pci_epf_test_bind(struct pci_epf *epf) > epf_test->test_reg_bar = test_reg_bar; > epf_test->epc_features = epc_features; > > + align = epc_features->align; > + align = align ? align : 128; > + > + ret = pci_epf_alloc_doorbell(epf, 1); This should be renamed as pci_epc_alloc_doorbell() as per comment on patch 1/3. Also, the "msi_msg" pointer should be part of the EPC struct. > + if (!ret) { > + msg = epf->msg; > + doorbell_bar = pci_epc_get_next_free_bar(epc_features, test_reg_bar + 1); > + > + if (doorbell_bar > 0) { > + epf_test->doorbell_bar = doorbell_bar; > + doorbell_addr = msg->address_hi; > + doorbell_addr <<= 32; > + doorbell_addr |= msg->address_lo; > + epf->bar[doorbell_bar].phys_addr = round_down(doorbell_addr, align); > + epf->bar[doorbell_bar].barno = doorbell_bar; > + epf->bar[doorbell_bar].size = align; > + } else { > + pci_epf_free_doorbell(epf); This one too should be renamed. > + } > + } > + > ret = pci_epf_test_alloc_space(epf); This one too. > if (ret) > return ret; > > + reg = epf_test->reg[test_reg_bar]; > + reg->magic |= FIELD_PREP(MAGIC_VERSION_MASK, 0x1); Why are you writing this register? This register serves for the purpose of testing BAR0. - Mani > + if (doorbell_bar > 0) { > + reg->doorbell_addr = doorbell_addr & (align - 1); > + reg->doorbell_data = msg->data; > + reg->doorbell_bar = doorbell_bar; > + } > + > if (!core_init_notifier) { > ret = pci_epf_test_core_init(epf); > if (ret) > -- > 2.34.1 > -- மணிவண்ணன் சதாசிவம் 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 0362EC001DF for ; Fri, 20 Oct 2023 17:45:08 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=V94olMbWP6a4gFg9sgFROZwQJElse490OzfAM00UopU=; b=xZYb7IBiuFw3Yv g39w+zgBAu9En1PkJHeCGhskV3hlZNR8iplVMVC429KQIu2TUUQNg5Endw8OjgYIfcHd5b8Js7aE0 cfLJFiOK0VP+BEKpsKF1wfdrKAlYR6jWr6A8ShRgmsfQ9U7/dRQKhtqhDDTDjIkNkH9bwXbvViY0l nNikLmwnx8tNh5octd9SjX7oQz+DjPavXQdJiGYSCnOyS/Ei49e2knmmlTPsm7pm+xOrm/MgXPSOB T0U8Qlg7lucJb4YfLObPqUgJJIT9qWs81Is7rSg/YOjQVtL/lVMNGVxI/4CHibOLDtw9wyiPFdTSw Wq+NaqtiIm0JmYmf1Lgg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qttYD-002myn-0k; Fri, 20 Oct 2023 17:44:45 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qttYA-002mxq-00 for linux-arm-kernel@lists.infradead.org; Fri, 20 Oct 2023 17:44:43 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id D37FDB83358; Fri, 20 Oct 2023 17:44:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 204F6C433C9; Fri, 20 Oct 2023 17:44:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1697823878; bh=tM18i9s5DyCKNvNL4uxB77beHUHrncqWw9WuGgi11Sc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=qN6wGAxbfAChNjoLr5JDLEMA1Yj+VXAm1mIrvIai0T7d3G6o655pNSQo+SYWECDNJ tkFS3gMulxYKpiNf3SesEVfzKyQjA/5DtMXpEuUMZ0dxODQ8d6kmjsSjqU1iGnX45t U+OBJowH14NvBAGCP93/5kVnK3CAzSZAQiJto8Fwnuewnn4E7yoXVAqHfIsJHL6ODQ SyDGio5RxL70E0jPTDGXylaFoJJ1Rmlb47upWX/MakTC510CcYcdjGU65YQmfWndaq 11TYcwA+E728enME8ni+F/2VRXXMIZQlLNiisg1bXJ79Yg5/pHzqZprTUWY3fifPJk B54UYuQvwVrbw== Date: Fri, 20 Oct 2023 23:14:28 +0530 From: Manivannan Sadhasivam To: Frank Li Cc: manivannan.sadhasivam@linaro.org, aisheng.dong@nxp.com, bhelgaas@google.com, devicetree@vger.kernel.org, festevam@gmail.com, imx@lists.linux.dev, jdmason@kudzu.us, kernel@pengutronix.de, kishon@kernel.org, kw@linux.com, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, lpieralisi@kernel.org, maz@kernel.org, s.hauer@pengutronix.de, shawnguo@kernel.org, tglx@linutronix.de Subject: Re: [PATCH v2 3/5] PCI: endpoint: pci-epf-test: add doorbell test Message-ID: <20231020174428.GB46191@thinkpad> References: <20230911220920.1817033-1-Frank.Li@nxp.com> <20230911220920.1817033-4-Frank.Li@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230911220920.1817033-4-Frank.Li@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231020_104442_360697_E0694120 X-CRM114-Status: GOOD ( 29.15 ) 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 T24gTW9uLCBTZXAgMTEsIDIwMjMgYXQgMDY6MDk6MThQTSAtMDQwMCwgRnJhbmsgTGkgd3JvdGU6 CgpTdWJqZWN0IGNvdWxkIGJlLAoKUENJOiBlbmRwb2ludDogcGNpLWVwZi10ZXN0OiBBZGQgZG9v cmJlbGwgc3VwcG9ydAoKPiBBZGQgdGhyZWUgcmVnaXN0ZXI6IGRvb3JiZWxsX2JhciwgZG9vcmJl bGxfYWRkciwgZG9vcmJlbGxfZGF0YSwKPiBkb29yYmVsbF9kb25lLiBDYWxsIHBjaV9lcGZfYWxs b2NfZG9vcmJlbGwoKSBhbGwgYSBkb29yYmVsbCBhZGRyZXNzIHNwYWNlLgo+IAo+IFJvb3QgY29t cGxleChSQykgc2lkZSBkcml2ZXIgY2FuIHRyaWdnZXIgcGNpLWVwYy10ZXN0J3MgZG9vcmJlbGwg Y2FsbGJhY2sKPiBoYW5kbGVyIGJ5IHdyaXRlIGRvb3JiZWxsX2RhdGEgdG8gbWFwcGVkIGRvb3Ji ZWxsX2JhcidzIGFkZHJlc3Mgc3BhY2UuCj4gCj4gcGNpLWVwYy10ZXN0IHdpbGwgc2V0IGRvb3Ji ZWxsX2RvbmUgaW4gZG9vcmJlbGwgY2FsbGJhY2suCj4gCgpIb3cgYWJvdXQsCgpBZGQgZG9vcmJl bGwgc3VwcG9ydCB0byB0aGUgRVBGIHRlc3QgZHJpdmVyIGJ5IGludHJvZHVjaW5nIDMgbmV3IHJl Z2lzdGVyczoKCmRvb3JiZWxsX2Jhcgpkb29yYmVsbF9hZGRyCmRvb3JiZWxsX2RhdGEKClRoZSBQ Q0kgUkMgZHJpdmVyIGNhbiB0cmlnZ2VyIHRoZSBkb29yYmVsbCBvbiB0aGUgRVAgc2lkZSBieSB3 cml0aW5nIHRoZQpjb250ZW50IG9mICJkb29yYmVsbF9kYXRhIiB0byB0aGUgYWRkcmVzcyBzcGVj aWZpZWQgYnkgdGhlICJkb29yYmVsbF9hZGRyIgpyZWdpc3RlciBpbiB0aGUgImRvb3JiZWxsX2Jh ciIgQkFSIHJlZ2lvbi4KCj4gU2lnbmVkLW9mZi1ieTogRnJhbmsgTGkgPEZyYW5rLkxpQG54cC5j b20+CgpZb3Ugc2hvdWxkIGFsc28gdXBkYXRlIERvY3VtZW50YXRpb24vUENJL2VuZHBvaW50L3Bj aS10ZXN0LSogZmlsZXMgaW4gYSBzZXBhcmF0ZQpjb21taXQgd2l0aCBkb29yYmVsbCBzdXBwb3J0 LgoKPiAtLS0KPiAgZHJpdmVycy9wY2kvZW5kcG9pbnQvZnVuY3Rpb25zL3BjaS1lcGYtdGVzdC5j IHwgNTkgKysrKysrKysrKysrKysrKysrLQo+ICAxIGZpbGUgY2hhbmdlZCwgNTggaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9lbmRwb2lu dC9mdW5jdGlvbnMvcGNpLWVwZi10ZXN0LmMgYi9kcml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlv bnMvcGNpLWVwZi10ZXN0LmMKPiBpbmRleCAxZjBkMmI4NDI5NmEzLi41NjY1NDk5MTliODdiIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9wY2ktZXBmLXRlc3Qu Ywo+ICsrKyBiL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9wY2ktZXBmLXRlc3QuYwo+ IEBAIC0xMSw2ICsxMSw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KPiAgI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L21zaS5oPgo+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAjaW5jbHVkZSA8 bGludXgvcGNpX2lkcy5oPgo+ICAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Cj4gQEAgLTM5LDE3 ICs0MCwyMSBAQAo+ICAjZGVmaW5lIFNUQVRVU19JUlFfUkFJU0VECQlCSVQoNikKPiAgI2RlZmlu ZSBTVEFUVVNfU1JDX0FERFJfSU5WQUxJRAkJQklUKDcpCj4gICNkZWZpbmUgU1RBVFVTX0RTVF9B RERSX0lOVkFMSUQJCUJJVCg4KQo+ICsjZGVmaW5lIFNUQVRVU19ET09SQkVMTF9TVUNDRVNTCQlC SVQoOSkKPiAgCj4gICNkZWZpbmUgRkxBR19VU0VfRE1BCQkJQklUKDApCj4gIAo+ICAjZGVmaW5l IFRJTUVSX1JFU09MVVRJT04JCTEKPiAgCj4gKyNkZWZpbmUgTUFHSUNfVkVSU0lPTl9NQVNLCQlH RU5NQVNLKDcsIDApCj4gKwo+ICBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtwY2l0 ZXN0X3dvcmtxdWV1ZTsKPiAgCj4gIHN0cnVjdCBwY2lfZXBmX3Rlc3Qgewo+ICAJdm9pZAkJCSpy ZWdbUENJX1NURF9OVU1fQkFSU107Cj4gIAlzdHJ1Y3QgcGNpX2VwZgkJKmVwZjsKPiAgCWVudW0g cGNpX2Jhcm5vCQl0ZXN0X3JlZ19iYXI7Cj4gKwllbnVtIHBjaV9iYXJubwkJZG9vcmJlbGxfYmFy Owo+ICAJc2l6ZV90CQkJbXNpeF90YWJsZV9vZmZzZXQ7Cj4gIAlzdHJ1Y3QgZGVsYXllZF93b3Jr CWNtZF9oYW5kbGVyOwo+ICAJc3RydWN0IGRtYV9jaGFuCQkqZG1hX2NoYW5fdHg7Cj4gQEAgLTc0 LDYgKzc5LDkgQEAgc3RydWN0IHBjaV9lcGZfdGVzdF9yZWcgewo+ICAJdTMyCWlycV90eXBlOwo+ ICAJdTMyCWlycV9udW1iZXI7Cj4gIAl1MzIJZmxhZ3M7Cj4gKwl1MzIJZG9vcmJlbGxfYmFyOwo+ ICsJdTMyCWRvb3JiZWxsX2FkZHI7Cj4gKwl1MzIJZG9vcmJlbGxfZGF0YTsKPiAgfSBfX3BhY2tl ZDsKPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgcGNpX2VwZl9oZWFkZXIgdGVzdF9oZWFkZXIgPSB7Cj4g QEAgLTY5Myw2ICs3MDEsOCBAQCBzdGF0aWMgdm9pZCBwY2lfZXBmX3Rlc3RfdW5iaW5kKHN0cnVj dCBwY2lfZXBmICplcGYpCj4gIAlzdHJ1Y3QgcGNpX2VwZl9iYXIgKmVwZl9iYXI7Cj4gIAlpbnQg YmFyOwo+ICAKPiArCXBjaV9lcGZfZnJlZV9kb29yYmVsbChlcGYpOwo+ICsKPiAgCWNhbmNlbF9k ZWxheWVkX3dvcmsoJmVwZl90ZXN0LT5jbWRfaGFuZGxlcik7Cj4gIAlwY2lfZXBmX3Rlc3RfY2xl YW5fZG1hX2NoYW4oZXBmX3Rlc3QpOwo+ICAJZm9yIChiYXIgPSAwOyBiYXIgPCBQQ0lfU1REX05V TV9CQVJTOyBiYXIrKykgewo+IEBAIC04MDgsOSArODE4LDIyIEBAIHN0YXRpYyBpbnQgcGNpX2Vw Zl90ZXN0X2xpbmtfdXAoc3RydWN0IHBjaV9lcGYgKmVwZikKPiAgCXJldHVybiAwOwo+ICB9Cj4g IAo+ICtzdGF0aWMgaW50IHBjaV9lcGZfdGVzdF9kb29yYmVsbChzdHJ1Y3QgcGNpX2VwZiAqZXBm LCBpbnQgaW5kZXgpCj4gK3sKPiArCXN0cnVjdCBwY2lfZXBmX3Rlc3QgKmVwZl90ZXN0ID0gZXBm X2dldF9kcnZkYXRhKGVwZik7Cj4gKwllbnVtIHBjaV9iYXJubyB0ZXN0X3JlZ19iYXIgPSBlcGZf dGVzdC0+dGVzdF9yZWdfYmFyOwo+ICsJc3RydWN0IHBjaV9lcGZfdGVzdF9yZWcgKnJlZyA9IGVw Zl90ZXN0LT5yZWdbdGVzdF9yZWdfYmFyXTsKPiArCj4gKwlyZWctPnN0YXR1cyB8PSBTVEFUVVNf RE9PUkJFTExfU1VDQ0VTUzsKPiArCXBjaV9lcGZfdGVzdF9yYWlzZV9pcnEoZXBmX3Rlc3QsIHJl Zyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNp X2VwY19ldmVudF9vcHMgcGNpX2VwZl90ZXN0X2V2ZW50X29wcyA9IHsKPiAgCS5jb3JlX2luaXQg PSBwY2lfZXBmX3Rlc3RfY29yZV9pbml0LAo+ICAJLmxpbmtfdXAgPSBwY2lfZXBmX3Rlc3RfbGlu a191cCwKPiArCS5kb29yYmVsbCA9IHBjaV9lcGZfdGVzdF9kb29yYmVsbCwKCkkgd291bGQgbGlr ZSB0byBwYXNzIHRoaXMgY2FsbGJhY2sgZGlyZWN0bHkgdG8gdGhlIHBjaV9lcGZfYWxsb2NfZG9v cmJlbGwoKSBBUEkuCiBXb3VsZCB0aGF0IGJlIGZlYXNpYmxlPwoKPiAgfTsKPiAgCj4gIHN0YXRp YyBpbnQgcGNpX2VwZl90ZXN0X2FsbG9jX3NwYWNlKHN0cnVjdCBwY2lfZXBmICplcGYpCj4gQEAg LTg1OSw3ICs4ODIsNyBAQCBzdGF0aWMgaW50IHBjaV9lcGZfdGVzdF9hbGxvY19zcGFjZShzdHJ1 Y3QgcGNpX2VwZiAqZXBmKQo+ICAJCWVwZl9iYXIgPSAmZXBmLT5iYXJbYmFyXTsKPiAgCQlhZGQg PSAoZXBmX2Jhci0+ZmxhZ3MgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KSA/IDIgOiAx Owo+ICAKPiAtCQlpZiAoYmFyID09IHRlc3RfcmVnX2JhcikKPiArCQlpZiAoYmFyID09IHRlc3Rf cmVnX2JhciB8fCBiYXIgPT0gZXBmX3Rlc3QtPmRvb3JiZWxsX2JhcikKPiAgCQkJY29udGludWU7 Cj4gIAo+ICAJCWlmICghIShlcGNfZmVhdHVyZXMtPnJlc2VydmVkX2JhciAmICgxIDw8IGJhcikp KQo+IEBAIC05MDAsOSArOTIzLDE0IEBAIHN0YXRpYyBpbnQgcGNpX2VwZl90ZXN0X2JpbmQoc3Ry dWN0IHBjaV9lcGYgKmVwZikKPiAgCXN0cnVjdCBwY2lfZXBmX3Rlc3QgKmVwZl90ZXN0ID0gZXBm X2dldF9kcnZkYXRhKGVwZik7Cj4gIAljb25zdCBzdHJ1Y3QgcGNpX2VwY19mZWF0dXJlcyAqZXBj X2ZlYXR1cmVzOwo+ICAJZW51bSBwY2lfYmFybm8gdGVzdF9yZWdfYmFyID0gQkFSXzA7Cj4gKwll bnVtIHBjaV9iYXJubyBkb29yYmVsbF9iYXIgPSBOT19CQVI7Cj4gIAlzdHJ1Y3QgcGNpX2VwYyAq ZXBjID0gZXBmLT5lcGM7Cj4gIAlib29sIGxpbmt1cF9ub3RpZmllciA9IGZhbHNlOwo+ICAJYm9v bCBjb3JlX2luaXRfbm90aWZpZXIgPSBmYWxzZTsKPiArCXN0cnVjdCBwY2lfZXBmX3Rlc3RfcmVn ICpyZWc7Cj4gKwlzdHJ1Y3QgbXNpX21zZyAqbXNnOwo+ICsJdTY0IGRvb3JiZWxsX2FkZHI7Cj4g Kwl1MzIgYWxpZ247Cj4gIAo+ICAJaWYgKFdBUk5fT05fT05DRSghZXBjKSkKPiAgCQlyZXR1cm4g LUVJTlZBTDsKPiBAQCAtOTIzLDEwICs5NTEsMzkgQEAgc3RhdGljIGludCBwY2lfZXBmX3Rlc3Rf YmluZChzdHJ1Y3QgcGNpX2VwZiAqZXBmKQo+ICAJZXBmX3Rlc3QtPnRlc3RfcmVnX2JhciA9IHRl c3RfcmVnX2JhcjsKPiAgCWVwZl90ZXN0LT5lcGNfZmVhdHVyZXMgPSBlcGNfZmVhdHVyZXM7Cj4g IAo+ICsJYWxpZ24gPSBlcGNfZmVhdHVyZXMtPmFsaWduOwo+ICsJYWxpZ24gPSBhbGlnbiA/IGFs aWduIDogMTI4Owo+ICsKPiArCXJldCA9IHBjaV9lcGZfYWxsb2NfZG9vcmJlbGwoZXBmLCAxKTsK ClRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgYXMgcGNpX2VwY19hbGxvY19kb29yYmVsbCgpIGFzIHBl ciBjb21tZW50IG9uIHBhdGNoIDEvMy4KQWxzbywgdGhlICJtc2lfbXNnIiBwb2ludGVyIHNob3Vs ZCBiZSBwYXJ0IG9mIHRoZSBFUEMgc3RydWN0LgoKPiArCWlmICghcmV0KSB7Cj4gKwkJbXNnID0g ZXBmLT5tc2c7Cj4gKwkJZG9vcmJlbGxfYmFyID0gcGNpX2VwY19nZXRfbmV4dF9mcmVlX2Jhcihl cGNfZmVhdHVyZXMsIHRlc3RfcmVnX2JhciArIDEpOwo+ICsKPiArCQlpZiAoZG9vcmJlbGxfYmFy ID4gMCkgewo+ICsJCQllcGZfdGVzdC0+ZG9vcmJlbGxfYmFyID0gZG9vcmJlbGxfYmFyOwo+ICsJ CQlkb29yYmVsbF9hZGRyID0gbXNnLT5hZGRyZXNzX2hpOwo+ICsJCQlkb29yYmVsbF9hZGRyIDw8 PSAzMjsKPiArCQkJZG9vcmJlbGxfYWRkciB8PSBtc2ctPmFkZHJlc3NfbG87Cj4gKwkJCWVwZi0+ YmFyW2Rvb3JiZWxsX2Jhcl0ucGh5c19hZGRyID0gcm91bmRfZG93bihkb29yYmVsbF9hZGRyLCBh bGlnbik7Cj4gKwkJCWVwZi0+YmFyW2Rvb3JiZWxsX2Jhcl0uYmFybm8gPSBkb29yYmVsbF9iYXI7 Cj4gKwkJCWVwZi0+YmFyW2Rvb3JiZWxsX2Jhcl0uc2l6ZSA9IGFsaWduOwo+ICsJCX0gZWxzZSB7 Cj4gKwkJCXBjaV9lcGZfZnJlZV9kb29yYmVsbChlcGYpOwoKVGhpcyBvbmUgdG9vIHNob3VsZCBi ZSByZW5hbWVkLiAKCj4gKwkJfQo+ICsJfQo+ICsKPiAgCXJldCA9IHBjaV9lcGZfdGVzdF9hbGxv Y19zcGFjZShlcGYpOwoKVGhpcyBvbmUgdG9vLgoKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJl dDsKPiAgCj4gKwlyZWcgPSBlcGZfdGVzdC0+cmVnW3Rlc3RfcmVnX2Jhcl07Cj4gKwlyZWctPm1h Z2ljIHw9IEZJRUxEX1BSRVAoTUFHSUNfVkVSU0lPTl9NQVNLLCAweDEpOwoKV2h5IGFyZSB5b3Ug d3JpdGluZyB0aGlzIHJlZ2lzdGVyPyBUaGlzIHJlZ2lzdGVyIHNlcnZlcyBmb3IgdGhlIHB1cnBv c2Ugb2YKdGVzdGluZyBCQVIwLgoKLSBNYW5pCgo+ICsJaWYgKGRvb3JiZWxsX2JhciA+IDApIHsK PiArCQlyZWctPmRvb3JiZWxsX2FkZHIgPSBkb29yYmVsbF9hZGRyICYgKGFsaWduIC0gMSk7Cj4g KwkJcmVnLT5kb29yYmVsbF9kYXRhID0gbXNnLT5kYXRhOwo+ICsJCXJlZy0+ZG9vcmJlbGxfYmFy ID0gZG9vcmJlbGxfYmFyOwo+ICsJfQo+ICsKPiAgCWlmICghY29yZV9pbml0X25vdGlmaWVyKSB7 Cj4gIAkJcmV0ID0gcGNpX2VwZl90ZXN0X2NvcmVfaW5pdChlcGYpOwo+ICAJCWlmIChyZXQpCj4g LS0gCj4gMi4zNC4xCj4gCgotLSAK4K6u4K6j4K6/4K614K6j4K+N4K6j4K6p4K+NIOCumuCupOCu vuCumuCuv+CuteCuruCvjQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=