/root/src/xen/xen/arch/x86/compat.c
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * compat.c |
3 | | * |
4 | | * Implementations of legacy hypercalls. These call through to the new |
5 | | * hypercall after doing necessary argument munging. |
6 | | */ |
7 | | |
8 | | #include <xen/guest_access.h> |
9 | | #include <xen/hypercall.h> |
10 | | #include <xen/trace.h> |
11 | | #include <public/sched.h> |
12 | | |
13 | | #ifndef COMPAT |
14 | | typedef long ret_t; |
15 | | #endif |
16 | | |
17 | | /* Legacy hypercall (as of 0x00030202). */ |
18 | | ret_t do_physdev_op_compat(XEN_GUEST_HANDLE(physdev_op_t) uop) |
19 | 0 | { |
20 | 0 | struct physdev_op op; |
21 | 0 |
|
22 | 0 | if ( unlikely(copy_from_guest(&op, uop, 1) != 0) ) |
23 | 0 | return -EFAULT; |
24 | 0 |
|
25 | 0 | return do_physdev_op(op.cmd, guest_handle_from_ptr(&uop.p->u, void)); |
26 | 0 | } Unexecuted instantiation: do_physdev_op_compat Unexecuted instantiation: compat_physdev_op_compat |
27 | | |
28 | | #ifndef COMPAT |
29 | | |
30 | | /* Legacy hypercall (as of 0x00030101). */ |
31 | | long do_sched_op_compat(int cmd, unsigned long arg) |
32 | 0 | { |
33 | 0 | switch ( cmd ) |
34 | 0 | { |
35 | 0 | case SCHEDOP_yield: |
36 | 0 | case SCHEDOP_block: |
37 | 0 | return do_sched_op(cmd, guest_handle_from_ptr(NULL, void)); |
38 | 0 |
|
39 | 0 | case SCHEDOP_shutdown: |
40 | 0 | TRACE_3D(TRC_SCHED_SHUTDOWN, |
41 | 0 | current->domain->domain_id, current->vcpu_id, arg); |
42 | 0 | domain_shutdown(current->domain, (u8)arg); |
43 | 0 | break; |
44 | 0 |
|
45 | 0 | default: |
46 | 0 | return -ENOSYS; |
47 | 0 | } |
48 | 0 |
|
49 | 0 | return 0; |
50 | 0 | } |
51 | | |
52 | | /* Legacy hypercall (as of 0x00030202). */ |
53 | | long do_event_channel_op_compat(XEN_GUEST_HANDLE_PARAM(evtchn_op_t) uop) |
54 | 0 | { |
55 | 0 | struct evtchn_op op; |
56 | 0 |
|
57 | 0 | if ( unlikely(copy_from_guest(&op, uop, 1) != 0) ) |
58 | 0 | return -EFAULT; |
59 | 0 |
|
60 | 0 | switch ( op.cmd ) |
61 | 0 | { |
62 | 0 | case EVTCHNOP_bind_interdomain: |
63 | 0 | case EVTCHNOP_bind_virq: |
64 | 0 | case EVTCHNOP_bind_pirq: |
65 | 0 | case EVTCHNOP_close: |
66 | 0 | case EVTCHNOP_send: |
67 | 0 | case EVTCHNOP_status: |
68 | 0 | case EVTCHNOP_alloc_unbound: |
69 | 0 | case EVTCHNOP_bind_ipi: |
70 | 0 | case EVTCHNOP_bind_vcpu: |
71 | 0 | case EVTCHNOP_unmask: |
72 | 0 | return do_event_channel_op(op.cmd, |
73 | 0 | guest_handle_from_ptr(&uop.p->u, void)); |
74 | 0 |
|
75 | 0 | default: |
76 | 0 | return -ENOSYS; |
77 | 0 | } |
78 | 0 | } |
79 | | |
80 | | #endif |