[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] xen/link: Move SCHEDULER_ARRAY into .rodata





On 11/13/26 8:31 AM, Orzel, Michal wrote:


On 12-Nov-26 19:36, Andrew Cooper wrote:
This is a list of pointers which is only ever read.
I think that's not true. See sched_test_func() macro in scheduler_init() that
assigns NULL in case the scheduler does not implement the required hook.

The same happens a few lines below if the scheduler's global_init() fails.

Neither NULL assignment can trigger today (both global_init()
implementations return 0 and all in-tree schedulers provide the
hooks), but I think the writes need dropping first, and the entries want to become "const struct sched_ops *const" (both in REGISTER_SCHEDULER() and the __{start,end}_schedulers_array declarations) so the compiler enforces the property. It would also be nice to rename .data.schedulers to .rodata.schedulers while moving it.

The linker script placement itself looks fine to me.

~ Oleksii


In the ARM linker file, fix some adjacent misalignment.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <jbeulich@xxxxxxxx>
CC: Roger Pau Monné <roger@xxxxxxxxxxxxxx>
CC: Teddy Astie <teddy.astie@xxxxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Julien Grall <julien@xxxxxxx>
CC: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
CC: Bertrand Marquis <bertrand.marquis@xxxxxxx>
CC: Michal Orzel <michal.orzel@xxxxxxx>
CC: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
CC: Baptiste Le Duc <baptiste.le-duc@xxxxxxxxxx>
CC: Timothy Pearson <tpearson@xxxxxxxxxxxxxxxxxxxxx>
---
  xen/arch/arm/xen.lds.S   | 6 +++---
  xen/arch/ppc/xen.lds.S   | 2 +-
  xen/arch/riscv/xen.lds.S | 2 +-
  xen/arch/x86/xen.lds.S   | 2 +-
  4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
index 613511390ff4..d1bb6c62d208 100644
--- a/xen/arch/arm/xen.lds.S
+++ b/xen/arch/arm/xen.lds.S
@@ -51,9 +51,10 @@ SECTIONS
. = ALIGN(PAGE_SIZE);
    .rodata : {
-        _srodata = .;          /* Read-only data */
+       _srodata = .;          /* Read-only data */
- BUGFRAMES
+       BUGFRAMES
+       SCHEDULER_ARRAY
*(.rodata)
         *(.rodata.*)
@@ -93,7 +94,6 @@ SECTIONS
    .data : {                    /* Data */
         *(.data.page_aligned)
- SCHEDULER_ARRAY
         HYPFS_PARAM
*(.data .data.*)
diff --git a/xen/arch/ppc/xen.lds.S b/xen/arch/ppc/xen.lds.S
index 37256c8865a9..cddb70855307 100644
--- a/xen/arch/ppc/xen.lds.S
+++ b/xen/arch/ppc/xen.lds.S
@@ -48,6 +48,7 @@ SECTIONS
          _srodata = .;          /* Read-only data */
BUGFRAMES
+        SCHEDULER_ARRAY
*(.rodata)
          *(.rodata.*)
@@ -84,7 +85,6 @@ SECTIONS
      DECL_SECTION(.data) {                    /* Data */
          *(.data.page_aligned)
- SCHEDULER_ARRAY
          HYPFS_PARAM
*(.data .data.*)
diff --git a/xen/arch/riscv/xen.lds.S b/xen/arch/riscv/xen.lds.S
index d9375a961697..250ee3f36f4f 100644
--- a/xen/arch/riscv/xen.lds.S
+++ b/xen/arch/riscv/xen.lds.S
@@ -43,6 +43,7 @@ SECTIONS
          _srodata = .;          /* Read-only data */
BUGFRAMES
+        SCHEDULER_ARRAY
*(.srodata)
          *(.srodata.*)
@@ -91,7 +92,6 @@ SECTIONS
      .data : {                    /* Data */
          *(.data.page_aligned)
- SCHEDULER_ARRAY
          HYPFS_PARAM
*(.sdata .sdata.*)
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index 8f943e11ead4..925848980219 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -119,6 +119,7 @@ SECTIONS
         __ro_after_init_end = .;
BUGFRAMES
+       SCHEDULER_ARRAY
*(.rodata)
         *(.rodata.*)
@@ -297,7 +298,6 @@ SECTIONS
    DECL_SECTION(.data.read_mostly) {
         *(.data.read_mostly)
- SCHEDULER_ARRAY
         HYPFS_PARAM
    } PHDR(text)





 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.