kvm_xen_evtchn_set(int flags, unsigned int port, int port_type) "flags 0x%x port %u port_type %d"
kvm_xen_evtchn_send(int cpu, int dest, unsigned int port) "cpu %d notify_cpu %d port %u"
kvm_xen_set_domid(unsigned int domid) "assigned with domid %u"
+kvm_xen_add_to_physmap(unsigned int space, unsigned int idx, uint64_t gfn) "add frame space %u idx %u gfn 0x%" PRIx64
int cmd, uint64_t arg, X86CPU *cpu)
{
CPUState *cs = CPU(cpu);
- int err = 0;
+ int err = -ENOSYS;
switch (cmd) {
case XENMEM_add_to_physmap: {
struct xen_add_to_physmap *xatp;
- struct shared_info *shi;
+ void *hva;
xatp = gva_to_hva(cs, arg);
if (!xatp) {
break;
}
- switch (xatp->space) {
- case XENMAPSPACE_shared_info:
- break;
- default:
- err = -ENOSYS;
+ hva = gpa_to_hva(xatp->gpfn << PAGE_SHIFT);
+ if (!hva) {
+ err = -EFAULT;
break;
}
- shi = gpa_to_hva(xatp->gpfn << PAGE_SHIFT);
- if (!shi) {
- err = -EFAULT;
+ switch (xatp->space) {
+ case XENMAPSPACE_shared_info: {
+ err = xen_set_shared_info(cs, hva, xatp->gpfn);
+ break;
+ }
+ default:
break;
}
- err = xen_set_shared_info(cs, shi, xatp->gpfn);
+ trace_kvm_xen_add_to_physmap(xatp->space, xatp->idx, xatp->gpfn);
break;
}
}