All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yi Liu <yi.l.liu@intel.com>
To: Yan Zhao <yan.y.zhao@intel.com>
Cc: <joro@8bytes.org>, <alex.williamson@redhat.com>, <jgg@nvidia.com>,
	<kevin.tian@intel.com>, <robin.murphy@arm.com>,
	<baolu.lu@linux.intel.com>, <cohuck@redhat.com>,
	<eric.auger@redhat.com>, <nicolinc@nvidia.com>,
	<kvm@vger.kernel.org>, <mjrosato@linux.ibm.com>,
	<chao.p.peng@linux.intel.com>, <yi.y.sun@linux.intel.com>,
	<peterx@redhat.com>, <jasowang@redhat.com>,
	<shameerali.kolothum.thodi@huawei.com>, <lulu@redhat.com>,
	<suravee.suthikulpanit@amd.com>, <iommu@lists.linux.dev>,
	<linux-kernel@vger.kernel.org>, <linux-kselftest@vger.kernel.org>,
	<zhenzhong.duan@intel.com>, <joao.m.martins@oracle.com>
Subject: Re: [PATCH v4 03/17] iommufd: Unite all kernel-managed members into a struct
Date: Tue, 10 Oct 2023 11:26:37 +0800	[thread overview]
Message-ID: <1b27b31a-3eaa-0acc-b9ae-756605170220@intel.com> (raw)
In-Reply-To: <ZSOMCXBzUMRujp89@yzhao56-desk.sh.intel.com>

On 2023/10/9 13:13, Yan Zhao wrote:
> On Mon, Oct 09, 2023 at 12:13:52PM +0800, Yi Liu wrote:
>> On 2023/10/7 18:08, Yan Zhao wrote:
>>> On Thu, Sep 21, 2023 at 12:51:24AM -0700, Yi Liu wrote:
>>>> From: Nicolin Chen <nicolinc@nvidia.com>
>>>>
>>>> The struct iommufd_hw_pagetable has been representing a kernel-managed
>>>> HWPT, yet soon will be reused to represent a user-managed HWPT. These
>>>> two types of HWPTs has the same IOMMUFD object type and an iommu_domain
>>>> object, but have quite different attributes/members.
>>>>
>>>> Add a union in struct iommufd_hw_pagetable and group all the existing
>>>> kernel-managed members. One of the following patches will add another
>>>> struct for user-managed members.
>>>>
>>>> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
>>>> Signed-off-by: Yi Liu <yi.l.liu@intel.com>
>>>> ---
>>>>    drivers/iommu/iommufd/iommufd_private.h | 17 +++++++++++------
>>>>    1 file changed, 11 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/drivers/iommu/iommufd/iommufd_private.h b/drivers/iommu/iommufd/iommufd_private.h
>>>> index 3064997a0181..947a797536e3 100644
>>>> --- a/drivers/iommu/iommufd/iommufd_private.h
>>>> +++ b/drivers/iommu/iommufd/iommufd_private.h
>>>> @@ -231,13 +231,18 @@ int iommufd_vfio_ioas(struct iommufd_ucmd *ucmd);
>>>>     */
>>>>    struct iommufd_hw_pagetable {
>>>>    	struct iommufd_object obj;
>>>> -	struct iommufd_ioas *ioas;
>>>>    	struct iommu_domain *domain;
>>>> -	bool auto_domain : 1;
>>>> -	bool enforce_cache_coherency : 1;
>>>> -	bool msi_cookie : 1;
>>>> -	/* Head at iommufd_ioas::hwpt_list */
>>>> -	struct list_head hwpt_item;
>>>> +
>>>> +	union {
>>>> +		struct { /* kernel-managed */
>>>> +			struct iommufd_ioas *ioas;
>>>> +			bool auto_domain : 1;
>>> Will iommufd_hw_pagetable_put() also be called on non-kernel-managed domain?
>>
>> yes.
>>
>>> If yes, hwpt->user_managed needs to be checked in iommufd_hw_pagetable_put(),
>>> (e.g. as below).
>>> Otherwise, this union will lead to hwpt->ioas and hwpt->auto_domain still being
>>> accessible though invalid.
>>
>> not quite get this sentence.
> I mean with this union, hwpt->auto_domain or hwpt->ioas should only be accessed if and
> only if hwpt type is kernel-managed.

ok, I get this part. just not sure about the missing words in your prior 
comment.

> So, any unconditional access, as in iommufd_hw_pagetable_put() pasted below, is buggy.
> 
> Therefore, do you think it's better to add a filed like "bool kernel_managed : 1",
> and access the union fields under  /* kernel-managed */ only when hwpt->kernel_managed
> is true.
> 
> 
>>
>>>
>>>    static inline void iommufd_hw_pagetable_put(struct iommufd_ctx *ictx,
>>>                                               struct iommufd_hw_pagetable *hwpt)
>>>    {
>>> -       lockdep_assert_not_held(&hwpt->ioas->mutex);
>>> -       if (hwpt->auto_domain)
>>> +       if (!hwpt->user_managed)
>>> +               lockdep_assert_not_held(&hwpt->ioas->mutex);
>>
>> this is true. this assert is not needed when hwpt is not kernel managed domain.
>>
>>> +
>>> +       if (!hwpt->user_managed && hwpt->auto_domain)
>>
>> actually, checking auto_domain is more precise. There is hwpt which is
>> neither user managed nor auto.
> 
> auto_domain is under union fields marked with kernel-managed only.
> Access it without type checking is invalid.

I see. yes, should check user_managed as well. :)

> struct iommufd_hw_pagetable {
>          struct iommufd_object obj;
>          struct iommu_domain *domain;
> 
>          void (*abort)(struct iommufd_object *obj);
>          void (*destroy)(struct iommufd_object *obj);
> 
>          bool user_managed : 1;
>          union {
>                  struct { /* user-managed */
>                          struct iommufd_hw_pagetable *parent;
>                  };
>                  struct { /* kernel-managed */
>                          struct iommufd_ioas *ioas;
>                          struct mutex mutex;
>                          bool auto_domain : 1;
>                          bool enforce_cache_coherency : 1;
>                          bool msi_cookie : 1;
>                          bool nest_parent : 1;
>                          /* Head at iommufd_ioas::hwpt_list */
>                          struct list_head hwpt_item;
>                  };
>          };
> };
> 
>>
>>>                   iommufd_object_deref_user(ictx, &hwpt->obj);
>>>           else
>>>                   refcount_dec(&hwpt->obj.users);
>>> }
>>>
>>>> +			bool enforce_cache_coherency : 1;
>>>> +			bool msi_cookie : 1;
>>>> +			/* Head at iommufd_ioas::hwpt_list */
>>>> +			struct list_head hwpt_item;
>>>> +		};
>>>> +	};
>>>>    };
>>>>    struct iommufd_hw_pagetable *
>>>> -- 
>>>> 2.34.1
>>>>
>>
>> -- 
>> Regards,
>> Yi Liu

