#define M1 1
#define M3 3
#define M4 4
-#define M3_STRING 16 /* legacy m3_ca1 size (must not be changed) */
-#define M3_LONG_STRING 16 /* current m3_ca1 size (may be increased) */
+#define M3_STRING 44 /* legacy m3_ca1 size (must not be changed) */
+#define M3_LONG_STRING 44 /* current m3_ca1 size (may be increased) */
typedef struct {int m1i1, m1i2, m1i3; char *m1p1, *m1p2, *m1p3, *m1p4;} mess_1;
typedef struct {int m2i1, m2i2, m2i3; long m2l1, m2l2; char *m2p1;
mess_vmmcp m_vmmcp;
mess_vmmcp_reply m_vmmcp_reply;
mess_vm_vfs_mmap m_vm_vfs;
+ u32_t size[14]; /* message payload may have 14 longs at most */
} m_u;
} message __aligned(16);
/*
* int copy_msg_from_user(message * user_mbuf, message * dst);
*
- * Copies a message of 36 bytes from user process space to a kernel buffer. This
- * function assumes that the process address space is installed (cr3 loaded).
+ * Copies a message of 64 bytes from user process space to a kernel buffer. This
+ * function assumes that the process address space is installed (ttbr loaded).
*
* This function from the callers point of view either succeeds or returns an
* error which gives the caller a chance to respond accordingly. In fact it
mov r9, r0
/* load the destination pointer */
mov r10, r1
- /* do the copy */
- ldm r9, {r0-r8}
- stm r10, {r0-r8}
+ /* do the copy, first 32 bytes */
+ ldm r9, {r0-r7}
+ stm r10, {r0-r7}
+
+ /* next 32 bytes */
+ add r9, r9, #32
+ add r10, r10, #32
+ ldm r9, {r0-r7}
+ stm r10, {r0-r7}
LABEL(__copy_msg_from_user_end)
pop {r4-r10, lr}
/*
* void copy_msg_to_user(message * src, message * user_mbuf);
*
- * Copies a message of 36 bytes to user process space from a kernel buffer.
+ * Copies a message of 64 bytes to user process space from a kernel buffer.
*
* All the other copy_msg_from_user() comments apply here as well!
*/
mov r9, r0
/* load the destination pointer */
mov r10, r1
- /* do the copy */
- ldm r9, {r0-r8}
- stm r10, {r0-r8}
+ /* do the copy, first 32 bytes */
+ ldm r9, {r0-r7}
+ stm r10, {r0-r7}
+
+ /* next 32 bytes */
+ add r9, r9, #32
+ add r10, r10, #32
+ ldm r9, {r0-r7}
+ stm r10, {r0-r7}
LABEL(__copy_msg_to_user_end)
pop {r4-r10, lr}
/*
* int copy_msg_from_user(message * user_mbuf, message * dst);
*
- * Copies a message of 36 bytes from user process space to a kernel buffer. This
+ * Copies a message of 64 bytes from user process space to a kernel buffer. This
* function assumes that the process address space is installed (cr3 loaded).
*
* This function from the callers point of view either succeeds or returns an
mov 8*4(%ecx), %eax
mov %eax, 8*4(%edx)
+ mov 9*4(%ecx), %eax
+ mov %eax, 9*4(%edx)
+ mov 10*4(%ecx), %eax
+ mov %eax, 10*4(%edx)
+ mov 11*4(%ecx), %eax
+ mov %eax, 11*4(%edx)
+ mov 12*4(%ecx), %eax
+ mov %eax, 12*4(%edx)
+ mov 13*4(%ecx), %eax
+ mov %eax, 13*4(%edx)
+ mov 14*4(%ecx), %eax
+ mov %eax, 14*4(%edx)
+ mov 15*4(%ecx), %eax
+ mov %eax, 15*4(%edx)
+
LABEL(__copy_msg_from_user_end)
movl $0, %eax
ret
/*
* void copy_msg_to_user(message * src, message * user_mbuf);
*
- * Copies a message of 36 bytes to user process space from a kernel buffer.
+ * Copies a message of 64 bytes to user process space from a kernel buffer.
*
* All the other copy_msg_from_user() comments apply here as well!
*/
mov 8*4(%ecx), %eax
mov %eax, 8*4(%edx)
+
+ mov 9*4(%ecx), %eax
+ mov %eax, 9*4(%edx)
+ mov 10*4(%ecx), %eax
+ mov %eax, 10*4(%edx)
+ mov 11*4(%ecx), %eax
+ mov %eax, 11*4(%edx)
+ mov 12*4(%ecx), %eax
+ mov %eax, 12*4(%edx)
+ mov 13*4(%ecx), %eax
+ mov %eax, 13*4(%edx)
+ mov 14*4(%ecx), %eax
+ mov %eax, 14*4(%edx)
+ mov 15*4(%ecx), %eax
+ mov %eax, 15*4(%edx)
+
LABEL(__copy_msg_to_user_end)
movl $0, %eax
ret
#include "region.h"
#include "sanitycheck.h"
-#define STATELEN 50
+#define STATELEN 70
static struct vfs_request_node {
message reqmsg;