From nobody Thu Feb 03 23:25:49 2022 X-Original-To: dev-commits-src-all@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 2FB7119AC24B; Thu, 3 Feb 2022 23:25:50 +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 4JqZXt0sGgz3JjV; Thu, 3 Feb 2022 23:25:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643930750; 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=Ch/ARLSqoXC+Y9ktcbIbUXKArsVFa71YrHemy/Png0Q=; b=ncLpb/NibQ7xiVz5ZxnTD5O4BZ9e46KPJx1OGGrhzzLZILjWFZDrJXCedYrn6xnlOkDe0n /mQMM0JvZAfLXBf3z+fe3B2CZ7nWWVmf8OTfv8vLsgLoBnA6xICRxaUf/w3LZrgkgyb5zg wd7Y9Sq8qgmDceW5lqsuMHXTEir+MqKtl/9o7rpLQjXwQfTRN3OCtSpjcVa1sLXm2sKZlk 56iFrbzQRMs/ElAC8iZ5FGXu9u0yPZ4Abvd19E36o+mcIZZyFNpP1q1C4gEhA8DkU6EIQy SOdy7mftg0coUqRlji3Y9oGJIOoR4atezdWIxoAl78GavaoUxeX2TGuYtEYxeQ== 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 F1F3820AD6; Thu, 3 Feb 2022 23:25:49 +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 213NPnn8049988; Thu, 3 Feb 2022 23:25:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 213NPnCP049987; Thu, 3 Feb 2022 23:25:49 GMT (envelope-from git) Date: Thu, 3 Feb 2022 23:25:49 GMT Message-Id: <202202032325.213NPnCP049987@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: aa4736459ee2 - main - powerpc/atomic: Fix atomic_testand_*_long on powerpc64 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: aa4736459ee2d314dc90ae9cbb4ad9c1cf48d796 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643930750; 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=Ch/ARLSqoXC+Y9ktcbIbUXKArsVFa71YrHemy/Png0Q=; b=cvR1NwA04IfEHAL754//MLwN3kY7eCSERgbEFGS65XVaoK3lzGI/EyW5h9I+yyiXcHBVnn 0za+Q+9cCPV8kMggrisBCMODFnKZaYMZ4NDS2VlCeWDBD6BMg7jILnrXTGro80IB4Zcchr ACR2MchLdNOXuBswWLmN91RctS0Rvyjkso8xsco1aiQURiRejKik1O5htTmPZ/xpbH6MbQ K6iIUtkw/nLSxHulbdCmWdwkDF9HLYtScoA0UA+sxBpmzwg6eXrRWoeLkZ2pyAi9p066Bw I694TxjgpBZm2xqHPqpLg6CcvSLTUwxYSVK3TpXargo4+xM+8sEA7KKMbCX8Qw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1643930750; a=rsa-sha256; cv=none; b=Gu3TV7fDPRmmR+rVayJNStKtooL7MEgXwTBxywxSLvy04+0Cb80N0cbWKdd4rKPFSOiuWw mvQfk3kaJUjvB0l2azpqwqETLB50Ptvm983/INJEo0csFRGkz3oUgTvPVmyH1R3soUQJnT b3SaoA3J0JSjOHNqJKKEdFjtty/pOSLmyQJqT/sMpS1dmC0ecldzwOCavyU+6pQrk07eQw as/n0ePtmBNLBO/tAETfUyYTb3l4QId0gPZaIdomPKlhipeJxVn0ZZLgPa9NwmbIedIeRz I0gDECFRjlToVM7h1GkR1a3KFl8Y6g23bj+znpJXhpSZNJyGGDmqInF1uPC97Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=aa4736459ee2d314dc90ae9cbb4ad9c1cf48d796 commit aa4736459ee2d314dc90ae9cbb4ad9c1cf48d796 Author: Justin Hibbits AuthorDate: 2022-02-03 23:20:36 +0000 Commit: Justin Hibbits CommitDate: 2022-02-03 23:25:39 +0000 powerpc/atomic: Fix atomic_testand_*_long on powerpc64 After b5d227b0 FreeBSD was panicking on boot with "Duplicate free" in UMA. Analyzing the asm, the '1' mask was treated as an integer, rather than a long, causing 'slw' (shift left word) to be used for the shifting instruction, not 'sld' (shift left double). This means the upper bits of the bitfield were not getting used, resulting in corruption of the bitfield. While fixing this, the 'and' check of the mask does not need to be recorded, so don't record (drop the '.'). --- sys/powerpc/include/atomic.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sys/powerpc/include/atomic.h b/sys/powerpc/include/atomic.h index deb53173418f..43bb239719ae 100644 --- a/sys/powerpc/include/atomic.h +++ b/sys/powerpc/include/atomic.h @@ -997,13 +997,13 @@ atomic_swap_64(volatile u_long *p, u_long v) static __inline int atomic_testandset_int(volatile u_int *p, u_int v) { - u_int m = (1 << (v & 0x1f)); + u_int m = (1u << (v & 0x1f)); u_int res; u_int tmp; __asm __volatile( "1: lwarx %0,0,%3\n" - " and. %1,%0,%4\n" + " and %1,%0,%4\n" " or %0,%0,%4\n" " stwcx. %0,0,%3\n" " bne- 1b\n" @@ -1017,13 +1017,13 @@ atomic_testandset_int(volatile u_int *p, u_int v) static __inline int atomic_testandclear_int(volatile u_int *p, u_int v) { - u_int m = (1 << (v & 0x1f)); + u_int m = (1u << (v & 0x1f)); u_int res; u_int tmp; __asm __volatile( "1: lwarx %0,0,%3\n" - " and. %1,%0,%4\n" + " and %1,%0,%4\n" " andc %0,%0,%4\n" " stwcx. %0,0,%3\n" " bne- 1b\n" @@ -1038,13 +1038,13 @@ atomic_testandclear_int(volatile u_int *p, u_int v) static __inline int atomic_testandset_long(volatile u_long *p, u_int v) { - u_long m = (1 << (v & 0x3f)); + u_long m = (1ul << (v & 0x3f)); u_long res; u_long tmp; __asm __volatile( "1: ldarx %0,0,%3\n" - " and. %1,%0,%4\n" + " and %1,%0,%4\n" " or %0,%0,%4\n" " stdcx. %0,0,%3\n" " bne- 1b\n" @@ -1058,13 +1058,13 @@ atomic_testandset_long(volatile u_long *p, u_int v) static __inline int atomic_testandclear_long(volatile u_long *p, u_int v) { - u_long m = (1 << (v & 0x3f)); + u_long m = (1ul << (v & 0x3f)); u_long res; u_long tmp; __asm __volatile( "1: ldarx %0,0,%3\n" - " and. %1,%0,%4\n" + " and %1,%0,%4\n" " andc %0,%0,%4\n" " stdcx. %0,0,%3\n" " bne- 1b\n"