]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
dmar: Allocate queued invalidation structure using numa locality info
authorSuresh Siddha <suresh.b.siddha@intel.com>
Fri, 2 Oct 2009 18:01:22 +0000 (11:01 -0700)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 5 Oct 2009 06:55:26 +0000 (07:55 +0100)
Allocate queued invalidation descriptor structures using numa locality info.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/pci/dmar.c

index 577956566a0baf9f1f1af63c25f7df0fba0fb8cc..63aa52973d4d3729365d0f0d8f9864e495f0e476 100644 (file)
@@ -1040,6 +1040,7 @@ static void __dmar_enable_qi(struct intel_iommu *iommu)
 int dmar_enable_qi(struct intel_iommu *iommu)
 {
        struct q_inval *qi;
+       struct page *desc_page;
 
        if (!ecap_qis(iommu->ecap))
                return -ENOENT;
@@ -1056,13 +1057,16 @@ int dmar_enable_qi(struct intel_iommu *iommu)
 
        qi = iommu->qi;
 
-       qi->desc = (void *)(get_zeroed_page(GFP_ATOMIC));
-       if (!qi->desc) {
+
+       desc_page = alloc_pages_node(iommu->node, GFP_ATOMIC | __GFP_ZERO, 0);
+       if (!desc_page) {
                kfree(qi);
                iommu->qi = 0;
                return -ENOMEM;
        }
 
+       qi->desc = page_address(desc_page);
+
        qi->desc_status = kmalloc(QI_LENGTH * sizeof(int), GFP_ATOMIC);
        if (!qi->desc_status) {
                free_page((unsigned long) qi->desc);