From nobody Wed Jan 18 09:39:48 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Nxghh3vjRz2sj1s; Wed, 18 Jan 2023 09:39:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Nxghh3RmSz40Nr; Wed, 18 Jan 2023 09:39:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674034788; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WRikmio3G5UWWgq/YfEeCRwPryr1b9xP9tfh7qnUL/w=; b=X+BpgutIB+ARHDgxHLP2BsB5MhKJJ7bfjEMEd4TqGBij34ZodyWg/suNsKkqQF9AL9sUiY TiLZ3YfXjuWANefOkXHlCmr30b0ymfXDDTbhjz5CaAyY19gLScjYQRAO+ME4U7ZJJ6QQLg P5VSc9PNrIkdRSIANxaFLiieFlEmgHth91B+vJJ0NqyUfTTQDi3DdViSwjN5u6vGx88HE4 Y74GBPWMvXaZG5/lCrpMNWAMCcxSNm6mMZ1uSzDlzT4TiM7uAZ65vmyqlAlOYV9hHh2tzd HBiyKPhNfgk1YJl3GRJaJhz7osjP6rmu7m/HTL77pZnzDIAc4snUPcklLlCFzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674034788; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WRikmio3G5UWWgq/YfEeCRwPryr1b9xP9tfh7qnUL/w=; b=NeaHrDsIo05fnOIUA4YVzFb+MBVtJb+qO1uh+lPLOklrLNG+ry/OwBEYNr2FUk1XYoG5g8 CL+7FmcaWfdBVN5ff8nNC1scVToxsNi8FK32bDUw/ulIqGHqHfHDs+fIgyvh18ziW4Mgwy xibvK8A2e46afs9ToRzD0wE7ZrkG+91piEo+B3Hi8XL56d/QSZvCk/MLxsQr3OFOS94IpI Gi0a2OncZ1u38+5CfKjUZDUv8R3E0eXqaTBXooK7dnMXOVcaCT0mA+eYEADlfWvToA0cVX SxbPqKARlbmmWxRpirpNfdEF3J11u0vBFZluRbF9OjK1KUS4pYqyLPsvborjOg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1674034788; a=rsa-sha256; cv=none; b=mFcCBTXKJoCf8xy33Eis9WCp+UJ4f4gmYvosPkUHnOz5Vp/OWJGwOpVOicS7fWn44T9jsJ 8saDJTKWY9SrxlWOYHkwDkThFbMcptep3C7zMFhkMNrKgPeLFRkRrEtTiOtdOzJ660kAMG PHSyKr4jx5IHzQMVe1HXdhPPfm5KRt89hFpCF4+m/DIUjpyplqvoIF0WHhRqJoeg5W4iAu Hoe+q1Rhcbt3k6qhLmAXVjnY+AQiGHT1IV+U/6R20D7UcEhg6NhoyLmRtUTu9B2L04G7vf G82ySptDwLMhLZ8boIdKvy6Q7+vwgCy/bS7Z+KCOaxpBxANfla8vIZss8Xka4A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Nxghh2VSyz161c; Wed, 18 Jan 2023 09:39:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30I9dmsQ053045; Wed, 18 Jan 2023 09:39:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30I9dm1k053044; Wed, 18 Jan 2023 09:39:48 GMT (envelope-from git) Date: Wed, 18 Jan 2023 09:39:48 GMT Message-Id: <202301180939.30I9dm1k053044@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 95dd6974b591 - main - Always read the VFP regs in the arm64 fill_fpregs List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 95dd6974b591ce76bf8d29adcc0dd01b4b281ffd Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=95dd6974b591ce76bf8d29adcc0dd01b4b281ffd commit 95dd6974b591ce76bf8d29adcc0dd01b4b281ffd Author: Andrew Turner AuthorDate: 2023-01-18 09:30:20 +0000 Commit: Andrew Turner CommitDate: 2023-01-18 09:31:35 +0000 Always read the VFP regs in the arm64 fill_fpregs The PCB_FP_STARTED is used to indicate that the current VFP context has been used since either 1. the start of the thread, or 2. exiting a kernel FP context. When case 2 was added to the kernel this could cause incorrect results to be returned when a thread exits the kernel FP context and fill_fpregs is called before it has restored the VFP state, e.g. by trappin on a userspace VFP instruction. In both of the cases the base save area is still valid so reduce the use of the PCB_FP_STARTED flag check to help decide if we need to store the current threads VFP state. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D37994 --- sys/arm64/arm64/exec_machdep.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sys/arm64/arm64/exec_machdep.c b/sys/arm64/arm64/exec_machdep.c index 6109a866a2d0..12c23149ec7f 100644 --- a/sys/arm64/arm64/exec_machdep.c +++ b/sys/arm64/arm64/exec_machdep.c @@ -153,16 +153,17 @@ fill_fpregs(struct thread *td, struct fpreg *regs) */ if (td == curthread) vfp_save_state(td, pcb); + } - KASSERT(pcb->pcb_fpusaved == &pcb->pcb_fpustate, - ("Called fill_fpregs while the kernel is using the VFP")); - memcpy(regs->fp_q, pcb->pcb_fpustate.vfp_regs, - sizeof(regs->fp_q)); - regs->fp_cr = pcb->pcb_fpustate.vfp_fpcr; - regs->fp_sr = pcb->pcb_fpustate.vfp_fpsr; - } else + KASSERT(pcb->pcb_fpusaved == &pcb->pcb_fpustate, + ("Called fill_fpregs while the kernel is using the VFP")); + memcpy(regs->fp_q, pcb->pcb_fpustate.vfp_regs, + sizeof(regs->fp_q)); + regs->fp_cr = pcb->pcb_fpustate.vfp_fpcr; + regs->fp_sr = pcb->pcb_fpustate.vfp_fpsr; +#else + memset(regs, 0, sizeof(*regs)); #endif - memset(regs, 0, sizeof(*regs)); return (0); }