[S390] topology: clean up facility detection
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 25 Oct 2010 14:10:52 +0000 (16:10 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Mon, 25 Oct 2010 14:10:21 +0000 (16:10 +0200)
Move cpu topology facility detection to early setup code where it
should be.

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

index 25e831d58e1ecde6a3dba239a6befcd7a6bfd808..d5e2ef10537d9a93882e3bc38b857cb2edf4f764 100644 (file)
@@ -73,6 +73,7 @@ extern unsigned int user_mode;
 #define MACHINE_FLAG_PFMF      (1UL << 11)
 #define MACHINE_FLAG_LPAR      (1UL << 12)
 #define MACHINE_FLAG_SPP       (1UL << 13)
+#define MACHINE_FLAG_TOPOLOGY  (1UL << 14)
 
 #define MACHINE_IS_VM          (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
 #define MACHINE_IS_KVM         (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
@@ -90,6 +91,7 @@ extern unsigned int user_mode;
 #define MACHINE_HAS_HPAGE      (0)
 #define MACHINE_HAS_PFMF       (0)
 #define MACHINE_HAS_SPP                (0)
+#define MACHINE_HAS_TOPOLOGY   (0)
 #else /* __s390x__ */
 #define MACHINE_HAS_IEEE       (1)
 #define MACHINE_HAS_CSP                (1)
@@ -100,6 +102,7 @@ extern unsigned int user_mode;
 #define MACHINE_HAS_HPAGE      (S390_lowcore.machine_flags & MACHINE_FLAG_HPAGE)
 #define MACHINE_HAS_PFMF       (S390_lowcore.machine_flags & MACHINE_FLAG_PFMF)
 #define MACHINE_HAS_SPP                (S390_lowcore.machine_flags & MACHINE_FLAG_SPP)
+#define MACHINE_HAS_TOPOLOGY   (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY)
 #endif /* __s390x__ */
 
 #define ZFCPDUMP_HSA_SIZE      (32UL<<20)
index d2455d44d99af467cf6a0889be26420a027db0c9..d149609e46e63c0ebc518140fd9983a7d70a95ce 100644 (file)
@@ -382,6 +382,8 @@ static __init void detect_machine_facilities(void)
                S390_lowcore.machine_flags |= MACHINE_FLAG_IDTE;
        if (test_facility(8))
                S390_lowcore.machine_flags |= MACHINE_FLAG_PFMF;
+       if (test_facility(11))
+               S390_lowcore.machine_flags |= MACHINE_FLAG_TOPOLOGY;
        if (test_facility(27))
                S390_lowcore.machine_flags |= MACHINE_FLAG_MVCOS;
        if (test_facility(40))
index 91fb66baa50b2ce277a73c750dc728a2faa13e18..69004411a93dd40248691b07e3f296d6cf9c1598 100644 (file)
@@ -66,7 +66,6 @@ struct mask_info {
 static int topology_enabled = 1;
 static void topology_work_fn(struct work_struct *work);
 static struct tl_info *tl_info;
-static int machine_has_topology;
 static struct timer_list topology_timer;
 static void set_topology_timer(void);
 static DECLARE_WORK(topology_work, topology_work_fn);
@@ -88,7 +87,7 @@ static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu)
        cpumask_t mask;
 
        cpus_clear(mask);
-       if (!topology_enabled || !machine_has_topology)
+       if (!topology_enabled || !MACHINE_HAS_TOPOLOGY)
                return cpu_possible_map;
        while (info) {
                if (cpu_isset(cpu, info->mask)) {
@@ -186,7 +185,6 @@ static void tl_to_cores(struct tl_info *info)
                        break;
                default:
                        clear_masks();
-                       machine_has_topology = 0;
                        goto out;
                }
                tle = next_tle(tle);
@@ -223,7 +221,7 @@ int topology_set_cpu_management(int fc)
        int cpu;
        int rc;
 
-       if (!machine_has_topology)
+       if (!MACHINE_HAS_TOPOLOGY)
                return -EOPNOTSUPP;
        if (fc)
                rc = ptf(PTF_VERTICAL);
@@ -269,7 +267,7 @@ int arch_update_cpu_topology(void)
        struct sys_device *sysdev;
        int cpu;
 
-       if (!machine_has_topology) {
+       if (!MACHINE_HAS_TOPOLOGY) {
                update_cpu_core_map();
                topology_update_polarization_simple();
                return 0;
@@ -323,7 +321,7 @@ static int __init init_topology_update(void)
        int rc;
 
        rc = 0;
-       if (!machine_has_topology) {
+       if (!MACHINE_HAS_TOPOLOGY) {
                topology_update_polarization_simple();
                goto out;
        }
@@ -354,10 +352,8 @@ void __init s390_init_cpu_topology(void)
        struct tl_info *info;
        int i;
 
-       if (!test_facility(2) || !test_facility(11))
+       if (!MACHINE_HAS_TOPOLOGY)
                return;
-       machine_has_topology = 1;
-
        tl_info = alloc_bootmem_pages(PAGE_SIZE);
        info = tl_info;
        store_topology(info);