From 62ca925c9a6b0d12bdf17ac4ab93f5434575cedc Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Thu, 16 Jan 2014 14:50:31 +0100 Subject: kern: include the mig-generated server headers in ipc_kobject.c GNU MIG recently gained support for emitting x_server_routine declarations in the generated server header file. Using this declaration, the x_server_routine functions can be inlined into the ipc_kobject_server function. * kern/ipc_kobject.c: Include the mig-generated server headers. --- kern/ipc_kobject.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'kern') diff --git a/kern/ipc_kobject.c b/kern/ipc_kobject.c index 37d4eb9..13af820 100644 --- a/kern/ipc_kobject.c +++ b/kern/ipc_kobject.c @@ -49,6 +49,18 @@ #include #include +#include +#include +#include +#include +#include +#include +#include + +#if MACH_DEBUG +#include +#endif + #if MACH_MACHINE_ROUTINES #include #endif @@ -146,17 +158,6 @@ ipc_kobject_server(request) * to perform the kernel function */ { - extern mig_routine_t mach_server_routine(), - mach_port_server_routine(), - mach_host_server_routine(), - device_server_routine(), - device_pager_server_routine(), - mach4_server_routine(), - gnumach_server_routine(); -#if MACH_DEBUG - extern mig_routine_t mach_debug_server_routine(); -#endif - #if MACH_MACHINE_ROUTINES extern mig_routine_t MACHINE_SERVER_ROUTINE(); #endif -- cgit v1.2.3 From fe7cd805567e1f4d1ed92d87b216e2dc78249892 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Sat, 1 Feb 2014 02:02:02 +0100 Subject: kern: add snprintf * kern/printf.c (snprintf): New function. * kern/printf.h (snprintf): New declaration. --- kern/printf.c | 10 ++++++++++ kern/printf.h | 1 + 2 files changed, 11 insertions(+) (limited to 'kern') diff --git a/kern/printf.c b/kern/printf.c index af59d5a..ea78d48 100644 --- a/kern/printf.c +++ b/kern/printf.c @@ -615,6 +615,16 @@ vsnprintf(char *buf, size_t size, const char *fmt, va_list args) return cookie.index; } +int +snprintf(char *buf, size_t size, const char *fmt, ...) +{ + int written; + va_list listp; + va_start(listp, fmt); + written = vsnprintf(buf, size, fmt, listp); + va_end(listp); + return written; +} void safe_gets(str, maxlen) char *str; diff --git a/kern/printf.h b/kern/printf.h index 8b4e760..0f8b328 100644 --- a/kern/printf.h +++ b/kern/printf.h @@ -40,6 +40,7 @@ extern void printnum (unsigned long u, int base, vm_offset_t putc_arg); extern int sprintf (char *buf, const char *fmt, ...); +extern int snprintf (char *buf, size_t size, const char *fmt, ...); extern int vsnprintf (char *buf, size_t size, const char *fmt, va_list args); extern int printf (const char *fmt, ...); -- cgit v1.2.3 From df47f83ed98e4ce356af8d34de05b549f4f9c912 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Sat, 1 Feb 2014 02:15:05 +0100 Subject: kern: add a name field to struct task * kern/task.c (task_create): Initialize name with the address of the task. * kern/task.h (TASK_NAME_SIZE): New definition. (struct task): Add field name. --- kern/task.c | 3 +++ kern/task.h | 9 +++++++++ 2 files changed, 12 insertions(+) (limited to 'kern') diff --git a/kern/task.c b/kern/task.c index 13b3c76..0b5a6f7 100644 --- a/kern/task.c +++ b/kern/task.c @@ -45,6 +45,7 @@ #include #include #include +#include #include /* for thread_wakeup */ #include #include @@ -164,6 +165,8 @@ kern_return_t task_create( } #endif /* FAST_TAS */ + snprintf (new_task->name, sizeof new_task->name, "%p", new_task); + ipc_task_enable(new_task); *child_task = new_task; diff --git a/kern/task.h b/kern/task.h index e852033..7ae10cd 100644 --- a/kern/task.h +++ b/kern/task.h @@ -48,6 +48,13 @@ #include #include +/* + * Task name buffer size. The size is chosen so that struct task fits + * into three cache lines. The size of a cache line on a typical CPU + * is 64 bytes. + */ +#define TASK_NAME_SIZE 32 + struct task { /* Synchronization/destruction information */ decl_simple_lock_data(,lock) /* Task's lock */ @@ -113,6 +120,8 @@ struct task { natural_t cow_faults; /* copy-on-write faults counter */ natural_t messages_sent; /* messages sent counter */ natural_t messages_received; /* messages received counter */ + + char name[TASK_NAME_SIZE]; }; #define task_lock(task) simple_lock(&(task)->lock) -- cgit v1.2.3