case VKI_XEN_SCHEDULER_CREDIT2:
PRE_XEN_DOMCTL_READ(scheduler_op, u.credit2.weight);
break;
+ case VKI_XEN_SCHEDULER_RTDS:
+ PRE_XEN_DOMCTL_READ(scheduler_op, u.rtds.period);
+ PRE_XEN_DOMCTL_READ(scheduler_op, u.rtds.budget);
+ break;
case VKI_XEN_SCHEDULER_ARINC653:
break;
}
break;
case VKI_XEN_DOMCTL_getvcpuaffinity:
- __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity, vcpu);
+ switch (domctl->interface_version) {
+ case 0x00000007:
+ case 0x00000008:
+ case 0x00000009:
+ __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity_00000009, vcpu);
+ __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity_00000009, cpumap.nr_bits);
+ break;
+ case 0x0000000a:
+ __PRE_XEN_DOMCTL_READ(getvcpuaffinity, vcpuaffinity_0000000a, vcpu);
+ if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_HARD)
+ __PRE_XEN_DOMCTL_READ(
+ setvcpuaffinity, vcpuaffinity_0000000a, cpumap_hard.nr_bits);
+ if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_SOFT)
+ __PRE_XEN_DOMCTL_READ(
+ setvcpuaffinity, vcpuaffinity_0000000a, cpumap_soft.nr_bits);
+ break;
+ }
break;
case VKI_XEN_DOMCTL_setvcpuaffinity:
- __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity, vcpu);
- PRE_MEM_READ("XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap.bitmap",
- (Addr)domctl->u.vcpuaffinity.cpumap.bitmap.p,
- domctl->u.vcpuaffinity.cpumap.nr_bits / 8);
+ switch (domctl->interface_version) {
+ case 0x00000007:
+ case 0x00000008:
+ case 0x00000009:
+ __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_00000009, vcpu);
+ __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_00000009, cpumap.nr_bits);
+ PRE_MEM_READ("XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap.bitmap",
+ (Addr)domctl->u.vcpuaffinity_00000009.cpumap.bitmap.p,
+ domctl->u.vcpuaffinity_00000009.cpumap.nr_bits / 8);
+ break;
+ case 0x0000000a:
+ __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_0000000a, vcpu);
+ __PRE_XEN_DOMCTL_READ(setvcpuaffinity, vcpuaffinity_0000000a, flags);
+ if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_HARD) {
+ __PRE_XEN_DOMCTL_READ(
+ setvcpuaffinity, vcpuaffinity_0000000a, cpumap_hard.nr_bits);
+ PRE_MEM_READ(
+ "XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap_hard.bitmap",
+ (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_hard.bitmap.p,
+ domctl->u.vcpuaffinity_0000000a.cpumap_hard.nr_bits / 8);
+ }
+ if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_SOFT) {
+ __PRE_XEN_DOMCTL_READ(
+ setvcpuaffinity, vcpuaffinity_0000000a, cpumap_soft.nr_bits);
+ PRE_MEM_READ(
+ "XEN_DOMCTL_setvcpuaffinity u.vcpuaffinity.cpumap_soft.bitmap",
+ (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_soft.bitmap.p,
+ domctl->u.vcpuaffinity_0000000a.cpumap_soft.nr_bits / 8);
+ }
+ break;
+ }
break;
case VKI_XEN_DOMCTL_getnodeaffinity:
case VKI_XEN_DOMCTL_settscinfo:
case VKI_XEN_DOMCTL_ioport_permission:
case VKI_XEN_DOMCTL_hypercall_init:
- case VKI_XEN_DOMCTL_setvcpuaffinity:
case VKI_XEN_DOMCTL_setvcpucontext:
case VKI_XEN_DOMCTL_setnodeaffinity:
case VKI_XEN_DOMCTL_set_cpuid:
break;
case VKI_XEN_SCHEDULER_ARINC653:
break;
+ case VKI_XEN_SCHEDULER_RTDS:
+ POST_XEN_DOMCTL_WRITE(scheduler_op, u.rtds.period);
+ POST_XEN_DOMCTL_WRITE(scheduler_op, u.rtds.budget);
+ break;
}
}
break;
case VKI_XEN_DOMCTL_getvcpuaffinity:
- POST_MEM_WRITE((Addr)domctl->u.vcpuaffinity.cpumap.bitmap.p,
- domctl->u.vcpuaffinity.cpumap.nr_bits / 8);
+ case VKI_XEN_DOMCTL_setvcpuaffinity: /* Writes back actual result */
+ switch (domctl->interface_version) {
+ case 0x00000007:
+ case 0x00000008:
+ case 0x00000009:
+ POST_MEM_WRITE((Addr)domctl->u.vcpuaffinity_00000009.cpumap.bitmap.p,
+ domctl->u.vcpuaffinity_00000009.cpumap.nr_bits / 8);
+ break;
+ case 0x0000000a:
+ if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_HARD)
+ POST_MEM_WRITE(
+ (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_hard.bitmap.p,
+ domctl->u.vcpuaffinity_0000000a.cpumap_hard.nr_bits / 8);
+ if (domctl->u.vcpuaffinity_0000000a.flags & VKI_XEN_VCPUAFFINITY_SOFT)
+ POST_MEM_WRITE(
+ (Addr)domctl->u.vcpuaffinity_0000000a.cpumap_soft.bitmap.p,
+ domctl->u.vcpuaffinity_0000000a.cpumap_soft.nr_bits / 8);
+ }
break;
case VKI_XEN_DOMCTL_getnodeaffinity:
VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
};
-struct vki_xen_domctl_vcpuaffinity {
+struct vki_xen_domctl_vcpuaffinity_00000009 {
vki_uint32_t vcpu; /* IN */
struct vki_xenctl_bitmap cpumap; /* IN/OUT */
};
+struct vki_xen_domctl_vcpuaffinity_0000000a {
+ vki_uint32_t vcpu; /* IN */
+#define VKI_XEN_VCPUAFFINITY_HARD (1U<<0)
+#define VKI_XEN_VCPUAFFINITY_SOFT (1U<<1)
+ vki_uint32_t flags; /* IN */
+ struct vki_xenctl_bitmap cpumap_hard; /* IN/OUT */
+ struct vki_xenctl_bitmap cpumap_soft; /* IN/OUT */
+};
+
struct vki_xen_domctl_shadow_op_stats {
vki_uint32_t fault_count;
vki_uint32_t dirty_count;
#define VKI_XEN_SCHEDULER_CREDIT 5
#define VKI_XEN_SCHEDULER_CREDIT2 6
#define VKI_XEN_SCHEDULER_ARINC653 7
+#define VKI_XEN_SCHEDULER_RTDS 8
vki_uint32_t cmd; /* VKI_XEN_DOMCTL_SCHEDOP_* */
#define VKI_XEN_DOMCTL_SCHEDOP_putinfo 0
#define VKI_XEN_DOMCTL_SCHEDOP_getinfo 1
struct xen_domctl_sched_credit2 {
vki_uint16_t weight;
} credit2;
+ struct xen_domctl_sched_rtds {
+ vki_uint32_t period;
+ vki_uint32_t budget;
+ } rtds;
} u;
};
//struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
struct vki_xen_domctl_nodeaffinity nodeaffinity;
- struct vki_xen_domctl_vcpuaffinity vcpuaffinity;
+ struct vki_xen_domctl_vcpuaffinity_00000009 vcpuaffinity_00000009;
+ struct vki_xen_domctl_vcpuaffinity_0000000a vcpuaffinity_0000000a;
struct vki_xen_domctl_shadow_op shadow_op;
struct vki_xen_domctl_max_mem max_mem;
struct vki_xen_domctl_vcpucontext vcpucontext;