e57778a1e3
Xen has a pte update function which will update a pte while preserving its accessed and dirty bits. This means that ptep_modify_prot_start() can be implemented as a simple read of the pte value. The hardware may update the pte in the meantime, but ptep_modify_prot_commit() updates it while preserving any changes that may have happened in the meantime. The updates in ptep_modify_prot_commit() are batched if we're currently in lazy mmu mode. The mmu_update hypercall can take a batch of updates to perform, but this code doesn't make particular use of that feature, in favour of using generic multicall batching to get them all into the hypervisor. The net effect of this is that each mprotect pte update turns from two expensive trap-and-emulate faults into they hypervisor into a single hypercall whose cost is amortized in a batched multicall. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Acked-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
46 lines
1.4 KiB
C
46 lines
1.4 KiB
C
/******************************************************************************
|
|
* features.h
|
|
*
|
|
* Feature flags, reported by XENVER_get_features.
|
|
*
|
|
* Copyright (c) 2006, Keir Fraser <keir@xensource.com>
|
|
*/
|
|
|
|
#ifndef __XEN_PUBLIC_FEATURES_H__
|
|
#define __XEN_PUBLIC_FEATURES_H__
|
|
|
|
/*
|
|
* If set, the guest does not need to write-protect its pagetables, and can
|
|
* update them via direct writes.
|
|
*/
|
|
#define XENFEAT_writable_page_tables 0
|
|
|
|
/*
|
|
* If set, the guest does not need to write-protect its segment descriptor
|
|
* tables, and can update them via direct writes.
|
|
*/
|
|
#define XENFEAT_writable_descriptor_tables 1
|
|
|
|
/*
|
|
* If set, translation between the guest's 'pseudo-physical' address space
|
|
* and the host's machine address space are handled by the hypervisor. In this
|
|
* mode the guest does not need to perform phys-to/from-machine translations
|
|
* when performing page table operations.
|
|
*/
|
|
#define XENFEAT_auto_translated_physmap 2
|
|
|
|
/* If set, the guest is running in supervisor mode (e.g., x86 ring 0). */
|
|
#define XENFEAT_supervisor_mode_kernel 3
|
|
|
|
/*
|
|
* If set, the guest does not need to allocate x86 PAE page directories
|
|
* below 4GB. This flag is usually implied by auto_translated_physmap.
|
|
*/
|
|
#define XENFEAT_pae_pgdir_above_4gb 4
|
|
|
|
/* x86: Does this Xen host support the MMU_PT_UPDATE_PRESERVE_AD hypercall? */
|
|
#define XENFEAT_mmu_pt_update_preserve_ad 5
|
|
|
|
#define XENFEAT_NR_SUBMAPS 1
|
|
|
|
#endif /* __XEN_PUBLIC_FEATURES_H__ */
|