Commit f7d7d53f authored by Rahul Singh's avatar Rahul Singh Committed by Jan Beulich

xen/pci: solve compilation error on ARM with HAS_PCI enabled

If mem-sharing, mem-paging, or log-dirty functionality is not enabled
for architecture when HAS_PCI is enabled, the compiler will throw an
error.

Move code to x86 specific file to fix compilation error.

Also, modify the code to use likely() in place of unlikley() for each
condition to make code more optimized.

No functional change intended.
Signed-off-by: default avatarRahul Singh <rahul.singh@arm.com>
Reviewed-by: default avatarBertrand Marquis <bertrand.marquis@arm.com>
Acked-by: default avatarJan Beulich <jbeulich@suse.com>
parent f7e77e55
......@@ -23,7 +23,6 @@
#include <xen/iommu.h>
#include <xen/irq.h>
#include <xen/param.h>
#include <xen/vm_event.h>
#include <xen/delay.h>
#include <xen/keyhandler.h>
#include <xen/event.h>
......@@ -1421,12 +1420,7 @@ static int assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn, u32 flag)
if ( !is_iommu_enabled(d) )
return 0;
/* Prevent device assign if mem paging or mem sharing have been
* enabled for this domain */
if ( d != dom_io &&
unlikely(mem_sharing_enabled(d) ||
vm_event_check_ring(d->vm_event_paging) ||
p2m_get_hostp2m(d)->global_logdirty) )
if ( !arch_iommu_use_permitted(d) )
return -EXDEV;
/* device_assigned() should already have cleared the device for assignment */
......
......@@ -18,6 +18,7 @@
#include <xen/guest_access.h>
#include <xen/event.h>
#include <xen/softirq.h>
#include <xen/vm_event.h>
#include <xsm/xsm.h>
#include <asm/hvm/io.h>
......@@ -308,6 +309,18 @@ struct page_info *iommu_alloc_pgtable(struct domain *d)
return pg;
}
bool arch_iommu_use_permitted(const struct domain *d)
{
/*
* Prevent device assign if mem paging, mem sharing or log-dirty
* have been enabled for this domain.
*/
return d == dom_io ||
(likely(!mem_sharing_enabled(d)) &&
likely(!vm_event_check_ring(d->vm_event_paging)) &&
likely(!p2m_get_hostp2m(d)->global_logdirty));
}
/*
* Local variables:
* mode: C
......
......@@ -378,6 +378,8 @@ DECLARE_PER_CPU(bool_t, iommu_dont_flush_iotlb);
extern struct spinlock iommu_pt_cleanup_lock;
extern struct page_list_head iommu_pt_cleanup_list;
bool arch_iommu_use_permitted(const struct domain *d);
#endif /* _IOMMU_H_ */
/*
......
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