All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	will.deacon@arm.com, linux-kernel@vger.kernel.org,
	iommu@lists.linux-foundation.org, robh+dt@kernel.org,
	robin.murphy@arm.com, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/8] iommu: Add I/O ASID allocator
Date: Tue, 11 Jun 2019 10:10:52 -0700	[thread overview]
Message-ID: <20190611101052.35af46df@jacob-builder> (raw)
In-Reply-To: <95292b47-4cf4-5fd9-b096-1cb016e2264f@arm.com>

On Tue, 11 Jun 2019 15:37:42 +0100
Jean-Philippe Brucker <jean-philippe.brucker@arm.com> wrote:

> On 11/06/2019 13:26, Jacob Pan wrote:
> >> +/**
> >> + * ioasid_set_data - Set private data for an allocated ioasid
> >> + * @ioasid: the ID to set data
> >> + * @data:   the private data
> >> + *
> >> + * For IOASID that is already allocated, private data can be set
> >> + * via this API. Future lookup can be done via ioasid_find.
> >> + */
> >> +int ioasid_set_data(ioasid_t ioasid, void *data)
> >> +{
> >> +	struct ioasid_data *ioasid_data;
> >> +	int ret = 0;
> >> +
> >> +	xa_lock(&ioasid_xa);  
> > Just wondering if this is necessary, since xa_load is under
> > rcu_read_lock and we are not changing anything internal to xa. For
> > custom allocator I still need to have the mutex against allocator
> > removal.  
> 
> I think we do need this because of a possible race with ioasid_free():
> 
>          CPU1                      CPU2
>   ioasid_free(ioasid)     ioasid_set_data(ioasid, foo)
>                             data = xa_load(...)
>     xa_erase(...)
>     kfree_rcu(data)           (no RCU lock held)
>     ...free(data)
>                             data->private = foo;
> 
make sense, thanks for explaining.

> The issue is theoretical at the moment because no users do this, but
> I'd be more comfortable taking the xa_lock, which prevents a
> concurrent xa_erase()+free(). (I commented on your v3 but you might
> have missed it)
> 
Did you reply to my v3? I did not see it. I only saw your comments about
v3 in your commit message.

> >> +	ioasid_data = xa_load(&ioasid_xa, ioasid);
> >> +	if (ioasid_data)
> >> +		rcu_assign_pointer(ioasid_data->private, data);  
> > it is good to publish and have barrier here. But I just wonder even
> > for weakly ordered machine, this pointer update is quite far away
> > from its data update.  
> 
> I don't know, it could be right before calling ioasid_set_data():
> 
> 	mydata = kzalloc(sizeof(*mydata));
> 	mydata->ops = &my_ops;			(1)
> 	ioasid_set_data(ioasid, mydata);
> 		... /* no write barrier here */
> 		data->private = mydata;		(2)
> 
> And then another thread calls ioasid_find():
> 
> 	mydata = ioasid_find(ioasid);
> 	if (mydata)
> 		mydata->ops->do_something();
> 
> On a weakly ordered machine, this thread could observe the pointer
> assignment (2) before the ops assignment (1), and dereference NULL.
> Using rcu_assign_pointer() should fix that
> 
I agree it is better to have the barrier. Just thought there is already
a rcu_read_lock() in xa_load() in between. rcu_read_lock() may have
barrier in some case but better not count on it. No issues here. I will
integrate this in the next version.

> Thanks,
> Jean

[Jacob Pan]
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

WARNING: multiple messages have this Message-ID (diff)
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	jacob.jun.pan@linux.intel.com, will.deacon@arm.com,
	linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org,
	robh+dt@kernel.org, robin.murphy@arm.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/8] iommu: Add I/O ASID allocator
Date: Tue, 11 Jun 2019 10:10:52 -0700	[thread overview]
Message-ID: <20190611101052.35af46df@jacob-builder> (raw)
In-Reply-To: <95292b47-4cf4-5fd9-b096-1cb016e2264f@arm.com>

On Tue, 11 Jun 2019 15:37:42 +0100
Jean-Philippe Brucker <jean-philippe.brucker@arm.com> wrote:

