]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
powerpc: fix sysconf support for cache geometries
authorPaul Clarke <pc@us.ibm.com>
Fri, 23 Jun 2017 12:10:32 +0000 (09:10 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Fri, 23 Jun 2017 12:10:32 +0000 (09:10 -0300)
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
sysdeps/unix/sysv/linux/powerpc/sysconf.c

index c52002a91419fe1df440351c678c700a0079e6b9..44115282c078c94f00bb1c46b4a40b39b4a667e0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-06-23  Paul A. Clarke  <pc@us.ibm.com>
+
+       * sysdeps/unix/sysv/linux/powerpc/sysconf.c: Remove references
+       to errno, and simplify remaining related code.
+
 2017-06-23  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
 
        * sysdeps/powerpc/bits/hwcap.h: Add PPC_FEATURE2_DARN and
index 10c4aa07532fae6d0d2f3549fe91e32c365df000..7bed7018d4e9a56804a19e1ca6bab84e6b40def7 100644 (file)
 
 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: