s390/facilities: optimize test_facility()
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 24 Nov 2015 12:48:27 +0000 (13:48 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 18 Dec 2015 13:59:23 +0000 (14:59 +0100)
test_facility() can be optimized for bits which must be set anyway,
due to the check in head.S. This removes a couple of superfluous
runtime checks.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/facility.h

index 007163f..09b406d 100644 (file)
@@ -34,6 +34,12 @@ static inline int __test_facility(unsigned long nr, void *facilities)
  */
 static inline int test_facility(unsigned long nr)
 {
+       unsigned long facilities_als[] = { FACILITIES_ALS };
+
+       if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
+               if (__test_facility(nr, &facilities_als))
+                       return 1;
+       }
        return __test_facility(nr, &S390_lowcore.stfle_fac_list);
 }