Skip to content

Commit 4797e9b

Browse files
hcahcaVasily Gorbik
authored andcommitted
s390/smp: Implement raw_smp_processor_id() with inline assembly
Implement raw_smp_processor_id() with an inline assembly, which makes use of the ALTERNATIVE macro, to read cpu_nr from lowcore. Provide an alternative instruction with a different offset in case lowcore is relocated. This replaces sequences of two instructions with one instruction. Before: 1000b6: a5 1e 00 00 llilh %r1,0 1000ba: 58 20 13 a0 l %r2,928(%r1) After: 1000b6: e3 20 03 a0 00 58 ly %r2,928 Kernel image size change: add/remove: 753/755 grow/shrink: 230/1510 up/down: 30538/-35832 (-5294) Acked-by: Vasily Gorbik <[email protected]> Signed-off-by: Heiko Carstens <[email protected]> Signed-off-by: Vasily Gorbik <[email protected]>
1 parent 65c07e9 commit 4797e9b

File tree

1 file changed

+21
-3
lines changed
  • arch/s390/include/asm

1 file changed

+21
-3
lines changed

arch/s390/include/asm/smp.h

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,29 @@
77
#ifndef __ASM_SMP_H
88
#define __ASM_SMP_H
99

10-
#include <asm/sigp.h>
11-
#include <asm/lowcore.h>
1210
#include <asm/processor.h>
11+
#include <asm/lowcore.h>
12+
#include <asm/machine.h>
13+
#include <asm/sigp.h>
14+
15+
static __always_inline unsigned int raw_smp_processor_id(void)
16+
{
17+
unsigned long lc_cpu_nr;
18+
unsigned int cpu;
19+
20+
BUILD_BUG_ON(sizeof_field(struct lowcore, cpu_nr) != sizeof(cpu));
21+
lc_cpu_nr = offsetof(struct lowcore, cpu_nr);
22+
asm_inline(
23+
ALTERNATIVE(" ly %[cpu],%[offzero](%%r0)\n",
24+
" ly %[cpu],%[offalt](%%r0)\n",
25+
ALT_FEATURE(MFEATURE_LOWCORE))
26+
: [cpu] "=d" (cpu)
27+
: [offzero] "i" (lc_cpu_nr),
28+
[offalt] "i" (lc_cpu_nr + LOWCORE_ALT_ADDRESS),
29+
"m" (((struct lowcore *)0)->cpu_nr));
30+
return cpu;
31+
}
1332

14-
#define raw_smp_processor_id() (get_lowcore()->cpu_nr)
1533
#define arch_scale_cpu_capacity smp_cpu_get_capacity
1634

1735
extern struct mutex smp_cpu_state_mutex;

0 commit comments

Comments
 (0)