From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752720AbdLEQn1 (ORCPT ); Tue, 5 Dec 2017 11:43:27 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:49521 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751288AbdLEQnX (ORCPT ); Tue, 5 Dec 2017 11:43:23 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20171205164321euoutp029f12e4cd4a4fcdf2b2a094d0219734f4~9c6TAy8-c2852228522euoutp02B X-AuditID: cbfec7ef-f79ee6d000003120-43-5a26cca8baa5 From: =?utf-8?Q?=C5=81ukasz_Stelmach?= To: Stephan Mueller Cc: Krzysztof Kozlowski , robh+dt@kernel.org, Herbert Xu , "David S. Miller" , Kukjin Kim , linux-crypto@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, m.szyprowski@samsung.com, b.zolnierkie@samsung.com Subject: Re: [PATCH 2/3] crypto: exynos - Improve performance of PRNG Date: Tue, 05 Dec 2017 17:43:10 +0100 In-reply-to: <5101426.uadkujNqxF@tauon.chronox.de> Message-id: <87zi6x9lcx.fsf%l.stelmach@samsung.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-version: 1.0 Content-type: multipart/signed; boundary="=-=-="; micalg="pgp-sha256"; protocol="application/pgp-signature" X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrCKsWRmVeSWpSXmKPExsWy7djP87orzqhFGez/xW2xccZ6Vos551tY LLpfyVj0P37NbHH+/AZ2i/v3fjJZXN41h81ixvl9TBZrj9xlt2jde4TdYurptSwO3B6frlxh 8tiy8iaTx7YDqh6bVnWyefRtWcXo8XmTXABbFJdNSmpOZllqkb5dAlfGk5kKBQ+lK07umc/c wLhUvIuRk0NCwETibOMSRghbTOLCvfVsXYxcHEICyxglpr+9DuV8ZpR4evcII0zHmuXHWeCq Ni9aClX1hVHi1tyFzCBVbAL2Ev1H9rGA2CICmhJX2+eDFTELnGKS2PrmJRtIQljAVWLW5c1g DSwCqhIfbjazg9icAkYSd45PAWvmFTCWeN8LMVRUwFLiXt9dNoi4oMSPyffAapgFciU+Nf1n B1kgIdDMLtG6ZhUTxK0uEiv/v2aDsIUlXh3fwg5hy0hcntzNAtHQzyhxeP53qMQURonFCx0g bGuJP6smskFs4JOYtG060BUcQHFeiY42IYgSD4mVR/8yQoQdJQ6fL4SERCujRPfDySwTGGVn Ibl1FpJbZwG1MAMDZv0ufYiwtsSyha+ZIWxbiXXr3rMsYGRdxSiSWlqcm55abKhXnJhbXJqX rpecn7uJEZh+Tv87/n4H49PmkEOMAhyMSjy8K2apRQmxJpYVV+YeYlQBGvNow+oLjFIsefl5 qUoivDf2AqV5UxIrq1KL8uOLSnNSiw8xSnOwKInz2ka1RQoJpCeWpGanphakFsFkmTg4pRoY S2Sj1u1Vn6g8f4+CXGPWzfCVcfm3p+j8a5GUthLYwdayR2wnh3x+3KOE+ZZsdw5KN2//9XuH /YFfuXIp2w5/ZtfTl3T9dPXNc6N2wcqsPbHHVx46WbG3+N8id8YHkut+XxQoPOm8dl6I1RW/ yKZydiWBOxYmZwK3MtQ+Wr3sj3Hdi5tXDm2aocRSnJFoqMVcVJwIABWx+MlHAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkkeLIzCtJLcpLzFFi42I5/e/4Vd3lZ9SiDB4fkLHYOGM9q8Wc8y0s Ft2vZCz6H79mtjh/fgO7xf17P5ksLu+aw2Yx4/w+Jou1R+6yW7TuPcJuMfX0WhYHbo9PV64w eWxZeZPJY9sBVY9NqzrZPPq2rGL0+LxJLoAtissmJTUnsyy1SN8ugSvjyUyFgofSFSf3zGdu YFwq3sXIySEhYCKxZvlxFghbTOLCvfVsXYxcHEICSxglvr/eBeV8Y5SY834RO0gVm4C9RP+R fWAdIgKaElfb54MVMQucYZLofTOHCSQhLOAqMevyZmYQW0jAUOL45wtgDSwCqhIfbjaDDeIU MJK4c3wKWJxXwFjife9CsHpRAUuJe3132SDighI/Jt8Dq2EWyJa4cPENywRG/llIUrOQpGYx cgDZmhLrd+lDhLUlli18zQxh20qsW/eeZQEj6ypGkdTS4tz03GIjveLE3OLSvHS95PzcTYzA SNl27OeWHYxd74IPMQpwMCrx8K6YpRYlxJpYVlyZe4hRBWjMow2rLzBKseTl56UqifDe2AuU 5k1JrKxKLcqPLyrNSS0+xCjNwaIkztu7Z3WkkEB6YklqdmpqQWoRTJaJg1OqgfGGMdPlRe1r TSO0J5ZJd9zKu/G18kmx2v2EmaWicb/2s7pJlHOySS2apv1aKvzJyRLB4//Epk+f+SbwvnDD yQZnR7PTqn0Lfl64+0QqRPFzx1yxaHvfG5zstb1XvO6HtrH/KG19Xs3I7Km0b8OnOXWytwzS pa/GrejgyQ1zbEvapS7QWcl5QomlOCPRUIu5qDgRAGl/69CcAgAA X-CMS-MailID: 20171205164319eucas1p1e79b9798d655851762cc83a6737b73b4 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171205164319eucas1p1e79b9798d655851762cc83a6737b73b4 X-RootMTR: 20171205164319eucas1p1e79b9798d655851762cc83a6737b73b4 References: <5101426.uadkujNqxF@tauon.chronox.de> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable It was <2017-12-05 wto 14:54>, when Stephan Mueller wrote: > Am Dienstag, 5. Dezember 2017, 13:35:57 CET schrieb =C5=81ukasz Stelmach: > > Hi =C5=81ukasz, > >> Use memcpy_fromio() instead of custom exynos_rng_copy_random() function >> to retrieve generated numbers from the registers of PRNG. >>=20 >> Remove unnecessary invocation of cpu_relax(). >>=20 >> Signed-off-by: =C5=81ukasz Stelmach >> --- >> drivers/crypto/exynos-rng.c | 36 +++++------------------------------- >> 1 file changed, 5 insertions(+), 31 deletions(-) >>=20 >> diff --git a/drivers/crypto/exynos-rng.c b/drivers/crypto/exynos-rng.c >> index 894ef93ef5ec..002e9d2a83cc 100644 >> --- a/drivers/crypto/exynos-rng.c >> +++ b/drivers/crypto/exynos-rng.c [...] >> @@ -171,6 +143,8 @@ static int exynos_rng_get_random(struct exynos_rng_d= ev >> *rng, { >> int retry =3D EXYNOS_RNG_WAIT_RETRIES; >>=20 >> + *read =3D min_t(size_t, dlen, EXYNOS_RNG_SEED_SIZE); >> + >> if (rng->type =3D=3D EXYNOS_PRNG_TYPE4) { >> exynos_rng_writel(rng, EXYNOS_RNG_CONTROL_START, >> EXYNOS_RNG_CONTROL); >> @@ -180,8 +154,8 @@ static int exynos_rng_get_random(struct exynos_rng_d= ev >> *rng, } >>=20 >> while (!(exynos_rng_readl(rng, >> - EXYNOS_RNG_STATUS) & EXYNOS_RNG_STATUS_RNG_DONE) && --retry) >> - cpu_relax(); >> + EXYNOS_RNG_STATUS) & EXYNOS_RNG_STATUS_RNG_DONE) && >> + --retry); SM> SM> Is this related to the patch? KK> It looks like unrelated change so split it into separate commit with KK> explanation why you are changing the common busy-loop pattern. KK> exynos_rng_readl() uses relaxed versions of readl() so I would expect KK> here cpu_relax(). Yes. As far as I can tell this gives the major part of the performance improvement brought by this patch. The busy loop is not very busy. Every time I checked the loop (w/o cpu_relax()) was executed twice (retry was 98) and the operation was reliable. I don't see why do we need a memory barrier here. On the other hand, I am not sure the whole exynos_rng_get_random() shouldn't be ran under a mutex or a spinlock (I don't see anything like this in the upper layers of the crypto framework). The *_relaxed() I/O operations do not enforce memory=20 Thank you for asking the questions. I will put the above explanations in the commit message. >>=20 >> if (!retry) >> return -ETIMEDOUT; >> @@ -189,7 +163,7 @@ static int exynos_rng_get_random(struct exynos_rng_d= ev >> *rng, /* Clear status bit */ >> exynos_rng_writel(rng, EXYNOS_RNG_STATUS_RNG_DONE, >> EXYNOS_RNG_STATUS); >> - *read =3D exynos_rng_copy_random(rng, dst, dlen); >> + memcpy_fromio(dst, rng->mem + EXYNOS_RNG_OUT_BASE, *read); >>=20 >> return 0; >> } Kind regards, =2D-=20 =C5=81ukasz Stelmach Samsung R&D Institute Poland Samsung Electronics --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBCAAGBQJaJsyfAAoJELCuHpyYpYAQtPMH/iypyyW1dc7UnLs8QEe90lbP j8BuW91wV58JAM+vwTzVZ6egInbuxS39FEBBt5hqYnfuM+cP3tlPUKS/lm+uxi+B xqLVzhO+BAJ9cr+Xr9NLDphQg7EPdhOHvABJtF1Ichplc2S6d3EIwbtYfrbyYy4z sPl24euM4i2gvM2DREyGdHijRaAvD7NiCj3DQDBu8H180xdsieAWDDlh2QuuCmTu asPTMZASsXpqYhWGUJ7TyhiNVVVarlB5D3qRU1y1FSBbdz6xG9AtD+enjA4VlY1B vdJ6K2KReT72Wgfd6NN4UKseDULhemfZbxTGFjVsqZa+Q463Y2fHND0KWWII3SU= =Bl04 -----END PGP SIGNATURE----- --=-=-=--