All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Move percpu code to common
@ 2024-09-24 16:42 Oleksii Kurochko
  2024-09-24 16:42 ` [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion Oleksii Kurochko
  2024-09-24 16:42 ` [PATCH v2 2/2] xen: move per-cpu area management into common code Oleksii Kurochko
  0 siblings, 2 replies; 10+ messages in thread
From: Oleksii Kurochko @ 2024-09-24 16:42 UTC (permalink / raw)
  To: xen-devel
  Cc: Oleksii Kurochko, Stefano Stabellini, Julien Grall,
	Bertrand Marquis, Michal Orzel, Volodymyr Babchuk, Andrew Cooper,
	Jan Beulich, Shawn Anastasio, Roger Pau Monné,
	Alistair Francis, Bob Eshleman, Connor Davis

The per-CPU area management code, which is largely common across architectures,
is a strong candidate for consolidation into common code.

Currently, there is only one architectural-specific aspect:
1. INVALID_PERCPU_AREA:
  ARM:
    #define INVALID_PERCPU_AREA (-(long)__per_cpu_start)
  x86:
    #define INVALID_PERCPU_AREA (0x8000000000000000UL - (unsigned long)__per_cpu_start)

These changes do not affect the functional behavior for x86.

For Arm add support of CPU_RESUME_FAILED, CPU_REMOVE and freeing of percpu
in the case when system_state != SYS_STATE_suspend.

---
Changes in V2:
 - update the cover letter message.
 - move CPU_RESUME_FAILED, CPU_REMOVE handling to common code.
 - rename PERCPU_SECTION to PERCPU_BSS.
 - drop ARCH_PERCPU_AREA_CHECK and ARCH_CPU_PERCPU_CALLBACK and connected
   functions.
 - All other changes look at specific patch.
---

Oleksii Kurochko (2):
  xen: introduce common macros for per-CPU sections defintion
  xen: move per-cpu area management into common code

 xen/arch/arm/Makefile             |   1 -
 xen/arch/arm/include/asm/smp.h    |   7 +-
 xen/arch/arm/percpu.c             |  85 -----------------------
 xen/arch/arm/xen.lds.S            |   9 +--
 xen/arch/ppc/include/asm/smp.h    |   6 --
 xen/arch/ppc/stubs.c              |   1 -
 xen/arch/ppc/xen.lds.S            |   9 +--
 xen/arch/riscv/include/asm/smp.h  |   6 --
 xen/arch/riscv/stubs.c            |   1 -
 xen/arch/x86/Makefile             |   1 -
 xen/arch/x86/include/asm/Makefile |   1 -
 xen/arch/x86/include/asm/percpu.h |  16 +++++
 xen/arch/x86/percpu.c             | 112 ------------------------------
 xen/arch/x86/xen.lds.S            |   9 +--
 xen/common/Makefile               |   1 +
 xen/common/percpu.c               | 110 +++++++++++++++++++++++++++++
 xen/include/asm-generic/percpu.h  |   9 ++-
 xen/include/xen/percpu.h          |   4 ++
 xen/include/xen/xen.lds.h         |  10 +++
 19 files changed, 153 insertions(+), 245 deletions(-)
 delete mode 100644 xen/arch/arm/percpu.c
 create mode 100644 xen/arch/x86/include/asm/percpu.h
 delete mode 100644 xen/arch/x86/percpu.c
 create mode 100644 xen/common/percpu.c

-- 
2.46.1



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion
  2024-09-24 16:42 [PATCH v2 0/2] Move percpu code to common Oleksii Kurochko
