s390/cpuinfo: fix wrong output when CPU0 is offline
authorAlexander Gordeev <agordeev@linux.ibm.com>
Mon, 16 Mar 2020 11:39:55 +0000 (12:39 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Apr 2020 05:59:12 +0000 (07:59 +0200)
[ Upstream commit 872f27103874a73783aeff2aac2b41a489f67d7c ]

/proc/cpuinfo should not print information about CPU 0 when it is offline.

Fixes: 281eaa8cb67c ("s390/cpuinfo: simplify locking and skip offline cpus early")
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
[heiko.carstens@de.ibm.com: shortened commit message]
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/s390/kernel/processor.c

index d856263..737e22c 100644 (file)
@@ -139,8 +139,9 @@ static void show_cpu_mhz(struct seq_file *m, unsigned long n)
 static int show_cpuinfo(struct seq_file *m, void *v)
 {
        unsigned long n = (unsigned long) v - 1;
+       unsigned long first = cpumask_first(cpu_online_mask);
 
-       if (!n)
+       if (n == first)
                show_cpu_summary(m, v);
        if (!machine_has_cpu_mhz)
                return 0;
@@ -153,6 +154,8 @@ static inline void *c_update(loff_t *pos)
 {
        if (*pos)
                *pos = cpumask_next(*pos - 1, cpu_online_mask);
+       else
+               *pos = cpumask_first(cpu_online_mask);
        return *pos < nr_cpu_ids ? (void *)*pos + 1 : NULL;
 }