[Skiboot] [PATCH] Use volatile pointer for constant address asignment
Nicholas Piggin
npiggin at gmail.com
Wed Jan 19 15:21:26 AEDT 2022
Excerpts from Abhishek Singh Tomar's message of January 17, 2022 11:24 pm:
> use volatile pointer to avoid optimization introduced with gcc-11 on constant address asignment to pointer.
> Resolves : the warray ofset warning during compilation.
Hm. What exactly is the warning, and what is the optimization that's
causing breakage?
Thanks,
Nick
>
> Signed-off-by: Abhishek Singh Tomar <abhishek at linux.ibm.com>
> ---
> core/console.c | 2 +-
> core/fast-reboot.c | 6 ++++--
> core/init.c | 6 +++++-
> core/opal-dump.c | 7 ++++---
> hdata/spira.c | 2 +-
> hdata/spira.h | 2 +-
> hw/fsp/fsp.c | 2 +-
> 7 files changed, 17 insertions(+), 10 deletions(-)
>
> diff --git a/core/console.c b/core/console.c
> index 2a150902..229bc84a 100644
> --- a/core/console.c
> +++ b/core/console.c
> @@ -15,7 +15,7 @@
> #include <processor.h>
> #include <cpu.h>
>
> -static char *con_buf = (char *)INMEM_CON_START;
> +static char *volatile con_buf = (char *)INMEM_CON_START;
> static size_t con_in;
> static size_t con_out;
> static bool con_wrapped;
> diff --git a/core/fast-reboot.c b/core/fast-reboot.c
> index fedfa88c..3e3db68e 100644
> --- a/core/fast-reboot.c
> +++ b/core/fast-reboot.c
> @@ -307,6 +307,8 @@ void __noreturn fast_reboot_entry(void);
> void __noreturn fast_reboot_entry(void)
> {
> struct cpu_thread *cpu = this_cpu();
> + void *volatile kerneal_load_base_addr = KERNEL_LOAD_BASE;
> + void *volatile initramfs_load_base_addr = INITRAMFS_LOAD_BASE;
>
> if (proc_gen == proc_gen_p8) {
> /* We reset our ICP first ! Otherwise we might get stray
> @@ -425,8 +427,8 @@ void __noreturn fast_reboot_entry(void)
> * Mambo may have embedded payload here, so don't clear
> * it at all.
> */
> - memset(KERNEL_LOAD_BASE, 0, KERNEL_LOAD_SIZE);
> - memset(INITRAMFS_LOAD_BASE, 0, INITRAMFS_LOAD_SIZE);
> + memset(kerneal_load_base_addr, 0, KERNEL_LOAD_SIZE);
> + memset(initramfs_load_base_addr, 0, INITRAMFS_LOAD_SIZE);
> }
>
> /* Start preloading kernel and ramdisk */
> diff --git a/core/init.c b/core/init.c
> index b4d33518..00f667e1 100644
> --- a/core/init.c
> +++ b/core/init.c
> @@ -869,7 +869,11 @@ void copy_exception_vectors(void)
> * this is the boot flag used by CPUs still potentially entering
> * skiboot.
> */
> - memcpy((void *)0x100, (void *)(SKIBOOT_BASE + 0x100),
> + void *volatile exception_vectors_start_addr = (void*)(SKIBOOT_BASE + 0x100);
> + void *volatile dst = (void*)0x100;
> +
> +
> + memcpy(dst,exception_vectors_start_addr,
> EXCEPTION_VECTORS_END - 0x100);
> sync_icache();
> }
> diff --git a/core/opal-dump.c b/core/opal-dump.c
> index 4f54a3ef..4943fedd 100644
> --- a/core/opal-dump.c
> +++ b/core/opal-dump.c
> @@ -301,6 +301,7 @@ static int64_t opal_mpipl_update(enum opal_mpipl_ops ops,
> u64 src, u64 dest, u64 size)
> {
> int rc;
> + void *volatile mdrt_table_base_addr =(void*) MDRT_TABLE_BASE;
>
> switch (ops) {
> case OPAL_MPIPL_ADD_RANGE:
> @@ -330,7 +331,7 @@ static int64_t opal_mpipl_update(enum opal_mpipl_ops ops,
> free(opal_mpipl_cpu_data);
> opal_mpipl_cpu_data = NULL;
> /* Clear MDRT table */
> - memset((void *)MDRT_TABLE_BASE, 0, MDRT_TABLE_SIZE);
> + memset(mdrt_table_base_addr, 0, MDRT_TABLE_SIZE);
> /* Set MDRT count to max allocated count */
> ntuple_mdrt->act_cnt = cpu_to_be16(MDRT_TABLE_SIZE / sizeof(struct mdrt_table));
> rc = OPAL_SUCCESS;
> @@ -529,8 +530,8 @@ bool is_mpipl_enabled(void)
>
> void opal_mpipl_init(void)
> {
> - void *mdst_base = (void *)MDST_TABLE_BASE;
> - void *mddt_base = (void *)MDDT_TABLE_BASE;
> + void *volatile mdst_base = (void *)MDST_TABLE_BASE;
> + void *volatile mddt_base = (void *)MDDT_TABLE_BASE;
> struct dt_node *dump_node;
>
> dump_node = dt_find_by_path(opal_node, "dump");
> diff --git a/hdata/spira.c b/hdata/spira.c
> index 1a351462..3bbec351 100644
> --- a/hdata/spira.c
> +++ b/hdata/spira.c
> @@ -236,7 +236,7 @@ __section(".spirah.data") struct spirah spirah = {
> };
>
> /* The service processor SPIRA-S structure */
> -struct spiras *spiras;
> +struct spiras *volatile spiras;
>
> /* Overridden for testing. */
> #ifndef spira_check_ptr
> diff --git a/hdata/spira.h b/hdata/spira.h
> index 8def23bd..6df3df56 100644
> --- a/hdata/spira.h
> +++ b/hdata/spira.h
> @@ -150,7 +150,7 @@ struct spiras {
> u8 reserved[0x180];
> } __packed __align(0x100);
>
> -extern struct spiras *spiras;
> +extern struct spiras *volatile spiras;
>
>
> /* This macro can be used to check the validity of a pointer returned
> diff --git a/hw/fsp/fsp.c b/hw/fsp/fsp.c
> index 2c5f9d71..259e83a3 100644
> --- a/hw/fsp/fsp.c
> +++ b/hw/fsp/fsp.c
> @@ -91,7 +91,7 @@ static enum ipl_state ipl_state = ipl_initial;
> static struct fsp *first_fsp;
> static struct fsp *active_fsp;
> static u16 fsp_curseq = 0x8000;
> -static __be64 *fsp_tce_table;
> +static __be64 *volatile fsp_tce_table;
>
> #define FSP_INBOUND_SIZE 0x00100000UL
> static void *fsp_inbound_buf = NULL;
> --
> 2.31.1
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
>
More information about the Skiboot
mailing list