int xc_get_mem_access(xc_interface *xch, domid_t domain_id,
uint64_t pfn, xenmem_access_t *access);
-/*
- * Instructions causing a mem_access violation can be emulated by Xen
- * to progress the execution without having to relax the mem_access
- * permissions.
- * This feature has to be first enabled, then in the vm_event
- * response to a mem_access event it can be indicated if the instruction
- * should be emulated.
- */
-int xc_mem_access_enable_emulate(xc_interface *xch, domid_t domain_id);
-int xc_mem_access_disable_emulate(xc_interface *xch, domid_t domain_id);
-
/***
* Monitor control operations.
*
return rc;
}
-int xc_mem_access_enable_emulate(xc_interface *xch,
- domid_t domain_id)
-{
- xen_mem_access_op_t mao =
- {
- .op = XENMEM_access_op_enable_emulate,
- .domid = domain_id,
- };
-
- return do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
-}
-
-int xc_mem_access_disable_emulate(xc_interface *xch,
- domid_t domain_id)
-{
- xen_mem_access_op_t mao =
- {
- .op = XENMEM_access_op_disable_emulate,
- .domid = domain_id,
- };
-
- return do_memory_op(xch, XENMEM_access_op, &mao, sizeof(mao));
-}
-
/*
* Local variables:
* mode: C
break;
}
- case XENMEM_access_op_enable_emulate:
- rc = p2m_mem_access_enable_emulate(d);
- break;
-
- case XENMEM_access_op_disable_emulate:
- rc = p2m_mem_access_disable_emulate(d);
- break;
-
default:
rc = -ENOSYS;
break;
p2m_max_real_type, /* Types after this won't be store in the p2m */
} p2m_type_t;
-static inline
-int p2m_mem_access_enable_emulate(struct domain *d)
-{
- /* Not supported on ARM */
- return -ENOSYS;
-}
-
-static inline
-int p2m_mem_access_disable_emulate(struct domain *d)
-{
- /* Not supported on ARM */
- return -ENOSYS;
-}
-
static inline
void p2m_mem_access_emulate_check(struct vcpu *v,
const vm_event_response_t *rsp)
} monitor;
/* Mem_access emulation control */
- bool_t mem_access_emulate_enabled;
bool_t mem_access_emulate_each_rep;
/* Emulated devices enabled bitmap. */
struct npfec npfec,
vm_event_request_t **req_ptr);
-/*
- * Emulating a memory access requires custom handling. These non-atomic
- * functions should be called under domctl lock.
- */
-static inline
-int p2m_mem_access_enable_emulate(struct domain *d)
-{
- if ( d->arch.mem_access_emulate_enabled )
- return -EEXIST;
-
- d->arch.mem_access_emulate_enabled = 1;
- return 0;
-}
-
-static inline
-int p2m_mem_access_disable_emulate(struct domain *d)
-{
- if ( !d->arch.mem_access_emulate_enabled )
- return -EEXIST;
-
- d->arch.mem_access_emulate_enabled = 0;
- return 0;
-}
-
/* Check for emulation and mark vcpu for skipping one instruction
* upon rescheduling if required. */
void p2m_mem_access_emulate_check(struct vcpu *v,
#define XENMEM_access_op 21
#define XENMEM_access_op_set_access 0
#define XENMEM_access_op_get_access 1
-#define XENMEM_access_op_enable_emulate 2
-#define XENMEM_access_op_disable_emulate 3
+/*
+ * XENMEM_access_op_enable_emulate and XENMEM_access_op_disable_emulate are
+ * currently unused, but since they have been in use please do not reuse them.
+ *
+ * #define XENMEM_access_op_enable_emulate 2
+ * #define XENMEM_access_op_disable_emulate 3
+ */
typedef enum {
XENMEM_access_n,