ladybird/Kernel/Syscalls/sysconf.cpp
Daniel Bertalan fcdd202741 Kernel: Return the actual number of CPU cores that we have
... instead of returning the maximum number of Processor objects that we
can allocate.

Some ports (e.g. gdb) rely on this information to determine the number
of worker threads to spawn. When gdb spawned 64 threads, the kernel
could not cope with generating backtraces for it, which prevented us
from debugging it properly.

This commit also removes the confusingly named
`Processor::processor_count` function so that this mistake can't happen
again.
2021-12-29 03:17:41 -08:00

41 lines
1,020 B
C++

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/FileSystem/VirtualFileSystem.h>
#include <Kernel/Process.h>
#include <Kernel/Time/TimeManagement.h>
namespace Kernel {
ErrorOr<FlatPtr> Process::sys$sysconf(int name)
{
VERIFY_NO_PROCESS_BIG_LOCK(this)
switch (name) {
case _SC_MONOTONIC_CLOCK:
return 1;
case _SC_NPROCESSORS_CONF:
case _SC_NPROCESSORS_ONLN:
return Processor::count();
case _SC_OPEN_MAX:
return OpenFileDescriptions::max_open();
case _SC_PAGESIZE:
return PAGE_SIZE;
case _SC_HOST_NAME_MAX:
return HOST_NAME_MAX;
case _SC_TTY_NAME_MAX:
return TTY_NAME_MAX;
case _SC_GETPW_R_SIZE_MAX:
return 4096; // idk
case _SC_CLK_TCK:
return TimeManagement::the().ticks_per_second();
case _SC_SYMLOOP_MAX:
return Kernel::VirtualFileSystem::symlink_recursion_limit;
default:
return EINVAL;
}
}
}