--- Gnu-Mach/ipc/ipc_kmsg.h 2020/09/02 04:42:32 1.1.1.2 +++ Gnu-Mach/ipc/ipc_kmsg.h 2020/09/02 04:49:42 1.1.1.5 @@ -34,21 +34,16 @@ #ifndef _IPC_IPC_KMSG_H_ #define _IPC_IPC_KMSG_H_ -#include -#include -#include - #include #include #include -#include "cpu_number.h" -#include +#include +#include #include #include -#if NORMA_IPC -#include +#include +#include #include -#endif /* NORMA_IPC */ /* * This structure is only the header for a kmsg buffer; @@ -66,11 +61,6 @@ typedef struct ipc_kmsg { struct ipc_kmsg *ikm_next, *ikm_prev; vm_size_t ikm_size; ipc_marequest_t ikm_marequest; -#if NORMA_IPC - vm_page_t ikm_page; - vm_map_copy_t ikm_copy; - unsigned long ikm_source_node; -#endif /* NORMA_IPC */ mach_msg_header_t ikm_header; } *ipc_kmsg_t; @@ -82,11 +72,24 @@ typedef struct ipc_kmsg { #define ikm_plus_overhead(size) ((vm_size_t)((size) + IKM_OVERHEAD)) #define ikm_less_overhead(size) ((mach_msg_size_t)((size) - IKM_OVERHEAD)) +#if MACH_IPC_TEST /* - * XXX For debugging. + * For debugging. */ #define IKM_BOGUS ((ipc_kmsg_t) 0xffffff10) +#define ikm_mark_bogus(kmsg) \ +MACRO_BEGIN \ + (kmsg)->ikm_next = IKM_BOGUS; \ + (kmsg)->ikm_prev = IKM_BOGUS; \ +MACRO_END + +#else /* MACH_IPC_TEST */ + +#define ikm_mark_bogus(kmsg) ; + +#endif /* MACH_IPC_TEST */ + /* * We keep a per-processor cache of kernel message buffers. * The cache saves the overhead/locking of using kalloc/kfree. @@ -102,9 +105,12 @@ extern ipc_kmsg_t ipc_kmsg_cache[NCPUS]; /* * The size of the kernel message buffers that will be cached. * IKM_SAVED_KMSG_SIZE includes overhead; IKM_SAVED_MSG_SIZE doesn't. + * + * We use the page size for IKM_SAVED_KMSG_SIZE to make sure the + * page is pinned to a single processor. */ -#define IKM_SAVED_KMSG_SIZE ((vm_size_t) 256) +#define IKM_SAVED_KMSG_SIZE PAGE_SIZE #define IKM_SAVED_MSG_SIZE ikm_less_overhead(IKM_SAVED_KMSG_SIZE) #define ikm_alloc(size) \ @@ -150,8 +156,7 @@ MACRO_BEGIN \ MACRO_END /* - * struct ipc_kmsg_queue is defined in kern/thread.h instead of here, - * so that kern/thread.h doesn't have to include ipc/ipc_kmsg.h. + * struct ipc_kmsg_queue is defined in ipc/ipc_kmsg_queue.h */ #include @@ -206,9 +211,7 @@ MACRO_BEGIN \ _next->ikm_prev = _prev; \ _prev->ikm_next = _next; \ } \ - /* XXX Debug paranoia */ \ - kmsg->ikm_next = IKM_BOGUS; \ - kmsg->ikm_prev = IKM_BOGUS; \ + ikm_mark_bogus (kmsg); \ MACRO_END #define ipc_kmsg_enqueue_macro(queue, kmsg) \ @@ -230,62 +233,52 @@ MACRO_BEGIN \ MACRO_END extern void -ipc_kmsg_destroy(/* ipc_kmsg_t */); +ipc_kmsg_destroy(ipc_kmsg_t); extern void -ipc_kmsg_clean(/* ipc_kmsg_t */); +ipc_kmsg_clean(ipc_kmsg_t); extern void -ipc_kmsg_free(/* ipc_kmsg_t */); +ipc_kmsg_free(ipc_kmsg_t); extern mach_msg_return_t -ipc_kmsg_get(/* mach_msg_header_t *, mach_msg_size_t, ipc_kmsg_t * */); +ipc_kmsg_get(mach_msg_header_t *, mach_msg_size_t, ipc_kmsg_t *); extern mach_msg_return_t -ipc_kmsg_get_from_kernel(/* mach_msg_header_t *, mach_msg_size_t, - ipc_kmsg_t * */); +ipc_kmsg_get_from_kernel(mach_msg_header_t *, mach_msg_size_t, ipc_kmsg_t *); extern mach_msg_return_t -ipc_kmsg_put(/* mach_msg_header_t *, ipc_kmsg_t, mach_msg_size_t */); +ipc_kmsg_put(mach_msg_header_t *, ipc_kmsg_t, mach_msg_size_t); extern void -ipc_kmsg_put_to_kernel(/* mach_msg_header_t *, ipc_kmsg_t, mach_msg_size_t */); +ipc_kmsg_put_to_kernel(mach_msg_header_t *, ipc_kmsg_t, mach_msg_size_t); extern mach_msg_return_t -ipc_kmsg_copyin_header(/* mach_msg_header_t *, ipc_space_t, mach_port_t */); +ipc_kmsg_copyin_header(mach_msg_header_t *, ipc_space_t, mach_port_t); extern mach_msg_return_t -ipc_kmsg_copyin(/* ipc_kmsg_t, ipc_space_t, vm_map_t, mach_port_t */); +ipc_kmsg_copyin(ipc_kmsg_t, ipc_space_t, vm_map_t, mach_port_t); extern void -ipc_kmsg_copyin_from_kernel(/* ipc_kmsg_t */); +ipc_kmsg_copyin_from_kernel(ipc_kmsg_t); extern mach_msg_return_t -ipc_kmsg_copyout_header(/* mach_msg_header_t *, ipc_space_t, mach_port_t */); +ipc_kmsg_copyout_header(mach_msg_header_t *, ipc_space_t, mach_port_t); extern mach_msg_return_t -ipc_kmsg_copyout_object(/* ipc_space_t, ipc_object_t, - mach_msg_type_name_t, mach_port_t * */); +ipc_kmsg_copyout_object(ipc_space_t, ipc_object_t, + mach_msg_type_name_t, mach_port_t *); extern mach_msg_return_t -ipc_kmsg_copyout_body(/* vm_offset_t, vm_offset_t, ipc_space_t, vm_map_t */); +ipc_kmsg_copyout_body(vm_offset_t, vm_offset_t, ipc_space_t, vm_map_t); extern mach_msg_return_t -ipc_kmsg_copyout(/* ipc_kmsg_t, ipc_space_t, vm_map_t, mach_port_t */); +ipc_kmsg_copyout(ipc_kmsg_t, ipc_space_t, vm_map_t, mach_port_t); extern mach_msg_return_t -ipc_kmsg_copyout_pseudo(/* ipc_kmsg_t, ipc_space_t, vm_map_t */); +ipc_kmsg_copyout_pseudo(ipc_kmsg_t, ipc_space_t, vm_map_t); extern void -ipc_kmsg_copyout_dest(/* ipc_kmsg_t, ipc_space_t */); - -#if MACH_IPC_COMPAT - -extern mach_msg_return_t -ipc_kmsg_copyin_compat(/* ipc_kmsg_t, ipc_space_t, vm_map_t */); - -extern mach_msg_return_t -ipc_kmsg_copyout_compat(/* ipc_kmsg_t, ipc_space_t, vm_map_t */); +ipc_kmsg_copyout_dest(ipc_kmsg_t, ipc_space_t); -#endif /* MACH_IPC_COMPAT */ #endif /* _IPC_IPC_KMSG_H_ */