[PATCH 09/13] kexec: ppc: use _ALIGN* to make the logic clear

Simon Horman horms at verge.net.au
Thu Mar 14 05:09:19 EDT 2013


On Thu, Mar 14, 2013 at 01:32:20AM +0800, Zhang Yanfei wrote:
> From: Zhang Yanfei <zhangyanfei at cn.fujitsu.com>
> 
> By replacing all the explicit align opertion with marco _ALIGN*,
> the code logic could be more clear.
> 
> Besides, remove the duplicate _ALIGN_* definition in file
> kexec/arch/ppc/crashdump-powerpc.h.

This appears to break the build on ppc.


powerpc-linux-gnu-gcc -Wall -Wextra -Wpointer-arith -Wwrite-strings -Wformat -O2 -fomit-frame-pointer -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -I/include -I./include -I./util_lib/include -Iinclude/ -I./kexec/libfdt -I./kexec/arch/ppc/include  -c -MD -o kexec/arch/ppc/fs2dt.o kexec/arch/ppc/fs2dt.c
kexec/arch/ppc/fs2dt.c: In function 'add_usable_mem_property':
kexec/arch/ppc/fs2dt.c:146: warning: comparison between signed and unsigned integer expressions
kexec/arch/ppc/fs2dt.c:128: warning: unused variable 'buf'
kexec/arch/ppc/fs2dt.c:125: warning: unused parameter 'len'
kexec/arch/ppc/fs2dt.c: In function 'putnode':
kexec/arch/ppc/fs2dt.c:326: warning: passing argument 4 of 'scandir' from incompatible pointer type
/usr/powerpc-linux-gnu/include/dirent.h:252: note: expected 'int (*)(const struct dirent **, const struct dirent **)' but argument is of type 'int (*)(const void *, const void *)'
kexec/arch/ppc/fs2dt.c:449:1: error: unterminated argument list invoking macro "_ALIGN"
kexec/arch/ppc/fs2dt.c: In function 'create_flatten_tree':
kexec/arch/ppc/fs2dt.c:410: error: '_ALIGN' undeclared (first use in this function)
kexec/arch/ppc/fs2dt.c:410: error: (Each undeclared identifier is reported only once
kexec/arch/ppc/fs2dt.c:410: error: for each function it appears in.)
kexec/arch/ppc/fs2dt.c:410: error: expected ';' at end of input
kexec/arch/ppc/fs2dt.c:410: error: expected declaration or statement at end of input
kexec/arch/ppc/fs2dt.c:395: warning: unused variable 'buf'
kexec/arch/ppc/fs2dt.c:394: warning: unused variable 'tlen'
kexec/arch/ppc/fs2dt.c:390: warning: unused parameter 'info'
kexec/arch/ppc/fs2dt.c:390: warning: unused parameter 'bufp'
kexec/arch/ppc/fs2dt.c:391: warning: unused parameter 'sizep'
make: *** [kexec/arch/ppc/fs2dt.o] Error 1