@ 2024-09-24 16:42 ` Oleksii Kurochko
  2024-09-24 17:01   ` Andrew Cooper
  2024-09-24 16:42 ` [PATCH v2 2/2] xen: move per-cpu area management into common code Oleksii Kurochko
  1 sibling, 1 reply; 10+ messages in thread
From: Oleksii Kurochko @ 2024-09-24 16:42 UTC (permalink / raw)
  To: xen-devel
  Cc: Oleksii Kurochko, Stefano Stabellini, Julien Grall,
	Bertrand Marquis, Michal Orzel, Volodymyr Babchuk, Andrew Cooper,
	Jan Beulich, Shawn Anastasio, Roger Pau Monné, Julien Grall

Introduce PERCPU_BSS macro which manages:
 * Alignment of the section start
 * Insertion of per-CPU data sections
 * Alignment and start/end markers for per-CPU data
This change simplifies the linker script maintenance and ensures a unified
approach for per-CPU sections across different architectures.

Refactor the linker scripts for Arm, PPC, and x86 architectures by using
the common macro PERCPU_BSS defined in xen/xen.lds.h to handle per-CPU
data sections.

No functional changes.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Julien Grall <jgrall@amazon.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
Changes in V2:
 - rename PERCPU_SECTION to PERCPU_BSS
 - update the commit message
 - add Acked-by: Julien Grall <jgrall@amazon.com>
 - add Acked-by: Jan Beulich <jbeulich@suse.com>
---

 xen/arch/arm/xen.lds.S    |  9 +--------
 xen/arch/ppc/xen.lds.S    |  9 +--------
 xen/arch/x86/xen.lds.S    |  9 +--------
 xen/include/xen/xen.lds.h | 10 ++++++++++
 4 files changed, 13 insertions(+), 24 deletions(-)

diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
index bd884664ad..0987052f1a 100644
--- a/xen/arch/arm/xen.lds.S
+++ b/xen/arch/arm/xen.lds.S
@@ -198,14 +198,7 @@ SECTIONS
        __bss_start = .;
        *(.bss.stack_aligned)
        *(.bss.page_aligned)
-       . = ALIGN(PAGE_SIZE);
-       __per_cpu_start = .;
-       *(.bss.percpu.page_aligned)
-       *(.bss.percpu)
-       . = ALIGN(SMP_CACHE_BYTES);
-       *(.bss.percpu.read_mostly)
-       . = ALIGN(SMP_CACHE_BYTES);
-       __per_cpu_data_end = .;
+       PERCPU_BSS
        *(.bss .bss.*)
        . = ALIGN(POINTER_ALIGN);
        __bss_end = .;
diff --git a/xen/arch/ppc/xen.lds.S b/xen/arch/ppc/xen.lds.S
index 38cd857187..0c4b94814b 100644
--- a/xen/arch/ppc/xen.lds.S
+++ b/xen/arch/ppc/xen.lds.S
@@ -148,14 +148,7 @@ SECTIONS
         __bss_start = .;
         *(.bss.stack_aligned)
         *(.bss.page_aligned)
-        . = ALIGN(PAGE_SIZE);
-        __per_cpu_start = .;
-        *(.bss.percpu.page_aligned)
-        *(.bss.percpu)
-        . = ALIGN(SMP_CACHE_BYTES);
-        *(.bss.percpu.read_mostly)
-        . = ALIGN(SMP_CACHE_BYTES);
-        __per_cpu_data_end = .;
+        PERCPU_BSS
         *(.bss .bss.*)
         . = ALIGN(POINTER_ALIGN);
         __bss_end = .;
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index d48de67cfd..b60d2f0d82 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -321,14 +321,7 @@ SECTIONS
   DECL_SECTION(.bss) {
        __bss_start = .;
        *(.bss.page_aligned*)
-       . = ALIGN(PAGE_SIZE);
-       __per_cpu_start = .;
-       *(.bss.percpu.page_aligned)
-       *(.bss.percpu)
-       . = ALIGN(SMP_CACHE_BYTES);
-       *(.bss.percpu.read_mostly)
-       . = ALIGN(SMP_CACHE_BYTES);
-       __per_cpu_data_end = .;
+       PERCPU_BSS
        *(.bss .bss.*)
        . = ALIGN(POINTER_ALIGN);
        __bss_end = .;
diff --git a/xen/include/xen/xen.lds.h b/xen/include/xen/xen.lds.h
index a17810bb28..24b8900ffe 100644
--- a/xen/include/xen/xen.lds.h
+++ b/xen/include/xen/xen.lds.h
@@ -151,6 +151,16 @@
 #define LOCK_PROFILE_DATA
 #endif
 
+#define PERCPU_BSS                 \
+       . = ALIGN(PAGE_SIZE);       \
+       __per_cpu_start = .;        \
+       *(.bss.percpu.page_aligned) \
+       *(.bss.percpu)              \
+       . = ALIGN(SMP_CACHE_BYTES); \
+       *(.bss.percpu.read_mostly)  \
+       . = ALIGN(SMP_CACHE_BYTES); \
+       __per_cpu_data_end = .;     \
+
 #ifdef CONFIG_HAS_VPCI
 #define VPCI_ARRAY               \
        . = ALIGN(POINTER_ALIGN); \
-- 
2.46.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 2/2] xen: move per-cpu area management into common code
  2024-09-24 16:42 [PATCH v2 0/2] Move percpu code to common Oleksii Kurochko
  2024-09-24 16:42 ` [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion Oleksii Kurochko
@ 2024-09-24 16:42 ` Oleksii Kurochko
  2024-09-25 15:12   ` Jan Beulich
  1 sibling, 1 reply; 10+ messages in thread
From: Oleksii Kurochko @ 2024-09-24 16:42 UTC (permalink / raw)
  To: xen-devel
  Cc: Oleksii Kurochko, Stefano Stabellini, Julien Grall,
	Bertrand Marquis, Michal Orzel, Volodymyr Babchuk, Andrew Cooper,
	Jan Beulich, Shawn Anastasio, Alistair Francis, Bob Eshleman,
	Connor Davis, Roger Pau Monné

Centralize per-cpu area management to reduce code duplication and
enhance maintainability across architectures.

The per-cpu area management code, which is largely common among
architectures, is moved to a shared implementation in
xen/common/percpu.c. This change includes:
 * Remove percpu.c from the X86 and Arm architectures.
 * For x86, define INVALID_PERCPU_AREAS and PARK_OFFLINE_CPUS.
 * Drop the declaration of __per_cpu_offset[] from stubs.c in
   PPC and RISC-V to facilitate the build of the common per-cpu code.

No functional changes for x86.

For Arm add support of CPU_RESUME_FAILED, CPU_REMOVE and freeing of
percpu in the case when system_state != SYS_STATE_suspend.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
Changes in V2:
 - move definition of park_offline_cpus for Arm, PPC and RISC-V to
   <asm-generic/percpu.h>
 - add to arm/asm/smp.h inclusion of <xen/percpu.h>
   ( at least, it is needed as it uses DECLARE_PER_CPU and also
   to not break the build because of moved definition of 
   park_offline_cpus to asm-generic/percpu.h )
 - remove x86/percpu.c as all the code was moved to common percpu.c.
 - add define PARK_OFFLINE_CPUS to x86/asm/percpu.h as x86 defines it
   in own way.
 - drop ARCH_PERCPU_AREA_CHECK and ARCH_CPU_PERCPU_CALLBACK as the code
   inside this definitions were integrated to common code.
 - use park_offline_cpus ? 0 : -EBUSY;
   instead of arch_percpu_area_init_status() in init_percpu_area().
 - update cpu_percpu_callback() to handle CPU_UP_CANCELED, case CPU_DEAD,
   case CPU_RESUME_FAILED and also CPU parking and SYS_STATE_suspend.
 - move declaration of percpu_init_areas() to xen/percpu.h.
---
 xen/arch/arm/Makefile             |   1 -
 xen/arch/arm/include/asm/smp.h    |   7 +-
 xen/arch/arm/percpu.c             |  85 -----------------------
 xen/arch/ppc/include/asm/smp.h    |   6 --
 xen/arch/ppc/stubs.c              |   1 -
 xen/arch/riscv/include/asm/smp.h  |   6 --
 xen/arch/riscv/stubs.c            |   1 -
 xen/arch/x86/Makefile             |   1 -
 xen/arch/x86/include/asm/Makefile |   1 -
 xen/arch/x86/include/asm/percpu.h |  16 +++++
 xen/arch/x86/percpu.c             | 112 ------------------------------
 xen/common/Makefile               |   1 +
 xen/common/percpu.c               | 110 +++++++++++++++++++++++++++++
 xen/include/asm-generic/percpu.h  |   9 ++-
 xen/include/xen/percpu.h          |   4 ++
 15 files changed, 140 insertions(+), 221 deletions(-)
 delete mode 100644 xen/arch/arm/percpu.c
 create mode 100644 xen/arch/x86/include/asm/percpu.h
 delete mode 100644 xen/arch/x86/percpu.c
 create mode 100644 xen/common/percpu.c

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 7792bff597..e4ad1ce851 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -39,7 +39,6 @@ obj-$(CONFIG_MEM_ACCESS) += mem_access.o
 obj-y += mm.o
 obj-y += monitor.o
 obj-y += p2m.o
-obj-y += percpu.o
 obj-y += platform.o
 obj-y += platform_hypercall.o
 obj-y += physdev.o
diff --git a/xen/arch/arm/include/asm/smp.h b/xen/arch/arm/include/asm/smp.h
index e99a3a3f53..8f765ed12a 100644
--- a/xen/arch/arm/include/asm/smp.h
+++ b/xen/arch/arm/include/asm/smp.h
@@ -2,6 +2,7 @@
 #define __ASM_SMP_H
 
 #ifndef __ASSEMBLY__
+#include <xen/percpu.h>
 #include <xen/cpumask.h>
 #include <asm/current.h>
 #endif
@@ -12,12 +13,6 @@ extern unsigned long smp_up_cpu;
 DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask);
 DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask);
 
