From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yb1-f171.google.com (mail-yb1-f171.google.com [209.85.219.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E20283D388 for ; Fri, 29 Mar 2024 06:01:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711692092; cv=none; b=fmlvPQbarZuIeVGiYbadpCfuYfU+X0QY9WlM9/3qQ83QmL6sXWWsC0ka1V60Qvr0uEmBlcEpbzyuEl60DkQB2e9+FDpeEXRQiOGOxjGS9Kf4Op9l8uVuGrRscgT0Kd8/cd42+L5VS46ZkhGpJ9De76lzEJ9fxImIE7SUnwfi550= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711692092; c=relaxed/simple; bh=eYhRwcbx0XWwpVC/UC0BiSKNkbAvIb8jgfQM087pM8E=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=Ya0Opgl4c5RM0LdVttEmwxuHPpo9E56aWLKYeRjWrN5A9ElvtgMr8P4/J7SYiNkMZTqbj2o1oE20LFkYXMcK9S1dF3YimtAwJwaxruVRuCM0aIs4ggoLsfYqKAStGpdL0Tylh4KTvTi1SWTMFpmJT2ejXXtLWWCgjiejhvz0GaA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=g1MmE03Z; arc=none smtp.client-ip=209.85.219.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="g1MmE03Z" Received: by mail-yb1-f171.google.com with SMTP id 3f1490d57ef6-dd10ebcd702so1704872276.2 for ; Thu, 28 Mar 2024 23:01:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1711692088; x=1712296888; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=1jZQnJj79swR2183Bur6/x2Cdu0g+Xgm+SPz3uqZYcg=; b=g1MmE03ZKyVxqTLg0LUNlhY9/dNPztW5qAuPDUSXyrtBWRnfaLzUw+3aCWLxY6jKui xs1bO0F4UWzIQ6CRT/nSUV+YdHNYVub7U5Bxd4Xd6MX28lJVeG1+WZYGv3g2ceeuvwUQ 0sqo7oyzr8VT9BkDBCkLVypO+kuVOUSUvDFUAMjaxCOUAqLVRB3webm0AUmt/OU/pS+2 mKEAS1BYTrCwv6KE/mUlnWChBD0e4+1VyKc/O3jBNrItbpTkrsQNhpPozQsL1i7ckTLD w3ScDZ+bEKXsezCeKTCX4x9AGO2CUiWRJ9YzcwXHMSeLB0zHP3bgU/Ih2rsK8oGhdq+K WQjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711692088; x=1712296888; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1jZQnJj79swR2183Bur6/x2Cdu0g+Xgm+SPz3uqZYcg=; b=vPyoa80A4Nbq0dRzJtkGUyvDKU16EK2RQsCGlFUu7JZNJISWG2fRqaD7XT1fETIE+6 lAMeZ3fE8H9nZqE5OB7BuWnB7pSxLDjwVIT3AxtBHCqM4XU49u9CryLLq6lskwvlb7IP EKzAo2B6PDkS9XRbpoFx68NofFXoOP+FKze9HYtNix/uCu43oAveDEcqpbDqNsQ9r8Ru FfOM1kDYjbqaMCpEApMyNTSYnOfBEkmoBwzwIh3sHA7dFCZQETecQmeEUAIY7cFNspPr JxQbUgHWzDFYQOD2QHl6hGTqfI2w1FN7uH1AIG1VicD5hOQUVxO/N4FXh24atP3CK3ex qtOw== X-Forwarded-Encrypted: i=1; AJvYcCU5tHjjTg1JO1dZnP4Dx4Zcl4jZioTXmqKfuG7VfPABbp8DqUxRaoerWu617nKwv4daXdEYlwPqCn/B++kZ2UK1KRtjK17wz0Q3YDG1 X-Gm-Message-State: AOJu0YwzW8gjXuVtnB8yVUAGuSBpazWxoTYl2OH+5fUAJip9uBBbOZyi k2s5hQiJn2IShA60cCzWTAAE4QzM6FWAZ/bzoXakgaj8RtP1tjVoWHcjr9ZTzFfkMyGrL2ZQUo9 UY56u42mPvVucWMsvvck+qrFHKZ7Cx3un1aTMEQ== X-Google-Smtp-Source: AGHT+IGIaj72yIsdDmZY61mw/oq49jdxC1hhIzgqQONAQJUH2pq4vxcEaW+O77sbNMoSdyIwDmNBiWsdXjkBLSjILWY= X-Received: by 2002:a25:6d86:0:b0:dc2:2d75:5fde with SMTP id i128-20020a256d86000000b00dc22d755fdemr1372219ybc.29.1711692087927; Thu, 28 Mar 2024 23:01:27 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240327033041.83625-1-jaewon02.kim@samsung.com> <63355869-e679-7226-7719-36b62169db7e@samsung.com> In-Reply-To: <63355869-e679-7226-7719-36b62169db7e@samsung.com> From: Sam Protsenko Date: Fri, 29 Mar 2024 01:01:16 -0500 Message-ID: Subject: Re: [PATCH] spi: s3c64xx: Use DMA mode from fifo size To: Jaewon Kim Cc: Andi Shyti , Mark Brown , Krzysztof Kozlowski , Alim Akhtar , linux-spi@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 29, 2024 at 12:53=E2=80=AFAM Jaewon Kim wrote: > > Hi Sam, > > Thanks for your review. > > > On 3/29/24 02:58, Sam Protsenko wrote: > > On Tue, Mar 26, 2024 at 10:35=E2=80=AFPM Jaewon Kim wrote: > >> The SPI data size is smaller than FIFO, it operates in PIO mode, > > Spelling: "The" -> "If the" > > Thanks, I will fix it v2. > > >> and if it is larger than FIFO mode, DMA mode is selected. > >> > >> If the data size is the same as the FIFO size, it operates in PIO mode > >> and data is separated into two transfer. In order to prevent, > > Nit: "transfer" -> "transfers", "prevent" -> "prevent it" > > Thanks, I will fix it v2. > > >> DMA mode must be used from the case of FIFO and data size. > >> > > You probably mean this code (it occurs two times in the driver): > > > > xfer->len =3D fifo_len - 1; > > > > Can you please elaborate on why it's done this way? Why can't we just > > do "xfer->len =3D fifo_len" and use the whole FIFO for the transfer > > instead? I don't understand the necessity to split the transfer into > > two chunks if its size is of FIFO length -- wouldn't it fit into FIFO > > in that case? (I'm pretty sure this change is correct, just want to > > understand how exactly it works). > > In IRQ mode(S3C64XX_SPI_MODE_RX_RDY_LVL enable), TxOverrun/RxUnderrun > irq occurs when FIFO is full. > > To avoid FIFO full, it is transmitted in a smaller size than > fifo_len.(fifo-len - 1) > > However, in case of "fifo_len =3D=3D data size" "fifo_len - 1" byte + "1" > byte were transmitted separately. > > This problem can be solved by starting DMA transmission start size from > fifo_len. > Thanks for the explanation! Please feel free to add: Reviewed-by: Sam Protsenko > >> Fixes: 1ee806718d5e ("spi: s3c64xx: support interrupt based pio mode") > > Just wonder if that fixes some throughput regression, or something > > worse (like failed transfers when the transfer size is the same as > > FIFO size)? > > It is not a critical issue, but When I look at the actual waveform, it > seems strange that only the last 1-byte is transmitted separately. > > I thought it was "Fixes", but if not, I will remove it. > No no, I was just curious. "Fixes" is fine with me. > >> Signed-off-by: Jaewon Kim > >> --- > >> drivers/spi/spi-s3c64xx.c | 6 +++--- > >> 1 file changed, 3 insertions(+), 3 deletions(-) > >> > >> diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c > >> index 9fcbe040cb2f..81ed5fddf83e 100644 > >> --- a/drivers/spi/spi-s3c64xx.c > >> +++ b/drivers/spi/spi-s3c64xx.c > >> @@ -430,7 +430,7 @@ static bool s3c64xx_spi_can_dma(struct spi_control= ler *host, > >> struct s3c64xx_spi_driver_data *sdd =3D spi_controller_get_de= vdata(host); > >> > >> if (sdd->rx_dma.ch && sdd->tx_dma.ch) > >> - return xfer->len > sdd->fifo_depth; > >> + return xfer->len >=3D sdd->fifo_depth; > >> > >> return false; > >> } > >> @@ -826,11 +826,11 @@ static int s3c64xx_spi_transfer_one(struct spi_c= ontroller *host, > >> return status; > >> } > >> > >> - if (!is_polling(sdd) && (xfer->len > fifo_len) && > >> + if (!is_polling(sdd) && xfer->len >=3D fifo_len && > >> sdd->rx_dma.ch && sdd->tx_dma.ch) { > >> use_dma =3D 1; > >> > > Would be nice to remove this empty line, while at it. > Good, I will remove it also. > >> - } else if (xfer->len >=3D fifo_len) { > >> + } else if (xfer->len > fifo_len) { > > Below in the same function I can see similar code: > > > > if (target_len >=3D fifo_len) > > xfer->len =3D fifo_len - 1; > > > > Shouldn't that 'if' condition be fixed too? Or it's ok as it is? (Just > > noticed it by searching, not sure myself, hence asking). > > You are correct. This 'if' condition should not have been modified. > > >> tx_buf =3D xfer->tx_buf; > >> rx_buf =3D xfer->rx_buf; > >> origin_len =3D xfer->len; > >> -- > >> 2.43.2 > >> > >> > > Thanks > > Jaewon Kim > 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 5824BCD1283 for ; Fri, 29 Mar 2024 06:01:51 +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=Oxl+ja77x9RjTMNqvj704d0Vrvb/ZQciVrIRdsv0q2I=; b=v63b0PjaKzQje+ rWCzJVjHqmLPnyZOyg8KXw8MFQOS85C9I5pHIvP7UedO2uJxWDHwKeGlMUBz5i5xt34cL4lMVb2Z3 vJ+Kr9tPzmbZQWZ34AIXYhTbeRL92HAHnLMHIyHtlcIcwA3eCXm8g0dHSbWDJr533Ml2c6ECjANCJ WnBHh9JBTDdGyDgJO2ziudc6MVKu46XkdewP3V9XXCTZINckX1z2Sa4x2txJUcKwEhgSD0lnH8rrI DiwcY64PP4kL9HFr/8sxeRe5Pd8w/IfdXx9g3aAkTb7l3Ksl2S3911JPz+bZu+mgaz+4vqgDsFCJs i3gkA1eRoviRPrcpVCpA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rq5J0-0000000GyU8-0s66; Fri, 29 Mar 2024 06:01:34 +0000 Received: from mail-yw1-x1131.google.com ([2607:f8b0:4864:20::1131]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rq5Ix-0000000GyTe-2pcD for linux-arm-kernel@lists.infradead.org; Fri, 29 Mar 2024 06:01:33 +0000 Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-607c5679842so14980077b3.2 for ; Thu, 28 Mar 2024 23:01:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1711692088; x=1712296888; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=1jZQnJj79swR2183Bur6/x2Cdu0g+Xgm+SPz3uqZYcg=; b=UUGYrriI/7IDmW3g+knBn/kTmUElYVyrm6FoKaNrtNWyzPrevRZoL8yvdoo1FY4Pex Wel7SLxwt9oHu+CONIwWSeP41CrWw4WNGrAb4YH/WQzW2z/2LC+YineaCn875piA9B9/ KRaP9iNr/Li/rP/PuNn30Hx6FxAuVbpwH8t4gEMtfIxrcRhqa289HjYy1ih2BDCg6Brb WAoqMiFanKvAYhT27UxXf1OEJjik//13gsl8NXI07QuzQjKOPpG3IlsII03otjLETSSx yRWRqtkgAWadOwVwa85Uwo9if9LyBor/1ZXanGJtNqi16vGpjQpv+B6yqYyf5H1toa8E X6Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711692088; x=1712296888; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1jZQnJj79swR2183Bur6/x2Cdu0g+Xgm+SPz3uqZYcg=; b=ElS09fM+QPCeAdlGtKZjhnGC7zCkvjVdCOCLmYBx9adFgNLg311nVwM6jI/H5z7oS0 vsf3vVvfu63iGfhI6fv2JU9bIlB1tssdH2nFqaIgkaSMGiFNS6fTnUllD4kqGPjIWxui mYFL7e5NshCRVIEzgFfnQ9Wq7ldhAgdISOPgm4+ynfhZbjclWIICMe8gL4sxP00d7xJG +mwUHNi2rbhs8xITOXjriXB6kwyaSJcwSqAFFJ5MZvOecvRzZDY3suU+71RRIekhuENo ygiH+oFtYubTYtX1ytAky7Ggww9CRuzSYbv3gE9IDoO4SNc/d6AlJlc6lJFD5arBpC4g hIMQ== X-Forwarded-Encrypted: i=1; AJvYcCX7lLbKBLoralJv6vGVKx0E3VT+hOFkRr9Zn4pzwdmsG7VKIz00RPy1zDlulNXdh4AKyvKrj9f/C45DEmOikQTGxkR/q020+EJ1+3reEQ3gOzDzR9M= X-Gm-Message-State: AOJu0Yxeih0XKCrfjYiNHqgcVBulhIp3yV8gv5iBEPr1Y78a0m46MXrk 3/Se4hON4Npdsxfx4qaueDZV7yk1lcWx9r5s8BSuyRywl+cstx5nSAAPdSn9knsN+0x3KH0jLQi xmNWHrQ+r/prbmz4oFxwNlJSsY+EYrJWbq4TM1A== X-Google-Smtp-Source: AGHT+IGIaj72yIsdDmZY61mw/oq49jdxC1hhIzgqQONAQJUH2pq4vxcEaW+O77sbNMoSdyIwDmNBiWsdXjkBLSjILWY= X-Received: by 2002:a25:6d86:0:b0:dc2:2d75:5fde with SMTP id i128-20020a256d86000000b00dc22d755fdemr1372219ybc.29.1711692087927; Thu, 28 Mar 2024 23:01:27 -0700 (PDT) MIME-Version: 1.0 References: <20240327033041.83625-1-jaewon02.kim@samsung.com> <63355869-e679-7226-7719-36b62169db7e@samsung.com> In-Reply-To: <63355869-e679-7226-7719-36b62169db7e@samsung.com> From: Sam Protsenko Date: Fri, 29 Mar 2024 01:01:16 -0500 Message-ID: Subject: Re: [PATCH] spi: s3c64xx: Use DMA mode from fifo size To: Jaewon Kim Cc: Andi Shyti , Mark Brown , Krzysztof Kozlowski , Alim Akhtar , linux-spi@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240328_230131_751306_3BC9FD6F X-CRM114-Status: GOOD ( 43.23 ) 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 T24gRnJpLCBNYXIgMjksIDIwMjQgYXQgMTI6NTPigK9BTSBKYWV3b24gS2ltIDxqYWV3b24wMi5r aW1Ac2Ftc3VuZy5jb20+IHdyb3RlOgo+Cj4gSGkgU2FtLAo+Cj4gVGhhbmtzIGZvciB5b3VyIHJl dmlldy4KPgo+Cj4gT24gMy8yOS8yNCAwMjo1OCwgU2FtIFByb3RzZW5rbyB3cm90ZToKPiA+IE9u IFR1ZSwgTWFyIDI2LCAyMDI0IGF0IDEwOjM14oCvUE0gSmFld29uIEtpbTxqYWV3b24wMi5raW1A c2Ftc3VuZy5jb20+ICB3cm90ZToKPiA+PiBUaGUgU1BJIGRhdGEgc2l6ZSBpcyBzbWFsbGVyIHRo YW4gRklGTywgaXQgb3BlcmF0ZXMgaW4gUElPIG1vZGUsCj4gPiBTcGVsbGluZzogIlRoZSIgLT4g IklmIHRoZSIKPgo+IFRoYW5rcywgSSB3aWxsIGZpeCBpdCB2Mi4KPgo+ID4+IGFuZCBpZiBpdCBp cyBsYXJnZXIgdGhhbiBGSUZPIG1vZGUsIERNQSBtb2RlIGlzIHNlbGVjdGVkLgo+ID4+Cj4gPj4g SWYgdGhlIGRhdGEgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgRklGTyBzaXplLCBpdCBvcGVyYXRl cyBpbiBQSU8gbW9kZQo+ID4+IGFuZCBkYXRhIGlzIHNlcGFyYXRlZCBpbnRvIHR3byB0cmFuc2Zl ci4gSW4gb3JkZXIgdG8gcHJldmVudCwKPiA+IE5pdDogInRyYW5zZmVyIiAtPiAidHJhbnNmZXJz IiwgInByZXZlbnQiIC0+ICJwcmV2ZW50IGl0Igo+Cj4gVGhhbmtzLCBJIHdpbGwgZml4IGl0IHYy Lgo+Cj4gPj4gRE1BIG1vZGUgbXVzdCBiZSB1c2VkIGZyb20gdGhlIGNhc2Ugb2YgRklGTyBhbmQg ZGF0YSBzaXplLgo+ID4+Cj4gPiBZb3UgcHJvYmFibHkgbWVhbiB0aGlzIGNvZGUgKGl0IG9jY3Vy cyB0d28gdGltZXMgaW4gdGhlIGRyaXZlcik6Cj4gPgo+ID4gICAgICB4ZmVyLT5sZW4gPSBmaWZv X2xlbiAtIDE7Cj4gPgo+ID4gQ2FuIHlvdSBwbGVhc2UgZWxhYm9yYXRlIG9uIHdoeSBpdCdzIGRv bmUgdGhpcyB3YXk/IFdoeSBjYW4ndCB3ZSBqdXN0Cj4gPiBkbyAieGZlci0+bGVuID0gZmlmb19s ZW4iIGFuZCB1c2UgdGhlIHdob2xlIEZJRk8gZm9yIHRoZSB0cmFuc2Zlcgo+ID4gaW5zdGVhZD8g SSBkb24ndCB1bmRlcnN0YW5kIHRoZSBuZWNlc3NpdHkgdG8gc3BsaXQgdGhlIHRyYW5zZmVyIGlu dG8KPiA+IHR3byBjaHVua3MgaWYgaXRzIHNpemUgaXMgb2YgRklGTyBsZW5ndGggLS0gd291bGRu J3QgaXQgZml0IGludG8gRklGTwo+ID4gaW4gdGhhdCBjYXNlPyAoSSdtIHByZXR0eSBzdXJlIHRo aXMgY2hhbmdlIGlzIGNvcnJlY3QsIGp1c3Qgd2FudCB0bwo+ID4gdW5kZXJzdGFuZCBob3cgZXhh Y3RseSBpdCB3b3JrcykuCj4KPiBJbiBJUlEgbW9kZShTM0M2NFhYX1NQSV9NT0RFX1JYX1JEWV9M VkwgZW5hYmxlKSwgVHhPdmVycnVuL1J4VW5kZXJydW4KPiBpcnEgb2NjdXJzIHdoZW4gRklGTyBp cyBmdWxsLgo+Cj4gVG8gYXZvaWQgRklGTyBmdWxsLCBpdCBpcyB0cmFuc21pdHRlZCBpbiBhIHNt YWxsZXIgc2l6ZSB0aGFuCj4gZmlmb19sZW4uKGZpZm8tbGVuIC0gMSkKPgo+IEhvd2V2ZXIsIGlu IGNhc2Ugb2YgImZpZm9fbGVuID09IGRhdGEgc2l6ZSIgImZpZm9fbGVuIC0gMSIgYnl0ZSArICIx Igo+IGJ5dGUgd2VyZSB0cmFuc21pdHRlZCBzZXBhcmF0ZWx5Lgo+Cj4gVGhpcyBwcm9ibGVtIGNh biBiZSBzb2x2ZWQgYnkgc3RhcnRpbmcgRE1BIHRyYW5zbWlzc2lvbiBzdGFydCBzaXplIGZyb20K PiBmaWZvX2xlbi4KPgoKVGhhbmtzIGZvciB0aGUgZXhwbGFuYXRpb24hIFBsZWFzZSBmZWVsIGZy ZWUgdG8gYWRkOgoKUmV2aWV3ZWQtYnk6IFNhbSBQcm90c2Vua28gPHNlbWVuLnByb3RzZW5rb0Bs aW5hcm8ub3JnPgoKPiA+PiBGaXhlczogMWVlODA2NzE4ZDVlICgic3BpOiBzM2M2NHh4OiBzdXBw b3J0IGludGVycnVwdCBiYXNlZCBwaW8gbW9kZSIpCj4gPiBKdXN0IHdvbmRlciBpZiB0aGF0IGZp eGVzIHNvbWUgdGhyb3VnaHB1dCByZWdyZXNzaW9uLCBvciBzb21ldGhpbmcKPiA+IHdvcnNlIChs aWtlIGZhaWxlZCB0cmFuc2ZlcnMgd2hlbiB0aGUgdHJhbnNmZXIgc2l6ZSBpcyB0aGUgc2FtZSBh cwo+ID4gRklGTyBzaXplKT8KPgo+IEl0IGlzIG5vdCBhIGNyaXRpY2FsIGlzc3VlLCBidXQgV2hl biBJIGxvb2sgYXQgdGhlIGFjdHVhbCB3YXZlZm9ybSwgaXQKPiBzZWVtcyBzdHJhbmdlIHRoYXQg b25seSB0aGUgbGFzdCAxLWJ5dGUgaXMgdHJhbnNtaXR0ZWQgc2VwYXJhdGVseS4KPgo+IEkgdGhv dWdodCBpdCB3YXMgIkZpeGVzIiwgYnV0IGlmIG5vdCwgSSB3aWxsIHJlbW92ZSBpdC4KPgoKTm8g bm8sIEkgd2FzIGp1c3QgY3VyaW91cy4gIkZpeGVzIiBpcyBmaW5lIHdpdGggbWUuCgo+ID4+IFNp Z25lZC1vZmYtYnk6IEphZXdvbiBLaW08amFld29uMDIua2ltQHNhbXN1bmcuY29tPgo+ID4+IC0t LQo+ID4+ICAgZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYyB8IDYgKysrLS0tCj4gPj4gICAxIGZp bGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ID4+Cj4gPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGktczNj NjR4eC5jCj4gPj4gaW5kZXggOWZjYmUwNDBjYjJmLi44MWVkNWZkZGY4M2UgMTAwNjQ0Cj4gPj4g LS0tIGEvZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYwo+ID4+ICsrKyBiL2RyaXZlcnMvc3BpL3Nw aS1zM2M2NHh4LmMKPiA+PiBAQCAtNDMwLDcgKzQzMCw3IEBAIHN0YXRpYyBib29sIHMzYzY0eHhf c3BpX2Nhbl9kbWEoc3RydWN0IHNwaV9jb250cm9sbGVyICpob3N0LAo+ID4+ICAgICAgICAgIHN0 cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2Rl dmRhdGEoaG9zdCk7Cj4gPj4KPiA+PiAgICAgICAgICBpZiAoc2RkLT5yeF9kbWEuY2ggJiYgc2Rk LT50eF9kbWEuY2gpCj4gPj4gLSAgICAgICAgICAgICAgIHJldHVybiB4ZmVyLT5sZW4gPiBzZGQt PmZpZm9fZGVwdGg7Cj4gPj4gKyAgICAgICAgICAgICAgIHJldHVybiB4ZmVyLT5sZW4gPj0gc2Rk LT5maWZvX2RlcHRoOwo+ID4+Cj4gPj4gICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4+ICAgfQo+ ID4+IEBAIC04MjYsMTEgKzgyNiwxMSBAQCBzdGF0aWMgaW50IHMzYzY0eHhfc3BpX3RyYW5zZmVy X29uZShzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmhvc3QsCj4gPj4gICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiBzdGF0dXM7Cj4gPj4gICAgICAgICAgfQo+ID4+Cj4gPj4gLSAgICAgICBp ZiAoIWlzX3BvbGxpbmcoc2RkKSAmJiAoeGZlci0+bGVuID4gZmlmb19sZW4pICYmCj4gPj4gKyAg ICAgICBpZiAoIWlzX3BvbGxpbmcoc2RkKSAmJiB4ZmVyLT5sZW4gPj0gZmlmb19sZW4gJiYKPiA+ PiAgICAgICAgICAgICAgc2RkLT5yeF9kbWEuY2ggJiYgc2RkLT50eF9kbWEuY2gpIHsKPiA+PiAg ICAgICAgICAgICAgICAgIHVzZV9kbWEgPSAxOwo+ID4+Cj4gPiBXb3VsZCBiZSBuaWNlIHRvIHJl bW92ZSB0aGlzIGVtcHR5IGxpbmUsIHdoaWxlIGF0IGl0Lgo+IEdvb2QsIEkgd2lsbCByZW1vdmUg aXQgYWxzby4KPiA+PiAtICAgICAgIH0gZWxzZSBpZiAoeGZlci0+bGVuID49IGZpZm9fbGVuKSB7 Cj4gPj4gKyAgICAgICB9IGVsc2UgaWYgKHhmZXItPmxlbiA+IGZpZm9fbGVuKSB7Cj4gPiBCZWxv dyBpbiB0aGUgc2FtZSBmdW5jdGlvbiBJIGNhbiBzZWUgc2ltaWxhciBjb2RlOgo+ID4KPiA+ICAg ICAgICAgICAgICBpZiAodGFyZ2V0X2xlbiA+PSBmaWZvX2xlbikKPiA+ICAgICAgICAgICAgICAg ICAgeGZlci0+bGVuID0gZmlmb19sZW4gLSAxOwo+ID4KPiA+IFNob3VsZG4ndCB0aGF0ICdpZicg Y29uZGl0aW9uIGJlIGZpeGVkIHRvbz8gT3IgaXQncyBvayBhcyBpdCBpcz8gKEp1c3QKPiA+IG5v dGljZWQgaXQgYnkgc2VhcmNoaW5nLCBub3Qgc3VyZSBteXNlbGYsIGhlbmNlIGFza2luZykuCj4K PiBZb3UgYXJlIGNvcnJlY3QuIFRoaXMgJ2lmJyBjb25kaXRpb24gc2hvdWxkIG5vdCBoYXZlIGJl ZW4gbW9kaWZpZWQuCj4KPiA+PiAgICAgICAgICAgICAgICAgIHR4X2J1ZiA9IHhmZXItPnR4X2J1 ZjsKPiA+PiAgICAgICAgICAgICAgICAgIHJ4X2J1ZiA9IHhmZXItPnJ4X2J1ZjsKPiA+PiAgICAg ICAgICAgICAgICAgIG9yaWdpbl9sZW4gPSB4ZmVyLT5sZW47Cj4gPj4gLS0KPiA+PiAyLjQzLjIK PiA+Pgo+ID4+Cj4KPiBUaGFua3MKPgo+IEphZXdvbiBLaW0KPgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=