xref: /openbmc/linux/arch/s390/kernel/vdso64/getcpu.c (revision 1ab3001b)
180f06306SHeiko Carstens // SPDX-License-Identifier: GPL-2.0
280f06306SHeiko Carstens /* Copyright IBM Corp. 2020 */
380f06306SHeiko Carstens 
480f06306SHeiko Carstens #include <linux/compiler.h>
580f06306SHeiko Carstens #include <linux/getcpu.h>
680f06306SHeiko Carstens #include <asm/timex.h>
7*1ab3001bSHeiko Carstens #include "vdso.h"
880f06306SHeiko Carstens 
980f06306SHeiko Carstens int __s390_vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
1080f06306SHeiko Carstens {
1180f06306SHeiko Carstens 	__u16 todval[8];
1280f06306SHeiko Carstens 
1380f06306SHeiko Carstens 	/* CPU number is stored in the programmable field of the TOD clock */
1480f06306SHeiko Carstens 	get_tod_clock_ext((char *)todval);
1580f06306SHeiko Carstens 	if (cpu)
1680f06306SHeiko Carstens 		*cpu = todval[7];
1780f06306SHeiko Carstens 	/* NUMA node is always zero */
1880f06306SHeiko Carstens 	if (node)
1980f06306SHeiko Carstens 		*node = 0;
2080f06306SHeiko Carstens 	return 0;
2180f06306SHeiko Carstens }
22