-/*
- * Do we, for platform reasons, need to actually keep CPUs online when we
- * would otherwise prefer them to be off?
- */
-#define park_offline_cpus false
-
 extern void noreturn stop_cpu(void);
 
 extern int arch_smp_init(void);
diff --git a/xen/arch/arm/percpu.c b/xen/arch/arm/percpu.c
deleted file mode 100644
index 87fe960330..0000000000
--- a/xen/arch/arm/percpu.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#include <xen/percpu.h>
-#include <xen/cpu.h>
-#include <xen/init.h>
-#include <xen/mm.h>
-#include <xen/rcupdate.h>
-
-unsigned long __per_cpu_offset[NR_CPUS];
-#define INVALID_PERCPU_AREA (-(long)__per_cpu_start)
-#define PERCPU_ORDER (get_order_from_bytes(__per_cpu_data_end-__per_cpu_start))
-
-void __init percpu_init_areas(void)
-{
-    unsigned int cpu;
-    for ( cpu = 1; cpu < NR_CPUS; cpu++ )
-        __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
-}
-
-static int init_percpu_area(unsigned int cpu)
-{
-    char *p;
-    if ( __per_cpu_offset[cpu] != INVALID_PERCPU_AREA )
-        return -EBUSY;
-    if ( (p = alloc_xenheap_pages(PERCPU_ORDER, 0)) == NULL )
-        return -ENOMEM;
-    memset(p, 0, __per_cpu_data_end - __per_cpu_start);
-    __per_cpu_offset[cpu] = p - __per_cpu_start;
-    return 0;
-}
-
-struct free_info {
-    unsigned int cpu;
-    struct rcu_head rcu;
-};
-static DEFINE_PER_CPU(struct free_info, free_info);
-
-static void _free_percpu_area(struct rcu_head *head)
-{
-    struct free_info *info = container_of(head, struct free_info, rcu);
-    unsigned int cpu = info->cpu;
-    char *p = __per_cpu_start + __per_cpu_offset[cpu];
-    free_xenheap_pages(p, PERCPU_ORDER);
-    __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
-}
-
-static void free_percpu_area(unsigned int cpu)
-{
-    struct free_info *info = &per_cpu(free_info, cpu);
-    info->cpu = cpu;
-    call_rcu(&info->rcu, _free_percpu_area);
-}
-
-static int cpu_percpu_callback(
-    struct notifier_block *nfb, unsigned long action, void *hcpu)
-{
-    unsigned int cpu = (unsigned long)hcpu;
-    int rc = 0;
-
-    switch ( action )
-    {
-    case CPU_UP_PREPARE:
-        rc = init_percpu_area(cpu);
-        break;
-    case CPU_UP_CANCELED:
-    case CPU_DEAD:
-        free_percpu_area(cpu);
-        break;
-    default:
-        break;
-    }
-
-    return notifier_from_errno(rc);
-}
-
-static struct notifier_block cpu_percpu_nfb = {
-    .notifier_call = cpu_percpu_callback,
-    .priority = 100 /* highest priority */
-};
-
-static int __init percpu_presmp_init(void)
-{
-    register_cpu_notifier(&cpu_percpu_nfb);
-    return 0;
-}
-presmp_initcall(percpu_presmp_init);
diff --git a/xen/arch/ppc/include/asm/smp.h b/xen/arch/ppc/include/asm/smp.h
index 7b1517ce18..2b872218be 100644
--- a/xen/arch/ppc/include/asm/smp.h
+++ b/xen/arch/ppc/include/asm/smp.h
@@ -7,10 +7,4 @@
 DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask);
 DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask);
 
