lkml.org 
[lkml]   [2008]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/21] AMD IOMMU: add device detach helper functions
    Date
    Impact: add helper functions to detach a device from a domain

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    ---
    arch/x86/kernel/amd_iommu.c | 41 +++++++++++++++++++++++++++++++++++++++++
    1 files changed, 41 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
    index 61584d5..47158e3 100644
    --- a/arch/x86/kernel/amd_iommu.c
    +++ b/arch/x86/kernel/amd_iommu.c
    @@ -1469,3 +1469,44 @@ free_domains:

    return ret;
    }
    +
    +/*****************************************************************************
    + *
    + * The following functions belong to the exported interface of AMD IOMMU
    + *
    + * This interface allows access to lower level functions of the IOMMU
    + * like protection domain handling and assignement of devices to domains
    + * which is not possible with the dma_ops interface.
    + *
    + *****************************************************************************/
    +
    +static void __detach_device(struct protection_domain *domain, u16 devid)
    +{
    +
    + /* lock domain */
    + spin_lock(&domain->lock);
    +
    + /* remove domain from the lookup table */
    + amd_iommu_pd_table[devid] = NULL;
    +
    + /* remove entry from the device table seen by the hardware */
    + amd_iommu_dev_table[devid].data[0] = IOMMU_PTE_P | IOMMU_PTE_TV;
    + amd_iommu_dev_table[devid].data[1] = 0;
    + amd_iommu_dev_table[devid].data[2] = 0;
    +
    + /* decrease reference counter */
    + domain->dev_cnt -= 1;
    +
    + /* ready */
    + spin_unlock(&domain->lock);
    +}
    +
    +static void detach_device(struct protection_domain *domain, u16 devid)
    +{
    + unsigned long flags;
    +
    + /* lock device table */
    + write_lock_irqsave(&amd_iommu_devtable_lock, flags);
    + __detach_device(domain, devid);
    + write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
    +}
    --
    1.5.6.4



    \
     
     \ /
      Last update: 2008-12-09 15:25    [W:0.026 / U:0.396 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site