From patchwork Sat Jul 29 01:35:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127961 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp805523vqg; Fri, 28 Jul 2023 19:24:15 -0700 (PDT) X-Google-Smtp-Source: APBJJlEhN9sux5fDFLOqyXl5n60TZvUpy5FCmSWVT1mIvKXEWJFIitVJ4QHWmWSPMjrOqUn3NU28 X-Received: by 2002:a17:90a:9f94:b0:267:eefe:d0b5 with SMTP id o20-20020a17090a9f9400b00267eefed0b5mr3428307pjp.46.1690597454662; Fri, 28 Jul 2023 19:24:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690597454; cv=none; d=google.com; s=arc-20160816; b=dhPg3mvSuNwFnKC++1nbOPR/v8fzpKkIIp/PTfaF31Kvvi/hWyafzr7nvJiBJEG+1K gJQAbvjjrApFfa5ez0phBHfVmHYrYGrL4qqlvwqoGZB/wDxpzgKFJEskGzdjzzqxuHcl +m+qq6sGJ/PtCiTLKy8MuziPXNjMFOkuuCOCc0NQ/7yL5xpuajMDqwX9/6X85CJ3aPxr ZtPFdGR4BNZvdysThGZvUr48GfA4Dqu+dmeIU0mBu3fWCxz41ZQZRK1pVsQysEDhKNyh 2wLoe32RGGuK9slyhn9qibiUMxYe0iKhswcHTlzPB8+EVqrXl+DJB3tY2EOZD4iBcNHM YZTw== 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=fW+zeLl0d3GvBZwCEAwlFx7jr5U4FE8sODZ9RvpbNnI=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=wzeXqnl3e6lfTvCrOr8fuEYosgZ7EQh6JSkk+HM7/2Hf8V4mNKUBKNFvsKHUDwi8Zc HGmBW1mnBnbvnJozXePD7QuMICRbgIw/KnllrmnCyAT+9o739L1+2omqtVh2y5ZHeSOv qOr+SJ6ljKHlHqw5nxpkZxF5RyqpHY++6lBSSsrZdDKfbGYiNPw0Y+HSExxzaBA0yrJu +3CrsmlTsIT1YQSJLaUoDD9le0aiO9xCYTpjCA5V3VPkjteHmghopJ2wBFTowUrZDqZc 7q5RBYZXLpe8O945CjTPe+4bs7Xryp4knP5T1IDmPGGcr6q5P5X2GD+crAK7uGSX+ZFO GpNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=ZP2Pl1U+; 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 x32-20020a17090a6c2300b002680a02d78dsi5519909pjj.9.2023.07.28.19.24.00; Fri, 28 Jul 2023 19:24:14 -0700 (PDT) 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=20221208 header.b=ZP2Pl1U+; 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 S237083AbjG2Bfs (ORCPT + 99 others); Fri, 28 Jul 2023 21:35:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231859AbjG2Bfq (ORCPT ); Fri, 28 Jul 2023 21:35:46 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42CFEE58 for ; Fri, 28 Jul 2023 18:35:45 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-cf4cb742715so2444587276.2 for ; Fri, 28 Jul 2023 18:35:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594544; x=1691199344; 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=fW+zeLl0d3GvBZwCEAwlFx7jr5U4FE8sODZ9RvpbNnI=; b=ZP2Pl1U+VMG9eIcFe1thgUAFsc8cZjkOgPAjp9pDooSSsuJ2j1IZOS08mKcskS4QYf pOXDSlUcYjELo1efpHRXVtgHB5y7GpDNQUMco/ZqNeHucoPdW3Y+rlVQNz25meZc7hqq 5RNNwpLrak8abUMmSRtmmh8AaDlM9YcDnXUwD6csXaCt+0zy1bTiHq7gwzTzbt28WWc8 8QORYHFn6N2qOJveGmETgH9unGEwC9f/hkfDgCu1zRLzUBiNYnGBWnMbpgxn+2YTbBT0 XSWD6sjGPelyY0Y3oKO6zCWGJa81RfHN/ZhFDivLtF2rE33X8pVMkHMndFMtf1evPZJb odwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594544; x=1691199344; 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=fW+zeLl0d3GvBZwCEAwlFx7jr5U4FE8sODZ9RvpbNnI=; b=FBx7I2BqMujNZxlaIPwKMkusxe6RD31z8eXtMJ43YCsivq4/8UF5khUHoMzCkzI4ES wu1T+MkOKX7M8IvJV7US0MoCMHbg74X9vrPT2Chx7smdSIBZs6uBnYWSuyUpAqfPfCoR SMJOl1BzqWiF85s1nbPKE+Sv/aJzoBh7xt3qgzBS3P28sbSgamhibAe+pfs+fU9FHxKx 8zdetzGK+gZ9wUGrdsptUB/QIoQ7LeabGwLeycPsBh+B/3g9Zag5yzu2ZZpumf/A3pYh U4UDva2VTcuOi9rnxZjgzw6YhtYN9KSeEtEehQUy9kc5UiXXzBTfZL80xvJywZlW1MMo IC9g== X-Gm-Message-State: ABy/qLb7uVATTI3vZGPpmYI3UXeyViKjuTYtW0N9YvAMNErYkCOHS06C OsDHt5SXbEHQAyH7cbSfFbP+fSfdgIU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:2508:0:b0:d05:e080:63c6 with SMTP id l8-20020a252508000000b00d05e08063c6mr18632ybl.9.1690594544514; Fri, 28 Jul 2023 18:35:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:07 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-2-seanjc@google.com> Subject: [PATCH v4 01/29] drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page" 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772719916473782767 X-GMAIL-MSGID: 1772719916473782767 Check that the pfn found by gfn_to_pfn() is actually backed by "struct page" memory prior to retrieving and dereferencing the page. KVM supports backing guest memory with VM_PFNMAP, VM_IO, etc., and so there is no guarantee the pfn returned by gfn_to_pfn() has an associated "struct page". Fixes: b901b252b6cf ("drm/i915/gvt: Add 2M huge gtt support") Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/gtt.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 4ec85308379a..58b9b316ae46 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1183,6 +1183,10 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, pfn = gfn_to_pfn(vgpu->vfio_device.kvm, ops->get_pfn(entry)); if (is_error_noslot_pfn(pfn)) return -EINVAL; + + if (!pfn_valid(pfn)) + return -EINVAL; + return PageTransHuge(pfn_to_page(pfn)); } From patchwork Sat Jul 29 01:35:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127997 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp830085vqg; Fri, 28 Jul 2023 20:51:49 -0700 (PDT) X-Google-Smtp-Source: APBJJlF41QcgAD4m1qBFTUwQqoH3hNruIPYYS9snulbMJBB20pFfOIZ3Ybtfb0OSpj7n2BuloOZm X-Received: by 2002:a05:6a00:2192:b0:664:aff0:240 with SMTP id h18-20020a056a00219200b00664aff00240mr3856591pfi.33.1690602709374; Fri, 28 Jul 2023 20:51:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690602709; cv=none; d=google.com; s=arc-20160816; b=VKP2aUBN0A/CI+qTC6+ZuDnJShzb0KqbutPj3oCCXzEzWsA/gAGWm0E2OyO+p4glgS b0diV2sbXcq22NszhFo048X6C0SA/X75Go80q8be60Azy/VuqeAYyHZy5zvtm8fG4bwb EvWOvVd87dBpmBSNdrptXnKsn7eHPH8017HPlDy1k5Glbe9tItgL0sdEh8Ib5Dwd1LLh ty+wLDyFzrEeS9YCxMrl5iPFLa87jb19Q4nLMxe7WNUThKtpOmr92FvKWR1BrI7RjD10 nEFSqRdDpCGXS1APC8O9C3m05utJbueE9QhV4bBoCdDgI0991WnLEtLE5WkV/0p287xT oe6w== 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=YXSv3END2Klqtx+yY5wHfQk5zXL7nBePduqABQQ83FM=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=JmE8HuXe4I2qlZ8Xkf9GnjcvfvtnoCpy8eeVjk4DZOH645FH13gC04rGY9T2IRBVhu Dvp+01QMl61vgopIGQjxTAvwyjHi250KFpGtckpVbbxVq1/a+DPEUb/0woCCgxAYMnbx ZJcRT9WZEVkJDitc4lpeFCx/yeFh4kwWb84xTpSBerawvvoa0cqwOx2joFW/9T9TDMF0 2KZFqDS3AmU/iIjfgMHYt+MSIMKRfyZCqMlu72VV+KrLzRCYv3vxDHz0NuqoOxnI7xgm gGvUp9TLD9PUWS6GMVcrBt57gqJ3MfKI8lnzggj9BfbPAyvYefPQxdFe2/eUjM0D54dV w74g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=xjh6Wzfp; 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 a184-20020a6390c1000000b00563f2eeffaesi3934636pge.598.2023.07.28.20.51.36; Fri, 28 Jul 2023 20:51:49 -0700 (PDT) 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=20221208 header.b=xjh6Wzfp; 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 S237334AbjG2Bfy (ORCPT + 99 others); Fri, 28 Jul 2023 21:35:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236363AbjG2Bfs (ORCPT ); Fri, 28 Jul 2023 21:35:48 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40B8D2D5D for ; Fri, 28 Jul 2023 18:35:47 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 41be03b00d2f7-55c7bb27977so2436040a12.0 for ; Fri, 28 Jul 2023 18:35:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594547; x=1691199347; 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=YXSv3END2Klqtx+yY5wHfQk5zXL7nBePduqABQQ83FM=; b=xjh6WzfpEV1RIRBvrT6h0mWl/5NIXPREobuFZQi3RL9n9nfwT6WhJvboZ8uGRKYk64 Yt/NZx5iAq6LD2P8zJHcShyTuWnPPVAVwZ7s5UC7Ub38emeW2tPRPJWKNGPu0pOkOcRv 1hnqHWplD7S1lZ1bCLN8v1C7cg1OH5GJqLo1C/8fkmlsMCsLdOJhDbw0CMJSdIRvVJSd eSi31mjewEiAOjxoaWcFuJKjZhphR7SfyJeyKlx97pU2Ypr8ZdeKlp1SikYc9bVLuZnN FNKKGK64OIfOQQ1MnZM7dkBH/oHzh1inoFZnUulrkWaGD5+xpzezsSD+aykKUifV/NYd Pk6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594547; x=1691199347; 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=YXSv3END2Klqtx+yY5wHfQk5zXL7nBePduqABQQ83FM=; b=TCkxq/LGAzhFmj0fngrPwmmo64yQC1He/Ue66g07ecnZMaFZ+2gkV/qY7C7zn693Z/ ay4HfEjgf/uJZVJ4eYAebDFvTFTYJW3RhG8nBtVbd7+fZZtbnZnRflBjCMvJ06+5/nY7 gtXG/jg3QbRIQgB9TnOEZ+9fIIEt0uLMWPKxCUn7655+j+OWAA+kl7w93/aykkqnV1fg 4GFBVrltHhkB3xptQgKHFBzWBq6fFy1BkUWeSSTBnOC+yV8/gDntR6HZYs2pxlo7MrS2 madkL5lx8gIzkxftYOEtEQK2Bf6ucTmn+TwmnvETySG/vROlPJmokQ7eLlXlEsojZwcg KK3w== X-Gm-Message-State: ABy/qLaLUb0jPFuM31owiHHQQx0cYImq8m1icegDZ34dKlib7j/x+KEj URSwPc7qQXTwJIjRiv/7QsIMhoe5UhQ= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:ce84:b0:1b8:2cee:946b with SMTP id f4-20020a170902ce8400b001b82cee946bmr15038plg.11.1690594546523; Fri, 28 Jul 2023 18:35:46 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:08 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-3-seanjc@google.com> Subject: [PATCH v4 02/29] drm/i915/gvt: remove interface intel_gvt_is_valid_gfn 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772725426595405112 X-GMAIL-MSGID: 1772725426595405112 From: Yan Zhao Currently intel_gvt_is_valid_gfn() is called in two places: (1) shadowing guest GGTT entry (2) shadowing guest PPGTT leaf entry, which was introduced in commit cc753fbe1ac4 ("drm/i915/gvt: validate gfn before set shadow page entry"). However, now it's not necessary to call this interface any more, because a. GGTT partial write issue has been fixed by commit bc0686ff5fad ("drm/i915/gvt: support inconsecutive partial gtt entry write") commit 510fe10b6180 ("drm/i915/gvt: fix a bug of partially write ggtt enties") b. PPGTT resides in normal guest RAM and we only treat 8-byte writes as valid page table writes. Any invalid GPA found is regarded as an error, either due to guest misbehavior/attack or bug in host shadow code. So,rather than do GFN pre-checking and replace invalid GFNs with scratch GFN and continue silently, just remove the pre-checking and abort PPGTT shadowing on error detected. c. GFN validity check is still performed in intel_gvt_dma_map_guest_page() --> gvt_pin_guest_page(). It's more desirable to call VFIO interface to do both validity check and mapping. Calling intel_gvt_is_valid_gfn() to do GFN validity check from KVM side while later mapping the GFN through VFIO interface is unnecessarily fragile and confusing for unaware readers. Signed-off-by: Yan Zhao [sean: remove now-unused local variables] Acked-by: Zhi Wang Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- drivers/gpu/drm/i915/gvt/gtt.c | 36 +--------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 58b9b316ae46..f30922c55a0c 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -49,22 +49,6 @@ static bool enable_out_of_sync = false; static int preallocated_oos_pages = 8192; -static bool intel_gvt_is_valid_gfn(struct intel_vgpu *vgpu, unsigned long gfn) -{ - struct kvm *kvm = vgpu->vfio_device.kvm; - int idx; - bool ret; - - if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) - return false; - - idx = srcu_read_lock(&kvm->srcu); - ret = kvm_is_visible_gfn(kvm, gfn); - srcu_read_unlock(&kvm->srcu, idx); - - return ret; -} - /* * validate a gm address and related range size, * translate it to host gm address @@ -1333,11 +1317,9 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, static int ppgtt_populate_spt(struct intel_vgpu_ppgtt_spt *spt) { struct intel_vgpu *vgpu = spt->vgpu; - struct intel_gvt *gvt = vgpu->gvt; - const struct intel_gvt_gtt_pte_ops *ops = gvt->gtt.pte_ops; struct intel_vgpu_ppgtt_spt *s; struct intel_gvt_gtt_entry se, ge; - unsigned long gfn, i; + unsigned long i; int ret; trace_spt_change(spt->vgpu->id, "born", spt, @@ -1354,13 +1336,6 @@ static int ppgtt_populate_spt(struct intel_vgpu_ppgtt_spt *spt) ppgtt_generate_shadow_entry(&se, s, &ge); ppgtt_set_shadow_entry(spt, &se, i); } else { - gfn = ops->get_pfn(&ge); - if (!intel_gvt_is_valid_gfn(vgpu, gfn)) { - ops->set_pfn(&se, gvt->gtt.scratch_mfn); - ppgtt_set_shadow_entry(spt, &se, i); - continue; - } - ret = ppgtt_populate_shadow_entry(vgpu, spt, i, &ge); if (ret) goto fail; @@ -2335,14 +2310,6 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off, m.val64 = e.val64; m.type = e.type; - /* one PTE update may be issued in multiple writes and the - * first write may not construct a valid gfn - */ - if (!intel_gvt_is_valid_gfn(vgpu, gfn)) { - ops->set_pfn(&m, gvt->gtt.scratch_mfn); - goto out; - } - ret = intel_gvt_dma_map_guest_page(vgpu, gfn, PAGE_SIZE, &dma_addr); if (ret) { @@ -2359,7 +2326,6 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off, ops->clear_present(&m); } -out: ggtt_set_guest_entry(ggtt_mm, &e, g_gtt_index); ggtt_get_host_entry(ggtt_mm, &e, g_gtt_index); From patchwork Sat Jul 29 01:35:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127983 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp815128vqg; Fri, 28 Jul 2023 19:58:46 -0700 (PDT) X-Google-Smtp-Source: APBJJlFOQlvpENqSe9JjYR+z5PhDSark3G5cqzAT3OTwx2k05oFFpg7uL1kj7v/Jo6inGGOE+R0q X-Received: by 2002:a05:6a20:8e04:b0:132:f926:5891 with SMTP id y4-20020a056a208e0400b00132f9265891mr4707601pzj.4.1690599526573; Fri, 28 Jul 2023 19:58:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690599526; cv=none; d=google.com; s=arc-20160816; b=b6Kv85O1l8t4vAOSoQkwdvewTrdPcwtBDjBg5/07EbFD9rahYs9BTASPYnPJtvzcCk BWY2wVQ76984OVXN9F3IAfLIYQNCeXVcdiGa2++f2vxCVj4RAJEbc1LjO4e8FNHE7dFT 2B2mVLu5xUCt2JxtuQ0Z42luN2x+dIGHsVgQwAVaB3LpGjJ+MgjQw0qGVul3hmscoUBX VTtZikZOj8enPGlLBky+10Xj7/hCbvUCbpnceoEGeZ5H6ONynaDod0eG/1SDDL5r230p 3RYdEUgLJ+LCLUd91Mu2bZWaIRbfspg/F2nPbgJk2rLGyLA9TfoHELdbm3/9mV3ptNJD NFhQ== 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=jEX944Eq3FR7IMm0zyV2J78IA1pYMR7a1LBZmsndkp4=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=PBWVqLrm7O8/VArbcZhHTF1MRur/yROfhxe7BJkdrbOJBQj2+3O6xNIejV/b2TLfi0 pBeKblYsegWixxwTBnk6aspT/P0JLDyVSmU3QLiAghKfLMYf2sIZf5ld9A0vKg7JDGzV ayDvzFD9VYtpekNDSxCynsVvJ0levJeXHIeoJAHHE+jphn/pkJRCu4YbO+TxRtXeXRmb BTlz3VmuMCTEWwsLOd1gQx6kfLyc1biYJnVCb0e1CmGLZJ6Y/cINet6gguybWYQJwjyu FzvFxYgixCjCrkdMi63DGF6U/q3YmPbYvZm3chu6tMpU3cxemcpLN3ekoJ12mKInphRX hO6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=EusHJXEx; 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 u64-20020a638543000000b0055bc97cc885si3802897pgd.614.2023.07.28.19.58.33; Fri, 28 Jul 2023 19:58:46 -0700 (PDT) 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=20221208 header.b=EusHJXEx; 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 S237459AbjG2Bf5 (ORCPT + 99 others); Fri, 28 Jul 2023 21:35:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237373AbjG2Bfw (ORCPT ); Fri, 28 Jul 2023 21:35:52 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 731BC3C12 for ; Fri, 28 Jul 2023 18:35:50 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-584139b6b03so27878337b3.3 for ; Fri, 28 Jul 2023 18:35:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594549; x=1691199349; 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=jEX944Eq3FR7IMm0zyV2J78IA1pYMR7a1LBZmsndkp4=; b=EusHJXExcAmxW94p+Y+WzpBoXgOHGapVubepNLVe1AjQFq4L5DyiXFwSfT7lAKZP2B LbstAlazYFqIHYNHWE9V6nKli4q5Y0K2fyfD216QZG3evAmQp6EgzhArMOhsjP2D0ElV B6qwPZ9a/i9In0E55fHIM4mb9ugp3zYDctkxuHsv6F88IcOYAE2VED+v+Lk/ZmoPYG/2 lkQCY3PhAbTRH+u8Ae/SnMEwzw13MNUKDcBi0qG4LXNUvbTFAvrgKXodpE6AzSf38TDQ sMQJ+cT1fMFi0cUz1wu0ff5mLmSDncQAQiHhjP1MSwt+Xyt6OmHxozc9Cly/LUlxpBCN YceQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594549; x=1691199349; 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=jEX944Eq3FR7IMm0zyV2J78IA1pYMR7a1LBZmsndkp4=; b=fO3DfKCJ4T9TWX2k4HHwSnlVqw7d1GEsDZeZ0B+CUVY7hRkAPI+Ms4aej18Y38etwF K7bLzWT/mAXuLY2A+laiqbpCE16VEXOG2Gqp/RBLQyPCArrJldNE06AGtI5koRl9gGYa AntKFd/0dAv4+I2HDgWIQ+o4ZXGE/957ZTbIpGclMT1WCi/l5o4AX8wxqIXSUZ0JX8y4 Pr6AFKtgIhu7bd5m7CpLCvHoWfqoTCrHC1tb+/7OytV+RHf1eIGxw42LC+9QFNiyRuo1 jWf8Uy3k9I2kMxaaZ44O0OsD7/l8QaGCh+gbXaV9kiHsHSj8Wb5tCmeiBWOrXfOneyCV iF0g== X-Gm-Message-State: ABy/qLZhmRZjFoEBq1CPvBa/Vyl7O1xAqB/5p6ZWJHccCvUwB48jo7Vb rScI+4I4mjdeF4NVeQR8d/5Z/l3Svao= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:af03:0:b0:583:9db4:6c20 with SMTP id n3-20020a81af03000000b005839db46c20mr22745ywh.1.1690594549610; Fri, 28 Jul 2023 18:35:49 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:09 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-4-seanjc@google.com> Subject: [PATCH v4 03/29] drm/i915/gvt: Verify hugepages are contiguous in physical address space 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772722089251497888 X-GMAIL-MSGID: 1772722089251497888 When shadowing a GTT entry with a 2M page, verify that the pfns are contiguous, not just that the struct page pointers are contiguous. The memory map is virtual contiguous if "CONFIG_FLATMEM=y || CONFIG_SPARSEMEM_VMEMMAP=y", but not for "CONFIG_SPARSEMEM=y && CONFIG_SPARSEMEM_VMEMMAP=n", so theoretically KVMGT could encounter struct pages that are virtually contiguous, but not physically contiguous. In practice, this flaw is likely a non-issue as it would cause functional problems iff a section isn't 2M aligned _and_ is directly adjacent to another section with discontiguous pfns. Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/kvmgt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index de675d799c7d..429f0f993a13 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -161,7 +161,7 @@ static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, if (npage == 0) base_page = cur_page; - else if (base_page + npage != cur_page) { + else if (page_to_pfn(base_page) + npage != page_to_pfn(cur_page)) { gvt_vgpu_err("The pages are not continuous\n"); ret = -EINVAL; npage++; From patchwork Sat Jul 29 01:35:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127966 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp807967vqg; Fri, 28 Jul 2023 19:33:13 -0700 (PDT) X-Google-Smtp-Source: APBJJlF/rxmLB5WGWIJ4xrzEmHcq/Ewnn0mvT9QcZtLc8UvPF6S660/dKKYYfaKpUN7RHIMLGcFO X-Received: by 2002:a17:902:f546:b0:1bb:a7bc:37a4 with SMTP id h6-20020a170902f54600b001bba7bc37a4mr3238478plf.24.1690597992710; Fri, 28 Jul 2023 19:33:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690597992; cv=none; d=google.com; s=arc-20160816; b=AJ3Xda0daQP4Ax60sW9Lql73NuVgsrnIjleZhGo/Dax8kLT35ooWrm19umQk21Bd/5 bpQJhbiV9N5VBDb4DsndnGtXcYF71d59N4JDJ0qrv9sPVWekUijhGz1Bl/JTsYOIrkM2 Tgy7n8XKf5JuHG6fI6qFMC7CHQhtU1KkZiw9FOGEuebaje00dFEWT4zPEun7dkzL5ZL8 P+7M/95BodIJUpY9/Xt4WZuDRSIobaRypNNLXQyScgst4PmOGbrfXDxAQhLpAoIYxPcG /SRONmgXM3hgOnUta9A1xxZRBG72H6PEZuZc2TEhw46faipxiEwjrTRnuMcEjQJxpDX2 vucQ== 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=BPHrGdmcO+kiKcILc6YcLgffMmTXNHFWJtVnnvxUR/s=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=dzdCrE9GggLJvXHbghc1EaPFUn8aE53lARraGisEG/AR3Jijx+HLB0dD2jj+8CE5Sj G1n9wm3i6Kpxzcyn/fnkOgg+BksvMvcn6Bq6neZuyGxAw7QSF1S23axMBEBSBuh3B0O9 KIg7qGXewwGZrOiFXBkA6JpbqlnZozQpPSEnJFvo2HbzjV2hHtoMQT7fExcwBi3Pg+yz B0zqXNgGwObgkej3D3vxuczwYMASd/+wHwrzU6JwilTXTGQu/TFrhE4UTKmE1d3Wqzhq jvjvtBK7e20LrlNoJVUBS9whqA37PI9g7KyA4HAcwM5sJtlB4d6tCTTFCtf1iGmJ4AbZ Jkug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=c4f+vKRi; 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 kr11-20020a170903080b00b001bb1504b696si3809301plb.4.2023.07.28.19.32.59; Fri, 28 Jul 2023 19:33:12 -0700 (PDT) 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=20221208 header.b=c4f+vKRi; 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 S237533AbjG2BgC (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237434AbjG2Bfy (ORCPT ); Fri, 28 Jul 2023 21:35:54 -0400 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 4024F3C28 for ; Fri, 28 Jul 2023 18:35:52 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-583312344e7so27158607b3.1 for ; Fri, 28 Jul 2023 18:35:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594551; x=1691199351; 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=BPHrGdmcO+kiKcILc6YcLgffMmTXNHFWJtVnnvxUR/s=; b=c4f+vKRihiToZJXS5OogN8iiE6FLuUvOKkmqCmSim7pH2z/utYWPDP2oVqSVGtkG1A SWNLm1/AyNWFIXSVTCeRRDtPCloczCV9BmHAm4TIQ+6TPoZlYUjmclmXhMw1bNsrwR1p cGrHFdYcS1vUrAfn8uUeNQJFhlilL3d092Hzgj5z4NjaAjqGJnBiMlVL5KIqDHhaenT7 hpX4y8bbb2dzsC+vVyHxWZAym0YK1xIFqTSmPU3Monwr2Rr1dFQr0frCyiv8zIC9GDti Rl/ECx/Fm2afb9uLhum0iHbPNOuhnO2ahivtMk6neha9ZnlXt5q7XUu243mZR+KgHPzY VFcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594551; x=1691199351; 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=BPHrGdmcO+kiKcILc6YcLgffMmTXNHFWJtVnnvxUR/s=; b=V4ecG7A7+OFuvUndJaz61JVixyOmr4BwdoniXFHNFOJLuuU5W/utXWkleP90ezGPXC QgWoR3gPRMNoBGxzmUKIBnbXKEiSuTwH/KQTSf0rwfA+nr/4TUkGc27tmaR/Edqcm1jt JgEGroV8VQcFUzkTf8zy3/gpLx6seSQ8nY7K51RMauSl32KH23/ERC92b91hVV/5Kz+8 CKReDdxf0BQ7wO+XqSu1tCKoV92GrxPKq6JEtmumtpOJ9alg0mqHuoy+haAZFC+AY+cy saBlBWYvg6HZMvJTUK0SESa/G5IiZqTwUx2AuEQASgzctrjk7m51aOTcmkNHiEMRUaAD sfLQ== X-Gm-Message-State: ABy/qLYO/J0gQtmgNSef0G4eTVQ3F0D5Z5QcxxaDD6sOow/wgNLB4kX1 Pz0kso7A9vFwsQVQJ7Zmemka+Q5+aMw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:690c:711:b0:583:591d:3d6c with SMTP id bs17-20020a05690c071100b00583591d3d6cmr26031ywb.0.1690594551561; Fri, 28 Jul 2023 18:35:51 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:10 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-5-seanjc@google.com> Subject: [PATCH v4 04/29] drm/i915/gvt: Don't try to unpin an empty page range 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772720480863522653 X-GMAIL-MSGID: 1772720480863522653 From: Yan Zhao Attempt to unpin pages in the error path of gvt_pin_guest_page() if and only if at least one page was successfully pinned. Unpinning doesn't cause functional problems, but vfio_device_container_unpin_pages() rightfully warns about being asked to unpin zero pages. Signed-off-by: Yan Zhao [sean: write changelog] Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/kvmgt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 429f0f993a13..0366a699baf5 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -172,7 +172,8 @@ static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, *page = base_page; return 0; err: - gvt_unpin_guest_page(vgpu, gfn, npage * PAGE_SIZE); + if (npage) + gvt_unpin_guest_page(vgpu, gfn, npage * PAGE_SIZE); return ret; } From patchwork Sat Jul 29 01:35:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128065 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp919507vqg; Sat, 29 Jul 2023 01:41:02 -0700 (PDT) X-Google-Smtp-Source: APBJJlFeAYnMmhkuJ4N/Ak2oPgkZWZ70RJ9q0k9AQjeYgyu2huHX2vntWJUTFZiR5PVYRLIZoLqJ X-Received: by 2002:a17:90a:3dc5:b0:268:2621:6a41 with SMTP id i63-20020a17090a3dc500b0026826216a41mr3989028pjc.45.1690620061949; Sat, 29 Jul 2023 01:41:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690620061; cv=none; d=google.com; s=arc-20160816; b=Z36JySmhJ/c8BHLXdATPzN2FQ1WC5pGKFTxGpvTf5LTTS/BOFVjRhnWOM+Wvj7RD8N DtSplkgRVJ28V3FYbwfMoebQMU2TzzC7mrmX1Sv80gVyZBtoAE4sv3XvbJPhO/Hd03cb BUO8ouM2RZwlzaQ+QfRI2Rr/uXNCoDT10ruuFyY7DIpG1Ta+36NoccA9ETpMffD2vDRs rRkmbK/DxwpmjaemafF5Wf751rThS1SkzLy0gCyiqOnjIeovDCugahIwxKeUN5XPdTvJ OILv0T8dUwVc29S3f9iqwnqyCaloQYmAs7zuv6tChKpB2quSqzgy05cXFLhQxGhvvL4V S95Q== 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=tz4uZaQVsPCslkoe6oa8SQY3RtzZLjpuGTuCE1x/oxo=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=KxUDBjkXCrQB6cL1tPftjQxw8jxrk4M92yD3s23jp1G8OD2Ld/LuN7lhtxEcBAsj7N CAY5M2qyqx+uRC3+d36xB6w7TF30Nmk16CJfvKKlsoglVFKbSRwGIPk9I8KMES/R5o0D R+bkk3ZqD7OO4EHIUS9ioniYbcwZ0Tdjb9/p2K9ALePVaZ432l4yDETkJHuj7xTa0tTn CPioBJG6BjucXjQNGmK5pSLpntisgc3RBSDbacyt+0akFAUr9K8uibzjJlVQXo9yQCu9 X8TjiRxDEKKP9wv013Wt3D+o3zb+n4EbXOPImASneBokXw80tjZCfMIq3bMje0CsEojl Kdjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=rnGsAGmC; 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 i2-20020a170902e48200b001b9fb1a0465si4121109ple.385.2023.07.29.01.40.48; Sat, 29 Jul 2023 01:41:01 -0700 (PDT) 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=20221208 header.b=rnGsAGmC; 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 S237526AbjG2BgH (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237500AbjG2Bf5 (ORCPT ); Fri, 28 Jul 2023 21:35:57 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A54B3C22 for ; Fri, 28 Jul 2023 18:35:55 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 41be03b00d2f7-55c79a5565aso1694072a12.3 for ; Fri, 28 Jul 2023 18:35:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594554; x=1691199354; 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=tz4uZaQVsPCslkoe6oa8SQY3RtzZLjpuGTuCE1x/oxo=; b=rnGsAGmCsCVkvzk/4CeEhRS1uhNwHejWNQjYMUjzvZ9b23PXZzLzHQ7iKvpLO1Zm5o sEcAHLrTsKB5yVIPzAw8RrH5ORymgpPHAiDM/Xt64Kov2IqERUDoqTcOGXvoUfc0u6QZ X447SLnRfwc80YMR7mIfaKfWAMT5mvZyKlEiZnQwjTwDCpRahtP32ZcYRt0CvZz8E8v4 t+00GUoSXANKgzpGij7yjEmTxBvUqSswKC0SsnODhH6NFOjVBdboK2rHspDOAzwSQjkg IDf0q+2jpzHxwTOMoB02hlRckExnus6yP9NdAAWtZPE/Leok5f6GGdwTeP7Yu3zaGG/L 0eGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594554; x=1691199354; 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=tz4uZaQVsPCslkoe6oa8SQY3RtzZLjpuGTuCE1x/oxo=; b=EyRkZwGpnXwiyVYrDJpN4M4TbMnGgSA/XwEyrjIG4yxs3Ygyu2RVQbUGTEC71zT+D1 KIo5BDPdqjxKEg1giYQQ8QAgxJKy2jydX0kkmsyd0OO6r1p5y2El0iVuvpiQvHm2JANQ T9wPllMxGiofLGEUa93m86Qks57Rv6OUT8deBHvEDH3pKdEpaRh5WoFtw1m73GnuZIy3 2qtGx/jEn+GncFjPVgky9Nz0nvVdVSSaCQC2p0HGlooBAm2jrdyG3epvyW+XYkZ1gqEK KYhw1t+hwux9z6LU1+BRqiHbdPFCHgIH1pblWqq74LJNuf8mWRxjqvVHUF2xlmZX66lS zntg== X-Gm-Message-State: ABy/qLbdm6/2i2LbnldI4Afx+mmNPa9Z1EGV8c7v/OOegDjv+EScM5B9 IDJoZjgKSfqMrNJx7OEn/nbxIx1Zkbs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:e5c1:b0:1b7:edcd:8dcf with SMTP id u1-20020a170902e5c100b001b7edcd8dcfmr14524plf.4.1690594553462; Fri, 28 Jul 2023 18:35:53 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:11 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-6-seanjc@google.com> Subject: [PATCH v4 05/29] drm/i915/gvt: Put the page reference obtained by KVM's gfn_to_pfn() 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772743622343470556 X-GMAIL-MSGID: 1772743622343470556 Put the struct page reference acquired by gfn_to_pfn(), KVM's API is that the caller is ultimately responsible for dropping any reference. Note, kvm_release_pfn_clean() ensures the pfn is actually a refcounted struct page before trying to put any references. Fixes: b901b252b6cf ("drm/i915/gvt: Add 2M huge gtt support") Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/gtt.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index f30922c55a0c..5426a27c1b71 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1158,6 +1158,7 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, { const struct intel_gvt_gtt_pte_ops *ops = vgpu->gvt->gtt.pte_ops; kvm_pfn_t pfn; + int ret; if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) return 0; @@ -1171,7 +1172,9 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, if (!pfn_valid(pfn)) return -EINVAL; - return PageTransHuge(pfn_to_page(pfn)); + ret = PageTransHuge(pfn_to_page(pfn)); + kvm_release_pfn_clean(pfn); + return ret; } static int split_2MB_gtt_entry(struct intel_vgpu *vgpu, From patchwork Sat Jul 29 01:35:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128044 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp904727vqg; Sat, 29 Jul 2023 00:55:30 -0700 (PDT) X-Google-Smtp-Source: APBJJlFZ+jfXh/OHxlwHAjBr0BUkjOwEMzMiSUeAjQ2drENnkJEQFlSPRgfPhUy+rsFo8hUfT6FF X-Received: by 2002:a17:903:1cb:b0:1b8:7483:d488 with SMTP id e11-20020a17090301cb00b001b87483d488mr4604549plh.57.1690617329937; Sat, 29 Jul 2023 00:55:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690617329; cv=none; d=google.com; s=arc-20160816; b=wVM4Bd6rJ7GDgBjRDeXA10dgBLcmtP2K4iO2MsmELGzwdoKh6re4g771pBNiNDJ9hA v4alm+zzpN3NFthVTTa7nMeq76z0tk3qG8ZUjLPeufvbTDBgEzlAdcF+/VkPPQvPdygL QmZ8FtckMhQDUtaTyRXvcsDT808C7j46wFAeLewYJ2tB147MYYm6b3PySqQEBFfLJCe3 YBS4o5yajksABmi7soASbFJ+gxsg+800m0VfEiqH08fNfTt7lXQw5acFWt+wux/1pKB8 nSAgamZw+uZVMT0zR9NSQqv0ZBB4MLe+8jVEN6HtI2cdfx4+AcWzGr9dfGktVKXx+s6/ Hu+g== 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=xRti94I88xI36VdJ1C9pM+DO3reoJ85WhIcKAlj3P2A=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=lgjyxSlbrSf7Gbjhg8uW/HhvDSDdI//CrlbvVGJ5Urj4HfwOqkvNtNyX2/taPx7iqq JvujHGYfAfPKV83SpPSjLrlMtYHIYdZhWbDTRJweWyn4X1pjfe36S5/5acoWuoZ19Mz7 LufNvBtCqF4hf+ElQTartWYl7neSBCRGCv4WAiXY+Yyh4ZX2G35N1arO+5lm9J1nnv1k kLUX9gqpbZzwl8EVgzZwvbD/U7aDxzrrP0Fp15Vf7LaD9ZzoBeVuOLAE5VOt7O9+Ws+m PggT4VFQnpeC84VrYP9AEKSsqJw11KKfE4/S0qBiC1WBUqDdlYCTs5e0TjBFv+IondZy QqRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=JzVeSbak; 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 x18-20020a170902ec9200b001b9d090151esi4629619plg.237.2023.07.29.00.55.16; Sat, 29 Jul 2023 00:55:29 -0700 (PDT) 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=20221208 header.b=JzVeSbak; 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 S237572AbjG2BgM (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237535AbjG2BgC (ORCPT ); Fri, 28 Jul 2023 21:36:02 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 304183C28 for ; Fri, 28 Jul 2023 18:35:56 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1bbd4f526caso20385265ad.3 for ; Fri, 28 Jul 2023 18:35:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594556; x=1691199356; 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=xRti94I88xI36VdJ1C9pM+DO3reoJ85WhIcKAlj3P2A=; b=JzVeSbakvBsITk4WCc6SvXMXZXpKg1sKgNCLCg329z4+CwqicRWa18ItETELkleHut Yv4X8wRd3Le9uqQGPUWs5BUQkj7TQJDt9Eb5fhMjb23YSABFTjI2bzN/glzKpBumIzEs fTGh7mmm0I6apNNmDAUz1eyleS73AlS2QlY8+8eRKCJtqc/P/YOG5SqsNHXCud5EkzFP jE1ZE8Vnryd4Dn0nEp5qJTOVH3Wyqn42CpQxKf2W0v6q+EQhwJBTSDxzWFjjb+QZElus ssNGr64x9a3IHDfdFolrvWOyeULaX7kmUyN6RPwtI37uS4WYyBbIw//m00wT14Fxuhox HQgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594556; x=1691199356; 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=xRti94I88xI36VdJ1C9pM+DO3reoJ85WhIcKAlj3P2A=; b=YZAADWzKucHEgnB9jJer+RgYJZSK3CBP0OEU+ISDP/CiQlHA3+5o1v+L/cfUzecnG/ 2ABcf6B/JfatJSSGXROmxO34rgPbDPb4tKsRAzMqy9CbJs88G3EdE9UgkOjXOMF3CVrk lFF45hLfh5SGWmDZEt3JEJLUGSRqrxNolPHlRhBv6DDV915fY4Wzt9/WDg1P55kbZ5s0 zc+SY98+7dkBvyzf0YU1dqbO5As+T8/y/N7hHo94yzIztEE2HFS+bok7wTNkMCLFH9Im OSzZZ1c5Chq/FluQ9rnxsvjopxE/NKQOrr3gud6eIOJFmE2dq5FwGDv3SHZ96kGmasX3 WNJA== X-Gm-Message-State: ABy/qLYqvG53IhfBbOVXj33Lm1JAxnQXu1kv1iyJDwmlCNhUDfndY+wC jlShCPIdAjz1Mf/hGdEHMdLzNPjhdAw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:230b:b0:1b9:e338:a8b7 with SMTP id d11-20020a170903230b00b001b9e338a8b7mr13091plh.5.1690594556187; Fri, 28 Jul 2023 18:35:56 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:12 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-7-seanjc@google.com> Subject: [PATCH v4 06/29] drm/i915/gvt: Explicitly check that vGPU is attached before shadowing 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772740757500729566 X-GMAIL-MSGID: 1772740757500729566 Move the check that a vGPU is attacked from is_2MB_gtt_possible() all the way up to shadow_ppgtt_mm() to avoid unnecessary work, and to make it more obvious that a future cleanup of is_2MB_gtt_possible() isn't introducing a bug. is_2MB_gtt_possible() has only one caller, ppgtt_populate_shadow_entry(), and all paths in ppgtt_populate_shadow_entry() eventually check for attachment by way of intel_gvt_dma_map_guest_page(). And of the paths that lead to ppgtt_populate_shadow_entry(), shadow_ppgtt_mm() is the only one that doesn't already check for INTEL_VGPU_STATUS_ACTIVE or INTEL_VGPU_STATUS_ATTACHED. workload_thread() <= pick_next_workload() => INTEL_VGPU_STATUS_ACTIVE | -> dispatch_workload() | |-> prepare_workload() | -> intel_vgpu_sync_oos_pages() | | | |-> ppgtt_set_guest_page_sync() | | | |-> sync_oos_page() | | | |-> ppgtt_populate_shadow_entry() | |-> intel_vgpu_flush_post_shadow() | 1: |-> ppgtt_handle_guest_write_page_table() | |-> ppgtt_handle_guest_entry_add() | 2: | -> ppgtt_populate_spt_by_guest_entry() | | | |-> ppgtt_populate_spt() | | | |-> ppgtt_populate_shadow_entry() | | | |-> ppgtt_populate_spt_by_guest_entry() [see 2] | |-> ppgtt_populate_shadow_entry() kvmgt_page_track_write() <= KVM callback => INTEL_VGPU_STATUS_ATTACHED | |-> intel_vgpu_page_track_handler() | |-> ppgtt_write_protection_handler() | |-> ppgtt_handle_guest_write_page_table_bytes() | |-> ppgtt_handle_guest_write_page_table() [see 1] Signed-off-by: Sean Christopherson --- drivers/gpu/drm/i915/gvt/gtt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 5426a27c1b71..2aed31b497c9 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1163,8 +1163,6 @@ static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) return 0; - if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) - return -EINVAL; pfn = gfn_to_pfn(vgpu->vfio_device.kvm, ops->get_pfn(entry)); if (is_error_noslot_pfn(pfn)) return -EINVAL; @@ -1277,6 +1275,9 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, if (!pte_ops->test_present(ge)) return 0; + if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status)) + return -EINVAL; + gfn = pte_ops->get_pfn(ge); switch (ge->type) { From patchwork Sat Jul 29 01:35:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128046 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp904956vqg; Sat, 29 Jul 2023 00:56:19 -0700 (PDT) X-Google-Smtp-Source: APBJJlE3oV21Dzm4TYKo9ADoYQ4GMJlSheHc8AzH4L2jZcKtBYKJxe02Fc9ywtzyf3yZwdMomsMf X-Received: by 2002:a05:6a00:2352:b0:687:1a86:7a78 with SMTP id j18-20020a056a00235200b006871a867a78mr2175687pfj.9.1690617378816; Sat, 29 Jul 2023 00:56:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690617378; cv=none; d=google.com; s=arc-20160816; b=m7DaFZs93NYu3h4eHb2gxK7S99lIjzx5e2jJepjviKvTBN+ZxrKSUYAQJyPI1Gij8T 76RbR9meNQofHEPoLdbUejTsPAiLoeQmUkUGGskdXTMkDHOZnesnFPHwml9aQC9fFBiu vX6fg1IJ3j9SdcMEAkPpexQT6jQNh/O2g2x8f7VZjg3o/i+cWJExRBa+IcDF8iK4wdyC 6Pv6SWKwTezc6E8jgiBEYyiohXexLq5IB0vVo3cgoeaGlJKonrThz13teKWHYXn7zEW/ 4aHSH/g1ddadh+DEMAAf/Zmlt8FB8JVPSSC4sXakL+jqgzQuFatSCxSstTzBhpLMNJtY xq7g== 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=+XjAGHd/pRUURJC5c+iD/2xPUGDJjhirgzMYmue5Z/k=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=nzd6jwd8Kv3J7HlPN2jkgF5cmY+GDVJ5FAtHetLt/SmePASisBYS+RxEFFIXrafatI DGCOyZ5seyqlgt5Al5BCFPAWCK9TezIZ3pJRvl92fXrEtKi1efunPSQSY+33SIOlO+Hj DHJkLZ94dQTC2YRmp9Zdt4U7WeUqkA4ZeTcSI98sW+GBRxjGk+4vs30N5dFQqD4AoGoJ iK8PBRgKYnZfq0TtfvwwSKtuNb8lTvYWIo8QcMcqNPzxnlzfxi4AQjQ7ZNvZzGa+8deo kv7uICcEiC2822kpNGiEFJlTz88ljrle4Q4dKEShwImhQS3AxgR8OapSA1TA4LgkR5wd 972Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=CKHIraU3; 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 l62-20020a639141000000b005641f9701fasi2042925pge.65.2023.07.29.00.56.06; Sat, 29 Jul 2023 00:56:18 -0700 (PDT) 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=20221208 header.b=CKHIraU3; 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 S237607AbjG2Bg1 (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237562AbjG2BgJ (ORCPT ); Fri, 28 Jul 2023 21:36:09 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 99D00449F for ; Fri, 28 Jul 2023 18:35:59 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-d1bcb99b518so2513363276.2 for ; Fri, 28 Jul 2023 18:35:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594558; x=1691199358; 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=+XjAGHd/pRUURJC5c+iD/2xPUGDJjhirgzMYmue5Z/k=; b=CKHIraU33muydXY8T11nRNSenZqtYLuDp2ZQytPMAEgN8FpFJtvv8c6QRBQGgm/m28 5/Ef0IINErZFczYeoHyi2UfkWYU12OwKkPvWHaSFJrjUPZqGfUYERJutLB1aMadZV1Zn SbQEj3XAgke61HqppvVm0rMriHUMBVoTNCE2nLD2YyhY5gcfR1Rhx1wnLXfG2afabSK2 pRkPRHhkAdYbj9t7TkumNFQMi0Xc34gB7AEzsmQRuKqF6zeV/+K8B4Kwdh97aMLi9utI 7XQaYcFW2xHNzFDjGpWhfz4/Z7F4dsBgodxWkzRezSqVS7FOSN25NA1qNujI/xI62XWI jSmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594558; x=1691199358; 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=+XjAGHd/pRUURJC5c+iD/2xPUGDJjhirgzMYmue5Z/k=; b=bruK3V7T0sOC7xsjKQ+4R3SG5y+6BwWW8kk00X5w/6EFPFF1vveRzyz0KJ2mheZa+a 5V6vjgfEfNdZCstCb61zkEOu8mj0IZLyPTNu2GxyHm3c7mrLwz7o9Oc1XKJqvAWSk1jA Tgd9BAPsgHX0AP3Yd+Mc5SKgQ6duMGIYvA0Ve08fgPEpCBB8i8QU5oLVGebdsYDo9CiI C+SgpLw6PXY/k6625pWSUI7UwalzmNQVQDtkH4txWsgHNtnEOA17YQiw8YYxuCQ4N1Ou olKGN1EExZq5t5uYNzllJM8hDISmRiufYpBNmSDaL6nJgJZkCNGQXCVWfrqfE7nuTcgv mixQ== X-Gm-Message-State: ABy/qLaWBfH8ggi9GGxpYXSUC/EVbvuZLPQaPcnd63b7RTrDBSBt9vOl tWRHI1Ch7rqjnqNpAzhPOyw7GYRgRYg= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:e7c8:0:b0:c67:975c:74ab with SMTP id e191-20020a25e7c8000000b00c67975c74abmr19106ybh.4.1690594558122; Fri, 28 Jul 2023 18:35:58 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:13 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-8-seanjc@google.com> Subject: [PATCH v4 07/29] drm/i915/gvt: Error out on an attempt to shadowing an unknown GTT entry type 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772740808363594607 X-GMAIL-MSGID: 1772740808363594607 Bail from ppgtt_populate_shadow_entry() if an unexpected GTT entry type is encountered instead of subtly falling through to the common "direct shadow" path. Eliminating the default/error path's reliance on the common handling will allow hoisting intel_gvt_dma_map_guest_page() into the case statements so that the 2MiB case can try intel_gvt_dma_map_guest_page() and fallback to splitting the entry on failure. Reviewed-by: Zhi Wang Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Yan Zhao --- drivers/gpu/drm/i915/gvt/gtt.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 2aed31b497c9..61e38acee2d5 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1306,6 +1306,7 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, return -EINVAL; default: GEM_BUG_ON(1); + return -EINVAL; } /* direct shadow */ From patchwork Sat Jul 29 01:35:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128036 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp902174vqg; Sat, 29 Jul 2023 00:46:00 -0700 (PDT) X-Google-Smtp-Source: APBJJlH9aVqza43jEj3c99lFUw3Yo7yiUlK0sJfWWZs2DHYNcH6MPD/aLtYs1Fhrj71MdvHQVAUe X-Received: by 2002:a05:6a00:2d84:b0:686:c7be:5259 with SMTP id fb4-20020a056a002d8400b00686c7be5259mr4717992pfb.32.1690616759866; Sat, 29 Jul 2023 00:45:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690616759; cv=none; d=google.com; s=arc-20160816; b=0+vRX4udPSN/GhbmrUR1TSjpx3wiXOG3Fs6mFjz6Otx/+9f01oY8QREvY/EYW6erZF /DRLgTLLMJwIoMFl8FQXo3XiNS6VHtHvDh93S4ALD5rEslUrEdGtQpdumc14Rd7k6K3B L5U8nlZAoTP00WMEoLfclH8aSZwYUlxi49riexB2RDZKNa6xFljSKs2haZF2k2kkfMYx wAU4VY67qFXuYR5/YJr1p8b+YuV+PHHv8H7UHhrJhNrhLZowTVI22q8oIgOOvoLnh24S xj5xzMlaZwUX5A2Ab5bykmMzKefwi+kMCtj0g2rPY9Y/PoDhHdMM9tWa35rvdjOECPRl 8mAQ== 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=yKFNVWvZd8ycnHIIUhm7WcUF006NBJ3bRU9zYbxCvZs=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=cNyBFV8m0t5ppHrVRDXJK8DhbNlFvmF5gqfDGkqrCQqaIrE0WYYnOJvtvbMPt8nJJZ zEe9WhL45ImBI2cfmYpsYW/TdNooD8z7tRzasLIy+xTY+KmHXoaM6ka59tflO7v1/V6J 2iv7ibJ2hM33C0d8fPA3+nrxaUetj84pmZgdxAEDMYDVW+nK+xHCfsENUk/koVzAdlTA yGSLj8Lm53MnhfIKS2U+jxYNLYsFsfeit8QUM+P5hwtnWNlU6Jz1UN9d68OcBzvteNWP A5wI7LZVODy4gRMC9bBLQlZSTF9DWqtu1tAEIlGcm20UXJaPaW0mOkcJOb6lZvnBO0i1 c4dw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=kMH1cT4b; 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 b26-20020a6567da000000b0055c95e91f67si4261304pgs.155.2023.07.29.00.45.47; Sat, 29 Jul 2023 00:45:59 -0700 (PDT) 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=20221208 header.b=kMH1cT4b; 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 S237531AbjG2Bg3 (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237567AbjG2BgJ (ORCPT ); Fri, 28 Jul 2023 21:36:09 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D155A44BE for ; Fri, 28 Jul 2023 18:36:00 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1bbf8cb6250so2497445ad.2 for ; Fri, 28 Jul 2023 18:36:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594559; x=1691199359; 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=yKFNVWvZd8ycnHIIUhm7WcUF006NBJ3bRU9zYbxCvZs=; b=kMH1cT4bUctLtbih7U6lNmQ7TMWE1ptjjULHApVJ+5eO1/rUv3egzhxIOAbEGAUS+z aR27dZMS5oxxbo5wkujg4HYN0l3vETV/JtE856K4OH2L0ML0JLAC8HEtNy4v85zhkXsk V72HPPAqxBOQ5/60jQ0SkxybXk02iF49rK6lo7boMPZ3sPotQpNbscJGbpExHWEMRCia YhRJDjeid0xCqdFVlAE2GYpoX5xZdQJXHeIvwomjCws7Nmh1DwO+gp6F9NxDpD7L8Z5a jvqi//4ebv1Nb/3GDojKqBA21sWbeVsbf9R7dXFJjzjVhPkFzw8z6nIOYyRBoc09y38g Swrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594559; x=1691199359; 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=yKFNVWvZd8ycnHIIUhm7WcUF006NBJ3bRU9zYbxCvZs=; b=hVM2Oj8jtOCBy2jiKaP0EdeVBut1k1VGkh9AtW846fjCTN/GTMNlIWYd6SFHHF1IDF 5NuLIDCb3mQ6I1jqJvvF7bR8SYXCNttczPtAn00UKoXbmKOoiBtUD8MvTvrIspRF/Z6P JZXOIe60Ez1/myPOK2uu0pbuaeTnYsYthcHuBMiEU9IwFMdZ51p9r9KIChnZVTXybB0f 2KfFdmi+6qvRZ9NJ6xbadjsOeWlyfQa8qR06pRVvfexyGTqHf5atDTAgT/DbCV7N8xlh ePrEybogcFWUuq5LB8FUk1l6Lw2i7w8SMtUKRmFVuXPP/8G03RoTixcGZO8nDibsjNyJ 84eg== X-Gm-Message-State: ABy/qLaPihojJizr6uw9OOgdyTQzIc+spEPereMqZc2+Xv3iTYo1VCbi FNzXzSw4m1ZaD8YrBQrLycFYVkFx4Q4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:d511:b0:1b9:ce2c:3bb0 with SMTP id b17-20020a170902d51100b001b9ce2c3bb0mr12784plg.3.1690594559715; Fri, 28 Jul 2023 18:35:59 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:14 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-9-seanjc@google.com> Subject: [PATCH v4 08/29] 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772740159904858147 X-GMAIL-MSGID: 1772740159904858147 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 2MiB GTT entry is possible and instead just try to map the GFN with a 2MiB 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). Open code the check on 2MiB support instead of keeping is_2MB_gtt_possible() around for a single line of code. Move the call to intel_gvt_dma_map_guest_page() for a 4KiB entry into its case statement, i.e. fork the common path into the 4KiB and 2MiB "direct" shadow paths. Keeping the call in the "common" path is arguably more in the spirit of "one change per patch", but retaining the local "page_size" variable is silly, i.e. the call site will be changed either way, and jumping around the no-longer-common code is more subtle and rather odd, i.e. would just need to be immediately cleaned up. Drop the error message from gvt_pin_guest_page() when KVMGT attempts to shadow a 2MiB guest page that isn't backed by a compatible hugepage in the host. Dropping the pre-check on a THP makes it much more likely that the "error" will be encountered in normal operation. Reviewed-by: Yan Zhao Tested-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/gtt.c | 49 ++++++-------------------------- drivers/gpu/drm/i915/gvt/kvmgt.c | 1 - 2 files changed, 8 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index 61e38acee2d5..f505be9e647a 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -1145,36 +1145,6 @@ static inline void ppgtt_generate_shadow_entry(struct intel_gvt_gtt_entry *se, ops->set_pfn(se, s->shadow_page.mfn); } -/* - * Check if can do 2M page - * @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. - */ -static int is_2MB_gtt_possible(struct intel_vgpu *vgpu, - struct intel_gvt_gtt_entry *entry) -{ - const struct intel_gvt_gtt_pte_ops *ops = vgpu->gvt->gtt.pte_ops; - kvm_pfn_t pfn; - int ret; - - if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M)) - return 0; - - pfn = gfn_to_pfn(vgpu->vfio_device.kvm, ops->get_pfn(entry)); - 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; -} - static int split_2MB_gtt_entry(struct intel_vgpu *vgpu, struct intel_vgpu_ppgtt_spt *spt, unsigned long index, struct intel_gvt_gtt_entry *se) @@ -1268,7 +1238,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; @@ -1283,6 +1253,9 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, switch (ge->type) { case GTT_TYPE_PPGTT_PTE_4K_ENTRY: gvt_vdbg_mm("shadow 4K gtt entry\n"); + ret = intel_gvt_dma_map_guest_page(vgpu, gfn, PAGE_SIZE, &dma_addr); + if (ret) + return -ENXIO; break; case GTT_TYPE_PPGTT_PTE_64K_ENTRY: gvt_vdbg_mm("shadow 64K gtt entry\n"); @@ -1294,12 +1267,10 @@ 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); - if (ret == 0) + if (!HAS_PAGE_SIZES(vgpu->gvt->gt->i915, I915_GTT_PAGE_SIZE_2M) || + intel_gvt_dma_map_guest_page(vgpu, gfn, + I915_GTT_PAGE_SIZE_2M, &dma_addr)) return split_2MB_gtt_entry(vgpu, spt, index, &se); - else if (ret < 0) - return ret; - page_size = I915_GTT_PAGE_SIZE_2M; break; case GTT_TYPE_PPGTT_PTE_1G_ENTRY: gvt_vgpu_err("GVT doesn't support 1GB entry\n"); @@ -1309,11 +1280,7 @@ static int ppgtt_populate_shadow_entry(struct intel_vgpu *vgpu, return -EINVAL; } - /* direct shadow */ - ret = intel_gvt_dma_map_guest_page(vgpu, gfn, page_size, &dma_addr); - if (ret) - return -ENXIO; - + /* Successfully shadowed a 4K or 2M page (without splitting). */ pte_ops->set_pfn(&se, dma_addr >> PAGE_SHIFT); ppgtt_set_shadow_entry(spt, &se, index); return 0; diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 0366a699baf5..97c6d3c53710 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -162,7 +162,6 @@ static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn, if (npage == 0) base_page = cur_page; else if (page_to_pfn(base_page) + npage != page_to_pfn(cur_page)) { - gvt_vgpu_err("The pages are not continuous\n"); ret = -EINVAL; npage++; goto err; From patchwork Sat Jul 29 01:35:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127982 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp814850vqg; Fri, 28 Jul 2023 19:57:44 -0700 (PDT) X-Google-Smtp-Source: APBJJlEIQ2YCiStOEIDrGliX6qY3yV/CYRVfo1AYwpaHrfuvnuY1V/mCAeyjqVb9pS4xBRBfxmMK X-Received: by 2002:a17:902:9a82:b0:1bb:83cd:ad8b with SMTP id w2-20020a1709029a8200b001bb83cdad8bmr2812001plp.30.1690599464534; Fri, 28 Jul 2023 19:57:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690599464; cv=none; d=google.com; s=arc-20160816; b=OtENkgJKMd6v1UDV9uBvys3XaIGx2L1++8a14Y8/u4U7roUmD3+aX+VzRJl8k8U0P4 mBi6yqNJryyFYxRFaQTM/zuJ2U6vpQJ0GOHPAbDkAsMclL+1fac6oU6hYAv00hlJmVIM fnqK6jQIdlS3wtbLCEoYwW6ilVUrtTlWOSko20f2gQ15AcQvzqnib359XwmsiCFZXen1 z2SJ3xT3HsutjjSuhlrdvZqZ2uuUs6R3PMJXYgbslikcfxA6U8gx5gWMhtuaKN5PskfI E0b/5IFe2xsmjsLzZ50UG0vp+dyjkK8xY8PpyOcMDVxxOdfLXpYoyZqiEp49fp6ILeK0 XwmQ== 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=/2DXbiQb11naI17RMd9UQ+SDW96I3DO0Ug1YMgWLfXI=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=BZ0CK/Yelb7rqpQduqyc51T1DQJeR7mRu2mefjNap4bL49t/35Ekx78WIT4VV62Z4S svyd5R8fW1u3aW7JhkLpNy/aUqm5KSm2PdS0gjMsDi1VbfPCPU5bpRQit+7ANqiWtDbS zxkFN4NwwMJfpp8EwrUhPHsQRbop6JA2mQDheSdTQsVIDzk30YI0xQaz7wSRfipndszo GKhjB2cp4mN9aG8LsKAubPz122kB2LBqSbeAxRxJ0F1FcLl+3962MqnqQooFaB8DsWqe wN2auNd9cVQclP5CSdlJkSQr0rHom3ES6M0udx0mGsP3s0UNoT2fqpi7naTzSZT6qWJ0 qaMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="N/Xuo31F"; 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 o5-20020a170902d4c500b001b7f4696a2csi4090184plg.347.2023.07.28.19.57.31; Fri, 28 Jul 2023 19:57:44 -0700 (PDT) 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=20221208 header.b="N/Xuo31F"; 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 S237569AbjG2Bgp (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237599AbjG2Bg0 (ORCPT ); Fri, 28 Jul 2023 21:36:26 -0400 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 0328E49D5 for ; Fri, 28 Jul 2023 18:36:02 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-584375eacacso27056177b3.0 for ; Fri, 28 Jul 2023 18:36:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594561; x=1691199361; 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=/2DXbiQb11naI17RMd9UQ+SDW96I3DO0Ug1YMgWLfXI=; b=N/Xuo31FD/HpJ/r+aiswhIOdyyLh/aqswWM/9gDeiWpXkOdw/BybOvDSugphjjH8vY czkCQ+tWVfw/K0ROTwpFPjyoZ51Hk33bVR6kSeUS5Q07NBHU+9puAFJWpliJC7Kcnsgw DFvz5oS/ppK6Pc7hv2pMJ+KN22NAhA7ZjuxoVq5Zi9bmUdnU0M+QCo2g8xsLagNC4PKy saSZeaXWNfeMQ5IHCoKm13WWjRyS4qfzbr2FQrD2W4y2GkvB0Xbs2lZZrrJ+f/6Os44D CcefGXGMTcsMhro4vMfe22toBHH+4FqzhGk8KS/5pO5Cd3dH/EcnHrsxFwYJ1GujncZ1 /cbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594561; x=1691199361; 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=/2DXbiQb11naI17RMd9UQ+SDW96I3DO0Ug1YMgWLfXI=; b=iYSnffQ2sFBAjGu2z3fnFF+Iv7jxeFXapcAXCrmoS9R7zHRumA3x7c2hv5CyubDDFd 5pWKaiA5fRtESolVlynr3O0KXg8GzKQixrirUKTl+b51Ujto7TfKll3jRWFrZbwcmaC3 ZWGmto1962eY3teRU+HnX7JNW4LiMrm0yNzgiXpXnzJvpj3mOSo3s1+67RNJwiuxQ11G Q3GQaN+yq8ybjc7nCguPCWANGdFmptfxRzOZMubPPnJQ3ozRbc1Uj+jk3pvL0YGeaKcs tvGEJsekcPM25b+iQ0G6TiST7baxFfFkwKN3vpWP8ZjYAsAk6Gw9Ut1JlwprVLVBHfdl 7K/Q== X-Gm-Message-State: ABy/qLYvNJMYPomyjP6KGYc8d6Vtm4LJlEdbnl+pwV5a9CjsmyCMMYxS CExAOxPpCF9xhM/vx7dZTGKu7UWD6nk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:ae13:0:b0:576:9519:7085 with SMTP id m19-20020a81ae13000000b0057695197085mr24135ywh.7.1690594561504; Fri, 28 Jul 2023 18:36:01 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:15 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-10-seanjc@google.com> Subject: [PATCH v4 09/29] drm/i915/gvt: Use an "unsigned long" to iterate over memslot gfns 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772722024480688049 X-GMAIL-MSGID: 1772722024480688049 Use an "unsigned long" instead of an "int" when iterating over the gfns in a memslot. The number of pages in the memslot is tracked as an "unsigned long", e.g. KVMGT could theoretically break if a KVM memslot larger than 16TiB were deleted (2^32 * 4KiB). Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/kvmgt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 97c6d3c53710..6f52886c4051 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1620,7 +1620,7 @@ static void kvmgt_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot, struct kvm_page_track_notifier_node *node) { - int i; + unsigned long i; gfn_t gfn; struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); From patchwork Sat Jul 29 01:35:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127968 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp810283vqg; Fri, 28 Jul 2023 19:41:17 -0700 (PDT) X-Google-Smtp-Source: APBJJlFmiXo440qpS1+oOtYdrhtHGVXV1dy25loGOFHWfBV6Bg7rg2VrGCnw8w3CXuV8hdEZk1Zi X-Received: by 2002:a05:6a20:3c8a:b0:135:110c:c6c0 with SMTP id b10-20020a056a203c8a00b00135110cc6c0mr4564634pzj.51.1690598477053; Fri, 28 Jul 2023 19:41:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690598477; cv=none; d=google.com; s=arc-20160816; b=BsLxSzi9CM8rnjZgOWPk8CWRx4lGwcGy/4Ovd69LTyTHsxG44N50ZYnKtrXakoXBY4 gjDFw6gg56YuEWBwlAo14iIafl5O3N/BDLuVWAl1JCHAJ5nJy4pA3whb1vw3v3PPQL+F 8sLXs42QSTqBDh1omAxJ4S17WzzPwmey04OikdSZjE9ihjfYU2Zwj0kUR5O9gZwew5EI L8LrxqS4Kg7224XnHMvEdbkQuaxgo4DAj6loKAZlwN6DezNMgcRyx+ossE98KkEE46lL QkJWGtn+9rEYJzrSjg4RigIlWzSX26/YVQw93QjXCRKNCwcdr2QFevERxQh/yMJkBMGY V/Ig== 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=jR7BnC969pgKWTx9m4VJ/Tnc3fh3TNhcM8FugjFDG5s=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=SrDk9dBiFS/ti7jSt8Wj5k3wYVeiRmrlplypsn/KNVC0gBXyT3DtUjIgALAU7N/YYl Zff7GhUyPGRPiQ8PZxnMeUJjoG8n8ejqbm91L7eyLTHPHhXOqJ5BfD6aJEKCMJSefCT2 FRTSZ8demO0XaGoxUCJxrKAasmAxbet3WQrkMDy/9riS97xMJOVHqD1YGhc6OPn3tdFv INLrfqG01DiAzGNLO/C/SZuwhyescgb9HbEvF/B99fs1EjTyXd1+hPOW3aj08QVzSmJ0 WKChY3DFFwOSlJufTHaUKAGLutdx0BNzLkk5l5K6kDQ0VMPyCoQsDmwK09ZhVOZ3DPL8 Fjdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=385x4Lky; 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 n7-20020a6543c7000000b0055e2bb303b5si3802920pgp.881.2023.07.28.19.41.03; Fri, 28 Jul 2023 19:41:17 -0700 (PDT) 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=20221208 header.b=385x4Lky; 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 S237632AbjG2Bgm (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237592AbjG2BgZ (ORCPT ); Fri, 28 Jul 2023 21:36:25 -0400 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 8F9F54EC7 for ; Fri, 28 Jul 2023 18:36:04 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5843fed1e88so27233747b3.0 for ; Fri, 28 Jul 2023 18:36:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594563; x=1691199363; 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=jR7BnC969pgKWTx9m4VJ/Tnc3fh3TNhcM8FugjFDG5s=; b=385x4LkyYI25EL7vCk2Hi0KW9gS9gZvHL1JnHgzpOaJ1tKPMfr8p5TgIS1XSZ0EIi/ Aky/mkbZy8RLTulRx+02iS/8dJ+/xsaWtEJKweohfsksGnr770bM4aVkxQdDBuBFmVbU p9dq6by8p2R9euXFCDuw2gvAPb1ox98+4vf+gFE9pQftYwNKCt2ZOH+06vvIO4dNxRWI XufM85Q91AQO0WpZEabccAIBG4mYmAvdDcb/7WHQOWYNNTTbzbUtFQa5xgHCeNRJd+4N /ybMSE01dZuDtCAL9r1Vu8lPfEOcqBW8GoeqKarhcfigHu93zQ4DTdRKYe7UCEbOHa4j mGQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594563; x=1691199363; 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=jR7BnC969pgKWTx9m4VJ/Tnc3fh3TNhcM8FugjFDG5s=; b=COpmBXzMPZninF55Cm95UHJkZO/jLKTgYVtK2gD+pWkEK/kONgPRu9wg8m+I/feeEo 89vE2KZ/Wd+pEX2fQsy3FoiMWz7IiCmMzFunNYFPIzJd9TkANAPj9davk2bA0fbNt0pE k409cazawotftWK12HVqF7wQqr1K6wqqLaJytyC9HNmulYqYgTsVjF2SKreRvWR/A3PO N8m9+Q38uH858aYZR6c6KXETG8/dTUUeZioQsUtgZL0PAlyMHjGJAf95AIgibLdpp637 CVXhAQA5jqrPYF52Jg9HerNjItOYEdclPOdPmJe0LnucAFshcMjhUQFIdonE8CcRckIv Zdlw== X-Gm-Message-State: ABy/qLaue6hbKs5dsgJrSUHuWV9ZIz6fViVdOw6ilChtTiaIEWXBA2+V dF9n/HTRZtBwxwzAsMfzDiI109bFAlY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:4007:0:b0:583:4551:858d with SMTP id l7-20020a814007000000b005834551858dmr25400ywn.9.1690594563303; Fri, 28 Jul 2023 18:36:03 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:16 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-11-seanjc@google.com> Subject: [PATCH v4 10/29] drm/i915/gvt: Drop unused helper intel_vgpu_reset_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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772720988496908715 X-GMAIL-MSGID: 1772720988496908715 Drop intel_vgpu_reset_gtt() as it no longer has any callers. In addition to eliminating dead code, this eliminates the last possible scenario where __kvmgt_protect_table_find() can be reached without holding vgpu_lock. Requiring vgpu_lock to be held when calling __kvmgt_protect_table_find() will allow a protecting the gfn hash with vgpu_lock without too much fuss. No functional change intended. Fixes: ba25d977571e ("drm/i915/gvt: Do not destroy ppgtt_mm during vGPU D3->D0.") Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/gtt.c | 18 ------------------ drivers/gpu/drm/i915/gvt/gtt.h | 1 - 2 files changed, 19 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c index f505be9e647a..c3c623b929ce 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.c +++ b/drivers/gpu/drm/i915/gvt/gtt.c @@ -2817,24 +2817,6 @@ void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu, bool invalidate_old) ggtt_invalidate(gvt->gt); } -/** - * intel_vgpu_reset_gtt - reset the all GTT related status - * @vgpu: a vGPU - * - * This function is called from vfio core to reset reset all - * GTT related status, including GGTT, PPGTT, scratch page. - * - */ -void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu) -{ - /* Shadow pages are only created when there is no page - * table tracking data, so remove page tracking data after - * removing the shadow pages. - */ - intel_vgpu_destroy_all_ppgtt_mm(vgpu); - intel_vgpu_reset_ggtt(vgpu, true); -} - /** * intel_gvt_restore_ggtt - restore all vGPU's ggtt entries * @gvt: intel gvt device diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h index a3b0f59ec8bd..4cb183e06e95 100644 --- a/drivers/gpu/drm/i915/gvt/gtt.h +++ b/drivers/gpu/drm/i915/gvt/gtt.h @@ -224,7 +224,6 @@ void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu, bool invalidate_old); void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu); int intel_gvt_init_gtt(struct intel_gvt *gvt); -void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu); void intel_gvt_clean_gtt(struct intel_gvt *gvt); struct intel_vgpu_mm *intel_gvt_find_ppgtt_mm(struct intel_vgpu *vgpu, From patchwork Sat Jul 29 01:35:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128011 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp861005vqg; Fri, 28 Jul 2023 22:38:30 -0700 (PDT) X-Google-Smtp-Source: APBJJlF8ZXvHBxZ6sCZ+JRnL1JoYfC5Do4pFV7RRY9QQX+V0hSdDFAelxKTMO4VvvgC25/Oc3CzC X-Received: by 2002:a05:6a00:1741:b0:686:de6c:a9e5 with SMTP id j1-20020a056a00174100b00686de6ca9e5mr5256308pfc.31.1690609109931; Fri, 28 Jul 2023 22:38:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690609109; cv=none; d=google.com; s=arc-20160816; b=uNpWYW9vFSRBy3iTL76/L9cEgpees//3fKa7mBc/J7XqVlQEqa7ltqm+S5HES78ym/ zgoEbo9O1A7d311hzafBn90PKafCOl9pDbQMpkZlk4xcEkTJEg6U1wdZqjuYAd3/6Xl0 cMu6v93B91OJ31sdwdLdOxaMhwhyUxer0cPsnO+AFMgjpU3+TdkNZybQvEn/6dBejaBR GUK5+Z0MujOMwe8sJLoAhBZhaK0MmCiYezBz+NgSUTYI9TsGj1PiFOGc4/Ptp84+SewZ KSD6EjnU1x5wJgE6woiK1EmkGaM5gG7AaBYe/UY7PP0tDaWRR+Y/RCegBugU6cEJ89L9 RdtQ== 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=SoliYXcqZNhJwX4JC/W6dr2P5TFLV6yeHcBLjtfnO3w=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=xPYl86BYavxytwAxgOk7kKEV3uuJac3BDafwFecIVqtQAa4AGqEu3t+Ahr+yVXusgu ewtD7OFDiqNY4dy2VF/EDjNogtdLxt4IrqVrShHJteW3yMZqRUE9fj0LBtRRWOrPYmF4 a8Bxs9xI43HOH1uPXDuLUyppyxXdE6MivsG3scYAipEImOTW4R4NiezD3Pe1zsbF2esq gooCFCD1W5MQRD/5b099SihXcxblkTqXcA1SA0GiRZ7xncE3JbZx8Wnad27+mspUoK6+ nu3dPN0Bh+eAetAsyKLrt3FFWDkyDB3PCQQwpIEie5B3FaeGZ+9O5rKppR9wQezgI/CW JLGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=i2Y3ZjuG; 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 a13-20020a634d0d000000b0055c5b8a8888si4082946pgb.684.2023.07.28.22.38.16; Fri, 28 Jul 2023 22:38:29 -0700 (PDT) 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=20221208 header.b=i2Y3ZjuG; 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 S237645AbjG2Bgs (ORCPT + 99 others); Fri, 28 Jul 2023 21:36:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47574 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237612AbjG2Bg1 (ORCPT ); Fri, 28 Jul 2023 21:36:27 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A61AC4EE8 for ; Fri, 28 Jul 2023 18:36:06 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-d10792c7582so2449130276.3 for ; Fri, 28 Jul 2023 18:36:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594565; x=1691199365; 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=SoliYXcqZNhJwX4JC/W6dr2P5TFLV6yeHcBLjtfnO3w=; b=i2Y3ZjuGxx6dTI33vqpOntS0rGKh6Xy6EO6sIQ/qLztj3pJ5jqIrfgzxo9NCzZHCqj i4KPR9+94mb8W/PkO+M0iD6e4jS2+CcnwjrTPSSwlArrQQ43Pf1gm4LZT1WpwtXKLi/d ARJPn0Nws82lXlBe+QxnAEnjFTUASubHBBnbK+mJnOsh1jE+G2xgZVV9y+Oh0sIztKFo EC7oCH2+5Ree4ym8NZrYar/k9ljchvITFj6D3l3vhsRKhZUD3atggsYM5VYCUaya/uXQ xaCP47s151vGb7wmrL1WpEBARdQM8Mb4mY89nqnnjdOfpgYr5vCMZjfi8AwK9Mtelzbw Fbeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594565; x=1691199365; 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=SoliYXcqZNhJwX4JC/W6dr2P5TFLV6yeHcBLjtfnO3w=; b=IcsFtFYXzm1zBGZJRHwfGSdQcerMbMvUD+wGNHudxV/IaKWVCLpk+TP9vkfXju1RJn LRRYdAtYEcBF2MaLUqwJorkIcCYDxXcSYpdnT2xMg+/5q0LPe148XIIHRcmGqVWHyLPf QqtsEHHOs2x+6CsR5vOEBMieDdJeSdAefALif4QIWYjo8aaiGsuh/g3WKDbsXAfhQIRy A5gx16tMGed7iV9p+FziFGpD5FSOl1a1E+pEcrEmrt00yXzdi5/qQyBniWJrWQ2G06ip TkxPsiXOLWAm/u7+VU4rrC0QG/J9ttJpR2zDyDz5T3Q69gDxMLzJBDIExEnsJtx+ur+L ++2A== X-Gm-Message-State: ABy/qLYlOtnBZ1KLhO1LJbtNk7klMtntGCQ2kRaLTw8xvXfvqi0JWvWY CkbHYIZ4RKQagF60NDFyWJPUWHY5Cic= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:11ca:b0:d09:b19:fe2c with SMTP id n10-20020a05690211ca00b00d090b19fe2cmr18789ybu.12.1690594565002; Fri, 28 Jul 2023 18:36:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:17 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-12-seanjc@google.com> Subject: [PATCH v4 11/29] drm/i915/gvt: Protect gfn hash table with vgpu_lock 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772732138103492450 X-GMAIL-MSGID: 1772732138103492450 Use vgpu_lock instead of KVM's mmu_lock to protect accesses to the hash table used to track which gfns are write-protected when shadowing the guest's GTT, and hoist the acquisition of vgpu_lock from intel_vgpu_page_track_handler() out to its sole caller, kvmgt_page_track_write(). This fixes a bug where kvmgt_page_track_write(), which doesn't hold kvm->mmu_lock, could race with intel_gvt_page_track_remove() and trigger a use-after-free. Fixing kvmgt_page_track_write() by taking kvm->mmu_lock is not an option as mmu_lock is a r/w spinlock, and intel_vgpu_page_track_handler() might sleep when acquiring vgpu->cache_lock deep down the callstack: intel_vgpu_page_track_handler() | |-> page_track->handler / ppgtt_write_protection_handler() | |-> ppgtt_handle_guest_write_page_table_bytes() | |-> ppgtt_handle_guest_write_page_table() | |-> ppgtt_handle_guest_entry_removal() | |-> ppgtt_invalidate_pte() | |-> intel_gvt_dma_unmap_guest_page() | |-> mutex_lock(&vgpu->cache_lock); Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/kvmgt.c | 55 +++++++++++++++------------ drivers/gpu/drm/i915/gvt/page_track.c | 10 +---- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 6f52886c4051..034be0655daa 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -352,6 +352,8 @@ __kvmgt_protect_table_find(struct intel_vgpu *info, gfn_t gfn) { struct kvmgt_pgfn *p, *res = NULL; + lockdep_assert_held(&info->vgpu_lock); + hash_for_each_possible(info->ptable, p, hnode, gfn) { if (gfn == p->gfn) { res = p; @@ -1553,6 +1555,9 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; + if (kvmgt_gfn_is_write_protected(info, gfn)) + return 0; + idx = srcu_read_lock(&kvm->srcu); slot = gfn_to_memslot(kvm, gfn); if (!slot) { @@ -1561,16 +1566,12 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - - if (kvmgt_gfn_is_write_protected(info, gfn)) - goto out; - kvm_slot_page_track_add_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + write_unlock(&kvm->mmu_lock); + + srcu_read_unlock(&kvm->srcu, idx); + kvmgt_protect_table_add(info, gfn); - -out: - write_unlock(&kvm->mmu_lock); - srcu_read_unlock(&kvm->srcu, idx); return 0; } @@ -1583,24 +1584,22 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; - idx = srcu_read_lock(&kvm->srcu); - slot = gfn_to_memslot(kvm, gfn); - if (!slot) { - srcu_read_unlock(&kvm->srcu, idx); - return -EINVAL; - } - - write_lock(&kvm->mmu_lock); - if (!kvmgt_gfn_is_write_protected(info, gfn)) - goto out; + return 0; + idx = srcu_read_lock(&kvm->srcu); + slot = gfn_to_memslot(kvm, gfn); + if (!slot) { + srcu_read_unlock(&kvm->srcu, idx); + return -EINVAL; + } + + write_lock(&kvm->mmu_lock); kvm_slot_page_track_remove_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + write_unlock(&kvm->mmu_lock); + srcu_read_unlock(&kvm->srcu, idx); + kvmgt_protect_table_del(info, gfn); - -out: - write_unlock(&kvm->mmu_lock); - srcu_read_unlock(&kvm->srcu, idx); return 0; } @@ -1611,9 +1610,13 @@ static void kvmgt_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); + mutex_lock(&info->vgpu_lock); + if (kvmgt_gfn_is_write_protected(info, gpa_to_gfn(gpa))) intel_vgpu_page_track_handler(info, gpa, (void *)val, len); + + mutex_unlock(&info->vgpu_lock); } static void kvmgt_page_track_flush_slot(struct kvm *kvm, @@ -1625,16 +1628,20 @@ static void kvmgt_page_track_flush_slot(struct kvm *kvm, struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); - write_lock(&kvm->mmu_lock); + mutex_lock(&info->vgpu_lock); + for (i = 0; i < slot->npages; i++) { gfn = slot->base_gfn + i; if (kvmgt_gfn_is_write_protected(info, gfn)) { + write_lock(&kvm->mmu_lock); kvm_slot_page_track_remove_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + write_unlock(&kvm->mmu_lock); + kvmgt_protect_table_del(info, gfn); } } - write_unlock(&kvm->mmu_lock); + mutex_unlock(&info->vgpu_lock); } void intel_vgpu_detach_regions(struct intel_vgpu *vgpu) diff --git a/drivers/gpu/drm/i915/gvt/page_track.c b/drivers/gpu/drm/i915/gvt/page_track.c index df34e73cba41..60a65435556d 100644 --- a/drivers/gpu/drm/i915/gvt/page_track.c +++ b/drivers/gpu/drm/i915/gvt/page_track.c @@ -162,13 +162,9 @@ int intel_vgpu_page_track_handler(struct intel_vgpu *vgpu, u64 gpa, struct intel_vgpu_page_track *page_track; int ret = 0; - mutex_lock(&vgpu->vgpu_lock); - page_track = intel_vgpu_find_page_track(vgpu, gpa >> PAGE_SHIFT); - if (!page_track) { - ret = -ENXIO; - goto out; - } + if (!page_track) + return -ENXIO; if (unlikely(vgpu->failsafe)) { /* Remove write protection to prevent furture traps. */ @@ -179,7 +175,5 @@ int intel_vgpu_page_track_handler(struct intel_vgpu *vgpu, u64 gpa, gvt_err("guest page write error, gpa %llx\n", gpa); } -out: - mutex_unlock(&vgpu->vgpu_lock); return ret; } From patchwork Sat Jul 29 01:35:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128052 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp907105vqg; Sat, 29 Jul 2023 01:02:33 -0700 (PDT) X-Google-Smtp-Source: APBJJlGq1MtQewX6Gb0Vi85y9wwBm3gh3aa1pBXCtGDuqKITY23TCn/Oc9BkCNxbuVF1tjRjH96a X-Received: by 2002:a05:6402:64a:b0:50b:c630:a956 with SMTP id u10-20020a056402064a00b0050bc630a956mr3733997edx.17.1690617753311; Sat, 29 Jul 2023 01:02:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690617753; cv=none; d=google.com; s=arc-20160816; b=z0V+7pRMn1AzAAnsR89hrWRwI81y7hHWX8I37VPaaU5XNQX5X0Lr9AIdUKZNi5X4xo 4Db4hNf2NSkaLydGCYemXcPXBwXL13MSaWSxETbAtzUwmxp4e6TH3gI4e4hTuB6+jjry JUf9IM1XGBAwQLFjOmYcLy3Oscso+jxGt6QQxEWWROWjMKFsRgBmS2i7TFieM/3La6nj Gtb41EGtEoDLlc3ttBi/qYaddhJu/wpz2L8JZy4wTv7mH9hfeFU40DzbHS9d7A94qbGz WWWwgW5O44ptRSz/HADQZjR4rFEb8pXzf2tOJcN2pdAbQhP7CqRW2U1l92Z2A0i6flXz 3v7Q== 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=mQ+ZuzEFbl5O8mlpWOHgtbjc+Hc/5HoNzhozE45JaLU=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=r1DVdIfEeMkVrkHG7+EZ6EpQscTy/8WsCtq4QGSZz7Lw8WPcpAImnBoaEXYVNdLyK4 Y6DOc92RVnqJskC0Cl8Lv9jhZyHcVWQPEH7Xzw/7XZMLrzqTV53N0tae+2ZMqGKXPgJp aTuyqj0R/kpl/pI+TYImefwKMSfJbtBmmm25IwxC2nQoLoKcb7uMUvaK4fkt/CY0SlCq XmtyJ7XjKF/JoGQlx5vEV7tZ6oKaKlVJMIr9ME93bvLdKw0FEfiSV3Pdl9Zs+1eO2YNZ FWYuVh7NHxSY4lByM1XJXMCwdkfgp03Brll9y1/utrgOGPMmj9yrG1sh6PvMW2xZy0rp w0sw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=WZConVgD; 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 a7-20020aa7d747000000b005223cf584b9si4004181eds.482.2023.07.29.01.02.08; Sat, 29 Jul 2023 01:02:33 -0700 (PDT) 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=20221208 header.b=WZConVgD; 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 S237624AbjG2BhQ (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237553AbjG2Bg6 (ORCPT ); Fri, 28 Jul 2023 21:36:58 -0400 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 72648449C for ; Fri, 28 Jul 2023 18:36:26 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-585fb08172bso680037b3.2 for ; Fri, 28 Jul 2023 18:36:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594567; x=1691199367; 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=mQ+ZuzEFbl5O8mlpWOHgtbjc+Hc/5HoNzhozE45JaLU=; b=WZConVgDmS5EmLUtUW3mWU7S8RxEZOVUVAu20Avyg+dOT8q99nTIpuz55xULKWjISw iCAurxgWrZk5icw5zY5sztJnmPPEWtvRbD0q5iScqHoLph8A+Trwc9DE/7E+yCbSArRH 096LUklzL9PKq5+7HD3ZdjHqQKTNSLFEp4UUvOIah0va5NhjfqhpczKpIhbbpdSoqBDd /cGZ3dGKnFyE7j7LlLeysb6brynTp1h/cN3eXU8/k167F4MM7x8Jz4AMq8txNwYoq7kz AT8lnb9euANf7Knv+9SQX9b42mS+B949wl6d6R8Hqd1o33mEljeyuwvXAaZrbwAZKY5H xm0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594567; x=1691199367; 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=mQ+ZuzEFbl5O8mlpWOHgtbjc+Hc/5HoNzhozE45JaLU=; b=NVYjFOSjU1W2eH+/2+T0wd6xN9yRhPTbZB7NPckaOGexYRwaahEJx4R7wFKb1pWe9k jw6LuVbKkllORxzDVwT/LQP8IQV/mnlRkcPRdmPuK7cZ+GMpbwFFot6AiX54ozb2K5TQ 1XK7s0ke4JPiRLCWrpssPvpov14w1zkOWLYw/hFmUgqLk8aYplNxye1W4CndN2waCuXQ HBWJ0AgMpAx3QdjQ1jpd6z5KT+omurPkk3I9cmXQoreTXxyI3xxoPV9g13+x1lzXVPzp 4xIf8Up44AvKyb4QR+QRjbVsE9KImK17/Bl2hoSh0WrqGX6sTUxthiC2gWlMs9WY9CfV M+Lg== X-Gm-Message-State: ABy/qLa160CmFrx1c2H+yRfaONwzrMVMKMXlx+18sydF+PmjKbW9b85O edQ/xEJEReOlmuvIyiJssKKPjJc6cT8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:2057:0:b0:c41:4696:e879 with SMTP id g84-20020a252057000000b00c414696e879mr17328ybg.7.1690594566810; Fri, 28 Jul 2023 18:36:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:18 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-13-seanjc@google.com> Subject: [PATCH v4 12/29] KVM: x86/mmu: Move kvm_arch_flush_shadow_{all,memslot}() to mmu.c 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772741201489752645 X-GMAIL-MSGID: 1772741201489752645 Move x86's implementation of kvm_arch_flush_shadow_{all,memslot}() into mmu.c, and make kvm_mmu_zap_all() static as it was globally visible only for kvm_arch_flush_shadow_all(). This will allow refactoring kvm_arch_flush_shadow_memslot() to call kvm_mmu_zap_all() directly without having to expose kvm_mmu_zap_all_fast() outside of mmu.c. Keeping everything in mmu.c will also likely simplify supporting TDX, which intends to do zap only relevant SPTEs on memslot updates. No functional change intended. Suggested-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Isaku Yamahata --- arch/x86/include/asm/kvm_host.h | 1 - arch/x86/kvm/mmu/mmu.c | 13 ++++++++++++- arch/x86/kvm/x86.c | 11 ----------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 28bd38303d70..856ec22aceb6 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1832,7 +1832,6 @@ void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm, const struct kvm_memory_slot *memslot); void kvm_mmu_slot_leaf_clear_dirty(struct kvm *kvm, const struct kvm_memory_slot *memslot); -void kvm_mmu_zap_all(struct kvm *kvm); void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen); void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned long kvm_nr_mmu_pages); diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index ec169f5c7dce..c6dee659d592 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -6732,7 +6732,7 @@ void kvm_mmu_slot_leaf_clear_dirty(struct kvm *kvm, */ } -void kvm_mmu_zap_all(struct kvm *kvm) +static void kvm_mmu_zap_all(struct kvm *kvm) { struct kvm_mmu_page *sp, *node; LIST_HEAD(invalid_list); @@ -6757,6 +6757,17 @@ void kvm_mmu_zap_all(struct kvm *kvm) write_unlock(&kvm->mmu_lock); } +void kvm_arch_flush_shadow_all(struct kvm *kvm) +{ + kvm_mmu_zap_all(kvm); +} + +void kvm_arch_flush_shadow_memslot(struct kvm *kvm, + struct kvm_memory_slot *slot) +{ + kvm_page_track_flush_slot(kvm, slot); +} + void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen) { WARN_ON(gen & KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index a6b9bea62fb8..059571d5abed 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12776,17 +12776,6 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, kvm_arch_free_memslot(kvm, old); } -void kvm_arch_flush_shadow_all(struct kvm *kvm) -{ - kvm_mmu_zap_all(kvm); -} - -void kvm_arch_flush_shadow_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot) -{ - kvm_page_track_flush_slot(kvm, slot); -} - static inline bool kvm_guest_apic_has_interrupt(struct kvm_vcpu *vcpu) { return (is_guest_mode(vcpu) && From patchwork Sat Jul 29 01:35:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128024 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp891491vqg; Sat, 29 Jul 2023 00:12:23 -0700 (PDT) X-Google-Smtp-Source: APBJJlHOS9nvO1VIxeTTEuAhU5STBi4YcFgxEe37/UiDB9b7q0kuqG6dtpcMSyv5G7PHIXcGGF/s X-Received: by 2002:a17:90b:4f46:b0:25e:ad19:5f46 with SMTP id pj6-20020a17090b4f4600b0025ead195f46mr3667605pjb.12.1690614743333; Sat, 29 Jul 2023 00:12:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690614743; cv=none; d=google.com; s=arc-20160816; b=fejJigU5xC+FblXQ1bOdNSX36jFEb1RorQAt5/pjnyA5Z4dK6vnmF0ucFgjhXMFeQv 2keK9nTX1sj9NnCqEMb1DT3T7VM2xXRIQFdrTHhOKtXFaHVDMNVoLIXKE+CGHjoPD4s9 huRiWD3yFJlL7LtDza/oLYI6TOLDaZYrBGDapSAQ4UH8HrOqv91mN2rWdEVWuBDmq27j Np4qi9KcGHCA7aPqQKgClm110ZMQZWz3OwMU45Hkxvho1ZZGvlSujcxiFM3UOx1uhdvy 8Vrvuhe9SY4yPNGgRCCwpfM0gDjBqGnwOBxCU7PNdPn26S5En3wecSAL4jSMjLrSHBHU snrQ== 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=LElPg6EV64u55H7Mf5AyrdjNlx5IOWlBkIPEppU8Jnw=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=IjK4gVy8A+JzbqZK6ayCQepwXNdoNtIFkY5MW+g4Z/VulZRR+ZKciEf+7Dd/HQ1fBr 0OOyY7xGXPHdVcx5vLI/zY2TCsawgQ4Q8zPJLql+cz2FS3qx7rsYDG+NNOtvRcVMEPJI ifAXM9EzUwmZ0cyE1sdbooGOv7OOJC5t1bf3RuAGhYgkZJM34ZaRjUHaExxd+6zRW5hS lsmvgyDE4iwPIh3725SEgC42fPsS8d4qxnU5CT/A9nkgLshR2pBAlBc1HZi8+DqwPgR9 RIgRL9hrK8W+kDkkFBiCJjHFF5Ntog2aJRPw1rhCFwFRQHcWrBZlAEA1qWGoSU/SdLuh vd1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=jfCkSXMv; 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 m13-20020a17090a34cd00b002634e08d484si5827332pjf.56.2023.07.29.00.12.06; Sat, 29 Jul 2023 00:12:23 -0700 (PDT) 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=20221208 header.b=jfCkSXMv; 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 S237611AbjG2BhV (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47830 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237597AbjG2BhI (ORCPT ); Fri, 28 Jul 2023 21:37:08 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9EA6F49DE for ; Fri, 28 Jul 2023 18:36:37 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 41be03b00d2f7-5634dbfb8b1so1696430a12.1 for ; Fri, 28 Jul 2023 18:36:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594568; x=1691199368; 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=LElPg6EV64u55H7Mf5AyrdjNlx5IOWlBkIPEppU8Jnw=; b=jfCkSXMvNm0a4r+jhBUQwEXZDOxflF3V10465oegx122JX3cMjyBQ9B6yH6wk+0Jzp UVY6dLZfCVQ0+FBwRm/X8oVmEgDEuMdMqkJVU/heWBSTLawPW9MjAzRT+N1Ynxg/SZNT KNqx0RkGgbjKNuutmmNxcjNPUVwHvZRAkFFuiWse/LAAXFpfuTolirdvvmrpgdLdTv4u Z4LbCo1VWeYHuIu/i1dW/gchrcve2Xo01BA20So28O333O53tZVGRyVXESvsCZFJCXwh 1d9D4TzpmXEjyMHr15owgr2TNH+L6sDCDTgxWySgb2terfpz4qAARImLY+CUy17C8wlM P1Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594568; x=1691199368; 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=LElPg6EV64u55H7Mf5AyrdjNlx5IOWlBkIPEppU8Jnw=; b=hGkLsRPSMn7Ixsf0Mb+Cx/royIK2a6rpCVSIrx7yA2baMaQXLvEUohxQ+uFj+qpBlp x5TutXVwaZ2X1KIhkdQC24ZN9SfNJblDUn4gv4P/TMb+NRD1lntQ4Bau1ZFuDvHhS8+v FeqvmqBnOp/kU+gro2j9tBB544JlYHfNa9ADQE/96FzvIjkAiWoKGbyuaVXANXi7TSpf ZvN9zf52UDZux3cE7utySUln4Z+lvsKmz+4PtAWvwq90uk9CI+ZU1yqKJtk1izoXGcJS nrTZjWauHbOgs21gVIwHSO/KeV+XDGm+84m8ajYdyX5JrEt5RNmGP2AKFGwQL9kUrFUg W1TA== X-Gm-Message-State: ABy/qLau6hLC43e2D2xHH3/ui4Gio/I26PcRU7pmfO6n49WzjNJXx7L4 n7W5/TbkIez8lzA3Vr+OxIOI9GJLr8A= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:c406:b0:1b8:3c5e:2289 with SMTP id k6-20020a170902c40600b001b83c5e2289mr12198plk.2.1690594568714; Fri, 28 Jul 2023 18:36:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:19 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-14-seanjc@google.com> Subject: [PATCH v4 13/29] KVM: x86/mmu: Don't rely on page-track mechanism to flush on memslot change 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772738044829197860 X-GMAIL-MSGID: 1772738044829197860 Call kvm_mmu_zap_all_fast() directly when flushing a memslot instead of bouncing through the page-track mechanism. KVM (unfortunately) needs to zap and flush all page tables on memslot DELETE/MOVE irrespective of whether KVM is shadowing guest page tables. This will allow changing KVM to register a page-track notifier on the first shadow root allocation, and will also allow deleting the misguided kvm_page_track_flush_slot() hook itself once KVM-GT also moves to a different method for reacting to memslot changes. No functional change intended. Cc: Yan Zhao Link: https://lore.kernel.org/r/20221110014821.1548347-2-seanjc@google.com Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/mmu.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index c6dee659d592..79ea57396d97 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -6199,13 +6199,6 @@ static bool kvm_has_zapped_obsolete_pages(struct kvm *kvm) return unlikely(!list_empty_careful(&kvm->arch.zapped_obsolete_pages)); } -static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node) -{ - kvm_mmu_zap_all_fast(kvm); -} - int kvm_mmu_init_vm(struct kvm *kvm) { struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; @@ -6223,7 +6216,6 @@ int kvm_mmu_init_vm(struct kvm *kvm) } node->track_write = kvm_mmu_pte_write; - node->track_flush_slot = kvm_mmu_invalidate_zap_pages_in_memslot; kvm_page_track_register_notifier(kvm, node); kvm->arch.split_page_header_cache.kmem_cache = mmu_page_header_cache; @@ -6765,6 +6757,8 @@ void kvm_arch_flush_shadow_all(struct kvm *kvm) void kvm_arch_flush_shadow_memslot(struct kvm *kvm, struct kvm_memory_slot *slot) { + kvm_mmu_zap_all_fast(kvm); + kvm_page_track_flush_slot(kvm, slot); } From patchwork Sat Jul 29 01:35:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127960 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp805007vqg; Fri, 28 Jul 2023 19:22:34 -0700 (PDT) X-Google-Smtp-Source: APBJJlEXEPozywpTA7cNc5hOToAZr0ca5CbByHrdd41pGgohsv7oQyTVVtVgve5o0IXx5kfekHyW X-Received: by 2002:a05:6a21:4984:b0:132:a85f:b20c with SMTP id ax4-20020a056a21498400b00132a85fb20cmr3645735pzc.38.1690597354576; Fri, 28 Jul 2023 19:22:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690597354; cv=none; d=google.com; s=arc-20160816; b=z2bVkoH2VFodCY8t9ZE196ovAoD0E0YgdonMpvFP/B2i0gSFgyE4C0VHg6vMmRXroL 68iEt8DKvnbrZngisFoYRoC3KqCLxU/uOjegD1A7yVTaGpiX6vhxN7geLrHgJHqePbWs LaBlhTmrbI00MBOv7QINUWAG/MehI++MZ1TU4wv0UALl0je2u8wOGZ7f1vhmyiLzdtA8 EsNJ+98SvfZremz6L4hHqGhjRvmAEtgYSeHt7UBlNVpTkvg4+Y32+FIngDoe0aUwxECz 3Z9gDB4vYVFmw8/Hczu+g3C9VT61o64Xdy5bQzwFa0O2DjeXm0LDKOu+0oMnLSK0pzYM l8fA== 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=qnG2Q2O9+M14LIcRNjXeXqIGSpkqLQtPzrXrnR7kbFQ=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=Vq5w5WAgCfXR3cfzY8mlxIrbO6v6ptiYIjLl5lxQH3EAGDrb6EcTS/CLJvIutBPbBb 1d8mT/JtcaA5uYaoNFwiHAOhC7vzxzL4+7fcp6Otxx+hwQI7Xqv3ZA/CMLMibfW27HaG v/hCPCnNuLI6Ed9zs6PqNonmgXEKmvA+hSs6yDbJ/YxJz1CmjAWQdEQfHSvKa640wdtB 9iyE+tgyoPgntEmoI6zFgiVf2y9KLpXatK5Z2ykXxdov9TXv8b0yQnGxb42YYNxV9jpD tGw+0YQRqXsgUlxhVxVUwp1nnh1asgVnFXDMqdbnT9FUf1/L6j9dKvVu1wRbnm04s/lS hlvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=DipKfATr; 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 h11-20020a63574b000000b0055aeedd94d3si3943924pgm.58.2023.07.28.19.22.08; Fri, 28 Jul 2023 19:22:34 -0700 (PDT) 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=20221208 header.b=DipKfATr; 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 S236976AbjG2BhZ (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236542AbjG2BhN (ORCPT ); Fri, 28 Jul 2023 21:37:13 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8E2F49E8 for ; Fri, 28 Jul 2023 18:36:45 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1bbbc4ae328so20463995ad.1 for ; Fri, 28 Jul 2023 18:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594571; x=1691199371; 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=qnG2Q2O9+M14LIcRNjXeXqIGSpkqLQtPzrXrnR7kbFQ=; b=DipKfATrzm1i1GdU40pmEnUMbAgMLUO5TMhacXhDY5mtEPPaOQ+JkJAdQWDF/kRuAy AOaH6XDUEUFCxCWPCo3J56iInKAkZAxTR3kZ/Ues030T0Hw1UaId5poJwJTDHtrV5C30 FmZ4rf26vnjLvEE+5ymBf14uV7YlNP4DdoSKSU30fdS8sYa9Cltm5nILw/Mi3XPSBYkC 2cyxCE+NDO8sw5ZH3aw/jXpROV0SsnnzVaaQcI/siXf878O8tBo3aNg0rIQ46D4Yj3I+ QbCgMQmSBjH5LnWuAQ6jOtb2HR/q+9R9UFO50ZjlcH3chJa4Fd5jFmqGYwZPUuaevOrD a0ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594571; x=1691199371; 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=qnG2Q2O9+M14LIcRNjXeXqIGSpkqLQtPzrXrnR7kbFQ=; b=Ok2rJYGHVIGWUChv0XW1ypC6+KkecWdVgiJho/ZOsbyWm9M7tPFLwrgOe++HqszY+Y PH0fpq4j88hgywlXa7qlATLcQaQwZHIhde96x4qsI3SeghivlixH4b0vWeb4Xp4YgWpE wi2vE3Ldo4ZohgSzGOPm+ZyqfKrYbgTMN2J8LBSb2NBrMXsp/db/hW50zVcgVGFP8AsF Fmcxj+d4S/8FMe8qAdVH7oIKBztV5j4hyWez+4izxZVCal5/Pyk8ViYijHM3Qo257HgZ jJwKw9K1vdO2KcYB+Y/kbK3U8eRfEIU3K51anXZ9vUULgFWrgdjFtLD1PaCXtSsiccRk kRqg== X-Gm-Message-State: ABy/qLZ839c8jJD+8j/ScTYRillW0YRRCyKWRrntOoMDsc3V3BhsvJ25 WWfcXzM5GVzkfsVtDylrkEqLvSWKh9I= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:1cb:b0:1b9:df8f:888c with SMTP id e11-20020a17090301cb00b001b9df8f888cmr12866plh.8.1690594570871; Fri, 28 Jul 2023 18:36:10 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:20 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-15-seanjc@google.com> Subject: [PATCH v4 14/29] KVM: x86/mmu: Don't bounce through page-track mechanism for guest PTEs 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772719811781803051 X-GMAIL-MSGID: 1772719811781803051 Don't use the generic page-track mechanism to handle writes to guest PTEs in KVM's MMU. KVM's MMU needs access to information that should not be exposed to external page-track users, e.g. KVM needs (for some definitions of "need") the vCPU to query the current paging mode, whereas external users, i.e. KVMGT, have no ties to the current vCPU and so should never need the vCPU. Moving away from the page-track mechanism will allow dropping use of the page-track mechanism for KVM's own MMU, and will also allow simplifying and cleaning up the page-track APIs. Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 1 - arch/x86/kvm/mmu.h | 2 ++ arch/x86/kvm/mmu/mmu.c | 13 ++----------- arch/x86/kvm/mmu/page_track.c | 2 ++ 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 856ec22aceb6..85605f2497bb 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1247,7 +1247,6 @@ struct kvm_arch { * create an NX huge page (without hanging the guest). */ struct list_head possible_nx_huge_pages; - struct kvm_page_track_notifier_node mmu_sp_tracker; struct kvm_page_track_notifier_head track_notifier_head; /* * Protects marking pages unsync during page faults, as TDP MMU page diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h index 92d5a1924fc1..253fb2093d5d 100644 --- a/arch/x86/kvm/mmu.h +++ b/arch/x86/kvm/mmu.h @@ -121,6 +121,8 @@ void kvm_mmu_unload(struct kvm_vcpu *vcpu); void kvm_mmu_free_obsolete_roots(struct kvm_vcpu *vcpu); void kvm_mmu_sync_roots(struct kvm_vcpu *vcpu); void kvm_mmu_sync_prev_roots(struct kvm_vcpu *vcpu); +void kvm_mmu_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, + int bytes); static inline int kvm_mmu_reload(struct kvm_vcpu *vcpu) { diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 79ea57396d97..c404264f8de5 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -5684,9 +5684,8 @@ static u64 *get_written_sptes(struct kvm_mmu_page *sp, gpa_t gpa, int *nspte) return spte; } -static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, - const u8 *new, int bytes, - struct kvm_page_track_notifier_node *node) +void kvm_mmu_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, + int bytes) { gfn_t gfn = gpa >> PAGE_SHIFT; struct kvm_mmu_page *sp; @@ -6201,7 +6200,6 @@ static bool kvm_has_zapped_obsolete_pages(struct kvm *kvm) int kvm_mmu_init_vm(struct kvm *kvm) { - struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; int r; INIT_LIST_HEAD(&kvm->arch.active_mmu_pages); @@ -6215,9 +6213,6 @@ int kvm_mmu_init_vm(struct kvm *kvm) return r; } - node->track_write = kvm_mmu_pte_write; - kvm_page_track_register_notifier(kvm, node); - kvm->arch.split_page_header_cache.kmem_cache = mmu_page_header_cache; kvm->arch.split_page_header_cache.gfp_zero = __GFP_ZERO; @@ -6238,10 +6233,6 @@ static void mmu_free_vm_memory_caches(struct kvm *kvm) void kvm_mmu_uninit_vm(struct kvm *kvm) { - struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; - - kvm_page_track_unregister_notifier(kvm, node); - if (tdp_mmu_enabled) kvm_mmu_uninit_tdp_mmu(kvm); diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 0a2ac438d647..23088c90d2fd 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -274,6 +274,8 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, if (n->track_write) n->track_write(vcpu, gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); + + kvm_mmu_track_write(vcpu, gpa, new, bytes); } /* From patchwork Sat Jul 29 01:35:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127994 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp828153vqg; Fri, 28 Jul 2023 20:45:13 -0700 (PDT) X-Google-Smtp-Source: APBJJlEZyRq9ftZHjUT3B3Tgk10nO14a0JZaFntcyEjQlCf4jg1l+H/9twfnPfagEf+IPCujXSgH X-Received: by 2002:a05:6a20:8e15:b0:13c:b3fe:bc1b with SMTP id y21-20020a056a208e1500b0013cb3febc1bmr3967166pzj.5.1690602312695; Fri, 28 Jul 2023 20:45:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690602312; cv=none; d=google.com; s=arc-20160816; b=0m0RK2mH+O8a6kGtXVCYpsyKZKAkqv+6aafoWs4ZNxA63cz84ihVXv8tKFxnUimbyj i1I+sNDLTTfYerFrmajhQZMA2wgB5kK1RcmdM+MJvDwQVLthkKJFbb+G5xtMGDJZbEFc yXYW+J92fth4lBWbFXNQ4N4ZJMsKg5STnA9nyR+XYu8WZVMQQlStLajyo0v2uuabaoj5 yUES5+bOmAcEw4OtT1zTPg9SvcOGaSFCo2UvtAX/3nJ3QPv3jLt9ydllUnaRTZuzVbCw 8pR2vXmsCRkfd/XBnPU2SaPIC05D/lhdmxGF6rE1FZLdgSnAUolM9tCGSNGj0b9Wwnbf 3SMA== 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=KVEkstowUIhz0uydwJ3D0naAJNpiwT1nt84L07RWSBY=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=kvJ53l/+SnyxK9YzVDCNgbSH78lwikrpLnObFHyyC+luog/AE/3uyfYCtngoWyaqWt mtQoqg8vbVXTkPWgtvLkhwye/YuavtvPKqnDD+1Wu3kr2A2ZKegl9qZVaz9xgFetMD2/ dtOx9xmGtA2Zr+tIGcBO056eKtGFQDq/jUStEL42tVHBgLfSPaaXHv+sJlU3jmLVDglC +zA/VIKNrPItnNozwA6SJg92mEOdJJNb3590+t8yDh3Xa4T7ooK7u5tM/D+0HaRBA+8f wCUoYXyL+qbBEiSTQvXYdlzkE2sFCTN0Sa0KSzk6UB936CEcRGN9JGYdGZERumgElt4O mg7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=cBptjnD2; 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 h185-20020a6383c2000000b0056370a8b95asi3929910pge.878.2023.07.28.20.44.59; Fri, 28 Jul 2023 20:45:12 -0700 (PDT) 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=20221208 header.b=cBptjnD2; 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 S237682AbjG2Bhj (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237623AbjG2BhQ (ORCPT ); Fri, 28 Jul 2023 21:37:16 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BA8B55AC for ; Fri, 28 Jul 2023 18:36:51 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-55c04f5827eso1902108a12.1 for ; Fri, 28 Jul 2023 18:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594573; x=1691199373; 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=KVEkstowUIhz0uydwJ3D0naAJNpiwT1nt84L07RWSBY=; b=cBptjnD28F1FVyp+wznGyw7KjMg/GPnz8ILXKltWExLFhXSqe+0jtQK2xGbaPTZK3O miMTPdcFs2s4R2T+B3ErKC66EQEke3NjbxKtlhGjtiUts4iuEdlwZzTogcAWsKvWFfyU GkYBPBWRa7nizVMiOquTU4R6IdZ+dZikaYPSqCjnp3Q25PD+ybCcBn/auMDbT2lFZvQA Cu4BawW+BHw89FVuGrwFJ94zdkT9G5wvJCTDq64gqH/AX6vw64MhDePtj/Zj2N/HgJuO 80Ui4iyxRhd53twWsg/EGdClWxzjXBKjFSxCZfe2b+vE/HYZA91j4ltVsrR2TE1gSz9q xkMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594573; x=1691199373; 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=KVEkstowUIhz0uydwJ3D0naAJNpiwT1nt84L07RWSBY=; b=RPpS7SNucSjpLczRjzAovQrHk+WVa4trhsF2QkFtPfNNW8OBRBMH4qmLE1J2thbWeV XJWcwR+dWtAPtprUauOqP3syssSXWfLRUi9eO7CRN/qrfkVMDEKUHby4EOAGimRCJiU/ v6Ys8cWb1qU/axYClGFtDKpYOUjP8suVbT1XIdq8+RpaHojLUDu6+4NjSZLfrz8wSGa5 Sk0iTW7gc9kd4E3w/oen2EP6mD7t7sIDbfq9As5dUwFq0xlB347O2/KoonsMnEqSiN17 ilplAoWErxyr4yGvYwo1jnOj/0e9UyP34rinpZvk4W9ZsCDx9IiMcR386yA9e7dSBgSI XgPw== X-Gm-Message-State: ABy/qLZIFGYdJduVZNkYhoxkRQPo0Osbcv3BWJbdzQ0DU+fLWTkjz2sL dL37mLZu3ur+L8JPffbXudy4kWDwbtk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:dac4:b0:1bb:91c9:d334 with SMTP id q4-20020a170902dac400b001bb91c9d334mr11690plx.0.1690594573095; Fri, 28 Jul 2023 18:36:13 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:21 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-16-seanjc@google.com> Subject: [PATCH v4 15/29] KVM: drm/i915/gvt: Drop @vcpu from KVM's ->track_write() hook 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772725010493944567 X-GMAIL-MSGID: 1772725010493944567 Drop @vcpu from KVM's ->track_write() hook provided for external users of the page-track APIs now that KVM itself doesn't use the page-track mechanism. Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- arch/x86/include/asm/kvm_page_track.h | 5 ++--- arch/x86/kvm/mmu/page_track.c | 2 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 10 ++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index eb186bc57f6a..8c4d216e3b2b 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -26,14 +26,13 @@ struct kvm_page_track_notifier_node { * It is called when guest is writing the write-tracked page * and write emulation is finished at that time. * - * @vcpu: the vcpu where the write access happened. * @gpa: the physical address written by guest. * @new: the data was written to the address. * @bytes: the written length. * @node: this node */ - void (*track_write)(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes, struct kvm_page_track_notifier_node *node); + void (*track_write)(gpa_t gpa, const u8 *new, int bytes, + struct kvm_page_track_notifier_node *node); /* * It is called when memory slot is being moved or removed * users can drop write-protection for the pages in that memory slot diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 23088c90d2fd..891e5cc52b45 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -272,7 +272,7 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, srcu_read_lock_held(&head->track_srcu)) if (n->track_write) - n->track_write(vcpu, gpa, new, bytes, n); + n->track_write(gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); kvm_mmu_track_write(vcpu, gpa, new, bytes); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 034be0655daa..e9276500435d 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -106,9 +106,8 @@ struct gvt_dma { #define vfio_dev_to_vgpu(vfio_dev) \ container_of((vfio_dev), struct intel_vgpu, vfio_device) -static void kvmgt_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, - const u8 *val, int len, - struct kvm_page_track_notifier_node *node); +static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, + struct kvm_page_track_notifier_node *node); static void kvmgt_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot, struct kvm_page_track_notifier_node *node); @@ -1603,9 +1602,8 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) return 0; } -static void kvmgt_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, - const u8 *val, int len, - struct kvm_page_track_notifier_node *node) +static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, + struct kvm_page_track_notifier_node *node) { struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); From patchwork Sat Jul 29 01:35:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128021 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp887717vqg; Sat, 29 Jul 2023 00:02:07 -0700 (PDT) X-Google-Smtp-Source: APBJJlE42qNnFrsrwtblE8q1ZKy9kXx7lXLPTcyeHxoJUwu1OpuzGqU6ykhV0DGk+28fFx1CuEKo X-Received: by 2002:aa7:9a8c:0:b0:686:5f73:4eac with SMTP id x12-20020aa79a8c000000b006865f734eacmr4238748pfi.13.1690614127020; Sat, 29 Jul 2023 00:02:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690614127; cv=none; d=google.com; s=arc-20160816; b=ejlebnTsxLVYP5vtJauItv4C0TEhicNR4OSHbmbVRBwNhiAAL6bLSZ5q8mwwlGWeTi o83cyBdWjVfDLQ+zDnVTwAupOO/n5K75tsKHr9ppTKw4NCCY6e9LPm38Ho8NgwH5L+u5 iZ8e2P8C14vidpcuOu3/XcaOOaZol7vFaNlGwTEtYjtfdH1TnbcPk/VBIea4AlpHSRv2 3j/LMNFjzdpnlYt8XvBr7SI2AIpQsRv6on0SIBGoKFGBt6CYRjaTS3SD2QwirL0HqMGY O7RIDxtfgpoTL4APrzvHdTSctvyangz3/O3gm2zmdfHmCHHHNH+3xX5OJUFOCQNJvAqb Vx2Q== 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=z6dQLmm/StL+nbdYI6kfPQ6ebivx3KtEw65/p6OzGX0=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=zmVApXqBwiPFyMdda36IloVm0QWXSGRbhrrV7+3TxcHaNJD9sS5d2+GMQLYE6aHFH5 xz7ZUw+fAKjv1tlUvsYqJPz/+svXnDsvHr8I0iXFWvnYTnORnqhcEWMEoQBKe/2QpZGE pcws9pVYwbOcCdCZXaDTpp49fH6u3vAVappnt+NJhcq6sMaFKMygcRyukWNLWMWQirz3 YXyrDX/VPL99/jARXDY3h6zV3bS2hZlvffJfMxZJTnBaf/duwu6octCaMGmh+E9Zopoz FynCU/83NS87GTvaZ9A5Dd1QFhbASn5W/YO5S19S2Pkdg8cGhMfhUfoU5nPUPX1Y17PN GdxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=PYLMQsUp; 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 m13-20020a656a0d000000b0055bc2561b6esi4401336pgu.673.2023.07.29.00.01.53; Sat, 29 Jul 2023 00:02:07 -0700 (PDT) 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=20221208 header.b=PYLMQsUp; 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 S233803AbjG2Bhn (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237286AbjG2BhS (ORCPT ); Fri, 28 Jul 2023 21:37:18 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F83955B9 for ; Fri, 28 Jul 2023 18:36:54 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-585f254c41aso4634107b3.1 for ; Fri, 28 Jul 2023 18:36:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594575; x=1691199375; 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=z6dQLmm/StL+nbdYI6kfPQ6ebivx3KtEw65/p6OzGX0=; b=PYLMQsUpqHGHMegWWt06xlTjghMitn7mO2KnrzDNEwNAoXINfqnOQJ5ev/u5TXiCKP 2+yGvwd3++Y3BgWFCL1PAfl6WvEWEOlYBM1PAw9/uevnNbMBzA31dU/PCLUz14Ze086P 3mWp6DpT/1yOv5NxTWnhRi/7KAYKYV4EJTEP4DgubEh7CYvnmn7e40/tCw1mQt/fSP8K rgwQCD0pKzsWpApeenl8X3TWcD3e8hrwkA67+KSSpPTZGPWd02uGqR06syUiL8++5vFJ RjtVpZ3MQgE0WTDOnWzCe0gRzokdWSbf9Noet+nTzkmdPSwQ5smVPkLS5Cwky6MgdsL8 c+HQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594575; x=1691199375; 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=z6dQLmm/StL+nbdYI6kfPQ6ebivx3KtEw65/p6OzGX0=; b=KN0i+HgAN++PwNGpk1RHO7cPjsL/zMWVg1jgRj78lGxmhwyRCfLQTOEvs77W80jWcW svRoIMDYA5AJumbQ7uBxGhRxN+46ix0WoIv2Y/LwrjJnJ1HUgcc9tQSRX1p7JXf+7pMf +VTeeBMYZA7CvHveiqMjNQfSS2YIbMGCHuPk47ChbNjAGzfuMeWXvoBKoyjw9kjuxL9R NO2CB385+g4ntVdZpc/vZJxPik5tRi+9fIHSkY7kFbyK3m/oU6twFwIuYsKtvDJ3+9J/ FLb/ewAly0wrz1Rpu83xGAncLPsAsDpIxjMoUGn7oWm3pbnyqDf4ZbUrCnfjKs2HZFAH 2DAA== X-Gm-Message-State: ABy/qLYaA5GbqQnXcYzKDIdnHcptjwsSoGO7JDiRK5h983qf2HuvG5Wr KPSwI8LdFtqJcZXDYbAReBsWValnMcw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:ad5f:0:b0:579:fa4c:1f25 with SMTP id l31-20020a81ad5f000000b00579fa4c1f25mr22783ywk.7.1690594574877; Fri, 28 Jul 2023 18:36:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:22 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-17-seanjc@google.com> Subject: [PATCH v4 16/29] KVM: x86: Reject memslot MOVE operations if KVMGT is attached 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772737398491990336 X-GMAIL-MSGID: 1772737398491990336 Disallow moving memslots if the VM has external page-track users, i.e. if KVMGT is being used to expose a virtual GPU to the guest, as KVMGT doesn't correctly handle moving memory regions. Note, this is potential ABI breakage! E.g. userspace could move regions that aren't shadowed by KVMGT without harming the guest. However, the only known user of KVMGT is QEMU, and QEMU doesn't move generic memory regions. KVM's own support for moving memory regions was also broken for multiple years (albeit for an edge case, but arguably moving RAM is itself an edge case), e.g. see commit edd4fa37baa6 ("KVM: x86: Allocate new rmap and large page tracking when moving memslot"). Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 3 +++ arch/x86/kvm/mmu/page_track.c | 5 +++++ arch/x86/kvm/x86.c | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 8c4d216e3b2b..f744682648e7 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -75,4 +75,7 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes); void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot); + +bool kvm_page_track_has_external_user(struct kvm *kvm); + #endif diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 891e5cc52b45..e6de9638e560 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -303,3 +303,8 @@ void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) n->track_flush_slot(kvm, slot, n); srcu_read_unlock(&head->track_srcu, idx); } + +bool kvm_page_track_has_external_user(struct kvm *kvm) +{ + return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); +} diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 059571d5abed..4394bb49051f 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12606,6 +12606,13 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, struct kvm_memory_slot *new, enum kvm_mr_change change) { + /* + * KVM doesn't support moving memslots when there are external page + * trackers attached to the VM, i.e. if KVMGT is in use. + */ + if (change == KVM_MR_MOVE && kvm_page_track_has_external_user(kvm)) + return -EINVAL; + if (change == KVM_MR_CREATE || change == KVM_MR_MOVE) { if ((new->base_gfn + new->npages - 1) > kvm_mmu_max_gfn()) return -EINVAL; From patchwork Sat Jul 29 01:35:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128026 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp897761vqg; Sat, 29 Jul 2023 00:32:14 -0700 (PDT) X-Google-Smtp-Source: APBJJlFlIfyS1v25vUckNVLGlrzmwsLCZAxtWRMz69P6tefelamFbc9MtraMIFXC2byoxdOjZEt9 X-Received: by 2002:a17:906:5a6a:b0:99b:e04d:3079 with SMTP id my42-20020a1709065a6a00b0099be04d3079mr1432235ejc.19.1690615934339; Sat, 29 Jul 2023 00:32:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690615934; cv=none; d=google.com; s=arc-20160816; b=Z8OLhlLVErjXTx1j0HxLj6eeIVgUx6kKanTLaZa/XO3KNDwcb15SqWrm92ElpWgxM2 X6+bOCPKNho13lZyrKJ2Iehz1OWZgXmnbvvJxQadLr1ghg1znVUHiBQkB0FBnh488c01 2NhzwvbezTOCNwWYg1VpBGPBckkVtAIzvWNIH12Ta6Th32YUyuJgkHDgNf+0B2w8crJo CpE6doxvl5TOeuNyO+PbsC+GJlXmu5by7qvL0xoucP3ld65uQS97jIl1b8TKt4KCOYnq 19ab2MYipXlfdpoNhtckyeYvd/rpKyDaWqkrzoUfEicV6FBS6EtdCz6Y0VwnvIXyR4X4 5dKg== 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=NKdCtniWiAg1ywOiZ6YDPXm5HtZo7eRagpKdBNR7xpg=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=0kL7h2nrvHgEKYyMeoYJW3RH1QvSWwa7qOYa8wB6F63owTdWzoW9UYDJGG3pjxlno/ tKUVOFtV6TrjHB8QFeQFVHljSRwNODtbFmcT5Q1RSZi/zPVQxV+si4xGx7mA9LpvYUEy xfEt7SLJmzvhLbBe0+pqtexlBJKm7eCAy8XBl8vT7W3hQfrHBDgpJXHGhLPIi77KtF3u nMnouMz9K74m0C3IxmYx+Gnm4UOW3qZBtPmhWBWouDhNuDa3+RHE94308b/Twmjs052t dRnC3Wn/6f37n676fH2gGFh1UNt0gU4mZPzihkdncy7silgAqMVFvAD6mdfL+lkmLAEi Ym3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=5Uv4EcFs; 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 n6-20020a170906688600b0098e15543465si3758690ejr.280.2023.07.29.00.31.49; Sat, 29 Jul 2023 00:32:14 -0700 (PDT) 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=20221208 header.b=5Uv4EcFs; 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 S237690AbjG2Bhy (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237670AbjG2BhX (ORCPT ); Fri, 28 Jul 2023 21:37:23 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F03E959D0 for ; Fri, 28 Jul 2023 18:37:05 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-d1ebc896bd7so2540830276.2 for ; Fri, 28 Jul 2023 18:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594577; x=1691199377; 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=NKdCtniWiAg1ywOiZ6YDPXm5HtZo7eRagpKdBNR7xpg=; b=5Uv4EcFsDMD9NsYdJZO7/8bilal5ddhv5oXjy9nAKQerIStaoVew/onb+SGkfBqNof 2A3L/r6MHTGAjoy91PbYkNyIZqhSj+Rg5jo5GTtNjedp97sPqdaRQOHc7gwlvo5jU8vA kxfdHRIh4lvv6FD1geSFpk4NwkD+WEEwwGy3B85/dF9ect82C0iAl04aq+Y6Af05FV+X eXrW2treDagoJmIR73mRzrOOWVmuG7OOwd2Ma2xFq/LHuAyy666HGuXj9cqbQY3SU40h VSBG/8KN0SLJPWJ5J61UOibT5kgPqqUSxMYjl2PUOWixvTmfEoaYCwnesh8KVRoki6BH JQ0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594577; x=1691199377; 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=NKdCtniWiAg1ywOiZ6YDPXm5HtZo7eRagpKdBNR7xpg=; b=Ahaxy6OlMSlVez0yNLpZcPOWMTt7zVNMjjCj5fnrr7YmgRwvYBAe2PZy+s9hVXc5yk h9mNW/n+17dwQwZTALsNKGw/F/OpO5IK/sx7y8CLWRB3Waw2SSKH95/i6cyu9RgV/f8w iI4JUlWBK9bA6rtxTHcZn4TF6XI2NIipTR54D5KsVeBKyLmrRV5vWKuPiwScYJKigp6d S5bP4s3dTs7y50SjNEHsgG3o9roSUouKiQ/crgegQvgFHdtxo5OnFxo+4hGMLzYIgz7a ze2+FoVX5HDtPsw1uI1B8MVBlVGMcEJDAMw91N/Y7LwdzA5c756ZiptKi0nT6qYzgCxS HNnA== X-Gm-Message-State: ABy/qLZzMA6YncuRkQXFv7D795lxbptbHVX9J2opOTdspxjdJziZUKQY eE2XaGOTj5baLZFdaONMFzsByj00ENA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:2086:0:b0:d07:a03b:38a2 with SMTP id g128-20020a252086000000b00d07a03b38a2mr19106ybg.10.1690594576926; Fri, 28 Jul 2023 18:36:16 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:23 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-18-seanjc@google.com> Subject: [PATCH v4 17/29] drm/i915/gvt: Don't bother removing write-protection on to-be-deleted slot 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772739293854809459 X-GMAIL-MSGID: 1772739293854809459 When handling a slot "flush", don't call back into KVM to drop write protection for gfns in the slot. Now that KVM rejects attempts to move memory slots while KVMGT is attached, the only time a slot is "flushed" is when it's being removed, i.e. the memslot and all its write-tracking metadata is about to be deleted. Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/kvmgt.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index e9276500435d..3ea3cb9eb599 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1630,14 +1630,8 @@ static void kvmgt_page_track_flush_slot(struct kvm *kvm, for (i = 0; i < slot->npages; i++) { gfn = slot->base_gfn + i; - if (kvmgt_gfn_is_write_protected(info, gfn)) { - write_lock(&kvm->mmu_lock); - kvm_slot_page_track_remove_page(kvm, slot, gfn, - KVM_PAGE_TRACK_WRITE); - write_unlock(&kvm->mmu_lock); - + if (kvmgt_gfn_is_write_protected(info, gfn)) kvmgt_protect_table_del(info, gfn); - } } mutex_unlock(&info->vgpu_lock); } From patchwork Sat Jul 29 01:35:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128040 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp902874vqg; Sat, 29 Jul 2023 00:48:26 -0700 (PDT) X-Google-Smtp-Source: APBJJlEUSXNDRLBiTPQwUiqe094OhnQTCrNzGyMlKxnPn6wId8VG3ekfFrVS8/2kWy7bZwiCy+/7 X-Received: by 2002:a17:90a:de90:b0:267:f5d1:1dd3 with SMTP id n16-20020a17090ade9000b00267f5d11dd3mr3523071pjv.11.1690616905987; Sat, 29 Jul 2023 00:48:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690616905; cv=none; d=google.com; s=arc-20160816; b=RDxGK2SH1qI8EliX7z32Mm2cZCXGaFOA2J0id5fYPaktGCLDlkXdEAsFjnUtoOd39W hOC/Zpq58sdJsr4nvIeA5gnYDmvhCtWlL49XacDbH5su3YDXqLcW3lhHnJ0E0C8GBXvD pU3/0ncegNPI0LjYd/Z72R0f6tXXWsP52wsgNzYrwRczlggvHSSTv6SDcA0IRzCeMShs 5P+zkfgZv5+GMGZOL2KcPGgqurLe+mmfMi7NPVb25R4ZrBxKI42MSjm+W4akpBt9kAwN ix0aWKdC2xStS9jlu1d2ATCMMsuzIxOrEMyEfrHtegeMkt7CEu4wMMeICqcOjAULdIKi grpA== 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=XilozmZkv3qT4uvOk9OGfExlIfdE0xODj7rqa2Bh8PM=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=VaTUETnzWf/wEkjyP3Phai4Uh00VQN4Wn8kzXT7WIKM+6CkgPbML/b7TyzD0trYPAu rUnZt2sfxqOTByuKlKkHKyjzRltUuDuSXrlA2Wl/qr9jYrQNJVByx+n4REwslA4MS90T hm0UNMAR6QHZjfq1H3nMzdIKNpXi4lwAtBdqj0WPJxcHH5VJ+6SABMQZyRRmY+kvM/ex HtdAvoICFy/9s3vNtcijwTIOOnvh3q+i1kynzNln63SmF73A2mIQdTtqKNcwKB5wQaym giQJMJ2yqwquRxlgMOzrIGA4EXOIJLYyygyD5fmt/GtW0TASqV/O0JqM2nMX8YcvDlTA W3Cw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=hO+4fiF1; 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 ob13-20020a17090b390d00b002675d988010si4422814pjb.91.2023.07.29.00.48.13; Sat, 29 Jul 2023 00:48:25 -0700 (PDT) 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=20221208 header.b=hO+4fiF1; 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 S237648AbjG2Bh4 (ORCPT + 99 others); Fri, 28 Jul 2023 21:37:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237641AbjG2Bh3 (ORCPT ); Fri, 28 Jul 2023 21:37:29 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A67C5244 for ; Fri, 28 Jul 2023 18:37:07 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-d063bd0bae8so2556409276.0 for ; Fri, 28 Jul 2023 18:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594579; x=1691199379; 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=XilozmZkv3qT4uvOk9OGfExlIfdE0xODj7rqa2Bh8PM=; b=hO+4fiF1fkHnVD3UtJj0dyBOtLlEfJYvUvCIOLPoBwDENVolx+BkFi91s6HNCqGH+j btF/f+3/6aZZs711i2sxid1ZXbFkwyF9VUwB5BnTZ9cTQHcX3D9mXN3x42LvCtn3cpy7 0h82vDAJxNZQqiQjV29unyyftMYVH15pLRpV3MwOAUnrpchjL9e6b9Cm9kikbVKI29UH alm0EEIP5+Ul5poFOocf7Haz6qYJe6L80hnqP7PX07ohKA11ufDJLc2sIFgWCTKKZe2p bAVrpvUfXDZekQdfVf4BXGh56pVVZMRFZNbCb0h4jH9pAngMRbqvuqVgOgF7pU6SxXBj ivfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594579; x=1691199379; 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=XilozmZkv3qT4uvOk9OGfExlIfdE0xODj7rqa2Bh8PM=; b=Pqv1DGd+rr1lEzYTgksRIJjDwMk3vKxn5TnjIb/eCNnR3sE7bAmu6kRcKPH/GaYAI5 7DijELtgEXL4neRxLFFLKay7rWjlMbux0MzfaoeozyUX9w3P8GQ9SHi34rUDl3WUhCwc gOLiNm5JafNypsZcTuM5Wl5ajX2qzdSPV8BZP8FAYKnQ5OyuWp1sC5xLWbPy5q2IQ4aq GAkEovB39q5klD0lkm0OU+FIlKPVTu8E/GVT5sPpln7CnLklNwMYcaCM4uHTQc0wKIJU X05pQutQEsHehclKGJ8kU2sscQaZzz+ENFxZYAAAKm871CgmW4dzIa/AO7U9JkdBpzIk GsjA== X-Gm-Message-State: ABy/qLa6Sw7z7ZSaGcHbXIPa7vJM3plBNotUUxkH/Io+N7Wd7Iz/u8Lr 7KcskYFCycaIrWaKfqJib8y7Tuu4+aI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:69c7:0:b0:d07:f1ed:521a with SMTP id e190-20020a2569c7000000b00d07f1ed521amr18224ybc.4.1690594578971; Fri, 28 Jul 2023 18:36:18 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:24 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-19-seanjc@google.com> Subject: [PATCH v4 18/29] KVM: x86: Add a new page-track hook to handle memslot deletion 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772740312746152296 X-GMAIL-MSGID: 1772740312746152296 From: Yan Zhao Add a new page-track hook, track_remove_region(), that is called when a memslot DELETE operation is about to be committed. The "remove" hook will be used by KVMGT and will effectively replace the existing track_flush_slot() altogether now that KVM itself doesn't rely on the "flush" hook either. The "flush" hook is flawed as it's invoked before the memslot operation is guaranteed to succeed, i.e. KVM might ultimately keep the existing memslot without notifying external page track users, a.k.a. KVMGT. In practice, this can't currently happen on x86, but there are no guarantees that won't change in the future, not to mention that "flush" does a very poor job of describing what is happening. Pass in the gfn+nr_pages instead of the slot itself so external users, i.e. KVMGT, don't need to exposed to KVM internals (memslots). This will help set the stage for additional cleanups to the page-track APIs. Opportunistically align the existing srcu_read_lock_held() usage so that the new case doesn't stand out like a sore thumb (and not aligning the new code makes bots unhappy). Cc: Zhenyu Wang Tested-by: Yongwei Ma Signed-off-by: Yan Zhao Co-developed-by: Sean Christopherson Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 12 ++++++++++++ arch/x86/kvm/mmu/page_track.c | 27 +++++++++++++++++++++++++-- arch/x86/kvm/x86.c | 3 +++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index f744682648e7..cfd36c22b467 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -43,6 +43,17 @@ struct kvm_page_track_notifier_node { */ void (*track_flush_slot)(struct kvm *kvm, struct kvm_memory_slot *slot, struct kvm_page_track_notifier_node *node); + + /* + * Invoked when a memory region is removed from the guest. Or in KVM + * terms, when a memslot is deleted. + * + * @gfn: base gfn of the region being removed + * @nr_pages: number of pages in the to-be-removed region + * @node: this node + */ + void (*track_remove_region)(gfn_t gfn, unsigned long nr_pages, + struct kvm_page_track_notifier_node *node); }; int kvm_page_track_init(struct kvm *kvm); @@ -75,6 +86,7 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes); void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot); +void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); bool kvm_page_track_has_external_user(struct kvm *kvm); diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index e6de9638e560..d971c28be99d 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -270,7 +270,7 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, idx = srcu_read_lock(&head->track_srcu); hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, - srcu_read_lock_held(&head->track_srcu)) + srcu_read_lock_held(&head->track_srcu)) if (n->track_write) n->track_write(gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); @@ -298,12 +298,35 @@ void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) idx = srcu_read_lock(&head->track_srcu); hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, - srcu_read_lock_held(&head->track_srcu)) + srcu_read_lock_held(&head->track_srcu)) if (n->track_flush_slot) n->track_flush_slot(kvm, slot, n); srcu_read_unlock(&head->track_srcu, idx); } +/* + * Notify external page track nodes that a memory region is being removed from + * the VM, e.g. so that users can free any associated metadata. + */ +void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot) +{ + struct kvm_page_track_notifier_head *head; + struct kvm_page_track_notifier_node *n; + int idx; + + head = &kvm->arch.track_notifier_head; + + if (hlist_empty(&head->track_notifier_list)) + return; + + idx = srcu_read_lock(&head->track_srcu); + hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, + srcu_read_lock_held(&head->track_srcu)) + if (n->track_remove_region) + n->track_remove_region(slot->base_gfn, slot->npages, n); + srcu_read_unlock(&head->track_srcu, idx); +} + bool kvm_page_track_has_external_user(struct kvm *kvm) { return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 4394bb49051f..e9ecdf5fbdac 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -12767,6 +12767,9 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, const struct kvm_memory_slot *new, enum kvm_mr_change change) { + if (change == KVM_MR_DELETE) + kvm_page_track_delete_slot(kvm, old); + if (!kvm->arch.n_requested_mmu_pages && (change == KVM_MR_CREATE || change == KVM_MR_DELETE)) { unsigned long nr_mmu_pages; From patchwork Sat Jul 29 01:35:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128020 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp884203vqg; Fri, 28 Jul 2023 23:51:51 -0700 (PDT) X-Google-Smtp-Source: APBJJlEIQHSI0m3YXGxodlH4Vq/U4DSDrgg1N/Bylw1mZn3yEJoOwTWKe8m3QMZ8kqE6ZJYTP/GZ X-Received: by 2002:a05:6a00:986:b0:682:2e99:9de0 with SMTP id u6-20020a056a00098600b006822e999de0mr5101798pfg.23.1690613510776; Fri, 28 Jul 2023 23:51:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690613510; cv=none; d=google.com; s=arc-20160816; b=wLSzJCr9LQApR2S4rEL+DbLCkamgBj+DbB/rEXWgwpVqtb4GoUEDoqvvi8qOWKwVrY WlfHaSFOCrBoz8LKfTsh77bi7ywvM/tJCypEeRAw9Kw2eooDCDPzwgeCGdR/2T6FFm5r tb8gKAM4eBAJ0V1D3UaBSQjhQslGC7HZtHQ9BxVHGhbiQHVia3uj0LMyObmw6n2Sq6O8 3zMsn0qiN1FHMXFMcWFVEt2OPzTvM28h34wLKtrHtNMtkVuJtn0VMTu+FVvQXi13M0eq 8egufyuWiqhHWLApw+jhNed3oqgk6AoGp7zwtf10PTp6Qtq71YKEfKTfjKo20PMVbzyv IsbQ== 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=uiEB/kQUv0ir0mfmtivhGXvmCVUeZ0u7hnCpQaqn4t4=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=ohkrxcJwM26CIaBcVRKGC267dabKEgh3FTr4XlR1pEeJI8iZQWuZMgofbaxHfhRm+Q CSODiNTCSf/6gZL9L1wKkOWRokQMZdFPMbF8f/UME4PPW6Ll5N3oCnXekE80L68kLUt+ TJt4CY/fTfUvdPtVCe0+4KXQ23sOHXA9skvy77iaASZSQa1YBncl49aNQe4qWQ0SKOXe JH7cKR/l2WmtyhHDdbpKyVzUNV1sT23L9Ie5907BoS7ZgQ6li3zzubAFlJwryxIEHpc2 VjflmcW9T4tbp4DYXStzuKJQmOYzCasLXOChvuO7hV13hYQk+QLLZzGd/K3JrEhReNGk 9LHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=W1WZttu6; 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 fi9-20020a056a00398900b00686b64dff1bsi4369804pfb.263.2023.07.28.23.51.37; Fri, 28 Jul 2023 23:51:50 -0700 (PDT) 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=20221208 header.b=W1WZttu6; 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 S237006AbjG2BiC (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237674AbjG2Bhi (ORCPT ); Fri, 28 Jul 2023 21:37:38 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 946C459DA for ; Fri, 28 Jul 2023 18:37:10 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id d9443c01a7336-1bb83eb84e5so24633495ad.1 for ; Fri, 28 Jul 2023 18:37:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594581; x=1691199381; 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=uiEB/kQUv0ir0mfmtivhGXvmCVUeZ0u7hnCpQaqn4t4=; b=W1WZttu6R8I/jENPLMiq750pAPjCMMHtOHh60LBbYPpNTeCH0ePA0H+jt6+kfLVsE/ hjHYcM7jdTFnI5wdJLWy4mdFWEzvMyZ9anQ2EAvPbF2qJ7U38NamwLi1U7pfo057CNuL 2AyKDyj7uTqX0DsUcbae5I58jCUo+YVEiXj2LM9V/Ida88PEMWuE/vyDO6jjBeYyYFSf qdmjxt1/nTKtgrrq/DztwAtgNoSuQje8eJIRPHzT4zNsxPsaP1nnXSXxV+Qj6+5miIHC 9hBFHCE/Pz6DrBA5toquhFoXIF0k6X710ptrk4VIl44Wbxnqtawa8NKi1CkuxdBwbW8Y wa4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594581; x=1691199381; 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=uiEB/kQUv0ir0mfmtivhGXvmCVUeZ0u7hnCpQaqn4t4=; b=FxXr21MYJ8K0tjeAunFFJeWfPWc3MJjZP2FVgs6JVhYcZfAZf2YVIaUL/8aRiSb0rk ih/OENwE/91/Z8QY6EB/+f/VIeoNoqRxfkEpgsgjgwZ25SYs8U/oXQKMN+TRYVM6TwPr 2KxPDaIU4hCj4Etqw2LZX8VdQsxSWhW55KNQNg9FM1HnOeSDqr+M21JUuWhSFu6k9loI HxSdd2Qt2NT9sS5lBejDfQy5w8s6e7TysgaeP+lJNnc33rsBJLUlV3psm5oksyn3uM+h YT5jPZEN8ZqErLphNDXyeNmGXvEedsj9+8bF8bA6foHAC7aXSvPekFuuqAy6Y6VvYog7 KpTA== X-Gm-Message-State: ABy/qLaCp1OsSZ/R55y5OSR2rV1f75m5NLN22WALRgM3SJBcQ9WxkUPc Mn6GKbYyzaZXJCCRbVeHNK7/chuKrP4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:da86:b0:1ba:a36d:f82c with SMTP id j6-20020a170902da8600b001baa36df82cmr12754plx.7.1690594580835; Fri, 28 Jul 2023 18:36:20 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:25 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-20-seanjc@google.com> Subject: [PATCH v4 19/29] drm/i915/gvt: switch from ->track_flush_slot() to ->track_remove_region() 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772736752600839708 X-GMAIL-MSGID: 1772736752600839708 From: Yan Zhao Switch from the poorly named and flawed ->track_flush_slot() to the newly introduced ->track_remove_region(). From KVMGT's perspective, the two hooks are functionally equivalent, the only difference being that ->track_remove_region() is called only when KVM is 100% certain the memory region will be removed, i.e. is invoked slightly later in KVM's memslot modification flow. Cc: Zhenyu Wang Suggested-by: Sean Christopherson Signed-off-by: Yan Zhao [sean: handle name change, massage changelog, rebase] Tested-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/kvmgt.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 3ea3cb9eb599..3f2327455d85 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -108,9 +108,8 @@ struct gvt_dma { static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, struct kvm_page_track_notifier_node *node); -static void kvmgt_page_track_flush_slot(struct kvm *kvm, - struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node); +static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages, + struct kvm_page_track_notifier_node *node); static ssize_t intel_vgpu_show_description(struct mdev_type *mtype, char *buf) { @@ -666,7 +665,7 @@ static int intel_vgpu_open_device(struct vfio_device *vfio_dev) return -EEXIST; vgpu->track_node.track_write = kvmgt_page_track_write; - vgpu->track_node.track_flush_slot = kvmgt_page_track_flush_slot; + vgpu->track_node.track_remove_region = kvmgt_page_track_remove_region; kvm_get_kvm(vgpu->vfio_device.kvm); kvm_page_track_register_notifier(vgpu->vfio_device.kvm, &vgpu->track_node); @@ -1617,22 +1616,20 @@ static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, mutex_unlock(&info->vgpu_lock); } -static void kvmgt_page_track_flush_slot(struct kvm *kvm, - struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node) +static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages, + struct kvm_page_track_notifier_node *node) { unsigned long i; - gfn_t gfn; struct intel_vgpu *info = container_of(node, struct intel_vgpu, track_node); mutex_lock(&info->vgpu_lock); - for (i = 0; i < slot->npages; i++) { - gfn = slot->base_gfn + i; - if (kvmgt_gfn_is_write_protected(info, gfn)) - kvmgt_protect_table_del(info, gfn); + for (i = 0; i < nr_pages; i++) { + if (kvmgt_gfn_is_write_protected(info, gfn + i)) + kvmgt_protect_table_del(info, gfn + i); } + mutex_unlock(&info->vgpu_lock); } From patchwork Sat Jul 29 01:35:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128045 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp904795vqg; Sat, 29 Jul 2023 00:55:45 -0700 (PDT) X-Google-Smtp-Source: APBJJlEkMcv+D0AyMD5rOz7tubGI1Mi9hwCKPx5xIEVfBMacIYj0Sjr3IwLel8Ibkt1rjb56/arK X-Received: by 2002:a17:90b:344c:b0:268:5bca:3bdf with SMTP id lj12-20020a17090b344c00b002685bca3bdfmr3847911pjb.40.1690617345333; Sat, 29 Jul 2023 00:55:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690617345; cv=none; d=google.com; s=arc-20160816; b=CwOllysWXr537VI+zOfi9vyY6Pbew5Y/wZ1/cT7RTuMmAGNX4hycoxJBGH5znQrcuI HLBehLhyujfr4HrKGapnKDpaYXwjjfz/A0R92vohrz0Wud5t33R3y1pMG2G71Kr1uG+c 6Q2Oe3a5To6dfx7VjXTNmWrRqyItOfFIdCMe70urDweJDktfld2jW8PCqMI2D2g7XRyg djmpcM9yEEllJbRwHslupGi08s8p6qdORy5mLk/D8HSVOJ+6Lhs+hGxPre2NtXeFLUXJ a4hOIU0R7U7JlLWzdKIgRjHh1cP9nYYJECmRNVdV8wf3AZ+zgE9oqn4IFbeoUBtzlUbR J1HA== 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=wTpX1Frbl1CZzWkMqdhrj26zVSxgif99bFB2HFXi9YM=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=i666r6APt55iKzG70mJLJms4mjhuWKAoI9eweT4ISpQOYM37gl6cHIHW1vapdOKVUt Da8mebtGXDNFt8nbMoDLTcSpDO/wvXSItaFv99oR93hedsjZVXqRxTa4/nm5IEdza2bZ uby30sV1Qpcr2PG1xTObTZ1mf2A3Ebxdd9G1xj5ONuhDAYRG2PP4YDOiJ3fXY3sh7EcM c8IdUFHprqD2NFRusgnMBICbJ1IXSeB+Bt8M3coUj+2KdDGrAF3iKFOq/tuQNae7ZuEk QfFOTioVC5pcrcQMoA6g8n/Ue5WaUROCHWJPxG9CA5OFgtFhdVRmLKUfQU/YCZ+bMbDE 9ZOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=soHE3UQW; 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 ga15-20020a17090b038f00b002597ed3cc4fsi4198114pjb.189.2023.07.29.00.55.32; Sat, 29 Jul 2023 00:55:45 -0700 (PDT) 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=20221208 header.b=soHE3UQW; 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 S237582AbjG2BiN (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47546 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232606AbjG2Bhs (ORCPT ); Fri, 28 Jul 2023 21:37:48 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 441C7527A for ; Fri, 28 Jul 2023 18:37:14 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-5840614b107so28646337b3.1 for ; Fri, 28 Jul 2023 18:37:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594582; x=1691199382; 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=wTpX1Frbl1CZzWkMqdhrj26zVSxgif99bFB2HFXi9YM=; b=soHE3UQWev13aw3qeydbbk/YoO8A/lYgEoQqHJ/4+aQ2CCp6MzbKUqVF7XbIv2NZiT W9oqIwgdmT1ly2ZaP/K5+Xvi/Jr8zrMHfh4yUJvWq3GmjwJoMgNikPbWAlKt+SMK+ky6 RPfHUWutT5ObWs2jTu+excv7gZcL1DSWVEJ+vbfD1j01rp3X2ZTzJzg8WA1aq8d9OU+q ckjx0KCmHi2Qs++tb4YKs3+R0YqNnsARd8cblNKaSw2TLxWCwtVLTekGs1HQBvRgZLWu o6idRi/DkgbRvwiM7tOgYiaXu7QwMm3qXln4Pu/7iXH1foYDFK6pTEO6xSiMbAXNF9AL cU0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594582; x=1691199382; 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=wTpX1Frbl1CZzWkMqdhrj26zVSxgif99bFB2HFXi9YM=; b=Hy2ECSs3Sac1Xp+l6aDgxTuPevp5Xc34WBM/gdSteVT820tZOP3K0JZRqwP3ftALPe KBYftGk0HgVQm1OlDufl/0y1UYt/7s67+TNHWTRBlEE8yItagGHKTzdMGLoImq8Men6U /80msK9fhIombgFHS443xikJrhPppsd2xO5z4IMo+QlH93fX6/koh1PZi0klChCPTWEX Wb+uOLwksQfQ9ccM+wG5mcyUrA58t0iA7/5ws4OGcrH9olyAYA5+UPUDUl+jJCYwuhpM GsV7XUYKWI+yFscZtgEnYqyLeB6l6BBkEPfYIZxM8Y6CpjQv97UmRnswS8uPHJHJp6cF MyMQ== X-Gm-Message-State: ABy/qLbBbveDjMNeX9k9nsLZRvKpnAf7T44Deud9RmTOVhSzPTODd3BY eMPXXEYooolVzTo8Nur1K7Wa4NxeWas= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:450f:0:b0:576:de5f:95e1 with SMTP id s15-20020a81450f000000b00576de5f95e1mr23487ywa.1.1690594582658; Fri, 28 Jul 2023 18:36:22 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:26 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-21-seanjc@google.com> Subject: [PATCH v4 20/29] KVM: x86: Remove the unused page-track hook track_flush_slot() 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772740773649056492 X-GMAIL-MSGID: 1772740773649056492 From: Yan Zhao Remove ->track_remove_slot(), there are no longer any users and it's unlikely a "flush" hook will ever be the correct API to provide to an external page-track user. Cc: Zhenyu Wang Suggested-by: Sean Christopherson Signed-off-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 11 ----------- arch/x86/kvm/mmu/mmu.c | 2 -- arch/x86/kvm/mmu/page_track.c | 26 -------------------------- 3 files changed, 39 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index cfd36c22b467..5c348ffdc194 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -33,16 +33,6 @@ struct kvm_page_track_notifier_node { */ void (*track_write)(gpa_t gpa, const u8 *new, int bytes, struct kvm_page_track_notifier_node *node); - /* - * It is called when memory slot is being moved or removed - * users can drop write-protection for the pages in that memory slot - * - * @kvm: the kvm where memory slot being moved or removed - * @slot: the memory slot being moved or removed - * @node: this node - */ - void (*track_flush_slot)(struct kvm *kvm, struct kvm_memory_slot *slot, - struct kvm_page_track_notifier_node *node); /* * Invoked when a memory region is removed from the guest. Or in KVM @@ -85,7 +75,6 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, int bytes); -void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot); void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); bool kvm_page_track_has_external_user(struct kvm *kvm); diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index c404264f8de5..c1d3ac303964 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -6749,8 +6749,6 @@ void kvm_arch_flush_shadow_memslot(struct kvm *kvm, struct kvm_memory_slot *slot) { kvm_mmu_zap_all_fast(kvm); - - kvm_page_track_flush_slot(kvm, slot); } void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm, u64 gen) diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index d971c28be99d..2a6ab7c455c0 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -278,32 +278,6 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, kvm_mmu_track_write(vcpu, gpa, new, bytes); } -/* - * Notify the node that memory slot is being removed or moved so that it can - * drop write-protection for the pages in the memory slot. - * - * The node should figure out it has any write-protected pages in this slot - * by itself. - */ -void kvm_page_track_flush_slot(struct kvm *kvm, struct kvm_memory_slot *slot) -{ - struct kvm_page_track_notifier_head *head; - struct kvm_page_track_notifier_node *n; - int idx; - - head = &kvm->arch.track_notifier_head; - - if (hlist_empty(&head->track_notifier_list)) - return; - - idx = srcu_read_lock(&head->track_srcu); - hlist_for_each_entry_srcu(n, &head->track_notifier_list, node, - srcu_read_lock_held(&head->track_srcu)) - if (n->track_flush_slot) - n->track_flush_slot(kvm, slot, n); - srcu_read_unlock(&head->track_srcu, idx); -} - /* * Notify external page track nodes that a memory region is being removed from * the VM, e.g. so that users can free any associated metadata. From patchwork Sat Jul 29 01:35:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127981 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp814673vqg; Fri, 28 Jul 2023 19:56:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlF8n0ggHBlVN/jOJLPu3SQdWxcAtbPA3llDoYN+ta8T2cSTQymlVDNJlsubHRGj6vjYaZZW X-Received: by 2002:a05:6a20:1a96:b0:137:6c57:9bd1 with SMTP id ci22-20020a056a201a9600b001376c579bd1mr3699936pzb.60.1690599417977; Fri, 28 Jul 2023 19:56:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690599417; cv=none; d=google.com; s=arc-20160816; b=cyHhk4WVmwjI2VgQ+0SE42dKyjQWNpdDo127vrLDOeEIyoVHG/+da/uauWkVLMLpyw 7/31RGKhJvLBjIgJD5LJ5+8oGMzVSKimMumdSVMC5DYpDq3P0mPnEGWRCa4sDvm58y8I 150X98IV5JF4RQsE62592COCmoZg3BUFtCJy/obWJ9vFKkei579k/eB5hjdGgeGXj8Of 2AIVmMjz6u9Zp/NYNX0VCxRyaHD2OtsPnoYk6UFoptzpCasrA1hVlh4Q9bU+tWt7479l rZQnvTnvpmYGS+Ts+xwPbBxCF+8egv7bHCdNfMPTuifwFvJHwCp8xyHy0cNdieJATlIt Eb3w== 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=sjdh8J0gvvhDfyi3Y7M0qGNctknbuuLpD3NKv/xuzW0=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=a/30TG10qm3fvu2ciE3wloclusznMYBM29Ao42jKk4B0/U2G8QZ2p08NDSkjkl3FW4 zTtQnCWmdTGX7dIxHhksI60iC3/o0SP27d8kqdaUC+SGpdRPOpB9MFFp8F3ywLbbrwFC mqlQfTOrDWZ92cub7tv8PFkfV1UrufLOmuLIas9GVi6bF6rDX9L1ekk33IFlNKh2U1uS ct8nxpEqCmgcVc1ecK9g22KO6vmqwIIAoLOUNkDkRM8cc6bWT5YKl+5J+7kgH/l/qJxs UA/HfoHOlXSQrYOoScoTpW9wyqEunBecZ1wbWZsKZa9W/iM/Jl+MHzZ4O+oqH6qI/ZcR GrPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=5Ls2eO7u; 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 h185-20020a636cc2000000b00563ee182af8si3764579pgc.455.2023.07.28.19.56.44; Fri, 28 Jul 2023 19:56:57 -0700 (PDT) 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=20221208 header.b=5Ls2eO7u; 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 S229914AbjG2BiT (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237688AbjG2Bhw (ORCPT ); Fri, 28 Jul 2023 21:37:52 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88CC65597 for ; Fri, 28 Jul 2023 18:37:18 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-584126c65d1so29525017b3.3 for ; Fri, 28 Jul 2023 18:37:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594584; x=1691199384; 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=sjdh8J0gvvhDfyi3Y7M0qGNctknbuuLpD3NKv/xuzW0=; b=5Ls2eO7uvFwC0PPFc7UJ2IkhKFMIkgmjwQmc+E/yKUQPWRdL0TlGQPxmbu+KH2KDd5 IriE/GBQcHAtndYIjZyM1wUvGXe9KmYun7gKNNpRWj/bmojZ+0VKfgAzsIliXWAwDbcA l9bfdOq0SN++0letMb3iAi/M+S0Xacc/B4uUjLeUtoyFhdgZPvf9cEAXWiQ3T47G+nF7 6xQMAWH0M8H3NpkYtk1RWN7Ocyxy3GNURLGoRH0zoE3HmDvsiZiVoMyUuY2TA+mqF2Bi ZBkuL6lrQ7Ml8AVQTUTbxvh+UUqxTWZBCcoWN2WBtaLSD0Ld3wpZ8hE8m7vmLH6SK395 RW7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594584; x=1691199384; 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=sjdh8J0gvvhDfyi3Y7M0qGNctknbuuLpD3NKv/xuzW0=; b=GUhItUIAOksCkrYk//WxD77yPIydz24iPZN3A48vrLhCS1dmYljUc8nIwMWBI4x71z mzrEA21do5HieDX83jWkWGtUjcEaUv8M1elr/qZVvaFQ2+/x+f/0DbAS+h1nTqvC0D0m WIvNr+1aTn3JF4oy3lOaHXL9kDL6PbfGe4h2TxEaRpV7o7pzd4f/M/zw4PncuzkKbQco zpnXDLZjpNtuqQYTxUgvhtwflUo00iIB+hZkEDcpRlgocttVDt6KKssJe2nwFod08Nnp r753N2Tl6rLK1NcOBXn79s4Z2LR8clVZs6OO8Fmq+65oWaRtwJDe+rREMtbSkkGn/T2/ 0YYw== X-Gm-Message-State: ABy/qLYSZqCAsEHQfy415cGUZEYJkiVzbDSQJ4T0u62hIL97btG08kM2 W/HYH3VcrwWg/JmtV30jNgEywFl9c4Q= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:160e:b0:d09:6ba9:69ec with SMTP id bw14-20020a056902160e00b00d096ba969ecmr19380ybb.4.1690594584144; Fri, 28 Jul 2023 18:36:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:27 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-22-seanjc@google.com> Subject: [PATCH v4 21/29] KVM: x86/mmu: Move KVM-only page-track declarations to internal header 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772721975502433645 X-GMAIL-MSGID: 1772721975502433645 Bury the declaration of the page-track helpers that are intended only for internal KVM use in a "private" header. In addition to guarding against unwanted usage of the internal-only helpers, dropping their definitions avoids exposing other structures that should be KVM-internal, e.g. for memslots. This is a baby step toward making kvm_host.h a KVM-internal header in the very distant future. Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 21 ++--------------- arch/x86/kvm/mmu/mmu.c | 3 ++- arch/x86/kvm/mmu/page_track.c | 8 +------ arch/x86/kvm/mmu/page_track.h | 33 +++++++++++++++++++++++++++ arch/x86/kvm/x86.c | 1 + 5 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 arch/x86/kvm/mmu/page_track.h diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 5c348ffdc194..76c0070dfe2a 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -2,6 +2,8 @@ #ifndef _ASM_X86_KVM_PAGE_TRACK_H #define _ASM_X86_KVM_PAGE_TRACK_H +#include + enum kvm_page_track_mode { KVM_PAGE_TRACK_WRITE, KVM_PAGE_TRACK_MAX, @@ -46,26 +48,12 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -int kvm_page_track_init(struct kvm *kvm); -void kvm_page_track_cleanup(struct kvm *kvm); - -bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); -int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); - -void kvm_page_track_free_memslot(struct kvm_memory_slot *slot); -int kvm_page_track_create_memslot(struct kvm *kvm, - struct kvm_memory_slot *slot, - unsigned long npages); - void kvm_slot_page_track_add_page(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); void kvm_slot_page_track_remove_page(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); -bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, - gfn_t gfn, enum kvm_page_track_mode mode); void kvm_page_track_register_notifier(struct kvm *kvm, @@ -73,10 +61,5 @@ kvm_page_track_register_notifier(struct kvm *kvm, void kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); -void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes); -void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); - -bool kvm_page_track_has_external_user(struct kvm *kvm); #endif diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index c1d3ac303964..88923b1eb510 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -25,6 +25,7 @@ #include "kvm_cache_regs.h" #include "smm.h" #include "kvm_emulate.h" +#include "page_track.h" #include "cpuid.h" #include "spte.h" @@ -53,7 +54,7 @@ #include #include #include -#include + #include "trace.h" extern bool itlb_multihit_kvm_mitigation; diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 2a6ab7c455c0..e15329d48f95 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -15,10 +15,9 @@ #include #include -#include - #include "mmu.h" #include "mmu_internal.h" +#include "page_track.h" bool kvm_page_track_write_tracking_enabled(struct kvm *kvm) { @@ -300,8 +299,3 @@ void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot) n->track_remove_region(slot->base_gfn, slot->npages, n); srcu_read_unlock(&head->track_srcu, idx); } - -bool kvm_page_track_has_external_user(struct kvm *kvm) -{ - return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); -} diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h new file mode 100644 index 000000000000..89712f123ad3 --- /dev/null +++ b/arch/x86/kvm/mmu/page_track.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __KVM_X86_PAGE_TRACK_H +#define __KVM_X86_PAGE_TRACK_H + +#include + +#include + +int kvm_page_track_init(struct kvm *kvm); +void kvm_page_track_cleanup(struct kvm *kvm); + +bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); +int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); + +void kvm_page_track_free_memslot(struct kvm_memory_slot *slot); +int kvm_page_track_create_memslot(struct kvm *kvm, + struct kvm_memory_slot *slot, + unsigned long npages); + +bool kvm_slot_page_track_is_active(struct kvm *kvm, + const struct kvm_memory_slot *slot, + gfn_t gfn, enum kvm_page_track_mode mode); + +void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, + int bytes); +void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); + +static inline bool kvm_page_track_has_external_user(struct kvm *kvm) +{ + return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); +} + +#endif /* __KVM_X86_PAGE_TRACK_H */ diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e9ecdf5fbdac..05a68d7d99fe 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -25,6 +25,7 @@ #include "tss.h" #include "kvm_cache_regs.h" #include "kvm_emulate.h" +#include "mmu/page_track.h" #include "x86.h" #include "cpuid.h" #include "pmu.h" From patchwork Sat Jul 29 01:35:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127996 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp829154vqg; Fri, 28 Jul 2023 20:49:06 -0700 (PDT) X-Google-Smtp-Source: APBJJlEIUeEXKam7jPlwgfIhhqZ3ZUEBPWmg75KOnUmozRKIcEXXt7Hrn+fA4wRzzOEVjur3feyp X-Received: by 2002:aa7:ce16:0:b0:51e:5251:8f45 with SMTP id d22-20020aa7ce16000000b0051e52518f45mr3241081edv.4.1690602545737; Fri, 28 Jul 2023 20:49:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690602545; cv=none; d=google.com; s=arc-20160816; b=pYWQv1gndVuQvpcMyV9Pl8O/4y3n8nWgFVYwbaEooAT7Xd/m8RED2Vs6qB6QwrnrFv qZYVpJx6GEO+vyMy+zweRp+ePYBLdXT92O1NCuONyEQnN4a36PP2H4pVag7CY8ml79oc 0N1ltyHu5aHE/6K051Uwb3AZRp+Ov4Cs1vgRhoQ22QQkZ4YsvkrBtc8meXHyqeuRS7Pn V1BJ3H6wL7W36J5tgMmBrLBG65kSN4NrX6zKVmRPQU4Kc7/rRf52j3kdu6rTOsgG0Bfc 1XGDWxmPq7dxbqqbITKb8zIb5yxlfhlEw5VsFiukEzpIAYpP9Amw6PW7XRo3w1fDmcTo 0oxQ== 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=u8zgm8EV8vlG4EBgDhtBF81Mqb+qt7fgxaXdlQSLiDI=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=amT7iwRhiS43RVJfVSyNbCxZHjN/1nJc8AbxQKJZTwbTnIZTE2W8aLVTRV/kNI6owC Wsep2AN+fj/0BECFily65AVDNIoQTIXgVzoSp7H3D3L4dii+ZRPYBsXzhM4/bzkHqIkz EGmm1LiYtEEwlXgaG0rlCSyz6ZPW0ZlBEw4qCEDIj2CSsill9N1cUjgKRh1/LO9U4Z/a 9nGWlb0Mb/LK8OgC/GXtA85moUCYhauZZmSoGfO30GQ07VV/FdzOSGVCismjJnOcWrLU idw7fyLdDeHZFABUDOZfncYTOW0XrEyna7Au2D/VK7OqmPZHKuUOqXyUIx33Ef4hqaHM heJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=qqateZfT; 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 b19-20020aa7c913000000b00522adc940c3si702219edt.607.2023.07.28.20.48.42; Fri, 28 Jul 2023 20:49:05 -0700 (PDT) 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=20221208 header.b=qqateZfT; 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 S237180AbjG2BiY (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237635AbjG2Bhy (ORCPT ); Fri, 28 Jul 2023 21:37:54 -0400 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A9C03C22 for ; Fri, 28 Jul 2023 18:37:19 -0700 (PDT) Received: by mail-pj1-x1049.google.com with SMTP id 98e67ed59e1d1-267fbf43b2fso2250116a91.3 for ; Fri, 28 Jul 2023 18:37:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594586; x=1691199386; 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=u8zgm8EV8vlG4EBgDhtBF81Mqb+qt7fgxaXdlQSLiDI=; b=qqateZfTTQDMsUIr5NCQj8lEq72PtL8HyFYSyt823W5N1v0ON6B1nKWPwkJ+U0L2iJ crGFaS6W8nVQ2AJbFLxtWi+M5+9nb1lIAMx9yuzPzn6nIjiTxldaaZDQ+E0YMH3NmgG9 oSCGKFF7P00qEa3X+CvXanXsNZHrdlox2K3F57h8Fxj8zz9XpzqgTrnqITM2ADtep93k eqJKHA9IzZKPMADnIE4WHdo2X3SPyV5+d6Q8y5Mu0lTSnujN4H9yoXkP5RJbLbX6RRAU YXRaFSyEVicYpXeZbS/JOsQhrfh0M4x3OuP3k6wG8R+OETVvw8eX+bmHBiukqxfzqq1f SKmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594586; x=1691199386; 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=u8zgm8EV8vlG4EBgDhtBF81Mqb+qt7fgxaXdlQSLiDI=; b=il/jpk2/jTSyR1ZKAJ5DK4dyDA9KFOcMxsDX2f7tkdxXPw9TYUj4vZb/DcdYry9WjS AF/8tWFSqQszJ3jrcUPsGPcuAZ1bP0CkZdWPNqzgkrG93aeTvygAnndK6XIbl5syp/rH yWEl8C6kXu6cqlKfeCGbSj65f8EJv2AAh6xHRZzJNgNJEPwMFt2VzFIDaS5kdULhLSkv dii2WcRET8ygrj/Dca25NjDqZF8d7lmkUfMziyJcMIlnqAAi6lrATKySCGD7CglNutD3 f81ovWOaoGkCq9YB5UzPAnXvBN3zLMlOTQR5jg9KatF5cl6KF2rQKW1JbV9BHPrbAmY+ 3/CA== X-Gm-Message-State: ABy/qLb3VH+czcnjeUVv0R4zaURNtB+SBO6rccD4lKhHL2CZW7qcJdtX nt1z19bvhc/jmilBQr2GtD+PFV/yrYY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:f481:b0:262:d8e7:abff with SMTP id bx1-20020a17090af48100b00262d8e7abffmr17397pjb.2.1690594585964; Fri, 28 Jul 2023 18:36:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:28 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-23-seanjc@google.com> Subject: [PATCH v4 22/29] KVM: x86/mmu: Use page-track notifiers iff there are external users 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772725255256975481 X-GMAIL-MSGID: 1772725255256975481 Disable the page-track notifier code at compile time if there are no external users, i.e. if CONFIG_KVM_EXTERNAL_WRITE_TRACKING=n. KVM itself now hooks emulated writes directly instead of relying on the page-track mechanism. Provide a stub for "struct kvm_page_track_notifier_node" so that including headers directly from the command line, e.g. for testing include guards, doesn't fail due to a struct having an incomplete type. Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/include/asm/kvm_page_track.h | 22 +++++++++++++------- arch/x86/kvm/mmu/page_track.c | 10 ++++----- arch/x86/kvm/mmu/page_track.h | 29 +++++++++++++++++++++++---- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 85605f2497bb..33b1ceb30dd2 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1247,7 +1247,9 @@ struct kvm_arch { * create an NX huge page (without hanging the guest). */ struct list_head possible_nx_huge_pages; +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING struct kvm_page_track_notifier_head track_notifier_head; +#endif /* * Protects marking pages unsync during page faults, as TDP MMU page * faults only take mmu_lock for read. For simplicity, the unsync diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 76c0070dfe2a..61adb07b5927 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -9,6 +9,14 @@ enum kvm_page_track_mode { KVM_PAGE_TRACK_MAX, }; +void kvm_slot_page_track_add_page(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn, + enum kvm_page_track_mode mode); +void kvm_slot_page_track_remove_page(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn, + enum kvm_page_track_mode mode); + +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING /* * The notifier represented by @kvm_page_track_notifier_node is linked into * the head which will be notified when guest is triggering the track event. @@ -48,18 +56,18 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode); -void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode); - void kvm_page_track_register_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); void kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); +#else +/* + * Allow defining a node in a structure even if page tracking is disabled, e.g. + * to play nice with testing headers via direct inclusion from the command line. + */ +struct kvm_page_track_notifier_node {}; +#endif /* CONFIG_KVM_EXTERNAL_WRITE_TRACKING */ #endif diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index e15329d48f95..b20aad7ac3fe 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -194,6 +194,7 @@ bool kvm_slot_page_track_is_active(struct kvm *kvm, return !!READ_ONCE(slot->arch.gfn_track[mode][index]); } +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING void kvm_page_track_cleanup(struct kvm *kvm) { struct kvm_page_track_notifier_head *head; @@ -255,14 +256,13 @@ EXPORT_SYMBOL_GPL(kvm_page_track_unregister_notifier); * The node should figure out if the written page is the one that node is * interested in by itself. */ -void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes) +void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes) { struct kvm_page_track_notifier_head *head; struct kvm_page_track_notifier_node *n; int idx; - head = &vcpu->kvm->arch.track_notifier_head; + head = &kvm->arch.track_notifier_head; if (hlist_empty(&head->track_notifier_list)) return; @@ -273,8 +273,6 @@ void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, if (n->track_write) n->track_write(gpa, new, bytes, n); srcu_read_unlock(&head->track_srcu, idx); - - kvm_mmu_track_write(vcpu, gpa, new, bytes); } /* @@ -299,3 +297,5 @@ void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot) n->track_remove_region(slot->base_gfn, slot->npages, n); srcu_read_unlock(&head->track_srcu, idx); } + +#endif diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 89712f123ad3..931b26b8fc8f 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -6,8 +6,6 @@ #include -int kvm_page_track_init(struct kvm *kvm); -void kvm_page_track_cleanup(struct kvm *kvm); bool kvm_page_track_write_tracking_enabled(struct kvm *kvm); int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot); @@ -21,13 +19,36 @@ bool kvm_slot_page_track_is_active(struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn, enum kvm_page_track_mode mode); -void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, const u8 *new, - int bytes); +#ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING +int kvm_page_track_init(struct kvm *kvm); +void kvm_page_track_cleanup(struct kvm *kvm); + +void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, const u8 *new, int bytes); void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot); static inline bool kvm_page_track_has_external_user(struct kvm *kvm) { return hlist_empty(&kvm->arch.track_notifier_head.track_notifier_list); } +#else +static inline int kvm_page_track_init(struct kvm *kvm) { return 0; } +static inline void kvm_page_track_cleanup(struct kvm *kvm) { } + +static inline void __kvm_page_track_write(struct kvm *kvm, gpa_t gpa, + const u8 *new, int bytes) { } +static inline void kvm_page_track_delete_slot(struct kvm *kvm, + struct kvm_memory_slot *slot) { } + +static inline bool kvm_page_track_has_external_user(struct kvm *kvm) { return false; } + +#endif /* CONFIG_KVM_EXTERNAL_WRITE_TRACKING */ + +static inline void kvm_page_track_write(struct kvm_vcpu *vcpu, gpa_t gpa, + const u8 *new, int bytes) +{ + __kvm_page_track_write(vcpu->kvm, gpa, new, bytes); + + kvm_mmu_track_write(vcpu, gpa, new, bytes); +} #endif /* __KVM_X86_PAGE_TRACK_H */ From patchwork Sat Jul 29 01:35:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128022 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp887735vqg; Sat, 29 Jul 2023 00:02:09 -0700 (PDT) X-Google-Smtp-Source: APBJJlF3tJwdH3gRoTGgZpEAz5ZwSWNrKYRj5TopmXJVxM4zAmZXLTTYmMEwN8NvM6C47MK7Xeo8 X-Received: by 2002:a17:906:10c9:b0:974:1e0e:91ee with SMTP id v9-20020a17090610c900b009741e0e91eemr1427779ejv.13.1690614129447; Sat, 29 Jul 2023 00:02:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690614129; cv=none; d=google.com; s=arc-20160816; b=m60zKZMC1klKNn9iVMbNKYD5sJaG9rR8wgtt5mv94FPdHy91BafSV2gUV4jWPeVmQ4 w5mXTthRPIHPfMEkF4I/UjyImxm1JHDMiJWFxbborpIsQMiJqyYz6EeFXiopTHMILe8l 6Bno6a+DNbXYOZX43cRN8hHe9fzG8Sn6Q0iG7Js9BRJdKpAc7ZS/jfhJxe1GqbIADkCI kB9Yj4buTqqqFG3TFN2bQLJAJocjz3XuLa5O7IazliCWQAClkWoM/Um6Cc0PSI1RBGpF nvS6TQegkt2N4k5U+WOj3EUGg66mHZSZsaA3OmOxqjAeNRWLo5UiBYM3F/8VSWji0Fev 9BsA== 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=8fCnN9sMgvUVZRhuIGf+CUQwPvlNDoZ8J2Y3rHonvyQ=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=IMiy6KD78u9INNdhT70slRu4bYKkSO9HrgnfwItvAHNqk7qgEWPowdtsLaC8oZCI+w A84atw360Q/TgySZ+Ut5eRJOqQM23DddUbmxfBSh8k7eEaZmj2D8SvswvsJn/3Za8i0S Jci9ATOMD1ZfaPp1ciRyHJqs9dt6CtS5TT87IRQgDWXXt+fqpeayXQVaWaHgHqkRS9In +4YeS1kfu2Txa5KOWNZnLU/w3bEyZir5+clhpzIgXaKkIuPVRn/Q7OisXcijqMKoMZA/ wVHPQlZl7+7uNug0KK5CKwb6bF9PL5phM4CgPlm+6/BRzlb8QdEmvOwlM3il7Lcf3faa 0+Sw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=u8Ph6eEr; 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 n11-20020a170906088b00b00991df86ac0fsi3869120eje.290.2023.07.29.00.01.43; Sat, 29 Jul 2023 00:02:09 -0700 (PDT) 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=20221208 header.b=u8Ph6eEr; 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 S230120AbjG2BqB (ORCPT + 99 others); Fri, 28 Jul 2023 21:46:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231256AbjG2Bp6 (ORCPT ); Fri, 28 Jul 2023 21:45:58 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3269410CB for ; Fri, 28 Jul 2023 18:45:56 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-58440eb872aso29567877b3.3 for ; Fri, 28 Jul 2023 18:45:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690595155; x=1691199955; 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=8fCnN9sMgvUVZRhuIGf+CUQwPvlNDoZ8J2Y3rHonvyQ=; b=u8Ph6eErE0Cxk3j4T9Ee+9TdQ1q+qLmkID10gGgjBiSHRYz+BvGFcD20LkMyomMTim bxE5gDiPTSv7/yun3G66OssdqwAYTqAR/fgl88g/5YEre0eXOythMpIXP4h01M8klfBn +ec3A4ErgZ7KCApcQj7k2DBpNf60sdzUVfxCdi7DIuqALEkHd0VNlPuKsYo9e2JBQPFF NvqWwcByxNPaSfuHQAQ1xnBj630Lj3n6rUlkJgmlnWCmbRvnY0F5RDt7v0b9geI3jfiu xEOC9Ky6Iz9qHagxg3npniGrB5pxvDt5QHuyf8lGfcc7kItoa1TF5QVpAmXZ0KFejFMu oYfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690595155; x=1691199955; 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=8fCnN9sMgvUVZRhuIGf+CUQwPvlNDoZ8J2Y3rHonvyQ=; b=ZU8TcO4CvXEe+7BRiLdYR2CZiHK6VaaxN9hsISU1GB/IhGo3PkJZqTDqlkrhktpGor r85C7R+c8VMhSB2K0foySP66Sl6Z7bNXA9D/SGytGecJSHHcLbjw9XhIktSjPBn4gusS b3rhtTMyWio4qLK5gc6BmRau6x77ZZdLK46AC/MNVjMFdY5f+lVXYEMcgs64QrWGvhEZ ZJhso2j/IDoNrTan+2kZDeX5MljmSkjdbBUvc9283PmDiV0nZXrHJ/wqzkyNb+A0D9Y4 FSHHjA8zMExPNOWTs1ffC/JOb7rPyIort75n5CCo7pgy5AQsIR9sUlTpO8+YuDZm0ZgW Bfeg== X-Gm-Message-State: ABy/qLZX3PACDDpd++Uu+J29ohFL4n+GBH94pEtdQjIDG0aSLb9oNQBX ww6d1fkIaQnHjrFrZwmdlki9OsmbzPY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:b385:0:b0:57a:141f:b4f7 with SMTP id r127-20020a81b385000000b0057a141fb4f7mr25896ywh.6.1690594588058; Fri, 28 Jul 2023 18:36:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:29 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-24-seanjc@google.com> Subject: [PATCH v4 23/29] KVM: x86/mmu: Drop infrastructure for multiple page-track modes 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772737401356693815 X-GMAIL-MSGID: 1772737401356693815 Drop "support" for multiple page-track modes, as there is no evidence that array-based and refcounted metadata is the optimal solution for other modes, nor is there any evidence that other use cases, e.g. for access-tracking, will be a good fit for the page-track machinery in general. E.g. one potential use case of access-tracking would be to prevent guest access to poisoned memory (from the guest's perspective). In that case, the number of poisoned pages is likely to be a very small percentage of the guest memory, and there is no need to reference count the number of access-tracking users, i.e. expanding gfn_track[] for a new mode would be grossly inefficient. And for poisoned memory, host userspace would also likely want to trap accesses, e.g. to inject #MC into the guest, and that isn't currently supported by the page-track framework. A better alternative for that poisoned page use case is likely a variation of the proposed per-gfn attributes overlay (linked), which would allow efficiently tracking the sparse set of poisoned pages, and by default would exit to userspace on access. Link: https://lore.kernel.org/all/Y2WB48kD0J4VGynX@google.com Cc: Ben Gardon Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 12 +-- arch/x86/include/asm/kvm_page_track.h | 11 +-- arch/x86/kvm/mmu/mmu.c | 14 ++-- arch/x86/kvm/mmu/page_track.c | 111 ++++++++------------------ arch/x86/kvm/mmu/page_track.h | 3 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 4 +- 6 files changed, 51 insertions(+), 104 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 33b1ceb30dd2..a915e23d61fa 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -288,13 +288,13 @@ struct kvm_kernel_irq_routing_entry; * kvm_mmu_page_role tracks the properties of a shadow page (where shadow page * also includes TDP pages) to determine whether or not a page can be used in * the given MMU context. This is a subset of the overall kvm_cpu_role to - * minimize the size of kvm_memory_slot.arch.gfn_track, i.e. allows allocating - * 2 bytes per gfn instead of 4 bytes per gfn. + * minimize the size of kvm_memory_slot.arch.gfn_write_track, i.e. allows + * allocating 2 bytes per gfn instead of 4 bytes per gfn. * * Upper-level shadow pages having gptes are tracked for write-protection via - * gfn_track. As above, gfn_track is a 16 bit counter, so KVM must not create - * more than 2^16-1 upper-level shadow pages at a single gfn, otherwise - * gfn_track will overflow and explosions will ensure. + * gfn_write_track. As above, gfn_write_track is a 16 bit counter, so KVM must + * not create more than 2^16-1 upper-level shadow pages at a single gfn, + * otherwise gfn_write_track will overflow and explosions will ensue. * * A unique shadow page (SP) for a gfn is created if and only if an existing SP * cannot be reused. The ability to reuse a SP is tracked by its role, which @@ -1005,7 +1005,7 @@ struct kvm_lpage_info { struct kvm_arch_memory_slot { struct kvm_rmap_head *rmap[KVM_NR_PAGE_SIZES]; struct kvm_lpage_info *lpage_info[KVM_NR_PAGE_SIZES - 1]; - unsigned short *gfn_track[KVM_PAGE_TRACK_MAX]; + unsigned short *gfn_write_track; }; /* diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 61adb07b5927..9e4ee26d1779 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -4,17 +4,10 @@ #include -enum kvm_page_track_mode { - KVM_PAGE_TRACK_WRITE, - KVM_PAGE_TRACK_MAX, -}; - void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode); + struct kvm_memory_slot *slot, gfn_t gfn); void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode); + struct kvm_memory_slot *slot, gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING /* diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 88923b1eb510..b8dce17bffdc 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -840,8 +840,7 @@ static void account_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) /* the non-leaf shadow pages are keeping readonly. */ if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_add_page(kvm, slot, gfn, - KVM_PAGE_TRACK_WRITE); + return kvm_slot_page_track_add_page(kvm, slot, gfn); kvm_mmu_gfn_disallow_lpage(slot, gfn); @@ -887,8 +886,7 @@ static void unaccount_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) slots = kvm_memslots_for_spte_role(kvm, sp->role); slot = __gfn_to_memslot(slots, gfn); if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_remove_page(kvm, slot, gfn, - KVM_PAGE_TRACK_WRITE); + return kvm_slot_page_track_remove_page(kvm, slot, gfn); kvm_mmu_gfn_allow_lpage(slot, gfn); } @@ -2832,7 +2830,7 @@ int mmu_try_to_unsync_pages(struct kvm *kvm, const struct kvm_memory_slot *slot, * track machinery is used to write-protect upper-level shadow pages, * i.e. this guards the role.level == 4K assertion below! */ - if (kvm_slot_page_track_is_active(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE)) + if (kvm_slot_page_track_is_active(kvm, slot, gfn)) return -EPERM; /* @@ -4233,7 +4231,7 @@ static bool page_fault_handle_page_track(struct kvm_vcpu *vcpu, * guest is writing the page which is write tracked which can * not be fixed by page fault handler. */ - if (kvm_slot_page_track_is_active(vcpu->kvm, fault->slot, fault->gfn, KVM_PAGE_TRACK_WRITE)) + if (kvm_slot_page_track_is_active(vcpu->kvm, fault->slot, fault->gfn)) return true; return false; @@ -5468,8 +5466,8 @@ void kvm_mmu_after_set_cpuid(struct kvm_vcpu *vcpu) * physical address properties) in a single VM would require tracking * all relevant CPUID information in kvm_mmu_page_role. That is very * undesirable as it would increase the memory requirements for - * gfn_track (see struct kvm_mmu_page_role comments). For now that - * problem is swept under the rug; KVM's CPUID API is horrific and + * gfn_write_track (see struct kvm_mmu_page_role comments). For now + * that problem is swept under the rug; KVM's CPUID API is horrific and * it's all but impossible to solve it without introducing a new API. */ vcpu->arch.root_mmu.root_role.word = 0; diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index b20aad7ac3fe..cdc6069b8caf 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -27,76 +27,50 @@ bool kvm_page_track_write_tracking_enabled(struct kvm *kvm) void kvm_page_track_free_memslot(struct kvm_memory_slot *slot) { - int i; + kvfree(slot->arch.gfn_write_track); + slot->arch.gfn_write_track = NULL; +} - for (i = 0; i < KVM_PAGE_TRACK_MAX; i++) { - kvfree(slot->arch.gfn_track[i]); - slot->arch.gfn_track[i] = NULL; - } +static int __kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot, + unsigned long npages) +{ + const size_t size = sizeof(*slot->arch.gfn_write_track); + + if (!slot->arch.gfn_write_track) + slot->arch.gfn_write_track = __vcalloc(npages, size, + GFP_KERNEL_ACCOUNT); + + return slot->arch.gfn_write_track ? 0 : -ENOMEM; } int kvm_page_track_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages) { - int i; - - for (i = 0; i < KVM_PAGE_TRACK_MAX; i++) { - if (i == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm)) - continue; - - slot->arch.gfn_track[i] = - __vcalloc(npages, sizeof(*slot->arch.gfn_track[i]), - GFP_KERNEL_ACCOUNT); - if (!slot->arch.gfn_track[i]) - goto track_free; - } - - return 0; - -track_free: - kvm_page_track_free_memslot(slot); - return -ENOMEM; -} - -static inline bool page_track_mode_is_valid(enum kvm_page_track_mode mode) -{ - if (mode < 0 || mode >= KVM_PAGE_TRACK_MAX) - return false; - - return true; -} - -int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot) -{ - unsigned short *gfn_track; - - if (slot->arch.gfn_track[KVM_PAGE_TRACK_WRITE]) + if (!kvm_page_track_write_tracking_enabled(kvm)) return 0; - gfn_track = __vcalloc(slot->npages, sizeof(*gfn_track), - GFP_KERNEL_ACCOUNT); - if (gfn_track == NULL) - return -ENOMEM; + return __kvm_page_track_write_tracking_alloc(slot, npages); +} - slot->arch.gfn_track[KVM_PAGE_TRACK_WRITE] = gfn_track; - return 0; +int kvm_page_track_write_tracking_alloc(struct kvm_memory_slot *slot) +{ + return __kvm_page_track_write_tracking_alloc(slot, slot->npages); } -static void update_gfn_track(struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode, short count) +static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, + short count) { int index, val; index = gfn_to_index(gfn, slot->base_gfn, PG_LEVEL_4K); - val = slot->arch.gfn_track[mode][index]; + val = slot->arch.gfn_write_track[index]; if (WARN_ON(val + count < 0 || val + count > USHRT_MAX)) return; - slot->arch.gfn_track[mode][index] += count; + slot->arch.gfn_write_track[index] += count; } /* @@ -109,21 +83,15 @@ static void update_gfn_track(struct kvm_memory_slot *slot, gfn_t gfn, * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. - * @mode: tracking mode, currently only write track is supported. */ void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode) + struct kvm_memory_slot *slot, gfn_t gfn) { - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; - if (WARN_ON(mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm))) - return; - - update_gfn_track(slot, gfn, mode, 1); + update_gfn_write_track(slot, gfn, 1); /* * new track stops large page mapping for the @@ -131,9 +99,8 @@ void kvm_slot_page_track_add_page(struct kvm *kvm, */ kvm_mmu_gfn_disallow_lpage(slot, gfn); - if (mode == KVM_PAGE_TRACK_WRITE) - if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) - kvm_flush_remote_tlbs(kvm); + if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) + kvm_flush_remote_tlbs(kvm); } EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); @@ -148,20 +115,14 @@ EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. - * @mode: tracking mode, currently only write track is supported. */ void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn, - enum kvm_page_track_mode mode) + struct kvm_memory_slot *slot, gfn_t gfn) { - if (WARN_ON(!page_track_mode_is_valid(mode))) + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; - if (WARN_ON(mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm))) - return; - - update_gfn_track(slot, gfn, mode, -1); + update_gfn_write_track(slot, gfn, -1); /* * allow large page mapping for the tracked page @@ -176,22 +137,18 @@ EXPORT_SYMBOL_GPL(kvm_slot_page_track_remove_page); */ bool kvm_slot_page_track_is_active(struct kvm *kvm, const struct kvm_memory_slot *slot, - gfn_t gfn, enum kvm_page_track_mode mode) + gfn_t gfn) { int index; - if (WARN_ON(!page_track_mode_is_valid(mode))) - return false; - if (!slot) return false; - if (mode == KVM_PAGE_TRACK_WRITE && - !kvm_page_track_write_tracking_enabled(kvm)) + if (!kvm_page_track_write_tracking_enabled(kvm)) return false; index = gfn_to_index(gfn, slot->base_gfn, PG_LEVEL_4K); - return !!READ_ONCE(slot->arch.gfn_track[mode][index]); + return !!READ_ONCE(slot->arch.gfn_write_track[index]); } #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 931b26b8fc8f..789d0c479519 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -16,8 +16,7 @@ int kvm_page_track_create_memslot(struct kvm *kvm, unsigned long npages); bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, - gfn_t gfn, enum kvm_page_track_mode mode); + const struct kvm_memory_slot *slot, gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING int kvm_page_track_init(struct kvm *kvm); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 3f2327455d85..e71182b8a3f2 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1564,7 +1564,7 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_add_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + kvm_slot_page_track_add_page(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); @@ -1593,7 +1593,7 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_remove_page(kvm, slot, gfn, KVM_PAGE_TRACK_WRITE); + kvm_slot_page_track_remove_page(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); From patchwork Sat Jul 29 01:35:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127965 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp807752vqg; Fri, 28 Jul 2023 19:32:30 -0700 (PDT) X-Google-Smtp-Source: APBJJlG9FHqdw3PQihUvdD6cufrN8ts2dMYG0cfHYp2t49GUD+iKa09NX4X3QV71G8eFA+nKvCur X-Received: by 2002:a17:902:d507:b0:1b6:c229:c350 with SMTP id b7-20020a170902d50700b001b6c229c350mr4349416plg.18.1690597949638; Fri, 28 Jul 2023 19:32:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690597949; cv=none; d=google.com; s=arc-20160816; b=c9XQI8UOPkFeHOtzGbybGjjIXpkx5A7Ns3dTXOSZVhvGgpRxaVQkk8Q3hzAv2K5l6A hhLW1Q8ZoMffaLZg240w6l3xCves/HmuYaxRHdvwDruNovnCegFQDndsDTJ3ymdHX7uv YeU0mMwLNAah6MtHLPb9TEzSvRpA3MHZZYyQjMebuuckpQtXh+J5ZgWZRGDvGQ6+PG91 W8yrw6KBdnMeaf7Vor6Fqze+HejCJbXtcio+eF0vJNARMiMbNBM9BWBcG6DVc9iiQjU9 b16EYlZJcw51D0MzPWvBZrGnMLRAI/LaKQDKeLbQhNGyJoSd9MhTzy7zdA92eWMUk1ok 7h6A== 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=9vAdDrMzBYVHHQ4WFSPjYDLe28mx0kAseFtg2XLVMp4=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=Gs8NADgaOsVZGiDQoi2iFjBmRX6RvfEN+3axfSIl2C4/18EJCi2uWs7UVA6lnvgy+h XV875JacsK8japRxYU7VbLoWGXnARtmUzNJoHmR5rsOQenq5j753Mw0VcVfFeclapj1L IMJ6a9Jn55BuS2/4mrHps8GPDw3GpZlK6sm9oPDLdyM/ZESxl2m1jRnOKtHWz1xRHouZ V4J8uUI9FGJCIWSIaKUVShUpE0VKT7ih1IS4BY/RwoncNGly1TmAW8w7QhZjZTMzh4Pd zbk2Zcw9lDuvmVWYxrxA2+L+JSFliadu9Aa0jc2QplT5v2VuMgcH0u2JVWmK+Pyh55/m pcrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=NzSRuP8F; 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 t7-20020a1709027fc700b001bba415cc39si3906105plb.245.2023.07.28.19.32.16; Fri, 28 Jul 2023 19:32:29 -0700 (PDT) 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=20221208 header.b=NzSRuP8F; 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 S234540AbjG2Bqm (ORCPT + 99 others); Fri, 28 Jul 2023 21:46:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231256AbjG2Bqk (ORCPT ); Fri, 28 Jul 2023 21:46:40 -0400 Received: from mail-oa1-x4a.google.com (mail-oa1-x4a.google.com [IPv6:2001:4860:4864:20::4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 947ED10FC for ; Fri, 28 Jul 2023 18:46:38 -0700 (PDT) Received: by mail-oa1-x4a.google.com with SMTP id 586e51a60fabf-187959a901eso4810272fac.0 for ; Fri, 28 Jul 2023 18:46:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690595197; x=1691199997; 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=9vAdDrMzBYVHHQ4WFSPjYDLe28mx0kAseFtg2XLVMp4=; b=NzSRuP8FOaSeAnA8RgEcct4WGxs/m0VC0jgtO0uCA9zV2uZ0iWhvQlSLruvPkkixMY 9aWro8+sZkhLUiO8nVUL3D74NNP8BGQuveE32/0gW53u0uu/zsoLQTv/zJ6jgmW5TpqA emzUmziCz61hrhbcsnwRclY80vD1bOcZYWaiy8NqrzLR27mK+M0pIZ1LEi2K2V7/8U0+ H+mTZMzEVkv5A2Fd6ns79y+ujTNaRoCFSoPOeX9zxQ1rQpmGLrwpS+MBOfHgIzmw8uhQ c8MVqDEOSvB4Y5olUscAj4rCJIoEw259kFOfs+8VnvcOuDjt0C+SSiUGK+dmFlapD2al etDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690595197; x=1691199997; 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=9vAdDrMzBYVHHQ4WFSPjYDLe28mx0kAseFtg2XLVMp4=; b=FwqMuXZLNJuRpbK2BJfi8AYyLHYf/lriaBXTm/wDoFgG9tu+4SywJ3RNjaV9v66k5O vz2+vVNJ3Do8yCTqqP2SDAx8a3i5vC4jD2vYbu+LJDcuMQJ5m+erwBEVkdfiNyuynYd0 X4KD4vVC4OOnCFbFy2LSEVcZXzyDUtw3+LtqPdhnjfP9UAGRQjdsdQ7GHdkA7voyq2EO LUxE+lypJzcoo840D721z1NruqlUJIRFRw0uk//cqhz5Ko4leViiBpNomJeZ3hrBx2R2 yJkPnFFrgR6oh5OycMylgDCTq3qM9Hj6AhyjkxZxSrQZpWsRaFxh+EQ5sjPpNADb6EYQ Akjg== X-Gm-Message-State: ABy/qLamBV8zjyaDelLfCxSmjfd2lO86VyWmLKo3G2N8QZYL5xtdeS9o G55zkRIqEnRUTMbSf0Z1ssS0iPqT4ho= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:2807:b0:1a2:3436:4119 with SMTP id kp7-20020a170903280700b001a234364119mr10970plb.8.1690594589996; Fri, 28 Jul 2023 18:36:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:30 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-25-seanjc@google.com> Subject: [PATCH v4 24/29] KVM: x86/mmu: Rename page-track APIs to reflect the new reality 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 , Yongwei Ma , 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_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772720435683320454 X-GMAIL-MSGID: 1772720435683320454 Rename the page-track APIs to capture that they're all about tracking writes, now that the facade of supporting multiple modes is gone. Opportunstically replace "slot" with "gfn" in anticipation of removing the @slot param from the external APIs. No functional change intended. Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 8 ++++---- arch/x86/kvm/mmu/mmu.c | 8 ++++---- arch/x86/kvm/mmu/page_track.c | 21 +++++++++------------ arch/x86/kvm/mmu/page_track.h | 4 ++-- drivers/gpu/drm/i915/gvt/kvmgt.c | 4 ++-- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 9e4ee26d1779..f5c1db36cdb7 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -4,10 +4,10 @@ #include -void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn); -void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn); +void kvm_write_track_add_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn); +void kvm_write_track_remove_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING /* diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index b8dce17bffdc..a0309fde3549 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -840,7 +840,7 @@ static void account_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) /* the non-leaf shadow pages are keeping readonly. */ if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_add_page(kvm, slot, gfn); + return kvm_write_track_add_gfn(kvm, slot, gfn); kvm_mmu_gfn_disallow_lpage(slot, gfn); @@ -886,7 +886,7 @@ static void unaccount_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) slots = kvm_memslots_for_spte_role(kvm, sp->role); slot = __gfn_to_memslot(slots, gfn); if (sp->role.level > PG_LEVEL_4K) - return kvm_slot_page_track_remove_page(kvm, slot, gfn); + return kvm_write_track_remove_gfn(kvm, slot, gfn); kvm_mmu_gfn_allow_lpage(slot, gfn); } @@ -2830,7 +2830,7 @@ int mmu_try_to_unsync_pages(struct kvm *kvm, const struct kvm_memory_slot *slot, * track machinery is used to write-protect upper-level shadow pages, * i.e. this guards the role.level == 4K assertion below! */ - if (kvm_slot_page_track_is_active(kvm, slot, gfn)) + if (kvm_gfn_is_write_tracked(kvm, slot, gfn)) return -EPERM; /* @@ -4231,7 +4231,7 @@ static bool page_fault_handle_page_track(struct kvm_vcpu *vcpu, * guest is writing the page which is write tracked which can * not be fixed by page fault handler. */ - if (kvm_slot_page_track_is_active(vcpu->kvm, fault->slot, fault->gfn)) + if (kvm_gfn_is_write_tracked(vcpu->kvm, fault->slot, fault->gfn)) return true; return false; diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index cdc6069b8caf..b835ba7f325c 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -84,10 +84,9 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, * @slot: the @gfn belongs to. * @gfn: the guest page. */ -void kvm_slot_page_track_add_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn) +void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn) { - if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; @@ -102,12 +101,11 @@ void kvm_slot_page_track_add_page(struct kvm *kvm, if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) kvm_flush_remote_tlbs(kvm); } -EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); +EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); /* * remove the guest page from the tracking pool which stops the interception - * of corresponding access on that page. It is the opposed operation of - * kvm_slot_page_track_add_page(). + * of corresponding access on that page. * * It should be called under the protection both of mmu-lock and kvm->srcu * or kvm->slots_lock. @@ -116,8 +114,8 @@ EXPORT_SYMBOL_GPL(kvm_slot_page_track_add_page); * @slot: the @gfn belongs to. * @gfn: the guest page. */ -void kvm_slot_page_track_remove_page(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn) +void kvm_write_track_remove_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn) { if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; @@ -130,14 +128,13 @@ void kvm_slot_page_track_remove_page(struct kvm *kvm, */ kvm_mmu_gfn_allow_lpage(slot, gfn); } -EXPORT_SYMBOL_GPL(kvm_slot_page_track_remove_page); +EXPORT_SYMBOL_GPL(kvm_write_track_remove_gfn); /* * check if the corresponding access on the specified guest page is tracked. */ -bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, - gfn_t gfn) +bool kvm_gfn_is_write_tracked(struct kvm *kvm, + const struct kvm_memory_slot *slot, gfn_t gfn) { int index; diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 789d0c479519..50d3278e8c69 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -15,8 +15,8 @@ int kvm_page_track_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages); -bool kvm_slot_page_track_is_active(struct kvm *kvm, - const struct kvm_memory_slot *slot, gfn_t gfn); +bool kvm_gfn_is_write_tracked(struct kvm *kvm, + const struct kvm_memory_slot *slot, gfn_t gfn); #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING int kvm_page_track_init(struct kvm *kvm); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index e71182b8a3f2..05a7e614ead0 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1564,7 +1564,7 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_add_page(kvm, slot, gfn); + kvm_write_track_add_gfn(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); @@ -1593,7 +1593,7 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) } write_lock(&kvm->mmu_lock); - kvm_slot_page_track_remove_page(kvm, slot, gfn); + kvm_write_track_remove_gfn(kvm, slot, gfn); write_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, idx); From patchwork Sat Jul 29 01:35:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127988 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp820582vqg; Fri, 28 Jul 2023 20:16:27 -0700 (PDT) X-Google-Smtp-Source: APBJJlH1/eqkCjUe2AKxs1Lu6Ljt1GcyTPyoGUL3e7u8ptEhRlZfsmlkxNNtv/A0WorCq89TXIZY X-Received: by 2002:a05:6a00:8c9:b0:682:a6bd:e952 with SMTP id s9-20020a056a0008c900b00682a6bde952mr4070990pfu.6.1690600587346; Fri, 28 Jul 2023 20:16:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690600587; cv=none; d=google.com; s=arc-20160816; b=j/Vy5q2u/Wd2Cps2lHHlaWbrQW95NiWfsZOmYFT3C9abHVrRpBOMw15LxMeH3NdCAV WXYTn5zh+xIzde4wC/fspDNU+gvQytGdZH/g97jSFJv/NS9KgFglR3hrB7EDSzBwDiyg F/4SiulkC+LeJR0rj1N+daw+h2lLL6+M+ki5mfB+KTmyNGDqMNDUjMfCMgzVld8OrbEm lO5zcojDlB79O7+p3Us1Y1zBPEzVIZa6c/dY8Jy+uuI10sMEuVtCVztoN7ZELVFkqMpi tjSfPQBSlYHAhDYP9a11CPSFhiiYx4hhFoZmVfoo++ImH6cRGMSks/6ceRVAw8PeMsFL OtBg== 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=Cv+DsoDLVKC7M6FclOb2McPWSddb97LBT0B8H7opNaY=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=HDJYnZ+B5eeuDIxlKBo7LGi/0PAd23s1Emwtq6E2VvkCkXu5kB63JwnxSg2kZOObY1 Ek9hbhqeSNMAxMUCjV965kZZRXBkDWB/tHJqrHbGVW5MHe4dJUZ4N7lYXnbUIl9js/8L eddb3AmBmhzQpse8KY//PzFBLt00FPaPwg8JIo5e2HxJKSIEpu1cxaSBd1Q5p0G+rDkM aYBsKaM7LaasFt0IWgp7bX9pIQfWjxxSqIbLSy5Gk7+WoS5tOarCxOG2Drc5TL9Mv3Hz X3uG4D5aB0orCeqY5frC8hLYPEYySiWiYf8E5+KJeTwc+RYHVZFgQzL2+NhAayeSZr9k baBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=T6dKn0Eq; 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 x33-20020a056a0018a100b006871d101748si435593pfh.254.2023.07.28.20.16.11; Fri, 28 Jul 2023 20:16:27 -0700 (PDT) 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=20221208 header.b=T6dKn0Eq; 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 S237734AbjG2Bid (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237641AbjG2Bh6 (ORCPT ); Fri, 28 Jul 2023 21:37:58 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF9C14ED4 for ; Fri, 28 Jul 2023 18:37:21 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id 41be03b00d2f7-563fc38db94so1629858a12.0 for ; Fri, 28 Jul 2023 18:37:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594591; x=1691199391; 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=Cv+DsoDLVKC7M6FclOb2McPWSddb97LBT0B8H7opNaY=; b=T6dKn0Eqxyz2hq1pOTYEfIvzKdLREMUo3Eg9TGB/irJNqcwSL7N1U8s/qojB7Pomtd HajhioTnMF465M8X+PS/k6ettCzrCZomyoVuYFcv0Nz/JHAeLUu/JPrCRJs3IRY4Y3P+ eY9C/JWu5kka2BzL4yTJsR+VP98afzcS2VbBYuLg7mbrhHcmSMJx1oQVVjfUUM65NxJw Mvmqplu8i0P/4ILWu1S78NWKp6Vz9QSIw7BZHTBZ/agXrwenZ/YSKCT1i4aZb6EvG3Tk CZIs+U82m251j7gMDbv/bLGUnBY17cIc3FNda3lpZHZWXsEku3CBzTn6AiLAuJCQM8Ro L+gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594591; x=1691199391; 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=Cv+DsoDLVKC7M6FclOb2McPWSddb97LBT0B8H7opNaY=; b=RyA0KjInkZlRruZBweIY+uP59TpPBZB5N01KhChKZMZPYdQxuZ9QtXdhbHC0LjRBOL gNe3OMXQq538n2GZ1Ek2pXDSQQ5EUyp8o3mwfm+dlFX7KBM+0OkcvZktI1ilRuzIoSR+ 9hp5wl85KHsrFKJWvaj7TH+KboaYEe6t6UntB+wXD++EwYGk1XJMxaWsUQkaqJdmFSiL 6RP61QfcUzFdm4wqBWo1djkaWNqSVvaqXyMMi5JQSLmYS0Jo0mLRyL9zGP3EaudDX14H LGQxGG1Sh4Yb8wRhpzpSzhRaQ4LJqsQpP3hOObyTwXgDbaZGnWsyBTqPkMtSQuENHfBO kImg== X-Gm-Message-State: ABy/qLbS4jW8eLTOoTg5mlrxe9ANHFqsW2vvFa7YG9TPE/gLVWnwdyhY UPP59K59DLG7td9apaEcHc8jyjKMyUg= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:d489:b0:1bb:83ec:841 with SMTP id c9-20020a170902d48900b001bb83ec0841mr12572plg.6.1690594591600; Fri, 28 Jul 2023 18:36:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:31 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-26-seanjc@google.com> Subject: [PATCH v4 25/29] KVM: x86/mmu: Assert that correct locks are held for page write-tracking 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772723201795071179 X-GMAIL-MSGID: 1772723201795071179 When adding/removing gfns to/from write-tracking, assert that mmu_lock is held for write, and that either slots_lock or kvm->srcu is held. mmu_lock must be held for write to protect gfn_write_track's refcount, and SRCU or slots_lock must be held to protect the memslot itself. Tested-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/page_track.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index b835ba7f325c..29ae61f1e303 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -12,6 +12,7 @@ */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#include #include #include @@ -77,9 +78,6 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, * add guest page to the tracking pool so that corresponding access on that * page will be intercepted. * - * It should be called under the protection both of mmu-lock and kvm->srcu - * or kvm->slots_lock. - * * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. @@ -87,6 +85,11 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn) { + lockdep_assert_held_write(&kvm->mmu_lock); + + lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || + srcu_read_lock_held(&kvm->srcu)); + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; @@ -107,9 +110,6 @@ EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); * remove the guest page from the tracking pool which stops the interception * of corresponding access on that page. * - * It should be called under the protection both of mmu-lock and kvm->srcu - * or kvm->slots_lock. - * * @kvm: the guest instance we are interested in. * @slot: the @gfn belongs to. * @gfn: the guest page. @@ -117,6 +117,11 @@ EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); void kvm_write_track_remove_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, gfn_t gfn) { + lockdep_assert_held_write(&kvm->mmu_lock); + + lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || + srcu_read_lock_held(&kvm->srcu)); + if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) return; From patchwork Sat Jul 29 01:35:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127975 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp814418vqg; Fri, 28 Jul 2023 19:56:02 -0700 (PDT) X-Google-Smtp-Source: APBJJlEsuHljbbD+7rCaL4QxEEF0C72ldSBoP/rAMYU+AMK6Is6GF0itzsEUgrMrlJPWKXWBseKV X-Received: by 2002:a05:6a20:8414:b0:137:a08b:8bef with SMTP id c20-20020a056a20841400b00137a08b8befmr5381968pzd.44.1690599362526; Fri, 28 Jul 2023 19:56:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690599362; cv=none; d=google.com; s=arc-20160816; b=swX9tcB8Z2wP9aHuQ8Tb+XoAnYoNmm7+c9i16zH1yi0loqQUJa8ZKuJJJMGctrTpkq cs7/qYizcYCQd/Iwazklihg6CXyZUM0hU6pSldxa/KkqMJJaxf94IFtz2btqPPBoZvHi 5mtnFZP73XtMk/REPIuMe9sf7kpS/NkFwfjq4lL7A0Mf/UqNhMyVsDMf9gaT4aofN/Xn Bc+2DMWFTXi0yjWVlIhrgLbC+xDAQCRSIVqyqDkNv2nvYTUI4cOWJbFG1qgq4NJq5Iyd kd1D4fpp0kKanpYnM5IdZBPZCBtH0UbGvV/aSFcVw3NeRYhcWlmKGyOxebhotxvqdNkF MRgQ== 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=lQFySAI8ixNkwor8unzmA5lNJLwbWRJXY2r7PDxDqgA=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=1Is2CXDjw6EA3wa882FrhcBjgtnU5UrhGnb4dqtS+zxrjbGcgQ9G7f5KxijS4zK0Ji gdCW9lrg7qY6wwtQ9LFMBvdgzB+Mh1qvfKMFlnXBRweeXdwkLenuspepct3969Dxxetn CKh4FFkW/cFSi0n7tQR93ESmapVb5ROf5IZo7GedMweBQ7IPEa5PVVNNS7wp2NNohINi v1xfuUhdgvmAf80HQrckK/ZSDg0z0d6V8FEnYEbPetBBe8CCrXEuLnNZ5I7PguKMNniZ 8j3O3gs24grTd2z+Zj8HLCuzm1Wk/RJlgytwZeLUB6Hu5cymXPyPFo5algdnAEQMs+Iq OoLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Vk09KIBu; 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 u11-20020a6540cb000000b0052cbf501db2si3878815pgp.68.2023.07.28.19.55.49; Fri, 28 Jul 2023 19:56:02 -0700 (PDT) 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=20221208 header.b=Vk09KIBu; 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 S237736AbjG2Big (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237703AbjG2Bh7 (ORCPT ); Fri, 28 Jul 2023 21:37:59 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F151E49EC for ; Fri, 28 Jul 2023 18:37:22 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-cf4cb742715so2445214276.2 for ; Fri, 28 Jul 2023 18:37:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594593; x=1691199393; 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=lQFySAI8ixNkwor8unzmA5lNJLwbWRJXY2r7PDxDqgA=; b=Vk09KIBuuFUtjM2rE+1nDWmYKQL5pm9DKxQFW0O+5hvfGSmawRS6O256mYyZYndNTj UjieXPs0KDQGbAiIJNNsT7QUCDcPUfSEphNC0wiZnfHp9UdPWPprMBTmwOTcCn91kOvJ iOIF5MpH8QvTlMjjwZ1wAKaj+csKGy8+L6OmaGzc7GosyiU8zk6dnFL8fT2n9TKG6vMZ HFGpzVx1iZvAL/sL6lUMT45dQMCMz4rYo4qZmLNwnqpaD8cpTcsXjjf1uVWbYwFZp3si q48A/0mIaRi5XKWBZnzdk6LLSQ+DLl7WR9M9ExoYtj5DSwRegg9lKxzVe8HjRSdgerTT mfpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594593; x=1691199393; 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=lQFySAI8ixNkwor8unzmA5lNJLwbWRJXY2r7PDxDqgA=; b=SVaMlR/aLs6wYR6eMiH7D6qV+PyP/dIYIxZw/nNJWBsoHQg0DzASeoaP/i+obzLMuK LB7bDDw0FM4Y78Fz/G+bpmgm5rCASUpz/7MvCkDZSJJJe91lBj6hZ8aMDC+5ZrYzi5EZ Du/Bocc708C9Fo2Ws3U2UqK4Jzv8J7HQlBr8b/VGL3MlM4g98WvR20BZ6c32glIq5ATC 3tLPDCAWbM+lDasfrRTFdENyT+BWZjc4NfVhacBmrJlf+0Ufpgs+8jHs9Ra7rNCdMIvE /7Jx9GTLP3dffYOTx27MoT65fXFnZFmN0TpFNyZtjnYRbZy6c1hQu5mss3dYgwdzcOGI NKPA== X-Gm-Message-State: ABy/qLbLtxw356MfF285k+RVpuFnKTUJu/28z63f9ZkFYe0o2H5BXinK sbOZ7ymwcAVOHNFhILYYpMneDHEfw1k= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:3626:0:b0:d0b:4b15:8136 with SMTP id d38-20020a253626000000b00d0b4b158136mr16700yba.12.1690594593340; Fri, 28 Jul 2023 18:36:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:32 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-27-seanjc@google.com> Subject: [PATCH v4 26/29] KVM: x86/mmu: Bug the VM if write-tracking is used but not enabled 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772721916965710253 X-GMAIL-MSGID: 1772721916965710253 Bug the VM if something attempts to write-track a gfn, but write-tracking isn't enabled. The VM is doomed (and KVM has an egregious bug) if KVM or KVMGT wants to shadow guest page tables but can't because write-tracking isn't enabled. Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/kvm/mmu/page_track.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 29ae61f1e303..eedb5889d73e 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -90,7 +90,7 @@ void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || srcu_read_lock_held(&kvm->srcu)); - if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) + if (KVM_BUG_ON(!kvm_page_track_write_tracking_enabled(kvm), kvm)) return; update_gfn_write_track(slot, gfn, 1); @@ -122,7 +122,7 @@ void kvm_write_track_remove_gfn(struct kvm *kvm, lockdep_assert_once(lockdep_is_held(&kvm->slots_lock) || srcu_read_lock_held(&kvm->srcu)); - if (WARN_ON(!kvm_page_track_write_tracking_enabled(kvm))) + if (KVM_BUG_ON(!kvm_page_track_write_tracking_enabled(kvm), kvm)) return; update_gfn_write_track(slot, gfn, -1); From patchwork Sat Jul 29 01:35:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128034 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp901035vqg; Sat, 29 Jul 2023 00:42:17 -0700 (PDT) X-Google-Smtp-Source: APBJJlHeACNOSv3V+7te4nk+VW3yVFEZ2aGSxR+kPbypACn4BxBcS/7RBSNPwSioSxGdbyLK75eh X-Received: by 2002:a05:6a21:47c8:b0:134:24bf:51b with SMTP id as8-20020a056a2147c800b0013424bf051bmr3630025pzc.30.1690616537496; Sat, 29 Jul 2023 00:42:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690616537; cv=none; d=google.com; s=arc-20160816; b=DjOqyz1vaueJ/uegduPcrQlouYhFvp/5TOn+2E/rjaSXU84nj/q7u+tsc0HaTaitmD hSfd8hheD8FaoWEffEjeyMSSOYOkaK2N4WCR3opForV7l8+ATpWCFuo0sgqrHreRcJ/9 08vPnUzgicum37aZjBGg4Tguxh9F+0Kpvq63jG3PwlbhE3MoJpsbsHajEpWpETDrIENt 7Iy+Dw/yV8pnOTw60YbsO4+hI20V1RcVzDXTVmEk+JNaootdMHJSvGaPOPDVgF698QVI WOBrVFDyP9X0WZaWaEir/EBDA+EDv6foMThWeDCBHaR/Dgok5+R1DAXURY0WPTCYV4Z+ cUPw== 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=amIVyFUDmr19Rdoy9QFBSwKKDRSCRSFyEk92UDANkXE=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=WNDahAvWLecdGGWcK2kWz3V7Nqn4n91p+bKynbPhIRgMo9qJH5CG7pQVGykGt/O0OD 3AEap+hZyRfjys9AB+gM//vZKksTJCrA6lgn40fIORjkccJQL3NZazA4UACr1oeXPU8W oD0WgMCbqIkNN/4YGpq6t2w78jfJUh0i9Ha6gF4I4iyR/DHe2NZgjTjyjbfZFAIF4MQ3 y+FS7S++aPbYFsF6IxAX/E/mqDDp4BkAhbR+XZOKgWgWTYu1747+Yg8LWnD9YsFloouT x6Zyu+gBUT46mAT1yMQAeaflx99A9zZYVCZ7vF+5HyXLHWQPpEUlGR0oU82R4s93eCBz lLWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=RJRsOHCn; 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 h11-20020a63574b000000b005501b28fc02si4302224pgm.50.2023.07.29.00.42.04; Sat, 29 Jul 2023 00:42:17 -0700 (PDT) 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=20221208 header.b=RJRsOHCn; 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 S231391AbjG2BoG (ORCPT + 99 others); Fri, 28 Jul 2023 21:44:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237587AbjG2Bmn (ORCPT ); Fri, 28 Jul 2023 21:42:43 -0400 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 624E349C6 for ; Fri, 28 Jul 2023 18:42:08 -0700 (PDT) Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-d0d27cd9db9so4747007276.0 for ; Fri, 28 Jul 2023 18:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594595; x=1691199395; 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=amIVyFUDmr19Rdoy9QFBSwKKDRSCRSFyEk92UDANkXE=; b=RJRsOHCnRliqVLndbTLFcP4E0LRyhN5fJsyVcc6OyR4/hRry49lK7ZjA9puPsmz2KQ xKvxmxyk8FSLhM06pncJot5W2H4fdbkbUOxylhnc5AbuGMlS8fsn6yfIzOL3I9BJUOCB TLQ6fHpAysTqMVQwI8yepP+OKkRI1CtQbfcubnp83I34mjIC1J3b5du9CpBF6ntmMb1x Gt4Q5qytuJjxPBbt704v1awpMhhbZTh67zfIYgsgOj5WFvSA6iDjjN6VaNxypuV9yWqN X+YvlgPrYDTxnRfuP9Gztv9JQVImrn+z+EBcaGsTSNZOVhIK5Jy9/EFl4uEQ0mIqryPt gZEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594595; x=1691199395; 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=amIVyFUDmr19Rdoy9QFBSwKKDRSCRSFyEk92UDANkXE=; b=anbovDiz6KjbuVQeYNZ/nNui4tTnOMQYpBlgyiJsS9EA0fa2hsfeYuBxeJwNNnLAKj U1t3cQZjr559QqXgzynHhl5eRPCS+pYN2wicPDnrTEE8DqLv28vVhKCHa1eVtB15dOOZ el54YiJpbI/SgO1ESCnI1ocYH0Vsps4D7okM/Ahvj9gs/Y8xq/SlwDDHPg+ra/U/MrLy g+TMqH2c5x2JfteT5aHdz463H66KHElrYK/KNmsPzCteMb9YzF1g9yCEWof97ZhiptVy 3jwQIfoEVRWRNPHdH7MckwxDKjzxEMdgELCzyGHdG0Uq8z2GW5WHeB86ptDpoNPSQN0U 0tcg== X-Gm-Message-State: ABy/qLaQQsj6qZumnToPvKw+M3muCl/4t1ruo6WiAIe8Qk8HvjLPKAyx arrVCcrmkj0e3/MWqcaC6IeLgpQHfVs= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:d702:0:b0:d29:958c:e431 with SMTP id o2-20020a25d702000000b00d29958ce431mr25262ybg.1.1690594595412; Fri, 28 Jul 2023 18:36:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:33 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-28-seanjc@google.com> Subject: [PATCH v4 27/29] KVM: x86/mmu: Drop @slot param from exported/external page-track APIs 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 , Yongwei Ma , 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, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772739926311384641 X-GMAIL-MSGID: 1772739926311384641 Refactor KVM's exported/external page-track, a.k.a. write-track, APIs to take only the gfn and do the required memslot lookup in KVM proper. Forcing users of the APIs to get the memslot unnecessarily bleeds KVM internals into KVMGT and complicates usage of the APIs. No functional change intended. Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 7 +-- arch/x86/kvm/mmu/mmu.c | 4 +- arch/x86/kvm/mmu/page_track.c | 85 ++++++++++++++++++++------- arch/x86/kvm/mmu/page_track.h | 5 ++ drivers/gpu/drm/i915/gvt/kvmgt.c | 37 +++--------- 5 files changed, 80 insertions(+), 58 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index f5c1db36cdb7..4afab697e21c 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -4,11 +4,6 @@ #include -void kvm_write_track_add_gfn(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn); -void kvm_write_track_remove_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, - gfn_t gfn); - #ifdef CONFIG_KVM_EXTERNAL_WRITE_TRACKING /* * The notifier represented by @kvm_page_track_notifier_node is linked into @@ -55,6 +50,8 @@ kvm_page_track_register_notifier(struct kvm *kvm, void kvm_page_track_unregister_notifier(struct kvm *kvm, struct kvm_page_track_notifier_node *n); +int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn); +int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn); #else /* * Allow defining a node in a structure even if page tracking is disabled, e.g. diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index a0309fde3549..c6ae1885371c 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -840,7 +840,7 @@ static void account_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) /* the non-leaf shadow pages are keeping readonly. */ if (sp->role.level > PG_LEVEL_4K) - return kvm_write_track_add_gfn(kvm, slot, gfn); + return __kvm_write_track_add_gfn(kvm, slot, gfn); kvm_mmu_gfn_disallow_lpage(slot, gfn); @@ -886,7 +886,7 @@ static void unaccount_shadowed(struct kvm *kvm, struct kvm_mmu_page *sp) slots = kvm_memslots_for_spte_role(kvm, sp->role); slot = __gfn_to_memslot(slots, gfn); if (sp->role.level > PG_LEVEL_4K) - return kvm_write_track_remove_gfn(kvm, slot, gfn); + return __kvm_write_track_remove_gfn(kvm, slot, gfn); kvm_mmu_gfn_allow_lpage(slot, gfn); } diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index eedb5889d73e..2a64df38ccab 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -74,16 +74,8 @@ static void update_gfn_write_track(struct kvm_memory_slot *slot, gfn_t gfn, slot->arch.gfn_write_track[index] += count; } -/* - * add guest page to the tracking pool so that corresponding access on that - * page will be intercepted. - * - * @kvm: the guest instance we are interested in. - * @slot: the @gfn belongs to. - * @gfn: the guest page. - */ -void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, - gfn_t gfn) +void __kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn) { lockdep_assert_held_write(&kvm->mmu_lock); @@ -104,18 +96,9 @@ void kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, if (kvm_mmu_slot_gfn_write_protect(kvm, slot, gfn, PG_LEVEL_4K)) kvm_flush_remote_tlbs(kvm); } -EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); -/* - * remove the guest page from the tracking pool which stops the interception - * of corresponding access on that page. - * - * @kvm: the guest instance we are interested in. - * @slot: the @gfn belongs to. - * @gfn: the guest page. - */ -void kvm_write_track_remove_gfn(struct kvm *kvm, - struct kvm_memory_slot *slot, gfn_t gfn) +void __kvm_write_track_remove_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn) { lockdep_assert_held_write(&kvm->mmu_lock); @@ -133,7 +116,6 @@ void kvm_write_track_remove_gfn(struct kvm *kvm, */ kvm_mmu_gfn_allow_lpage(slot, gfn); } -EXPORT_SYMBOL_GPL(kvm_write_track_remove_gfn); /* * check if the corresponding access on the specified guest page is tracked. @@ -257,4 +239,63 @@ void kvm_page_track_delete_slot(struct kvm *kvm, struct kvm_memory_slot *slot) srcu_read_unlock(&head->track_srcu, idx); } +/* + * add guest page to the tracking pool so that corresponding access on that + * page will be intercepted. + * + * @kvm: the guest instance we are interested in. + * @gfn: the guest page. + */ +int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn) +{ + struct kvm_memory_slot *slot; + int idx; + + idx = srcu_read_lock(&kvm->srcu); + + slot = gfn_to_memslot(kvm, gfn); + if (!slot) { + srcu_read_unlock(&kvm->srcu, idx); + return -EINVAL; + } + + write_lock(&kvm->mmu_lock); + __kvm_write_track_add_gfn(kvm, slot, gfn); + write_unlock(&kvm->mmu_lock); + + srcu_read_unlock(&kvm->srcu, idx); + + return 0; +} +EXPORT_SYMBOL_GPL(kvm_write_track_add_gfn); + +/* + * remove the guest page from the tracking pool which stops the interception + * of corresponding access on that page. + * + * @kvm: the guest instance we are interested in. + * @gfn: the guest page. + */ +int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn) +{ + struct kvm_memory_slot *slot; + int idx; + + idx = srcu_read_lock(&kvm->srcu); + + slot = gfn_to_memslot(kvm, gfn); + if (!slot) { + srcu_read_unlock(&kvm->srcu, idx); + return -EINVAL; + } + + write_lock(&kvm->mmu_lock); + __kvm_write_track_remove_gfn(kvm, slot, gfn); + write_unlock(&kvm->mmu_lock); + + srcu_read_unlock(&kvm->srcu, idx); + + return 0; +} +EXPORT_SYMBOL_GPL(kvm_write_track_remove_gfn); #endif diff --git a/arch/x86/kvm/mmu/page_track.h b/arch/x86/kvm/mmu/page_track.h index 50d3278e8c69..62f98c6c5af3 100644 --- a/arch/x86/kvm/mmu/page_track.h +++ b/arch/x86/kvm/mmu/page_track.h @@ -15,6 +15,11 @@ int kvm_page_track_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot, unsigned long npages); +void __kvm_write_track_add_gfn(struct kvm *kvm, struct kvm_memory_slot *slot, + gfn_t gfn); +void __kvm_write_track_remove_gfn(struct kvm *kvm, + struct kvm_memory_slot *slot, gfn_t gfn); + bool kvm_gfn_is_write_tracked(struct kvm *kvm, const struct kvm_memory_slot *slot, gfn_t gfn); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 05a7e614ead0..21342a93e418 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1546,9 +1546,7 @@ static struct mdev_driver intel_vgpu_mdev_driver = { int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) { - struct kvm *kvm = info->vfio_device.kvm; - struct kvm_memory_slot *slot; - int idx; + int r; if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; @@ -1556,18 +1554,9 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) if (kvmgt_gfn_is_write_protected(info, gfn)) return 0; - idx = srcu_read_lock(&kvm->srcu); - slot = gfn_to_memslot(kvm, gfn); - if (!slot) { - srcu_read_unlock(&kvm->srcu, idx); - return -EINVAL; - } - - write_lock(&kvm->mmu_lock); - kvm_write_track_add_gfn(kvm, slot, gfn); - write_unlock(&kvm->mmu_lock); - - srcu_read_unlock(&kvm->srcu, idx); + r = kvm_write_track_add_gfn(info->vfio_device.kvm, gfn); + if (r) + return r; kvmgt_protect_table_add(info, gfn); return 0; @@ -1575,9 +1564,7 @@ int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn) int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) { - struct kvm *kvm = info->vfio_device.kvm; - struct kvm_memory_slot *slot; - int idx; + int r; if (!test_bit(INTEL_VGPU_STATUS_ATTACHED, info->status)) return -ESRCH; @@ -1585,17 +1572,9 @@ int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn) if (!kvmgt_gfn_is_write_protected(info, gfn)) return 0; - idx = srcu_read_lock(&kvm->srcu); - slot = gfn_to_memslot(kvm, gfn); - if (!slot) { - srcu_read_unlock(&kvm->srcu, idx); - return -EINVAL; - } - - write_lock(&kvm->mmu_lock); - kvm_write_track_remove_gfn(kvm, slot, gfn); - write_unlock(&kvm->mmu_lock); - srcu_read_unlock(&kvm->srcu, idx); + r = kvm_write_track_remove_gfn(info->vfio_device.kvm, gfn); + if (r) + return r; kvmgt_protect_table_del(info, gfn); return 0; From patchwork Sat Jul 29 01:35:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128028 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp898844vqg; Sat, 29 Jul 2023 00:35:20 -0700 (PDT) X-Google-Smtp-Source: APBJJlGJfnmNta3IQzk9vu4xdeQflfFICVgYX7krttyC1Evm9VQjuj0Bxd3kZJy1U3jm9oSJa5I8 X-Received: by 2002:a17:90a:7061:b0:268:1e51:3496 with SMTP id f88-20020a17090a706100b002681e513496mr3883991pjk.21.1690616120538; Sat, 29 Jul 2023 00:35:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690616120; cv=none; d=google.com; s=arc-20160816; b=fF70Dexwe6nO2fnhw8peU3ogAZK0RvIKjMmkONolpGQdlMfCyFDCOehCAIiaSeqU3U KJ2kLeajyBp4PZQypz0M2684jyH5dntHsRZ8r0Ii6kJumNFhxHSzPwQ4BAxrPhr4L+Z4 v46tuQNlPI7yA/ZlK6/R/ImdZyVqeXAgmHNplgFIRQcRVDIBDuJAAMmxG18Dq0HuLtLM b9k2M8sRASw9wACnDZ+owvA87lUzEUeeldnS+cxyKLscBw/auzBLt6htdZSBZCZEpCau AjpZYhaQJKCLUrr2U/KpCkfBdWXr/krhUeJiWDIoS1LlFCuuHPPaEExJxV6KsDlk35We RhCw== 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=czGmzPMDgqsIJ4RQV1Z6GN4pZzqhqI37yd+QxF3MreY=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=n1g5FE88wSmSPoF9CPIqfTrBZVJosL1jf1IJ4zKrlTMHP9BE6J1kMMkc5RFnyKJ/0i pYonT0zQ305U4UdtULy0GqHHyGKZ2axiPWmkEtVLv4Lpg5ffwZAkwSdMoFjms/y5ZMig WYASRBysRT0UqEAq1a4pMDrbSPu7WU9RN8TOUrCeiTQCRfiq7mJiDWnqjV2ol7HMk+8D qxh1YwmotgZ+TK+1UEZdwUEgcWCDPP20SSKm2nNupETcg5Np+MiCUy4KwAx/yHKc2WeN Pb0jfH+CaGzqJzI6t10IyEhoVTPIz38WxD+oXaPH0R3Rgz0AmX7FVTkPy+8Ac4/y5L0l ZC4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=2NTUzYwk; 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 a4-20020a17090ad80400b00268067839c9si549973pjv.106.2023.07.29.00.35.06; Sat, 29 Jul 2023 00:35:20 -0700 (PDT) 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=20221208 header.b=2NTUzYwk; 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 S237425AbjG2Bil (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230120AbjG2BiH (ORCPT ); Fri, 28 Jul 2023 21:38:07 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC2B14ED1 for ; Fri, 28 Jul 2023 18:37:23 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-564fb1018bcso28365327b3.0 for ; Fri, 28 Jul 2023 18:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594597; x=1691199397; 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=czGmzPMDgqsIJ4RQV1Z6GN4pZzqhqI37yd+QxF3MreY=; b=2NTUzYwk3TaN5RllCgOP5ct5lZFLcAcfcZZZwfNwujtEk9FPQaGjPFLUv9zpL5dal+ n4jk6r32/CMwr16FEJlFrMte1BNxTbdaCTChtMRkEw2hzMVhkh9x5+ubSW9p1XTnZgr9 5Y7ku84iwTlnSU8VTKzDDdO3/feeN5h2CmwmMJQcTln+2vP8PyjZ5BsxOG2istjRrV22 wgr9lqEQxeR3OEnORORlHuDBeUdudrL4EzZXu4Ks+eLNzZBrOfVjMdYjboLE8ItkIqme nP0US683/I0pSpHLK5eKsJzBjBqoFuwQZJJiN1XXweyhxl8F2p3L0UB9XHh3uesrxoL6 eXVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594597; x=1691199397; 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=czGmzPMDgqsIJ4RQV1Z6GN4pZzqhqI37yd+QxF3MreY=; b=i5Gp3JJLDXfGsCJuDeT6k/F4B99UnpksOB/JAATd6Vi3+VqRJcoLaCFFqO2G6+aT+k GBnxvmDPWzC67CvAIkrLtmpT/jX0R9rNqIStShy2V57FPrS6JaNpUYmyBj0rznxP9Iaj Cj8PPDx6oh+nbntt4M3t86bcWxRveFMFPiMBpHLq0p/QzmgibdHNBMw/v55+vWhggODm SHf9uyJ/aunCcp3hHydh207Kfl/jMcXYXoeplivt9GGQqvgZTXVXPc6mQqphiktxhgMg TZdKWgsVFKx4n6S05SY48xjGfb1cAiMd7cCc/gnuYw+oc+k73K2w68zzOFxvR8q2eYwn iInQ== X-Gm-Message-State: ABy/qLYXsl70BnLjWfYvCE4PdIZqddgeVzTXoMlpwRotht17GycAfSwq oSjvrlTgpKOTBLg3bFFo2VQKz+tMeSo= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:690c:72c:b0:583:5039:d4a0 with SMTP id bt12-20020a05690c072c00b005835039d4a0mr24920ywb.0.1690594597389; Fri, 28 Jul 2023 18:36:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:34 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-29-seanjc@google.com> Subject: [PATCH v4 28/29] KVM: x86/mmu: Handle KVM bookkeeping in page-track APIs, not callers 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772739489379264461 X-GMAIL-MSGID: 1772739489379264461 Get/put references to KVM when a page-track notifier is (un)registered instead of relying on the caller to do so. Forcing the caller to do the bookkeeping is unnecessary and adds one more thing for users to get wrong, e.g. see commit 9ed1fdee9ee3 ("drm/i915/gvt: Get reference to KVM iff attachment to VM is successful"). Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_page_track.h | 11 +++++------ arch/x86/kvm/mmu/page_track.c | 18 ++++++++++++------ drivers/gpu/drm/i915/gvt/kvmgt.c | 17 +++++++---------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/arch/x86/include/asm/kvm_page_track.h b/arch/x86/include/asm/kvm_page_track.h index 4afab697e21c..3d040741044b 100644 --- a/arch/x86/include/asm/kvm_page_track.h +++ b/arch/x86/include/asm/kvm_page_track.h @@ -44,12 +44,11 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -void -kvm_page_track_register_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n); -void -kvm_page_track_unregister_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n); +int kvm_page_track_register_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n); +void kvm_page_track_unregister_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n); + int kvm_write_track_add_gfn(struct kvm *kvm, gfn_t gfn); int kvm_write_track_remove_gfn(struct kvm *kvm, gfn_t gfn); #else diff --git a/arch/x86/kvm/mmu/page_track.c b/arch/x86/kvm/mmu/page_track.c index 2a64df38ccab..fd04e618ad2d 100644 --- a/arch/x86/kvm/mmu/page_track.c +++ b/arch/x86/kvm/mmu/page_track.c @@ -157,17 +157,22 @@ int kvm_page_track_init(struct kvm *kvm) * register the notifier so that event interception for the tracked guest * pages can be received. */ -void -kvm_page_track_register_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n) +int kvm_page_track_register_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n) { struct kvm_page_track_notifier_head *head; + if (!kvm || kvm->mm != current->mm) + return -ESRCH; + + kvm_get_kvm(kvm); + head = &kvm->arch.track_notifier_head; write_lock(&kvm->mmu_lock); hlist_add_head_rcu(&n->node, &head->track_notifier_list); write_unlock(&kvm->mmu_lock); + return 0; } EXPORT_SYMBOL_GPL(kvm_page_track_register_notifier); @@ -175,9 +180,8 @@ EXPORT_SYMBOL_GPL(kvm_page_track_register_notifier); * stop receiving the event interception. It is the opposed operation of * kvm_page_track_register_notifier(). */ -void -kvm_page_track_unregister_notifier(struct kvm *kvm, - struct kvm_page_track_notifier_node *n) +void kvm_page_track_unregister_notifier(struct kvm *kvm, + struct kvm_page_track_notifier_node *n) { struct kvm_page_track_notifier_head *head; @@ -187,6 +191,8 @@ kvm_page_track_unregister_notifier(struct kvm *kvm, hlist_del_rcu(&n->node); write_unlock(&kvm->mmu_lock); synchronize_srcu(&head->track_srcu); + + kvm_put_kvm(kvm); } EXPORT_SYMBOL_GPL(kvm_page_track_unregister_notifier); diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 21342a93e418..eb50997dd369 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -654,21 +654,19 @@ static bool __kvmgt_vgpu_exist(struct intel_vgpu *vgpu) static int intel_vgpu_open_device(struct vfio_device *vfio_dev) { struct intel_vgpu *vgpu = vfio_dev_to_vgpu(vfio_dev); - - if (!vgpu->vfio_device.kvm || - vgpu->vfio_device.kvm->mm != current->mm) { - gvt_vgpu_err("KVM is required to use Intel vGPU\n"); - return -ESRCH; - } + int ret; if (__kvmgt_vgpu_exist(vgpu)) return -EEXIST; vgpu->track_node.track_write = kvmgt_page_track_write; vgpu->track_node.track_remove_region = kvmgt_page_track_remove_region; - kvm_get_kvm(vgpu->vfio_device.kvm); - kvm_page_track_register_notifier(vgpu->vfio_device.kvm, - &vgpu->track_node); + ret = kvm_page_track_register_notifier(vgpu->vfio_device.kvm, + &vgpu->track_node); + if (ret) { + gvt_vgpu_err("KVM is required to use Intel vGPU\n"); + return ret; + } set_bit(INTEL_VGPU_STATUS_ATTACHED, vgpu->status); @@ -703,7 +701,6 @@ static void intel_vgpu_close_device(struct vfio_device *vfio_dev) kvm_page_track_unregister_notifier(vgpu->vfio_device.kvm, &vgpu->track_node); - kvm_put_kvm(vgpu->vfio_device.kvm); kvmgt_protect_table_destroy(vgpu); gvt_cache_destroy(vgpu); From patchwork Sat Jul 29 01:35:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 128042 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp904675vqg; Sat, 29 Jul 2023 00:55:17 -0700 (PDT) X-Google-Smtp-Source: APBJJlGQgnQ5Wqbz87yHiSx73tNlaB3EUtiNxtx7OrgyTQ3Y6W0Mp+YGTdQG7W/xSbsk4e72h9ob X-Received: by 2002:a05:6a20:5499:b0:13a:dbc1:16d5 with SMTP id i25-20020a056a20549900b0013adbc116d5mr4733844pzk.42.1690617317061; Sat, 29 Jul 2023 00:55:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690617317; cv=none; d=google.com; s=arc-20160816; b=Mgm05nmUtwQgJECgWZ6xWFUVOwC8sUl0Qu80pcCUh16A9bhQI52dc+0gcbQbrVjKnZ YQ5rh8n/1iazNRM4/Vqitb3CVwKz6D4Y1HRq+xANBBz3iO7BerLpGSjE8xcuORIsJCmw zO0VQRJSx5A4UgHMriFlWOghzBcrHHUyYco90tVBEfViJoGjupqOgTeGnZmRqWfYOkxU TqlucjDsAosawymAgB89+hUCV1N1+xaF/sCNBLq6WtNIflzv9cH5rEJf88qhwqwfZD0b HmEGP78J8X7tf1uh/zCgtgLFfjL+Jlp/YBaNcdmkN96chnOx9ZEQ0d9t6GvWU7Q1kgET qk0A== 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=DwvbUo0YFwD2y5U7V+bjb1xFYzZ0nLkltBIeETbMd6E=; fh=J37Q4aKtoxdyy+p3BpF2uV3z0maXFfn3A5M61jlSlO0=; b=OHM5usgp2N83HWeeV/Dn6jzFKKiNMiKm06SMGBVhPyDhlTJBcf2Ih4zks4gP0I02oT NwbIFJLYda2ahLDzrgXWgNqF7wMx6BluBBVyMhB4vzvZlEkAlkKdpC311LTOOCSNQQFC ug6a7k0stJ2Aw1jrATQHMhHg59GGRUiRuAhOgIhVDJ9E8tv9KnoQ7O6dn9Z/x/fYGxem neVRsJXgUeJpKyFMXvlzsRciq/u8NkkOdiiFPenQuXkP5csj3KQsm1qCCvSykLX4NSET w592YWw8NrZFXfb5evtkNi6vlb19e9alt5ZuvZAG8gObrez/pGQPYGfrA35DkKggHQgK tRtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Ge68nujb; 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 cq24-20020a056a00331800b006870f7747f6si2370336pfb.160.2023.07.29.00.55.03; Sat, 29 Jul 2023 00:55:17 -0700 (PDT) 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=20221208 header.b=Ge68nujb; 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 S236666AbjG2Biv (ORCPT + 99 others); Fri, 28 Jul 2023 21:38:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47882 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237720AbjG2BiN (ORCPT ); Fri, 28 Jul 2023 21:38:13 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9DBBF4EF3 for ; Fri, 28 Jul 2023 18:37:31 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-563ab574cb5so1781379a12.1 for ; Fri, 28 Jul 2023 18:37:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690594600; x=1691199400; 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=DwvbUo0YFwD2y5U7V+bjb1xFYzZ0nLkltBIeETbMd6E=; b=Ge68nujbq9a2/5qupOk7vKqq3XlDn5p8ntiVpmK47hZYN+/QS4qy0wLj6mzi//Ln3N bjIWafKzZtkd8LQqhjRdZON3HDXB5fCK9FhlneYcw4v+xtAWX9E4CPS0ddxUxM1BU+ou uqsJv3tEk+OkpS9BfP1CupF2QdoKOH02fs1K3Ib89GUvvYmRfPRX9GXq8Qk6hWUr/tNP U7vyKG8jPeUgErUAu/w48/FjAGWgL+fFw7j74vkaZbaqjcBqf1vC9GEbvdtcM9pxV6mC P1Ioi1DZwQV+4ATKOYarBouEJgAG/V3mHWk+Hvgxt1vW2YDRiU63dl0VSgEIpd2po20a NDdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690594600; x=1691199400; 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=DwvbUo0YFwD2y5U7V+bjb1xFYzZ0nLkltBIeETbMd6E=; b=l12ZyV9ld7blpI+ThynNs8jriTExzUHt6kgetDOI79lZD4F1KbpYgOwSG7B67v0wQH 23cH0m2HevLPWUt5TH7Ox6XGImwfEIihrnRzVNDVSK3cJlfZj28MpudNFk9COzVmCxy1 EY0o3owxI7gNQ+2zGdaUopQYzMFeCecRBhq/WnHPDdl64B9BdH6qL05hBBD3uFGKqp4L 99/am/I5aqY1i8WqZ4kT56I+gJg5F6cU0HJK1fLSZqFjAld+xQFUO4dHMsXcyOncXF0d 4WUfs8GOZVG9oAscwaKc7KOVRnx0bhstb8s1X8U5IfPFg28Y6VaP3ooobtFvBvBZt3a0 4A6w== X-Gm-Message-State: ABy/qLaNH26WdaJtlPmRcsxyUXSzc3295Z9JJ5IS+zOVsXLqZINfmRnA okxEaIgwoStR/Srj9oIO+CkReRWXqvA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:da83:b0:1b3:c62d:71b5 with SMTP id j3-20020a170902da8300b001b3c62d71b5mr12428plx.0.1690594599204; Fri, 28 Jul 2023 18:36:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:35:35 -0700 In-Reply-To: <20230729013535.1070024-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729013535.1070024-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729013535.1070024-30-seanjc@google.com> Subject: [PATCH v4 29/29] drm/i915/gvt: Drop final dependencies on KVM internal details 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 , Yongwei Ma , 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,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: INBOX X-GMAIL-THRID: 1772740744147629784 X-GMAIL-MSGID: 1772740744147629784 Open code gpa_to_gfn() in kvmgt_page_track_write() and drop KVMGT's dependency on kvm_host.h, i.e. include only kvm_page_track.h. KVMGT assumes "gfn == gpa >> PAGE_SHIFT" all over the place, including a few lines below in the same function with the same gpa, i.e. there's no reason to use KVM's helper for this one case. No functional change intended. Reviewed-by: Yan Zhao Tested-by: Yongwei Ma Signed-off-by: Sean Christopherson Reviewed-by: Zhi Wang --- drivers/gpu/drm/i915/gvt/gvt.h | 3 ++- drivers/gpu/drm/i915/gvt/kvmgt.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h index 2d65800d8e93..53a0a42a50db 100644 --- a/drivers/gpu/drm/i915/gvt/gvt.h +++ b/drivers/gpu/drm/i915/gvt/gvt.h @@ -34,10 +34,11 @@ #define _GVT_H_ #include -#include #include #include +#include + #include "i915_drv.h" #include "intel_gvt.h" diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index eb50997dd369..aaed3969f204 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1585,7 +1585,7 @@ static void kvmgt_page_track_write(gpa_t gpa, const u8 *val, int len, mutex_lock(&info->vgpu_lock); - if (kvmgt_gfn_is_write_protected(info, gpa_to_gfn(gpa))) + if (kvmgt_gfn_is_write_protected(info, gpa >> PAGE_SHIFT)) intel_vgpu_page_track_handler(info, gpa, (void *)val, len);