-/*
- * Do we, for platform reasons, need to actually keep CPUs online when we
- * would otherwise prefer them to be off?
- */
-#define park_offline_cpus false
-
 #endif
diff --git a/xen/arch/ppc/stubs.c b/xen/arch/ppc/stubs.c
index bdb5f8c66d..fff82f5cf3 100644
--- a/xen/arch/ppc/stubs.c
+++ b/xen/arch/ppc/stubs.c
@@ -141,7 +141,6 @@ void smp_send_state_dump(unsigned int cpu)
 /* domain.c */
 
 DEFINE_PER_CPU(struct vcpu *, curr_vcpu);
-unsigned long __per_cpu_offset[NR_CPUS];
 
 void context_switch(struct vcpu *prev, struct vcpu *next)
 {
diff --git a/xen/arch/riscv/include/asm/smp.h b/xen/arch/riscv/include/asm/smp.h
index b1ea91b1eb..c63c499d12 100644
--- a/xen/arch/riscv/include/asm/smp.h
+++ b/xen/arch/riscv/include/asm/smp.h
@@ -8,12 +8,6 @@
 DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask);
 DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask);
 
-/*
- * Do we, for platform reasons, need to actually keep CPUs online when we
- * would otherwise prefer them to be off?
- */
-#define park_offline_cpus false
-
 #endif
 
 /*
diff --git a/xen/arch/riscv/stubs.c b/xen/arch/riscv/stubs.c
index 2aa245f272..5951b0ce91 100644
--- a/xen/arch/riscv/stubs.c
+++ b/xen/arch/riscv/stubs.c
@@ -133,7 +133,6 @@ void smp_send_state_dump(unsigned int cpu)
 /* domain.c */
 
 DEFINE_PER_CPU(struct vcpu *, curr_vcpu);
