public inbox for iommu@lists.linux-foundation.org
 help / color / mirror / Atom feed
From: Lu Baolu <baolu.lu@linux.intel.com>
To: "Prakhya, Sai Praneeth" <sai.praneeth.prakhya@intel.com>,
	"iommu@lists.linux-foundation.org"
	<iommu@lists.linux-foundation.org>
Cc: "Raj, Ashok" <ashok.raj@intel.com>,
	Will Deacon <will.deacon@arm.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH V2 3/5] iommu: Add support to change default domain of an iommu_group
Date: Mon, 24 Feb 2020 16:39:43 +0800	[thread overview]
Message-ID: <e7addf56-3b7d-e9c4-178c-2de53e7f9d95@linux.intel.com> (raw)
In-Reply-To: <17eae788-1ed7-a24b-339e-4800496f9542@linux.intel.com>

On 2020/2/24 16:12, Lu Baolu wrote:
> On 2020/2/24 15:57, Prakhya, Sai Praneeth wrote:
>>> On 2020/2/24 15:03, Prakhya, Sai Praneeth wrote:
>>>>> On 2020/2/24 11:20, Prakhya, Sai Praneeth wrote:
>>>>>>>> +    list_for_each_entry_safe(grp_dev, temp, &group->devices, 
>>>>>>>> list) {
>>>>>>>> +        struct device *dev;
>>>>>>>> +
>>>>>>>> +        dev = grp_dev->dev;
>>>>>>>> +        iommu_release_device(dev);
>>>>>>>> +
>>>>>>>> +        ret = iommu_group_add_device(group, dev);
>>>>>>>> +        if (ret)
>>>>>>>> +            dev_err(dev, "Failed to add to iommu group %d: %d\n",
>>>>>>>> +                group->id, ret);
>>>>>>> Need to handle this error case.
>>>>>> I wasn't sure on how to handle the error ☹
>>>>> Just roll back to the state before calling this function and return
>>>>> an appropriate error value.
>>>>>
>>>>> The likely behavior is detaching the new domains from all devices (if
>>>>> it has already attached), attaching the old domains to all devices in
>>>>> the group,
>>>> And while handling this error case, there is a possibility that 
>>>> attaching to old
>>> domain could fail.. so, we might need to handle that error case as 
>>> well. If we
>>> plan to handle error case, since we have removed devices from group 
>>> above,
>>> adding them back could fail too.. that would lead into handling error 
>>> case for an
>>> error case.
>>>
>>> We can assume that the old domain should always be attached back.
>>> Otherwise, there must be some bugs in the vendor iommu driver.
>>>
>>> It must be able to role back, otherwise users have to reboot the 
>>> system in order
>>> to use the devices in the group. This is not acceptable in the 
>>> production kernel.
>> I agree that we should be able to roll back but I am afraid that the 
>> error handling code could become complex than the usual code that gets 
>> to run. For example, assume there are 'n' devices in the group, 'k' of 
>> them are successfully processed (i.e. default domain type has been 
>> changed) and if k+1 fails while changing default domain type, to roll 
>> back state of k devices, we need to maintain a list of processed 
>> devices so that we now roll back state for devices in this list. The 
>> present code does not have any list because it's processing 
>> sequentially, it takes a device from the group, changes it domain and 
>> moves to other device and hence does not require a list.
>>
>> All said, I could give this a try and see how complex the code could 
>> turn out to be. I hope I am wrong (i.e. turns out implementing error 
>> handling is simple).
>>
> 
> I think something like below should work.
> 
> static int iommu_group_do_attach_device(struct device *dev, void *data)
> {
>          struct iommu_domain *domain = data;
> 
>          return __iommu_attach_device(domain, dev);
> }
> 
> static int __iommu_attach_group(struct iommu_domain *domain,
>                                  struct iommu_group *group)
> {
>          int ret;
> 
>          if (group->default_domain && group->domain != 
> group->default_domain)
>                  return -EBUSY;
> 
>          ret = __iommu_group_for_each_dev(group, domain,
>                                           iommu_group_do_attach_device);
>          if (ret == 0)
>                  group->domain = domain;
> 
>          return ret;
> }
> 
> The vendor iommu driver should always deprecate the old domain if it
> exists. Add a comment there.
>

By the way, this is the expected behavior. Please check
__iommu_detach_group().

Best regards,
baolu
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

  reply	other threads:[~2020-02-24  8:39 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-16 21:57 [PATCH V2 0/5] iommu: Add support to change default domain of a group Sai Praneeth Prakhya
2020-02-16 21:57 ` [PATCH V2 1/5] iommu: Add dev_def_domain_type() call back function to iommu_ops Sai Praneeth Prakhya
2020-02-22 23:37   ` Lu Baolu
2020-02-22 23:39     ` Prakhya, Sai Praneeth
2020-02-16 21:57 ` [PATCH V2 2/5] iommu/vt-d: Rename device_def_domain_type() to intel_iommu_dev_def_domain_type() Sai Praneeth Prakhya
2020-02-22 23:42   ` Lu Baolu
2020-02-22 23:59     ` Prakhya, Sai Praneeth
2020-02-23  1:50       ` Lu Baolu
2020-02-24  3:23         ` Prakhya, Sai Praneeth
2020-02-16 21:57 ` [PATCH V2 3/5] iommu: Add support to change default domain of an iommu_group Sai Praneeth Prakhya
2020-02-23  1:20   ` Lu Baolu
2020-02-24  3:20     ` Prakhya, Sai Praneeth
2020-02-24  5:46       ` Lu Baolu
2020-02-24  7:03         ` Prakhya, Sai Praneeth
2020-02-24  7:39           ` Lu Baolu
2020-02-24  7:57             ` Prakhya, Sai Praneeth
2020-02-24  8:12               ` Lu Baolu
2020-02-24  8:39                 ` Lu Baolu [this message]
2020-02-24  8:44                   ` Prakhya, Sai Praneeth
2020-03-02 15:08   ` Joerg Roedel
2020-03-03  6:47     ` Lu Baolu
2020-03-03 13:13       ` Joerg Roedel
2020-03-04 12:17         ` Lu Baolu
2020-02-16 21:57 ` [PATCH V2 4/5] iommu: Take lock before reading iommu_group default domain type Sai Praneeth Prakhya
2020-02-16 21:57 ` [PATCH V2 5/5] iommu: Document usage of "/sys/kernel/iommu_groups/<grp_id>/type" file Sai Praneeth Prakhya
2020-02-23  1:38   ` Lu Baolu
2020-02-24  2:18     ` Prakhya, Sai Praneeth
2020-02-22 23:40 ` [PATCH V2 0/5] iommu: Add support to change default domain of a group Prakhya, Sai Praneeth

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=e7addf56-3b7d-e9c4-178c-2de53e7f9d95@linux.intel.com \
    --to=baolu.lu@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=robin.murphy@arm.com \
    --cc=sai.praneeth.prakhya@intel.com \
    --cc=will.deacon@arm.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox