| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Without a tree, we can still look up by hand in the buffers. This
also allows to find freed objects.
|
|
|
|
| |
This is convenient when tracking buffer overflows
|
|
|
|
|
|
| |
This fixes a page fault when the sampling occurs in MP.
Perhaps it is not MP safe yet.
Message-Id: <20230930063032.75232-4-damien@zamaudio.com>
|
|
|
|
| |
Message-Id: <20230929045936.31535-1-damien@zamaudio.com>
|
|
|
|
| |
Message-Id: <20230925002417.467022-1-damien@zamaudio.com>
|
|
|
|
|
| |
We cannot access cpu_id_lut from the initial AP state, so update the
percpu segment after loading gdt.
|
|
|
|
|
| |
TESTED: As per previous commit
Message-Id: <20230924052824.449219-4-damien@zamaudio.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This speeds up smp again, by storing the struct processor
in a percpu area and avoiding an expensive cpu_number every call
of current_processor(), as well as getting the cpu_number by
an offset into the percpu area. Untested on 64 bit
and work remains to use other percpu arrays.
TESTED: (NCPUS=8) -smp 1 boots to login shell ~2x slower than uniprocessor
TESTED: (NCPUS=8) -smp 2 boots to INIT but hangs there
TESTED: (NCPUS=8) -smp 4 gets stuck seemingly within rumpdisk and hangs
TESTED: (NCPUS=1) uniprocessor is a bit faster than normal
Message-Id: <20230924103428.455966-3-damien@zamaudio.com>
|
|
|
|
|
|
| |
TESTED: on uniprocessor and smp, both behaved as normal.
Message-Id: <20230924103428.455966-2-damien@zamaudio.com>
|
|
|
|
| |
Message-Id: <20230816014835.2322718-6-damien@zamaudio.com>
|
| |
|
|
|
|
| |
Message-Id: <20230816014835.2322718-5-damien@zamaudio.com>
|
|
|
|
|
| |
In case there is no slab for PAGE_SIZE allocations, we can use direct
physical allocation rather than consuming the kernel virtual space.
|
|
|
|
|
| |
Checking the range of addresses for operations on the kernel_pmap is
quite cheap, and allows to catch oddities quite early enough.
|
| |
|
|
|
|
|
| |
That would be refused by kmem_cache_compute_properties later on anyway,
and prevent the kernel from booting at all.
|
| |
|
|
|
|
| |
Message-Id: <20230811083424.2154350-3-damien@zamaudio.com>
|
| |
|
|
|
|
| |
by using simple_lock_irq.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
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>
|