Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp376547ybl; Thu, 15 Aug 2019 19:34:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqwveGvW3mvvFXgAXi7dORCxuDctnZjujkbZfMpy76g9F96/dxvq4SnW4seOtMYA0L9VNtjX X-Received: by 2002:a17:902:b212:: with SMTP id t18mr6990873plr.246.1565922878493; Thu, 15 Aug 2019 19:34:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565922878; cv=none; d=google.com; s=arc-20160816; b=GWaSlupjyfmM2Hs46kHfCFn4ebAdu7GMPXHRp70GjFDp8KdaLxAp4eFcQn3pmsAq7/ R2xz1Y0WoP67MlZSaTmXDgfDdt+g10yGfaopdAbXlj08Tr3vQY1mvBHgWwmAdsjKbZE1 0eY6NZa/v124UBC6Iozfrmv424t/qH0tqsMmZJngCgJCjIyvDdIT5RsqqBzEszWdNlT9 vbqHDGwNg64VuBvc7Mv96mu5gkfg7djWmfij61VbZXWtYOuDR8wlBDDdzJxKp3COAu7N aTaIAUC7YLpL8FC1LYoapg9aEiXyyMIugb9/LkUNe/YK45rQpvkCBmxtaVaf2a1Za+lX vsgQ== 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; bh=vgGjVriwYp/LHNa8WDMBedfFiZj5hn/ZfSIv6qXBTZ8=; b=ma8z3HiETny1WHHCQL7cXWt+JwTnzdQF0ASoExwA6q3ev1y2Bd6tPFc6vB8wHzIoUb GZpwBgP2PT0ZhzSU3PLBXlnXSIfXYkn3Of37LHaMtYi6It6rr6QOBrndlguJIKoFREJp 92HfITyaDn69rwHXxDYDyKhq9eiPwMcndEaKvTDq4wP0JvRuJRAGsy1+oyXM2whMui9W vWgObx8c2PQKRt5YNy7/JptKkFkapBRO5qpo5qHTPjtdkA/se306Tj0fKRuZbvC26LOG YhuKch74Il6yIMxL+jgQ9/G2hqIaH18EQyZphKWrzxzqEhtQcYLTCUyzqSKL9vErcP62 Jieg== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q26si2910256pgt.233.2019.08.15.19.34.22; Thu, 15 Aug 2019 19:34:38 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726582AbfHPCdH (ORCPT + 99 others); Thu, 15 Aug 2019 22:33:07 -0400 Received: from mga09.intel.com ([134.134.136.24]:24671 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726523AbfHPCdD (ORCPT ); Thu, 15 Aug 2019 22:33:03 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Aug 2019 19:33:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,391,1559545200"; d="scan'208";a="194894481" Received: from genxtest-ykzhao.sh.intel.com ([10.239.143.71]) by fmsmga001.fm.intel.com with ESMTP; 15 Aug 2019 19:33:02 -0700 From: Zhao Yakui To: x86@kernel.org, linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org Cc: Zhao Yakui , Jason Chen CJ Subject: [RFC PATCH 03/15] x86/acrn: Add hypercall for ACRN guest Date: Fri, 16 Aug 2019 10:25:44 +0800 Message-Id: <1565922356-4488-4-git-send-email-yakui.zhao@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1565922356-4488-1-git-send-email-yakui.zhao@intel.com> References: <1565922356-4488-1-git-send-email-yakui.zhao@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When ACRN hypervisor is detected, the hypercall is needed so that the ACRN guest can query/config some settings. For example: it can be used to query the resources in hypervisor and manage the CPU/memory/device/ interrupt for guest operating system. On x86 it is implemented with the VMCALL instruction. Co-developed-by: Jason Chen CJ Signed-off-by: Jason Chen CJ Signed-off-by: Zhao Yakui --- arch/x86/include/asm/acrn.h | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/arch/x86/include/asm/acrn.h b/arch/x86/include/asm/acrn.h index 857e6244..ab97c3d 100644 --- a/arch/x86/include/asm/acrn.h +++ b/arch/x86/include/asm/acrn.h @@ -11,4 +11,58 @@ extern void acrn_hv_vector_handler(struct pt_regs *regs); extern void acrn_setup_intr_irq(void (*handler)(void)); extern void acrn_remove_intr_irq(void); + +/* + * Hypercalls for ACRN guest + * + * Hypercall number is passed in R8 register. + * Up to 2 arguments are passed in RDI, RSI. + * Return value will be placed in RAX. + */ +static inline long acrn_hypercall0(unsigned long hcall_id) +{ + long result; + + /* the hypercall is implemented with the VMCALL instruction. + * volatile qualifier is added to avoid that it is dropped + * because of compiler optimization. + */ + asm volatile("movq %[hcall_id], %%r8\n\t" + "vmcall\n\t" + : "=a" (result) + : [hcall_id] "g" (hcall_id) + : "r8"); + + return result; +} + +static inline long acrn_hypercall1(unsigned long hcall_id, + unsigned long param1) +{ + long result; + + asm volatile("movq %[hcall_id], %%r8\n\t" + "vmcall\n\t" + : "=a" (result) + : [hcall_id] "g" (hcall_id), "D" (param1) + : "r8"); + + return result; +} + +static inline long acrn_hypercall2(unsigned long hcall_id, + unsigned long param1, + unsigned long param2) +{ + long result; + + asm volatile("movq %[hcall_id], %%r8\n\t" + "vmcall\n\t" + : "=a" (result) + : [hcall_id] "g" (hcall_id), "D" (param1), "S" (param2) + : "r8"); + + return result; +} + #endif /* _ASM_X86_ACRN_H */ -- 2.7.4