Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp2246577ybd; Mon, 24 Jun 2019 03:14:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqyZxcTCbAYFp/iGtWG2P5VaP3W+4XDEQw7ZMcp+LpwVyJAyCPDbmn6KkRF8qDckIZ8CirGR X-Received: by 2002:a65:6241:: with SMTP id q1mr31556905pgv.24.1561371267244; Mon, 24 Jun 2019 03:14:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561371267; cv=none; d=google.com; s=arc-20160816; b=FtC9noNRZqCLxGDY1J163BWL72eRI8dyB2STLLEQgTaJAMY/ltaE33QWH0I1nQCi+G AUIBTEqR1P4NvIMgH4lyboe1GQEPhYToTIT6EEQVjZbjjoBKervhT9PZe6DLdiQjZf4g ModOVTqzxWIveJcEGAbP8x0XIBMnzFvYog63/p/ityzdN43JeIPGVeRILT7XxqbD3uAs k2EyFY2sgPnJTRJzgIBMfYqGEZg8LnGsJNdCzGhlqcnB6xZPMq27cUmQHO9zDng6TKtn I9D1Z2VoM8VyF32SKg0ioP0+8wOhECp9ztTRdCdLo7tlcC4wMjwXvAubNe1urCseaaEK ax9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=bwkxygsVK5Tmx4FQ+YQZ1v4vnDQFyKEBs75bSdAnlDc=; b=DhEvVw/G9pkFUjcNmJCL6zYjtGy18fIDcQ0eucM2XxIescLnzFGUz5exM871jR+pZh pUAvElZ49XwWFj/pIccNWLbWVq6jpJ91QcRwxE2dZm3RpjjGPyknxbLoaGUElejcLR7d e9Vodmi4ZgGMaaneLb6cub8IO2Hjc5NDZOFusnlLl0aRlcCm3fYMQcYkL5nvy4sax3dE 507XmJTtpP6OfgEtWD9QAbObZQA4HqZCbNBnrdhj+ysBNK7Fg9Ntr1j7vWKifAKGXCuO NOzPr0sIr0t/jETta268sxK/lm8iD73TpMhnrxuYllAWvRrpnBAEE6XakjXXXPpBS00r om5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Qswu1nKd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1si9748418pld.6.2019.06.24.03.14.11; Mon, 24 Jun 2019 03:14:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Qswu1nKd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729710AbfFXKEa (ORCPT + 99 others); Mon, 24 Jun 2019 06:04:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:35954 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729697AbfFXKE0 (ORCPT ); Mon, 24 Jun 2019 06:04:26 -0400 Received: from localhost (f4.8f.5177.ip4.static.sl-reverse.com [119.81.143.244]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 78EC3208E4; Mon, 24 Jun 2019 10:04:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1561370665; bh=3rtSL/c/4C9S8Ce/tdeE9tMTBn05hu6OGsoopWkk47w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qswu1nKdr82fPzSEceN9Z4Ab5TkvbD44/LlEC4QmnmlGP1/1qQPnGf5KH6oCyMxTA p+yhzlDK2488sw0yEGC7MKIeh2DP4+cKLD/DDcagIe4I0FCW9v6sXwKCwMA9wMr1cN qNFqz9M70I6GCmNhK1HP8cmbHwUtwoTUW1ggTBy0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Harald Freudenberger , Ilya Leoshkevich , Martin Schwidefsky , Sasha Levin Subject: [PATCH 4.19 11/90] s390/ap: rework assembler functions to use unions for in/out register variables Date: Mon, 24 Jun 2019 17:56:01 +0800 Message-Id: <20190624092314.738302736@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190624092313.788773607@linuxfoundation.org> References: <20190624092313.788773607@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 159491f3b509bd8101199944dc7b0673b881c734 ] The inline assembler functions ap_aqic() and ap_qact() used two variables declared on the very same register. One variable was for input only, the other for output. Looks like newer versions of the gcc don't like this. Anyway it is a better coding to use one variable (which may have a union data type) on one register for input and output. So this patch introduces unions and uses only one variable now for input and output for GR1 for the PQAP(QACT) and PQAP(QIC) invocation. Signed-off-by: Harald Freudenberger Acked-by: Ilya Leoshkevich Signed-off-by: Martin Schwidefsky Signed-off-by: Sasha Levin --- arch/s390/include/asm/ap.h | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/arch/s390/include/asm/ap.h b/arch/s390/include/asm/ap.h index 8c00fd509c45..1a6a7092d942 100644 --- a/arch/s390/include/asm/ap.h +++ b/arch/s390/include/asm/ap.h @@ -221,16 +221,22 @@ static inline struct ap_queue_status ap_aqic(ap_qid_t qid, void *ind) { register unsigned long reg0 asm ("0") = qid | (3UL << 24); - register struct ap_qirq_ctrl reg1_in asm ("1") = qirqctrl; - register struct ap_queue_status reg1_out asm ("1"); + register union { + unsigned long value; + struct ap_qirq_ctrl qirqctrl; + struct ap_queue_status status; + } reg1 asm ("1"); register void *reg2 asm ("2") = ind; + reg1.qirqctrl = qirqctrl; + asm volatile( ".long 0xb2af0000" /* PQAP(AQIC) */ - : "=d" (reg1_out) - : "d" (reg0), "d" (reg1_in), "d" (reg2) + : "+d" (reg1) + : "d" (reg0), "d" (reg2) : "cc"); - return reg1_out; + + return reg1.status; } /* @@ -264,17 +270,21 @@ static inline struct ap_queue_status ap_qact(ap_qid_t qid, int ifbit, { register unsigned long reg0 asm ("0") = qid | (5UL << 24) | ((ifbit & 0x01) << 22); - register unsigned long reg1_in asm ("1") = apinfo->val; - register struct ap_queue_status reg1_out asm ("1"); + register union { + unsigned long value; + struct ap_queue_status status; + } reg1 asm ("1"); register unsigned long reg2 asm ("2"); + reg1.value = apinfo->val; + asm volatile( ".long 0xb2af0000" /* PQAP(QACT) */ - : "+d" (reg1_in), "=d" (reg1_out), "=d" (reg2) + : "+d" (reg1), "=d" (reg2) : "d" (reg0) : "cc"); apinfo->val = reg2; - return reg1_out; + return reg1.status; } /** -- 2.20.1