Received: by 2002:ab2:69cc:0:b0:1f4:be93:e15a with SMTP id n12csp1911252lqp; Tue, 16 Apr 2024 01:10:19 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCW3Nd8EmDe4GNkBmfWW8b7gtl/gjIw9AXtj0Ol04QW2sK5dV1/BhDzeFCJKygGRi4S7uR58nh1z0r/F8aATWbsRpWEbLz1MZf/WPF2usg== X-Google-Smtp-Source: AGHT+IGrawW13C3WwjblZB9/U731WUXlkSIzbMkDiN38Sq6FQI+xy1w6bAFtc02bkX6pFFoP4Pct X-Received: by 2002:a17:906:29cb:b0:a52:61b9:be48 with SMTP id y11-20020a17090629cb00b00a5261b9be48mr3720582eje.35.1713255019039; Tue, 16 Apr 2024 01:10:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713255019; cv=pass; d=google.com; s=arc-20160816; b=mdCiatg1w33en6waKFr7XXLRC+DZHVTVwFUtLm4XhKEME1fk7K2BH/dvLshOABW4Kl EjXF/AMy8v6bybQF8/XQok4J/JJ90r8mQagvVHxRafXx6ft4CWTgb02y2uJV3Ikxn6G1 xs3zV/iUv1ldvvH73cZmiOzxz0DQOgX05WIKuDhT4F0eGn1qB/5tyVdvZULIqx1L4BJb BHGS94yOkOjTdeKCew+IEkUfb/CipzHWM7P+E9oDSm9Qbqa1ILtpmM0pjZV0zqDzRqoU WQkErNkfk9/hHA6ew3W65FoarYAsba+bblFwfXCRBPBJDPypCKskS0WtZHLsbyiEZl9e NuUg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=Ex5fN+Rz/gMn04vRW52jIYe8J1VV/loX9+GWnxFbxN8=; fh=bewSQvuA0/GMLNkXZCY6BVvXowY1LyW/Ro23JMfVQ8s=; b=b2dMncMqnWsmWisWeCJN/AM03DHFXY1pR/MemDiJcMUcKON6JenUk6a9N1nrrMr+ct xPSkNuD7gbBZkVv5aznBs777RwVr8Km5QLD97yaP+9WtHz2XHRYiHPk5BwxqKHQHR66w pCeCHnUyIBJD8rK5jVmCGaoCa4EGPENqX4L1XwhuPIQSmm4JRcCCewFWfhgC9Ko20aPt P7us1RFRAUc68epRPKXaXDHEF/cEqtFKLw03Z+RsvbDAXf/CKt2g+0ti0yEzsXFeFzgy EvVTrFZjBlPEF4tapfhuPSaK6ZDYSneC/xMnkELoqB4ItK1sr9pK53nIr7mUMPVGirG8 ZNtA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="Kb0+ra/R"; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-146470-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-146470-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id y23-20020a170906471700b00a51bc6984f8si5281996ejq.733.2024.04.16.01.10.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Apr 2024 01:10:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-146470-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="Kb0+ra/R"; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-146470-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-146470-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 405CC1F23AE7 for ; Tue, 16 Apr 2024 08:10:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 04B3015AD8F; Tue, 16 Apr 2024 08:08:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Kb0+ra/R" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC47615ADAF for ; Tue, 16 Apr 2024 08:08:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.15 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713254919; cv=none; b=M+5PCnEjY1g0xOP4tUGl1vKSduFFUMb3tb1B0RiKT4GnxORc0rrf6IVxTiQ55M0UMd6YVpNjBkuAO03Xrrfw33uBzTESncZzSBNsJ+ZUo6DhxqYnX6/FyN1AlTH8IS9mKv2ujVt874A4RVkts/73uC3qKCAubXKe8yGT4CjpOaw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713254919; c=relaxed/simple; bh=+B1K+3RGNJMZ4qg4nKfxt0LCCXm/Psgjhstoi04IBCI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dYscQSwPN4JXbh09mbNoSqYbQ8PFebLuorjRbOPUruOB9o91OlcXqIbVLdwAf4cpDPTf50kqWhpBQU4m+k9m5Bgfh1WW71o+aGT3V5/Yxh666VElO8u9v0VYC/YBnXXnmHDyPg4ZIyXbiqmrbkHkRuMNcULOxMHKl/FvLUNzLMA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Kb0+ra/R; arc=none smtp.client-ip=198.175.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713254918; x=1744790918; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+B1K+3RGNJMZ4qg4nKfxt0LCCXm/Psgjhstoi04IBCI=; b=Kb0+ra/RthTiMllmy/kbtUivtWn9eQJYH6D0CzNQ/trZerBuw+B1f9l5 sknEechUe/ZutcD6PyjAfWNvrjCj+X6xKaskOA7G3L3NM9p9p9cUHB8/e Pzr6mxuvmRNMedjil57n4GvBq8y3PQ8tZPDBegHi6O6CIGTrTPqdF+42x TeuGYlkLcpeIJJKDr74u0EcIW3dP97imI3nR7WaIBpNXL9VFccXBJIV9+ vrF4tmNWYmTy0vlkYQxPnpRtCQBa6mokCVlEycwZNXSXuqmbmIbP4lQYl 2i/D4ggEtAPS7V3UUZolEpqtIj48ddEm3qD35mhIw5fSCsveYfETcCcKd A==; X-CSE-ConnectionGUID: jiqhwyqNTPaIGzGX1mGTgQ== X-CSE-MsgGUID: BGMtd0Y1T5KMeLpPmQ1aYw== X-IronPort-AV: E=McAfee;i="6600,9927,11045"; a="12466497" X-IronPort-AV: E=Sophos;i="6.07,205,1708416000"; d="scan'208";a="12466497" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Apr 2024 01:08:37 -0700 X-CSE-ConnectionGUID: cCrMESowQOmPAg6FzGnh7w== X-CSE-MsgGUID: sK9UMUfHRXqFSd68+c3Yqw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,205,1708416000"; d="scan'208";a="22077786" Received: from unknown (HELO allen-box.sh.intel.com) ([10.239.159.127]) by orviesa010.jf.intel.com with ESMTP; 16 Apr 2024 01:08:36 -0700 From: Lu Baolu To: Joerg Roedel , Will Deacon , Robin Murphy , Kevin Tian , Jason Gunthorpe Cc: Tina Zhang , Yi Liu , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, Lu Baolu Subject: [PATCH v3 08/12] iommu/vt-d: Use cache_tag_flush_range() in cache_invalidate_user Date: Tue, 16 Apr 2024 16:06:52 +0800 Message-Id: <20240416080656.60968-9-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240416080656.60968-1-baolu.lu@linux.intel.com> References: <20240416080656.60968-1-baolu.lu@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The cache_invalidate_user callback is called to invalidate a range of caches for the affected user domain. Use cache_tag_flush_range() in this callback. Signed-off-by: Lu Baolu --- drivers/iommu/intel/iommu.h | 6 +++++ drivers/iommu/intel/nested.c | 50 +++--------------------------------- 2 files changed, 9 insertions(+), 47 deletions(-) diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index e17683ecef4b..b1d04aa36d31 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -1050,6 +1050,12 @@ static inline unsigned long aligned_nrpages(unsigned long host_addr, size_t size return PAGE_ALIGN(host_addr + size) >> VTD_PAGE_SHIFT; } +/* Return a size from number of VTD pages. */ +static inline unsigned long nrpages_to_size(unsigned long npages) +{ + return npages << VTD_PAGE_SHIFT; +} + /* Convert value to context PASID directory size field coding. */ #define context_pdts(pds) (((pds) & 0x7) << 9) diff --git a/drivers/iommu/intel/nested.c b/drivers/iommu/intel/nested.c index 13406ee742bf..16a2bcf5cfeb 100644 --- a/drivers/iommu/intel/nested.c +++ b/drivers/iommu/intel/nested.c @@ -88,50 +88,6 @@ static void intel_nested_domain_free(struct iommu_domain *domain) kfree(dmar_domain); } -static void nested_flush_dev_iotlb(struct dmar_domain *domain, u64 addr, - unsigned int mask) -{ - struct device_domain_info *info; - unsigned long flags; - u16 sid, qdep; - - spin_lock_irqsave(&domain->lock, flags); - list_for_each_entry(info, &domain->devices, link) { - if (!info->ats_enabled) - continue; - sid = info->bus << 8 | info->devfn; - qdep = info->ats_qdep; - qi_flush_dev_iotlb(info->iommu, sid, info->pfsid, - qdep, addr, mask); - quirk_extra_dev_tlb_flush(info, addr, mask, - IOMMU_NO_PASID, qdep); - } - spin_unlock_irqrestore(&domain->lock, flags); -} - -static void intel_nested_flush_cache(struct dmar_domain *domain, u64 addr, - u64 npages, bool ih) -{ - struct iommu_domain_info *info; - unsigned int mask; - unsigned long i; - - xa_for_each(&domain->iommu_array, i, info) - qi_flush_piotlb(info->iommu, - domain_id_iommu(domain, info->iommu), - IOMMU_NO_PASID, addr, npages, ih); - - if (!domain->has_iotlb_device) - return; - - if (npages == U64_MAX) - mask = 64 - VTD_PAGE_SHIFT; - else - mask = ilog2(__roundup_pow_of_two(npages)); - - nested_flush_dev_iotlb(domain, addr, mask); -} - static int intel_nested_cache_invalidate_user(struct iommu_domain *domain, struct iommu_user_data_array *array) { @@ -164,9 +120,9 @@ static int intel_nested_cache_invalidate_user(struct iommu_domain *domain, break; } - intel_nested_flush_cache(dmar_domain, inv_entry.addr, - inv_entry.npages, - inv_entry.flags & IOMMU_VTD_INV_FLAGS_LEAF); + cache_tag_flush_range(dmar_domain, inv_entry.addr, + inv_entry.addr + nrpages_to_size(inv_entry.npages) - 1, + inv_entry.flags & IOMMU_VTD_INV_FLAGS_LEAF); processed++; } -- 2.34.1