unsigned long initrd_len = initrd ? initrd->mod_end : 0;
struct elf_binary elf;
struct elf_dom_parms parms;
+ size_t extra_space;
paddr_t last_addr;
struct hvm_start_info start_info = { 0 };
struct hvm_modlist_entry mod = { 0 };
* split into smaller allocations, done as a single region in order to
* simplify it.
*/
- last_addr = find_memory(d, &elf, sizeof(start_info) +
- (initrd ? ROUNDUP(initrd_len, PAGE_SIZE) +
- sizeof(mod)
- : 0) +
- (cmdline ? ROUNDUP(strlen(cmdline) + 1,
- elf_64bit(&elf) ? 8 : 4)
- : 0));
+ extra_space = sizeof(start_info);
+
+ if ( initrd )
+ extra_space += sizeof(mod) + ROUNDUP(initrd_len, PAGE_SIZE);
+
+ if ( cmdline )
+ extra_space += ROUNDUP(strlen(cmdline) + 1,
+ elf_64bit(&elf) ? 8 : 4);
+
+ last_addr = find_memory(d, &elf, extra_space);
if ( last_addr == INVALID_PADDR )
{
printk("Unable to find a memory region to load initrd and metadata\n");