From owner-svn-src-head@freebsd.org Tue Jul 16 03:55:28 2019 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 76912A4CDA; Tue, 16 Jul 2019 03:55:28 +0000 (UTC) (envelope-from jhibbits@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 589238F0E8; Tue, 16 Jul 2019 03:55:28 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 18FC970; Tue, 16 Jul 2019 03:55:28 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x6G3tRZ3088747; Tue, 16 Jul 2019 03:55:27 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x6G3tRbK088746; Tue, 16 Jul 2019 03:55:27 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201907160355.x6G3tRbK088746@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Tue, 16 Jul 2019 03:55:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r350023 - head/sys/powerpc/powerpc X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: head/sys/powerpc/powerpc X-SVN-Commit-Revision: 350023 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 589238F0E8 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.996,0]; NEURAL_HAM_SHORT(-0.98)[-0.977,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Jul 2019 03:55:28 -0000 Author: jhibbits Date: Tue Jul 16 03:55:27 2019 New Revision: 350023 URL: https://svnweb.freebsd.org/changeset/base/350023 Log: powerpc: Fix casueword(9) post-r349951 '=' asm constraint marks a variable as write-only. Because of this, gcc throws away the initialization of 'res', causing garbage to be returned if the CAS was successful. Use '+' to mark res as read/write, so that the initialization stays in the generated asm. Also, fix the reservation clearing stwcx store index register in casueword32, and only do the dummy store when needed, skip it if the real store has already succeeded. Modified: head/sys/powerpc/powerpc/copyinout.c Modified: head/sys/powerpc/powerpc/copyinout.c ============================================================================== --- head/sys/powerpc/powerpc/copyinout.c Tue Jul 16 03:32:21 2019 (r350022) +++ head/sys/powerpc/powerpc/copyinout.c Tue Jul 16 03:55:27 2019 (r350023) @@ -456,13 +456,13 @@ casueword32(volatile uint32_t *addr, uint32_t old, uin "cmplw %4, %0\n\t" /* compare */ "bne 1f\n\t" /* exit if not equal */ "stwcx. %5, 0, %3\n\t" /* attempt to store */ - "bne- 1f\n\t" /* if failed */ - "b 2f\n\t" /* we've succeeded */ + "bne- 2f\n\t" /* if failed */ + "b 3f\n\t" /* we've succeeded */ "1:\n\t" - "stwcx. %0, 0, %4\n\t" /* clear reservation (74xx) */ - "li %2, 1\n\t" - "2:\n\t" - : "=&r" (val), "=m" (*p), "=&r" (res) + "stwcx. %0, 0, %3\n\t" /* clear reservation (74xx) */ + "2:li %2, 1\n\t" + "3:\n\t" + : "=&r" (val), "=m" (*p), "+&r" (res) : "r" (p), "r" (old), "r" (new), "m" (*p) : "cr0", "memory"); @@ -511,13 +511,13 @@ casueword(volatile u_long *addr, u_long old, u_long *o "cmpld %4, %0\n\t" /* compare */ "bne 1f\n\t" /* exit if not equal */ "stdcx. %5, 0, %3\n\t" /* attempt to store */ - "bne- 1f\n\t" /* if failed */ - "b 2f\n\t" /* we've succeeded */ + "bne- 2f\n\t" /* if failed */ + "b 3f\n\t" /* we've succeeded */ "1:\n\t" "stdcx. %0, 0, %3\n\t" /* clear reservation (74xx) */ - "li %2, 1\n\t" - "2:\n\t" - : "=&r" (val), "=m" (*p), "=&r" (res) + "2:li %2, 1\n\t" + "3:\n\t" + : "=&r" (val), "=m" (*p), "+&r" (res) : "r" (p), "r" (old), "r" (new), "m" (*p) : "cr0", "memory");