-unsigned long __per_cpu_offset[NR_CPUS];
 
 void context_switch(struct vcpu *prev, struct vcpu *next)
 {
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 00ab091634..bf68f38c0e 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -54,7 +54,6 @@ obj-y += mpparse.o
 obj-y += nmi.o
 obj-y += numa.o
 obj-y += pci.o
-obj-y += percpu.o
 obj-y += physdev.o
 obj-$(CONFIG_COMPAT) += x86_64/physdev.o
 obj-y += psr.o
diff --git a/xen/arch/x86/include/asm/Makefile b/xen/arch/x86/include/asm/Makefile
index daab34ff0a..2c27787d31 100644
--- a/xen/arch/x86/include/asm/Makefile
+++ b/xen/arch/x86/include/asm/Makefile
@@ -1,3 +1,2 @@
 # SPDX-License-Identifier: GPL-2.0-only
 generic-y += div64.h
-generic-y += percpu.h
diff --git a/xen/arch/x86/include/asm/percpu.h b/xen/arch/x86/include/asm/percpu.h
new file mode 100644
index 0000000000..b892dc2f00
--- /dev/null
+++ b/xen/arch/x86/include/asm/percpu.h
@@ -0,0 +1,16 @@
+#ifndef __X86_PERCPU_H__
+#define __X86_PERCPU_H__
+
+#define PARK_OFFLINE_CPUS
+
+#include <asm-generic/percpu.h>
+
+/*
+ * Force uses of per_cpu() with an invalid area to attempt to access the
+ * middle of the non-canonical address space resulting in a #GP, rather than a
+ * possible #PF at (NULL + a little) which has security implications in the
+ * context of PV guests.
+ */
+#define INVALID_PERCPU_AREA (0x8000000000000000UL - (unsigned long)__per_cpu_start)
+
+#endif /* __X86_PERCPU_H__ */
diff --git a/xen/arch/x86/percpu.c b/xen/arch/x86/percpu.c
deleted file mode 100644
index 3205eacea6..0000000000
--- a/xen/arch/x86/percpu.c
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <xen/percpu.h>
-#include <xen/cpu.h>
-#include <xen/init.h>
-#include <xen/mm.h>
-#include <xen/rcupdate.h>
-
-unsigned long __per_cpu_offset[NR_CPUS];
-
-/*
- * Force uses of per_cpu() with an invalid area to attempt to access the
- * middle of the non-canonical address space resulting in a #GP, rather than a
- * possible #PF at (NULL + a little) which has security implications in the
- * context of PV guests.
- */
-#define INVALID_PERCPU_AREA (0x8000000000000000UL - (unsigned long)__per_cpu_start)
-#define PERCPU_ORDER get_order_from_bytes(__per_cpu_data_end - __per_cpu_start)
-
-void __init percpu_init_areas(void)
-{
-    unsigned int cpu;
-
-    for ( cpu = 1; cpu < NR_CPUS; cpu++ )
-        __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
-}
-
-static int init_percpu_area(unsigned int cpu)
-{
-    char *p;
-
-    if ( __per_cpu_offset[cpu] != INVALID_PERCPU_AREA )
-        return 0;
-
-    if ( (p = alloc_xenheap_pages(PERCPU_ORDER, 0)) == NULL )
-        return -ENOMEM;
-
-    memset(p, 0, __per_cpu_data_end - __per_cpu_start);
-    __per_cpu_offset[cpu] = p - __per_cpu_start;
-
-    return 0;
-}
-
-struct free_info {
-    unsigned int cpu;
-    struct rcu_head rcu;
-};
-static DEFINE_PER_CPU(struct free_info, free_info);
-
-static void cf_check _free_percpu_area(struct rcu_head *head)
-{
-    struct free_info *info = container_of(head, struct free_info, rcu);
-    unsigned int cpu = info->cpu;
-    char *p = __per_cpu_start + __per_cpu_offset[cpu];
-
-    free_xenheap_pages(p, PERCPU_ORDER);
-    __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
-}
-
-static void free_percpu_area(unsigned int cpu)
-{
-    struct free_info *info = &per_cpu(free_info, cpu);
-
-    info->cpu = cpu;
-    call_rcu(&info->rcu, _free_percpu_area);
-}
-
-static int cf_check cpu_percpu_callback(
-    struct notifier_block *nfb, unsigned long action, void *hcpu)
-{
-    unsigned int cpu = (unsigned long)hcpu;
-    int rc = 0;
-
-    switch ( action )
-    {
-    case CPU_UP_PREPARE:
-        rc = init_percpu_area(cpu);
-        break;
-    case CPU_UP_CANCELED:
-    case CPU_DEAD:
-    case CPU_RESUME_FAILED:
-        if ( !park_offline_cpus && system_state != SYS_STATE_suspend )
-            free_percpu_area(cpu);
-        break;
-    case CPU_REMOVE:
-        if ( park_offline_cpus )
-            free_percpu_area(cpu);
-        break;
-    }
-
-    return notifier_from_errno(rc);
-}
-
-static struct notifier_block cpu_percpu_nfb = {
-    .notifier_call = cpu_percpu_callback,
-    .priority = 100 /* highest priority */
-};
-
-static int __init cf_check percpu_presmp_init(void)
-{
-    register_cpu_notifier(&cpu_percpu_nfb);
-
-    return 0;
-}
-presmp_initcall(percpu_presmp_init);
-
-/*
- * Local variables:
- * mode: C
- * c-file-style: "BSD"
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/xen/common/Makefile b/xen/common/Makefile
index fc52e0857d..f90bb00d23 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -31,6 +31,7 @@ obj-y += notifier.o
 obj-$(CONFIG_NUMA) += numa.o
 obj-y += page_alloc.o
 obj-y += pdx.o
+obj-y += percpu.o
 obj-$(CONFIG_PERF_COUNTERS) += perfc.o
 obj-bin-$(CONFIG_HAS_PMAP) += pmap.init.o
 obj-y += preempt.o
diff --git a/xen/common/percpu.c b/xen/common/percpu.c
new file mode 100644
index 0000000000..58a774154d
--- /dev/null
+++ b/xen/common/percpu.c
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <xen/percpu.h>
+#include <xen/cpu.h>
+#include <xen/init.h>
+#include <xen/mm.h>
+#include <xen/rcupdate.h>
+
+#ifndef INVALID_PERCPU_AREA
+#define INVALID_PERCPU_AREA (-(long)__per_cpu_start)
+#endif
+
+#define PERCPU_ORDER get_order_from_bytes(__per_cpu_data_end - __per_cpu_start)
+
+unsigned long __per_cpu_offset[NR_CPUS];
+
+void __init percpu_init_areas(void)
+{
+    unsigned int cpu;
+
+    for ( cpu = 1; cpu < NR_CPUS; cpu++ )
+        __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
+}
+
+static int init_percpu_area(unsigned int cpu)
+{
+    char *p;
+
+    if ( __per_cpu_offset[cpu] != INVALID_PERCPU_AREA )
+        return park_offline_cpus ? 0 : -EBUSY;
+
+    if ( (p = alloc_xenheap_pages(PERCPU_ORDER, 0)) == NULL )
+        return -ENOMEM;
+
+    memset(p, 0, __per_cpu_data_end - __per_cpu_start);
+    __per_cpu_offset[cpu] = p - __per_cpu_start;
+
+    return 0;
+}
+
+struct free_info {
+    unsigned int cpu;
+    struct rcu_head rcu;
+};
+static DEFINE_PER_CPU(struct free_info, free_info);
+
+static void cf_check _free_percpu_area(struct rcu_head *head)
+{
+    struct free_info *info = container_of(head, struct free_info, rcu);
+    unsigned int cpu = info->cpu;
+    char *p = __per_cpu_start + __per_cpu_offset[cpu];
+
+    free_xenheap_pages(p, PERCPU_ORDER);
+    __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
+}
+
+static void free_percpu_area(unsigned int cpu)
+{
+    struct free_info *info = &per_cpu(free_info, cpu);
+
+    info->cpu = cpu;
+    call_rcu(&info->rcu, _free_percpu_area);
+}
+
+static int cf_check cpu_percpu_callback(
+    struct notifier_block *nfb, unsigned long action, void *hcpu)
+{
+    unsigned int cpu = (unsigned long)hcpu;
+    int rc = 0;
+
+    switch ( action )
+    {
+    case CPU_UP_PREPARE:
+        rc = init_percpu_area(cpu);
+        break;
+    case CPU_UP_CANCELED:
+    case CPU_DEAD:
+    case CPU_RESUME_FAILED:
+        if ( !park_offline_cpus && system_state != SYS_STATE_suspend )
+            free_percpu_area(cpu);
+        break;
+    case CPU_REMOVE:
+        if ( park_offline_cpus )
+            free_percpu_area(cpu);
+        break;
+    }
+
+    return notifier_from_errno(rc);
+}
+
+static struct notifier_block cpu_percpu_nfb = {
+    .notifier_call = cpu_percpu_callback,
+    .priority = 100 /* highest priority */
+};
+
+static int __init cf_check percpu_presmp_init(void)
+{
+    register_cpu_notifier(&cpu_percpu_nfb);
+
+    return 0;
+}
+presmp_initcall(percpu_presmp_init);
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/include/asm-generic/percpu.h b/xen/include/asm-generic/percpu.h
index 60af4f9ff9..d36afda2dd 100644
--- a/xen/include/asm-generic/percpu.h
+++ b/xen/include/asm-generic/percpu.h
@@ -10,7 +10,14 @@
 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);
