Commit fa4b57cc authored by Suresh Siddha's avatar Suresh Siddha Committed by H. Peter Anvin

x86, dmar: use atomic allocations for QI and Intr-remapping init

Impact: invalid use of GFP_KERNEL in interrupt context

Queued invalidation and interrupt-remapping will get initialized with
interrupts disabled (while enabling interrupt-remapping). So use
GFP_ATOMIC instead of GFP_KERNEL for memory alloacations.
Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parent 68a8ca59
...@@ -809,20 +809,20 @@ int dmar_enable_qi(struct intel_iommu *iommu) ...@@ -809,20 +809,20 @@ int dmar_enable_qi(struct intel_iommu *iommu)
if (iommu->qi) if (iommu->qi)
return 0; return 0;
iommu->qi = kmalloc(sizeof(*qi), GFP_KERNEL); iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC);
if (!iommu->qi) if (!iommu->qi)
return -ENOMEM; return -ENOMEM;
qi = iommu->qi; qi = iommu->qi;
qi->desc = (void *)(get_zeroed_page(GFP_KERNEL)); qi->desc = (void *)(get_zeroed_page(GFP_ATOMIC));
if (!qi->desc) { if (!qi->desc) {
kfree(qi); kfree(qi);
iommu->qi = 0; iommu->qi = 0;
return -ENOMEM; return -ENOMEM;
} }
qi->desc_status = kmalloc(QI_LENGTH * sizeof(int), GFP_KERNEL); qi->desc_status = kmalloc(QI_LENGTH * sizeof(int), GFP_ATOMIC);
if (!qi->desc_status) { if (!qi->desc_status) {
free_page((unsigned long) qi->desc); free_page((unsigned long) qi->desc);
kfree(qi); kfree(qi);
......
...@@ -447,12 +447,12 @@ static int setup_intr_remapping(struct intel_iommu *iommu, int mode) ...@@ -447,12 +447,12 @@ static int setup_intr_remapping(struct intel_iommu *iommu, int mode)
struct page *pages; struct page *pages;
ir_table = iommu->ir_table = kzalloc(sizeof(struct ir_table), ir_table = iommu->ir_table = kzalloc(sizeof(struct ir_table),
GFP_KERNEL); GFP_ATOMIC);
if (!iommu->ir_table) if (!iommu->ir_table)
return -ENOMEM; return -ENOMEM;
pages = alloc_pages(GFP_KERNEL | __GFP_ZERO, INTR_REMAP_PAGE_ORDER); pages = alloc_pages(GFP_ATOMIC | __GFP_ZERO, INTR_REMAP_PAGE_ORDER);
if (!pages) { if (!pages) {
printk(KERN_ERR "failed to allocate pages of order %d\n", printk(KERN_ERR "failed to allocate pages of order %d\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment