import util-linux-2.32.1-26.el8
This commit is contained in:
parent
abd54c6e0b
commit
d4100875c3
@ -0,0 +1,46 @@
|
||||
From f575b6e0857087f46d54f494d9a435af715ea19d Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Thu, 1 Oct 2020 10:40:27 +0200
|
||||
Subject: [PATCH 43/55] chrt: use SCHED_FLAG_RESET_ON_FORK for sched_setattr()
|
||||
|
||||
Reviewed by many people, used for years (but probably nobody uses
|
||||
SCHED_DEADLINE with reset-on-fork), but we all missed:
|
||||
|
||||
- sched_setscheduler() uses SCHED_RESET_ON_FORK (0x40000000)
|
||||
- sched_setattr() uses SCHED_FLAG_RESET_ON_FORK (0x01)
|
||||
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1884194
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
schedutils/chrt.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/schedutils/chrt.c b/schedutils/chrt.c
|
||||
index b08c78ed8..15556bbad 100644
|
||||
--- a/schedutils/chrt.c
|
||||
+++ b/schedutils/chrt.c
|
||||
@@ -123,7 +123,7 @@ struct chrt_ctl {
|
||||
uint64_t period;
|
||||
|
||||
unsigned int all_tasks : 1, /* all threads of the PID */
|
||||
- reset_on_fork : 1, /* SCHED_RESET_ON_FORK */
|
||||
+ reset_on_fork : 1, /* SCHED_RESET_ON_FORK or SCHED_FLAG_RESET_ON_FORK */
|
||||
altered : 1, /* sched_set**() used */
|
||||
verbose : 1; /* verbose output */
|
||||
};
|
||||
@@ -376,9 +376,10 @@ static int set_sched_one(struct chrt_ctl *ctl, pid_t pid)
|
||||
sa.sched_period = ctl->period;
|
||||
sa.sched_deadline = ctl->deadline;
|
||||
|
||||
-# ifdef SCHED_RESET_ON_FORK
|
||||
+# ifdef SCHED_FLAG_RESET_ON_FORK
|
||||
+ /* Don't use SCHED_RESET_ON_FORK for sched_setattr()! */
|
||||
if (ctl->reset_on_fork)
|
||||
- sa.sched_flags |= SCHED_RESET_ON_FORK;
|
||||
+ sa.sched_flags |= SCHED_FLAG_RESET_ON_FORK;
|
||||
# endif
|
||||
errno = 0;
|
||||
return sched_setattr(pid, &sa, 0);
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,146 @@
|
||||
From c4caa5b973f9cdb4c43edea3c32cda62cdf15b3b Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Thu, 1 Oct 2020 11:20:01 +0200
|
||||
Subject: [PATCH 44/55] chrt: don't restrict --reset-on-fork, add more info to
|
||||
man page
|
||||
|
||||
The flag works (= kernel accepts it) for all scheduling policies
|
||||
and sched_getattr() returns the flag for all policies.
|
||||
|
||||
There is no reason for userspace to be more smart than kernel or hide
|
||||
the flag when it prints sched_getattr()/sched_getscheduler() results.
|
||||
|
||||
# chrt -v --reset-on-fork --batch 0 /bin/true
|
||||
pid 1315019's new scheduling policy: SCHED_BATCH|SCHED_RESET_ON_FORK
|
||||
|
||||
# chrt -v --reset-on-fork --fifo 1 /bin/true
|
||||
pid 1315055's new scheduling policy: SCHED_FIFO|SCHED_RESET_ON_FORK
|
||||
|
||||
# chrt -v --reset-on-fork --deadline --sched-period 10000 0 /bin/true
|
||||
pid 1315182's new scheduling policy: SCHED_DEADLINE|SCHED_RESET_ON_FORK
|
||||
|
||||
# chrt -v --reset-on-fork --idle 0 /bin/true
|
||||
pid 1315247's new scheduling policy: SCHED_IDLE|SCHED_RESET_ON_FORK
|
||||
|
||||
# chrt -v --reset-on-fork --rr 1 /bin/true
|
||||
pid 1315275's new scheduling policy: SCHED_RR|SCHED_RESET_ON_FORK
|
||||
|
||||
# chrt -v --reset-on-fork --other 0 /bin/true
|
||||
pid 1315311's new scheduling policy: SCHED_OTHER|SCHED_RESET_ON_FORK
|
||||
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1884194
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
schedutils/chrt.1 | 32 ++++++++++++++++++++++++++++----
|
||||
schedutils/chrt.c | 18 +++++-------------
|
||||
2 files changed, 33 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/schedutils/chrt.1 b/schedutils/chrt.1
|
||||
index 4b8b1e9da..a9adfb316 100644
|
||||
--- a/schedutils/chrt.1
|
||||
+++ b/schedutils/chrt.1
|
||||
@@ -92,13 +92,37 @@ Specifies period parameter for SCHED_DEADLINE policy (Linux-specific).
|
||||
Specifies deadline parameter for SCHED_DEADLINE policy (Linux-specific).
|
||||
.TP
|
||||
\fB\-R\fR, \fB\-\-reset-on-fork\fR
|
||||
-Add
|
||||
+Use
|
||||
.B SCHED_RESET_ON_FORK
|
||||
-flag to the
|
||||
+or
|
||||
+.B SCHED_FLAG_RESET_ON_FORK
|
||||
+flag. Linux-specific, supported since 2.6.31.
|
||||
+
|
||||
+Each thread has a reset-on-fork scheduling flag. When this flag is set, children created by
|
||||
+.BR fork (2)
|
||||
+do not inherit privileged scheduling policies. After the reset-on-fork flag has been enabled,
|
||||
+it can be reset only if the thread has the
|
||||
+.BR CAP_SYS_NICE
|
||||
+capability. This flag is disabled in child processes created by
|
||||
+.BR fork (2).
|
||||
+
|
||||
+More precisely, if the reset-on-fork flag is set,
|
||||
+the following rules apply for subsequently created children:
|
||||
+.RS
|
||||
+.IP * 3
|
||||
+If the calling thread has a scheduling policy of
|
||||
.B SCHED_FIFO
|
||||
or
|
||||
-.B SCHED_RR
|
||||
-scheduling policy (Linux-specific, supported since 2.6.31).
|
||||
+.BR SCHED_RR ,
|
||||
+the policy is reset to
|
||||
+.BR SCHED_OTHER
|
||||
+in child processes.
|
||||
+.IP *
|
||||
+If the calling process has a negative nice value,
|
||||
+the nice value is reset to zero in child processes.
|
||||
+.RE
|
||||
+
|
||||
+
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
diff --git a/schedutils/chrt.c b/schedutils/chrt.c
|
||||
index 15556bbad..2a6f1e151 100644
|
||||
--- a/schedutils/chrt.c
|
||||
+++ b/schedutils/chrt.c
|
||||
@@ -152,7 +152,7 @@ static void __attribute__((__noreturn__)) usage(void)
|
||||
|
||||
fputs(USAGE_SEPARATOR, out);
|
||||
fputs(_("Scheduling options:\n"), out);
|
||||
- fputs(_(" -R, --reset-on-fork set SCHED_RESET_ON_FORK for FIFO or RR\n"), out);
|
||||
+ fputs(_(" -R, --reset-on-fork set reset-on-fork flag\n"), out);
|
||||
fputs(_(" -T, --sched-runtime <ns> runtime parameter for DEADLINE\n"), out);
|
||||
fputs(_(" -P, --sched-period <ns> period parameter for DEADLINE\n"), out);
|
||||
fputs(_(" -D, --sched-deadline <ns> deadline parameter for DEADLINE\n"), out);
|
||||
@@ -173,22 +173,19 @@ static void __attribute__((__noreturn__)) usage(void)
|
||||
|
||||
static const char *get_policy_name(int policy)
|
||||
{
|
||||
+#ifdef SCHED_RESET_ON_FORK
|
||||
+ policy &= ~SCHED_RESET_ON_FORK;
|
||||
+#endif
|
||||
switch (policy) {
|
||||
case SCHED_OTHER:
|
||||
return "SCHED_OTHER";
|
||||
case SCHED_FIFO:
|
||||
-#ifdef SCHED_RESET_ON_FORK
|
||||
- case SCHED_FIFO | SCHED_RESET_ON_FORK:
|
||||
-#endif
|
||||
return "SCHED_FIFO";
|
||||
#ifdef SCHED_IDLE
|
||||
case SCHED_IDLE:
|
||||
return "SCHED_IDLE";
|
||||
#endif
|
||||
case SCHED_RR:
|
||||
-#ifdef SCHED_RESET_ON_FORK
|
||||
- case SCHED_RR | SCHED_RESET_ON_FORK:
|
||||
-#endif
|
||||
return "SCHED_RR";
|
||||
#ifdef SCHED_BATCH
|
||||
case SCHED_BATCH:
|
||||
@@ -257,7 +254,7 @@ fallback:
|
||||
else
|
||||
prio = sp.sched_priority;
|
||||
# ifdef SCHED_RESET_ON_FORK
|
||||
- if (policy == (SCHED_FIFO|SCHED_RESET_ON_FORK) || policy == (SCHED_BATCH|SCHED_RESET_ON_FORK))
|
||||
+ if (policy & SCHED_RESET_ON_FORK)
|
||||
reset_on_fork = 1;
|
||||
# endif
|
||||
}
|
||||
@@ -515,11 +512,6 @@ int main(int argc, char **argv)
|
||||
errno = 0;
|
||||
ctl->priority = strtos32_or_err(argv[optind], _("invalid priority argument"));
|
||||
|
||||
-#ifdef SCHED_RESET_ON_FORK
|
||||
- if (ctl->reset_on_fork && ctl->policy != SCHED_FIFO && ctl->policy != SCHED_RR)
|
||||
- errx(EXIT_FAILURE, _("--reset-on-fork option is supported for "
|
||||
- "SCHED_FIFO and SCHED_RR policies only"));
|
||||
-#endif
|
||||
#ifdef SCHED_DEADLINE
|
||||
if ((ctl->runtime || ctl->deadline || ctl->period) && ctl->policy != SCHED_DEADLINE)
|
||||
errx(EXIT_FAILURE, _("--sched-{runtime,deadline,period} options "
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 8704fa57c3b93152df6c10fd6a35ebdd59e1a5b7 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Wu <peter@lekensteyn.nl>
|
||||
Date: Fri, 1 Feb 2019 15:40:53 +0100
|
||||
Subject: [PATCH 45/55] mount.8: clarify (no)suid behavior on file capabilities
|
||||
|
||||
Clarify that the nosuid option also affects file capabilities and that
|
||||
it only limits execution of programs. (setgid on directories still
|
||||
inherit the group regardless of the nosuid option.) The new text is
|
||||
taken from the mount(2) manual page from the man-pages project.
|
||||
|
||||
Addresses: https://github.com/karelzak/util-linux/issues/482
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1855759
|
||||
Signed-off-by: Peter Wu <peter@lekensteyn.nl>
|
||||
---
|
||||
sys-utils/mount.8 | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/mount.8 b/sys-utils/mount.8
|
||||
index 1cc792979..a4d7de2c0 100644
|
||||
--- a/sys-utils/mount.8
|
||||
+++ b/sys-utils/mount.8
|
||||
@@ -1107,12 +1107,12 @@ or
|
||||
Do not use the lazytime feature.
|
||||
.TP
|
||||
.B suid
|
||||
-Allow set-user-ID or set-group-ID bits to take
|
||||
-effect.
|
||||
+Honor set-user-ID and set-group-ID bits or file capabilities when
|
||||
+executing programs from this filesystem.
|
||||
.TP
|
||||
.B nosuid
|
||||
-Do not allow set-user-ID or set-group-ID bits to take
|
||||
-effect.
|
||||
+Do not honor set-user-ID and set-group-ID bits or file capabilities when
|
||||
+executing programs from this filesystem.
|
||||
.TP
|
||||
.B silent
|
||||
Turn on the silent flag.
|
||||
--
|
||||
2.29.2
|
||||
|
59
SOURCES/0046-lsblk-Fall-back-to-ID_SERIAL.patch
Normal file
59
SOURCES/0046-lsblk-Fall-back-to-ID_SERIAL.patch
Normal file
@ -0,0 +1,59 @@
|
||||
From afe6545483a881ccde41dcaa6718c71c74b38d7b Mon Sep 17 00:00:00 2001
|
||||
From: Sven Wiltink <swiltink@transip.nl>
|
||||
Date: Fri, 1 May 2020 16:35:40 +0200
|
||||
Subject: [PATCH 46/55] lsblk: Fall back to ID_SERIAL
|
||||
|
||||
In some cases ID_SERIAL_SHORT isn't provided by libudev, but ID_SERIAL
|
||||
is. An example of this are virtio devices. See the output of udevadm
|
||||
info:
|
||||
P: /devices/pci0000:00/0000:00:06.0/virtio2/block/vdb
|
||||
N: vdb
|
||||
S: disk/by-id/virtio-08491434ee711d3420e9
|
||||
S: disk/by-path/pci-0000:00:06.0
|
||||
S: disk/by-path/virtio-pci-0000:00:06.0
|
||||
E: DEVLINKS=/dev/disk/by-id/virtio-08491434ee711d3420e9 /dev/disk/by-path/pci-0000:00:06.0 /dev/disk/by-path/virtio-pci-0000:00:06.0
|
||||
E: DEVNAME=/dev/vdb
|
||||
E: DEVPATH=/devices/pci0000:00/0000:00:06.0/virtio2/block/vdb
|
||||
E: DEVTYPE=disk
|
||||
E: ID_PATH=pci-0000:00:06.0
|
||||
E: ID_PATH_TAG=pci-0000_00_06_0
|
||||
E: ID_SERIAL=08491434ee711d3420e9
|
||||
E: MAJOR=252
|
||||
E: MINOR=16
|
||||
E: SUBSYSTEM=block
|
||||
E: TAGS=:systemd:
|
||||
E: USEC_INITIALIZED=1403804
|
||||
|
||||
[RHEL-8 backport: add ID_SERIAL and also ID_SCSI_SERIAL to be compatible with upstream]
|
||||
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1861670
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/e81d0f80068086147434fa947a4f723c00318772
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/de6c2a4aec140e6086e278688d97f4655ced1a9a
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
misc-utils/lsblk.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
|
||||
index ae97f9f05..d0369d3e7 100644
|
||||
--- a/misc-utils/lsblk.c
|
||||
+++ b/misc-utils/lsblk.c
|
||||
@@ -567,8 +567,14 @@ static int get_udev_properties(struct blkdev_cxt *cxt)
|
||||
if (data)
|
||||
cxt->wwn = xstrdup(data);
|
||||
|
||||
- if ((data = udev_device_get_property_value(dev, "ID_SERIAL_SHORT")))
|
||||
+ data = udev_device_get_property_value(dev, "ID_SCSI_SERIAL");
|
||||
+ if (!data)
|
||||
+ data = udev_device_get_property_value(dev, "ID_SERIAL_SHORT");
|
||||
+ if (!data)
|
||||
+ data = udev_device_get_property_value(dev, "ID_SERIAL");
|
||||
+ if (data)
|
||||
cxt->serial = xstrdup(data);
|
||||
+
|
||||
udev_device_unref(dev);
|
||||
cxt->probed = 1;
|
||||
DBG(DEV, ul_debugobj(cxt, "%s: found udev properties", cxt->name));
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 4ac8e70822313b0c6b35ebf633c6e8fbca558998 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Abraham <tabraham@suse.com>
|
||||
Date: Thu, 24 Sep 2020 14:52:33 -0400
|
||||
Subject: [PATCH 47/55] lscpu: avoid segfault on PowerPC systems with valid
|
||||
hardware configurations
|
||||
|
||||
ntypes greater than 1 is valid in some hardware configurations, and an assert()
|
||||
on the value isn't necessary or very future proof
|
||||
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1883783
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/cbe3304bc43b3fceb06fb6e5dd822bb59abf1b84
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
sys-utils/lscpu.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
|
||||
index 1aa7bff4d..748d545b6 100644
|
||||
--- a/sys-utils/lscpu.c
|
||||
+++ b/sys-utils/lscpu.c
|
||||
@@ -369,8 +369,6 @@ static void read_physical_info_powerpc(struct lscpu_desc *desc)
|
||||
return;
|
||||
|
||||
ntypes = strbe16toh(buf, 2);
|
||||
-
|
||||
- assert(ntypes <= 1);
|
||||
if (!ntypes)
|
||||
return;
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,33 @@
|
||||
From b3c5c1f39db58b057bb581f1d3bebcbeedeee1cb Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Mon, 17 Sep 2018 11:58:50 +0200
|
||||
Subject: [PATCH 48/55] libfdisk: count gaps to possible size when resize
|
||||
|
||||
The current code counts only partition sizes when it counts possible
|
||||
space, but we have gaps between the partitions. It seems better to
|
||||
count all based on offsets rather than sizes.
|
||||
|
||||
Addresses: https://github.com/karelzak/util-linux/issues/693
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/2f35c1ead621f42f32f7777232568cb03185b473
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1900498
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
libfdisk/src/partition.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c
|
||||
index a790dc9c9..ebcf6bf5c 100644
|
||||
--- a/libfdisk/src/partition.c
|
||||
+++ b/libfdisk/src/partition.c
|
||||
@@ -1113,7 +1113,7 @@ static int resize_get_last_possible(
|
||||
break;
|
||||
} else {
|
||||
last = pa;
|
||||
- *maxsz += pa->size;
|
||||
+ *maxsz = pa->size - (start - pa->start);
|
||||
DBG(TAB, ul_debugobj(tb, " new max=%ju (last updated)", (uintmax_t) *maxsz));
|
||||
}
|
||||
}
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,116 @@
|
||||
From 780f79420073e0c09cd41afea28ac217a6d4ef29 Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Fri, 26 Jun 2020 12:59:32 +0200
|
||||
Subject: [PATCH 49/55] libmount: (parser) fix memory leak on error before
|
||||
end-of-file
|
||||
|
||||
Let's simplify the loop where we add FS to the table. The optimization
|
||||
for recoverable errors is a fragile overkill. The new code always
|
||||
allocates and unrefs FS for each loop.
|
||||
|
||||
Addresses: https://github.com/karelzak/util-linux/pull/1068
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1900498
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/fe0d12d4f82269096f8d0cffc51ca9590814c284
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
libmount/src/fs.c | 2 +-
|
||||
libmount/src/tab_parse.c | 49 ++++++++++++++++++++++------------------
|
||||
2 files changed, 28 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/libmount/src/fs.c b/libmount/src/fs.c
|
||||
index def32253c..aae4961c3 100644
|
||||
--- a/libmount/src/fs.c
|
||||
+++ b/libmount/src/fs.c
|
||||
@@ -34,7 +34,7 @@ struct libmnt_fs *mnt_new_fs(void)
|
||||
|
||||
fs->refcount = 1;
|
||||
INIT_LIST_HEAD(&fs->ents);
|
||||
- /*DBG(FS, ul_debugobj(fs, "alloc"));*/
|
||||
+ DBG(FS, ul_debugobj(fs, "alloc"));
|
||||
return fs;
|
||||
}
|
||||
|
||||
diff --git a/libmount/src/tab_parse.c b/libmount/src/tab_parse.c
|
||||
index 10fc68279..719c1abca 100644
|
||||
--- a/libmount/src/tab_parse.c
|
||||
+++ b/libmount/src/tab_parse.c
|
||||
@@ -608,7 +608,6 @@ static int __table_parse_stream(struct libmnt_table *tb, FILE *f, const char *fi
|
||||
int rc = -1;
|
||||
int flags = 0;
|
||||
pid_t tid = -1;
|
||||
- struct libmnt_fs *fs = NULL;
|
||||
struct libmnt_parser pa = { .line = 0 };
|
||||
|
||||
assert(tb);
|
||||
@@ -628,19 +627,25 @@ static int __table_parse_stream(struct libmnt_table *tb, FILE *f, const char *fi
|
||||
if (filename && strcmp(filename, _PATH_PROC_MOUNTS) == 0)
|
||||
flags = MNT_FS_KERNEL;
|
||||
|
||||
- while (!feof(f)) {
|
||||
- if (!fs) {
|
||||
- fs = mnt_new_fs();
|
||||
- if (!fs)
|
||||
- goto err;
|
||||
+ do {
|
||||
+ struct libmnt_fs *fs;
|
||||
+
|
||||
+ if (feof(f)) {
|
||||
+ DBG(TAB, ul_debugobj(tb, "end-of-file"));
|
||||
+ break;
|
||||
}
|
||||
+ fs = mnt_new_fs();
|
||||
+ if (!fs)
|
||||
+ goto err;
|
||||
|
||||
+ /* parse */
|
||||
rc = mnt_table_parse_next(&pa, tb, fs);
|
||||
|
||||
- if (!rc && tb->fltrcb && tb->fltrcb(fs, tb->fltrcb_data))
|
||||
- rc = 1; /* filtered out by callback... */
|
||||
+ if (rc != 0 && tb->fltrcb && tb->fltrcb(fs, tb->fltrcb_data))
|
||||
+ rc = 1; /* error filtered out by callback... */
|
||||
|
||||
- if (!rc) {
|
||||
+ /* add to the table */
|
||||
+ if (rc == 0) {
|
||||
rc = mnt_table_add_fs(tb, fs);
|
||||
fs->flags |= flags;
|
||||
|
||||
@@ -651,21 +656,21 @@ static int __table_parse_stream(struct libmnt_table *tb, FILE *f, const char *fi
|
||||
}
|
||||
}
|
||||
|
||||
- if (rc) {
|
||||
- if (rc > 0) {
|
||||
- mnt_reset_fs(fs);
|
||||
- assert(fs->refcount == 1);
|
||||
- continue; /* recoverable error, reuse fs*/
|
||||
- }
|
||||
+ /* remove refernece (or deallocate on error) */
|
||||
+ mnt_unref_fs(fs);
|
||||
|
||||
- mnt_unref_fs(fs);
|
||||
- if (feof(f))
|
||||
- break;
|
||||
- goto err; /* fatal error */
|
||||
+ /* recoverable error */
|
||||
+ if (rc > 0) {
|
||||
+ DBG(TAB, ul_debugobj(tb, "recoverable error (continue)"));
|
||||
+ continue;
|
||||
}
|
||||
- mnt_unref_fs(fs);
|
||||
- fs = NULL;
|
||||
- }
|
||||
+
|
||||
+ /* fatal errors */
|
||||
+ if (rc < 0 && !feof(f)) {
|
||||
+ DBG(TAB, ul_debugobj(tb, "fatal error"));
|
||||
+ goto err;
|
||||
+ }
|
||||
+ } while (1);
|
||||
|
||||
DBG(TAB, ul_debugobj(tb, "%s: stop parsing (%d entries)",
|
||||
filename, mnt_table_get_nents(tb)));
|
||||
--
|
||||
2.29.2
|
||||
|
104
SOURCES/0050-lscpu-update-ARM-identifiers-tables.patch
Normal file
104
SOURCES/0050-lscpu-update-ARM-identifiers-tables.patch
Normal file
@ -0,0 +1,104 @@
|
||||
From 6700a458ef1bcd8fe2c066411bc415bc43ccdb8a Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Tue, 15 Dec 2020 11:17:42 +0100
|
||||
Subject: [PATCH 50/55] lscpu: update ARM identifiers tables
|
||||
|
||||
Use the latest upstream identifiers to add FUJITSU and HiSilicon
|
||||
implementers and many new ARM CPUs.
|
||||
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/dd9b4cb32042def5b7767e26ebd294f7f52cd07f
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/a625b32e2c716723a28a49702a02c78274dd3bb6
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1883056
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
sys-utils/lscpu-arm.c | 27 ++++++++++++++++++++++++---
|
||||
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c
|
||||
index f3a746a62..2b178a72e 100644
|
||||
--- a/sys-utils/lscpu-arm.c
|
||||
+++ b/sys-utils/lscpu-arm.c
|
||||
@@ -49,7 +49,7 @@ static const struct id_part arm_part[] = {
|
||||
{ 0xc07, "Cortex-A7" },
|
||||
{ 0xc08, "Cortex-A8" },
|
||||
{ 0xc09, "Cortex-A9" },
|
||||
- { 0xc0d, "Cortex-A12" },
|
||||
+ { 0xc0d, "Cortex-A17" }, /* Originally A12 */
|
||||
{ 0xc0f, "Cortex-A15" },
|
||||
{ 0xc0e, "Cortex-A17" },
|
||||
{ 0xc14, "Cortex-R4" },
|
||||
@@ -60,19 +60,28 @@ static const struct id_part arm_part[] = {
|
||||
{ 0xc21, "Cortex-M1" },
|
||||
{ 0xc23, "Cortex-M3" },
|
||||
{ 0xc24, "Cortex-M4" },
|
||||
- { 0xc20, "Cortex-M7" },
|
||||
+ { 0xc27, "Cortex-M7" },
|
||||
{ 0xc60, "Cortex-M0+" },
|
||||
{ 0xd01, "Cortex-A32" },
|
||||
{ 0xd03, "Cortex-A53" },
|
||||
{ 0xd04, "Cortex-A35" },
|
||||
{ 0xd05, "Cortex-A55" },
|
||||
+ { 0xd06, "Cortex-A65" },
|
||||
{ 0xd07, "Cortex-A57" },
|
||||
{ 0xd08, "Cortex-A72" },
|
||||
{ 0xd09, "Cortex-A73" },
|
||||
{ 0xd0a, "Cortex-A75" },
|
||||
+ { 0xd0b, "Cortex-A76" },
|
||||
+ { 0xd0c, "Neoverse-N1" },
|
||||
+ { 0xd0d, "Cortex-A77" },
|
||||
+ { 0xd0e, "Cortex-A76AE" },
|
||||
{ 0xd13, "Cortex-R52" },
|
||||
{ 0xd20, "Cortex-M23" },
|
||||
{ 0xd21, "Cortex-M33" },
|
||||
+ { 0xd41, "Cortex-A78" },
|
||||
+ { 0xd42, "Cortex-A78AE" },
|
||||
+ { 0xd4a, "Neoverse-E1" },
|
||||
+ { 0xd4b, "Cortex-A78C" },
|
||||
{ -1, "unknown" },
|
||||
};
|
||||
|
||||
@@ -126,6 +135,7 @@ static const struct id_part samsung_part[] = {
|
||||
static const struct id_part nvidia_part[] = {
|
||||
{ 0x000, "Denver" },
|
||||
{ 0x003, "Denver 2" },
|
||||
+ { 0x004, "Carmel" },
|
||||
{ -1, "unknown" },
|
||||
};
|
||||
|
||||
@@ -167,6 +177,16 @@ static const struct id_part intel_part[] = {
|
||||
{ -1, "unknown" },
|
||||
};
|
||||
|
||||
+static const struct id_part fujitsu_part[] = {
|
||||
+ { 0x001, "A64FX" },
|
||||
+ { -1, "unknown" },
|
||||
+};
|
||||
+
|
||||
+static const struct id_part hisi_part[] = {
|
||||
+ { 0xd01, "Kunpeng-920" }, /* aka tsv110 */
|
||||
+ { -1, "unknown" },
|
||||
+};
|
||||
+
|
||||
static const struct id_part unknown_part[] = {
|
||||
{ -1, "unknown" },
|
||||
};
|
||||
@@ -182,6 +202,8 @@ static const struct hw_impl hw_implementer[] = {
|
||||
{ 0x42, brcm_part, "Broadcom" },
|
||||
{ 0x43, cavium_part, "Cavium" },
|
||||
{ 0x44, dec_part, "DEC" },
|
||||
+ { 0x46, fujitsu_part, "FUJITSU" },
|
||||
+ { 0x48, hisi_part, "HiSilicon" },
|
||||
{ 0x4e, nvidia_part, "Nvidia" },
|
||||
{ 0x50, apm_part, "APM" },
|
||||
{ 0x51, qcom_part, "Qualcomm" },
|
||||
@@ -191,7 +213,6 @@ static const struct hw_impl hw_implementer[] = {
|
||||
{ 0x69, intel_part, "Intel" },
|
||||
{ -1, unknown_part, "unknown" },
|
||||
};
|
||||
-
|
||||
void arm_cpu_decode(struct lscpu_desc *desc)
|
||||
{
|
||||
int j, impl, part;
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,214 @@
|
||||
From 63d8d3e8d54326842677bc3d3a3e43a133846a71 Mon Sep 17 00:00:00 2001
|
||||
From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Date: Tue, 15 Dec 2020 12:07:38 +0100
|
||||
Subject: [PATCH 51/55] lscpu: use cluster on aarch64 machine which doesn't
|
||||
have ACPI PPTT
|
||||
|
||||
lscpu may show the wrong number of sockets if the machine is aarch64 and
|
||||
doesn't have ACPI PPTT.
|
||||
|
||||
That's because lscpu show the number of sockets by using a sysfs entry
|
||||
(cpu/cpuX/topology/core_siblings). The sysfs entry is set by MPIDR_EL1
|
||||
register if the machine doesn't have ACPI PPTT. MPIDR_EL1 doesn't show
|
||||
the physical socket information directly. It shows the affinity level.
|
||||
|
||||
According to linux/arch/arm64/kernel/topology.c:store_cpu_topology(),
|
||||
the top level of affinity is called as 'Cluster'.
|
||||
|
||||
Use Cluster instead of Socket on the machine which doesn't have ACPI PPTT.
|
||||
|
||||
Note, ARM SBBR v1.2 requires ACPI PPTT, so this patch is needed for the
|
||||
machine which is based on SBBR v1.0 and v1.1.
|
||||
|
||||
[kzak@redhat.com: - port to old code
|
||||
- change semantic to be same as current upstream]
|
||||
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1883056
|
||||
Upstream: 73c0a766ffbe60e013b55cfd716d531b5a6ae22a
|
||||
Upstream: https://marc.info/?l=util-linux-ng&m=159984070611464&w=2
|
||||
Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
sys-utils/lscpu.1 | 3 +++
|
||||
sys-utils/lscpu.c | 65 ++++++++++++++++++++++++++++++++++++++++++-----
|
||||
sys-utils/lscpu.h | 3 +++
|
||||
3 files changed, 65 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/lscpu.1 b/sys-utils/lscpu.1
|
||||
index b70f2e151..cf981d708 100644
|
||||
--- a/sys-utils/lscpu.1
|
||||
+++ b/sys-utils/lscpu.1
|
||||
@@ -47,6 +47,9 @@ The logical core number. A core can contain several CPUs.
|
||||
.B SOCKET
|
||||
The logical socket number. A socket can contain several cores.
|
||||
.TP
|
||||
+.B CLUSTER
|
||||
+The logical cluster number. A cluster can contain several cores.
|
||||
+.TP
|
||||
.B BOOK
|
||||
The logical book number. A book can contain several sockets.
|
||||
.TP
|
||||
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
|
||||
index 748d545b6..a8b448fa0 100644
|
||||
--- a/sys-utils/lscpu.c
|
||||
+++ b/sys-utils/lscpu.c
|
||||
@@ -70,6 +70,7 @@
|
||||
#define _PATH_SYS_HYP_FEATURES "/sys/hypervisor/properties/features"
|
||||
#define _PATH_SYS_CPU _PATH_SYS_SYSTEM "/cpu"
|
||||
#define _PATH_SYS_NODE _PATH_SYS_SYSTEM "/node"
|
||||
+#define _PATH_ACPI_PPTT "/sys/firmware/acpi/tables/PPTT"
|
||||
#define _PATH_PROC_XEN "/proc/xen"
|
||||
#define _PATH_PROC_XENCAP _PATH_PROC_XEN "/capabilities"
|
||||
#define _PATH_PROC_CPUINFO "/proc/cpuinfo"
|
||||
@@ -168,6 +169,7 @@ enum {
|
||||
COL_CPU,
|
||||
COL_CORE,
|
||||
COL_SOCKET,
|
||||
+ COL_CLUSTER,
|
||||
COL_NODE,
|
||||
COL_BOOK,
|
||||
COL_DRAWER,
|
||||
@@ -194,6 +196,7 @@ static struct lscpu_coldesc coldescs[] =
|
||||
[COL_CPU] = { "CPU", N_("logical CPU number"), 1 },
|
||||
[COL_CORE] = { "CORE", N_("logical core number") },
|
||||
[COL_SOCKET] = { "SOCKET", N_("logical socket number") },
|
||||
+ [COL_CLUSTER] = { "CLUSTER", N_("logical cluster number") },
|
||||
[COL_NODE] = { "NODE", N_("logical NUMA node number") },
|
||||
[COL_BOOK] = { "BOOK", N_("logical book number") },
|
||||
[COL_DRAWER] = { "DRAWER", N_("logical drawer number") },
|
||||
@@ -383,6 +386,26 @@ static void read_physical_info_powerpc(
|
||||
}
|
||||
#endif
|
||||
|
||||
+static int is_fallback_to_cluster(struct lscpu_desc *desc)
|
||||
+{
|
||||
+ char *arch;
|
||||
+ struct stat st;
|
||||
+ struct utsname utsbuf;
|
||||
+
|
||||
+ if (desc)
|
||||
+ arch = desc->arch;
|
||||
+ else {
|
||||
+ if (uname(&utsbuf) == -1)
|
||||
+ err(EXIT_FAILURE, _("error: uname failed"));
|
||||
+ arch = utsbuf.machine;
|
||||
+ }
|
||||
+
|
||||
+ if (!(strcmp(arch, "aarch64")) && (stat(_PATH_ACPI_PPTT, &st) < 0))
|
||||
+ return 1;
|
||||
+ else
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
|
||||
static void
|
||||
read_basicinfo(struct lscpu_desc *desc, struct lscpu_modifier *mod)
|
||||
@@ -1344,6 +1367,10 @@ get_cell_data(struct lscpu_desc *desc, int idx, int col,
|
||||
snprintf(buf, bufsz, "%zu", i);
|
||||
}
|
||||
break;
|
||||
+ case COL_CLUSTER:
|
||||
+ if (!desc->is_cluster)
|
||||
+ break;
|
||||
+ /* fallthrough */
|
||||
case COL_SOCKET:
|
||||
if (mod->physical) {
|
||||
if (desc->socketids[idx] == -1)
|
||||
@@ -1799,12 +1826,18 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
|
||||
if (fd)
|
||||
fclose(fd);
|
||||
}
|
||||
+
|
||||
+
|
||||
if (desc->mtid)
|
||||
threads_per_core = atoi(desc->mtid) + 1;
|
||||
add_summary_n(tb, _("Thread(s) per core:"),
|
||||
threads_per_core ?: desc->nthreads / desc->ncores);
|
||||
- add_summary_n(tb, _("Core(s) per socket:"),
|
||||
- cores_per_socket ?: desc->ncores / desc->nsockets);
|
||||
+ if (desc->is_cluster)
|
||||
+ add_summary_n(tb, _("Core(s) per cluster:"),
|
||||
+ cores_per_socket ?: desc->ncores / desc->nsockets);
|
||||
+ else
|
||||
+ add_summary_n(tb, _("Core(s) per socket:"),
|
||||
+ cores_per_socket ?: desc->ncores / desc->nsockets);
|
||||
if (desc->nbooks) {
|
||||
add_summary_n(tb, _("Socket(s) per book:"),
|
||||
sockets_per_book ?: desc->nsockets / desc->nbooks);
|
||||
@@ -1816,7 +1849,17 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
|
||||
add_summary_n(tb, _("Book(s):"), books_per_drawer ?: desc->nbooks);
|
||||
}
|
||||
} else {
|
||||
- add_summary_n(tb, _("Socket(s):"), sockets_per_book ?: desc->nsockets);
|
||||
+ if (desc->is_cluster) {
|
||||
+ if (desc->nr_socket_on_cluster > 0)
|
||||
+ add_summary_n(tb, _("Socket(s):"), desc->nr_socket_on_cluster);
|
||||
+ else
|
||||
+ add_summary_s(tb, _("Socket(s):"), "-");
|
||||
+
|
||||
+ add_summary_n(tb, _("Cluster(s):"),
|
||||
+ sockets_per_book ?: desc->nsockets);
|
||||
+ } else
|
||||
+ add_summary_n(tb, _("Socket(s):"),
|
||||
+ sockets_per_book ?: desc->nsockets);
|
||||
}
|
||||
}
|
||||
if (desc->nnodes)
|
||||
@@ -2060,10 +2103,13 @@ int main(int argc, char *argv[])
|
||||
qsort(desc->ecaches, desc->necaches,
|
||||
sizeof(struct cpu_cache), cachecmp);
|
||||
|
||||
+ desc->is_cluster = is_fallback_to_cluster(desc);
|
||||
+
|
||||
read_nodes(desc);
|
||||
read_hypervisor(desc, mod);
|
||||
arm_cpu_decode(desc);
|
||||
|
||||
+
|
||||
switch(mod->mode) {
|
||||
case OUTPUT_SUMMARY:
|
||||
print_summary(desc, mod);
|
||||
@@ -2072,7 +2118,10 @@ int main(int argc, char *argv[])
|
||||
if (!ncolumns) {
|
||||
columns[ncolumns++] = COL_CPU;
|
||||
columns[ncolumns++] = COL_CORE;
|
||||
- columns[ncolumns++] = COL_SOCKET;
|
||||
+ if (desc->is_cluster)
|
||||
+ columns[ncolumns++] = COL_CLUSTER;
|
||||
+ else
|
||||
+ columns[ncolumns++] = COL_SOCKET;
|
||||
columns[ncolumns++] = COL_NODE;
|
||||
columns[ncolumns++] = COL_CACHE;
|
||||
mod->compat = 1;
|
||||
@@ -2089,8 +2138,12 @@ int main(int argc, char *argv[])
|
||||
columns[ncolumns++] = COL_DRAWER;
|
||||
if (desc->bookmaps)
|
||||
columns[ncolumns++] = COL_BOOK;
|
||||
- if (desc->socketmaps)
|
||||
- columns[ncolumns++] = COL_SOCKET;
|
||||
+ if (desc->socketmaps) {
|
||||
+ if (desc->is_cluster)
|
||||
+ columns[ncolumns++] = COL_CLUSTER;
|
||||
+ else
|
||||
+ columns[ncolumns++] = COL_SOCKET;
|
||||
+ }
|
||||
if (desc->coremaps)
|
||||
columns[ncolumns++] = COL_CORE;
|
||||
if (desc->caches)
|
||||
diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h
|
||||
index 3d1885a3e..bffa9df60 100644
|
||||
--- a/sys-utils/lscpu.h
|
||||
+++ b/sys-utils/lscpu.h
|
||||
@@ -158,6 +158,9 @@ struct lscpu_desc {
|
||||
int physsockets; /* Physical sockets (modules) */
|
||||
int physchips; /* Physical chips */
|
||||
int physcoresperchip; /* Physical cores per chip */
|
||||
+
|
||||
+ int is_cluster;
|
||||
+ int nr_socket_on_cluster;
|
||||
};
|
||||
|
||||
enum {
|
||||
--
|
||||
2.29.2
|
||||
|
115
SOURCES/0052-lscpu-dmi-split-to-parse-dmi-table.patch
Normal file
115
SOURCES/0052-lscpu-dmi-split-to-parse-dmi-table.patch
Normal file
@ -0,0 +1,115 @@
|
||||
From 60a1a900b22e6d714fbbde03322569ad4732b4ba Mon Sep 17 00:00:00 2001
|
||||
From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Date: Fri, 11 Sep 2020 09:53:26 -0400
|
||||
Subject: [PATCH 52/55] lscpu-dmi: split to parse dmi table
|
||||
|
||||
Split out a function to parse dmi table.
|
||||
|
||||
Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
---
|
||||
sys-utils/lscpu-dmi.c | 60 ++++++++++++++++++++++++++++---------------
|
||||
1 file changed, 40 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/lscpu-dmi.c b/sys-utils/lscpu-dmi.c
|
||||
index 29bd2e4fc..9b57fe9e6 100644
|
||||
--- a/sys-utils/lscpu-dmi.c
|
||||
+++ b/sys-utils/lscpu-dmi.c
|
||||
@@ -42,6 +42,12 @@ struct dmi_header
|
||||
uint8_t *data;
|
||||
};
|
||||
|
||||
+struct dmi_info {
|
||||
+ char *vendor;
|
||||
+ char *product;
|
||||
+ char *manufacturer;
|
||||
+};
|
||||
+
|
||||
static int checksum(const uint8_t *buf, size_t len)
|
||||
{
|
||||
uint8_t sum = 0;
|
||||
@@ -105,20 +111,13 @@ static char *dmi_string(const struct dmi_header *dm, uint8_t s)
|
||||
return bp;
|
||||
}
|
||||
|
||||
-static int hypervisor_from_dmi_table(uint32_t base, uint16_t len,
|
||||
- uint16_t num, const char *devmem)
|
||||
+static int parse_dmi_table(uint16_t len, uint16_t num,
|
||||
+ uint8_t *data,
|
||||
+ struct dmi_info *di)
|
||||
{
|
||||
- uint8_t *buf;
|
||||
- uint8_t *data;
|
||||
+ uint8_t *buf = data;
|
||||
+ int rc = -1;
|
||||
int i = 0;
|
||||
- char *vendor = NULL;
|
||||
- char *product = NULL;
|
||||
- char *manufacturer = NULL;
|
||||
- int rc = HYPER_NONE;
|
||||
-
|
||||
- data = buf = get_mem_chunk(base, len, devmem);
|
||||
- if (!buf)
|
||||
- goto done;
|
||||
|
||||
/* 4 is the length of an SMBIOS structure header */
|
||||
while (i < num && data + 4 <= buf + len) {
|
||||
@@ -142,11 +141,11 @@ static int hypervisor_from_dmi_table(uint32_t base, uint16_t len,
|
||||
next += 2;
|
||||
switch (h.type) {
|
||||
case 0:
|
||||
- vendor = dmi_string(&h, data[0x04]);
|
||||
+ di->vendor = dmi_string(&h, data[0x04]);
|
||||
break;
|
||||
case 1:
|
||||
- manufacturer = dmi_string(&h, data[0x04]);
|
||||
- product = dmi_string(&h, data[0x05]);
|
||||
+ di->manufacturer = dmi_string(&h, data[0x04]);
|
||||
+ di->product = dmi_string(&h, data[0x05]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -155,15 +154,36 @@ static int hypervisor_from_dmi_table(uint32_t base, uint16_t len,
|
||||
data = next;
|
||||
i++;
|
||||
}
|
||||
- if (manufacturer && !strcmp(manufacturer, "innotek GmbH"))
|
||||
+ rc = 0;
|
||||
+done:
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+static int hypervisor_from_dmi_table(uint32_t base, uint16_t len,
|
||||
+ uint16_t num, const char *devmem)
|
||||
+{
|
||||
+ uint8_t *data;
|
||||
+ int rc = HYPER_NONE;
|
||||
+ struct dmi_info di;
|
||||
+
|
||||
+ data = get_mem_chunk(base, len, devmem);
|
||||
+ if (!data)
|
||||
+ return rc;
|
||||
+
|
||||
+ memset(&di, 0, sizeof(struct dmi_info));
|
||||
+ rc = parse_dmi_table(len, num, data, &di);
|
||||
+ if (rc < 0)
|
||||
+ goto done;
|
||||
+
|
||||
+ if (di.manufacturer && !strcmp(di.manufacturer, "innotek GmbH"))
|
||||
rc = HYPER_INNOTEK;
|
||||
- else if (manufacturer && strstr(manufacturer, "HITACHI") &&
|
||||
- product && strstr(product, "LPAR"))
|
||||
+ else if (di.manufacturer && strstr(di.manufacturer, "HITACHI") &&
|
||||
+ di.product && strstr(di.product, "LPAR"))
|
||||
rc = HYPER_HITACHI;
|
||||
- else if (vendor && !strcmp(vendor, "Parallels"))
|
||||
+ else if (di.vendor && !strcmp(di.vendor, "Parallels"))
|
||||
rc = HYPER_PARALLELS;
|
||||
done:
|
||||
- free(buf);
|
||||
+ free(data);
|
||||
return rc;
|
||||
}
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
91
SOURCES/0053-lscpu-add-helper-to-get-physical-sockets.patch
Normal file
91
SOURCES/0053-lscpu-add-helper-to-get-physical-sockets.patch
Normal file
@ -0,0 +1,91 @@
|
||||
From 32c4fe66ae9107a7fae556be02c1401e5046071b Mon Sep 17 00:00:00 2001
|
||||
From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Date: Fri, 11 Sep 2020 09:53:27 -0400
|
||||
Subject: [PATCH 53/55] lscpu: add helper to get physical sockets
|
||||
|
||||
Add a helper function, get_number_of_physical_sockets_from_dmi(),
|
||||
to get physical sockets from DMI table in case of the sysfs for
|
||||
cpu topology doesn't have the physical socket information.
|
||||
|
||||
get_number_of_physical_sockets_from_dmi() parse the DMI table
|
||||
and counts the number of SMBIOS Processor Information (Type04)
|
||||
structure.
|
||||
|
||||
Note, ARM SBBR v1.0 and newer requires SMBIOS Processor Information
|
||||
(Type04). And ARM SBBR v1.2 requires ACPI PPTT which has physical socket
|
||||
information. So the helper function is useful for the machine base on
|
||||
SBBR v1.0 and v1.1.
|
||||
|
||||
Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
---
|
||||
sys-utils/lscpu-dmi.c | 30 ++++++++++++++++++++++++++++++
|
||||
sys-utils/lscpu.h | 1 +
|
||||
2 files changed, 31 insertions(+)
|
||||
|
||||
diff --git a/sys-utils/lscpu-dmi.c b/sys-utils/lscpu-dmi.c
|
||||
index 9b57fe9e6..31127f48a 100644
|
||||
--- a/sys-utils/lscpu-dmi.c
|
||||
+++ b/sys-utils/lscpu-dmi.c
|
||||
@@ -46,6 +46,7 @@ struct dmi_info {
|
||||
char *vendor;
|
||||
char *product;
|
||||
char *manufacturer;
|
||||
+ int sockets;
|
||||
};
|
||||
|
||||
static int checksum(const uint8_t *buf, size_t len)
|
||||
@@ -147,6 +148,9 @@ static int parse_dmi_table(uint16_t len, uint16_t num,
|
||||
di->manufacturer = dmi_string(&h, data[0x04]);
|
||||
di->product = dmi_string(&h, data[0x05]);
|
||||
break;
|
||||
+ case 4:
|
||||
+ di->sockets++;
|
||||
+ break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -323,3 +327,29 @@ done:
|
||||
free(buf);
|
||||
return rc < 0 ? HYPER_NONE : rc;
|
||||
}
|
||||
+
|
||||
+int get_number_of_physical_sockets_from_dmi(void)
|
||||
+{
|
||||
+ static char const sys_fw_dmi_tables[] = _PATH_SYS_DMI;
|
||||
+ struct dmi_info di;
|
||||
+ struct stat st;
|
||||
+ uint8_t *data;
|
||||
+ int rc = -1;
|
||||
+
|
||||
+ if (stat(sys_fw_dmi_tables, &st))
|
||||
+ return rc;
|
||||
+
|
||||
+ data = get_mem_chunk(0, st.st_size, sys_fw_dmi_tables);
|
||||
+ if (!data)
|
||||
+ return rc;
|
||||
+
|
||||
+ memset(&di, 0, sizeof(struct dmi_info));
|
||||
+ rc = parse_dmi_table(st.st_size, st.st_size/4, data, &di);
|
||||
+
|
||||
+ free(data);
|
||||
+
|
||||
+ if ((rc < 0) || !di.sockets)
|
||||
+ return rc;
|
||||
+ else
|
||||
+ return di.sockets;
|
||||
+}
|
||||
diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h
|
||||
index bffa9df60..b190afd21 100644
|
||||
--- a/sys-utils/lscpu.h
|
||||
+++ b/sys-utils/lscpu.h
|
||||
@@ -186,6 +186,7 @@ struct lscpu_modifier {
|
||||
};
|
||||
|
||||
extern int read_hypervisor_dmi(void);
|
||||
+extern int get_number_of_physical_sockets_from_dmi(void);
|
||||
extern void arm_cpu_decode(struct lscpu_desc *desc);
|
||||
|
||||
#endif /* LSCPU_H */
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,49 @@
|
||||
From 5b20e51f98798161138f0758af845c43931f59ba Mon Sep 17 00:00:00 2001
|
||||
From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
Date: Fri, 11 Sep 2020 09:53:28 -0400
|
||||
Subject: [PATCH 54/55] lscpu: show physical socket on aarch64 without ACPI
|
||||
PPTT
|
||||
|
||||
Show the number of physical socket even if the sysfs doesn't have
|
||||
the physical socket information.
|
||||
Note, lscpu cannot show the number of socket info for unprivileged
|
||||
users because it needs to access the DMI table.
|
||||
|
||||
Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
|
||||
---
|
||||
sys-utils/lscpu.c | 6 ++++--
|
||||
sys-utils/lscpu.h | 1 -
|
||||
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
|
||||
index a8b448fa0..45fcb08cf 100644
|
||||
--- a/sys-utils/lscpu.c
|
||||
+++ b/sys-utils/lscpu.c
|
||||
@@ -1850,8 +1850,10 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
|
||||
}
|
||||
} else {
|
||||
if (desc->is_cluster) {
|
||||
- if (desc->nr_socket_on_cluster > 0)
|
||||
- add_summary_n(tb, _("Socket(s):"), desc->nr_socket_on_cluster);
|
||||
+ int sockets = get_number_of_physical_sockets_from_dmi();
|
||||
+
|
||||
+ if (sockets)
|
||||
+ add_summary_n(tb, _("Socket(s):"), sockets);
|
||||
else
|
||||
add_summary_s(tb, _("Socket(s):"), "-");
|
||||
|
||||
diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h
|
||||
index b190afd21..1aef8202d 100644
|
||||
--- a/sys-utils/lscpu.h
|
||||
+++ b/sys-utils/lscpu.h
|
||||
@@ -160,7 +160,6 @@ struct lscpu_desc {
|
||||
int physcoresperchip; /* Physical cores per chip */
|
||||
|
||||
int is_cluster;
|
||||
- int nr_socket_on_cluster;
|
||||
};
|
||||
|
||||
enum {
|
||||
--
|
||||
2.29.2
|
||||
|
137
SOURCES/0055-lscpu-arm-read-vendor-and-model-from-BIOS.patch
Normal file
137
SOURCES/0055-lscpu-arm-read-vendor-and-model-from-BIOS.patch
Normal file
@ -0,0 +1,137 @@
|
||||
From 880958fe818c5bc9fb4a1a1cdcd241d90e7fb179 Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Wed, 16 Dec 2020 13:08:51 +0100
|
||||
Subject: [PATCH 55/55] lscpu: (arm) read vendor and model from BIOS
|
||||
|
||||
This patch backports the current upstream code to read CPU vendor and
|
||||
model name from BIOS.
|
||||
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/8014104bea78f6f82cb82e16329b562e60ecdc87
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/367c85c472869b75eaf770d4be0b360e30710b95
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1883056
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1882740
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
sys-utils/lscpu-dmi.c | 44 +++++++++++++++++++++++++++++++++++++++++++
|
||||
sys-utils/lscpu.c | 7 +++++++
|
||||
sys-utils/lscpu.h | 3 +++
|
||||
3 files changed, 54 insertions(+)
|
||||
|
||||
diff --git a/sys-utils/lscpu-dmi.c b/sys-utils/lscpu-dmi.c
|
||||
index 31127f48a..3bdd7dcb2 100644
|
||||
--- a/sys-utils/lscpu-dmi.c
|
||||
+++ b/sys-utils/lscpu-dmi.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include "lscpu.h"
|
||||
+#include "all-io.h"
|
||||
|
||||
#define _PATH_SYS_DMI "/sys/firmware/dmi/tables/DMI"
|
||||
|
||||
@@ -353,3 +354,46 @@ int get_number_of_physical_sockets_from_dmi(void)
|
||||
else
|
||||
return di.sockets;
|
||||
}
|
||||
+
|
||||
+
|
||||
+#define _PATH_SYS_DMI_TYPE4 "/sys/firmware/dmi/entries/4-0/raw"
|
||||
+#define PROC_MFR_OFFSET 0x07
|
||||
+#define PROC_VERSION_OFFSET 0x10
|
||||
+
|
||||
+/*
|
||||
+ * Use firmware to get human readable names
|
||||
+ */
|
||||
+int arm_smbios_decode(struct lscpu_desc *desc)
|
||||
+{
|
||||
+ uint8_t data[8192];
|
||||
+ char buf[128], *str;
|
||||
+ struct dmi_header h;
|
||||
+ int fd;
|
||||
+ ssize_t rs;
|
||||
+
|
||||
+ fd = open(_PATH_SYS_DMI_TYPE4, O_RDONLY);
|
||||
+ if (fd < 0)
|
||||
+ return fd;
|
||||
+
|
||||
+ rs = read_all(fd, (char *) data, 8192);
|
||||
+ close(fd);
|
||||
+
|
||||
+ if (rs == -1)
|
||||
+ return -1;
|
||||
+
|
||||
+ to_dmi_header(&h, data);
|
||||
+
|
||||
+ str = dmi_string(&h, data[PROC_MFR_OFFSET]);
|
||||
+ if (str) {
|
||||
+ xstrncpy(buf, str, 127);
|
||||
+ desc->bios_vendor = xstrdup(buf);
|
||||
+ }
|
||||
+
|
||||
+ str = dmi_string(&h, data[PROC_VERSION_OFFSET]);
|
||||
+ if (str) {
|
||||
+ xstrncpy(buf, str, 127);
|
||||
+ desc->bios_modelname = xstrdup(buf);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
|
||||
index 45fcb08cf..0a4926e65 100644
|
||||
--- a/sys-utils/lscpu.c
|
||||
+++ b/sys-utils/lscpu.c
|
||||
@@ -1868,6 +1868,8 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
|
||||
add_summary_n(tb, _("NUMA node(s):"), desc->nnodes);
|
||||
if (desc->vendor)
|
||||
add_summary_s(tb, _("Vendor ID:"), desc->vendor);
|
||||
+ if (desc->bios_vendor)
|
||||
+ add_summary_s(tb, _("BIOS Vendor ID:"), desc->bios_vendor);
|
||||
if (desc->machinetype)
|
||||
add_summary_s(tb, _("Machine type:"), desc->machinetype);
|
||||
if (desc->family)
|
||||
@@ -1876,6 +1878,8 @@ print_summary(struct lscpu_desc *desc, struct lscpu_modifier *mod)
|
||||
add_summary_s(tb, _("Model:"), desc->revision ? desc->revision : desc->model);
|
||||
if (desc->modelname || desc->cpu)
|
||||
add_summary_s(tb, _("Model name:"), desc->cpu ? desc->cpu : desc->modelname);
|
||||
+ if (desc->bios_modelname)
|
||||
+ add_summary_s(tb, _("BIOS Model name:"), desc->bios_modelname);
|
||||
if (desc->stepping)
|
||||
add_summary_s(tb, _("Stepping:"), desc->stepping);
|
||||
if (desc->mhz)
|
||||
@@ -2109,6 +2113,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
read_nodes(desc);
|
||||
read_hypervisor(desc, mod);
|
||||
+
|
||||
+ if (mod->system == SYSTEM_LIVE)
|
||||
+ arm_smbios_decode(desc);
|
||||
arm_cpu_decode(desc);
|
||||
|
||||
|
||||
diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h
|
||||
index 1aef8202d..802719eeb 100644
|
||||
--- a/sys-utils/lscpu.h
|
||||
+++ b/sys-utils/lscpu.h
|
||||
@@ -79,10 +79,12 @@ struct polarization_modes {
|
||||
struct lscpu_desc {
|
||||
char *arch;
|
||||
char *vendor;
|
||||
+ char *bios_vendor; /* aarch64 */
|
||||
char *machinetype; /* s390 */
|
||||
char *family;
|
||||
char *model;
|
||||
char *modelname;
|
||||
+ char *bios_modelname; /* aarch64 */
|
||||
char *revision; /* alternative for model (ppc) */
|
||||
char *cpu; /* alternative for modelname (ppc, sparc) */
|
||||
char *virtflag; /* virtualization flag (vmx, svm) */
|
||||
@@ -187,5 +189,6 @@ struct lscpu_modifier {
|
||||
extern int read_hypervisor_dmi(void);
|
||||
extern int get_number_of_physical_sockets_from_dmi(void);
|
||||
extern void arm_cpu_decode(struct lscpu_desc *desc);
|
||||
+extern int arm_smbios_decode(struct lscpu_desc *desc);
|
||||
|
||||
#endif /* LSCPU_H */
|
||||
--
|
||||
2.29.2
|
||||
|
28
SOURCES/0056-tests-update-sfdisk-resize.patch
Normal file
28
SOURCES/0056-tests-update-sfdisk-resize.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From feb4b6cd1422d6ea9063be5f02338357b039a058 Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Mon, 17 Sep 2018 16:22:14 +0200
|
||||
Subject: [PATCH] tests: update sfdisk resize
|
||||
|
||||
Upstream: http://github.com/karelzak/util-linux/commit/a1b463d94afdae65ab5bfb192a58f1ceeb13679a
|
||||
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1900498
|
||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||
---
|
||||
tests/expected/sfdisk/dos-resize-logical | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/expected/sfdisk/dos-resize-logical b/tests/expected/sfdisk/dos-resize-logical
|
||||
index 9ceb9a327..a427ff010 100644
|
||||
--- a/tests/expected/sfdisk/dos-resize-logical
|
||||
+++ b/tests/expected/sfdisk/dos-resize-logical
|
||||
@@ -26,7 +26,7 @@ Device Boot Start End Sectors Size Id Type
|
||||
<removed>3 6144 8191 2048 1M 83 Linux
|
||||
<removed>4 8192 28671 20480 10M 5 Extended
|
||||
<removed>5 10240 12287 2048 1M 83 Linux
|
||||
-<removed>6 14336 26623 12288 6M 83 Linux
|
||||
+<removed>6 14336 28671 14336 7M 83 Linux
|
||||
|
||||
The partition table has been altered.
|
||||
Calling ioctl() to re-read partition table.
|
||||
--
|
||||
2.29.2
|
||||
|
@ -2,7 +2,7 @@
|
||||
Summary: A collection of basic system utilities
|
||||
Name: util-linux
|
||||
Version: 2.32.1
|
||||
Release: 24%{?dist}
|
||||
Release: 26%{?dist}
|
||||
License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
|
||||
Group: System Environment/Base
|
||||
URL: http://en.wikipedia.org/wiki/Util-linux
|
||||
@ -180,6 +180,31 @@ Patch41: 0041-libmount-fix-mount-a-EBUSY-for-cifs.patch
|
||||
# 1848919 - Update losetup man page to fix "--direct-io" defaults
|
||||
Patch42: 0042-Manual-pages-losetup.8-Fix-direct-io-defaults.patch
|
||||
|
||||
### RHEL-8.4
|
||||
###
|
||||
# 1884194 - RHEL-8: chrt command does not support the -R option
|
||||
Patch43: 0043-chrt-use-SCHED_FLAG_RESET_ON_FORK-for-sched_setattr.patch
|
||||
Patch44: 0044-chrt-don-t-restrict-reset-on-fork-add-more-info-to-m.patch
|
||||
# 1855759 - mount.8: clarify (no)suid behavior on file capabilities
|
||||
Patch45: 0045-mount.8-clarify-no-suid-behavior-on-file-capabilitie.patch
|
||||
# 1861670 - lsblk can not show serial information for virtio disk
|
||||
Patch46: 0046-lsblk-Fall-back-to-ID_SERIAL.patch
|
||||
# 1883783 - lscpu: avoid segfault on PowerPC systems with valid hardware configurations
|
||||
Patch47: 0047-lscpu-avoid-segfault-on-PowerPC-systems-with-valid-h.patch
|
||||
# 1900498 - libfdisk/libmount: backport two patches for upstream systemd
|
||||
Patch48: 0048-libfdisk-count-gaps-to-possible-size-when-resize.patch
|
||||
Patch49: 0049-libmount-parser-fix-memory-leak-on-error-before-end-.patch
|
||||
# 1883056 - lscpu support for Fujitsu A64FX
|
||||
Patch50: 0050-lscpu-update-ARM-identifiers-tables.patch
|
||||
Patch51: 0051-lscpu-use-cluster-on-aarch64-machine-which-doesn-t-h.patch
|
||||
Patch52: 0052-lscpu-dmi-split-to-parse-dmi-table.patch
|
||||
Patch53: 0053-lscpu-add-helper-to-get-physical-sockets.patch
|
||||
Patch54: 0054-lscpu-show-physical-socket-on-aarch64-without-ACPI-P.patch
|
||||
# 1882740 lscpu: use SMBIOS Type 4 strings for CPU vendor and model on ARM
|
||||
Patch55: 0055-lscpu-arm-read-vendor-and-model-from-BIOS.patch
|
||||
# 1900498 - libfdisk/libmount: backport two patches for upstream systemd
|
||||
Patch56: 0056-tests-update-sfdisk-resize.patch
|
||||
|
||||
|
||||
%description
|
||||
The util-linux package contains a large variety of low-level system
|
||||
@ -1045,6 +1070,18 @@ fi
|
||||
%{_libdir}/python*/site-packages/libmount/
|
||||
|
||||
%changelog
|
||||
* Wed Dec 16 2020 Karel Zak <kzak@redhat.com> 2.32.1-26
|
||||
- update regression tests (related to #1900498)
|
||||
|
||||
* Wed Dec 16 2020 Karel Zak <kzak@redhat.com> 2.32.1-25
|
||||
- fix #1884194 - RHEL-8: chrt command does not support the -R option
|
||||
- fix #1855759 - mount.8: clarify (no)suid behavior on file capabilities
|
||||
- fix #1861670 - lsblk can not show serial information for virtio disk
|
||||
- fix #1883783 - lscpu: avoid segfault on PowerPC systems with valid hardware configurations
|
||||
- fix #1900498 - libfdisk/libmount: backport two patches for upstream systemd
|
||||
- fix #1883056 - lscpu support for Fujitsu A64FX
|
||||
- fix #1882740 - lscpu: use SMBIOS Type 4 strings for CPU vendor and model on ARM
|
||||
|
||||
* Fri Jun 26 2020 Karel Zak <kzak@redhat.com> 2.32.1-24
|
||||
- fix #1848919 - Update losetup man page to fix "--direct-io" defaults
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user