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 72412C433EF for ; Mon, 2 May 2022 18:02:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1386794AbiEBSFa (ORCPT ); Mon, 2 May 2022 14:05:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1386793AbiEBSF2 (ORCPT ); Mon, 2 May 2022 14:05:28 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14365BC84 for ; Mon, 2 May 2022 11:01:59 -0700 (PDT) Received: from gallifrey.ext.pengutronix.de ([2001:67c:670:201:5054:ff:fe8d:eefb] helo=bjornoya.blackshift.org) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nlaMv-0003qA-GH for linux-spi@vger.kernel.org; Mon, 02 May 2022 20:01:57 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id EA2EC7361A for ; Mon, 2 May 2022 18:01:56 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 596AD735FE; Mon, 2 May 2022 18:01:48 +0000 (UTC) Received: from blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 3a4ec69c; Mon, 2 May 2022 17:54:59 +0000 (UTC) From: Marc Kleine-Budde To: linux-spi@vger.kernel.org, Fabio Estevam , Marek Vasut Cc: kernel@pengutronix.de, linux-imx@nxp.com, Mark Brown , linux-arm-kernel@lists.infradead.org, Baruch Siach , Marc Kleine-Budde , David Jander Subject: [PATCH v1 8/9] spi: spi-imx: add PIO polling support Date: Mon, 2 May 2022 19:54:56 +0200 Message-Id: <20220502175457.1977983-9-mkl@pengutronix.de> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220502175457.1977983-1-mkl@pengutronix.de> References: <20220502175457.1977983-1-mkl@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:201:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-spi@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org The driver supports several modes, one of them is PIO/IRQ "spi_imx_pio_transfer()". The data is exchanged with the IP core using PIO, an IRQ is setup to signal empty/full FIFOs and the end of the transfer. The IRQ and scheduling overhead for short transfers is significant. Using polling instead of IRQs can be beneficial to reduce the overall CPU load, especially on small transfer workloads. On an imx6 single core, a given RX workload of the mcp251xfd driver results in 40% CPU load. Using polling mode reduces the CPU load to 30%. This patch adds PIO polling support to the driver. For transfers with a duration of less than 30 µs the polling mode instead of IRQ based PIO mode is used. 30 µs seems to be a good compromise, which is used the by the SPI drivers for the raspberry Pi (spi-bcm2835, spi-bcm2835), too. Co-developed-by: David Jander Signed-off-by: David Jander Signed-off-by: Marc Kleine-Budde --- drivers/spi/spi-imx.c | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 894801ed182b..fe2305e6e38e 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -31,6 +31,12 @@ static bool use_dma = true; module_param(use_dma, bool, 0644); MODULE_PARM_DESC(use_dma, "Enable usage of DMA when available (default)"); +/* define polling limits */ +static unsigned int polling_limit_us = 30; +module_param(polling_limit_us, uint, 0664); +MODULE_PARM_DESC(polling_limit_us, + "time in us to run a transfer in polling mode\n"); + #define MXC_RPM_TIMEOUT 2000 /* 2000ms */ #define MXC_CSPIRXDATA 0x00 @@ -1488,6 +1494,54 @@ static int spi_imx_pio_transfer(struct spi_device *spi, return 0; } +static int spi_imx_poll_transfer(struct spi_device *spi, + struct spi_transfer *transfer) +{ + struct spi_imx_data *spi_imx = spi_controller_get_devdata(spi->controller); + unsigned long timeout; + + spi_imx->tx_buf = transfer->tx_buf; + spi_imx->rx_buf = transfer->rx_buf; + spi_imx->count = transfer->len; + spi_imx->txfifo = 0; + spi_imx->remainder = 0; + + /* fill in the fifo before timeout calculations if we are + * interrupted here, then the data is getting transferred by + * the HW while we are interrupted + */ + spi_imx_push(spi_imx); + + timeout = spi_imx_calculate_timeout(spi_imx, transfer->len) + jiffies; + while (spi_imx->txfifo) { + /* RX */ + while (spi_imx->txfifo && + spi_imx->devtype_data->rx_available(spi_imx)) { + spi_imx->rx(spi_imx); + spi_imx->txfifo--; + } + + /* TX */ + if (spi_imx->count) { + spi_imx_push(spi_imx); + continue; + } + + if (spi_imx->txfifo && + time_after(jiffies, timeout)) { + + dev_err_ratelimited(&spi->dev, + "timeout period reached: jiffies: %lu- falling back to interrupt mode\n", + jiffies - timeout); + + /* fall back to interrupt mode */ + return spi_imx_pio_transfer(spi, transfer); + } + } + + return 0; +} + static int spi_imx_pio_transfer_slave(struct spi_device *spi, struct spi_transfer *transfer) { @@ -1537,6 +1591,7 @@ static int spi_imx_transfer_one(struct spi_controller *controller, struct spi_transfer *transfer) { struct spi_imx_data *spi_imx = spi_controller_get_devdata(spi->controller); + unsigned long hz_per_byte, byte_limit; spi_imx_setupxfer(spi, transfer); transfer->effective_speed_hz = spi_imx->spi_bus_clk; @@ -1548,6 +1603,17 @@ static int spi_imx_transfer_one(struct spi_controller *controller, if (spi_imx->slave_mode) return spi_imx_pio_transfer_slave(spi, transfer); + /* + * Calculate the estimated time in us the transfer runs. Find + * the number of Hz per byte per polling limit. + */ + hz_per_byte = polling_limit_us ? ((8 + 4) * USEC_PER_SEC) / polling_limit_us : 0; + byte_limit = hz_per_byte ? transfer->effective_speed_hz / hz_per_byte : 1; + + /* run in polling mode for short transfers */ + if (transfer->len < byte_limit) + return spi_imx_poll_transfer(spi, transfer); + if (spi_imx->usedma) return spi_imx_dma_transfer(spi_imx, transfer); -- 2.35.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 2BCA3C433FE for ; Mon, 2 May 2022 18:03:30 +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:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=FWbkqnPwBRUGP7s/qYNOSi2G9TGXB1D6TCKHv8ZgPJ4=; b=CEUSREi1IbqurU 4BMK/dNxU7LYquHvpgT0RcB/RpneuJaWPS3a8pkU4srftiGQwbjl8u3qgyAIAGfkYPiOZL3uvNpjD LRom5846VlE15lH7Jz18Vp3YXnO6HwgoU7yLnQegWXbuxhOYXE6dYFh70nJDhmJEh9g2LaVBZ/8U4 X3Y1EK0zxzFLZQ3Cl6Psp+EVH5QzIz+ERd/T/ygUelUP/wLPV1kZ7qy/tvMlql0cWzyE1KQ+jNrEf cqLDN+B7I01eNxXsHO3NryNEcNrMwfchy3TBkp/TRtecXDiYK/8/zpH8MZuprfSjXFnmLJwRYdC4C of01gb8vhqRHDFyq6Iug==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nlaNK-0026X7-NW; Mon, 02 May 2022 18:02:22 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nlaN0-0026RV-Fw for linux-arm-kernel@lists.infradead.org; Mon, 02 May 2022 18:02:06 +0000 Received: from gallifrey.ext.pengutronix.de ([2001:67c:670:201:5054:ff:fe8d:eefb] helo=bjornoya.blackshift.org) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nlaMv-0003pv-AF for linux-arm-kernel@lists.infradead.org; Mon, 02 May 2022 20:01:57 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 84D0F73613 for ; Mon, 2 May 2022 18:01:56 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 596AD735FE; Mon, 2 May 2022 18:01:48 +0000 (UTC) Received: from blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 3a4ec69c; Mon, 2 May 2022 17:54:59 +0000 (UTC) From: Marc Kleine-Budde To: linux-spi@vger.kernel.org, Fabio Estevam , Marek Vasut Cc: kernel@pengutronix.de, linux-imx@nxp.com, Mark Brown , linux-arm-kernel@lists.infradead.org, Baruch Siach , Marc Kleine-Budde , David Jander Subject: [PATCH v1 8/9] spi: spi-imx: add PIO polling support Date: Mon, 2 May 2022 19:54:56 +0200 Message-Id: <20220502175457.1977983-9-mkl@pengutronix.de> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220502175457.1977983-1-mkl@pengutronix.de> References: <20220502175457.1977983-1-mkl@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:201:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220502_110202_615494_F50D5965 X-CRM114-Status: GOOD ( 23.75 ) 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 VGhlIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIG1vZGVzLCBvbmUgb2YgdGhlbSBpcyBQSU8vSVJR CiJzcGlfaW14X3Bpb190cmFuc2ZlcigpIi4gVGhlIGRhdGEgaXMgZXhjaGFuZ2VkIHdpdGggdGhl IElQIGNvcmUgdXNpbmcKUElPLCBhbiBJUlEgaXMgc2V0dXAgdG8gc2lnbmFsIGVtcHR5L2Z1bGwg RklGT3MgYW5kIHRoZSBlbmQgb2YgdGhlCnRyYW5zZmVyLiBUaGUgSVJRIGFuZCBzY2hlZHVsaW5n IG92ZXJoZWFkIGZvciBzaG9ydCB0cmFuc2ZlcnMgaXMKc2lnbmlmaWNhbnQuIFVzaW5nIHBvbGxp bmcgaW5zdGVhZCBvZiBJUlFzIGNhbiBiZSBiZW5lZmljaWFsIHRvIHJlZHVjZQp0aGUgb3ZlcmFs bCBDUFUgbG9hZCwgZXNwZWNpYWxseSBvbiBzbWFsbCB0cmFuc2ZlciB3b3JrbG9hZHMuCgpPbiBh biBpbXg2IHNpbmdsZSBjb3JlLCBhIGdpdmVuIFJYIHdvcmtsb2FkIG9mIHRoZSBtY3AyNTF4ZmQg ZHJpdmVyCnJlc3VsdHMgaW4gNDAlIENQVSBsb2FkLiBVc2luZyBwb2xsaW5nIG1vZGUgcmVkdWNl cyB0aGUgQ1BVIGxvYWQgdG8KMzAlLgoKVGhpcyBwYXRjaCBhZGRzIFBJTyBwb2xsaW5nIHN1cHBv cnQgdG8gdGhlIGRyaXZlci4gRm9yIHRyYW5zZmVycyB3aXRoCmEgZHVyYXRpb24gb2YgbGVzcyB0 aGFuIDMwIMK1cyB0aGUgcG9sbGluZyBtb2RlIGluc3RlYWQgb2YgSVJRIGJhc2VkClBJTyBtb2Rl IGlzIHVzZWQuIDMwIMK1cyBzZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZSwgd2hpY2ggaXMg dXNlZAp0aGUgYnkgdGhlIFNQSSBkcml2ZXJzIGZvciB0aGUgcmFzcGJlcnJ5IFBpIChzcGktYmNt MjgzNSwKc3BpLWJjbTI4MzUpLCB0b28uCgpDby1kZXZlbG9wZWQtYnk6IERhdmlkIEphbmRlciA8 ZGF2aWRAcHJvdG9uaWMubmw+ClNpZ25lZC1vZmYtYnk6IERhdmlkIEphbmRlciA8ZGF2aWRAcHJv dG9uaWMubmw+ClNpZ25lZC1vZmYtYnk6IE1hcmMgS2xlaW5lLUJ1ZGRlIDxta2xAcGVuZ3V0cm9u aXguZGU+Ci0tLQogZHJpdmVycy9zcGkvc3BpLWlteC5jIHwgNjYgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDY2IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktaW14LmMgYi9kcml2ZXJzL3NwaS9zcGkt aW14LmMKaW5kZXggODk0ODAxZWQxODJiLi5mZTIzMDVlNmUzOGUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvc3BpL3NwaS1pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGktaW14LmMKQEAgLTMxLDYgKzMx LDEyIEBAIHN0YXRpYyBib29sIHVzZV9kbWEgPSB0cnVlOwogbW9kdWxlX3BhcmFtKHVzZV9kbWEs IGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAiRW5hYmxlIHVzYWdlIG9m IERNQSB3aGVuIGF2YWlsYWJsZSAoZGVmYXVsdCkiKTsKIAorLyogZGVmaW5lIHBvbGxpbmcgbGlt aXRzICovCitzdGF0aWMgdW5zaWduZWQgaW50IHBvbGxpbmdfbGltaXRfdXMgPSAzMDsKK21vZHVs ZV9wYXJhbShwb2xsaW5nX2xpbWl0X3VzLCB1aW50LCAwNjY0KTsKK01PRFVMRV9QQVJNX0RFU0Mo cG9sbGluZ19saW1pdF91cywKKwkJICJ0aW1lIGluIHVzIHRvIHJ1biBhIHRyYW5zZmVyIGluIHBv bGxpbmcgbW9kZVxuIik7CisKICNkZWZpbmUgTVhDX1JQTV9USU1FT1VUCQkyMDAwIC8qIDIwMDBt cyAqLwogCiAjZGVmaW5lIE1YQ19DU1BJUlhEQVRBCQkweDAwCkBAIC0xNDg4LDYgKzE0OTQsNTQg QEAgc3RhdGljIGludCBzcGlfaW14X3Bpb190cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3Bp LAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNwaV9pbXhfcG9sbF90cmFuc2ZlcihzdHJ1 Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikK K3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2Rl dmRhdGEoc3BpLT5jb250cm9sbGVyKTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlzcGlf aW14LT50eF9idWYgPSB0cmFuc2Zlci0+dHhfYnVmOworCXNwaV9pbXgtPnJ4X2J1ZiA9IHRyYW5z ZmVyLT5yeF9idWY7CisJc3BpX2lteC0+Y291bnQgPSB0cmFuc2Zlci0+bGVuOworCXNwaV9pbXgt PnR4ZmlmbyA9IDA7CisJc3BpX2lteC0+cmVtYWluZGVyID0gMDsKKworCS8qIGZpbGwgaW4gdGhl IGZpZm8gYmVmb3JlIHRpbWVvdXQgY2FsY3VsYXRpb25zIGlmIHdlIGFyZQorCSAqIGludGVycnVw dGVkIGhlcmUsIHRoZW4gdGhlIGRhdGEgaXMgZ2V0dGluZyB0cmFuc2ZlcnJlZCBieQorCSAqIHRo ZSBIVyB3aGlsZSB3ZSBhcmUgaW50ZXJydXB0ZWQKKwkgKi8KKwlzcGlfaW14X3B1c2goc3BpX2lt eCk7CisKKwl0aW1lb3V0ID0gc3BpX2lteF9jYWxjdWxhdGVfdGltZW91dChzcGlfaW14LCB0cmFu c2Zlci0+bGVuKSArIGppZmZpZXM7CisJd2hpbGUgKHNwaV9pbXgtPnR4ZmlmbykgeworCQkvKiBS WCAqLworCQl3aGlsZSAoc3BpX2lteC0+dHhmaWZvICYmCisJCSAgICAgICBzcGlfaW14LT5kZXZ0 eXBlX2RhdGEtPnJ4X2F2YWlsYWJsZShzcGlfaW14KSkgeworCQkJc3BpX2lteC0+cngoc3BpX2lt eCk7CisJCQlzcGlfaW14LT50eGZpZm8tLTsKKwkJfQorCisJCS8qIFRYICovCisJCWlmIChzcGlf aW14LT5jb3VudCkgeworCQkJc3BpX2lteF9wdXNoKHNwaV9pbXgpOworCQkJY29udGludWU7CisJ CX0KKworCQlpZiAoc3BpX2lteC0+dHhmaWZvICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMs IHRpbWVvdXQpKSB7CisKKwkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJnNwaS0+ZGV2LAorCQkJCQkg ICAgInRpbWVvdXQgcGVyaW9kIHJlYWNoZWQ6IGppZmZpZXM6ICVsdS0gZmFsbGluZyBiYWNrIHRv IGludGVycnVwdCBtb2RlXG4iLAorCQkJCQkgICAgamlmZmllcyAtIHRpbWVvdXQpOworCisJCQkv KiBmYWxsIGJhY2sgdG8gaW50ZXJydXB0IG1vZGUgKi8KKwkJCXJldHVybiBzcGlfaW14X3Bpb190 cmFuc2ZlcihzcGksIHRyYW5zZmVyKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0 aWMgaW50IHNwaV9pbXhfcGlvX3RyYW5zZmVyX3NsYXZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGks CiAJCQkJICAgICAgc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIpCiB7CkBAIC0xNTM3LDYg KzE1OTEsNyBAQCBzdGF0aWMgaW50IHNwaV9pbXhfdHJhbnNmZXJfb25lKHN0cnVjdCBzcGlfY29u dHJvbGxlciAqY29udHJvbGxlciwKIAkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikK IHsKIAlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2Rl dmRhdGEoc3BpLT5jb250cm9sbGVyKTsKKwl1bnNpZ25lZCBsb25nIGh6X3Blcl9ieXRlLCBieXRl X2xpbWl0OwogCiAJc3BpX2lteF9zZXR1cHhmZXIoc3BpLCB0cmFuc2Zlcik7CiAJdHJhbnNmZXIt PmVmZmVjdGl2ZV9zcGVlZF9oeiA9IHNwaV9pbXgtPnNwaV9idXNfY2xrOwpAQCAtMTU0OCw2ICsx NjAzLDE3IEBAIHN0YXRpYyBpbnQgc3BpX2lteF90cmFuc2Zlcl9vbmUoc3RydWN0IHNwaV9jb250 cm9sbGVyICpjb250cm9sbGVyLAogCWlmIChzcGlfaW14LT5zbGF2ZV9tb2RlKQogCQlyZXR1cm4g c3BpX2lteF9waW9fdHJhbnNmZXJfc2xhdmUoc3BpLCB0cmFuc2Zlcik7CiAKKwkvKgorCSAqIENh bGN1bGF0ZSB0aGUgZXN0aW1hdGVkIHRpbWUgaW4gdXMgdGhlIHRyYW5zZmVyIHJ1bnMuIEZpbmQK KwkgKiB0aGUgbnVtYmVyIG9mIEh6IHBlciBieXRlIHBlciBwb2xsaW5nIGxpbWl0LgorCSAqLwor CWh6X3Blcl9ieXRlID0gcG9sbGluZ19saW1pdF91cyA/ICgoOCArIDQpICogVVNFQ19QRVJfU0VD KSAvIHBvbGxpbmdfbGltaXRfdXMgOiAwOworCWJ5dGVfbGltaXQgPSBoel9wZXJfYnl0ZSA/IHRy YW5zZmVyLT5lZmZlY3RpdmVfc3BlZWRfaHogLyBoel9wZXJfYnl0ZSA6IDE7CisKKwkvKiBydW4g aW4gcG9sbGluZyBtb2RlIGZvciBzaG9ydCB0cmFuc2ZlcnMgKi8KKwlpZiAodHJhbnNmZXItPmxl biA8IGJ5dGVfbGltaXQpCisJCXJldHVybiBzcGlfaW14X3BvbGxfdHJhbnNmZXIoc3BpLCB0cmFu c2Zlcik7CisKIAlpZiAoc3BpX2lteC0+dXNlZG1hKQogCQlyZXR1cm4gc3BpX2lteF9kbWFfdHJh bnNmZXIoc3BpX2lteCwgdHJhbnNmZXIpOwogCi0tIAoyLjM1LjEKCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=