+
+#ifndef PARK_OFFLINE_CPUS
+/*
+ * Do we, for platform reasons, need to actually keep CPUs online when we
+ * would otherwise prefer them to be off?
+ */
+#define park_offline_cpus false
+#endif
 
 #define per_cpu(var, cpu)  \
     (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
diff --git a/xen/include/xen/percpu.h b/xen/include/xen/percpu.h
index 57522f346b..90c4e120ec 100644
--- a/xen/include/xen/percpu.h
+++ b/xen/include/xen/percpu.h
@@ -33,4 +33,8 @@
 #define get_cpu_var(var) this_cpu(var)
 #define put_cpu_var(var)
 
+#ifndef __ASSEMBLY__
+void percpu_init_areas(void);
+#endif
+
 #endif /* __XEN_PERCPU_H__ */
-- 
2.46.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion
  2024-09-24 16:42 ` [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion Oleksii Kurochko
@ 2024-09-24 17:01   ` Andrew Cooper
  2024-09-25  9:23     ` oleksii.kurochko
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Cooper @ 2024-09-24 17:01 UTC (permalink / raw)
  To: Oleksii Kurochko, xen-devel
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Jan Beulich, Shawn Anastasio,
	Roger Pau Monné, Julien Grall

On 24/09/2024 5:42 pm, Oleksii Kurochko wrote:
> Introduce PERCPU_BSS macro which manages:
>  * Alignment of the section start
>  * Insertion of per-CPU data sections
>  * Alignment and start/end markers for per-CPU data
> This change simplifies the linker script maintenance and ensures a unified
> approach for per-CPU sections across different architectures.
>
> Refactor the linker scripts for Arm, PPC, and x86 architectures by using
> the common macro PERCPU_BSS defined in xen/xen.lds.h to handle per-CPU
> data sections.
>
> No functional changes.
>
> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> Acked-by: Julien Grall <jgrall@amazon.com>
> Acked-by: Jan Beulich <jbeulich@suse.com>
> ---
> Changes in V2:
>  - rename PERCPU_SECTION to PERCPU_BSS
>  - update the commit message
>  - add Acked-by: Julien Grall <jgrall@amazon.com>
>  - add Acked-by: Jan Beulich <jbeulich@suse.com>
> ---
>
>  xen/arch/arm/xen.lds.S    |  9 +--------
>  xen/arch/ppc/xen.lds.S    |  9 +--------
>  xen/arch/x86/xen.lds.S    |  9 +--------
>  xen/include/xen/xen.lds.h | 10 ++++++++++
>  4 files changed, 13 insertions(+), 24 deletions(-)

Aren't you missing a hunk in riscv/xen.lds.S ?

~Andrew


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion
  2024-09-24 17:01   ` Andrew Cooper
@ 2024-09-25  9:23     ` oleksii.kurochko
  2024-09-25  9:56       ` Jan Beulich
  2024-09-25  9:58       ` Andrew Cooper
  0 siblings, 2 replies; 10+ messages in thread
From: oleksii.kurochko @ 2024-09-25  9:23 UTC (permalink / raw)
  To: Andrew Cooper, xen-devel
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Jan Beulich, Shawn Anastasio,
	Roger Pau Monné, Julien Grall

On Tue, 2024-09-24 at 18:01 +0100, Andrew Cooper wrote:
> On 24/09/2024 5:42 pm, Oleksii Kurochko wrote:
> > Introduce PERCPU_BSS macro which manages:
> >  * Alignment of the section start
> >  * Insertion of per-CPU data sections
> >  * Alignment and start/end markers for per-CPU data
> > This change simplifies the linker script maintenance and ensures a
> > unified
> > approach for per-CPU sections across different architectures.
> > 
> > Refactor the linker scripts for Arm, PPC, and x86 architectures by
> > using
> > the common macro PERCPU_BSS defined in xen/xen.lds.h to handle per-
> > CPU
> > data sections.
> > 
> > No functional changes.
> > 
> > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> > Acked-by: Julien Grall <jgrall@amazon.com>
> > Acked-by: Jan Beulich <jbeulich@suse.com>
> > ---
> > Changes in V2:
> >  - rename PERCPU_SECTION to PERCPU_BSS
> >  - update the commit message
> >  - add Acked-by: Julien Grall <jgrall@amazon.com>
> >  - add Acked-by: Jan Beulich <jbeulich@suse.com>
> > ---
> > 
> >  xen/arch/arm/xen.lds.S    |  9 +--------
> >  xen/arch/ppc/xen.lds.S    |  9 +--------
> >  xen/arch/x86/xen.lds.S    |  9 +--------
> >  xen/include/xen/xen.lds.h | 10 ++++++++++
> >  4 files changed, 13 insertions(+), 24 deletions(-)
> 
> Aren't you missing a hunk in riscv/xen.lds.S ?
I thought it would be better to add a hunk in riscv when
percpu_init_areas() will be called in RISC-V's start_xen().

~ Oleksii


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion
  2024-09-25  9:23     ` oleksii.kurochko
@ 2024-09-25  9:56       ` Jan Beulich
  2024-09-25  9:58       ` Andrew Cooper
  1 sibling, 0 replies; 10+ messages in thread
From: Jan Beulich @ 2024-09-25  9:56 UTC (permalink / raw)
  To: oleksii.kurochko
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Shawn Anastasio, Roger Pau Monné,
	Julien Grall, xen-devel, Andrew Cooper

On 25.09.2024 11:23, oleksii.kurochko@gmail.com wrote:
> On Tue, 2024-09-24 at 18:01 +0100, Andrew Cooper wrote:
>> On 24/09/2024 5:42 pm, Oleksii Kurochko wrote:
>>> Introduce PERCPU_BSS macro which manages:
>>>  * Alignment of the section start
>>>  * Insertion of per-CPU data sections
>>>  * Alignment and start/end markers for per-CPU data
>>> This change simplifies the linker script maintenance and ensures a
>>> unified
>>> approach for per-CPU sections across different architectures.
>>>
>>> Refactor the linker scripts for Arm, PPC, and x86 architectures by
>>> using
>>> the common macro PERCPU_BSS defined in xen/xen.lds.h to handle per-
>>> CPU
>>> data sections.
>>>
>>> No functional changes.
>>>
>>> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
>>> Acked-by: Julien Grall <jgrall@amazon.com>
>>> Acked-by: Jan Beulich <jbeulich@suse.com>
>>> ---
>>> Changes in V2:
>>>  - rename PERCPU_SECTION to PERCPU_BSS
>>>  - update the commit message
>>>  - add Acked-by: Julien Grall <jgrall@amazon.com>
>>>  - add Acked-by: Jan Beulich <jbeulich@suse.com>
>>> ---
>>>
>>>  xen/arch/arm/xen.lds.S    |  9 +--------
>>>  xen/arch/ppc/xen.lds.S    |  9 +--------
>>>  xen/arch/x86/xen.lds.S    |  9 +--------
>>>  xen/include/xen/xen.lds.h | 10 ++++++++++
>>>  4 files changed, 13 insertions(+), 24 deletions(-)
>>
>> Aren't you missing a hunk in riscv/xen.lds.S ?
> I thought it would be better to add a hunk in riscv when
> percpu_init_areas() will be called in RISC-V's start_xen().

But you have the constructs you're replacing for the other architectures
in RISC-V's xen.lds.S as well. They shouldn't stay around. It was actually
an oversight of mine, so to retain my ack you will need to replace that
too.

Jan


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion
  2024-09-25  9:23     ` oleksii.kurochko
  2024-09-25  9:56       ` Jan Beulich
@ 2024-09-25  9:58       ` Andrew Cooper
  2024-09-25 10:11         ` oleksii.kurochko
  1 sibling, 1 reply; 10+ messages in thread
From: Andrew Cooper @ 2024-09-25  9:58 UTC (permalink / raw)
  To: oleksii.kurochko, xen-devel
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Jan Beulich, Shawn Anastasio,
	Roger Pau Monné, Julien Grall

On 25/09/2024 10:23 am, oleksii.kurochko@gmail.com wrote:
> On Tue, 2024-09-24 at 18:01 +0100, Andrew Cooper wrote:
>> On 24/09/2024 5:42 pm, Oleksii Kurochko wrote:
>>> Introduce PERCPU_BSS macro which manages:
>>>  * Alignment of the section start
>>>  * Insertion of per-CPU data sections
>>>  * Alignment and start/end markers for per-CPU data
>>> This change simplifies the linker script maintenance and ensures a
>>> unified
>>> approach for per-CPU sections across different architectures.
>>>
>>> Refactor the linker scripts for Arm, PPC, and x86 architectures by
>>> using
>>> the common macro PERCPU_BSS defined in xen/xen.lds.h to handle per-
>>> CPU
>>> data sections.
>>>
>>> No functional changes.
>>>
>>> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
>>> Acked-by: Julien Grall <jgrall@amazon.com>
>>> Acked-by: Jan Beulich <jbeulich@suse.com>
>>> ---
>>> Changes in V2:
>>>  - rename PERCPU_SECTION to PERCPU_BSS
>>>  - update the commit message
>>>  - add Acked-by: Julien Grall <jgrall@amazon.com>
>>>  - add Acked-by: Jan Beulich <jbeulich@suse.com>
>>> ---
>>>
>>>  xen/arch/arm/xen.lds.S    |  9 +--------
>>>  xen/arch/ppc/xen.lds.S    |  9 +--------
>>>  xen/arch/x86/xen.lds.S    |  9 +--------
>>>  xen/include/xen/xen.lds.h | 10 ++++++++++
>>>  4 files changed, 13 insertions(+), 24 deletions(-)
>> Aren't you missing a hunk in riscv/xen.lds.S ?
> I thought it would be better to add a hunk in riscv when
> percpu_init_areas() will be called in RISC-V's start_xen().

If you didn't have the old form already, I'd agree.  But right now this
leaves RISC-V being the odd-architecture-out.

I can fix it on commit, to save another posting, if you're happy?

~Andrew


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion
  2024-09-25  9:58       ` Andrew Cooper
@ 2024-09-25 10:11         ` oleksii.kurochko
  0 siblings, 0 replies; 10+ messages in thread
From: oleksii.kurochko @ 2024-09-25 10:11 UTC (permalink / raw)
  To: Andrew Cooper, xen-devel
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Jan Beulich, Shawn Anastasio,
	Roger Pau Monné, Julien Grall

On Wed, 2024-09-25 at 10:58 +0100, Andrew Cooper wrote:
> On 25/09/2024 10:23 am, oleksii.kurochko@gmail.com wrote:
> > On Tue, 2024-09-24 at 18:01 +0100, Andrew Cooper wrote:
> > > On 24/09/2024 5:42 pm, Oleksii Kurochko wrote:
> > > > Introduce PERCPU_BSS macro which manages:
> > > >  * Alignment of the section start
> > > >  * Insertion of per-CPU data sections
> > > >  * Alignment and start/end markers for per-CPU data
> > > > This change simplifies the linker script maintenance and
> > > > ensures a
> > > > unified
> > > > approach for per-CPU sections across different architectures.
> > > > 
> > > > Refactor the linker scripts for Arm, PPC, and x86 architectures
> > > > by
> > > > using
> > > > the common macro PERCPU_BSS defined in xen/xen.lds.h to handle
> > > > per-
> > > > CPU
> > > > data sections.
> > > > 
> > > > No functional changes.
> > > > 
> > > > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> > > > Acked-by: Julien Grall <jgrall@amazon.com>
> > > > Acked-by: Jan Beulich <jbeulich@suse.com>
> > > > ---
> > > > Changes in V2:
> > > >  - rename PERCPU_SECTION to PERCPU_BSS
> > > >  - update the commit message
> > > >  - add Acked-by: Julien Grall <jgrall@amazon.com>
> > > >  - add Acked-by: Jan Beulich <jbeulich@suse.com>
> > > > ---
> > > > 
> > > >  xen/arch/arm/xen.lds.S    |  9 +--------
> > > >  xen/arch/ppc/xen.lds.S    |  9 +--------
> > > >  xen/arch/x86/xen.lds.S    |  9 +--------
> > > >  xen/include/xen/xen.lds.h | 10 ++++++++++
> > > >  4 files changed, 13 insertions(+), 24 deletions(-)
> > > Aren't you missing a hunk in riscv/xen.lds.S ?
> > I thought it would be better to add a hunk in riscv when
> > percpu_init_areas() will be called in RISC-V's start_xen().
> 
> If you didn't have the old form already, I'd agree.  But right now
> this
> leaves RISC-V being the odd-architecture-out.
Oh, I just missed that I had them already. I am just confused with my
another patch series connected to DT device tree info section.

> 
> I can fix it on commit, to save another posting, if you're happy?
I would be happy with that. Thanks.


~ Oleksii


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] xen: move per-cpu area management into common code
  2024-09-24 16:42 ` [PATCH v2 2/2] xen: move per-cpu area management into common code Oleksii Kurochko
@ 2024-09-25 15:12   ` Jan Beulich
  2024-09-26  8:28     ` oleksii.kurochko
  0 siblings, 1 reply; 10+ messages in thread
From: Jan Beulich @ 2024-09-25 15:12 UTC (permalink / raw)
  To: Oleksii Kurochko
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Andrew Cooper, Shawn Anastasio,
	Alistair Francis, Bob Eshleman, Connor Davis,
	Roger Pau Monné, xen-devel

On 24.09.2024 18:42, Oleksii Kurochko wrote:
> --- a/xen/include/asm-generic/percpu.h
> +++ b/xen/include/asm-generic/percpu.h
> @@ -10,7 +10,14 @@
>  extern char __per_cpu_start[];
>  extern const char __per_cpu_data_end[];

Afaics the only users of these two are in the new common/percpu.c. These
decls want to mover there then, I think, to limit exposure.

>  extern unsigned long __per_cpu_offset[NR_CPUS];

The definition for this moves to the new common/percpu.c. Hence this
declaration wants to move to xen/percpu.c.

Overall with the generalization you do I'd expect asm-generic/percpu.h
to go away altogether. That is, ...

> -void percpu_init_areas(void);
> +
> +#ifndef PARK_OFFLINE_CPUS
> +/*
> + * Do we, for platform reasons, need to actually keep CPUs online when we
> + * would otherwise prefer them to be off?
> + */
> +#define park_offline_cpus false
> +#endif

... this, for example, would likely also better be put in xen/percpu.h in
the new model.

Jan


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/2] xen: move per-cpu area management into common code
  2024-09-25 15:12   ` Jan Beulich
