LibC+Kernel: Start implementing sysconf

For now, only the non-standard _SC_NPROCESSORS_CONF and
_SC_NPROCESSORS_ONLN are implemented.

Use them to make ninja pick a better default -j value.
While here, make the ninja package script not fail if
no other port has been built yet.
This commit is contained in:
Nico Weber 2020-07-14 16:41:59 -04:00 committed by Andreas Kling
parent 782cd93c01
commit 4eb967b5eb
Notes: sideshowbarker 2024-07-19 04:49:35 +09:00
9 changed files with 34 additions and 14 deletions

View file

@ -191,7 +191,8 @@ namespace Kernel {
__ENUMERATE_SYSCALL(ptrace) \
__ENUMERATE_SYSCALL(minherit) \
__ENUMERATE_SYSCALL(sendfd) \
__ENUMERATE_SYSCALL(recvfd)
__ENUMERATE_SYSCALL(recvfd) \
__ENUMERATE_SYSCALL(sysconf)
namespace Syscall {

View file

@ -744,6 +744,8 @@ public:
static Processor& by_id(u32 cpu);
static size_t processor_count() { return processors().size(); }
template<typename Callback>
static inline IterationDecision for_each(Callback callback)
{

View file

@ -5308,4 +5308,15 @@ int Process::sys$recvfd(int sockfd)
m_fds[new_fd].set(*received_descriptor_or_error.value(), 0);
return new_fd;
}
long Process::sys$sysconf(int name)
{
switch (name) {
case _SC_NPROCESSORS_CONF:
case _SC_NPROCESSORS_ONLN:
return Processor::processor_count();
default:
return -EINVAL;
}
}
}

View file

@ -327,6 +327,7 @@ public:
int sys$ptrace(const Syscall::SC_ptrace_params*);
int sys$sendfd(int sockfd, int fd);
int sys$recvfd(int sockfd);
long sys$sysconf(int name);
template<bool sockname, typename Params>
int get_sock_or_peer_name(const Params&);

View file

@ -55,6 +55,11 @@
#define MS_RDONLY (1 << 4)
#define MS_REMOUNT (1 << 5)
enum {
_SC_NPROCESSORS_CONF,
_SC_NPROCESSORS_ONLN,
};
#define PERF_EVENT_MALLOC 1
#define PERF_EVENT_FREE 2

View file

@ -722,4 +722,10 @@ char* getpass(const char* prompt)
dbg() << "FIXME: getpass(\"" << prompt << "\")";
ASSERT_NOT_REACHED();
}
long sysconf(int name)
{
int rc = syscall(SC_sysconf, name);
__RETURN_WITH_ERRNO(rc, rc, -1);
}
}

View file

@ -172,4 +172,10 @@ enum {
#define _POSIX_PRIORITY_SCHEDULING
#define _POSIX_VDISABLE '\0'
enum {
_SC_NPROCESSORS_CONF,
_SC_NPROCESSORS_ONLN,
};
long sysconf(int name);
__END_DECLS

View file

@ -13,5 +13,6 @@ build() {
}
install() {
mkdir -p "${SERENITY_ROOT}/Build/Root/usr/local/bin"
cp "${workdir}/ninja" "${SERENITY_ROOT}/Build/Root/usr/local/bin/ninja"
}

View file

@ -1,13 +0,0 @@
diff --git a/src/util.cc b/src/util.cc
index ae94d34..72cf501 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -476,7 +476,7 @@ int GetProcessorCount() {
GetNativeSystemInfo(&info);
return info.dwNumberOfProcessors;
#else
- return sysconf(_SC_NPROCESSORS_ONLN);
+ return 1; // FIXME: serenity way of saying sysconf(_SC_NPROCESSORS_ONLN);
#endif
}