mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 16:31:13 +00:00
30f2d516ba
squashfs tool is finally reborn and correctly maintained. Introduce the new version as a replacement for squasfs4kit as it was a fork and also abandoned. Add additional patch to add the missing feature present in squashfskit4 but still missing on this new project. Backport each required patch that fix compilation error on macos. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
93 lines
2.2 KiB
Diff
93 lines
2.2 KiB
Diff
From bc8e655a420d2f62bb0597947e96dce7b4d3fb36 Mon Sep 17 00:00:00 2001
|
|
From: Wessel Dankers <wsl@fruit.je>
|
|
Date: Sun, 30 Oct 2022 19:29:28 +0100
|
|
Subject: [PATCH] Only use available CPUs
|
|
|
|
Not all online CPUs may be available for the current process,
|
|
especially when CPU affinity is involved. In such cases too many
|
|
threads will be created, which will then compete unnecessarily
|
|
for CPU time.
|
|
|
|
Use sched_getaffinity() to determine the correct number of threads
|
|
to create.
|
|
---
|
|
squashfs-tools/mksquashfs.c | 16 ++++++++++++----
|
|
squashfs-tools/unsquashfs.c | 13 ++++++++++---
|
|
2 files changed, 22 insertions(+), 7 deletions(-)
|
|
|
|
--- a/squashfs-tools/mksquashfs.c
|
|
+++ b/squashfs-tools/mksquashfs.c
|
|
@@ -52,7 +52,9 @@
|
|
#include <ctype.h>
|
|
#include <sys/sysinfo.h>
|
|
|
|
-#ifndef linux
|
|
+#ifdef linux
|
|
+#include <sched.h>
|
|
+#else
|
|
#include <sys/sysctl.h>
|
|
#endif
|
|
|
|
@@ -5079,7 +5081,15 @@ static void initialise_threads(int readq
|
|
BAD_ERROR("Failed to set signal mask in intialise_threads\n");
|
|
|
|
if(processors == -1) {
|
|
-#ifndef linux
|
|
+#ifdef linux
|
|
+ cpu_set_t cpu_set;
|
|
+ CPU_ZERO(&cpu_set);
|
|
+
|
|
+ if(sched_getaffinity(0, sizeof cpu_set, &cpu_set) == -1)
|
|
+ processors = sysconf(_SC_NPROCESSORS_ONLN);
|
|
+ else
|
|
+ processors = CPU_COUNT(&cpu_set);
|
|
+#else
|
|
int mib[2];
|
|
size_t len = sizeof(processors);
|
|
|
|
@@ -5096,8 +5106,6 @@ static void initialise_threads(int readq
|
|
ERROR_EXIT(" Defaulting to 1\n");
|
|
processors = 1;
|
|
}
|
|
-#else
|
|
- processors = sysconf(_SC_NPROCESSORS_ONLN);
|
|
#endif
|
|
}
|
|
|
|
--- a/squashfs-tools/unsquashfs.c
|
|
+++ b/squashfs-tools/unsquashfs.c
|
|
@@ -33,6 +33,7 @@
|
|
#include "fnmatch_compat.h"
|
|
|
|
#ifdef __linux__
|
|
+#include <sched.h>
|
|
#include <sys/sysinfo.h>
|
|
#include <sys/sysmacros.h>
|
|
#elif defined __FreeBSD__
|
|
@@ -2719,7 +2720,15 @@ void initialise_threads(int fragment_buf
|
|
}
|
|
|
|
if(processors == -1) {
|
|
-#ifndef linux
|
|
+#ifdef linux
|
|
+ cpu_set_t cpu_set;
|
|
+ CPU_ZERO(&cpu_set);
|
|
+
|
|
+ if(sched_getaffinity(0, sizeof cpu_set, &cpu_set) == -1)
|
|
+ processors = sysconf(_SC_NPROCESSORS_ONLN);
|
|
+ else
|
|
+ processors = CPU_COUNT(&cpu_set);
|
|
+#else
|
|
int mib[2];
|
|
size_t len = sizeof(processors);
|
|
|
|
@@ -2735,8 +2744,6 @@ void initialise_threads(int fragment_buf
|
|
"Defaulting to 1\n");
|
|
processors = 1;
|
|
}
|
|
-#else
|
|
- processors = sysconf(_SC_NPROCESSORS_ONLN);
|
|
#endif
|
|
}
|
|
|