From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46759) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XoyTn-0007qP-S2 for qemu-devel@nongnu.org; Thu, 13 Nov 2014 12:46:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XoyTj-0003mW-Dw for qemu-devel@nongnu.org; Thu, 13 Nov 2014 12:46:47 -0500 Received: from mail-qa0-x22f.google.com ([2607:f8b0:400d:c00::22f]:45198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XoyTj-0003mI-8s for qemu-devel@nongnu.org; Thu, 13 Nov 2014 12:46:43 -0500 Received: by mail-qa0-f47.google.com with SMTP id dc16so10435852qab.6 for ; Thu, 13 Nov 2014 09:46:42 -0800 (PST) Message-ID: <5464EE7E.1030405@gmail.com> Date: Thu, 13 Nov 2014 10:46:38 -0700 From: Drew DeVault MIME-Version: 1.0 References: <1414648323-31709-1-git-send-email-sir@cmpwn.com> <54592DE4.1040708@gmail.com> In-Reply-To: <54592DE4.1040708@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] Add bootloader name to multiboot implementation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com cc-ing a few people I found in the blame for the relevant files. Mind taking a look at this patch? Thanks! On 11/04/2014 12:49 PM, Drew DeVault wrote: > Ping: http://patchwork.ozlabs.org/patch/404885/ > > Does anyone know someone I can cc on this? This part of the code doesn't > have a dedicated maintainer. > > On 10/29/2014 11:52 PM, Drew DeVault wrote: >> The name is set to "qemu". >> >> Signed-off-by: Drew DeVault >> --- >> For the future, it may be useful to add a command line flag for >> setting this to >> some user-specified value. I also considered naming it >> "qemu-system-i386" or >> "qemu-system-x86_64" (as appropriate), but couldn't find an easy way >> to get >> those strings and decided it didn't matter. >> >> hw/i386/multiboot.c | 32 +++++++++++++++++++++++++++----- >> 1 file changed, 27 insertions(+), 5 deletions(-) >> >> diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c >> index 985ca1e..f86d351 100644 >> --- a/hw/i386/multiboot.c >> +++ b/hw/i386/multiboot.c >> @@ -54,6 +54,7 @@ enum { >> MBI_MODS_COUNT = 20, >> MBI_MODS_ADDR = 24, >> MBI_MMAP_ADDR = 48, >> + MBI_BOOTLOADER = 64, >> >> MBI_SIZE = 88, >> >> @@ -74,6 +75,7 @@ enum { >> MULTIBOOT_FLAGS_CMDLINE = 1 << 2, >> MULTIBOOT_FLAGS_MODULES = 1 << 3, >> MULTIBOOT_FLAGS_MMAP = 1 << 6, >> + MULTIBOOT_FLAGS_BOOTLOADER = 1 << 9, >> }; >> >> typedef struct { >> @@ -87,6 +89,8 @@ typedef struct { >> hwaddr offset_mbinfo; >> /* offset in buffer for cmdlines in bytes */ >> hwaddr offset_cmdlines; >> + /* offset in buffer for bootloader name in bytes */ >> + hwaddr offset_bootloader; >> /* offset of modules in bytes */ >> hwaddr offset_mods; >> /* available slots for mb modules infos */ >> @@ -95,6 +99,8 @@ typedef struct { >> int mb_mods_count; >> } MultibootState; >> >> +const char *bootloader_name = "qemu"; >> + >> static uint32_t mb_add_cmdline(MultibootState *s, const char *cmdline) >> { >> hwaddr p = s->offset_cmdlines; >> @@ -105,6 +111,16 @@ static uint32_t mb_add_cmdline(MultibootState *s, >> const char *cmdline) >> return s->mb_buf_phys + p; >> } >> >> +static uint32_t mb_add_bootloader(MultibootState *s, const char >> *bootloader) >> +{ >> + hwaddr p = s->offset_bootloader; >> + char *b = (char *)s->mb_buf + p; >> + >> + memcpy(b, bootloader, strlen(bootloader) + 1); >> + s->offset_bootloader += strlen(b) + 1; >> + return s->mb_buf_phys + p; >> +} >> + >> static void mb_add_mod(MultibootState *s, >> hwaddr start, hwaddr end, >> hwaddr cmdline_phys) >> @@ -241,9 +257,10 @@ int load_multiboot(FWCfgState *fw_cfg, >> mbs.mb_buf_size = TARGET_PAGE_ALIGN(mb_kernel_size); >> mbs.offset_mbinfo = mbs.mb_buf_size; >> >> - /* Calculate space for cmdlines and mb_mods */ >> + /* Calculate space for cmdlines, bootloader name, and mb_mods */ >> mbs.mb_buf_size += strlen(kernel_filename) + 1; >> mbs.mb_buf_size += strlen(kernel_cmdline) + 1; >> + mbs.mb_buf_size += strlen(bootloader_name) + 1; >> if (initrd_filename) { >> const char *r = initrd_filename; >> mbs.mb_buf_size += strlen(r) + 1; >> @@ -257,9 +274,11 @@ int load_multiboot(FWCfgState *fw_cfg, >> >> mbs.mb_buf_size = TARGET_PAGE_ALIGN(mbs.mb_buf_size); >> >> - /* enlarge mb_buf to hold cmdlines and mb-info structs */ >> - mbs.mb_buf = g_realloc(mbs.mb_buf, mbs.mb_buf_size); >> - mbs.offset_cmdlines = mbs.offset_mbinfo + mbs.mb_mods_avail * >> MB_MOD_SIZE; >> + /* enlarge mb_buf to hold cmdlines, bootloader, mb-info structs */ >> + mbs.mb_buf = g_realloc(mbs.mb_buf, mbs.mb_buf_size); >> + mbs.offset_cmdlines = mbs.offset_mbinfo + mbs.mb_mods_avail * >> MB_MOD_SIZE; >> + mbs.offset_bootloader = mbs.offset_cmdlines + >> strlen(kernel_filename) + 1 >> + + strlen(kernel_cmdline) + 1; >> >> if (initrd_filename) { >> char *next_initrd, not_last; >> @@ -306,6 +325,8 @@ int load_multiboot(FWCfgState *fw_cfg, >> kernel_filename, kernel_cmdline); >> stl_p(bootinfo + MBI_CMDLINE, mb_add_cmdline(&mbs, kcmdline)); >> >> + stl_p(bootinfo + MBI_BOOTLOADER, mb_add_bootloader(&mbs, >> bootloader_name)); >> + >> stl_p(bootinfo + MBI_MODS_ADDR, mbs.mb_buf_phys + >> mbs.offset_mbinfo); >> stl_p(bootinfo + MBI_MODS_COUNT, mbs.mb_mods_count); /* >> mods_count */ >> >> @@ -314,7 +335,8 @@ int load_multiboot(FWCfgState *fw_cfg, >> | MULTIBOOT_FLAGS_BOOT_DEVICE >> | MULTIBOOT_FLAGS_CMDLINE >> | MULTIBOOT_FLAGS_MODULES >> - | MULTIBOOT_FLAGS_MMAP); >> + | MULTIBOOT_FLAGS_MMAP >> + | MULTIBOOT_FLAGS_BOOTLOADER); >> stl_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the >> -boot switch? */ >> stl_p(bootinfo + MBI_MMAP_ADDR, ADDR_E820_MAP); >> >>