All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lu Baolu <baolu.lu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
To: James Sewart <jamessewart-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org>
Cc: Dmitry Safonov <dima-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org>,
	Tom Murphy <tmurphy-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH v2 0/7] iommu/vt-d: Fix-up device-domain relationship by refactoring to use iommu group default domain.
Date: Mon, 25 Mar 2019 10:16:28 +0800	[thread overview]
Message-ID: <c41e4691-98a6-6f88-2509-8ff40f0204e9@linux.intel.com> (raw)
In-Reply-To: <0359F732-374F-4EDB-B49C-14B2F1BB637D-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org>

Hi James,

On 3/22/19 6:05 PM, James Sewart wrote:
> Hey Lu,
> 
>> On 20 Mar 2019, at 01:26, Lu Baolu <baolu.lu@linux.intel.com> wrote:
>>
>> Hi James,
>>
>> On 3/19/19 9:35 PM, James Sewart wrote:
>>> Hey Lu,
>>>> On 15 Mar 2019, at 03:13, Lu Baolu <baolu.lu@linux.intel.com> wrote:
>>>>
>>>> Hi James,
>>>>
>>>> On 3/14/19 7:56 PM, James Sewart wrote:
>>>>> Patches 1 and 2 are the same as v1.
>>>>> v1-v2:
>>>>>    Refactored ISA direct mappings to be returned by iommu_get_resv_regions.
>>>>>    Integrated patch by Lu to defer turning on DMAR until iommu.c has mapped
>>>>> reserved regions.
>>>>>    Integrated patches by Lu to remove more unused code in cleanup.
>>>>> Lu: I didn't integrate your patch to set the default domain type as it
>>>>> isn't directly related to the aim of this patchset. Instead patch 4
>>>>
>>>> Without those patches, user experience will be affected and some devices
>>>> will not work on Intel platforms anymore.
>>>>
>>>> For a long time, Intel IOMMU driver has its own logic to determine
>>>> whether a device requires an identity domain. For example, when user
>>>> specifies "iommu=pt" in kernel parameter, all device will be attached
>>>> with the identity domain. Further more, some quirky devices require
>>>> an identity domain to be used before enabling DMA remapping, otherwise,
>>>> it will not work. This was done by adding quirk bits in Intel IOMMU
>>>> driver.
>>>>
>>>> So from my point of view, one way is porting all those quirks and kernel
>>>> parameters into IOMMU generic layer, or opening a door for vendor IOMMU
>>>> driver to determine the default domain type by their own. I prefer the
>>>> latter option since it will not impact any behaviors on other
>>>> architectures.
>>> I see your point. I’m not confident that using the proposed door to set a
>>> groups default domain has the desired behaviour. As discussed before the
>>> default domain type will be set based on the desired type for only the
>>> first device attached to a group. I think to change the default domain
>>> type you would need a slightly different door that wasn’t conditioned on
>>> device.
>>
>> I think this as another problem. Just a summarize for the ease of
>> discussion. We saw two problems:
>>
>> 1. When allocating a new group for a device, how should we determine the
>> type of the default domain? This is what my proposal patches trying to
>> address.
> 
> This will work as expected only if all devices within a group get the same
> result from is_identity_map. Otherwise wee see issue 2.
> 
>>
>> 2. If we need to put a device into an existing group which uses a
>> different type of domain from what the device desires to use, we might
>> break the functionality of the device. For this problem I'd second your
>> proposal below if I get your point correctly.
>>
>>> For situations where individual devices require an identity domain because
>>> of quirks then maybe calling is_identity_map per device in
>>> iommu_group_get_for_dev is a better solution than the one I proposed.
>>
>> Do you mean if we see a quirky device requires a different domain type
>> other than the default domain type of the group, we will assign a new
>> group to it? That looks good to me as far as I can see. I suppose this
>> should be done in vt-d's ops callback.
> 
> I have thought about this a bit and I think the cleanest approach is to
> put devices that require an identity domain into their own group, this can
> be done in the device_group callback, avoiding any situation where we have
> to deal with creating a new group based on domain type in
> iommu_group_get_for_dev. This way we shouldn’t ever be in a situation with
> multiple different domain types per group. This way your patches will work
> as expected. See below for a possible implementation.
> 
>>
>> Best regards,
>> Lu Baolu
> 
> Cheers,
> James.
> 
> Devices that require an identity map because of quirks or other reasons
> should be put in their own IOMMU group so as to not end up with multiple
> different domains per group.

