* [PATCH] iommu/core: pass user-provided token when handling faults
@ 2012-05-20 9:15 Ohad Ben-Cohen
[not found] ` <1337505311-25697-1-git-send-email-ohad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: Ohad Ben-Cohen @ 2012-05-20 9:15 UTC (permalink / raw)
To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA
Cc: Ohad Ben-Cohen, Fernando Guzman Lugo
Sometimes a single IOMMU user may have to deal with several
different IOMMU devices (e.g. remoteproc).
When an IOMMU fault happens, such users have to regain their
context in order to deal with the fault.
Users can't use the private fields of either the iommu_domain or
the IOMMU device, because those are already used by the IOMMU core
and low level driver (respectively).
This patch just simply allow users to pass a private token (most
notably their own context pointer) to iommu_set_fault_handler(),
and then makes sure it is provided back to the users whenever
IOMMU faults happen.
Signed-off-by: Ohad Ben-Cohen <ohad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
---
drivers/iommu/iommu.c | 5 ++++-
include/linux/iommu.h | 8 +++++---
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 2198b2d..8b9ded8 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -119,6 +119,7 @@ EXPORT_SYMBOL_GPL(iommu_present);
* iommu_set_fault_handler() - set a fault handler for an iommu domain
* @domain: iommu domain
* @handler: fault handler
+ * @token: user data, will be passed back to the fault handler
*
* This function should be used by IOMMU users which want to be notified
* whenever an IOMMU fault happens.
@@ -127,11 +128,13 @@ EXPORT_SYMBOL_GPL(iommu_present);
* error code otherwise.
*/
void iommu_set_fault_handler(struct iommu_domain *domain,
- iommu_fault_handler_t handler)
+ iommu_fault_handler_t handler,
+ void *token)
{
BUG_ON(!domain);
domain->handler = handler;
+ domain->handler_token = token;
}
EXPORT_SYMBOL_GPL(iommu_set_fault_handler);
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index d937580..eb72d3b 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -35,12 +35,13 @@ struct iommu_domain;
#define IOMMU_FAULT_WRITE 0x1
typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
- struct device *, unsigned long, int);
+ struct device *, unsigned long, int, void *);
struct iommu_domain {
struct iommu_ops *ops;
void *priv;
iommu_fault_handler_t handler;
+ void *handler_token;
};
#define IOMMU_CAP_CACHE_COHERENCY 0x1
@@ -95,7 +96,7 @@ extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,
extern int iommu_domain_has_cap(struct iommu_domain *domain,
unsigned long cap);
extern void iommu_set_fault_handler(struct iommu_domain *domain,
- iommu_fault_handler_t handler);
+ iommu_fault_handler_t handler, void *token);
extern int iommu_device_group(struct device *dev, unsigned int *groupid);
/**
@@ -132,7 +133,8 @@ static inline int report_iommu_fault(struct iommu_domain *domain,
* invoke it.
*/
if (domain->handler)
- ret = domain->handler(domain, dev, iova, flags);
+ ret = domain->handler(domain, dev, iova, flags,
+ domain->handler_token);
return ret;
}
--
1.7.5.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] iommu/core: pass user-provided token when handling faults
[not found] ` <1337505311-25697-1-git-send-email-ohad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
@ 2012-05-21 13:25 ` Joerg Roedel
[not found] ` <20120521132517.GE2604-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: Joerg Roedel @ 2012-05-21 13:25 UTC (permalink / raw)
To: Ohad Ben-Cohen
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Fernando Guzman Lugo
On Sun, May 20, 2012 at 12:15:11PM +0300, Ohad Ben-Cohen wrote:
> Sometimes a single IOMMU user may have to deal with several
> different IOMMU devices (e.g. remoteproc).
>
> When an IOMMU fault happens, such users have to regain their
> context in order to deal with the fault.
>
> Users can't use the private fields of either the iommu_domain or
> the IOMMU device, because those are already used by the IOMMU core
> and low level driver (respectively).
>
> This patch just simply allow users to pass a private token (most
> notably their own context pointer) to iommu_set_fault_handler(),
> and then makes sure it is provided back to the users whenever
> IOMMU faults happen.
>
> Signed-off-by: Ohad Ben-Cohen <ohad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
May break compilation for !CONFIG_IOMMU_API. Where is remoteproc
changed? As far as I can see this is the only user of
iommu_set_fault_handler().
Joerg
--
AMD Operating System Research Center
Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] iommu/core: pass user-provided token when handling faults
[not found] ` <20120521132517.GE2604-5C7GfCeVMHo@public.gmane.org>
@ 2012-05-21 14:14 ` Ohad Ben-Cohen
0 siblings, 0 replies; 3+ messages in thread
From: Ohad Ben-Cohen @ 2012-05-21 14:14 UTC (permalink / raw)
To: Joerg Roedel
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Fernando Guzman Lugo
On Mon, May 21, 2012 at 4:25 PM, Joerg Roedel <Joerg.Roedel-5C7GfCeVMHo@public.gmane.org> wrote:
> May break compilation for !CONFIG_IOMMU_API.
Good point. I'll squash this in:
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index eb72d3b..450293f 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -193,7 +193,7 @@ static inline int domain_has_cap(struct iommu_domain *domain
}
static inline void iommu_set_fault_handler(struct iommu_domain *domain,
- iommu_fault_handler_t handler)
+ iommu_fault_handler_t handler, void *token)
{
}
Or did you have something else in mind?
> Where is remoteproc changed?
In a subsequent patch set coming from Fernando (cc'ed). Fernando will
also carry this patch with him, and will cc you when the patch set is
submitted (should be very soon). I wanted your general opinion before
we start relying on this patch (sorry, should have mentioned it
earlier).
Thanks for your feedback!
Ohad.
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-05-21 14:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-20 9:15 [PATCH] iommu/core: pass user-provided token when handling faults Ohad Ben-Cohen
[not found] ` <1337505311-25697-1-git-send-email-ohad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org>
2012-05-21 13:25 ` Joerg Roedel
[not found] ` <20120521132517.GE2604-5C7GfCeVMHo@public.gmane.org>
2012-05-21 14:14 ` Ohad Ben-Cohen
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.