#define active_entry(t, e) \
((t)->active[(e)/ACGNT_PER_PAGE][(e)%ACGNT_PER_PAGE])
+static inline void gnttab_flush_tlb(const struct domain *d)
+{
+ if ( !paging_mode_external(d) )
+ flush_tlb_mask(d->domain_dirty_cpumask);
+}
+
static inline unsigned int
num_act_frames_from_sha_frames(const unsigned int num)
{
guest_handle_add_offset(uop, 1);
}
- flush_tlb_mask(current->domain->domain_dirty_cpumask);
+ gnttab_flush_tlb(current->domain);
for ( i = 0; i < partial_done; i++ )
__gnttab_unmap_common_complete(&(common[i]));
return 0;
fault:
- flush_tlb_mask(current->domain->domain_dirty_cpumask);
+ gnttab_flush_tlb(current->domain);
for ( i = 0; i < partial_done; i++ )
__gnttab_unmap_common_complete(&(common[i]));
guest_handle_add_offset(uop, 1);
}
- flush_tlb_mask(current->domain->domain_dirty_cpumask);
+ gnttab_flush_tlb(current->domain);
for ( i = 0; i < partial_done; i++ )
__gnttab_unmap_common_complete(&(common[i]));
return 0;
fault:
- flush_tlb_mask(current->domain->domain_dirty_cpumask);
+ gnttab_flush_tlb(current->domain);
for ( i = 0; i < partial_done; i++ )
__gnttab_unmap_common_complete(&(common[i]));
}
guest_physmap_remove_page(d, gop.mfn, mfn, 0);
- flush_tlb_mask(d->domain_dirty_cpumask);
+ gnttab_flush_tlb(d);
/* Find the target domain. */
if ( unlikely((e = rcu_lock_domain_by_id(gop.domid)) == NULL) )