On 13/11/17 16:57, Jacob Pan wrote: > On Mon, 13 Nov 2017 13:06:24 +0000 > Jean-Philippe Brucker <[email protected]> wrote: > >> On 10/11/17 22:18, Jacob Pan wrote: >>> On Fri, 10 Nov 2017 13:54:59 +0000 >>> Jean-Philippe Brucker <[email protected]> wrote: >>> >>>> On 09/11/17 19:36, Jacob Pan wrote: >>>>> On Tue, 7 Nov 2017 11:38:50 +0000 >>>>> Jean-Philippe Brucker <[email protected]> wrote: >>>>> >>>>>> I think the IOMMU should pass the struct device associated to the >>>>>> BDF to the fault handler. The fault handler can then deduce the >>>>>> BDF from struct device if it needs to. This also allows to >>>>>> support faults from non-PCI devices, where the BDF or deviceID >>>>>> is specific to the IOMMU and doesn't mean anything to the device >>>>>> driver. >>>>> Passing struct device is only useful if we use shared fault >>>>> notification method, as I did in V1 patch with group level or >>>>> current domain level. >>>>> >>>>> But the patch proposed here is a per device callback, there is no >>>>> need for passing struct device since it is implied. >>>> >>>> Sorry I had lost sight of the original patch in this thread. I >>>> think the callback is fine as it is, in your patch: >>>> >>>> typedef int (*iommu_dev_fault_handler_t)(struct device *, struct >>>> iommu_fault_event *); >>>> >>> I should have removed struct device here also. thanks for pointing >>> it out. >> >> Why remove it? The device driver will use a single C function as fault >> handler for multiple devices, so it needs struct device argument to >> understand the context. >> > I meant to replace struct device * with just a void *, driver can > register fault callback with instance of their private data, this could > be a container struct of struct device. > e.g. > int iommu_register_device_fault_handler(struct device *dev, > iommu_dev_fault_handler_t handler, void > *data); > > typedef int (*iommu_dev_fault_handler_t)(struct iommu_fault_event *, void *);
Ah I see. Yes that should work Thanks, Jean

