diff -r 619178758900 xen/drivers/passthrough/amd/iommu_intr.c --- a/xen/drivers/passthrough/amd/iommu_intr.c Wed Jul 30 16:37:58 2008 +0200 +++ b/xen/drivers/passthrough/amd/iommu_intr.c Wed Jul 30 16:38:32 2008 +0200 @@ -107,7 +107,7 @@ static void update_intremap_entry_from_i return; } -int amd_iommu_setup_intremap_table(void) +int __init amd_iommu_setup_intremap_table(void) { unsigned long flags; @@ -203,3 +203,18 @@ void amd_iommu_msi_msg_update_ire( update_intremap_entry_from_msi_msg(iommu, pdev, msg); } + +int __init deallocate_intremap_table(void) +{ + unsigned long flags; + + spin_lock_irqsave(&int_remap_table_lock, flags); + if ( int_remap_table ) + { + free_xenheap_pages(int_remap_table, 1); + int_remap_table = NULL; + } + spin_unlock_irqrestore(&int_remap_table_lock, flags); + + return 0; +}