Hi Vivek and Nan hai,

On 11/22/06, Vivek Goyal <[EMAIL PROTECTED]> wrote:
> On Tue, Nov 21, 2006 at 02:56:23PM +0900, Magnus Damm wrote:
> [..]
> > >>
> > >> +static struct crash_elf_info elf_info =
> > >> +{
> > >> +     class: ELFCLASS64,
> > >> +     data: ELFDATA2LSB,
> > >> +     machine: EM_X86_64,
> > >> +     alignment: 1024,
> > >
> > >This alignment thing is confusing me. Can you give some more details
> > >please?
> >
> > Well, I only put it in because the original code had some alignment code:
> >
> > @@ -734,7 +615,6 @@ int load_crashdump_segments(struct kexec
> >       void *tmp;
> >       unsigned long sz, elfcorehdr;
> >       int nr_ranges, align = 1024, i;
> > -       long int nr_cpus = 0;
> >       struct memory_range *mem_range, *memmap_p;
> >
> >       if (get_kernel_paddr(info))
> > @@ -764,20 +644,9 @@ int load_crashdump_segments(struct kexec
> >               return -1;
> >
> >       /* Create elf header segment and store crash image data. */
> > -       nr_cpus = sysconf(_SC_NPROCESSORS_CONF);
> > -       if (nr_cpus < 0) {
> > -               fprintf(stderr,"kexec_load (elf header segment)"
> > -                       " failed: %s\n", strerror(errno));
> > -               return -1;
> > -       }
> > -       sz =    sizeof(Elf64_Ehdr) + nr_cpus * sizeof(Elf64_Phdr) +
> > -                       nr_ranges * sizeof(Elf64_Phdr);
> > -       sz = (sz + align - 1) & ~(align -1);
> > -       tmp = xmalloc(sz);
> > -       memset(tmp, 0, sz);
> > -
> > -       /* Prepare ELF64 core heaers. */
> > -       if (prepare_crash_memory_elf64_headers(info, tmp, sz) < 0)
> > +       if (crash_create_elf64_headers(info, &elf_info,
> > +                                      crash_memory_range, nr_ranges,
> > +                                      &tmp, &sz) < 0)
> >               return -1;
> >
> > Have a look at the align variable above? It is set to 1024. So I just
> > broke out the alignment number and put it into the elf_info structure
> > to make it per-arch.
> >
> > I don't know why the number of bytes allocated are rounded to an even
> > 1024. It is probably because the data that follows the headers should
> > be aligned. Word-size aligment I understand, but 1024 I don't. 1024
> > was probably a handy value that happened to work regardless of 32 or
> > 64 bit elf format...
> >
>
>
> Ok. Now I remember. I had put this alignment to make sure elf header
> segment is atleast 1K aligned. And the reason behind that is when we
> prepare the memmap= options to pass to second kernel, we can pass the
> memory only with a granularity of KB and not less than that.
>
> So I need to remove the elf core header segment from the list of memory
> regions which second kernel can use. I used delete_memmap() function to
> do that and create a new list. If segments/memory regions I am handling
> are at least 1K aligned, it becomes easier to handle them. Otherwise
> its chaos.

That explains the alignment. Thank you! Always aligning to 1K makes sense then.

Nan hai, you align to EFI_PAGE_SIZE instead of 1K on ia64. Do you have
any special reason for doing so?

Right now I assume it is a "copy-and-paste-o" so my patches use
1K-alignment instead.

> So I guess, its fine to continue with this alignment thing. Though
> a small comment might help to future code writers.

I see this as an improvement or clarification for the existing code.
So I'll cook up a separate patch with the comment next week when I'm
back from a few days vacation.

Thanks!

/ magnus
_______________________________________________
fastboot mailing list
fastboot@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/fastboot

Reply via email to