All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baolu Lu <baolu.lu@linux.intel.com>
To: Jason Gunthorpe <jgg@nvidia.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Christian Borntraeger <borntraeger@linux.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	iommu@lists.linux.dev, Joerg Roedel <joro@8bytes.org>,
	kvm@vger.kernel.org, linux-s390@vger.kernel.org,
	Marc Zyngier <maz@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>,
	Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Will Deacon <will@kernel.org>
Cc: Bharat Bhushan <bharat.bhushan@nxp.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Eric Auger <eric.auger@redhat.com>,
	Eric Farman <farman@linux.ibm.com>,
	Kevin Tian <kevin.tian@intel.com>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Matthew Rosato <mjrosato@linux.ibm.com>,
	Tomasz Nowicki <tomasz.nowicki@caviumnetworks.com>,
	Will Deacon <will.deacon@arm.com>
Subject: Re: [PATCH iommufd v3 2/9] iommu: Add iommu_group_has_isolated_msi()
Date: Fri, 6 Jan 2023 19:28:46 +0800	[thread overview]
Message-ID: <2c12143b-eaa9-2f6b-d367-e55d6f1e180d@linux.intel.com> (raw)
In-Reply-To: <2-v3-3313bb5dd3a3+10f11-secure_msi_jgg@nvidia.com>

On 1/6/2023 3:33 AM, Jason Gunthorpe wrote:
> Compute the isolated_msi over all the devices in the IOMMU group because
> iommufd and vfio both need to know that the entire group is isolated
> before granting access to it.
>
> Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
>   drivers/iommu/iommu.c | 26 ++++++++++++++++++++++++++
>   include/linux/iommu.h |  1 +
>   2 files changed, 27 insertions(+)
>
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index de91dd88705bd3..7f744904e02f4d 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -30,6 +30,7 @@
>   #include <linux/cc_platform.h>
>   #include <trace/events/iommu.h>
>   #include <linux/sched/mm.h>
> +#include <linux/msi.h>
>   
>   #include "dma-iommu.h"
>   
> @@ -1897,6 +1898,31 @@ bool device_iommu_capable(struct device *dev, enum iommu_cap cap)
>   }
>   EXPORT_SYMBOL_GPL(device_iommu_capable);
>   
> +/**
> + * iommu_group_has_isolated_msi() - Compute msi_device_has_isolated_msi()
> + *       for a group
> + * @group: Group to query
> + *
> + * IOMMU groups should not have differing values of
> + * msi_device_has_isolated_msi() for devices in a group. However nothing
> + * directly prevents this, so ensure mistakes don't result in isolation failures
> + * by checking that all the devices are the same.
> + */
> +bool iommu_group_has_isolated_msi(struct iommu_group *group)
> +{
> +	struct group_device *group_dev;
> +	bool ret = true;
> +
> +	mutex_lock(&group->mutex);
> +	list_for_each_entry(group_dev, &group->devices, list)
> +		ret &= msi_device_has_isolated_msi(group_dev->dev) ||
> +		       device_iommu_capable(group_dev->dev,
> +					    IOMMU_CAP_INTR_REMAP);
> +	mutex_unlock(&group->mutex);
> +	return ret;
> +}
> +EXPORT_SYMBOL_GPL(iommu_group_has_isolated_msi);
> +
>   /**
>    * iommu_set_fault_handler() - set a fault handler for an iommu domain
>    * @domain: iommu domain
> diff --git a/include/linux/iommu.h b/include/linux/iommu.h
> index 46e1347bfa2286..9b7a9fa5ad28d3 100644
> --- a/include/linux/iommu.h
> +++ b/include/linux/iommu.h
> @@ -455,6 +455,7 @@ static inline const struct iommu_ops *dev_iommu_ops(struct device *dev)
>   extern int bus_iommu_probe(struct bus_type *bus);
>   extern bool iommu_present(struct bus_type *bus);
>   extern bool device_iommu_capable(struct device *dev, enum iommu_cap cap);
> +extern bool iommu_group_has_isolated_msi(struct iommu_group *group);

This lacks a static inline definition when CONFIG_IOMMU_API is false?

>   extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
>   extern struct iommu_group *iommu_group_get_by_id(int id);
>   extern void iommu_domain_free(struct iommu_domain *domain);

Others look good to me. With above addressed,

Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>

--

Best regards,

baolu


  reply	other threads:[~2023-01-06 11:28 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-05 19:33 [PATCH iommufd v3 0/9] Remove IOMMU_CAP_INTR_REMAP Jason Gunthorpe
2023-01-05 19:33 ` [PATCH iommufd v3 1/9] irq: Add msi_device_has_isolated_msi() Jason Gunthorpe
2023-01-11 18:14   ` Thomas Gleixner
2023-01-05 19:33 ` [PATCH iommufd v3 2/9] iommu: Add iommu_group_has_isolated_msi() Jason Gunthorpe
2023-01-06 11:28   ` Baolu Lu [this message]
2023-01-06 13:12     ` Jason Gunthorpe
2023-01-07  2:19       ` Baolu Lu
2023-01-11 18:19   ` Thomas Gleixner
2023-01-11 20:19     ` Jason Gunthorpe
2023-01-05 19:33 ` [PATCH iommufd v3 3/9] vfio/type1: Convert to iommu_group_has_isolated_msi() Jason Gunthorpe
2023-01-06 11:34   ` Baolu Lu
2023-01-05 19:33 ` [PATCH iommufd v3 4/9] iommufd: Convert to msi_device_has_isolated_msi() Jason Gunthorpe
2023-01-06 11:36   ` Baolu Lu
2023-01-05 19:33 ` [PATCH iommufd v3 5/9] irq: Remove unused irq_domain_check_msi_remap() code Jason Gunthorpe
2023-01-11 18:22   ` Thomas Gleixner
2023-01-05 19:33 ` [PATCH iommufd v3 6/9] irq: Rename IRQ_DOMAIN_MSI_REMAP to IRQ_DOMAIN_ISOLATED_MSI Jason Gunthorpe
2023-01-11 18:23   ` Thomas Gleixner
2023-01-05 19:33 ` [PATCH iommufd v3 7/9] iommu/x86: Replace IOMMU_CAP_INTR_REMAP with IRQ_DOMAIN_FLAG_ISOLATED_MSI Jason Gunthorpe
2023-01-06 11:42   ` Baolu Lu
2023-01-11 18:23   ` Thomas Gleixner
2023-01-05 19:33 ` [PATCH iommufd v3 8/9] irq/s390: Add arch_is_isolated_msi() for s390 Jason Gunthorpe
2023-01-05 19:33 ` [PATCH iommufd v3 9/9] iommu: Remove IOMMU_CAP_INTR_REMAP Jason Gunthorpe
2023-01-06 11:45   ` Baolu Lu

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=2c12143b-eaa9-2f6b-d367-e55d6f1e180d@linux.intel.com \
    --to=baolu.lu@linux.intel.com \
    --cc=agordeev@linux.ibm.com \
    --cc=alex.williamson@redhat.com \
    --cc=bharat.bhushan@nxp.com \
    --cc=borntraeger@de.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=dwmw2@infradead.org \
    --cc=eric.auger@redhat.com \
    --cc=farman@linux.ibm.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=iommu@lists.linux.dev \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=maz@kernel.org \
    --cc=mjrosato@linux.ibm.com \
    --cc=robin.murphy@arm.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=svens@linux.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=tomasz.nowicki@caviumnetworks.com \
    --cc=will.deacon@arm.com \
    --cc=will@kernel.org \
    /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: link
Be 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.