> 
> Signed-off-by: Zhang Yanfei <zhangyanfei at cn.fujitsu.com>
> ---
>  kexec/arch/ppc/crashdump-powerpc.c |    2 +-
>  kexec/arch/ppc/crashdump-powerpc.h |    2 --
>  kexec/arch/ppc/fs2dt.c             |    5 ++---
>  kexec/arch/ppc/kexec-dol-ppc.c     |   10 +++++-----
>  kexec/arch/ppc/kexec-elf-ppc.c     |    8 ++++----
>  5 files changed, 12 insertions(+), 15 deletions(-)
> 
> diff --git a/kexec/arch/ppc/crashdump-powerpc.c b/kexec/arch/ppc/crashdump-powerpc.c
> index d367643..eee5b37 100644
> --- a/kexec/arch/ppc/crashdump-powerpc.c
> +++ b/kexec/arch/ppc/crashdump-powerpc.c
> @@ -329,7 +329,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline,
>  	info->backup_src_size = BACKUP_SRC_SIZE;
>  #ifndef CONFIG_BOOKE
>  	/* Create a backup region segment to store backup data*/
> -	sz = (BACKUP_SRC_SIZE + align - 1) & ~(align - 1);
> +	sz = _ALIGN(BACKUP_SRC_SIZE, align);
>  	tmp = xmalloc(sz);
>  	memset(tmp, 0, sz);
>  	info->backup_start = add_buffer(info, tmp, sz, sz, align,
> diff --git a/kexec/arch/ppc/crashdump-powerpc.h b/kexec/arch/ppc/crashdump-powerpc.h
> index 84a73aa..efdc7e3 100644
> --- a/kexec/arch/ppc/crashdump-powerpc.h
> +++ b/kexec/arch/ppc/crashdump-powerpc.h
> @@ -35,8 +35,6 @@ extern struct arch_options_t arch_options;
>  #endif
>  
>  #define KDUMP_BACKUP_LIMIT	BACKUP_SRC_SIZE
> -#define _ALIGN_UP(addr, size)	(((addr)+((size)-1))&(~((size)-1)))
> -#define _ALIGN_DOWN(addr, size)	((addr)&(~((size)-1)))
>  
>  extern unsigned long long crash_base;
>  extern unsigned long long crash_size;
> diff --git a/kexec/arch/ppc/fs2dt.c b/kexec/arch/ppc/fs2dt.c
> index cdae69e..56ffb91 100644
> --- a/kexec/arch/ppc/fs2dt.c
> +++ b/kexec/arch/ppc/fs2dt.c
> @@ -407,8 +407,7 @@ int create_flatten_tree(struct kexec_info *info, unsigned char **bufp,
>  	putnode();
>  	*dt++ = 9;
>  
> -	len = sizeof(bb[0]);
> -	len += 7; len &= ~7;
> +	len = _ALIGN(sizeof(bb[0], 8);
>  
>  	bb->off_mem_rsvmap = len;
>  
> @@ -426,7 +425,7 @@ int create_flatten_tree(struct kexec_info *info, unsigned char **bufp,
>  
>  	len = propnum("");
>  	bb->dt_strings_size = len;
> -	len +=  3; len &= ~3;
> +	len = _ALIGN(len, 4);
>  	bb->totalsize = bb->off_dt_strings + len;
>  
>  	bb->magic = 0xd00dfeed;
> diff --git a/kexec/arch/ppc/kexec-dol-ppc.c b/kexec/arch/ppc/kexec-dol-ppc.c
> index 5fc5e06..8d0d1a0 100644
> --- a/kexec/arch/ppc/kexec-dol-ppc.c
> +++ b/kexec/arch/ppc/kexec-dol-ppc.c
> @@ -87,11 +87,11 @@ typedef struct {
>  #define PAGE_SHIFT		12
>  #define PAGE_SIZE		(1UL << PAGE_SHIFT)
>  #define PAGE_MASK		(~((1 << PAGE_SHIFT) - 1))
> -#define PAGE_ALIGN(addr)	(((addr) + PAGE_SIZE - 1) & PAGE_MASK)
> +#define PAGE_ALIGN(addr)	_ALIGN(addr, PAGE_SIZE)
>  
>  #define MAX_COMMAND_LINE   256
>  
> -#define UPSZ(X) ((sizeof(X) + 3) & ~3)
> +#define UPSZ(X) _ALIGN_UP(sizeof(X), 4)
>  static struct boot_notes {
>  	Elf_Bhdr hdr;
>  	Elf_Nhdr bl_hdr;
> @@ -442,14 +442,14 @@ int dol_ppc_load(int argc, char **argv, const char *buf, off_t UNUSED(len),
>  	}
>  
>  	/* build the setup glue and argument segment (segment 0) */
> -	note_bytes = sizeof(elf_boot_notes) + ((command_line_len + 3) & ~3);
> -	arg_bytes = note_bytes + ((setup_dol_size + 3) & ~3);
> +	note_bytes = sizeof(elf_boot_notes) + _ALIGN(command_line_len, 4);
> +	arg_bytes = note_bytes + _ALIGN(setup_dol_size, 4);
>  
>  	arg_buf = xmalloc(arg_bytes);
>  	arg_base = add_buffer(info,
>  		arg_buf, arg_bytes, arg_bytes, 4, 0, 0xFFFFFFFFUL, 1);
>  
> -	notes = (struct boot_notes *)(arg_buf + ((setup_dol_size + 3) & ~3));
> +	notes = (struct boot_notes *)(arg_buf + _ALIGN(setup_dol_size, 4));
>  
>  	notes->hdr.b_size = note_bytes;
>  	notes->cmd_hdr.n_descsz = command_line_len;
> diff --git a/kexec/arch/ppc/kexec-elf-ppc.c b/kexec/arch/ppc/kexec-elf-ppc.c
> index 5f63a64..65a65cc 100644
> --- a/kexec/arch/ppc/kexec-elf-ppc.c
> +++ b/kexec/arch/ppc/kexec-elf-ppc.c
> @@ -37,7 +37,7 @@ const char *ramdisk;
>  int create_flatten_tree(struct kexec_info *, unsigned char **, unsigned long *,
>  			char *);
>  
> -#define UPSZ(X) ((sizeof(X) + 3) & ~3)
> +#define UPSZ(X) _ALIGN_UP(sizeof(X), 4);
>  #ifdef WITH_GAMECUBE
>  static struct boot_notes {
>  	Elf_Bhdr hdr;
> @@ -327,14 +327,14 @@ int elf_ppc_load(int argc, char **argv,	const char *buf, off_t len,
>  		setup_size = setup_simple_size;
>  		setup_simple_regs.spr8 = ehdr.e_entry;	/* Link Register */
>  	}
> -	note_bytes = sizeof(elf_boot_notes) + ((command_line_len + 3) & ~3);
> -	arg_bytes = note_bytes + ((setup_size + 3) & ~3);
> +	note_bytes = sizeof(elf_boot_notes) + _ALIGN(command_line_len, 4);
> +	arg_bytes = note_bytes + _ALIGN(setup_size, 4);
>  
>  	arg_buf = xmalloc(arg_bytes);
>  	arg_base = add_buffer(info, 
>  		arg_buf, arg_bytes, arg_bytes, 4, 0, elf_max_addr(&ehdr), 1);
>  
> -	notes = (struct boot_notes *)(arg_buf + ((setup_size + 3) & ~3));
> +	notes = (struct boot_notes *)(arg_buf + _ALIGN(setup_size, 4));
>  
>  	memcpy(arg_buf, setup_start, setup_size);
>  	memcpy(notes, &elf_boot_notes, sizeof(elf_boot_notes));
> -- 
> 1.7.1
> 



More information about the kexec mailing list