]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
add KVM_S390_MEMOP ioctl handling
authorChristian Borntraeger <borntraeger@de.ibm.com>
Fri, 12 Jun 2015 10:54:12 +0000 (10:54 +0000)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Fri, 12 Jun 2015 10:54:12 +0000 (10:54 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15334

coregrind/m_syswrap/syswrap-linux.c
include/vki/vki-linux.h

index c042ddaf2dc3e1aa2761a11c53ef6f7e771bd456..660b27a43c3249a533e39a5b2e15adc5613f2b59 100644 (file)
@@ -7220,6 +7220,21 @@ PRE(sys_ioctl)
    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;
@@ -9614,6 +9629,16 @@ POST(sys_ioctl)
    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;
index 34f3fee7be8f18185537089dd63d13978aeab2ea..874717f7934d0f552f2024f416788229b30bc66a 100644 (file)
@@ -3167,6 +3167,24 @@ struct vki_sockaddr_rc {
 #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
 //----------------------------------------------------------------------