Yeah! This looks good to me.

Best regards,
Lu Baolu

> 
> Signed-off-by: James Sewart <jamessewart@arista.com>
> 
> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
> index 3cb8b36abf50..0f5a121d31a0 100644
> --- a/drivers/iommu/intel-iommu.c
> +++ b/drivers/iommu/intel-iommu.c
> @@ -5421,6 +5421,22 @@ struct intel_iommu *intel_svm_device_to_iommu(struct device *dev)
>   }
>   #endif /* CONFIG_INTEL_IOMMU_SVM */
> 
> +static struct iommu_group *intel_identity_group;
> +
> +struct iommu_group *intel_iommu_pci_device_group(struct device *dev)
> +{
> +       if (iommu_no_mapping(dev)) {
> +               if (!intel_identity_group) {
> +                       intel_identity_group = iommu_group_alloc();
> +                       if (IS_ERR(intel_identity_group))
> +                               return NULL;
> +               }
> +               return intel_identity_group;
> +       }
> +
> +       return pci_device_group(dev);
> +}
> +
>   const struct iommu_ops intel_iommu_ops = {
>          .capable                = intel_iommu_capable,
>          .domain_alloc           = intel_iommu_domain_alloc,
> @@ -5435,7 +5451,7 @@ const struct iommu_ops intel_iommu_ops = {
>          .get_resv_regions       = intel_iommu_get_resv_regions,
>          .put_resv_regions       = intel_iommu_put_resv_regions,
>          .apply_resv_region      = intel_iommu_apply_resv_region,
> -       .device_group           = pci_device_group,
> +       .device_group           = intel_iommu_pci_device_group,
>          .pgsize_bitmap          = INTEL_IOMMU_PGSIZES,
>   };
> 
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

      parent reply	other threads:[~2019-03-25  2:16 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-04 15:41 [PATCH 0/4] iommu/vt-d: Fix-up device-domain relationship by refactoring to use iommu group default domain James Sewart
2019-03-04 15:45 ` [PATCH 1/4] iommu: Move iommu_group_create_direct_mappings to after device_attach James Sewart
2019-03-04 15:46 ` [PATCH 2/4] iommu/vt-d: Implement apply_resv_region for reserving IOVA ranges James Sewart
2019-03-04 15:46   ` [PATCH 3/4] iommu/vt-d: Allow IOMMU_DOMAIN_DMA and IOMMU_DOMAIN_IDENTITY to be allocated James Sewart
2019-03-04 15:47     ` [PATCH 4/4] iommu/vt-d: Remove lazy allocation of domains James Sewart
2019-03-05  6:59       ` Lu Baolu
2019-03-05 11:46         ` James Sewart
2019-03-06  7:00           ` Lu Baolu
2019-03-06  7:00             ` Lu Baolu
2019-03-06 18:08             ` James Sewart
2019-03-06 18:08               ` James Sewart via iommu
2019-03-07  6:31               ` Lu Baolu
2019-03-07  6:31                 ` Lu Baolu
2019-03-07 10:21                 ` James Sewart
2019-03-08  1:09                   ` Lu Baolu
2019-03-08  3:09                   ` Lu Baolu
2019-03-08  3:09                     ` Lu Baolu
2019-03-08 16:57                     ` James Sewart
2019-03-09  1:53                       ` Lu Baolu
2019-03-09 11:49                         ` James Sewart
2019-03-10  2:51                           ` Lu Baolu
2019-03-10  2:51                             ` Lu Baolu
2019-03-05  6:46     ` [PATCH 3/4] iommu/vt-d: Allow IOMMU_DOMAIN_DMA and IOMMU_DOMAIN_IDENTITY to be allocated Lu Baolu
2019-03-05 11:34       ` James Sewart
2019-03-08  1:20     ` Dmitry Safonov
2019-03-08  1:20       ` Dmitry Safonov via iommu
2019-03-09 11:57       ` James Sewart
2019-03-05  6:05 ` [PATCH 0/4] iommu/vt-d: Fix-up device-domain relationship by refactoring to use iommu group default domain Lu Baolu
2019-03-05 11:14   ` James Sewart
2019-03-06  6:27     ` Lu Baolu
2019-03-14 11:56 ` [PATCH v2 0/7] " James Sewart
2019-03-14 11:57   ` [PATCH v2 1/7] iommu: Move iommu_group_create_direct_mappings to after device_attach James Sewart
2019-03-14 11:57     ` James Sewart via iommu
2019-03-14 11:58   ` [PATCH v2 2/7] iommu/vt-d: Implement apply_resv_region for reserving IOVA ranges James Sewart
2019-03-14 11:58   ` [PATCH v2 3/7] iommu/vt-d: Expose ISA direct mapping region via iommu_get_resv_regions James Sewart
2019-03-14 11:58     ` James Sewart
2019-03-15  2:19     ` Lu Baolu
2019-03-22  9:57       ` James Sewart
2019-03-25  2:03         ` Lu Baolu
2019-03-25  2:03           ` Lu Baolu
2019-03-25 12:57           ` James Sewart
2019-03-26  1:10             ` Lu Baolu
2019-03-26  1:10               ` Lu Baolu
2019-03-26  1:24             ` Lu Baolu
2019-03-28 18:37               ` James Sewart
2019-03-29 15:26                 ` James Sewart
2019-04-04  6:49                   ` Lu Baolu
2019-04-05 18:02                     ` James Sewart
2019-04-05 18:02                       ` James Sewart via iommu
2019-04-08  2:43                       ` Lu Baolu
2019-04-08  2:43                         ` Lu Baolu
2019-04-08  2:43                         ` Lu Baolu
2019-04-10  5:22                       ` Lu Baolu
2019-04-10  5:22                         ` Lu Baolu
2019-04-15 14:16                         ` James Sewart
2019-04-15 14:16                           ` James Sewart via iommu
2019-04-16  2:18                           ` Lu Baolu
2019-04-16  2:18                             ` Lu Baolu
2019-04-24 23:47                             ` Tom Murphy
2019-04-24 23:47                               ` Tom Murphy via iommu
2019-04-25  1:15                               ` Lu Baolu
2019-04-25  1:15                                 ` Lu Baolu
2019-04-25  1:15                                 ` Lu Baolu
2019-03-14 11:58   ` [PATCH v2 4/7] iommu/vt-d: Ignore domain parameter in attach_device if device requires identity map James Sewart
2019-03-15  2:30     ` Lu Baolu
2019-03-14 11:58   ` [PATCH v2 5/7] iommu/vt-d: Enable DMA remapping after rmrr mapped James Sewart
2019-03-14 11:59   ` [PATCH v2 6/7] iommu/vt-d: Allow IOMMU_DOMAIN_DMA to be allocated by iommu_ops James Sewart
2019-03-14 11:59     ` James Sewart via iommu
2019-03-14 11:59   ` [PATCH v2 7/7] iommu/vt-d: Remove lazy allocation of domains James Sewart
2019-03-14 23:35     ` Jacob Pan
2019-03-14 23:35       ` Jacob Pan
2019-03-22 10:07       ` James Sewart
2019-03-15  3:13   ` [PATCH v2 0/7] iommu/vt-d: Fix-up device-domain relationship by refactoring to use iommu group default domain Lu Baolu
2019-03-19 13:35     ` James Sewart
2019-03-20  1:26       ` Lu Baolu
2019-03-22 10:05         ` James Sewart
     [not found]           ` <0359F732-374F-4EDB-B49C-14B2F1BB637D-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org>
2019-03-25  2:16             ` Lu Baolu [this message]

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=c41e4691-98a6-6f88-2509-8ff40f0204e9@linux.intel.com \
    --to=baolu.lu-vuqaysv1563yd54fqh9/ca@public.gmane.org \
    --cc=dima-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=jamessewart-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=tmurphy-nzgTgzXrdUbQT0dZR+AlfA@public.gmane.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.