[prev in list] [next in list] [prev in thread] [next in thread]
List: xen-cvs
Subject: [xen master] xen/asm-generic: introduce generic header percpu.h
From: patchbot () xen ! org
Date: 2023-11-30 12:37:34
Message-ID: E1r8gIQ-0005ol-J0 () xenbits ! xenproject ! org
[Download RAW message or body]
commit 7c20d1616deb26b810c7d86a834552b8c39a7799
Author: Oleksii Kurochko <oleksii.kurochko@gmail.com>
AuthorDate: Wed Nov 29 10:10:23 2023 +0100
Commit: Jan Beulich <jbeulich@suse.com>
CommitDate: Wed Nov 29 10:10:23 2023 +0100
xen/asm-generic: introduce generic header percpu.h
The patch introduces generic percpu.h which was based on Arm's version
with the following changes:
* makes __per_cpu_data_end[] constant
* introduce get_per_cpu_offset() for macros this_cpu() and this_cpu_ptr()
* add inclustion of <asm/current.h> as get_per_cpu_offset() is located there.
Also it was changed a place where <asm/percpu.h> is included in <xen/percpu.h>
because asm-generic version of percpu.h started to include <asm/current.h> which
requires definition of DECLARE_PER_CPU.
As well the patch switches Arm, PPC and x86 architectures to use asm-generic
version of percpu.h.
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Shawn Anastasio <sanastasio@raptorengineering.com>
---
xen/arch/arm/include/asm/Makefile | 1 +
xen/arch/arm/include/asm/current.h | 3 +++
xen/arch/arm/include/asm/percpu.h | 33 ---------------------------------
xen/arch/ppc/include/asm/Makefile | 1 +
xen/arch/ppc/include/asm/current.h | 6 ++++++
xen/arch/ppc/include/asm/percpu.h | 24 ------------------------
xen/arch/x86/include/asm/Makefile | 2 ++
xen/arch/x86/include/asm/current.h | 2 ++
xen/arch/x86/include/asm/percpu.h | 22 ----------------------
xen/include/asm-generic/percpu.h | 37 +++++++++++++++++++++++++++++++++++++
xen/include/xen/percpu.h | 4 ++--
11 files changed, 54 insertions(+), 81 deletions(-)
diff --git a/xen/arch/arm/include/asm/Makefile b/xen/arch/arm/include/asm/Makefile
index cac6d5e3df..3faf1251ec 100644
--- a/xen/arch/arm/include/asm/Makefile
+++ b/xen/arch/arm/include/asm/Makefile
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-only
generic-y += iocap.h
generic-y += paging.h
+generic-y += percpu.h
generic-y += random.h
generic-y += vm_event.h
diff --git a/xen/arch/arm/include/asm/current.h b/xen/arch/arm/include/asm/current.h
index 51d1c8efa8..0be7ad6ef9 100644
--- a/xen/arch/arm/include/asm/current.h
+++ b/xen/arch/arm/include/asm/current.h
@@ -5,6 +5,7 @@
#include <xen/percpu.h>
#include <asm/processor.h>
+#include <asm/sysregs.h>
/* Tell whether the guest vCPU enabled Workaround 2 (i.e variant 4) */
#define CPUINFO_WORKAROUND_2_FLAG_SHIFT 0
@@ -60,6 +61,8 @@ do { \
this_cpu(cpu_id) = (id); \
} while ( 0 )
+#define get_per_cpu_offset() READ_SYSREG(TPIDR_EL2)
+
#endif
#endif /* __ARM_CURRENT_H__ */
diff --git a/xen/arch/arm/include/asm/percpu.h b/xen/arch/arm/include/asm/percpu.h
deleted file mode 100644
index f1a8768080..0000000000
--- a/xen/arch/arm/include/asm/percpu.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef __ARM_PERCPU_H__
-#define __ARM_PERCPU_H__
-
-#ifndef __ASSEMBLY__
-
-#include <xen/types.h>
-#include <asm/sysregs.h>
-
-extern char __per_cpu_start[], __per_cpu_data_end[];
-extern unsigned long __per_cpu_offset[NR_CPUS];
-void percpu_init_areas(void);
-
-#define per_cpu(var, cpu) \
- (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
-#define this_cpu(var) \
- (*RELOC_HIDE(&per_cpu__##var, READ_SYSREG(TPIDR_EL2)))
-
-#define per_cpu_ptr(var, cpu) \
- (*RELOC_HIDE(var, __per_cpu_offset[cpu]))
-#define this_cpu_ptr(var) \
- (*RELOC_HIDE(var, READ_SYSREG(TPIDR_EL2)))
-
-#endif
-
-#endif /* __ARM_PERCPU_H__ */
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/xen/arch/ppc/include/asm/Makefile b/xen/arch/ppc/include/asm/Makefile
index d8f2a1453c..c0badf5717 100644
--- a/xen/arch/ppc/include/asm/Makefile
+++ b/xen/arch/ppc/include/asm/Makefile
@@ -2,5 +2,6 @@
generic-y += hypercall.h
generic-y += iocap.h
generic-y += paging.h
+generic-y += percpu.h
generic-y += random.h
generic-y += vm_event.h
diff --git a/xen/arch/ppc/include/asm/current.h b/xen/arch/ppc/include/asm/current.h
index 0ca06033f9..e329a548e6 100644
--- a/xen/arch/ppc/include/asm/current.h
+++ b/xen/arch/ppc/include/asm/current.h
@@ -4,6 +4,8 @@
#include <xen/percpu.h>
+#include <asm/processor.h>
+
#ifndef __ASSEMBLY__
struct vcpu;
@@ -38,6 +40,10 @@ static inline struct cpu_info *get_cpu_info(void)
#define guest_cpu_user_regs() (&get_cpu_info()->guest_cpu_user_regs)
+#define smp_processor_id() 0 /* TODO: Fix this */
+
+#define get_per_cpu_offset() smp_processor_id() /* TODO: Fix this */
+
#endif /* __ASSEMBLY__ */
#endif /* __ASM_PPC_CURRENT_H__ */
diff --git a/xen/arch/ppc/include/asm/percpu.h b/xen/arch/ppc/include/asm/percpu.h
deleted file mode 100644
index e7c40c0f03..0000000000
--- a/xen/arch/ppc/include/asm/percpu.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef __PPC_PERCPU_H__
-#define __PPC_PERCPU_H__
-
-#ifndef __ASSEMBLY__
-
-extern char __per_cpu_start[], __per_cpu_data_end[];
-extern unsigned long __per_cpu_offset[NR_CPUS];
-void percpu_init_areas(void);
-
-#define smp_processor_id() 0 /* TODO: Fix this */
-
-#define per_cpu(var, cpu) \
- (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
-#define this_cpu(var) \
- (*RELOC_HIDE(&per_cpu__##var, smp_processor_id()))
-
-#define per_cpu_ptr(var, cpu) \
- (*RELOC_HIDE(var, __per_cpu_offset[cpu]))
-#define this_cpu_ptr(var) \
- (*RELOC_HIDE(var, smp_processor_id()))
-
-#endif
-
-#endif /* __PPC_PERCPU_H__ */
diff --git a/xen/arch/x86/include/asm/Makefile b/xen/arch/x86/include/asm/Makefile
new file mode 100644
index 0000000000..874429ed30
--- /dev/null
+++ b/xen/arch/x86/include/asm/Makefile
@@ -0,0 +1,2 @@
+# SPDX-License-Identifier: GPL-2.0-only
+generic-y += percpu.h
diff --git a/xen/arch/x86/include/asm/current.h b/xen/arch/x86/include/asm/current.h
index 35cca5cbe4..10950f36cc 100644
--- a/xen/arch/x86/include/asm/current.h
+++ b/xen/arch/x86/include/asm/current.h
@@ -102,6 +102,8 @@ static inline struct cpu_info *get_cpu_info(void)
#define smp_processor_id() (get_cpu_info()->processor_id)
#define guest_cpu_user_regs() (&get_cpu_info()->guest_cpu_user_regs)
+#define get_per_cpu_offset() (get_cpu_info()->per_cpu_offset)
+
/*
* Get the bottom-of-stack, as stored in the per-CPU TSS. This actually points
* into the middle of cpu_info.guest_cpu_user_regs, at the section that
diff --git a/xen/arch/x86/include/asm/percpu.h b/xen/arch/x86/include/asm/percpu.h
deleted file mode 100644
index 2b0c29a233..0000000000
--- a/xen/arch/x86/include/asm/percpu.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef __X86_PERCPU_H__
-#define __X86_PERCPU_H__
-
-#ifndef __ASSEMBLY__
-extern char __per_cpu_start[], __per_cpu_data_end[];
-extern unsigned long __per_cpu_offset[NR_CPUS];
-void percpu_init_areas(void);
-#endif
-
-/* var is in discarded region: offset to particular copy we want */
-#define per_cpu(var, cpu) \
- (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
-#define this_cpu(var) \
- (*RELOC_HIDE(&per_cpu__##var, get_cpu_info()->per_cpu_offset))
-
-#define this_cpu_ptr(var) \
- (*RELOC_HIDE(var, get_cpu_info()->per_cpu_offset))
-
-#define per_cpu_ptr(var, cpu) \
- (*RELOC_HIDE(var, __per_cpu_offset[cpu]))
-
-#endif /* __X86_PERCPU_H__ */
diff --git a/xen/include/asm-generic/percpu.h b/xen/include/asm-generic/percpu.h
new file mode 100644
index 0000000000..60af4f9ff9
--- /dev/null
+++ b/xen/include/asm-generic/percpu.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __ASM_GENERIC_PERCPU_H__
+#define __ASM_GENERIC_PERCPU_H__
+
+#ifndef __ASSEMBLY__
+
+#include <xen/types.h>
+#include <asm/current.h>
+
+extern char __per_cpu_start[];
+extern const char __per_cpu_data_end[];
+extern unsigned long __per_cpu_offset[NR_CPUS];
+void percpu_init_areas(void);
+
+#define per_cpu(var, cpu) \
+ (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
+
+#define this_cpu(var) \
+ (*RELOC_HIDE(&per_cpu__##var, get_per_cpu_offset()))
+
+#define per_cpu_ptr(var, cpu) \
+ (*RELOC_HIDE(var, __per_cpu_offset[cpu]))
+#define this_cpu_ptr(var) \
+ (*RELOC_HIDE(var, get_per_cpu_offset()))
+
+#endif
+
+#endif /* __ASM_GENERIC_PERCPU_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/include/xen/percpu.h b/xen/include/xen/percpu.h
index c7bf57cbcd..57522f346b 100644
--- a/xen/include/xen/percpu.h
+++ b/xen/include/xen/percpu.h
@@ -1,8 +1,6 @@
#ifndef __XEN_PERCPU_H__
#define __XEN_PERCPU_H__
-#include <asm/percpu.h>
-
#define DECLARE_PER_CPU(type, name) \
extern __typeof__(type) per_cpu__ ## name
@@ -29,6 +27,8 @@
#define get_per_cpu_var(var) (per_cpu__##var)
+#include <asm/percpu.h>
+
/* Linux compatibility. */
#define get_cpu_var(var) this_cpu(var)
#define put_cpu_var(var)
--
generated by git-patchbot for /home/xen/git/xen.git#master
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic