Re: [Xen-devel] [PATCH v6 3/4] xen/x86: use SYMBOL when required

2019-01-10 Thread Stefano Stabellini
On Thu, 10 Jan 2019, Jan Beulich wrote:
> >>> On 10.01.19 at 00:42,  wrote:
> > --- a/xen/arch/x86/percpu.c
> > +++ b/xen/arch/x86/percpu.c
> > @@ -13,7 +13,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
> >   * context of PV guests.
> >   */
> >  #define INVALID_PERCPU_AREA (0x8000L - (long)__per_cpu_start)
> > -#define PERCPU_ORDER get_order_from_bytes(__per_cpu_data_end - 
> > __per_cpu_start)
> > +#define PERCPU_ORDER get_order_from_bytes(SYMBOL(__per_cpu_data_end) - 
> > SYMBOL(__per_cpu_start))
> 
> Long line.
> 
> With this taken care of
> Reviewed-by: Jan Beulich 
 
OK, thanks

___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Re: [Xen-devel] [PATCH v6 3/4] xen/x86: use SYMBOL when required

2019-01-10 Thread Jan Beulich
>>> On 10.01.19 at 00:42,  wrote:
> --- a/xen/arch/x86/percpu.c
> +++ b/xen/arch/x86/percpu.c
> @@ -13,7 +13,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
>   * context of PV guests.
>   */
>  #define INVALID_PERCPU_AREA (0x8000L - (long)__per_cpu_start)
> -#define PERCPU_ORDER get_order_from_bytes(__per_cpu_data_end - 
> __per_cpu_start)
> +#define PERCPU_ORDER get_order_from_bytes(SYMBOL(__per_cpu_data_end) - 
> SYMBOL(__per_cpu_start))

Long line.

With this taken care of
Reviewed-by: Jan Beulich 

Jan



___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [PATCH v6 3/4] xen/x86: use SYMBOL when required

2019-01-09 Thread Stefano Stabellini
Use SYMBOL in cases of comparisons and subtractions of:

_start, _end, __2M_rwdata_start, __2M_rwdata_end, _stext, _etext,
__end_vpci_array, __start_vpci_array, _stextentry, _etextentry,
__trampoline_rel_start, __trampoline_rel_stop, __trampoline_seg_start,
__trampoline_seg_stop __per_cpu_start, __per_cpu_data_end

as by the C standard [1].

M3CM: Rule-18.2: Subtraction between pointers shall only be applied to
pointers that address elements of the same array

[1] 
https://wiki.sei.cmu.edu/confluence/display/c/ARR36-C.+Do+not+subtract+or+compare+two+pointers+that+do+not+refer+to+the+same+array

QAVerify: 2761
Signed-off-by: Stefano Stabellini 
CC: jbeul...@suse.com
CC: andrew.coop...@citrix.com
---
Changes in v6:
- more accurate commit message
- remove uneeded extra newline
- only use SYMBOL on problematic symbols in alternatives.c
- use new SYMBOL macro that returns the native type

Changes in v5:
- remove two spurious changes
- split into three patches
- remove SYMBOL() from derived variables
---
 xen/arch/x86/alternative.c  | 3 ++-
 xen/arch/x86/efi/efi-boot.h | 8 
 xen/arch/x86/percpu.c   | 8 
 xen/arch/x86/setup.c| 8 +---
 xen/arch/x86/smpboot.c  | 5 +++--
 xen/drivers/vpci/vpci.c | 2 +-
 6 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/xen/arch/x86/alternative.c b/xen/arch/x86/alternative.c
index b8c819a..92c54eb 100644
--- a/xen/arch/x86/alternative.c
+++ b/xen/arch/x86/alternative.c
@@ -273,7 +273,8 @@ static int __init nmi_apply_alternatives(const struct 
cpu_user_regs *regs,
 /* Disable WP to allow patching read-only pages. */
 write_cr0(cr0 & ~X86_CR0_WP);
 
-apply_alternatives(__alt_instructions, __alt_instructions_end);
+apply_alternatives(SYMBOL(__alt_instructions),
+   SYMBOL(__alt_instructions_end));
 
 write_cr0(cr0);
 
diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
index 5789d2c..8dcd981 100644
--- a/xen/arch/x86/efi/efi-boot.h
+++ b/xen/arch/x86/efi/efi-boot.h
@@ -111,12 +111,12 @@ static void __init relocate_trampoline(unsigned long phys)
 return;
 
 /* Apply relocations to trampoline. */
-for ( trampoline_ptr = __trampoline_rel_start;
-  trampoline_ptr < __trampoline_rel_stop;
+for ( trampoline_ptr = SYMBOL(__trampoline_rel_start);
+  trampoline_ptr < SYMBOL(__trampoline_rel_stop);
   ++trampoline_ptr )
 *(u32 *)(*trampoline_ptr + (long)trampoline_ptr) += phys;
-for ( trampoline_ptr = __trampoline_seg_start;
-  trampoline_ptr < __trampoline_seg_stop;
+for ( trampoline_ptr = SYMBOL(__trampoline_seg_start);
+  trampoline_ptr < SYMBOL(__trampoline_seg_stop);
   ++trampoline_ptr )
 *(u16 *)(*trampoline_ptr + (long)trampoline_ptr) = phys >> 4;
 }
diff --git a/xen/arch/x86/percpu.c b/xen/arch/x86/percpu.c
index 8be4ebd..920bb78 100644
--- a/xen/arch/x86/percpu.c
+++ b/xen/arch/x86/percpu.c
@@ -13,7 +13,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
  * context of PV guests.
  */
 #define INVALID_PERCPU_AREA (0x8000L - (long)__per_cpu_start)
-#define PERCPU_ORDER get_order_from_bytes(__per_cpu_data_end - __per_cpu_start)
+#define PERCPU_ORDER get_order_from_bytes(SYMBOL(__per_cpu_data_end) - 
SYMBOL(__per_cpu_start))
 
 void __init percpu_init_areas(void)
 {
@@ -33,8 +33,8 @@ static int init_percpu_area(unsigned int cpu)
 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;
+memset(p, 0, SYMBOL(__per_cpu_data_end) - SYMBOL(__per_cpu_start));
+__per_cpu_offset[cpu] = p - SYMBOL(__per_cpu_start);
 
 return 0;
 }
@@ -49,7 +49,7 @@ 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];
+char *p = SYMBOL(__per_cpu_start) + __per_cpu_offset[cpu];
 
 free_xenheap_pages(p, PERCPU_ORDER);
 __per_cpu_offset[cpu] = INVALID_PERCPU_AREA;
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 06eb483..5c35826 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -972,7 +972,7 @@ void __init noreturn __start_xen(unsigned long mbi_p)
  * respective reserve_e820_ram() invocation below.
  */
 mod[mbi->mods_count].mod_start = virt_to_mfn(_stext);
-mod[mbi->mods_count].mod_end = __2M_rwdata_end - _stext;
+mod[mbi->mods_count].mod_end = SYMBOL(__2M_rwdata_end) - 
SYMBOL(_stext);
 }
 
 modules_headroom = bzimage_headroom(bootstrap_map(mod), mod->mod_end);
@@ -1067,7 +1067,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
  * data until after we have switched to the relocated pagetables!
  */
 barrier();
-move_memory(e +