> On 11/06/2019 13:26, Jacob Pan wrote:
> >> +/**
> >> + * ioasid_set_data - Set private data for an allocated ioasid
> >> + * @ioasid: the ID to set data
> >> + * @data:   the private data
> >> + *
> >> + * For IOASID that is already allocated, private data can be set
> >> + * via this API. Future lookup can be done via ioasid_find.
> >> + */
> >> +int ioasid_set_data(ioasid_t ioasid, void *data)
> >> +{
> >> +	struct ioasid_data *ioasid_data;
> >> +	int ret = 0;
> >> +
> >> +	xa_lock(&ioasid_xa);  
> > Just wondering if this is necessary, since xa_load is under
> > rcu_read_lock and we are not changing anything internal to xa. For
> > custom allocator I still need to have the mutex against allocator
> > removal.  
> 
> I think we do need this because of a possible race with ioasid_free():
> 
>          CPU1                      CPU2
>   ioasid_free(ioasid)     ioasid_set_data(ioasid, foo)
>                             data = xa_load(...)
>     xa_erase(...)
>     kfree_rcu(data)           (no RCU lock held)
>     ...free(data)
>                             data->private = foo;
> 
make sense, thanks for explaining.

> The issue is theoretical at the moment because no users do this, but
> I'd be more comfortable taking the xa_lock, which prevents a
> concurrent xa_erase()+free(). (I commented on your v3 but you might
> have missed it)
> 
Did you reply to my v3? I did not see it. I only saw your comments about
v3 in your commit message.

> >> +	ioasid_data = xa_load(&ioasid_xa, ioasid);
> >> +	if (ioasid_data)
> >> +		rcu_assign_pointer(ioasid_data->private, data);  
> > it is good to publish and have barrier here. But I just wonder even
> > for weakly ordered machine, this pointer update is quite far away
> > from its data update.  
> 
> I don't know, it could be right before calling ioasid_set_data():
> 
> 	mydata = kzalloc(sizeof(*mydata));
> 	mydata->ops = &my_ops;			(1)
> 	ioasid_set_data(ioasid, mydata);
> 		... /* no write barrier here */
> 		data->private = mydata;		(2)
> 
> And then another thread calls ioasid_find():
> 
> 	mydata = ioasid_find(ioasid);
> 	if (mydata)
> 		mydata->ops->do_something();
> 
> On a weakly ordered machine, this thread could observe the pointer
> assignment (2) before the ops assignment (1), and dereference NULL.
> Using rcu_assign_pointer() should fix that
> 
I agree it is better to have the barrier. Just thought there is already
a rcu_read_lock() in xa_load() in between. rcu_read_lock() may have
barrier in some case but better not count on it. No issues here. I will
integrate this in the next version.

> Thanks,
> Jean

[Jacob Pan]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
To: Jean-Philippe Brucker
	<jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org>
Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	will.deacon-5wv7dgnIgG8@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	robin.murphy-5wv7dgnIgG8@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH 1/8] iommu: Add I/O ASID allocator
Date: Tue, 11 Jun 2019 10:10:52 -0700	[thread overview]
Message-ID: <20190611101052.35af46df@jacob-builder> (raw)
In-Reply-To: <95292b47-4cf4-5fd9-b096-1cb016e2264f-5wv7dgnIgG8@public.gmane.org>

On Tue, 11 Jun 2019 15:37:42 +0100
Jean-Philippe Brucker <jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org> wrote:

