Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp853280ybb; Wed, 25 Mar 2020 10:52:05 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvXualQHBlyHaj0WcgVcySNpz9JAeDY5hmvVK9MD+cu+6Vc/ON5UrP7oFeXmIChCH3H/PER X-Received: by 2002:aca:f183:: with SMTP id p125mr3426415oih.74.1585158725066; Wed, 25 Mar 2020 10:52:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585158725; cv=none; d=google.com; s=arc-20160816; b=ktuxlF/O04aGT4aqgEg/6Avao7miroiWZPCAwXwQtcEFdzS2au8M/vgk3rjHKLmBHU vqBfNgYEeU/JoWab8tUWjm5FjIqzGee5IsGp1nulzyjHUUqwEb9ohhIZI8m9HA5l5RWs yYbGu264SYECDhgtnynbf84EonQU12o7P/yB6OIl6P4c2SIkWhOEWHC6r7yXiqnqkh2I 1BeDC1/xXwLJNZyQPAqtfXjlFrPfIfHuhG+vSnDtdWYPeKY9UFVpFWNnyq8P3BqR2moF exRxeptLpHuFIZ/tZRYn2E6ogNXIbz9pRm3t4bZSKLdEI6RdXa2BYehLqT6xZY+QCJxm kv0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:ironport-sdr:ironport-sdr; bh=ZRjkq4CHHVdYHovjnu27c5NmtgvFE8ByZWCwXCebgvA=; b=TvqV4pvCxzAXxWd8I+WvxxAzD+SNxOXQXlP/uA6LAtvEXZjPygUpXdMapL3Trzhl17 mwVRzvAdQNdKCYthAjY2e9kLczhhagB1rx5ZAjDAlSMp1rR/a66E93S+Fncx6kDg3VLU I6bl/dPvkhR3uc1tI1GPLbAKojddgg5uUipeTApXOqc34WOV5GKq3ocwiYbawY6jCm6h gDVEejpB2qBdZ6zNEnN0PnT50/9Z4Lk3ePsnpikdhY6tR552D430IMxqK0VjKUF8cqcZ nkaz5rgnwDLZqAucCWn2sya3TsXeV3bfJ4zDtDjv7MWqtOelCW/A+0UHsz+n17Sxbl8b Zf5A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y19si78881oie.128.2020.03.25.10.51.52; Wed, 25 Mar 2020 10:52:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728016AbgCYRuU (ORCPT + 99 others); Wed, 25 Mar 2020 13:50:20 -0400 Received: from mga12.intel.com ([192.55.52.136]:57497 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727598AbgCYRts (ORCPT ); Wed, 25 Mar 2020 13:49:48 -0400 IronPort-SDR: iFyAg+p8GndWxSa7YpPX79J0L1iVz6OqLYllNjKG5Qe+GAfHEFIzqa5zXvE8UgNHOIdj3ez2Ue NdpM45AlD8ww== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Mar 2020 10:49:48 -0700 IronPort-SDR: gK1wmmwqeK4agq8zNREBwbScLDnRsT0KZSI7TdG8RN5Jy2deYT3WqOrWRO1IKTEOWP8sXpXhIl ojS0NNzY/jGg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,305,1580803200"; d="scan'208";a="393702190" Received: from jacob-builder.jf.intel.com ([10.7.199.155]) by orsmga004.jf.intel.com with ESMTP; 25 Mar 2020 10:49:48 -0700 From: Jacob Pan To: Joerg Roedel , Alex Williamson , "Lu Baolu" , iommu@lists.linux-foundation.org, LKML , David Woodhouse , Jean-Philippe Brucker Cc: "Yi Liu" , "Tian, Kevin" , Raj Ashok , "Christoph Hellwig" , Jonathan Cameron , Eric Auger , Jacob Pan Subject: [PATCH 01/10] iommu/ioasid: Introduce system-wide capacity Date: Wed, 25 Mar 2020 10:55:22 -0700 Message-Id: <1585158931-1825-2-git-send-email-jacob.jun.pan@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1585158931-1825-1-git-send-email-jacob.jun.pan@linux.intel.com> References: <1585158931-1825-1-git-send-email-jacob.jun.pan@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org IOASID is a limited system-wide resource that can be allocated at runtime. This limitation can be enumerated during boot. For example, on x86 platforms, PCI Process Address Space ID (PASID) allocation uses IOASID service. The number of supported PASID bits are enumerated by extended capability register as defined in the VT-d spec. This patch adds a helper to set the system capacity, it expected to be set during boot prior to any allocation request. Signed-off-by: Jacob Pan --- drivers/iommu/ioasid.c | 15 +++++++++++++++ include/linux/ioasid.h | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/ioasid.c b/drivers/iommu/ioasid.c index 0f8dd377aada..4026e52855b9 100644 --- a/drivers/iommu/ioasid.c +++ b/drivers/iommu/ioasid.c @@ -17,6 +17,21 @@ struct ioasid_data { struct rcu_head rcu; }; +static ioasid_t ioasid_capacity; +static ioasid_t ioasid_capacity_avail; + +/* System capacity can only be set once */ +void ioasid_install_capacity(ioasid_t total) +{ + if (ioasid_capacity) { + pr_warn("IOASID capacity already set at %d\n", ioasid_capacity); + return; + } + + ioasid_capacity = ioasid_capacity_avail = total; +} +EXPORT_SYMBOL_GPL(ioasid_install_capacity); + /* * struct ioasid_allocator_data - Internal data structure to hold information * about an allocator. There are two types of allocators: diff --git a/include/linux/ioasid.h b/include/linux/ioasid.h index 6f000d7a0ddc..9711fa0dc357 100644 --- a/include/linux/ioasid.h +++ b/include/linux/ioasid.h @@ -40,7 +40,7 @@ void *ioasid_find(struct ioasid_set *set, ioasid_t ioasid, int ioasid_register_allocator(struct ioasid_allocator_ops *allocator); void ioasid_unregister_allocator(struct ioasid_allocator_ops *allocator); int ioasid_set_data(ioasid_t ioasid, void *data); - +void ioasid_install_capacity(ioasid_t total); #else /* !CONFIG_IOASID */ static inline ioasid_t ioasid_alloc(struct ioasid_set *set, ioasid_t min, ioasid_t max, void *private) @@ -72,5 +72,8 @@ static inline int ioasid_set_data(ioasid_t ioasid, void *data) return -ENOTSUPP; } +static inline void ioasid_install_capacity(ioasid_t total) +{ +} #endif /* CONFIG_IOASID */ #endif /* __LINUX_IOASID_H */ -- 2.7.4