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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9EB19CE7AA5 for ; Fri, 6 Sep 2024 02:48:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1BBCB6B007B; Thu, 5 Sep 2024 22:48:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 16C686B0082; Thu, 5 Sep 2024 22:48:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 033706B0088; Thu, 5 Sep 2024 22:48:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D98526B007B for ; Thu, 5 Sep 2024 22:48:41 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 7F21A1A0D61 for ; Fri, 6 Sep 2024 02:48:41 +0000 (UTC) X-FDA: 82532780442.07.1D22D81 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf16.hostedemail.com (Postfix) with ESMTP id 9779218000B for ; Fri, 6 Sep 2024 02:48:39 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=bRX4+VzE; spf=pass (imf16.hostedemail.com: domain of "SRS0=v4Y+=QE=zx2c4.com=Jason@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=v4Y+=QE=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725590823; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=GDin/TTzmHCatsL5YEP7qml5EKwCyw3+unP9HsNBBks=; b=ryKrXPsKREwfmWRiSYZufXWpALfn2Wj4GPiuzqyKMco81Xo6tImyAudK2yfxMWe074zw9S aoJbsUVNWgf2PArW3ooTB1CvVRtlaMSk/KFFbbRvagA5wiiN2rt337TmyT+n09T6Zr/0nq LkqN4buAXOfFGXBlSHrVkw6LA8TxWac= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725590823; a=rsa-sha256; cv=none; b=bfJPB3eEMaMuJb9VEwrQw1s1i4lb71AX9VKa23apqQVwnJiOGlL36OXcwX5jFIM/1KUg4u caRjsLF9ERJ6edaY41aHXN2E2rT8pMovPU8ZZAL2p+kL/E4Za7xFfLNMiwpD+wEQLj6maI 9mb+Jy2C3kDI40+vBFHg+JEieZ7Dp3w= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=bRX4+VzE; spf=pass (imf16.hostedemail.com: domain of "SRS0=v4Y+=QE=zx2c4.com=Jason@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=v4Y+=QE=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id A74E45C5976; Fri, 6 Sep 2024 02:48:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 754BFC4CEC3; Fri, 6 Sep 2024 02:48:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1725590913; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=GDin/TTzmHCatsL5YEP7qml5EKwCyw3+unP9HsNBBks=; b=bRX4+VzElx6AhF7yIERy0JoxrcqZ8w2XnNUX4cySvATmmNIgFgKdGdfDY+DT1KfFqexJRX 9BvfkivoCdg2WCBNWf5LjK2iwqnwDbLFu2UJPBepJhXrsh39RcDJ68oyyRJJCk1qgWS81f K191Ft9MxUKb0Efd83zvLBnDi2pl2n4= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 5ee168b6 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Fri, 6 Sep 2024 02:48:32 +0000 (UTC) Date: Fri, 6 Sep 2024 04:48:28 +0200 From: "Jason A. Donenfeld" To: Christophe Leroy Cc: Andrew Morton , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Michael Ellerman , Nicholas Piggin , Naveen N Rao , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , Shuah Khan , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kselftest@vger.kernel.org, llvm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, Adhemerval Zanella , Xi Ruoyao Subject: Re: [PATCH v5 4/5] powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO32 Message-ID: References: <1f49c2ce009f8b007ab0676fb41187b2d54f28b2.1725304404.git.christophe.leroy@csgroup.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: 9779218000B X-Stat-Signature: sdkydsdwdigtie3naaiyr87tt9iednc1 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1725590919-971262 X-HE-Meta: U2FsdGVkX18LD1iY+PoDPqQJVXmWUivQDIMW0l523Xxp/CJ4N1v0F/AXmlBTGtoAZFeot7UjHbUz3Ubso8HHRrsD5W+H8URqZN23X5MKLwldF8V3a7byuZ3Klac+C0behgCsFo3105FS8SUTalexqo1KnC1L75G+ArIE69j52n+jEAm0yE47EfNnFmIBRl1V7Fx4XZmopcv4XOMSzFc4l4Ye6hIgEYRA7c1zwP9+/0fuua1bFBbfGeW1Ge4SiTi8tCMpmEB/gR7P+y0nyXLQwulCsi7/OYHnDEnjDsh15xu220QOYX39V2OhmDDdVyx9MPJXMWu+ZKgCDVGn+r2E6D57RDIatpCO24F/Ja/QwScF1FaioSadlc4x16gH80e7aqSdtMhOlWe/sTIwI5tn3lEtTJqn3jUGHso/8xOHkVtoC2J+olUkxW4yuxTyNQAewhUHe7zjDJQk0NlFNaLgzPq/NlA85VDjUb52unmcaMvKeC6qpjxeIAxxcniLq78PlCb91n9b486ySuuv9Yhwm3DAv9nkE6LbIiP9VuKO88FR5XM2an5kBL5EKhFB0GnfOCNaoTDRXDUE6YNqgVmculRQRo82xdA0YFYRaKVEmrKLApWWIeFUYjzv7QV3a+BfjEWNgVRjb4Kox49GlzMsUWyNha8x0qyxbWy8KDZ+TVVyEpjeUM6yUiSpck2uDvdDxu5XipatnoaYg816ZWvblhx55t6u3wWWsf8TLsDap3cVvllTg9lfPLLoTWaJO6nEjo167KYp8tPSMpkem2OdHSvjeO5gfd8wx054yKZxw6kAfXJFNPIU38+Chy3/lm3U0r3AsoZhOsvI8UoBuiuhh4jpLy7oCXK53o9z+mkunKuT29lizQfdvhevc2n4sl+HoDSFMDBNRI4fQJVvAhZ+Gfg3uVb1+GbAu8LgbItIfdjsMVsizVoDkZjSqkybok9PR4ZJAk82vy68msmPyUq bLgOxZel Mo2SDSdXTWkgbko5Qa3jvhxtoafvH3c0wQ26r2OK7KHNCmnjbLNf9hz4v16oh5uvFiW7M/a9/2S/FQ657bsrWQTu6LOvKUEcyNooAK7Fy4F5fT/oIcvGhQdCScRt0o14apPDcsd8NwIu4W3gHkcs+jWOpPKEppzREZ2TFGy03SXJ1nXeuILJBVku9kZvkisA0w7tmOWVqZfdQY2GStcw/kWu+lNV4GX9xwNgN08QEiACGcCSkxuM2rfvYGHfkUP7ZYfJipuOuR2Yies7PIAgtTft/Wem93Eo29CqZR2BwrfjvEDRpd50QmwxPvEwOvBFjpsq3J+M5PNjqqN9I3wwUT0C+yQKmh3f81BLmbZVGK+lwY+3jh2yWSnTOoDO9/BZrgLRCwxIAxnpftEw1vaq7suZAVTg1C+vRQJZRO6ubuqUNMBQIiN/1n+glBg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Sep 05, 2024 at 10:41:40PM +0200, Jason A. Donenfeld wrote: > On Thu, Sep 05, 2024 at 06:13:29PM +0200, Jason A. Donenfeld wrote: > > > +/* > > > + * The macro sets two stack frames, one for the caller and one for the callee > > > + * because there are no requirement for the caller to set a stack frame when > > > + * calling VDSO so it may have omitted to set one, especially on PPC64 > > > + */ > > > + > > > +.macro cvdso_call funct > > > + .cfi_startproc > > > + PPC_STLU r1, -PPC_MIN_STKFRM(r1) > > > + .cfi_adjust_cfa_offset PPC_MIN_STKFRM > > > + mflr r0 > > > + PPC_STLU r1, -PPC_MIN_STKFRM(r1) > > > + .cfi_adjust_cfa_offset PPC_MIN_STKFRM > > > + PPC_STL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) > > > + .cfi_rel_offset lr, PPC_MIN_STKFRM + PPC_LR_STKOFF > > > + get_datapage r8 > > > + addi r8, r8, VDSO_RNG_DATA_OFFSET > > > + bl CFUNC(DOTSYM(\funct)) > > > + PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) > > > + cmpwi r3, 0 > > > + mtlr r0 > > > + addi r1, r1, 2 * PPC_MIN_STKFRM > > > + .cfi_restore lr > > > + .cfi_def_cfa_offset 0 > > > + crclr so > > > + bgelr+ > > > + crset so > > > + neg r3, r3 > > > + blr > > > + .cfi_endproc > > > +.endm > > > > Can you figure out what's going on and send a fix, which I'll squash > > into this commit? > > This doesn't work, but I wonder if something like it is what we want. I > need to head out for the day, but here's what I've got. It's all wrong > but might be of interest. Oh, I just got one small detail wrong before. The below actually works, and uses the same strategy as on arm64. Let me know if you'd like me to fix up this commit with the below patch, or if you have another way you'd like to go about it. diff --git a/arch/powerpc/include/asm/vdso/getrandom.h b/arch/powerpc/include/asm/vdso/getrandom.h index 501d6bb14e8a..acb271709d30 100644 --- a/arch/powerpc/include/asm/vdso/getrandom.h +++ b/arch/powerpc/include/asm/vdso/getrandom.h @@ -47,7 +47,8 @@ static __always_inline struct vdso_rng_data *__arch_get_vdso_rng_data(void) } ssize_t __c_kernel_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, - size_t opaque_len, const struct vdso_rng_data *vd); + size_t opaque_len, const struct vdso_data *vd, + const struct vdso_rng_data *vrd); #endif /* !__ASSEMBLY__ */ diff --git a/arch/powerpc/kernel/vdso/getrandom.S b/arch/powerpc/kernel/vdso/getrandom.S index a957cd2b2b03..64cc1fad3ccc 100644 --- a/arch/powerpc/kernel/vdso/getrandom.S +++ b/arch/powerpc/kernel/vdso/getrandom.S @@ -32,7 +32,8 @@ .cfi_rel_offset r2, PPC_MIN_STKFRM + STK_GOT #endif get_datapage r8 - addi r8, r8, VDSO_RNG_DATA_OFFSET + addi r9, r8, VDSO_RNG_DATA_OFFSET + addi r8, r8, VDSO_DATA_OFFSET bl CFUNC(DOTSYM(\funct)) PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) #ifdef __powerpc64__ diff --git a/arch/powerpc/kernel/vdso/vgetrandom.c b/arch/powerpc/kernel/vdso/vgetrandom.c index 5f855d45fb7b..408c76036868 100644 --- a/arch/powerpc/kernel/vdso/vgetrandom.c +++ b/arch/powerpc/kernel/vdso/vgetrandom.c @@ -8,7 +8,10 @@ #include ssize_t __c_kernel_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, - size_t opaque_len, const struct vdso_rng_data *vd) + size_t opaque_len, const struct vdso_data *vd, + const struct vdso_rng_data *vrd) { - return __cvdso_getrandom_data(vd, buffer, len, flags, opaque_state, opaque_len); + if (IS_ENABLED(CONFIG_TIME_NS) && vd->clock_mode == VDSO_CLOCKMODE_TIMENS) + vrd = (void *)vrd + (1UL << CONFIG_PAGE_SHIFT); + return __cvdso_getrandom_data(vrd, buffer, len, flags, opaque_state, opaque_len); }