@ 2024-09-26  8:28     ` oleksii.kurochko
  0 siblings, 0 replies; 10+ messages in thread
From: oleksii.kurochko @ 2024-09-26  8:28 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Julien Grall, Bertrand Marquis, Michal Orzel,
	Volodymyr Babchuk, Andrew Cooper, Shawn Anastasio,
	Alistair Francis, Bob Eshleman, Connor Davis,
	Roger Pau Monné, xen-devel

On Wed, 2024-09-25 at 17:12 +0200, Jan Beulich wrote:
> On 24.09.2024 18:42, Oleksii Kurochko wrote:
> > --- a/xen/include/asm-generic/percpu.h
> > +++ b/xen/include/asm-generic/percpu.h
> > @@ -10,7 +10,14 @@
> >  extern char __per_cpu_start[];
> >  extern const char __per_cpu_data_end[];
> 
> Afaics the only users of these two are in the new common/percpu.c.
> These
> decls want to mover there then, I think, to limit exposure.
> 
> >  extern unsigned long __per_cpu_offset[NR_CPUS];
> 
> The definition for this moves to the new common/percpu.c. Hence this
> declaration wants to move to xen/percpu.c.
> 
> Overall with the generalization you do I'd expect asm-
> generic/percpu.h
> to go away altogether. That is, ...
> 
> > -void percpu_init_areas(void);
> > +
> > +#ifndef PARK_OFFLINE_CPUS
> > +/*
> > + * Do we, for platform reasons, need to actually keep CPUs online
> > when we
> > + * would otherwise prefer them to be off?
> > + */
> > +#define park_offline_cpus false
> > +#endif
> 
> ... this, for example, would likely also better be put in
> xen/percpu.h in
> the new model.
Agree, we could move everything to xen/percpu.h and just leave asm-
generic/percpu.h empty for Arm, PPC and RISC-V usage and define
asm/percpu.h only for x86.

I will stick to this approach.

Thanks.

~ Oleksii


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-09-26  8:28 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-24 16:42 [PATCH v2 0/2] Move percpu code to common Oleksii Kurochko
2024-09-24 16:42 ` [PATCH v2 1/2] xen: introduce common macros for per-CPU sections defintion Oleksii Kurochko
2024-09-24 17:01   ` Andrew Cooper
2024-09-25  9:23     ` oleksii.kurochko
2024-09-25  9:56       ` Jan Beulich
2024-09-25  9:58       ` Andrew Cooper
2024-09-25 10:11         ` oleksii.kurochko
2024-09-24 16:42 ` [PATCH v2 2/2] xen: move per-cpu area management into common code Oleksii Kurochko
2024-09-25 15:12   ` Jan Beulich
2024-09-26  8:28     ` oleksii.kurochko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.