On Tue, Sep 17, 2013 at 09:14:52PM +0100, Matt Fleming wrote: > > +static efi_status_t alloc_e820ext(u32 nr_desc, struct setup_data **e820ext, > > + u32 *e820ext_size) > > +{ > > + efi_status_t status; > > + unsigned long size; > > + > > + size = sizeof(struct setup_data) + > > + sizeof(struct e820entry) * nr_desc; > > + > > + if (*e820ext && size <= *e820ext_size) > > + return EFI_SUCCESS; /* Already allocated */ > > Do we actually need this check? I thought the 'prev_nr_desc' below > ensures we only allocate 'e820ext' if we need more memory. I am okay with removing the check. There is another bug in exit_boot, when jumping to get_map the call to get the memory map is passed the previous map size instead of the size of the allocated buffer. I'll make the changes and resend. > > [...] > > > @@ -1016,6 +1157,19 @@ get_map: > > if (status != EFI_SUCCESS) > > goto free_mem_map; > > > > + prev_nr_desc = nr_desc; > > + nr_desc = size / desc_size; > > + if (nr_desc > prev_nr_desc && > > + nr_desc > ARRAY_SIZE(boot_params->e820_map)) { > > + u32 nr_e820ext = nr_desc - ARRAY_SIZE(boot_params->e820_map); > > + > > + status = alloc_e820ext(nr_e820ext, &e820ext, &e820ext_size); > > + if (status != EFI_SUCCESS) > > + goto free_mem_map; > > + > > + goto get_map; /* Allocated memory, get map again */ > > + } > > + -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html