s390/cacheinfo: add missing facility check
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Wed, 18 Mar 2015 12:22:00 +0000 (13:22 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 13 Apr 2015 08:46:16 +0000 (10:46 +0200)
Git commit d97d929f06d0 ("s390: move cacheinfo sysfs to generic cacheinfo
infrastructure") removed the general-instructions-extension availability
check before the ecag instruction is executed.
Without this check this may lead to crashes on machines without this facility.
Therefore add the check again where needed.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/cache.c

index 0969d113b3d68f290a95b3b7e1484bf5c6b8caa3..bff5e3b6d8223b8f9a9c84d8f99235d3d4e648bc 100644 (file)
@@ -70,6 +70,8 @@ void show_cacheinfo(struct seq_file *m)
        struct cacheinfo *cache;
        int idx;
 
+       if (!test_facility(34))
+               return;
        get_online_cpus();
        this_cpu_ci = get_cpu_cacheinfo(cpumask_any(cpu_online_mask));
        for (idx = 0; idx < this_cpu_ci->num_leaves; idx++) {
@@ -159,6 +161,8 @@ int populate_cache_leaves(unsigned int cpu)
        union cache_topology ct;
        enum cache_type ctype;
 
+       if (!test_facility(34))
+               return -EOPNOTSUPP;
        ct.raw = ecag(EXTRACT_TOPOLOGY, 0, 0);
        for (idx = 0, level = 0; level < this_cpu_ci->num_levels &&
             idx < this_cpu_ci->num_leaves; idx++, level++) {