Fixes for some issues on Arm platforms (rhbz 1691430)
This commit is contained in:
parent
c2670737b9
commit
769107e1a6
@ -0,0 +1,33 @@
|
|||||||
|
From d9684b99ed849e11b366ee1e6d98b88daf4b41ba Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Robinson <pbrobinson@gmail.com>
|
||||||
|
Date: Wed, 16 Oct 2019 10:58:03 +0100
|
||||||
|
Subject: [PATCH 1/2] Revert "hy_detect_arch(): detect crypto only on arm
|
||||||
|
version >= 8"
|
||||||
|
|
||||||
|
This reverts commit 6c4f7462b3004e39e82c4ec186175ea4a56035b4.
|
||||||
|
|
||||||
|
The reverts the commit. More details will be in the fixes for commit
|
||||||
|
73b0de05a4d2.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||||
|
---
|
||||||
|
libdnf/hy-util.cpp | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-util.cpp b/libdnf/hy-util.cpp
|
||||||
|
index f6de87d3..61838cc3 100644
|
||||||
|
--- a/libdnf/hy-util.cpp
|
||||||
|
+++ b/libdnf/hy-util.cpp
|
||||||
|
@@ -118,8 +118,7 @@ hy_detect_arch(char **arch)
|
||||||
|
modifier++;
|
||||||
|
if (getauxval(AT_HWCAP) & HWCAP_ARM_VFP)
|
||||||
|
*modifier++ = 'h';
|
||||||
|
- // arm version >= 8 can have crypto extension
|
||||||
|
- if ((atoi(un.machine+4) >= 8) && (getauxval(AT_HWCAP2) & HWCAP2_AES))
|
||||||
|
+ if (getauxval(AT_HWCAP2) & HWCAP2_AES)
|
||||||
|
*modifier++ = 'c';
|
||||||
|
if (getauxval(AT_HWCAP) & HWCAP_ARM_NEON)
|
||||||
|
*modifier++ = 'n';
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
88
0002-Fix-Arm-detection-improvements.patch
Normal file
88
0002-Fix-Arm-detection-improvements.patch
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
From f858089c65119500986c6695138590af60a02542 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Robinson <pbrobinson@gmail.com>
|
||||||
|
Date: Wed, 16 Oct 2019 11:47:43 +0100
|
||||||
|
Subject: [PATCH 2/2] Fix Arm detection improvements
|
||||||
|
|
||||||
|
The change in 73b0de05a4d2 has caused a number of real world regressions
|
||||||
|
on arm32/armhfp/aarch32 users, in particular when running on ARMv8 based
|
||||||
|
hardware. There's a number of cases where software can't be installed
|
||||||
|
or the OS can't even be installed due to issues around armv7hcnl and
|
||||||
|
armv8hcnl. The NEON 'n' extension on ARMv8 hardware is not optional, so
|
||||||
|
is assumed as part of the armv8hl rpm. The crypto extensions 'c' are
|
||||||
|
optional and their implementation is widely varied, due to this the
|
||||||
|
software implementations do run time detection, the detection of this
|
||||||
|
functionality and subsquent priortisation of the 'c' extension is
|
||||||
|
incorrect, especially where the software could be running in a VM
|
||||||
|
or container and hence even in a running instance the underlying
|
||||||
|
hardware could concievably change so requiring this as a compile time
|
||||||
|
option has proved to be extremely problematic causing massive issues
|
||||||
|
with Fedora ARM.
|
||||||
|
|
||||||
|
We adjust the detection of NEON 'n' just to happen on ARMv7 where while
|
||||||
|
it was implemented it has always been problematic and never really used
|
||||||
|
and hence is a legacy implementation detail that needs to be supported
|
||||||
|
but in reality the vast majority of NEON optimisation happens at run
|
||||||
|
time in libraries where it make a difference.
|
||||||
|
|
||||||
|
In the case of the 'c' crypto extenions we have explicitly not added
|
||||||
|
this as package management functionality as it's handled effectively
|
||||||
|
with run time detection as optimisaiton and as in Fefora has just
|
||||||
|
caused regressions and issues.
|
||||||
|
|
||||||
|
Fixes RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1691430
|
||||||
|
|
||||||
|
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||||
|
---
|
||||||
|
libdnf/hy-util.cpp | 17 +++++------------
|
||||||
|
1 file changed, 5 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdnf/hy-util.cpp b/libdnf/hy-util.cpp
|
||||||
|
index 61838cc3..295fdc1b 100644
|
||||||
|
--- a/libdnf/hy-util.cpp
|
||||||
|
+++ b/libdnf/hy-util.cpp
|
||||||
|
@@ -36,20 +36,13 @@
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
-/* ARM specific HWCAP defines may be missing on non-ARM devices,
|
||||||
|
- * AT_HWCAP2 is missing on old glibc (<2.18) */
|
||||||
|
-#ifndef AT_HWCAP2
|
||||||
|
-#define AT_HWCAP2 26
|
||||||
|
-#endif
|
||||||
|
+/* ARM specific HWCAP defines may be missing on non-ARM devices */
|
||||||
|
#ifndef HWCAP_ARM_VFP
|
||||||
|
#define HWCAP_ARM_VFP (1<<6)
|
||||||
|
#endif
|
||||||
|
#ifndef HWCAP_ARM_NEON
|
||||||
|
#define HWCAP_ARM_NEON (1<<12)
|
||||||
|
#endif
|
||||||
|
-#ifndef HWCAP2_AES
|
||||||
|
-#define HWCAP2_AES (1<<0)
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
const char *
|
||||||
|
hy_chksum_name(int chksum_type)
|
||||||
|
@@ -111,16 +104,16 @@ hy_detect_arch(char **arch)
|
||||||
|
if (!strncmp(un.machine, "armv", 4)) {
|
||||||
|
/* un.machine is armvXE, where X is version number and E is
|
||||||
|
* endianness (b or l); we need to add modifiers such as
|
||||||
|
- * h (hardfloat), n (neon), c (crypto extensions) */
|
||||||
|
+ * h (hardfloat), n (neon). Neon is a requirement of armv8 so
|
||||||
|
+ * as far as rpm is concerned armv8l is the equivilent of armv7hnl
|
||||||
|
+ * (or 7hnb) so we don't explicitly add 'n' for 8+ as it's expected. */
|
||||||
|
char endian = un.machine[strlen(un.machine)-1];
|
||||||
|
char *modifier = un.machine + 5;
|
||||||
|
while(isdigit(*modifier)) /* keep armv7, armv8, armv9, armv10, armv100, ... */
|
||||||
|
modifier++;
|
||||||
|
if (getauxval(AT_HWCAP) & HWCAP_ARM_VFP)
|
||||||
|
*modifier++ = 'h';
|
||||||
|
- if (getauxval(AT_HWCAP2) & HWCAP2_AES)
|
||||||
|
- *modifier++ = 'c';
|
||||||
|
- if (getauxval(AT_HWCAP) & HWCAP_ARM_NEON)
|
||||||
|
+ if ((atoi(un.machine+4) == 7) && (getauxval(AT_HWCAP) & HWCAP_ARM_NEON))
|
||||||
|
*modifier++ = 'n';
|
||||||
|
*modifier++ = endian;
|
||||||
|
*modifier = 0;
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
Name: libdnf
|
Name: libdnf
|
||||||
Version: 0.35.5
|
Version: 0.35.5
|
||||||
Release: 4%{?dist}
|
Release: 5%{?dist}
|
||||||
Summary: Library providing simplified C and Python API to libsolv
|
Summary: Library providing simplified C and Python API to libsolv
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: https://github.com/rpm-software-management/libdnf
|
URL: https://github.com/rpm-software-management/libdnf
|
||||||
@ -53,6 +53,9 @@ Patch0001: 0001-Revert-9309e92332241ff1113433057c969cebf127734e.patch
|
|||||||
Patch0002: 0001-Use-POOL_FLAG_WHATPROVIDESWITHDISABLED.patch
|
Patch0002: 0001-Use-POOL_FLAG_WHATPROVIDESWITHDISABLED.patch
|
||||||
Patch0003: 0003-Fix-leaking-log-handlers-in-Sack.patch
|
Patch0003: 0003-Fix-leaking-log-handlers-in-Sack.patch
|
||||||
|
|
||||||
|
Patch0005: 0001-Revert-hy_detect_arch-detect-crypto-only-on-arm-vers.patch
|
||||||
|
Patch0006: 0002-Fix-Arm-detection-improvements.patch
|
||||||
|
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
@ -285,6 +288,9 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 23 2019 Peter Robinson <pbrobinson@fedoraproject.org> 0.35.5-5
|
||||||
|
- Fixes for some issues on Arm platforms (rhbz 1691430)
|
||||||
|
|
||||||
* Tue Oct 22 2019 Ales Matej <amatej@redhat.com> - 0.35.5-4
|
* Tue Oct 22 2019 Ales Matej <amatej@redhat.com> - 0.35.5-4
|
||||||
- Fix leaking log handlers in Sack that can cause a crash (RhBug:1758737)
|
- Fix leaking log handlers in Sack that can cause a crash (RhBug:1758737)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user