From: Jacob Pan <jacob.jun.pan@linux.intel.com> To: Joerg Roedel <joro@8bytes.org>, Alex Williamson <alex.williamson@redhat.com>, "Lu Baolu" <baolu.lu@linux.intel.com>, iommu@lists.linux-foundation.org, LKML <linux-kernel@vger.kernel.org>, David Woodhouse <dwmw2@infradead.org>, Jean-Philippe Brucker <jean-philippe@linaro.com> Cc: "Yi Liu" <yi.l.liu@intel.com>, "Tian, Kevin" <kevin.tian@intel.com>, Raj Ashok <ashok.raj@intel.com>, "Christoph Hellwig" <hch@infradead.org>, Jonathan Cameron <jic23@kernel.org>, Eric Auger <eric.auger@redhat.com>, Jacob Pan <jacob.jun.pan@linux.intel.com> Subject: [PATCH 01/10] iommu/ioasid: Introduce system-wide capacity Date: Wed, 25 Mar 2020 10:55:22 -0700 [thread overview] Message-ID: <1585158931-1825-2-git-send-email-jacob.jun.pan@linux.intel.com> (raw) In-Reply-To: <1585158931-1825-1-git-send-email-jacob.jun.pan@linux.intel.com> 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 <jacob.jun.pan@linux.intel.com> --- 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
WARNING: multiple messages have this Message-ID (diff)
From: Jacob Pan <jacob.jun.pan@linux.intel.com> To: Joerg Roedel <joro@8bytes.org>, Alex Williamson <alex.williamson@redhat.com>, "Lu Baolu" <baolu.lu@linux.intel.com>, iommu@lists.linux-foundation.org, LKML <linux-kernel@vger.kernel.org>, David Woodhouse <dwmw2@infradead.org>, Jean-Philippe Brucker <jean-philippe@linaro.com> Cc: "Tian, Kevin" <kevin.tian@intel.com>, Raj Ashok <ashok.raj@intel.com>, Jonathan Cameron <jic23@kernel.org> Subject: [PATCH 01/10] iommu/ioasid: Introduce system-wide capacity Date: Wed, 25 Mar 2020 10:55:22 -0700 [thread overview] Message-ID: <1585158931-1825-2-git-send-email-jacob.jun.pan@linux.intel.com> (raw) In-Reply-To: <1585158931-1825-1-git-send-email-jacob.jun.pan@linux.intel.com> 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 <jacob.jun.pan@linux.intel.com> --- 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 _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2020-03-25 17:50 UTC|newest] Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-25 17:55 [PATCH 00/10] IOASID extensions for guest SVA Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-25 17:55 ` Jacob Pan [this message] 2020-03-25 17:55 ` [PATCH 01/10] iommu/ioasid: Introduce system-wide capacity Jacob Pan 2020-03-27 8:07 ` Tian, Kevin 2020-03-27 8:07 ` Tian, Kevin 2020-03-27 16:08 ` Jacob Pan 2020-03-27 16:08 ` Jacob Pan 2020-04-01 13:45 ` Jean-Philippe Brucker 2020-04-01 13:45 ` Jean-Philippe Brucker 2020-04-01 22:50 ` Jacob Pan 2020-04-01 22:50 ` Jacob Pan 2020-03-25 17:55 ` [PATCH 02/10] iommu/vt-d: Set IOASID capacity when SVM is enabled Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 8:08 ` Tian, Kevin 2020-03-27 8:08 ` Tian, Kevin 2020-03-25 17:55 ` [PATCH 03/10] iommu/ioasid: Introduce per set allocation APIs Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-26 2:12 ` Lu Baolu 2020-03-26 2:12 ` Lu Baolu 2020-03-26 21:30 ` Jacob Pan 2020-03-26 21:30 ` Jacob Pan 2020-03-27 8:38 ` Tian, Kevin 2020-03-27 8:38 ` Tian, Kevin 2020-03-27 16:59 ` Jacob Pan 2020-03-27 16:59 ` Jacob Pan 2020-03-28 6:32 ` Tian, Kevin 2020-03-28 6:32 ` Tian, Kevin 2020-04-01 13:47 ` Jean-Philippe Brucker 2020-04-01 13:47 ` Jean-Philippe Brucker 2020-04-06 20:02 ` Jacob Pan 2020-04-06 20:02 ` Jacob Pan 2020-04-07 11:01 ` Jean-Philippe Brucker 2020-04-07 11:01 ` Jean-Philippe Brucker 2020-04-21 21:51 ` Jacob Pan 2020-04-21 21:51 ` Jacob Pan 2020-03-25 17:55 ` [PATCH 04/10] iommu/ioasid: Rename ioasid_set_data to avoid confusion with ioasid_set Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 9:35 ` Tian, Kevin 2020-03-27 9:35 ` Tian, Kevin 2020-03-25 17:55 ` [PATCH 05/10] iommu/ioasid: Create an IOASID set for host SVA use Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 9:41 ` Tian, Kevin 2020-03-27 9:41 ` Tian, Kevin 2020-03-27 17:28 ` Jacob Pan 2020-03-27 17:28 ` Jacob Pan 2020-03-28 6:33 ` Tian, Kevin 2020-03-28 6:33 ` Tian, Kevin 2020-04-01 13:53 ` Jean-Philippe Brucker 2020-04-01 13:53 ` Jean-Philippe Brucker 2020-04-06 15:33 ` Jacob Pan 2020-04-06 15:33 ` Jacob Pan 2020-04-07 11:01 ` Jean-Philippe Brucker 2020-04-07 11:01 ` Jean-Philippe Brucker 2020-04-13 22:06 ` Jacob Pan 2020-04-13 22:06 ` Jacob Pan 2020-04-15 15:10 ` Jean-Philippe Brucker 2020-04-15 15:10 ` Jean-Philippe Brucker 2020-03-25 17:55 ` [PATCH 06/10] iommu/ioasid: Convert to set aware allocations Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 9:54 ` Tian, Kevin 2020-03-27 9:54 ` Tian, Kevin 2020-03-27 17:41 ` Jacob Pan 2020-03-27 17:41 ` Jacob Pan 2020-03-28 6:40 ` Tian, Kevin 2020-03-28 6:40 ` Tian, Kevin 2020-04-06 20:07 ` Jacob Pan 2020-04-06 20:07 ` Jacob Pan 2020-04-01 13:55 ` Jean-Philippe Brucker 2020-04-01 13:55 ` Jean-Philippe Brucker 2020-04-01 22:45 ` Jacob Pan 2020-04-01 22:45 ` Jacob Pan 2020-03-25 17:55 ` [PATCH 07/10] iommu/ioasid: Use mutex instead of spinlock Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 9:55 ` Tian, Kevin 2020-03-27 9:55 ` Tian, Kevin 2020-04-01 13:58 ` Jean-Philippe Brucker 2020-04-01 13:58 ` Jean-Philippe Brucker 2020-03-25 17:55 ` [PATCH 08/10] iommu/ioasid: Introduce notifier APIs Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 10:03 ` Tian, Kevin 2020-03-27 10:03 ` Tian, Kevin 2020-03-27 18:36 ` Jacob Pan 2020-03-27 18:36 ` Jacob Pan 2020-03-28 6:43 ` Tian, Kevin 2020-03-28 6:43 ` Tian, Kevin 2020-03-31 15:13 ` Jacob Pan 2020-03-31 15:13 ` Jacob Pan 2020-04-01 14:00 ` Jean-Philippe Brucker 2020-04-01 14:00 ` Jean-Philippe Brucker 2020-04-10 15:43 ` Jacob Pan 2020-04-10 15:43 ` Jacob Pan 2020-03-25 17:55 ` [PATCH 09/10] iommu/ioasid: Support ioasid_set quota adjustment Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 10:09 ` Tian, Kevin 2020-03-27 10:09 ` Tian, Kevin 2020-03-27 23:30 ` Jacob Pan 2020-03-27 23:30 ` Jacob Pan 2020-03-28 6:44 ` Tian, Kevin 2020-03-28 6:44 ` Tian, Kevin 2020-03-25 17:55 ` [PATCH 10/10] iommu/vt-d: Register PASID notifier for status change Jacob Pan 2020-03-25 17:55 ` Jacob Pan 2020-03-27 10:22 ` Tian, Kevin 2020-03-27 10:22 ` Tian, Kevin 2020-03-27 23:47 ` Jacob Pan 2020-03-27 23:47 ` Jacob Pan 2020-04-01 14:03 ` [PATCH 00/10] IOASID extensions for guest SVA Jean-Philippe Brucker 2020-04-01 14:03 ` Jean-Philippe Brucker 2020-04-01 23:38 ` Jacob Pan 2020-04-01 23:38 ` Jacob Pan 2020-04-02 12:26 ` Jean-Philippe Brucker 2020-04-02 12:26 ` Jean-Philippe Brucker 2020-04-02 16:09 ` Jacob Pan 2020-04-02 16:09 ` Jacob Pan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1585158931-1825-2-git-send-email-jacob.jun.pan@linux.intel.com \ --to=jacob.jun.pan@linux.intel.com \ --cc=alex.williamson@redhat.com \ --cc=ashok.raj@intel.com \ --cc=baolu.lu@linux.intel.com \ --cc=dwmw2@infradead.org \ --cc=eric.auger@redhat.com \ --cc=hch@infradead.org \ --cc=iommu@lists.linux-foundation.org \ --cc=jean-philippe@linaro.com \ --cc=jic23@kernel.org \ --cc=joro@8bytes.org \ --cc=kevin.tian@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=yi.l.liu@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.