Loading arch/x86/kernel/amd_iommu.c +30 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,9 @@ #include <linux/bitops.h> #include <linux/scatterlist.h> #include <linux/iommu-helper.h> #ifdef CONFIG_IOMMU_API #include <linux/iommu.h> #endif #include <asm/proto.h> #include <asm/iommu.h> #include <asm/gart.h> Loading Loading @@ -1606,4 +1609,31 @@ static void cleanup_domain(struct protection_domain *domain) write_unlock_irqrestore(&amd_iommu_devtable_lock, flags); } static int amd_iommu_domain_init(struct iommu_domain *dom) { struct protection_domain *domain; domain = kzalloc(sizeof(*domain), GFP_KERNEL); if (!domain) return -ENOMEM; spin_lock_init(&domain->lock); domain->mode = PAGE_MODE_3_LEVEL; domain->id = domain_id_alloc(); if (!domain->id) goto out_free; domain->pt_root = (void *)get_zeroed_page(GFP_KERNEL); if (!domain->pt_root) goto out_free; dom->priv = domain; return 0; out_free: kfree(domain); return -ENOMEM; } #endif Loading
arch/x86/kernel/amd_iommu.c +30 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,9 @@ #include <linux/bitops.h> #include <linux/scatterlist.h> #include <linux/iommu-helper.h> #ifdef CONFIG_IOMMU_API #include <linux/iommu.h> #endif #include <asm/proto.h> #include <asm/iommu.h> #include <asm/gart.h> Loading Loading @@ -1606,4 +1609,31 @@ static void cleanup_domain(struct protection_domain *domain) write_unlock_irqrestore(&amd_iommu_devtable_lock, flags); } static int amd_iommu_domain_init(struct iommu_domain *dom) { struct protection_domain *domain; domain = kzalloc(sizeof(*domain), GFP_KERNEL); if (!domain) return -ENOMEM; spin_lock_init(&domain->lock); domain->mode = PAGE_MODE_3_LEVEL; domain->id = domain_id_alloc(); if (!domain->id) goto out_free; domain->pt_root = (void *)get_zeroed_page(GFP_KERNEL); if (!domain->pt_root) goto out_free; dom->priv = domain; return 0; out_free: kfree(domain); return -ENOMEM; } #endif