From patchwork Fri Dec 23 00:57:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 36034 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp69567wrn; Thu, 22 Dec 2022 16:59:41 -0800 (PST) X-Google-Smtp-Source: AMrXdXtE4Z0En+xxS433V6N2ye/dYFWTNGr6hTKVN++HExIW16ZitETq/+Ed6GClPMOq1LwOGxeV X-Received: by 2002:a17:906:2816:b0:7c0:d452:2e74 with SMTP id r22-20020a170906281600b007c0d4522e74mr5868453ejc.4.1671757181716; Thu, 22 Dec 2022 16:59:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671757181; cv=none; d=google.com; s=arc-20160816; b=QW02TaMb6f7ynpW7ZsnYHUbeqyPRn+ttC6jOovWOSD7bRGgdWVf6LRv39BAtHkqr1y l+WzBsEbhAK7ZGAGXpjR5wdl5+afk59N2e4NKZPoNaKiPPqexkD1K5uPPlERKSOlcICE 4QUmifo41vGc22M3SElCJj1/4BqIVZdq5AUTNbG4sa1RnR/lWhNh38OehcNPXPiHZsgR McivyP8YrsiTST0wfY5+OEojOIGliBvIJav4JM+Hu7xBbCyfoLwkgctAQft4TGIYiEHT cyoHsTTBZwW8NF46eS2QaZTa89KlmmhQw121LTbN62x1J8/ZW5Z2/jvR/7weA17xrDKV np8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=bmfAlTw7KPee5BT5ARosoNOxp58PoziaZSGblHMcfn4=; b=N1zSB/n9Y6EvqEwOLFxvB+1Tu695fbrsS/B/rZrLRVvgay95UzkexAMhBUP0R1J41h PhLUhQ53kO0Ua0O5nCHhFZ76rQIWAmMHVaq/TUKHdxfmwdFZ2m8d0x+XXfMerW93S0Yf D5RSK+q6sQ2q/SQ6KakJGGiVRpOgqVx4vsBwGaO1lcfwd8kLeU0B550stFyzOMxEBup8 tC2LWMi9sniZ3pJjZ9Jcvh2QNsXAeT9njFiPNtM0tn4ORm4lcN9D9zPtrzOm7yQNT1q3 drijOMFEx2SR8JliuDGKzLFwurJPQP06kxJQkVzwYNmD5UMULIfpjJYOj3JcykkPzdSi In/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=amS6Akiq; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sb41-20020a1709076da900b0083ad85fbd66si1670208ejc.577.2022.12.22.16.59.18; Thu, 22 Dec 2022 16:59:41 -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=@google.com header.s=20210112 header.b=amS6Akiq; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235806AbiLWA60 (ORCPT + 99 others); Thu, 22 Dec 2022 19:58:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235531AbiLWA6C (ORCPT ); Thu, 22 Dec 2022 19:58:02 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 27E4225E8B for ; Thu, 22 Dec 2022 16:57:56 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-410f1a84ed2so36598217b3.15 for ; Thu, 22 Dec 2022 16:57:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=bmfAlTw7KPee5BT5ARosoNOxp58PoziaZSGblHMcfn4=; b=amS6AkiqMBz2E56adUfZiZ0qlzFza/fJe6yjksEjN98poxV1G9yKoHPq4XyIgUDl6W b0j6KpXbhKHQIta4bAmN85o52XADQ8scOEOZSLR5KbrWNt/rUmlxexxrVEftn9sSpavR D/DVLsAt87QaZI94sXNT6csbY/FBT+eVhyy3di1Vx8TMTAiJc1tP+z0E7pDkuhB2ozgN PpCTfzSt+VrBnQFSog2A7devVxciaxdcDmjgsHqiNCufShQRC4ex5XadOqvSOrUJCwA0 +AJG0WHNAN/z7DeX5h4b84L91y+VXfruFFfgNxuCH7pE6WWTh8H8aE2+WdP6oyi1ga2f FmZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bmfAlTw7KPee5BT5ARosoNOxp58PoziaZSGblHMcfn4=; b=bAuXhd3ywRLjKow1hkKm9eqeUqhqAvhYDIiGvwhONKAl/VY56THrg/dEyLCTn0NZxQ hupfto+FiWVLNb4wtxoe+CRaiuE5aQR8CKNTYQxYqWRAtv66pds/CGM9RHeuPYGfY2Pm 7W0rdsjWTeMK/sqakSJ77W5sVm1E/GeexzdYY0ccw10Kyjn/mgNqpsRPVWK+n8A+r9q8 2Kamkc5Otnf8iwW2ngq7CwSWRCcfrriWZQyExAtNVFJwsn5AdlS8pANWPTVVi9aa1NLI FU3giMfz+6lo8QNYuMEv44QDDPCf1b2OvcuUZfv55VZDWmxd//wk98s/tWRKJLu53FWP 3U3g== X-Gm-Message-State: AFqh2kqEFevlfbXTdp7gWTHChdDvvzmEOqpSsGS2d6PKr7jZZ8BVj1JX xG9fPTIgGvdyCeGGx8USG+TdeoTbQ8w= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:690c:582:b0:466:a29c:3cf7 with SMTP id bo2-20020a05690c058200b00466a29c3cf7mr450161ywb.270.1671757075486; Thu, 22 Dec 2022 16:57:55 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 23 Dec 2022 00:57:18 +0000 In-Reply-To: <20221223005739.1295925-1-seanjc@google.com> Mime-Version: 1.0 References: <20221223005739.1295925-1-seanjc@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221223005739.1295925-7-seanjc@google.com> Subject: [PATCH 06/27] drm/i915/gvt: Don't rely on KVM's gfn_to_pfn() to query possible 2M GTT From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Zhenyu Wang , Zhi Wang Cc: kvm@vger.kernel.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yan Zhao , Ben Gardon X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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?1752964458356978650?= X-GMAIL-MSGID: =?utf-8?q?1752964458356978650?= Now that gvt_pin_guest_page() explicitly verifies the pinned PFN is a transparent hugepage page, don't use KVM's gfn_to_pfn() to pre-check if a 2M GTT entry is possible and instead just try to map the GFN with a 2MB entry. Using KVM to query pfn that is ultimately managed through VFIO is odd, and KVM's gfn_to_pfn() is not intended for non-KVM consumption; it's exported only because of KVM vendor modules (x86 and PPC). Signed-off-by: Sean Christopherson --- drivers/gpu/drm/i915/gvt/gtt.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 9936f8bd19af..59ba6639e622 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1167,21 +1167,19 @@ static inline void ppgtt_generate_shadow_entry(struct intel_gvt_gtt_entry *se, } /* - * Check if can do 2M page + * Try to map a 2M gtt entry. * @vgpu: target vgpu * @entry: target pfn's gtt entry * - * Return 1 if 2MB huge gtt shadowing is possible, 0 if miscondition, - * negative if found err. + * Return 1 if 2MB huge gtt shadow was creation, 0 if the entry needs to be + * split, negative if found err. */ -static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, - struct intel_gvt_gtt_entry *entry) +static int try_map_2MB_gtt_entry(struct intel_vgpu *vgpu, + struct intel_gvt_gtt_entry *entry, dma_addr_t *dma_addr) { const struct intel_gvt_gtt_pte_ops *ops = vgpu->gvt->gtt.pte_ops; unsigned long gfn = ops->get_pfn(entry); - kvm_pfn_t pfn; int max_level; - int ret; if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) return 0; @@ -1194,16 +1192,7 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, if (max_level < PG_LEVEL_2M) return 0; - pfn = gfn_to_pfn(vgpu->vfio_device.kvm, gfn); - if (is_error_noslot_pfn(pfn)) - return -EINVAL; - - if (!pfn_valid(pfn)) - return -EINVAL; - - ret = PageTransHuge(pfn_to_page(pfn)); - kvm_release_pfn_clean(pfn); - return ret; + return intel_gvt_dma_map_guest_page(vgpu, gfn, I915_GTT_PAGE_SIZE_2M, dma_addr); } static int split_2MB_gtt_entry(struct intel_vgpu *vgpu, @@ -1290,7 +1279,7 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, { const struct intel_gvt_gtt_pte_ops *pte_ops = vgpu->gvt->gtt.pte_ops; struct intel_gvt_gtt_entry se = *ge; - unsigned long gfn, page_size = PAGE_SIZE; + unsigned long gfn; dma_addr_t dma_addr; int ret; @@ -1313,13 +1302,12 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, return split_64KB_gtt_entry(vgpu, spt, index, &se); case GTT_TYPE_PPGTT_PTE_2M_ENTRY: gvt_vdbg_mm("shadow 2M gtt entry\n"); - ret = is_2MB_gtt_possible(vgpu, ge); + ret = try_map_2MB_gtt_entry(vgpu, ge, &dma_addr); if (ret == 0) return split_2MB_gtt_entry(vgpu, spt, index, &se); else if (ret < 0) return ret; - page_size = I915_GTT_PAGE_SIZE_2M; - break; + goto set_shadow_entry; case GTT_TYPE_PPGTT_PTE_1G_ENTRY: gvt_vgpu_err("GVT doesn't support 1GB entry\n"); return -EINVAL; @@ -1328,10 +1316,11 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, } /* direct shadow */ - ret = intel_gvt_dma_map_guest_page(vgpu, gfn, page_size, &dma_addr); + ret = intel_gvt_dma_map_guest_page(vgpu, gfn, PAGE_SIZE, &dma_addr); if (ret) return -ENXIO; +set_shadow_entry: pte_ops->set_pfn(&se, dma_addr >> PAGE_SHIFT); ppgtt_set_shadow_entry(spt, &se, index); return 0;