> On 11/06/2019 13:26, Jacob Pan wrote:
> >> +/**
> >> + * ioasid_set_data - Set private data for an allocated ioasid
> >> + * @ioasid: the ID to set data
> >> + * @data:   the private data
> >> + *
> >> + * For IOASID that is already allocated, private data can be set
> >> + * via this API. Future lookup can be done via ioasid_find.
> >> + */
> >> +int ioasid_set_data(ioasid_t ioasid, void *data)
> >> +{
> >> +	struct ioasid_data *ioasid_data;
> >> +	int ret = 0;
> >> +
> >> +	xa_lock(&ioasid_xa);  
> > Just wondering if this is necessary, since xa_load is under
> > rcu_read_lock and we are not changing anything internal to xa. For
> > custom allocator I still need to have the mutex against allocator
> > removal.  
> 
> I think we do need this because of a possible race with ioasid_free():
> 
>          CPU1                      CPU2
>   ioasid_free(ioasid)     ioasid_set_data(ioasid, foo)
>                             data = xa_load(...)
>     xa_erase(...)
>     kfree_rcu(data)           (no RCU lock held)
>     ...free(data)
>                             data->private = foo;
> 
make sense, thanks for explaining.

> The issue is theoretical at the moment because no users do this, but
> I'd be more comfortable taking the xa_lock, which prevents a
> concurrent xa_erase()+free(). (I commented on your v3 but you might
> have missed it)
> 
Did you reply to my v3? I did not see it. I only saw your comments about
v3 in your commit message.

> >> +	ioasid_data = xa_load(&ioasid_xa, ioasid);
> >> +	if (ioasid_data)
> >> +		rcu_assign_pointer(ioasid_data->private, data);  
> > it is good to publish and have barrier here. But I just wonder even
> > for weakly ordered machine, this pointer update is quite far away
> > from its data update.  
> 
> I don't know, it could be right before calling ioasid_set_data():
> 
> 	mydata = kzalloc(sizeof(*mydata));
> 	mydata->ops = &my_ops;			(1)
> 	ioasid_set_data(ioasid, mydata);
> 		... /* no write barrier here */
> 		data->private = mydata;		(2)
> 
> And then another thread calls ioasid_find():
> 
> 	mydata = ioasid_find(ioasid);
> 	if (mydata)
> 		mydata->ops->do_something();
> 
> On a weakly ordered machine, this thread could observe the pointer
> assignment (2) before the ops assignment (1), and dereference NULL.
> Using rcu_assign_pointer() should fix that
> 
I agree it is better to have the barrier. Just thought there is already
a rcu_read_lock() in xa_load() in between. rcu_read_lock() may have
barrier in some case but better not count on it. No issues here. I will
integrate this in the next version.

> Thanks,
> Jean

[Jacob Pan]

WARNING: multiple messages have this Message-ID (diff)
From: Jacob Pan <jacob.jun.pan@linux.intel.com>
To: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	will.deacon@arm.com, linux-kernel@vger.kernel.org,
	iommu@lists.linux-foundation.org, robh+dt@kernel.org,
	robin.murphy@arm.com, linux-arm-kernel@lists.infradead.org,
	jacob.jun.pan@linux.intel.com
Subject: Re: [PATCH 1/8] iommu: Add I/O ASID allocator
Date: Tue, 11 Jun 2019 10:10:52 -0700	[thread overview]
Message-ID: <20190611101052.35af46df@jacob-builder> (raw)
In-Reply-To: <95292b47-4cf4-5fd9-b096-1cb016e2264f@arm.com>

On Tue, 11 Jun 2019 15:37:42 +0100
Jean-Philippe Brucker <jean-philippe.brucker@arm.com> wrote:

> On 11/06/2019 13:26, Jacob Pan wrote:
> >> +/**
> >> + * ioasid_set_data - Set private data for an allocated ioasid
> >> + * @ioasid: the ID to set data
> >> + * @data:   the private data
> >> + *
> >> + * For IOASID that is already allocated, private data can be set
> >> + * via this API. Future lookup can be done via ioasid_find.
> >> + */
> >> +int ioasid_set_data(ioasid_t ioasid, void *data)
> >> +{
> >> +	struct ioasid_data *ioasid_data;
> >> +	int ret = 0;
> >> +
> >> +	xa_lock(&ioasid_xa);  
> > Just wondering if this is necessary, since xa_load is under
> > rcu_read_lock and we are not changing anything internal to xa. For
> > custom allocator I still need to have the mutex against allocator
> > removal.  
> 
> I think we do need this because of a possible race with ioasid_free():
> 
>          CPU1                      CPU2
>   ioasid_free(ioasid)     ioasid_set_data(ioasid, foo)
>                             data = xa_load(...)
>     xa_erase(...)
>     kfree_rcu(data)           (no RCU lock held)
>     ...free(data)
>                             data->private = foo;
> 
make sense, thanks for explaining.

> The issue is theoretical at the moment because no users do this, but
> I'd be more comfortable taking the xa_lock, which prevents a
> concurrent xa_erase()+free(). (I commented on your v3 but you might
> have missed it)
> 
Did you reply to my v3? I did not see it. I only saw your comments about
v3 in your commit message.

> >> +	ioasid_data = xa_load(&ioasid_xa, ioasid);
> >> +	if (ioasid_data)
> >> +		rcu_assign_pointer(ioasid_data->private, data);  
> > it is good to publish and have barrier here. But I just wonder even
> > for weakly ordered machine, this pointer update is quite far away
> > from its data update.  
> 
> I don't know, it could be right before calling ioasid_set_data():
> 
> 	mydata = kzalloc(sizeof(*mydata));
> 	mydata->ops = &my_ops;			(1)
> 	ioasid_set_data(ioasid, mydata);
> 		... /* no write barrier here */
> 		data->private = mydata;		(2)
> 
> And then another thread calls ioasid_find():
> 
> 	mydata = ioasid_find(ioasid);
> 	if (mydata)
> 		mydata->ops->do_something();
> 
> On a weakly ordered machine, this thread could observe the pointer
> assignment (2) before the ops assignment (1), and dereference NULL.
> Using rcu_assign_pointer() should fix that
> 
I agree it is better to have the barrier. Just thought there is already
a rcu_read_lock() in xa_load() in between. rcu_read_lock() may have
barrier in some case but better not count on it. No issues here. I will
integrate this in the next version.

> Thanks,
> Jean

[Jacob Pan]

  reply	other threads:[~2019-06-11 17:07 UTC|newest]

Thread overview: 144+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-10 18:47 [PATCH 0/8] iommu: Add auxiliary domain and PASID support to Arm SMMUv3 Jean-Philippe Brucker
2019-06-10 18:47 ` Jean-Philippe Brucker
2019-06-10 18:47 ` Jean-Philippe Brucker
2019-06-10 18:47 ` [PATCH 1/8] iommu: Add I/O ASID allocator Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-11  9:36   ` Jonathan Cameron
2019-06-11  9:36     ` Jonathan Cameron
2019-06-11  9:36     ` Jonathan Cameron
2019-06-11  9:36     ` Jonathan Cameron
2019-06-11 14:35     ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-11 18:13       ` Jacob Pan
2019-06-11 18:13         ` Jacob Pan
2019-06-11 18:13         ` Jacob Pan
2019-06-11 18:13         ` Jacob Pan
2019-06-18 14:22         ` Jean-Philippe Brucker
2019-06-18 14:22           ` Jean-Philippe Brucker
2019-06-18 14:22           ` Jean-Philippe Brucker
2019-06-18 14:22           ` Jean-Philippe Brucker
2019-06-18 17:05           ` Jacob Pan
2019-06-18 17:05             ` Jacob Pan
2019-06-18 17:05             ` Jacob Pan
2019-06-18 17:05             ` Jacob Pan
2019-06-19 14:26             ` Jean-Philippe Brucker
2019-06-19 14:26               ` Jean-Philippe Brucker
2019-06-19 14:26               ` Jean-Philippe Brucker
2019-06-11 12:26   ` Jacob Pan
2019-06-11 12:26     ` Jacob Pan
2019-06-11 12:26     ` Jacob Pan
2019-06-11 14:37     ` Jean-Philippe Brucker
2019-06-11 14:37       ` Jean-Philippe Brucker
2019-06-11 14:37       ` Jean-Philippe Brucker
2019-06-11 17:10       ` Jacob Pan [this message]
2019-06-11 17:10         ` Jacob Pan
2019-06-11 17:10         ` Jacob Pan
2019-06-11 17:10         ` Jacob Pan
2019-06-12 11:30         ` Jean-Philippe Brucker
2019-06-12 11:30           ` Jean-Philippe Brucker
2019-06-12 11:30           ` Jean-Philippe Brucker
2019-06-10 18:47 ` [PATCH 2/8] dt-bindings: document PASID property for IOMMU masters Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-07-08  7:58   ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-06-10 18:47 ` [PATCH 3/8] iommu/arm-smmu-v3: Support platform SSID Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-11  9:42   ` Jonathan Cameron
2019-06-11  9:42     ` Jonathan Cameron
2019-06-11  9:42     ` Jonathan Cameron
2019-06-11  9:42     ` Jonathan Cameron
2019-06-11 14:35     ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-18 18:08   ` Will Deacon
2019-06-18 18:08     ` Will Deacon
2019-06-18 18:08     ` Will Deacon
2019-06-19 11:53     ` Jean-Philippe Brucker
2019-06-19 11:53       ` Jean-Philippe Brucker
2019-06-19 11:53       ` Jean-Philippe Brucker
2019-07-08  7:58   ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-09-19 14:51     ` Jean-Philippe Brucker
2019-09-19 14:51       ` Jean-Philippe Brucker
2019-09-19 14:51       ` Jean-Philippe Brucker
2019-06-10 18:47 ` [PATCH 4/8] iommu/arm-smmu-v3: Add support for Substream IDs Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-11 10:19   ` Jonathan Cameron
2019-06-11 10:19     ` Jonathan Cameron
2019-06-11 10:19     ` Jonathan Cameron
2019-06-11 10:19     ` Jonathan Cameron
2019-06-11 14:35     ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-26 18:00   ` Will Deacon
2019-06-26 18:00     ` Will Deacon
2019-06-26 18:00     ` Will Deacon
2019-06-26 18:00     ` Will Deacon
2019-07-04  9:33     ` Jean-Philippe Brucker
2019-07-04  9:33       ` Jean-Philippe Brucker
2019-07-04  9:33       ` Jean-Philippe Brucker
2019-09-19 14:57     ` Jean-Philippe Brucker
2019-09-19 14:57       ` Jean-Philippe Brucker
2019-09-19 14:57       ` Jean-Philippe Brucker
2019-07-08 15:31   ` Auger Eric
2019-07-08 15:31     ` Auger Eric
2019-07-08 15:31     ` Auger Eric
2019-09-19 15:01     ` Jean-Philippe Brucker
2019-09-19 15:01       ` Jean-Philippe Brucker
2019-09-19 15:01       ` Jean-Philippe Brucker
2019-09-19 15:01       ` Jean-Philippe Brucker
2019-06-10 18:47 ` [PATCH 5/8] iommu/arm-smmu-v3: Add second level of context descriptor table Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-11 10:24   ` Jonathan Cameron
2019-06-11 10:24     ` Jonathan Cameron
2019-06-11 10:24     ` Jonathan Cameron
2019-06-11 10:24     ` Jonathan Cameron
2019-07-08 15:13   ` Auger Eric
2019-07-08 15:13     ` Auger Eric
2019-07-08 15:13     ` Auger Eric
2019-09-19 15:05     ` Jean-Philippe Brucker
2019-09-19 15:05       ` Jean-Philippe Brucker
2019-06-10 18:47 ` [PATCH 6/8] iommu/arm-smmu-v3: Support auxiliary domains Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-26 17:59   ` Will Deacon
2019-06-26 17:59     ` Will Deacon
2019-06-26 17:59     ` Will Deacon
2019-07-05 16:29     ` Jean-Philippe Brucker
2019-07-05 16:29       ` Jean-Philippe Brucker
2019-07-05 16:29       ` Jean-Philippe Brucker
2019-09-19 15:06     ` Jean-Philippe Brucker
2019-09-19 15:06       ` Jean-Philippe Brucker
2019-09-19 15:06       ` Jean-Philippe Brucker
2019-06-10 18:47 ` [PATCH 7/8] iommu/arm-smmu-v3: Improve add_device() error handling Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-07-08  7:58   ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-06-10 18:47 ` [PATCH 8/8] iommu/arm-smmu-v3: Add support for PCI PASID Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-10 18:47   ` Jean-Philippe Brucker
2019-06-11 10:45   ` Jonathan Cameron
2019-06-11 10:45     ` Jonathan Cameron
2019-06-11 10:45     ` Jonathan Cameron
2019-06-11 10:45     ` Jonathan Cameron
2019-06-11 14:35     ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-06-11 14:35       ` Jean-Philippe Brucker
2019-07-08  7:58   ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-07-08  7:58     ` Auger Eric
2019-09-19 15:10     ` Jean-Philippe Brucker
2019-09-19 15:10       ` Jean-Philippe Brucker
2019-09-19 15:10       ` Jean-Philippe Brucker

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=20190611101052.35af46df@jacob-builder \
    --to=jacob.jun.pan@linux.intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jean-philippe.brucker@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=robin.murphy@arm.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 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.