]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
x86/amd-iommu: Introduce set_dte_entry function
authorJoerg Roedel <joerg.roedel@amd.com>
Wed, 2 Sep 2009 14:07:00 +0000 (16:07 +0200)
committerJoerg Roedel <joerg.roedel@amd.com>
Thu, 3 Sep 2009 14:03:44 +0000 (16:03 +0200)
This function factors out some logic of attach_device to a
seperate function. This new function will be used to update
device table entries when necessary.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
arch/x86/kernel/amd_iommu.c

index 5265dd17eb5c16d70452b66771049252fed3122c..0fab1f1d135e07dee2f835cf5ffc1c5b3373283c 100644 (file)
@@ -1058,18 +1058,10 @@ static struct protection_domain *domain_for_device(u16 devid)
        return dom;
 }
 
-/*
- * If a device is not yet associated with a domain, this function does
- * assigns it visible for the hardware
- */
-static void attach_device(struct amd_iommu *iommu,
-                         struct protection_domain *domain,
-                         u16 devid)
+static void set_dte_entry(u16 devid, struct protection_domain *domain)
 {
-       unsigned long flags;
        u64 pte_root = virt_to_phys(domain->pt_root);
-
-       domain->dev_cnt += 1;
+       unsigned long flags;
 
        pte_root |= (domain->mode & DEV_ENTRY_MODE_MASK)
                    << DEV_ENTRY_MODE_SHIFT;
@@ -1082,6 +1074,21 @@ static void attach_device(struct amd_iommu *iommu,
 
        amd_iommu_pd_table[devid] = domain;
        write_unlock_irqrestore(&amd_iommu_devtable_lock, flags);
+}
+
+/*
+ * If a device is not yet associated with a domain, this function does
+ * assigns it visible for the hardware
+ */
+static void attach_device(struct amd_iommu *iommu,
+                         struct protection_domain *domain,
+                         u16 devid)
+{
+       /* set the DTE entry */
+       set_dte_entry(devid, domain);
+
+       /* increase reference counter */
+       domain->dev_cnt += 1;
 
        /*
         * We might boot into a crash-kernel here. The crashed kernel