| To: | <xen-devel@xxxxxxxxxxxxxxxxxxx> |
|---|---|
| Subject: | [Xen-devel] [PATCH 1/2] amd-iommu: obtain page_alloc_lock before traversing a domain's page list |
| From: | "Jan Beulich" <jbeulich@xxxxxxxxxx> |
| Date: | 2009年1月30日 10:50:57 +0000 |
| Delivery-date: | 2009年1月30日 03:02:06 -0800 |
| Envelope-to: | www-data@xxxxxxxxxxxxxxxxxxx |
| List-help: | <mailto:xen-devel-request@lists.xensource.com?subject=help> |
| List-id: | Xen developer discussion <xen-devel.lists.xensource.com> |
| List-post: | <mailto:xen-devel@lists.xensource.com> |
| List-subscribe: | <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe> |
| List-unsubscribe: | <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe> |
| Sender: | xen-devel-bounces@xxxxxxxxxxxxxxxxxxx |
>From all I can tell, this doesn't violate lock ordering as other places
call heap allocation functions from inside hd->mapping_lock.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
--- 2009年01月27日.orig/xen/drivers/passthrough/amd/iommu_map.c 2009年01月29日
11:33:26.000000000 +0100
+++ 2009年01月27日/xen/drivers/passthrough/amd/iommu_map.c 2009年01月30日
08:43:35.000000000 +0100
@@ -567,6 +567,8 @@ int amd_iommu_sync_p2m(struct domain *d)
if ( hd->p2m_synchronized )
goto out;
+ spin_lock(&d->page_alloc_lock);
+
page_list_for_each ( page, &d->page_list )
{
mfn = page_to_mfn(page);
@@ -579,6 +581,7 @@ int amd_iommu_sync_p2m(struct domain *d)
if ( iommu_l2e == 0 )
{
+ spin_unlock(&d->page_alloc_lock);
amd_iov_error("Invalid IO pagetable entry gfn = %lx\n", gfn);
spin_unlock_irqrestore(&hd->mapping_lock, flags);
return -EFAULT;
@@ -587,6 +590,8 @@ int amd_iommu_sync_p2m(struct domain *d)
set_iommu_l1e_present(iommu_l2e, gfn, (u64)mfn << PAGE_SHIFT, iw, ir);
}
+ spin_unlock(&d->page_alloc_lock);
+
hd->p2m_synchronized = 1;
out:
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [Xen-devel] [PATCH 4/5] x86: re-arrange struct page_info members , Jan Beulich |
|---|---|
| Next by Date: | [Xen-devel] [PATCH 5/5] just realized that it's broken , Jan Beulich |
| Previous by Thread: | [Xen-devel] [PATCH 4/5] x86: re-arrange struct page_info members , Jan Beulich |
| Next by Thread: | [Xen-devel] [PATCH 5/5] just realized that it's broken , Jan Beulich |
| Indexes: | [Date] [Thread] [Top] [All Lists] |