Hello Chandru,

>  static int __init early_init_dt_scan_drconf_memory(unsigned long node)
>  {
> -     cell_t *dm, *ls;
> +     cell_t *dm, *ls, *endp, *usm;
>       unsigned long l, n, flags;
>       u64 base, size, lmb_size;
> +     char buf[32], t[8];
>  
>       ls = (cell_t *)of_get_flat_dt_prop(node, "ibm,lmb-size", &l);
>       if (ls == NULL || l < dt_root_size_cells * sizeof(cell_t))
> @@ -917,7 +918,33 @@ static int __init early_init_dt_scan_drc
>                       if ((base + size) > 0x80000000ul)
>                               size = 0x80000000ul - base;
>               }
> -             lmb_add(base, size);
> +             strcpy(buf, "linux,usable-memory");
> +             sprintf(t, "%d", (int)n);
> +             strcat(buf, t);
> +             usm = (cell_t *)of_get_flat_dt_prop(node,
> +                                              (const char *)buf, &l);
> +             if (usm != NULL) {
> +                     endp = usm + (l / sizeof(cell_t));
> +                     while ((endp - usm) >= (dt_root_addr_cells +
> +                                              dt_root_size_cells)) {
> +                             base = dt_mem_next_cell(dt_root_addr_cells,
> +                                                              &usm);
> +                             size = dt_mem_next_cell(dt_root_size_cells,
> +                                                              &usm);
> +                             if (size == 0)
> +                                     continue;
> +                             if (iommu_is_off) {
> +                                     if ((base + size) > 0x80000000ul)
> +                                             size = 0x80000000ul - base;
> +                             }
> +                             lmb_add(base, size);
> +                     }
> +
> +                     /* Continue with next lmb entry */
> +                     continue;
> +             } else {
> +                     lmb_add(base, size);
> +             }
>       }

I am still digging through the kexec tools but I don't think you want
the processing of the linux,usable-memory property inside of the
for (; n!= 0; --n) loop.  This should be moved up so that it looks for
the linux,usable-memory property and parses it, then if it is not found
look for the ibm,dynamic-reconfiguration-memory property and parse it.

There is no need to look for the linux-usable-memory property every time
a piece of the ibm,dynamic-reconfiguration-memory property is parsed.

-Nathan

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

Reply via email to