On Fri, Apr 11, 2014 at 10:23:29AM +0800, WANG Chao wrote:
> add_setup_data() is used to add an instance to the single linked list
> of setup_data structure.
> 
> Signed-off-by: WANG Chao <[email protected]>

Thanks, applied.

> ---
>  kexec/arch/i386/x86-linux-setup.c | 26 ++++++++++++++++++++------
>  1 file changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/kexec/arch/i386/x86-linux-setup.c 
> b/kexec/arch/i386/x86-linux-setup.c
> index e04e45d..8ed36cc 100644
> --- a/kexec/arch/i386/x86-linux-setup.c
> +++ b/kexec/arch/i386/x86-linux-setup.c
> @@ -603,6 +603,22 @@ struct efi_info {
>  };
>  
>  /*
> + * Add another instance to single linked list of struct setup_data.
> + * Please refer to kernel Documentation/x86/boot.txt for more details
> + * about setup_data structure.
> + */
> +static void add_setup_data(struct kexec_info *info,
> +                        struct x86_linux_param_header *real_mode,
> +                        struct setup_data *sd)
> +{
> +     int sdsize = sizeof(struct setup_data) + sd->len;
> +
> +     sd->next = real_mode->setup_data;
> +     real_mode->setup_data = add_buffer(info, sd, sdsize, sdsize, 
> getpagesize(),
> +                         0x100000, ULONG_MAX, INT_MAX);
> +}
> +
> +/*
>   * setup_efi_data will collect below data and pass them to 2nd kernel.
>   * 1) SMBIOS, fw_vendor, runtime, config_table, they are passed via x86
>   *    setup_data.
> @@ -611,11 +627,11 @@ struct efi_info {
>  static int setup_efi_data(struct kexec_info *info,
>                         struct x86_linux_param_header *real_mode)
>  {
> -     int64_t setup_data_paddr, memmap_paddr;
> +     int64_t memmap_paddr;
>       struct setup_data *sd;
>       struct efi_setup_data *esd;
>       struct efi_mem_descriptor *maps;
> -     int nr_maps, size, sdsize, ret = 0;
> +     int nr_maps, size, ret = 0;
>       struct efi_info *ei = (struct efi_info *)real_mode->efi_info;
>  
>       ret = access("/sys/firmware/efi/systab", F_OK);
> @@ -648,10 +664,8 @@ static int setup_efi_data(struct kexec_info *info,
>       sd->len = sizeof(*esd);
>       memcpy(sd->data, esd, sizeof(*esd));
>       free(esd);
> -     sdsize = sd->len + sizeof(struct setup_data);
> -     setup_data_paddr = add_buffer(info, sd, sdsize, sdsize, getpagesize(),
> -                                     0x100000, ULONG_MAX, INT_MAX);
> -     real_mode->setup_data = setup_data_paddr;
> +
> +     add_setup_data(info, real_mode, sd);
>  
>       size = nr_maps * sizeof(struct efi_mem_descriptor);
>       memmap_paddr = add_buffer(info, maps, size, size, getpagesize(),
> -- 
> 1.8.5.3
> 

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to