Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3584512pxb; Mon, 24 Jan 2022 12:50:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJxoHHfPC4LPbWPKU5gryAqkdzuHpAh1nHSU88Ra2vSM/VUcNYNAD8zLtJMh7Ig1mSGxob2b X-Received: by 2002:a17:902:bd4b:b0:149:4c30:6dd2 with SMTP id b11-20020a170902bd4b00b001494c306dd2mr15980772plx.93.1643057343788; Mon, 24 Jan 2022 12:49:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643057343; cv=none; d=google.com; s=arc-20160816; b=aQyGamZHmy5wAAyr7dtmJweUEwn5lPkvEe3uqSquJ0mcG5PMIuGeifcNUAMU2IC4IS ZCc8Y+vv/5qkCBYTPfHfHdbf32lqE9qYfbCZe701JpLKduYUOu+8iZBO6EOhaq2AVZz7 KXNqcE/ClrGvmIZrDo8bHYJ6abExvtijmTx0/G3OPUClhEBskquk7zvlf7jFneTyKJ4U 0DONSqaXRqVyhywLTamkmdJ8rmiLzWQs2h3N99z2pX6xe/y44HAxlTVsI6R8eXf9O2Kg CSCJxACmKsBi0nuTzoQgq0+VSP4NUgGaBJw+mbok+iM4Ec9RdflxjrUTJ8d25dQc5pgm rKqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=KUSJVUgrVSbB/gaPIOPRMi55nRpf3LmoiIRY5xjgbro=; b=Ydhv5bGkVUYAu/bPtr+oCvs9W9fnVaJfmwgvzu0xWoLaUEP0h35re9WAYar/qyLAtY SzBi201Jzyf4rUKiyUpndprD7qdbPy/vu4EBO+2VKHOls2ASUNffIDRIEQlBC3Yh7w1x Db8k2395vi+IcsY9emwzMrSH4lLl+3uvHiVHplKoZ1i6T0LoeXZa8kxcc6E1u6cshliJ M8cj3UIqMN+bkq40buKX/Phjqi2tJLIfWh1ehMecUAtDD3QOv/KaP0/WVrwFHpW+zqgN 92FO89D+CdZnXJao5YaD5j44oBdGnJXnE+lM2uEvEBQjqlTykiD4OPKn31JzD+kuXNFS HaUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Kps0+E7p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 4si2704830pga.154.2022.01.24.12.48.41; Mon, 24 Jan 2022 12:49:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Kps0+E7p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346766AbiAXUBT (ORCPT + 99 others); Mon, 24 Jan 2022 15:01:19 -0500 Received: from dfw.source.kernel.org ([139.178.84.217]:34990 "EHLO dfw.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345679AbiAXTha (ORCPT ); Mon, 24 Jan 2022 14:37:30 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 48CFC614A8; Mon, 24 Jan 2022 19:37:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 27201C340E7; Mon, 24 Jan 2022 19:37:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643053049; bh=YljHBSu8U7fYgPuBxiqBxuJLS3a+IyXUlt9fCs6zb+E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Kps0+E7pgVwkAleioERwVpFQy9pYjS+XPbWmvlARwty3R/0k96d4Qwuu3R6TcIweJ 1QD1bMeRZw4AJm2YKgTRqN2SK4LdUCSF3SDe2geR7kp6i2Cvx0GXVuHlqYKPEKkgu/ ya+ZWclMksHzJhF3nUssLOX9HoYzGr/b7+A5ucfI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, John David Anglin , Helge Deller Subject: [PATCH 5.4 259/320] parisc: Fix lpa and lpa_user defines Date: Mon, 24 Jan 2022 19:44:03 +0100 Message-Id: <20220124184002.794686090@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124183953.750177707@linuxfoundation.org> References: <20220124183953.750177707@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: John David Anglin commit db19c6f1a2a353cc8dec35b4789733a3cf6e2838 upstream. While working on the rewrite to the light-weight syscall and futex code, I experimented with using a hash index based on the user physical address of atomic variable. This exposed two problems with the lpa and lpa_user defines. Because of the copy instruction, the pa argument needs to be an early clobber argument. This prevents gcc from allocating the va and pa arguments to the same register. Secondly, the lpa instruction can cause a page fault so we need to catch exceptions. Signed-off-by: John David Anglin Fixes: 116d753308cf ("parisc: Use lpa instruction to load physical addresses in driver code") Signed-off-by: Helge Deller Cc: stable@vger.kernel.org # v5.2+ Signed-off-by: Greg Kroah-Hartman --- arch/parisc/include/asm/special_insns.h | 44 +++++++++++++++++--------------- 1 file changed, 24 insertions(+), 20 deletions(-) --- a/arch/parisc/include/asm/special_insns.h +++ b/arch/parisc/include/asm/special_insns.h @@ -2,28 +2,32 @@ #ifndef __PARISC_SPECIAL_INSNS_H #define __PARISC_SPECIAL_INSNS_H -#define lpa(va) ({ \ - unsigned long pa; \ - __asm__ __volatile__( \ - "copy %%r0,%0\n\t" \ - "lpa %%r0(%1),%0" \ - : "=r" (pa) \ - : "r" (va) \ - : "memory" \ - ); \ - pa; \ +#define lpa(va) ({ \ + unsigned long pa; \ + __asm__ __volatile__( \ + "copy %%r0,%0\n" \ + "8:\tlpa %%r0(%1),%0\n" \ + "9:\n" \ + ASM_EXCEPTIONTABLE_ENTRY(8b, 9b) \ + : "=&r" (pa) \ + : "r" (va) \ + : "memory" \ + ); \ + pa; \ }) -#define lpa_user(va) ({ \ - unsigned long pa; \ - __asm__ __volatile__( \ - "copy %%r0,%0\n\t" \ - "lpa %%r0(%%sr3,%1),%0" \ - : "=r" (pa) \ - : "r" (va) \ - : "memory" \ - ); \ - pa; \ +#define lpa_user(va) ({ \ + unsigned long pa; \ + __asm__ __volatile__( \ + "copy %%r0,%0\n" \ + "8:\tlpa %%r0(%%sr3,%1),%0\n" \ + "9:\n" \ + ASM_EXCEPTIONTABLE_ENTRY(8b, 9b) \ + : "=&r" (pa) \ + : "r" (va) \ + : "memory" \ + ); \ + pa; \ }) #define mfctl(reg) ({ \