From patchwork Tue Jan 17 10:29:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 44631 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1678495wrn; Tue, 17 Jan 2023 02:33:01 -0800 (PST) X-Google-Smtp-Source: AMrXdXu+fWdu+h5KMlAdVmJkEUeJIpNLRTg3zUq3AcuLdPSnf/uoC9tXOqjhO5JLjDKHhLBLEnNM X-Received: by 2002:a05:6402:2486:b0:49e:30ac:97f2 with SMTP id q6-20020a056402248600b0049e30ac97f2mr2134527eda.8.1673951581555; Tue, 17 Jan 2023 02:33:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673951581; cv=none; d=google.com; s=arc-20160816; b=GRJeZ9IoZbenLBh2gnR+WEskh9+AlRqU8wBslRLYYSQLmKvn5766Mht/UKyVJirV+S CP3cbKJgY+ouBFUnGvaxei/qHM3DHfeMpK1Bjqhy91rwM81lKotCZzJ80BBua3rzTSFB B+/uVWAphL6aqwNlsI2mZyj2HojQKffQyb5+daWvfr77EybnwzfM/sKRKy5rdfAI4kG/ rbEfY21ZYl6KnADCXtbJVrQlzudXF1Mz438qQtpWRjktQGMuNN1+LWAP9/YiXmpXBWUS DH6LlCzP9YBa6mQ/Uow9PeVe8UYiOnpTe+zjjtCuWfZv4+4QubzWlZ1SkESv7LRfdQXY IvsQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=tOVpxHZD0ZxVt/Val7yzJDOKpsPkSooq27SOBhqL+Kk=; b=RD9eYHbOqAWyNGc4wIQiIrqMMF2gmMjvuyRNc3813/wctn0juE1WjD98CuCEzfIVAB stnLyGLk4ilR1LTCri41+7Q6ATVoSOpSjBbZRhJ/1jlrfNgeObsXbgiSCcF/DtCgyDpI oMi+nrqE1n8XrqLzk/qTxeLCyTr13ZBUVG7gSQ0+cpNA0bZ6RlsKnC6RE9ezt8mmAB9E hMo6FMZ16LMWMprjqI2stywZ+3uIHLXZnp7A4QpeAjojqglpDaS68LJii4qTeVp2BYM1 sf4gZ04ZlAXduWylCVhWVVMBKBnz1RakIWB2y925/bUmffS18Cp9dMWFtO5PAMv4bALM IMAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=g1p3ubnY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h3-20020a0564020e0300b0044615ee1b6fsi32963286edh.218.2023.01.17.02.32.37; Tue, 17 Jan 2023 02:33:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=g1p3ubnY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236463AbjAQKbz (ORCPT + 99 others); Tue, 17 Jan 2023 05:31:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236325AbjAQKar (ORCPT ); Tue, 17 Jan 2023 05:30:47 -0500 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6524430E86 for ; Tue, 17 Jan 2023 02:29:38 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id r2so30072657wrv.7 for ; Tue, 17 Jan 2023 02:29:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tOVpxHZD0ZxVt/Val7yzJDOKpsPkSooq27SOBhqL+Kk=; b=g1p3ubnYwRTHrjE4Z2DfA/MH2EnDrh/8t2YbdFdGQ2RXS4HCOPoDRzLc6RbgsSk7EZ wiVV99cgkBmBSDrFgSxkSKw+h7LrY5waW8HRALrEO4NhQVKA4EY/LHdIOm6VAl6XxM5j 6kAgMinmi+lStYZQSun536mzqwEGcQzCWTyvlYeAm+8vuw+zX3dcBUapeO4+TO+IeXbQ v8uLeKNqsgFGn+WhKtX21orc6zZELYXdRHZriJFDI9/HVEBnxQ1M4eKmKJvopJHyg11g UcS8wqDaZUwVO9tvmMZXDTCTYQxa5DvYEMivbSqOc2MFSL1zycMGKA+dj4Yo1KeJvF+6 HecA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tOVpxHZD0ZxVt/Val7yzJDOKpsPkSooq27SOBhqL+Kk=; b=sCyvSxJsnqtYaphYZbD7pR7TBMrg99yEPfTXj6h2J9gyLLL8p+Is+jfvqFjM9DHPCI Fyev8nRvf+hvE8HRcnw6LqZe9OgAIoLVErXVcI32Fvf1BY6Xrq5I8tWKYnv/WxP2KbNx 3Dkv/zciNgONuAK1aBsCq0FeB4ak61XLgjTvvsD6U+S0H6fYeI5o/bKLhMV9R/runh4w s4bwUzJ+Ma242/rgC49+3h5p4h/V/P+YPdo7Ji5WQVn2D53bOnFxsbX0pWbwwXx1eC0v 15qfoDP13p1HIh09WHzV/nsWJQNtNgogNBQTSCSpw1T+nQBZNjSdsvtXh5lYaaQG48uq FEeA== X-Gm-Message-State: AFqh2kr2iPEMRi9RJ4lcKzGQ0AELM91OKScY/YvPEAKTnlirSNnkyyBr z0cr9TPGS1TB0wU589Oi/Jk2EDCh/HCiRMd7r+U= X-Received: by 2002:adf:fd83:0:b0:2bd:dbd8:d41e with SMTP id d3-20020adffd83000000b002bddbd8d41emr2309747wrr.57.1673951376751; Tue, 17 Jan 2023 02:29:36 -0800 (PST) Received: from usaari01.cust.communityfibre.co.uk ([2a02:6b6a:b566:0:17d8:e5ec:f870:7b46]) by smtp.gmail.com with ESMTPSA id j15-20020a5d452f000000b0028f9132e9ddsm28389844wra.39.2023.01.17.02.29.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:36 -0800 (PST) From: Usama Arif To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org, linux@armlinux.org.uk, yezengruan@huawei.com, catalin.marinas@arm.com, will@kernel.org, maz@kernel.org, steven.price@arm.com, mark.rutland@arm.com, bagasdotme@gmail.com, pbonzini@redhat.com Cc: fam.zheng@bytedance.com, liangma@liangbit.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v3 1/6] KVM: arm64: Document PV-lock interface Date: Tue, 17 Jan 2023 10:29:25 +0000 Message-Id: <20230117102930.1053337-2-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230117102930.1053337-1-usama.arif@bytedance.com> References: <20230117102930.1053337-1-usama.arif@bytedance.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755265453711461170?= X-GMAIL-MSGID: =?utf-8?q?1755265453711461170?= Introduce a paravirtualization interface for KVM/arm64 to obtain whether the VCPU is currently running or not. The PV lock structure of the guest is allocated by user space. A hypercall interface is provided for the guest to interrogate the location of the shared memory structures. Signed-off-by: Zengruan Ye Signed-off-by: Usama Arif Reviewed-by: Bagas Sanjaya --- Documentation/virt/kvm/arm/index.rst | 1 + Documentation/virt/kvm/arm/pvlock.rst | 54 +++++++++++++++++++++++++ Documentation/virt/kvm/devices/vcpu.rst | 25 ++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 Documentation/virt/kvm/arm/pvlock.rst diff --git a/Documentation/virt/kvm/arm/index.rst b/Documentation/virt/kvm/arm/index.rst index e84848432158..b8499dc00a6a 100644 --- a/Documentation/virt/kvm/arm/index.rst +++ b/Documentation/virt/kvm/arm/index.rst @@ -10,4 +10,5 @@ ARM hyp-abi hypercalls pvtime + pvlock ptp_kvm diff --git a/Documentation/virt/kvm/arm/pvlock.rst b/Documentation/virt/kvm/arm/pvlock.rst new file mode 100644 index 000000000000..1b9ff7d8a385 --- /dev/null +++ b/Documentation/virt/kvm/arm/pvlock.rst @@ -0,0 +1,54 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Paravirtualized lock support for arm64 +====================================== + +KVM/arm64 provides a hypervisor service call for paravirtualized guests to +determine whether a VCPU is currently running or not. + +A new SMCCC compatible hypercall is defined: + +* ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID: 0xC6000002 + +ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID + + ============= ======== ========================================== + Function ID: (uint32) 0xC6000002 + Return value: (int64) IPA of the pv lock data structure for this + VCPU. On failure: + NOT_SUPPORTED (-1) + ============= ======== ========================================== + +The IPA returned by PV_LOCK_PREEMPTED should be mapped by the guest as normal +memory with inner and outer write back caching attributes, in the inner +shareable domain. + +PV_LOCK_PREEMPTED returns the structure for the calling VCPU. + +PV lock state +------------- + +The structure pointed to by the PV_LOCK_PREEMPTED hypercall is as follows: + ++-----------+-------------+-------------+---------------------------------+ +| Field | Byte Length | Byte Offset | Description | ++===========+=============+=============+=================================+ +| preempted | 8 | 0 | Used to indicate if the VCPU | +| | | | which owns this struct is | +| | | | running or not. | +| | | | A non-zero value mean the VCPU | +| | | | has been scheduled out. A zero | +| | | | value means the VCPU has been | +| | | | scheduled in. | ++-----------+-------------+-------------+---------------------------------+ + +The preempted field will be updated to 0 by the hypervisor prior to scheduling +a VCPU. When the VCPU is scheduled out, the preempted field will be updated +to 1 by the hypervisor. + +The structure will be present within a reserved region of the normal memory +given to the guest. The guest should not attempt to write into this memory. +There is a structure per VCPU of the guest. + +For the user space interface see +:ref:`Documentation/virt/kvm/devices/vcpu.rst `. \ No newline at end of file diff --git a/Documentation/virt/kvm/devices/vcpu.rst b/Documentation/virt/kvm/devices/vcpu.rst index 31f14ec4a65b..0f999919ba92 100644 --- a/Documentation/virt/kvm/devices/vcpu.rst +++ b/Documentation/virt/kvm/devices/vcpu.rst @@ -265,3 +265,28 @@ From the destination VMM process: 7. Write the KVM_VCPU_TSC_OFFSET attribute for every vCPU with the respective value derived in the previous step. + +.. _kvm_arm_vcpu_pvlock_ctrl: + +5. GROUP: KVM_ARM_VCPU_PVLOCK_CTRL +================================== + +:Architectures: ARM64 + +5.1 ATTRIBUTE: KVM_ARM_VCPU_PVLOCK_IPA +-------------------------------------- + +:Parameters: 64-bit base address + +Returns: + + ======= ====================================== + -ENXIO PV lock not implemented + -EEXIST Base address already set for this VCPU + -EINVAL Base address not 64 byte aligned + ======= ====================================== + +Specifies the base address of the pv lock structure for this VCPU. The +base address must be 64 byte aligned and exist within a valid guest memory +region. See Documentation/virt/kvm/arm/pvlock.rst for more information +including the layout of the pv lock structure. From patchwork Tue Jan 17 10:29:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 44632 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1678791wrn; Tue, 17 Jan 2023 02:33:48 -0800 (PST) X-Google-Smtp-Source: AMrXdXtM/Q7fYQ328BcnXZQm6h9SaA9WuA5kK/fCuCrvrZaMZS90CulkOZsq7ylhlX2I/PEHJP6K X-Received: by 2002:a17:907:c307:b0:816:ef2a:631a with SMTP id tl7-20020a170907c30700b00816ef2a631amr2664970ejc.31.1673951628235; Tue, 17 Jan 2023 02:33:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673951628; cv=none; d=google.com; s=arc-20160816; b=ObIgDAn5t25YmSKEzJz828HEG4ttHE+fTCCXlPKyr0Uc2ZnIYG/rDjzBvA9pKFaWa1 ser1t5oo0yNPTFDXemn7uLkXzkysTxCGYBB1rS/qeVNjSXQXmWPtuhkRi30FygfAqTmz DnPZPwiw7w26lpRwFCYAclnpg40FYizJQ3snc1KYdB/+YZv6k8N8QW53C3sbKyAsdpj7 r5z6SRun6FEoifwhWDFSIvDrTw6kVn1FmZ3ChTNkh8TTBSf+QuYEryLvpcQJ2Xi310nR sEluBqH7H7js4lFZt5SWbGVGDy+DlDjSyutuDHe4VZafhaaIzt49uZMgbBnQ3MLq6MgQ Wa7g== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Vd/VlYlJ0ANHnVmLATf8jl8jimk8T2yJWVQPK58ktjs=; b=Pi89UnldKKb0KF+AxNXvoPdt5lRYbmYjUX28WOnUzihJ26AHU4PnL0wx/wBMKqAHmH /hn2NUuVVrEC7y+pdiB8xBGMZ8dqehsBT4fcXwc0WIkBf430p54U9vLLvvFARPUC96H1 hExyWE/nOVn44zwQ0QWrOCFbunskUH1B3lw/M5QdQPa8txlA+CpmwcysyBUFfxAYgo5I 2oezsXhPG7rxuYN+nSKoVhIMf5QsXP1945MFbNdwDEPgIMnWwcAsFXYR0G2pBjcW7vMg bqEv4lj3DKTU1T0eQIEBAh+1OhIAibQ/Bm5oEZgUe3KIi2euCW1OONKE1xxP7JZqG8mF RC+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=VaHmbhhs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mp14-20020a1709071b0e00b0084d456334c1si28960152ejc.748.2023.01.17.02.33.24; Tue, 17 Jan 2023 02:33:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=VaHmbhhs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236704AbjAQKcN (ORCPT + 99 others); Tue, 17 Jan 2023 05:32:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235764AbjAQKas (ORCPT ); Tue, 17 Jan 2023 05:30:48 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4102930E94 for ; Tue, 17 Jan 2023 02:29:39 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id t5so25663991wrq.1 for ; Tue, 17 Jan 2023 02:29:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vd/VlYlJ0ANHnVmLATf8jl8jimk8T2yJWVQPK58ktjs=; b=VaHmbhhsKTT1HPH18b6gpun5ikn8SmXDGbVKA9B+1FSMjhitFawlC9/Qhq96oxBgAN GWUcRSBxhKo+It16G/LbgXupJhbC0v1DGxGAFG8/zL+cLNt8vFeBjgqNm+ENqbxSfdaL RLEsGGA78smbbsE2IEP8MxR2MHtaMqlRS3M/xFdLmMNJfPbpX6rbvoV50bxmMjdW2mFB Ie5K79mo0mgwGtyrPDgQKNFCZxcVdBreOSdCxrW42q7boVfyr1Ju0F9KeUUXi2Nz2QHT nXQeIh0be2tDH8+kOOycix8Gerhf7ViYm0ksGk07EvdM1uTq8hshtSTYeoYd45srVdda R5qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vd/VlYlJ0ANHnVmLATf8jl8jimk8T2yJWVQPK58ktjs=; b=wW3YaIPUnX022qT0/NN3hwk2BuegX6HcWsGNqeQ5M/xwIh9rcrSZ6pjpmRZHu2c+cw +KzdvuAqYp+YG5kOoIcBR9PpVdCEsJcDme1cA2KO6Sj0iOX5MVveUZlKW7naMi5FV+4o jP39CX6+lwBlNUyUeA6IutvVhfWiBQdo1UfBlFoOqPO1KOqtR7Oieh1TTQdJjsD6cgUC kIEEkpKU1Gbt4BeiSX529/E15l+9WkHn5chRZfGjicejKC74Bqw/yk2Sr23chsPILjnA 9N194TGfZAP9P0JANc8xuvnxpCglK6Qn3lI8XfkZ3ec+cARpWESCKfagyVXJ7+X/xbge xdiQ== X-Gm-Message-State: AFqh2krRbAyodSGmw4Za70kJ5uxR0vz2mzfLxjPJqycPtpzndBT/rZzN xzcpy8a8sIPKDpVNAYG4QL8rggO3grxoHX3I0/Q= X-Received: by 2002:adf:fc83:0:b0:2bd:dbf7:1db5 with SMTP id g3-20020adffc83000000b002bddbf71db5mr2354972wrr.31.1673951377658; Tue, 17 Jan 2023 02:29:37 -0800 (PST) Received: from usaari01.cust.communityfibre.co.uk ([2a02:6b6a:b566:0:17d8:e5ec:f870:7b46]) by smtp.gmail.com with ESMTPSA id j15-20020a5d452f000000b0028f9132e9ddsm28389844wra.39.2023.01.17.02.29.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:37 -0800 (PST) From: Usama Arif To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org, linux@armlinux.org.uk, yezengruan@huawei.com, catalin.marinas@arm.com, will@kernel.org, maz@kernel.org, steven.price@arm.com, mark.rutland@arm.com, bagasdotme@gmail.com, pbonzini@redhat.com Cc: fam.zheng@bytedance.com, liangma@liangbit.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v3 2/6] KVM: arm64: Add SMCCC paravirtualised lock calls Date: Tue, 17 Jan 2023 10:29:26 +0000 Message-Id: <20230117102930.1053337-3-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230117102930.1053337-1-usama.arif@bytedance.com> References: <20230117102930.1053337-1-usama.arif@bytedance.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755265502279097185?= X-GMAIL-MSGID: =?utf-8?q?1755265502279097185?= Add a new SMCCC compatible hypercalls for PV lock features: ARM_SMCCC_KVM_FUNC_PV_LOCK: 0xC6000002 Also add the header file which defines the ABI for the paravirtualized lock features we're about to add. Signed-off-by: Zengruan Ye Signed-off-by: Usama Arif --- arch/arm64/include/asm/pvlock-abi.h | 15 +++++++++++++++ include/linux/arm-smccc.h | 8 ++++++++ tools/include/linux/arm-smccc.h | 8 ++++++++ 3 files changed, 31 insertions(+) create mode 100644 arch/arm64/include/asm/pvlock-abi.h diff --git a/arch/arm64/include/asm/pvlock-abi.h b/arch/arm64/include/asm/pvlock-abi.h new file mode 100644 index 000000000000..e12c8ec05178 --- /dev/null +++ b/arch/arm64/include/asm/pvlock-abi.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright(c) 2019 Huawei Technologies Co., Ltd + * Author: Zengruan Ye + * Usama Arif + */ + +#ifndef __ASM_PVLOCK_ABI_H +#define __ASM_PVLOCK_ABI_H + +struct pvlock_vcpu_state { + __le64 preempted; +} __aligned(64); + +#endif diff --git a/include/linux/arm-smccc.h b/include/linux/arm-smccc.h index 220c8c60e021..104c10035b10 100644 --- a/include/linux/arm-smccc.h +++ b/include/linux/arm-smccc.h @@ -112,6 +112,7 @@ /* KVM "vendor specific" services */ #define ARM_SMCCC_KVM_FUNC_FEATURES 0 #define ARM_SMCCC_KVM_FUNC_PTP 1 +#define ARM_SMCCC_KVM_FUNC_PV_LOCK 2 #define ARM_SMCCC_KVM_FUNC_FEATURES_2 127 #define ARM_SMCCC_KVM_NUM_FUNCS 128 @@ -151,6 +152,13 @@ ARM_SMCCC_OWNER_STANDARD_HYP, \ 0x21) +/* Paravirtualised lock calls */ +#define ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + ARM_SMCCC_SMC_64, \ + ARM_SMCCC_OWNER_VENDOR_HYP, \ + ARM_SMCCC_KVM_FUNC_PV_LOCK) + /* TRNG entropy source calls (defined by ARM DEN0098) */ #define ARM_SMCCC_TRNG_VERSION \ ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ diff --git a/tools/include/linux/arm-smccc.h b/tools/include/linux/arm-smccc.h index 63ce9bebccd3..c21e539c0228 100644 --- a/tools/include/linux/arm-smccc.h +++ b/tools/include/linux/arm-smccc.h @@ -111,6 +111,7 @@ /* KVM "vendor specific" services */ #define ARM_SMCCC_KVM_FUNC_FEATURES 0 #define ARM_SMCCC_KVM_FUNC_PTP 1 +#define ARM_SMCCC_KVM_FUNC_PV_LOCK 2 #define ARM_SMCCC_KVM_FUNC_FEATURES_2 127 #define ARM_SMCCC_KVM_NUM_FUNCS 128 @@ -150,6 +151,13 @@ ARM_SMCCC_OWNER_STANDARD_HYP, \ 0x21) +/* Paravirtualised lock calls */ +#define ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + ARM_SMCCC_SMC_64, \ + ARM_SMCCC_OWNER_VENDOR_HYP, \ + ARM_SMCCC_KVM_FUNC_PV_LOCK) + /* TRNG entropy source calls (defined by ARM DEN0098) */ #define ARM_SMCCC_TRNG_VERSION \ ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ From patchwork Tue Jan 17 10:29:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 44636 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1679315wrn; Tue, 17 Jan 2023 02:35:17 -0800 (PST) X-Google-Smtp-Source: AMrXdXtjmtrF2+/Oyhl9YdH9EFtjzFBARQ/yvdzwxmT5rKyPHtnLxrAVRpKzW4f/9GIKPdVOLiw+ X-Received: by 2002:a17:906:4d16:b0:86d:d06f:b403 with SMTP id r22-20020a1709064d1600b0086dd06fb403mr2372286eju.67.1673951717056; Tue, 17 Jan 2023 02:35:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673951717; cv=none; d=google.com; s=arc-20160816; b=waPYG987tIzDUxxyr7gN8hqcCou9z38ZJjRDLnE5BTdVjlVMamE5fHQ6eSQZNYOMFN VMrXtnkUTH4FtREIdNy3px9Ht9GS9wYsCMBDFaIqG89+COXY/8MkSNM5VInpRwiqsb2c d9i9fxcEmRvg6wMCXzN1hR2demxQRu4qFLD76HVa8Lbiycha5iL45Fg1TMLSeDNUYrl7 hbvJvBEB6EYSlZeN7ZmUJzmO93jCOLQcrOLdZYFq1TOKgnua5u/uXKX04efgRgOc0hTW XETb1U/Vk3hWZwFxRzA8YDb2TDHFM0D7ykmxMTsda3pKL6nTJQXcF3EAos3TKIy+sPT9 3YKQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=T7dOs8PraPWE1t9xSzXacBcTrkVRsrRL2d16NVql0EI=; b=vEa/TKtadrBQB7Wh2nINmIUX8LT8d1RTLguiKfXcPCrpz00IVFYbuIymMulILm+7A3 N6yUFU0rwN/Vrr82UK2/JKr/0tEYQwb5mJ0HAOHoyUTzEbbNT+Q8eeMSoXqfq1XTy3FO +CPx2i1VyBqJ1uIPKazvnyDRyo7q5en3tpyLVAwOEJvY1CiAQm/wNS6oL8z6gFqdZBe7 cbEUsDTRPsgd4zRTH64U8M00NnnfTEMygz2q41RHAIiFMrQpItSKcoCrfV2PKzKjGseJ 6Y1CeZQo2Mg3D94TvNT2oAjNcYGLvOMpBX3iaKgCCTHCNXot1US7DyQX9XvoksIpwd4m XrwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=w6CUqTko; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ht14-20020a170907608e00b0078d484e0e7esi1580852ejc.488.2023.01.17.02.34.49; Tue, 17 Jan 2023 02:35:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=w6CUqTko; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236779AbjAQKc3 (ORCPT + 99 others); Tue, 17 Jan 2023 05:32:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235955AbjAQKat (ORCPT ); Tue, 17 Jan 2023 05:30:49 -0500 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F2DE730EA4 for ; Tue, 17 Jan 2023 02:29:39 -0800 (PST) Received: by mail-wr1-x42e.google.com with SMTP id q10so10754072wrs.2 for ; Tue, 17 Jan 2023 02:29:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=T7dOs8PraPWE1t9xSzXacBcTrkVRsrRL2d16NVql0EI=; b=w6CUqTkokeNFu7unZ6FuEN33oE3wprxz6Saz53JISurMg7WRgabw68JcBJ7/mMt3B3 3sh9+tXC+J0mW+q/s/2i+F8fIecdT6Y/y1YkGOEM0h0q+SareFYhQqZazZ0J2Zasim+k sEJTe3dTH/iFj2414Nh4rr/QAEVdULtTOTZpdDTGmuC5T5UpouDjLSNnMene7oA4Wc7j s5oIYJaRJrl/LdcdXjT2xv6+HtZY4oD4EpGLZxDAEAl05QWNfRXfVJ7NFE/w8KwR1uX3 Wv/rlhCxOW/uNOFRc+wcG5ciTBXbcFxCcXDocL+5AN2Uu5fn4ZuD2U1VtZg7U/XMtjCM x9HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=T7dOs8PraPWE1t9xSzXacBcTrkVRsrRL2d16NVql0EI=; b=JBxj4l17vmlqDaUU5Wgqsw2zfJWoCvu6IusX2nGdez5VFD1EYnVyVSBnxClNhZpkHz ayMDZAS+SLpTCSSKRQJmil+jihdiuPY7hnhb+gnV+0E6z5h+NEcSVCUgsKJMWjsxQxmE n862cIAiPwVCR5xQxvDxQtJhKeFIjYhPjCUzhYOCipTXnDfINU/0bUGczZtc/LGj1IKz +EY60nTIshRGvM3+LLfnwvAsWUWmesTcbsEiRR9xBd0ndj2BwPd0Xvc+TUJIpu5YDJ7U Xzyzl3lpfc6yu6AmqXFmjfg4SvC5qTtJ/zvIMcIDy2ZkpJokkG44sMfc8FN2nPbWzo/v KorA== X-Gm-Message-State: AFqh2koWHzJpx7V5T8L5pqypP2epwb/mG09eZ/zVVq2i9DgP14RhNiID cPkXvFWB26kM7YlIb1bjZ84lgBq5gv/22URU+0o= X-Received: by 2002:a5d:5451:0:b0:2ba:4ee8:d708 with SMTP id w17-20020a5d5451000000b002ba4ee8d708mr2449695wrv.32.1673951378355; Tue, 17 Jan 2023 02:29:38 -0800 (PST) Received: from usaari01.cust.communityfibre.co.uk ([2a02:6b6a:b566:0:17d8:e5ec:f870:7b46]) by smtp.gmail.com with ESMTPSA id j15-20020a5d452f000000b0028f9132e9ddsm28389844wra.39.2023.01.17.02.29.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:38 -0800 (PST) From: Usama Arif To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org, linux@armlinux.org.uk, yezengruan@huawei.com, catalin.marinas@arm.com, will@kernel.org, maz@kernel.org, steven.price@arm.com, mark.rutland@arm.com, bagasdotme@gmail.com, pbonzini@redhat.com Cc: fam.zheng@bytedance.com, liangma@liangbit.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v3 3/6] KVM: arm64: Support pvlock preempted via shared structure Date: Tue, 17 Jan 2023 10:29:27 +0000 Message-Id: <20230117102930.1053337-4-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230117102930.1053337-1-usama.arif@bytedance.com> References: <20230117102930.1053337-1-usama.arif@bytedance.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755265595678086156?= X-GMAIL-MSGID: =?utf-8?q?1755265595678086156?= Implement the service call for configuring a shared structure between a VCPU and the hypervisor in which the hypervisor can tell whether the VCPU is running or not. The preempted field is zero if the VCPU is not preempted. Any other value means the VCPU has been preempted. Signed-off-by: Zengruan Ye Signed-off-by: Usama Arif --- Documentation/virt/kvm/arm/hypercalls.rst | 3 ++ arch/arm64/include/asm/kvm_host.h | 18 ++++++++++ arch/arm64/include/uapi/asm/kvm.h | 1 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/arm.c | 8 +++++ arch/arm64/kvm/hypercalls.c | 8 +++++ arch/arm64/kvm/pvlock.c | 43 +++++++++++++++++++++++ tools/arch/arm64/include/uapi/asm/kvm.h | 1 + 8 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 arch/arm64/kvm/pvlock.c diff --git a/Documentation/virt/kvm/arm/hypercalls.rst b/Documentation/virt/kvm/arm/hypercalls.rst index 3e23084644ba..872a16226ace 100644 --- a/Documentation/virt/kvm/arm/hypercalls.rst +++ b/Documentation/virt/kvm/arm/hypercalls.rst @@ -127,6 +127,9 @@ The pseudo-firmware bitmap register are as follows: Bit-1: KVM_REG_ARM_VENDOR_HYP_BIT_PTP: The bit represents the Precision Time Protocol KVM service. + Bit-2: KVM_REG_ARM_VENDOR_HYP_BIT_PV_LOCK: + The bit represents the Paravirtualized lock service. + Errors: ======= ============================================================= diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 35a159d131b5..1d1acc5be8d7 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -501,6 +501,11 @@ struct kvm_vcpu_arch { u64 last_steal; gpa_t base; } steal; + + /* Guest PV lock state */ + struct { + gpa_t base; + } pv_lock; }; /* @@ -924,6 +929,19 @@ static inline bool kvm_arm_is_pvtime_enabled(struct kvm_vcpu_arch *vcpu_arch) return (vcpu_arch->steal.base != GPA_INVALID); } +static inline void kvm_arm_pvlock_preempted_init(struct kvm_vcpu_arch *vcpu_arch) +{ + vcpu_arch->pv_lock.base = GPA_INVALID; +} + +static inline bool kvm_arm_is_pvlock_preempted_ready(struct kvm_vcpu_arch *vcpu_arch) +{ + return (vcpu_arch->pv_lock.base != GPA_INVALID); +} + +gpa_t kvm_init_pvlock(struct kvm_vcpu *vcpu); +void kvm_update_pvlock_preempted(struct kvm_vcpu *vcpu, u64 preempted); + void kvm_set_sei_esr(struct kvm_vcpu *vcpu, u64 syndrome); struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr); diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h index a7a857f1784d..34dd6df3f8eb 100644 --- a/arch/arm64/include/uapi/asm/kvm.h +++ b/arch/arm64/include/uapi/asm/kvm.h @@ -366,6 +366,7 @@ enum { enum { KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT = 0, KVM_REG_ARM_VENDOR_HYP_BIT_PTP = 1, + KVM_REG_ARM_VENDOR_HYP_BIT_PV_LOCK = 2, #ifdef __KERNEL__ KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT, #endif diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile index 5e33c2d4645a..e1f711885916 100644 --- a/arch/arm64/kvm/Makefile +++ b/arch/arm64/kvm/Makefile @@ -10,7 +10,7 @@ include $(srctree)/virt/kvm/Makefile.kvm obj-$(CONFIG_KVM) += kvm.o obj-$(CONFIG_KVM) += hyp/ -kvm-y += arm.o mmu.o mmio.o psci.o hypercalls.o pvtime.o \ +kvm-y += arm.o mmu.o mmio.o psci.o hypercalls.o pvtime.o pvlock.o \ inject_fault.o va_layout.o handle_exit.o \ guest.o debug.o reset.o sys_regs.o stacktrace.o \ vgic-sys-reg-v3.o fpsimd.o pkvm.o \ diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 9c5573bc4614..5808e6695f75 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -357,6 +357,8 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) kvm_arm_pvtime_vcpu_init(&vcpu->arch); + kvm_arm_pvlock_preempted_init(&vcpu->arch); + vcpu->arch.hw_mmu = &vcpu->kvm->arch.mmu; err = kvm_vgic_vcpu_init(vcpu); @@ -432,6 +434,10 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) if (vcpu_has_ptrauth(vcpu)) vcpu_ptrauth_disable(vcpu); + + if (kvm_arm_is_pvlock_preempted_ready(&vcpu->arch)) + kvm_update_pvlock_preempted(vcpu, 0); + kvm_arch_vcpu_load_debug_state_flags(vcpu); if (!cpumask_test_cpu(smp_processor_id(), vcpu->kvm->arch.supported_cpus)) @@ -445,6 +451,8 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) if (has_vhe()) kvm_vcpu_put_sysregs_vhe(vcpu); kvm_timer_vcpu_put(vcpu); + if (kvm_arm_is_pvlock_preempted_ready(&vcpu->arch)) + kvm_update_pvlock_preempted(vcpu, 1); kvm_vgic_put(vcpu); kvm_vcpu_pmu_restore_host(vcpu); kvm_arm_vmid_clear_active(); diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c index c9f401fa01a9..ec85b4b2a272 100644 --- a/arch/arm64/kvm/hypercalls.c +++ b/arch/arm64/kvm/hypercalls.c @@ -116,6 +116,9 @@ static bool kvm_hvc_call_allowed(struct kvm_vcpu *vcpu, u32 func_id) case ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID: return test_bit(KVM_REG_ARM_VENDOR_HYP_BIT_PTP, &smccc_feat->vendor_hyp_bmap); + case ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID: + return test_bit(KVM_REG_ARM_VENDOR_HYP_BIT_PV_LOCK, + &smccc_feat->vendor_hyp_bmap); default: return kvm_hvc_call_default_allowed(func_id); } @@ -201,6 +204,11 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu) if (gpa != GPA_INVALID) val[0] = gpa; break; + case ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID: + gpa = kvm_init_pvlock(vcpu); + if (gpa != GPA_INVALID) + val[0] = gpa; + break; case ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID: val[0] = ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_0; val[1] = ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_1; diff --git a/arch/arm64/kvm/pvlock.c b/arch/arm64/kvm/pvlock.c new file mode 100644 index 000000000000..228d24bfe281 --- /dev/null +++ b/arch/arm64/kvm/pvlock.c @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright(c) 2019 Huawei Technologies Co., Ltd + * Author: Zengruan Ye + * Usama Arif + */ + +#include +#include + +#include + +#include + +gpa_t kvm_init_pvlock(struct kvm_vcpu *vcpu) +{ + struct pvlock_vcpu_state init_values = {}; + struct kvm *kvm = vcpu->kvm; + u64 base = vcpu->arch.pv_lock.base; + int idx; + + if (base == GPA_INVALID) + return base; + + idx = srcu_read_lock(&kvm->srcu); + kvm_write_guest(kvm, base, &init_values, sizeof(init_values)); + srcu_read_unlock(&kvm->srcu, idx); + + return base; +} + +void kvm_update_pvlock_preempted(struct kvm_vcpu *vcpu, u64 preempted) +{ + int idx; + u64 offset; + struct kvm *kvm = vcpu->kvm; + u64 base = vcpu->arch.pv_lock.base; + + idx = srcu_read_lock(&kvm->srcu); + offset = offsetof(struct pvlock_vcpu_state, preempted); + kvm_put_guest(kvm, base + offset, cpu_to_le64(preempted)); + srcu_read_unlock(&kvm->srcu, idx); +} diff --git a/tools/arch/arm64/include/uapi/asm/kvm.h b/tools/arch/arm64/include/uapi/asm/kvm.h index 316917b98707..bd05ece5c590 100644 --- a/tools/arch/arm64/include/uapi/asm/kvm.h +++ b/tools/arch/arm64/include/uapi/asm/kvm.h @@ -365,6 +365,7 @@ enum { enum { KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT = 0, KVM_REG_ARM_VENDOR_HYP_BIT_PTP = 1, + KVM_REG_ARM_VENDOR_HYP_BIT_PV_LOCK = 2, #ifdef __KERNEL__ KVM_REG_ARM_VENDOR_HYP_BMAP_BIT_COUNT, #endif From patchwork Tue Jan 17 10:29:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 44630 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1678411wrn; Tue, 17 Jan 2023 02:32:47 -0800 (PST) X-Google-Smtp-Source: AMrXdXt7VDZAYmGPoW5SkbTpJZYpRvfQvAk6LT9Pjv16HkNkeZnS4YUCFUAbSliOtgXNqSNFNRsw X-Received: by 2002:a05:6402:1c10:b0:49c:fde2:a6f4 with SMTP id ck16-20020a0564021c1000b0049cfde2a6f4mr2314094edb.15.1673951566897; Tue, 17 Jan 2023 02:32:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673951566; cv=none; d=google.com; s=arc-20160816; b=Q2boucqw0d0vfxSqCgek8Y7Gy7edL+VnH6ndck0DRrYk88DZ5rN7f8su//z+Lz5DLj 7QlP9s/TbW9i7cbeL6VKgmHtGFaaXfCPZlArWKqc82LNGKGHJ1bNiREyrGigwfg37JI9 McKo6EB5CMT8hxeGfLDJZx2MGk85Ouae9bbydTXwPC5X+eLKn40Rqi8BWpy3BN4KcJyb l02mQbs+I/DVhPz4mxIHJlQL3qNQXWbMomxanoOiQyFY7o6zfZOAMtHK0WurrpB2oy69 gPaaDjMva5TJHw3paIn96f7F5neFqRNqAmjdc3Rnff/tcJG0gaDKUNfTzy4mS46mPfIv P3wg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JxUuw76iqveF/sNoXADChUiwxEEgDMG8APtAC2nJI+s=; b=c4SoEcYuEUg5nmyfAw546sWXUPdAh1sCCGlYg63dHoQl7SqwHjBrmP1IUk+MBskr+n KgK3VZlDAAvpFjrD+1SDz+QK9+Q9QodB0Ua+IWvW9CCKHU4CkOaA+3n3qe/Hp528pFFB 9Qb5HBPhd1h5Y+xjwZzYzDIAiZICrXC9f6BHjbfSdKUnLQxibv+RR4gzE91OSEa4DAZs Kqile44hGKUbhdkd6/zRTRP6tpGv5zsayZMWvV+N+HdvexKW7b8ApmRc7/3j4pwEphuZ zTrKRfyLgSP1CxahsAnBelyoLcl6+CSLcTWbJeKYjqWZmaJF3uDmymc8TSDYWcOpRkri hNvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=MuiU+uyx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m15-20020a056402510f00b0049e3fcd693dsi512398edd.489.2023.01.17.02.32.20; Tue, 17 Jan 2023 02:32:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=MuiU+uyx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236272AbjAQKax (ORCPT + 99 others); Tue, 17 Jan 2023 05:30:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236292AbjAQKaY (ORCPT ); Tue, 17 Jan 2023 05:30:24 -0500 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E100630EB5 for ; Tue, 17 Jan 2023 02:29:40 -0800 (PST) Received: by mail-wr1-x429.google.com with SMTP id d2so9952756wrp.8 for ; Tue, 17 Jan 2023 02:29:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JxUuw76iqveF/sNoXADChUiwxEEgDMG8APtAC2nJI+s=; b=MuiU+uyxvhbFRPyGqQ9ezTOALzxDqQbJVIykevHF+Hn583+flrkUR2ssjmJ2VjwOUE YhBQ2oj9m13vCXGQT5vXg6Vxrr8xn4xnx3PfAFbA0ANwE2oeu5cAFCWwH8BL9UXQos4/ AU6RdoTw+AFWR9xecEPm2R/LmoOFrKYW2cT+4s6MySiAXOFpykWTBrwp/PLQ0aoYWTGJ MV06LlbbOoCbDvGu7wD+uQcnmFVbsfChDxR3UKZinxcNWAiRElF4zofcz3mvAfBYBFQ0 upKvDTsVDq7qIuc8/eAH2yHe4c0zt14RXmdLDvvrTeQzpCN0Psp/68cc0K/ReCC/TATW ADyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JxUuw76iqveF/sNoXADChUiwxEEgDMG8APtAC2nJI+s=; b=tXBHL4IxE3Cl4pdW7grbcHBvkDEqkP515+FAju+WpJBHL44wh1qbCW5uUC1t9iknJM 3nA6dt51ymCaaGVMjKBUN3iZZ6VoHBG3Hvd2wacFKSZu8BQZfQjDXLdcstUtAB5AOqt1 cS53DDQxeXURr5WkXdFy9WtJ1Wlz0rGCNcyC5D+GtlmJHuWJ+4mUrYvglCQ3R5v5h/8y hJkcz50V5sUwZycrfCeFssKy3X7hC2e9jmfFXrl26+n3jAvkL/g1ypqTmQ0AMciQxI91 CNHgff/ycO3LKvZWl7mFiUKOOzUkW7BYBPyqyiJxqcDLS1o5YUYXgeE7OcmxRA5D1Rwk Zu9w== X-Gm-Message-State: AFqh2krlXmBMUxGLOGqXDSz/IG+clzThS6B+OB/MKD8IMih1nJ5jOVoK LGODqREAhJ8zeuhykSeSkFnRGvePhhyVHUgdg0g= X-Received: by 2002:adf:f501:0:b0:2ba:dce5:ee28 with SMTP id q1-20020adff501000000b002badce5ee28mr2139486wro.18.1673951379156; Tue, 17 Jan 2023 02:29:39 -0800 (PST) Received: from usaari01.cust.communityfibre.co.uk ([2a02:6b6a:b566:0:17d8:e5ec:f870:7b46]) by smtp.gmail.com with ESMTPSA id j15-20020a5d452f000000b0028f9132e9ddsm28389844wra.39.2023.01.17.02.29.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:38 -0800 (PST) From: Usama Arif To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org, linux@armlinux.org.uk, yezengruan@huawei.com, catalin.marinas@arm.com, will@kernel.org, maz@kernel.org, steven.price@arm.com, mark.rutland@arm.com, bagasdotme@gmail.com, pbonzini@redhat.com Cc: fam.zheng@bytedance.com, liangma@liangbit.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v3 4/6] KVM: arm64: Provide VCPU attributes for PV lock Date: Tue, 17 Jan 2023 10:29:28 +0000 Message-Id: <20230117102930.1053337-5-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230117102930.1053337-1-usama.arif@bytedance.com> References: <20230117102930.1053337-1-usama.arif@bytedance.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755265438676964040?= X-GMAIL-MSGID: =?utf-8?q?1755265438676964040?= Allow user space to inform the KVM host where in the physical memory map the paravirtualized lock structures should be located. User space can set an attribute on the VCPU providing the IPA base address of the PV lock structure for that VCPU. This must be repeated for every VCPU in the VM. The address is given in terms of the physical address visible to the guest and must be 64 byte aligned. The guest will discover the address via a hypercall. Signed-off-by: Zengruan Ye Signed-off-by: Usama Arif --- arch/arm64/include/asm/kvm_host.h | 7 ++++ arch/arm64/include/uapi/asm/kvm.h | 2 ++ arch/arm64/kvm/guest.c | 9 +++++ arch/arm64/kvm/pvlock.c | 57 +++++++++++++++++++++++++++++++ include/uapi/linux/kvm.h | 2 ++ 5 files changed, 77 insertions(+) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 1d1acc5be8d7..5041b27dfcf2 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -913,6 +913,13 @@ int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu, int kvm_arm_pvtime_has_attr(struct kvm_vcpu *vcpu, struct kvm_device_attr *attr); +int kvm_arm_pvlock_set_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr); +int kvm_arm_pvlock_get_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr); +int kvm_arm_pvlock_has_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr); + extern unsigned int kvm_arm_vmid_bits; int kvm_arm_vmid_alloc_init(void); void kvm_arm_vmid_alloc_free(void); diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h index 34dd6df3f8eb..d67816f193a6 100644 --- a/arch/arm64/include/uapi/asm/kvm.h +++ b/arch/arm64/include/uapi/asm/kvm.h @@ -413,6 +413,8 @@ enum { #define KVM_ARM_VCPU_TIMER_IRQ_PTIMER 1 #define KVM_ARM_VCPU_PVTIME_CTRL 2 #define KVM_ARM_VCPU_PVTIME_IPA 0 +#define KVM_ARM_VCPU_PVLOCK_CTRL 3 +#define KVM_ARM_VCPU_PVLOCK_IPA 0 /* KVM_IRQ_LINE irq field index values */ #define KVM_ARM_IRQ_VCPU2_SHIFT 28 diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c index 5626ddb540ce..a1b0f39f24ba 100644 --- a/arch/arm64/kvm/guest.c +++ b/arch/arm64/kvm/guest.c @@ -959,6 +959,9 @@ int kvm_arm_vcpu_arch_set_attr(struct kvm_vcpu *vcpu, case KVM_ARM_VCPU_PVTIME_CTRL: ret = kvm_arm_pvtime_set_attr(vcpu, attr); break; + case KVM_ARM_VCPU_PVLOCK_CTRL: + ret = kvm_arm_pvlock_set_attr(vcpu, attr); + break; default: ret = -ENXIO; break; @@ -982,6 +985,9 @@ int kvm_arm_vcpu_arch_get_attr(struct kvm_vcpu *vcpu, case KVM_ARM_VCPU_PVTIME_CTRL: ret = kvm_arm_pvtime_get_attr(vcpu, attr); break; + case KVM_ARM_VCPU_PVLOCK_CTRL: + ret = kvm_arm_pvlock_get_attr(vcpu, attr); + break; default: ret = -ENXIO; break; @@ -1005,6 +1011,9 @@ int kvm_arm_vcpu_arch_has_attr(struct kvm_vcpu *vcpu, case KVM_ARM_VCPU_PVTIME_CTRL: ret = kvm_arm_pvtime_has_attr(vcpu, attr); break; + case KVM_ARM_VCPU_PVLOCK_CTRL: + ret = kvm_arm_pvlock_has_attr(vcpu, attr); + break; default: ret = -ENXIO; break; diff --git a/arch/arm64/kvm/pvlock.c b/arch/arm64/kvm/pvlock.c index 228d24bfe281..cdd9749efd33 100644 --- a/arch/arm64/kvm/pvlock.c +++ b/arch/arm64/kvm/pvlock.c @@ -41,3 +41,60 @@ void kvm_update_pvlock_preempted(struct kvm_vcpu *vcpu, u64 preempted) kvm_put_guest(kvm, base + offset, cpu_to_le64(preempted)); srcu_read_unlock(&kvm->srcu, idx); } + +int kvm_arm_pvlock_set_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr) +{ + u64 __user *user = (u64 __user *)attr->addr; + struct kvm *kvm = vcpu->kvm; + u64 ipa; + int ret = 0; + int idx; + + if (attr->attr != KVM_ARM_VCPU_PVLOCK_IPA) + return -ENXIO; + + if (get_user(ipa, user)) + return -EFAULT; + if (!IS_ALIGNED(ipa, 64)) + return -EINVAL; + if (vcpu->arch.pv_lock.base != GPA_INVALID) + return -EEXIST; + + /* Check the address is in a valid memslot */ + idx = srcu_read_lock(&kvm->srcu); + if (kvm_is_error_hva(gfn_to_hva(kvm, ipa >> PAGE_SHIFT))) + ret = -EINVAL; + srcu_read_unlock(&kvm->srcu, idx); + + if (!ret) + vcpu->arch.pv_lock.base = ipa; + + return ret; +} + +int kvm_arm_pvlock_get_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr) +{ + u64 __user *user = (u64 __user *)attr->addr; + u64 ipa; + + if (attr->attr != KVM_ARM_VCPU_PVLOCK_IPA) + return -ENXIO; + + ipa = vcpu->arch.pv_lock.base; + + if (put_user(ipa, user)) + return -EFAULT; + return 0; +} + +int kvm_arm_pvlock_has_attr(struct kvm_vcpu *vcpu, + struct kvm_device_attr *attr) +{ + switch (attr->attr) { + case KVM_ARM_VCPU_PVLOCK_IPA: + return 0; + } + return -ENXIO; +} \ No newline at end of file diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 55155e262646..0d76b7034002 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -1427,6 +1427,8 @@ enum kvm_device_type { #define KVM_DEV_TYPE_XIVE KVM_DEV_TYPE_XIVE KVM_DEV_TYPE_ARM_PV_TIME, #define KVM_DEV_TYPE_ARM_PV_TIME KVM_DEV_TYPE_ARM_PV_TIME + KVM_DEV_TYPE_ARM_PV_LOCK, +#define KVM_DEV_TYPE_ARM_PV_LOCK KVM_DEV_TYPE_ARM_PV_LOCK KVM_DEV_TYPE_MAX, }; From patchwork Tue Jan 17 10:29:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 44633 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1679018wrn; Tue, 17 Jan 2023 02:34:24 -0800 (PST) X-Google-Smtp-Source: AMrXdXtug5X8Q/lk+UTtc+IeGngus6z/qkZY6On9slz8z0gE/hHRBjknVFBUcXsvh1olPgpT/Esj X-Received: by 2002:a17:906:38c3:b0:872:82d3:4162 with SMTP id r3-20020a17090638c300b0087282d34162mr2244853ejd.44.1673951664412; Tue, 17 Jan 2023 02:34:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673951664; cv=none; d=google.com; s=arc-20160816; b=h7DEeEhcWCvwQrN5ewVVwCMbecQ56cnky9oyGCnSVG/Jl+WPRFzbcMfKhJJeyCIAbu YLmJd0zI1Al/q3Qq9rVuqcTrP4NuhLhAkrLCIynpomeubHWLuGjuLppcEWiOGwRCkYJ3 BzCMinNDLugdhbsfDxka7EaRQ3M79+6ziJm7IzxM27hGqKJNYruRKkCuH6V0Hko7UKPk DBczK2NF0R2pJi0sQIGq4/tFYuG7YNJXDTqh8AaQvNwKwbdP8nCqJreJI4R9uwCZ+F+z faXtgLSRZ+pase1eT2truNB5/vmAwnNa+YXarc/vmiU5KJUEERLv7zTAxUNED2PkbjsQ VyUw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MDKiG+yaIBG32YeRExq1BkXRALN1IzcYPeADcuqdbME=; b=opaWYMkHRNdQIXr1RkSZwaqv1xAGeA4AKPcKtvWDSDmDgWap8DHwRMCj4/NQQ5cQm7 BYu8hBdvMQ0bOwP6TAMzw5CJ/P93pF4FSBYhUHwsKzA3mTJ/oZY9QjsW6uNo/iBQfqrX 1FLEZ0DRMu+2t61JVcucWFLOH5jzQ4VzRPTjKXpPL2riGr+xfz3qBGAxK/KwH/Fv1a+i xhmf5Ms/QQLoSKVbVOv0K+uNFeyIMABP+tMbbZHjw6VVXueNHaSievrhff8S6CfVRWAW vpxjsw0wjQbRfFtcPDVm6iYKsWqiZHYW72gKXND2rRO43QUv7lxXRXPLqJxrjySEg+OU cskA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b="EWov0XL/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hj1-20020a1709069fc100b007c179af6e06si34502426ejc.955.2023.01.17.02.34.00; Tue, 17 Jan 2023 02:34:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b="EWov0XL/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236661AbjAQKcQ (ORCPT + 99 others); Tue, 17 Jan 2023 05:32:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236660AbjAQKau (ORCPT ); Tue, 17 Jan 2023 05:30:50 -0500 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AFDD030EAE for ; Tue, 17 Jan 2023 02:29:40 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id d2so9952802wrp.8 for ; Tue, 17 Jan 2023 02:29:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MDKiG+yaIBG32YeRExq1BkXRALN1IzcYPeADcuqdbME=; b=EWov0XL/TSftaliENyT9wmGA0XZ2OXoTzEElQls0lrL4rRGkpE4P4VnFzVn/92WNrx 8hCscACUC6gwoycxSSYQ46ppCops0sK9b4IURjvqtLtuM0XYLib1XmJ7mDC7fBl90olF QMyAKiYOePV5FzJAA5Lr60jgI3YAG/Y1DZxTYTqbW8+NkmEMtyDWJ8OM82DJQkzPB9xf m4l66Fvpklfy3UAF6cC1jTgyAtdLSsongAWxVKY4U/88VZJHH8ZRkBegmg7fTJbhi4tF yTPP7X7g6jk0cyvvXlt1c2tYpPtBbG4zVyQTz25m2wpxLSORJUhQ6Lqf8QAyDNHQcv/R koWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MDKiG+yaIBG32YeRExq1BkXRALN1IzcYPeADcuqdbME=; b=0joTCVriM1Q1N8fh36CU1OGbYzcO8nTqHkWoMnbkV4hZR8KxOoPOjQLXmz+yHrcZuK 2QhYACUiL3/RTgm2pDQi+ruiouhqimjVn37uzE+wbliWfjm7vpup6jHBgbcOyfUxCpTd /CseK/LpNiuhQ6r3z4VDOVvlM5HALKvNiYkR0N8iqRuuXxS0jdkLQEsJnA6SkeQJoGJW f9yOmGIqypfqsyRytEZOfqMJU/Y586XgQ7+oNbReauMhp7x5+CaVWGY24m/4E34/OVYf CEYUhnLSPF5q6IevkXcRE6EXqfm3foJSdyJL0NpRRKSXZxVObvMs/++YmyIlDTtEykQW 9XNw== X-Gm-Message-State: AFqh2kpWPK/XQTt8GJsZSRKlkAH3/db0X4KWpkRxAWvVlgzhOPd+JdwS PPvjgfj/Y0QKGZnj71c3L3DwsvSvMb/HPWuzFMo= X-Received: by 2002:a05:6000:3c2:b0:2bd:beff:9c47 with SMTP id b2-20020a05600003c200b002bdbeff9c47mr2847870wrg.67.1673951380055; Tue, 17 Jan 2023 02:29:40 -0800 (PST) Received: from usaari01.cust.communityfibre.co.uk ([2a02:6b6a:b566:0:17d8:e5ec:f870:7b46]) by smtp.gmail.com with ESMTPSA id j15-20020a5d452f000000b0028f9132e9ddsm28389844wra.39.2023.01.17.02.29.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:39 -0800 (PST) From: Usama Arif To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org, linux@armlinux.org.uk, yezengruan@huawei.com, catalin.marinas@arm.com, will@kernel.org, maz@kernel.org, steven.price@arm.com, mark.rutland@arm.com, bagasdotme@gmail.com, pbonzini@redhat.com Cc: fam.zheng@bytedance.com, liangma@liangbit.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v3 5/6] KVM: arm64: Support the VCPU preemption check Date: Tue, 17 Jan 2023 10:29:29 +0000 Message-Id: <20230117102930.1053337-6-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230117102930.1053337-1-usama.arif@bytedance.com> References: <20230117102930.1053337-1-usama.arif@bytedance.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755265540570418715?= X-GMAIL-MSGID: =?utf-8?q?1755265540570418715?= Support the vcpu_is_preempted() functionality under KVM/arm64. This will enhance lock performance on overcommitted hosts (more runnable VCPUs than physical CPUs in the system) as doing busy waits for preempted VCPUs will hurt system performance far worse than early yielding. Signed-off-by: Zengruan Ye Signed-off-by: Usama Arif --- arch/arm64/include/asm/paravirt.h | 2 + arch/arm64/include/asm/spinlock.h | 16 ++++- arch/arm64/kernel/paravirt.c | 113 ++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/paravirt.h b/arch/arm64/include/asm/paravirt.h index 9aa193e0e8f2..4ccb4356c56b 100644 --- a/arch/arm64/include/asm/paravirt.h +++ b/arch/arm64/include/asm/paravirt.h @@ -19,10 +19,12 @@ static inline u64 paravirt_steal_clock(int cpu) } int __init pv_time_init(void); +int __init pv_lock_init(void); #else #define pv_time_init() do {} while (0) +#define pv_lock_init() do {} while (0) #endif // CONFIG_PARAVIRT diff --git a/arch/arm64/include/asm/spinlock.h b/arch/arm64/include/asm/spinlock.h index 0525c0b089ed..7023efa4de96 100644 --- a/arch/arm64/include/asm/spinlock.h +++ b/arch/arm64/include/asm/spinlock.h @@ -10,7 +10,20 @@ /* See include/linux/spinlock.h */ #define smp_mb__after_spinlock() smp_mb() +#define vcpu_is_preempted vcpu_is_preempted + +#ifdef CONFIG_PARAVIRT +#include + +bool dummy_vcpu_is_preempted(int cpu); +DECLARE_STATIC_CALL(pv_vcpu_is_preempted, dummy_vcpu_is_preempted); +static inline bool vcpu_is_preempted(int cpu) +{ + return static_call(pv_vcpu_is_preempted)(cpu); +} + +#else /* * Changing this will break osq_lock() thanks to the call inside * smp_cond_load_relaxed(). @@ -18,10 +31,11 @@ * See: * https://lore.kernel.org/lkml/20200110100612.GC2827@hirez.programming.kicks-ass.net */ -#define vcpu_is_preempted vcpu_is_preempted static inline bool vcpu_is_preempted(int cpu) { return false; } +#endif /* CONFIG_PARAVIRT */ + #endif /* __ASM_SPINLOCK_H */ diff --git a/arch/arm64/kernel/paravirt.c b/arch/arm64/kernel/paravirt.c index aa718d6a9274..c56d701db1bb 100644 --- a/arch/arm64/kernel/paravirt.c +++ b/arch/arm64/kernel/paravirt.c @@ -20,8 +20,10 @@ #include #include +#include #include #include +#include #include struct static_key paravirt_steal_enabled; @@ -38,7 +40,12 @@ struct pv_time_stolen_time_region { struct pvclock_vcpu_stolen_time __rcu *kaddr; }; +struct pv_lock_state_region { + struct pvlock_vcpu_state __rcu *kaddr; +}; + static DEFINE_PER_CPU(struct pv_time_stolen_time_region, stolen_time_region); +static DEFINE_PER_CPU(struct pv_lock_state_region, lock_state_region); static bool steal_acc = true; static int __init parse_no_stealacc(char *arg) @@ -174,3 +181,109 @@ int __init pv_time_init(void) return 0; } + +static bool native_vcpu_is_preempted(int cpu) +{ + return false; +} + +DEFINE_STATIC_CALL(pv_vcpu_is_preempted, native_vcpu_is_preempted); + +static bool para_vcpu_is_preempted(int cpu) +{ + struct pv_lock_state_region *reg; + __le64 preempted_le; + + reg = per_cpu_ptr(&lock_state_region, cpu); + if (!reg->kaddr) { + pr_warn_once("PV lock enabled but not configured for cpu %d\n", + cpu); + return false; + } + + preempted_le = le64_to_cpu(READ_ONCE(reg->kaddr->preempted)); + + return !!(preempted_le); +} + +static int pvlock_vcpu_state_dying_cpu(unsigned int cpu) +{ + struct pv_lock_state_region *reg; + + reg = this_cpu_ptr(&lock_state_region); + if (!reg->kaddr) + return 0; + + memunmap(reg->kaddr); + memset(reg, 0, sizeof(*reg)); + + return 0; +} + +static int init_pvlock_vcpu_state(unsigned int cpu) +{ + struct pv_lock_state_region *reg; + struct arm_smccc_res res; + + reg = this_cpu_ptr(&lock_state_region); + + arm_smccc_1_1_invoke(ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID, &res); + + if (res.a0 == SMCCC_RET_NOT_SUPPORTED) { + pr_warn("Failed to init PV lock data structure\n"); + return -EINVAL; + } + + reg->kaddr = memremap(res.a0, + sizeof(struct pvlock_vcpu_state), + MEMREMAP_WB); + + if (!reg->kaddr) { + pr_warn("Failed to map PV lock data structure\n"); + return -ENOMEM; + } + + return 0; +} + +static int kvm_arm_init_pvlock(void) +{ + int ret; + + ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, + "hypervisor/arm/pvlock:online", + init_pvlock_vcpu_state, + pvlock_vcpu_state_dying_cpu); + if (ret < 0) { + pr_warn("PV-lock init failed\n"); + return ret; + } + + return 0; +} + +static bool has_kvm_pvlock(void) +{ + return kvm_arm_hyp_service_available(ARM_SMCCC_KVM_FUNC_PV_LOCK); +} + +int __init pv_lock_init(void) +{ + int ret; + + if (is_hyp_mode_available()) + return 0; + + if (!has_kvm_pvlock()) + return 0; + + ret = kvm_arm_init_pvlock(); + if (ret) + return ret; + + static_call_update(pv_vcpu_is_preempted, para_vcpu_is_preempted); + pr_info("using PV-lock preempted\n"); + + return 0; +} +early_initcall(pv_lock_init); From patchwork Tue Jan 17 10:29:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 44634 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1679077wrn; Tue, 17 Jan 2023 02:34:33 -0800 (PST) X-Google-Smtp-Source: AMrXdXvJgl6IV/l5m3E9eEP/y1A9PxU1FTwactKBs7F6zEMBplibMOBNQm1aZzY5dAdyO5Mglqig X-Received: by 2002:a05:6402:298d:b0:49d:bbe8:7661 with SMTP id eq13-20020a056402298d00b0049dbbe87661mr2665396edb.11.1673951673084; Tue, 17 Jan 2023 02:34:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673951673; cv=none; d=google.com; s=arc-20160816; b=E/kcQzun3omDQXhU+CaGKkKqzD1F6HoAlt5CAqkxNDCPBXoE+wGj7i6c70SKddWl1g u2H+/xTMgJ2VvRb7aubw8aKUTxRfpec013tmjsiO2PS6KQhJfQiTefMkGK2ERJ6fgWgC wGkdeugQy1Kjg4ymu1huJZOFbKOjCxDp+0XGoM5sdhEWcPohtyEUCm5Wdt21UDMOt9Qq 5cG1a/MTOYk0cR6lk2eGIzs1Eo+Gc9v2PnkPLNafHSr2sqcqER0LfqUtuKAr6sXbY1D0 elp24PzC68FOAtKGFWpbYUDm/suEof2Yap2XOFP2xf0BQWp7qIAYACXNAn+5e3c54+B0 ViKQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=goLYN8wqlsD2nf6BsyoWezQkBOY9czu46tASmcKkV+U=; b=SNuEiSJ8rEt8mJYluKaNNom17q0GW9lNYM9zPScrEhl+eWJAqRVrzGNw5kP8AaRQXI CwE0sR8fS18NWnOmkgbhFdI7VYiMuYRg5Iiyg7dAcx3MgYoHvDgRo6NmFu7FVS1LJXt8 Uc7SG8ultomjKaNY6qiT8s6Iiw9ELUMZ+AL2busPwjQoXbOagYxC5vA7snzUhuLwSh8I lUyUn64KzHxss4rSVuaNo/1CBMoscTnYhfRxa7felI8ZEfRWkNi3GN3zr6v/Ja176yhN SGVZNFG7QxGJlxX2EkeA5C4A+i5uPQ79/TFYaVx5mdLsvDaVbwX/+MQzjriRB3od/9oA RIqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=LW9v+FSh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dk10-20020a0564021d8a00b0049e0440d49esi2835797edb.29.2023.01.17.02.34.09; Tue, 17 Jan 2023 02:34:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=LW9v+FSh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=bytedance.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236407AbjAQKbG (ORCPT + 99 others); Tue, 17 Jan 2023 05:31:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236106AbjAQKaZ (ORCPT ); Tue, 17 Jan 2023 05:30:25 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86AF531E01 for ; Tue, 17 Jan 2023 02:29:41 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id t5so25664134wrq.1 for ; Tue, 17 Jan 2023 02:29:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=goLYN8wqlsD2nf6BsyoWezQkBOY9czu46tASmcKkV+U=; b=LW9v+FShzNaYNEA1fCcvsuL+gmKoaNWBCzkVb4IqUJxu1VFQQzmE7D5c17K+jU4E58 k1nFdkZWgTq1OLh4PWwMAjMkTCyGqAyQm557fme7cOxRFBoSDzU7std4+dXQykp0Jadc 4ZHR482J2vcLi190UZzizoeaz9p8YaeZJUC5mEV59GPwotY2dZO7HWCS2njWJnDhhl2O 6nskecHf7DR8Ln5Y1lQS9KhhAJTiEvb0U0q6Fq++VnLONiICwidHPQYzKqA/u3Dqn1fx 2EpcFw/uSRGraDNCs2I2Zw/1PizGqcB7GLAJJs3HIk6fzt2V1+zbJ96Sx2kk1u3VO6c7 znOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=goLYN8wqlsD2nf6BsyoWezQkBOY9czu46tASmcKkV+U=; b=rFFN3d3Dh6GdOOEO5/UR7wGrq2G4Prvk1MgabzykNBFuW+DpiUU67GyakN6bQYjsAT 7BRwZkGvvqYt1ZB+7eK66jvVjRHnYNyJwdbErd7cAP1O6Lgf1Wqp4l+N+kbB0xz/FSxi P1ybcYJg1Nvi373iG2BrJLKePm4AMxiHDqlTGeIcRb58fJmi7NbHewBGbQzsquul+7/u MY2KtyJFuvcH18j+Or9Z/fG6Fq4DpONrFcUzaXzm7tUFmKqnsnW70v7DamvJqd+siG/h fczHUUWHeqr2PTiRKXIwJVfD63vhmr6FN/KkgfdwjdqKhxmAgQrcCpy6+xuxX7pY8e/9 fmoQ== X-Gm-Message-State: AFqh2kop3i3A5Cd2dCqd1ussy13jeVCraad7oS4gqKa13aCLvuVOXlYk NbfwZkBuz60yL+gMzCuigXGE3SJsCBmVi787L+o= X-Received: by 2002:adf:edd1:0:b0:2bd:c6ce:7bfc with SMTP id v17-20020adfedd1000000b002bdc6ce7bfcmr2267011wro.42.1673951380954; Tue, 17 Jan 2023 02:29:40 -0800 (PST) Received: from usaari01.cust.communityfibre.co.uk ([2a02:6b6a:b566:0:17d8:e5ec:f870:7b46]) by smtp.gmail.com with ESMTPSA id j15-20020a5d452f000000b0028f9132e9ddsm28389844wra.39.2023.01.17.02.29.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 02:29:40 -0800 (PST) From: Usama Arif To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux-foundation.org, linux@armlinux.org.uk, yezengruan@huawei.com, catalin.marinas@arm.com, will@kernel.org, maz@kernel.org, steven.price@arm.com, mark.rutland@arm.com, bagasdotme@gmail.com, pbonzini@redhat.com Cc: fam.zheng@bytedance.com, liangma@liangbit.com, punit.agrawal@bytedance.com, Usama Arif Subject: [v3 6/6] KVM: selftests: add tests for PV time specific hypercall Date: Tue, 17 Jan 2023 10:29:30 +0000 Message-Id: <20230117102930.1053337-7-usama.arif@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230117102930.1053337-1-usama.arif@bytedance.com> References: <20230117102930.1053337-1-usama.arif@bytedance.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755265549585652494?= X-GMAIL-MSGID: =?utf-8?q?1755265549585652494?= This is a vendor specific hypercall. Signed-off-by: Usama Arif --- tools/testing/selftests/kvm/aarch64/hypercalls.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/kvm/aarch64/hypercalls.c b/tools/testing/selftests/kvm/aarch64/hypercalls.c index bef1499fb465..375bcc4126d5 100644 --- a/tools/testing/selftests/kvm/aarch64/hypercalls.c +++ b/tools/testing/selftests/kvm/aarch64/hypercalls.c @@ -78,6 +78,8 @@ static const struct test_hvc_info hvc_info[] = { TEST_HVC_INFO(ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID, ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID), TEST_HVC_INFO(ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID, 0), + TEST_HVC_INFO(ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID, + ARM_SMCCC_VENDOR_HYP_KVM_PV_LOCK_FUNC_ID), TEST_HVC_INFO(ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID, KVM_PTP_VIRT_COUNTER), };