-- 
Regards,
Yi Liu

  reply	other threads:[~2023-10-10  3:24 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-21  7:51 [PATCH v4 00/17] iommufd: Add nesting infrastructure Yi Liu
2023-09-21  7:51 ` [PATCH v4 01/17] iommu: Add hwpt_type with user_data for domain_alloc_user op Yi Liu
2023-09-21 12:10   ` Baolu Lu
2023-09-21 20:58     ` Nicolin Chen
2023-09-25 13:05       ` Jason Gunthorpe
2023-09-25 18:17         ` Nicolin Chen
2023-09-25  6:22     ` Yi Liu
2023-09-25  8:01       ` Baolu Lu
2023-09-25 13:00         ` Jason Gunthorpe
2023-09-21 12:12   ` Baolu Lu
2023-09-21 16:44     ` Jason Gunthorpe
2023-09-22  9:47       ` Robin Murphy
2023-09-25  6:17         ` Yi Liu
2023-09-25 12:59           ` Jason Gunthorpe
2023-09-26  6:37         ` Tian, Kevin
2023-09-26 16:29           ` Jason Gunthorpe
2023-09-27  1:08             ` Tian, Kevin
2023-10-07  9:38               ` Yi Liu
2023-09-26  6:56   ` Tian, Kevin
2023-10-12  9:12     ` Yi Liu
2023-10-13 11:42       ` Yi Liu
2023-10-13 22:22         ` Nicolin Chen
2023-10-10 16:58   ` Jason Gunthorpe
2023-10-12  9:11     ` Yi Liu
2023-10-12 13:39       ` Jason Gunthorpe
2023-10-13  4:33         ` Yi Liu
2023-10-13 14:04           ` Jason Gunthorpe
2023-10-13 17:56             ` Nicolin Chen
2023-10-16  3:28               ` Yi Liu
2023-10-16 11:54                 ` Jason Gunthorpe
2023-10-16 18:17                   ` Nicolin Chen
2023-10-17  8:51                     ` Yi Liu
2023-10-17  9:28                       ` Tian, Kevin
2023-10-18  6:12                         ` Yi Liu
2023-10-18 16:37                     ` Jason Gunthorpe
2023-10-18 16:51                       ` Nicolin Chen
2023-10-13  0:34     ` Nicolin Chen
2023-10-13 14:03       ` Jason Gunthorpe
2023-09-21  7:51 ` [PATCH v4 02/17] iommu: Add nested domain support Yi Liu
2023-10-10 17:21   ` Jason Gunthorpe
2023-10-12  9:13     ` Yi Liu
2023-10-14  0:47       ` Nicolin Chen
2023-09-21  7:51 ` [PATCH v4 03/17] iommufd: Unite all kernel-managed members into a struct Yi Liu
2023-09-26  7:46   ` Tian, Kevin
2023-10-07 10:08   ` Yan Zhao
2023-10-09  4:13     ` Yi Liu
2023-10-09  5:13       ` Yan Zhao
2023-10-10  3:26         ` Yi Liu [this message]
2023-09-21  7:51 ` [PATCH v4 04/17] iommufd: Pass in hwpt_type/user_data to iommufd_hw_pagetable_alloc() Yi Liu
2023-09-21  7:51 ` [PATCH v4 05/17] iommufd: Separate kernel-managed HWPT alloc/destroy/abort functions Yi Liu
2023-09-26  7:57   ` Tian, Kevin
2023-10-10 18:49   ` Jason Gunthorpe
2023-10-12 19:09     ` Jason Gunthorpe
2023-10-13  7:13       ` Tian, Kevin
2023-10-13 14:05         ` Jason Gunthorpe
2023-10-16  8:26           ` Tian, Kevin
2023-10-16 12:02             ` Jason Gunthorpe
2023-09-21  7:51 ` [PATCH v4 06/17] iommufd: Add shared alloc_fn function pointer and mutex pointer Yi Liu
2023-09-21  7:51 ` [PATCH v4 07/17] iommufd: Add user-managed hw_pagetable support Yi Liu
2023-09-26  8:14   ` Tian, Kevin
2023-10-14  0:08     ` Nicolin Chen
2023-09-21  7:51 ` [PATCH v4 08/17] iommufd: Always setup MSI and anforce cc on kernel-managed domains Yi Liu
2023-09-26  8:16   ` Tian, Kevin
2023-10-14  0:44     ` Nicolin Chen
2023-10-16  8:48       ` Tian, Kevin
2023-10-16 11:57         ` Jason Gunthorpe
2023-10-17  8:52           ` Tian, Kevin
2023-10-17 15:53             ` Jason Gunthorpe
2023-10-17 19:58               ` Nicolin Chen
2023-10-18 16:51                 ` Jason Gunthorpe
2023-10-19  1:56                   ` Tian, Kevin
2023-10-19 23:53                     ` Jason Gunthorpe
2023-10-20  2:43                       ` Tian, Kevin
2023-10-20 13:55                         ` Jason Gunthorpe
2023-10-20 18:59                           ` Nicolin Chen
2023-10-21 16:38                             ` Jason Gunthorpe
2023-10-23  0:18                               ` Nicolin Chen
2023-10-23  2:53                                 ` Tian, Kevin
2023-10-23 18:42                                   ` Nicolin Chen
2023-10-23 13:59                                 ` Jason Gunthorpe
2023-10-23 18:49                                   ` Nicolin Chen
2023-10-18  2:32             ` Baolu Lu
2023-10-17  9:05           ` Tian, Kevin
2023-09-21  7:51 ` [PATCH v4 09/17] iommufd/device: Add helpers to enforce/remove device reserved regions Yi Liu
2023-10-07  7:20   ` Yan Zhao
2023-10-07  9:27     ` Nicolin Chen
2023-09-21  7:51 ` [PATCH v4 10/17] iommufd: Support IOMMU_HWPT_ALLOC allocation with user data Yi Liu
2023-10-13 15:19   ` Jason Gunthorpe
2023-10-13 20:58     ` Nicolin Chen
2023-10-14  0:07       ` Jason Gunthorpe
2023-10-14  0:51         ` Nicolin Chen
2023-10-16  7:03           ` Yi Liu
2023-10-16 11:59             ` Jason Gunthorpe
2023-10-16 18:44               ` Nicolin Chen
2023-10-17  8:55                 ` Yi Liu
2023-10-17 15:50                   ` Jason Gunthorpe
2023-10-17 19:32                     ` Nicolin Chen
2023-09-21  7:51 ` [PATCH v4 11/17] iommufd: Add IOMMU_HWPT_INVALIDATE Yi Liu
2023-09-21  7:51 ` [PATCH v4 12/17] iommufd/selftest: Rework TEST_LENGTH to test min_size explicitly Yi Liu
2023-09-21  7:51 ` [PATCH v4 13/17] iommufd/selftest: Add nested domain allocation for mock domain Yi Liu
2023-09-21  7:51 ` [PATCH v4 14/17] iommufd/selftest: Add coverage for IOMMU_HWPT_ALLOC with nested HWPTs Yi Liu
2023-09-21  7:51 ` [PATCH v4 15/17] iommufd/selftest: Add mock_domain_cache_invalidate_user support Yi Liu
2023-09-21  7:51 ` [PATCH v4 16/17] iommufd/selftest: Add IOMMU_TEST_OP_MD_CHECK_IOTLB test op Yi Liu
2023-09-21  7:51 ` [PATCH v4 17/17] iommufd/selftest: Add coverage for IOMMU_HWPT_INVALIDATE ioctl Yi Liu
2023-10-10 16:53 ` [PATCH v4 00/17] iommufd: Add nesting infrastructure Jason Gunthorpe
2023-10-12  8:45   ` Yi Liu

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=1b27b31a-3eaa-0acc-b9ae-756605170220@intel.com \
    --to=yi.l.liu@intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=cohuck@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=iommu@lists.linux.dev \
    --cc=jasowang@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joao.m.martins@oracle.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=lulu@redhat.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=nicolinc@nvidia.com \
    --cc=peterx@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=yan.y.zhao@intel.com \
    --cc=yi.y.sun@linux.intel.com \
    --cc=zhenzhong.duan@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: 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.