Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3315608imm; Tue, 29 May 2018 05:14:50 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpCWm9LAKs4O1+dBxB+qCJatFnQNl83YWk9WgPMibbiKmq4x9AIHvvQLj1x1qeyK8aeH+wd X-Received: by 2002:a63:7208:: with SMTP id n8-v6mr13538368pgc.420.1527596090154; Tue, 29 May 2018 05:14:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527596089; cv=none; d=google.com; s=arc-20160816; b=H1Mq/DUHvh/4+bhMNmLtPaYZBgVZdm1hG0D9yabZqlMzWI3RuCXt26orKVOz3hKC+J I2f6eD0vkdG71YTpd+m7qAP6/y5DYyVOLFOsmR6AukAJrSfdivQzdnvCK8rWU8v6dekA qbAHouJ69//NYW24LZpL0iViODVGQeBgkRPR88Pvtfulh40eVsFPAAL8HydTVkkTmoN/ YAFHyyTXRR3MDF1OL6FaGqhFDPE9iS7W7CfluRAf7Ri/kZDyi6YF0EcezZwr5Q3JHNRi ETHM/mbh4OwrnIyN7wgxAtiaDyrRN27RJavnmO6EmSS8mghyMXeiNN1PeEiWVp9rC2PQ UWUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=OifPzlJxcLSnvC1op2mJjXzvIBrVbFp58ByopLGbjao=; b=AqqYRosnqb/adqthz7MgrJBlLpv7Njb54jsd/u5HvAsP3YiwvZvfU7IyIa9dLJCPMF ICsZNmJtnvavbJPzNy55gcDh2rD+knXQFbpfbCsKfhRn+oPGfdFHw5dSJ8YtlH4iXuy5 tEqMg3TI86CdfsHNbe49UTyl27IP1CGaDr86WYjiOSyn3ejlNc8f0T2IqtQld95WzFno w/g8z2GKvRFqi/0xMFurrz4wIAOI7IMLD5878ZZzljdS+gnrSOz/MAd48hMIIa3EzT88 P2vpA3AcwFcFDAtULDr60ZG0HmLYDVdp5hrDwGMUFLjXYht7QLb62DEiXfLTWTI1lEdF csUQ== ARC-Authentication-Results: i=1; mx.google.com; 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 z80-v6si32743745pfi.7.2018.05.29.05.14.35; Tue, 29 May 2018 05:14:49 -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; 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 S933860AbeE2MMI (ORCPT + 99 others); Tue, 29 May 2018 08:12:08 -0400 Received: from foss.arm.com ([217.140.101.70]:38576 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933793AbeE2ML7 (ORCPT ); Tue, 29 May 2018 08:11:59 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3AB7C165D; Tue, 29 May 2018 05:11:59 -0700 (PDT) Received: from approximate.cambridge.arm.com (approximate.cambridge.arm.com [10.1.206.75]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D7D0D3F53D; Tue, 29 May 2018 05:11:56 -0700 (PDT) From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu Cc: Will Deacon , Catalin Marinas , Thomas Gleixner , Andy Lutomirski , Kees Cook , Greg Kroah-Hartman , Christoffer Dall , Randy Dunlap , Dominik Brodowski , Julien Grall , Mark Rutland Subject: [PATCH v2 11/17] arm64: KVM: Add HYP per-cpu accessors Date: Tue, 29 May 2018 13:11:15 +0100 Message-Id: <20180529121121.24927-12-marc.zyngier@arm.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180529121121.24927-1-marc.zyngier@arm.com> References: <20180529121121.24927-1-marc.zyngier@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As we're going to require to access per-cpu variables at EL2, let's craft the minimum set of accessors required to implement reading a per-cpu variable, relying on tpidr_el2 to contain the per-cpu offset. Reviewed-by: Christoffer Dall Reviewed-by: Mark Rutland Signed-off-by: Marc Zyngier --- arch/arm64/include/asm/kvm_asm.h | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h index f6648a3e4152..fefd8cf42c35 100644 --- a/arch/arm64/include/asm/kvm_asm.h +++ b/arch/arm64/include/asm/kvm_asm.h @@ -71,14 +71,37 @@ extern u32 __kvm_get_mdcr_el2(void); extern u32 __init_stage2_translation(void); +/* Home-grown __this_cpu_{ptr,read} variants that always work at HYP */ +#define __hyp_this_cpu_ptr(sym) \ + ({ \ + void *__ptr = hyp_symbol_addr(sym); \ + __ptr += read_sysreg(tpidr_el2); \ + (typeof(&sym))__ptr; \ + }) + +#define __hyp_this_cpu_read(sym) \ + ({ \ + *__hyp_this_cpu_ptr(sym); \ + }) + #else /* __ASSEMBLY__ */ -.macro get_host_ctxt reg, tmp - adr_l \reg, kvm_host_cpu_state +.macro hyp_adr_this_cpu reg, sym, tmp + adr_l \reg, \sym mrs \tmp, tpidr_el2 add \reg, \reg, \tmp .endm +.macro hyp_ldr_this_cpu reg, sym, tmp + adr_l \reg, \sym + mrs \tmp, tpidr_el2 + ldr \reg, [\reg, \tmp] +.endm + +.macro get_host_ctxt reg, tmp + hyp_adr_this_cpu \reg, kvm_host_cpu_state, \tmp +.endm + .macro get_vcpu_ptr vcpu, ctxt get_host_ctxt \ctxt, \vcpu ldr \vcpu, [\ctxt, #HOST_CONTEXT_VCPU] -- 2.14.2