case VKI_KVM_RUN:
break;
+ case VKI_KVM_S390_MEM_OP: {
+ struct vki_kvm_s390_mem_op *args =
+ (struct vki_kvm_s390_mem_op *)(ARG3);
+ PRE_MEM_READ("ioctl(KVM_S390_MEM_OP)", ARG3,
+ sizeof(struct vki_kvm_s390_mem_op));
+ if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY)
+ break;
+ if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ)
+ PRE_MEM_WRITE("ioctl(KVM_S390_MEM_OP).buf", (Addr)args->buf, args->size);
+ if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_WRITE)
+ PRE_MEM_READ("ioctl(KVM_S390_MEM_OP).buf", (Addr)args->buf, args->size);
+ }
+ break;
+
+
#ifdef ENABLE_XEN
case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: {
SyscallArgs harrghs;
case VKI_KVM_KVMCLOCK_CTRL:
break;
+ case VKI_KVM_S390_MEM_OP: {
+ struct vki_kvm_s390_mem_op *args =
+ (struct vki_kvm_s390_mem_op *)(ARG3);
+ if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY)
+ break;
+ if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ)
+ POST_MEM_WRITE((Addr)args->buf, args->size);
+ }
+ break;
+
#ifdef ENABLE_XEN
case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: {
SyscallArgs harrghs;
#define VKI_KVM_NMI _VKI_IO(KVMIO, 0x9a)
#define VKI_KVM_KVMCLOCK_CTRL _VKI_IO(KVMIO, 0xad)
+struct vki_kvm_s390_mem_op {
+ /* in */
+ __vki_u64 gaddr; /* the guest address */
+ __vki_u64 flags; /* flags */
+ __vki_u32 size; /* amount of bytes */
+ __vki_u32 op; /* type of operation */
+ __vki_u64 buf; /* buffer in userspace */
+ __vki_u8 ar; /* the access register number */
+ __vki_u8 reserved[31]; /* should be set to 0 */
+};
+
+#define VKI_KVM_S390_MEMOP_LOGICAL_READ 0
+#define VKI_KVM_S390_MEMOP_LOGICAL_WRITE 1
+#define VKI_KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0)
+#define VKI_KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1)
+
+#define VKI_KVM_S390_MEM_OP _VKI_IOW(KVMIO, 0xb1, struct vki_kvm_s390_mem_op)
+
//----------------------------------------------------------------------
// From linux-2.6/include/linux/net_stamp.h
//----------------------------------------------------------------------