| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
| |
|
|
|
|
|
|
|
|
| |
And pave the way for making the non-_irq variants check that they are
never used within interrupts.
We do have a few places which were missing it, as the following commits will
show.
|
| |
|
| |
|
| |
|
|
|
|
| |
For coherency with the rest of the implementations
|
|
|
|
| |
Message-Id: <20230805154859.2003109-1-damien@zamaudio.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Booting to beginning of bootstrap with different number of cpus
and checking the lock statistics where TIME is in milliseconds:
Set MACH_LOCK_MON to 1 in configfrag.ac, then
Configure options
--enable-ncpus=8 --enable-kdb --enable-apic --disable-linux-groups
-smp 1
db{0}> show all slocks
SUCCESS FAIL MASKED STACK TIME LOCK/CALLER
4208 0/0 4208/100 2/0 7890/1 0xc1098f54(c11847c8)
1 0/0 1/100 0/0 7890/7890 0x315(c11966e0)
30742 0/0 0/0 2106/0 160/0 0xf52a9e2c(f5a07958)
30742 0/0 0/0 0/0 140/0 0xf52a5e2c(f5a07b10)
149649 0/0 3372/2 1/0 120/0 0xc118a590(c118a9d4)
16428 0/0 0/0 1/0 90/0 0xf52a5dd0(f5a07ab8)
14345 0/0 0/0 18/0 80/0 0xf64afe2c(f64aa488)
1791 0/0 0/0 1/0 80/0 0xf52a3e70(f5e57f70)
17331 total locks, 0 empty buckets
2320150 0/0 455490/19 11570533/4 17860/0 0xc10a4580(c10a4580)
-smp 2
(could not wait until booted)
db{0}> show all slocks
SUCCESS FAIL MASKED STACK TIME LOCK/CALLER
47082 0/0 47082/100 0/0 413940/8 0xc1098f54(c11847c8)
2 0/0 2/100 0/0 413940/206970 0x6ede(c11966e0)
47139 0/0 0/0 2106/0 4670/0 0xc119edec(f5e409b0)
132895 3/0 3372/2 1/0 4580/0 0xc118a590(c118a9d4)
118313 0/0 2/0 0/0 3660/0 0xc1098ec4(c1189f80)
183233 1/0 1714/0 2/0 2290/0 0xc1098e54(c118aa8c)
14357 0/0 0/0 1878/0 1200/0 0xf52a4de0(f5e40a60)
14345 0/0 0/0 18/0 1200/0 0xf52a4dec(f528f488)
16910 total locks, 0 empty buckets
2220850 455/0 485391/21 11549793/5 879030/0 0xc10a4580(c10a4580)
Message-Id: <20230722045043.1579134-1-damien@zamaudio.com>
|
|
|
|
|
|
| |
We are checking for the existence of time_value64_t but we didn't add
that to the task_thread_times_info structure.
Message-Id: <ZGRDbS0XIm1fJwkG@jupiter.tail36e24.ts.net>
|
| |
|
|
|
|
|
|
|
| |
We can fast track the simplification of the RPC ABI for x86_64 if we don't have
MACH_MSG_TYPE_STRING used in RPCs which forces msgt_size to use more than 8
bits.
Message-Id: <ZFht+/9cVPHuV90D@jupiter.tail36e24.ts.net>
|
|
|
|
|
| |
msgt_deallocate was not initialized explicitly, this fixes that too.
Message-Id: <ZFM2cLr1Ms/B3v8U@jupiter.tail36e24.ts.net>
|
|
|
|
| |
Message-Id: <ZFLq5/a9zzRHOlSf@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
|
|
|
| |
In case the kernel interfaces use dynamically sized strings, we will
end up calling mig_deallocate to free the out of line string that was copied
into the kernel. As a matter of contract such type of data is freed
automatically either in kernel code when the RPC fails or in the MiG
stub if it succeeds.
This was tested by changing task_set_name to use dynamic strings and making
sure out of line data is passed when strlen(name) > 4.
Message-Id: <ZFB64/0vOJ3x15ub@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
| |
* include/mach/mig_support.h: Drop the ifndef because this file is only
used internally to compile gnumach. We export mig_support.h from glibc
already.
* kern/ipc_mig.c: len should be vm_size_t.
* kern/ipc_mig.h: Drop duplicate prototypes.
Message-Id: <ZFBjEk07CaQgx9Ru@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
|
|
| |
* i386/i386/i386asm.sym: add offsets for asm
* i386/i386/pcb.c: switch FSBASE/GSBASE on context switch and
implement accessors in thread setstatus/getstatus
* i386/i386/thread.h: add new state to thread saved state
* kern/thread.c: add i386_FSGS_BASE_STATE handler
* x86_64/locore.S: fix fs/gs handling, skipping the base address and
avoid resetting it by manually re-loading fs/gs
Message-Id: <20230419194703.410575-5-luca@orpolo.org>
|
|
|
|
|
|
| |
RPCs remain compatible with existing clients but if they know about the
new size then we will populate the new fields.
Message-Id: <ZDzPLCJccKeRB5Pd@mars.tail36e24.ts.net>
|
|
|
|
|
|
| |
host_get_kernel_boot_info was added recently to fix the use of
MACH_MSG_TYPE_STRING.
Message-Id: <ZC5Sz8a4FCT6IjCY@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
|
|
| |
* i386/i386/thread.h: Define USER_STACK_ALIGN which is 16-byte for 64 bit
programs as recommended by the System V AMD64 guidelines. Also define
KERNEL_STACK_ALIGN which can differ from user land.
* i386/i386/pcb.c: Use USER_STACK_ALIGN to align the bootstrap arguments and
ultimately the stack where the program starts on.
* kern/bootstrap.c: Do not align arg_len here since it will be aligned
in set_user_regs.
Message-Id: <ZCpOb6vNEfPclKPr@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
| |
On EXC_BAD_ACCESS, exception subcode is used to pass the faulting memory
address, so it needs to be (at least) pointer-sized. Thus, make it into
a long.
This requires matching changes in glibc and the Hurd.
Message-Id: <20230319151017.531737-4-bugaevc@gmail.com>
|
|
|
|
|
|
|
|
| |
Changed kern/timer.c to use the higher precision time_value64_t.
Of course, this won't suffer from the 2038 overflow but it does provide
nanosecond precision (if gnumach ever uses a better timer) and
moves us closer to only having time_value64_t.
Message-Id: <ZA63tGcv3bETUJFJ@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The existing definitions for kernel_version_t and kernel_boot_info_t use
(MACH_MSG_TYPE_STRING, length*8) which result in message types that have
a single element of 512 or 4096 bytes (set as msgt_size). This results
in MiG generating mach_msg_type_long_t. Using c_string has the benefit
of moving this size to be defined as msgt_number which doesn't overflow.
This will allow us to simplify the 64 bit RPC ABI since all msgt_size can
be defined with just 8 bits (as it should be expected).
The resulting implementation is the same but we still need to define new
RPCs since server and user expect different mach_msg_type_t.
Message-Id: <ZA63pS8j9J6NwuXY@jupiter.tail36e24.ts.net>
|
|
|
|
| |
Message-Id: <ZAzYoE7+ugFsH5JA@jupiter.tail36e24.ts.net>
|
| |
|
|
|
|
|
|
|
|
| |
TESTED:
- by setting MACH_LOCK_MON to 1 in configfrag.ac
and running "show all slocks" in kdb
- does not break default configured kernel
Message-Id: <20230306070512.292715-1-damien@zamaudio.com>
|
|
|
|
|
| |
* kern/bootstrap.c: replace integers with long/vm_offset_t
Message-Id: <20230216213318.2048699-3-luca@orpolo.org>
|
|
|
|
|
|
|
|
|
| |
* i386/include/mach/i386/exec/elf.h: add Elf64 definitions and define
common Elf structures, corresponding to 32/64 bit variants at
compile time.
* include/mach/exec/elf.h: add Elf64 definitions
* kern/elf-load.c: use common Elf structures
Message-Id: <20230216213318.2048699-2-luca@orpolo.org>
|
| |
|
|
|
|
|
|
| |
Similarly to update_mapped_time/read_mapped_time, one need to
synchronize the writes and read to make sure they are performed in the
expected order.
|
|
|
|
|
| |
We need to avoid the kernel optimizing away the reads from
memory. Use a standard relaxing instruction for that.
|
|
|
|
|
|
|
|
|
|
| |
* i386/i386/vm_param.h: add VM_MAX/MIN_USER_ADDRESS to kernel headers.
* i386/i386/db_interface.c
* i386/i386/ldt.c
* i386/i386/pcb.c
* i386/intel/pmap.c
* kern/task.c: replace VM_MAX/MIN_ADDRESS with VM_MAX/MIN_USER_ADDRESS
Message-Id: <20230212172818.1511405-7-luca@orpolo.org>
|
|
|
|
|
|
|
|
|
|
|
|
| |
* include/mach/task_info.h: use rpc variant of time_value_t
* include/mach/thread_info.h: Likewise
* kern/mach_clock.c: use rpc variant of time_value_t in
read_time_stamp()
* kern/mach_clock.h: Likewise
* kern/thread.c: use rpc variant of thread_read_times()
* kern/timer.h_ add thread_read_times_rpc() by converting time_value_t
to the corresponding rpc structures inline.
Message-Id: <20230212170313.1501404-5-luca@orpolo.org>
|
| |
|
|
|
|
| |
(this is actually a no-op for i386)
|
|
|
|
|
|
| |
Same existing logic, just with 64 bits. Old RPCs are implemented by
calling into the new RPCs.
Message-Id: <Y9TJAmL2byOWup5x@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* device/ds_routines.c: use static qualifier.
* device/subrs.c: delete unused functions.
* i386/i386/ast_check.c: include prototypes in kern/ast.h
* i386/i386/db_disasm.c: Include prototypes in ddb/db_examine.h
* i386/i386/db_interface.h: Define prototype for kdb_kentry. Expose
debug methods feep and kd_debug_put.
* i386/i386/db_trace.c: delete left over cthreads support, functions are
not used.
* i386/i386/model_dep.h: Define prototype for c_boot_entry.
* i386/i386at/acpi_parse_apic.c: Static qualifiers.
* i386/i386at/autoconf.c: Include header file for prototypes and remove
dead code.
* i386/i386at/autoconf.h: Fix prototype.
* i386/i386at/com.c: Add static qualifiers, delete dead code.
* i386/i386at/com.c: ditto.
* i386/i386at/com.h: Define prototypes for debug functions.
* i386/i386at/int_init.c: Include header.
* i386/i386at/kd.c: Include header for debug interface. Remove dead
kd_cmdreg_read and make xga_getpos static.
* i386/i386at/kd_mouse.c: Static qualifiers.
* i386/i386at/lpr.c: Dead lprpr.
* i386/i386at/model_dep.c: Remove exit function.
* kern/mach_clock.c: Include mig prototypes.
* kern/mach_clock.h: Remove duplicates of mig prototypes.
* kern/machine.c: Use static.
* kern/startup.c: slave_main is unused.
* kern/thread.h: Define thread_stats that is useful for debugging.
* kern/timer.c: Keep db_thread_times since it can be used for debugging.
* kern/timer.h: ditto.
* linux/dev/glue/misc.c: Use mig header for host_get_time.
Message-Id: <Y8oyiecaflCaYhaW@mercury.tail36e24.ts.net>
|
|
|
|
| |
Message-Id: <Y8mYd/pt/og4Tj5I@mercury.tail36e24.ts.net>
|
|
|
|
|
|
| |
Also updated the mapped time to support the new 64-bit time while
keeping compatible with the user land programs currently using it so
they can be migrated in parallel.
|
|
|
|
|
|
| |
This also reverts 566c227636481b246d928772ebeaacbc7c37145b and
963b1794d7117064cee8ab5638b329db51dad854
Message-Id: <Y8d75KSqNL4FFInm@mercury.tail36e24.ts.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a cleanup following the introduction of mach_port_name_t.
The same set of changes is applied to all files:
- rename mach_port_t to mach_port_name_t where a port name is used,
- use MACH_PORT_NAME_NULL and MACH_PORT_NAME_DEAD where appropriate,
- use invalid_port_to_name() and invalid_name_to_port() for conversion
where appropriate,
- use regular copyout() insted of copyout_port() when we deal with
mach_port_name_t already before copyout,
- use the new helper ipc_kmsg_copyout_object_to_port() when we really
want to place a port name in the space of a mach_port_t.
* include/mach/notify.h: Likewise
* ipc/ipc_entry.c: Likewise
* ipc/ipc_kmsg.c: Likewise
* ipc/ipc_kmsg.h: Likewise, and add ipc_kmsg_copyout_object_to_port()
* ipc/ipc_marequest.c: Likewise
* ipc/ipc_object.c: Likewise
* ipc/ipc_port.c: Likewise
* ipc/ipc_space.h: Likewise
* ipc/mach_msg.c: Likewise
* ipc/mach_port.c: Likewise
* kern/exception.c: Likewise
* kern/ipc_mig.c: Likewise
Message-Id: <20230116105857.240210-8-luca@orpolo.org>
|
|
|
|
|
|
|
|
|
|
| |
* device/device_emul.h: write/writev: update trap argument types
* device/ds_routines.c: update argument types and adjust copyin
* device/ds_routines.h: write/writev: update trap argument type
* include/device/device_types.h: add rpc_io_buf_vec_t type
* kern/ipc_mig.c: write/writev: update trap argument type
* kern/ipc_mig.h: Likewise
Message-Id: <20230116105857.240210-5-luca@orpolo.org>
|
|
|
|
|
|
|
|
|
| |
* include/mach/mach_types.h: use mach port names
* kern/ipc_mig.c: update vm types and use copyin/copyout helpers
* kern/ipc_mig.h: Likewise
Signed-off-by: Luca Dariz <luca@orpolo.org>
Message-Id: <20230116105857.240210-4-luca@orpolo.org>
|
|
|
|
|
|
|
|
|
|
|
| |
* include/mach/message.h: use mach_msg_user_header_t only in KERNEL,
and define it as mach_msh_header_t for user space
* ipc/ipc_kmsg.c: use mach_msg_user_header_t where appropriate
* ipc/ipc_kmsg.h: Likewise
* ipc/mach_msg.c: Likewise
* ipc/mach_msg.h: Likewise
* kern/thread.h: Likewise
Message-Id: <20230116105857.240210-2-luca@orpolo.org>
|
|
|
|
|
| |
stack_statistics, swapin_thread_continue, and memory_object_lock_page are
not used outside their module.
|
|
|
|
|
|
|
| |
* ipc/ipc_kmsg.c: drop useless cast.
* ipc/ipc_port.c: upcast rpc_vm_offset_t to full vm_offset_t
* kern/pc_sample.c: Likewise
Message-Id: <20230116130426.246584-4-luca@orpolo.org>
|
|
|
|
|
|
|
| |
* kern/syscall_sw.h: add missing include
Signed-off-by: Luca Dariz <luca@orpolo.org>
Message-Id: <20230116130426.246584-2-luca@orpolo.org>
|
|
|
|
|
|
|
|
| |
We use __builtin_ffs instead of ffs. strrchr is not used.
Also removed the commented out memset implementation since it is
implemented in arch-specific code.
Message-Id: <Y8NOXbVzhBJknR29@mercury.tail36e24.ts.net>
|
|
|
|
|
|
|
| |
mach4.defs and mach_host.defs.
Also move more mach_debug rpcs to kern/mach_debug.h.
Message-Id: <Y7+LPMLOafUQrNHZ@jupiter.tail36e24.ts.net>
|
|
|
|
|
|
|
| |
Declared RPCs in ipc/mach_port.c and ddb/db_ext_symtab.c in their corresponding headers.
Ideally these should be used by mig instead of mig declaring its own
prototypes.
Message-Id: <Y7z/BQhmsBbRgxhe@jupiter.tail36e24.ts.net>
|