|
@@ -359,18 +359,14 @@ HYPERVISOR_update_va_mapping(unsigned long va, pte_t new_val,
|
|
|
return _hypercall4(int, update_va_mapping, va,
|
|
|
new_val.pte, new_val.pte >> 32, flags);
|
|
|
}
|
|
|
+extern int __must_check xen_event_channel_op_compat(int, void *);
|
|
|
|
|
|
static inline int
|
|
|
HYPERVISOR_event_channel_op(int cmd, void *arg)
|
|
|
{
|
|
|
int rc = _hypercall2(int, event_channel_op, cmd, arg);
|
|
|
- if (unlikely(rc == -ENOSYS)) {
|
|
|
- struct evtchn_op op;
|
|
|
- op.cmd = cmd;
|
|
|
- memcpy(&op.u, arg, sizeof(op.u));
|
|
|
- rc = _hypercall1(int, event_channel_op_compat, &op);
|
|
|
- memcpy(arg, &op.u, sizeof(op.u));
|
|
|
- }
|
|
|
+ if (unlikely(rc == -ENOSYS))
|
|
|
+ rc = xen_event_channel_op_compat(cmd, arg);
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
@@ -386,17 +382,14 @@ HYPERVISOR_console_io(int cmd, int count, char *str)
|
|
|
return _hypercall3(int, console_io, cmd, count, str);
|
|
|
}
|
|
|
|
|
|
+extern int __must_check HYPERVISOR_physdev_op_compat(int, void *);
|
|
|
+
|
|
|
static inline int
|
|
|
HYPERVISOR_physdev_op(int cmd, void *arg)
|
|
|
{
|
|
|
int rc = _hypercall2(int, physdev_op, cmd, arg);
|
|
|
- if (unlikely(rc == -ENOSYS)) {
|
|
|
- struct physdev_op op;
|
|
|
- op.cmd = cmd;
|
|
|
- memcpy(&op.u, arg, sizeof(op.u));
|
|
|
- rc = _hypercall1(int, physdev_op_compat, &op);
|
|
|
- memcpy(arg, &op.u, sizeof(op.u));
|
|
|
- }
|
|
|
+ if (unlikely(rc == -ENOSYS))
|
|
|
+ rc = HYPERVISOR_physdev_op_compat(cmd, arg);
|
|
|
return rc;
|
|
|
}
|
|
|
|