From 1301c20f6c2c36a84f418da513841ce89aba7d1c Mon Sep 17 00:00:00 2001 From: Paul Clarke Date: Fri, 23 Jun 2017 09:10:32 -0300 Subject: powerpc: fix sysconf support for cache geometries Commit cdfbe5037f2f67bf5f560b73732b69d0fabe2314 added sysconf support for cache geometries on powerpc, but mishandled errno. For valid input parameters, sysconf() should not set errno. * sysdeps/unix/sysv/linux/powerpc/sysconf.c: Remove references to errno, and simplify remaining related code. --- ChangeLog | 5 +++++ sysdeps/unix/sysv/linux/powerpc/sysconf.c | 37 +++++++------------------------ 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index c52002a914..44115282c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-06-23 Paul A. Clarke + + * sysdeps/unix/sysv/linux/powerpc/sysconf.c: Remove references + to errno, and simplify remaining related code. + 2017-06-23 Tulio Magno Quites Machado Filho * sysdeps/powerpc/bits/hwcap.h: Add PPC_FEATURE2_DARN and diff --git a/sysdeps/unix/sysv/linux/powerpc/sysconf.c b/sysdeps/unix/sysv/linux/powerpc/sysconf.c index 10c4aa0753..7bed7018d4 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sysconf.c +++ b/sysdeps/unix/sysv/linux/powerpc/sysconf.c @@ -22,37 +22,16 @@ static long linux_sysconf (int name); -static long -auxv2sysconf (unsigned long type) -{ - long rc; - rc = __getauxval (type); - if (rc == 0) - { - __set_errno (EINVAL); - rc = -1; - } - return rc; -} - -static long +static inline long auxv2sysconf_cache_associativity (unsigned long type) { - long rc; - rc = auxv2sysconf (type); - if (rc != -1) - rc = (rc & 0xffff0000) >> 16; - return rc; + return (__getauxval (type) & 0xffff0000) >> 16; } -static long +static inline long auxv2sysconf_cache_linesize (unsigned long type) { - long rc; - rc = auxv2sysconf (type); - if (rc != -1) - rc = rc & 0xffff; - return rc; + return __getauxval (type) & 0xffff; } /* Get the value of the system variable NAME. */ @@ -62,25 +41,25 @@ __sysconf (int name) switch (name) { case _SC_LEVEL1_ICACHE_SIZE: - return auxv2sysconf (AT_L1I_CACHESIZE); + return __getauxval (AT_L1I_CACHESIZE); case _SC_LEVEL1_ICACHE_ASSOC: return auxv2sysconf_cache_associativity (AT_L1I_CACHEGEOMETRY); case _SC_LEVEL1_ICACHE_LINESIZE: return auxv2sysconf_cache_linesize (AT_L1I_CACHEGEOMETRY); case _SC_LEVEL1_DCACHE_SIZE: - return auxv2sysconf (AT_L1D_CACHESIZE); + return __getauxval (AT_L1D_CACHESIZE); case _SC_LEVEL1_DCACHE_ASSOC: return auxv2sysconf_cache_associativity (AT_L1D_CACHEGEOMETRY); case _SC_LEVEL1_DCACHE_LINESIZE: return auxv2sysconf_cache_linesize (AT_L1D_CACHEGEOMETRY); case _SC_LEVEL2_CACHE_SIZE: - return auxv2sysconf (AT_L2_CACHESIZE); + return __getauxval (AT_L2_CACHESIZE); case _SC_LEVEL2_CACHE_ASSOC: return auxv2sysconf_cache_associativity (AT_L2_CACHEGEOMETRY); case _SC_LEVEL2_CACHE_LINESIZE: return auxv2sysconf_cache_linesize (AT_L2_CACHEGEOMETRY); case _SC_LEVEL3_CACHE_SIZE: - return auxv2sysconf (AT_L3_CACHESIZE); + return __getauxval (AT_L3_CACHESIZE); case _SC_LEVEL3_CACHE_ASSOC: return auxv2sysconf_cache_associativity (AT_L3_CACHEGEOMETRY); case _SC_LEVEL3_CACHE_LINESIZE: -- cgit 1.4.1