lkml.org 
[lkml]   [2009]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] PCIe hot plug for Intel iommu
    To support PCIe hot plug in IOMMU, we register a notifier to respond to device
    change action.

    When the notifier gets BUS_NOTIFY_UNBOUND_DRIVER, it removes the device from its
    DMAR domain.

    A hot added device will be added into an IOMMU domain when it first does IOMMU
    op. So there is no need to add more code for hot add.

    Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>

    ---

    intel-iommu.c | 29 +++++++++++++++++++++++++++++
    1 files changed, 29 insertions(+)

    diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
    index 855dd7c..d8b8cfc 100644
    --- a/drivers/pci/intel-iommu.c
    +++ b/drivers/pci/intel-iommu.c
    @@ -3193,6 +3193,33 @@ static int __init init_iommu_sysfs(void)
    }
    #endif /* CONFIG_PM */

    +/*
    + * Here we only respond to action of unbound device from driver.
    + *
    + * Added device is not attached to its DMAR domain here yet. That will happen
    + * when mapping the device to iova.
    + */
    +static int device_notifier(struct notifier_block *nb,
    + unsigned long action, void *data)
    +{
    + struct device *dev = data;
    + struct pci_dev *pdev = to_pci_dev(dev);
    + struct dmar_domain *domain;
    +
    + domain = find_domain(pdev);
    + if (!domain)
    + return 0;
    +
    + if (action == BUS_NOTIFY_UNBOUND_DRIVER && !iommu_pass_through)
    + domain_remove_one_dev_info(domain, pdev);
    +
    + return 0;
    +}
    +
    +static struct notifier_block device_nb = {
    + .notifier_call = device_notifier,
    +};
    +
    int __init intel_iommu_init(void)
    {
    int ret = 0;
    @@ -3245,6 +3272,8 @@ int __init intel_iommu_init(void)

    register_iommu(&intel_iommu_ops);

    + bus_register_notifier(&pci_bus_type, &device_nb);
    +
    return 0;
    }


    \
     
     \ /
      Last update: 2009-10-06 20:37    [W:0.023 / U:59.096 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site