qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] tests/migration: Add source to PC boot block


From: Wei Huang
Subject: Re: [Qemu-devel] [PATCH] tests/migration: Add source to PC boot block
Date: Fri, 2 Feb 2018 11:25:09 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2


On 01/31/2018 02:16 PM, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
> 
> The boot block used in the migration test is currently only
> shipped as a hex (with the source in the git commit message),
> change this to actually include the source.
> 
> A makefile rule is added, but the expectation is that
> the generated hex is shipped as well as the .s, so that
> there's no requirement to have just the right assembler etc.
> 
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
>  tests/Makefile.include              | 18 ++++++++
>  tests/migration-test.c              | 46 +------------------
>  tests/migration/x86-a-b-bootblock.h | 52 +++++++++++++++++++++
>  tests/migration/x86-a-b-bootblock.s | 92 
> +++++++++++++++++++++++++++++++++++++
>  4 files changed, 163 insertions(+), 45 deletions(-)
>  create mode 100644 tests/migration/x86-a-b-bootblock.h
>  create mode 100644 tests/migration/x86-a-b-bootblock.s
> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 851aafe9d1..2a0889479c 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -831,6 +831,24 @@ tests/migration/initrd-stress.img: 
> tests/migration/stress$(EXESUF)
>       rm $(INITRD_WORK_DIR)/init
>       rmdir $(INITRD_WORK_DIR)
>  
> +ASM_WORK_DIR=tests/asm-temp
> +$(SRC_PATH)/tests/migration/x86-a-b-bootblock.h: 
> $(SRC_PATH)/tests/migration/x86-a-b-bootblock.s
> +     mkdir $(ASM_WORK_DIR)
> +     as --32 -march=i486 $< -o $(ASM_WORK_DIR).o
> +     objcopy -O binary $(ASM_WORK_DIR).o $(ASM_WORK_DIR).boot
> +     dd if=$(ASM_WORK_DIR).boot of=$(ASM_WORK_DIR).bootsect bs=256 count=2 
> skip=124
> +     xxd -i $(ASM_WORK_DIR).bootsect | \
> +            sed -e 's/tests_asm_temp_bootsect/bootsect/' -e 's/.*int.*//' > 
> $(ASM_WORK_DIR).hex
> +     echo -e "/* This file is automatically generated from\n" \
> +             " * tests/migration/x86-a-b-bootblock.s, edit that and then\n" \
> +             " * make tests/migration/x86-a-b-bootblock.h to update,\n" \
> +             " * and then remember to send both in your patch submission.\n" 
> \
> +             " */\n" | cat - $(ASM_WORK_DIR).hex > $@
> +     rm $(ASM_WORK_DIR).hex $(ASM_WORK_DIR).bootsect $(ASM_WORK_DIR).boot
> +     rm $(ASM_WORK_DIR).o
> +     rmdir $(ASM_WORK_DIR)
> +
> +

Could we create a new Makefile.include under tests/migration/ and move
the code above there? The code above is very large and can distract
people working on tests/Makefile.include.

>  ifeq ($(CONFIG_POSIX),y)
>  LIBS += -lutil
>  endif
> diff --git a/tests/migration-test.c b/tests/migration-test.c
> index 799e24ebc6..7550fd8d56 100644
> --- a/tests/migration-test.c
> +++ b/tests/migration-test.c
> @@ -79,51 +79,7 @@ static const char *tmpfs;
>  /* A simple PC boot sector that modifies memory (1-100MB) quickly
>   * outputing a 'B' every so often if it's still running.
>   */
> -unsigned char bootsect[] = {
> -  0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> -  0x0f, 0x22, 0xc0, 0x66, 0xea, 0x20, 0x7c, 0x00, 0x00, 0x08, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x92, 0x0c, 0x02,
> -  0xe6, 0x92, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x8e, 0xd8, 0x66, 0xb8, 0x41,
> -  0x00, 0x66, 0xba, 0xf8, 0x03, 0xee, 0xb3, 0x00, 0xb8, 0x00, 0x00, 0x10,
> -  0x00, 0xfe, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40,
> -  0x06, 0x7c, 0xf2, 0xfe, 0xc3, 0x75, 0xe9, 0x66, 0xb8, 0x42, 0x00, 0x66,
> -  0xba, 0xf8, 0x03, 0xee, 0xeb, 0xde, 0x66, 0x90, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00,
> -  0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, 0x27, 0x00, 0x5c, 0x7c,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
> -};
> +#include "tests/migration/x86-a-b-bootblock.h"
>  
>  static void init_bootfile_x86(const char *bootpath)
>  {
> diff --git a/tests/migration/x86-a-b-bootblock.h 
> b/tests/migration/x86-a-b-bootblock.h
> new file mode 100644
> index 0000000000..e45c8dd5b3
> --- /dev/null
> +++ b/tests/migration/x86-a-b-bootblock.h
> @@ -0,0 +1,52 @@
> +/* This file is automatically generated from
> +  * tests/migration/x86-a-b-bootblock.s, edit that and then
> +  * make tests/migration/x86-a-b-bootblock.h to update,
> +  * and then remember to send both in your patch submission.
> +  */
> +
> +unsigned char bootsect[] = {

Given that this is arch-dependent, I think it will be better to add
"x86_" as prefix to this variable.

> +  0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> +  0x0f, 0x22, 0xc0, 0x66, 0xea, 0x20, 0x7c, 0x00, 0x00, 0x08, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x92, 0x0c, 0x02,
> +  0xe6, 0x92, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x8e, 0xd8, 0x66, 0xb8, 0x41,
> +  0x00, 0x66, 0xba, 0xf8, 0x03, 0xee, 0xb3, 0x00, 0xb8, 0x00, 0x00, 0x10,
> +  0x00, 0xfe, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x40,
> +  0x06, 0x7c, 0xf2, 0xfe, 0xc3, 0x75, 0xe9, 0x66, 0xb8, 0x42, 0x00, 0x66,
> +  0xba, 0xf8, 0x03, 0xee, 0xeb, 0xde, 0x66, 0x90, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00,
> +  0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, 0x27, 0x00, 0x5c, 0x7c,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
> +};
> +
> diff --git a/tests/migration/x86-a-b-bootblock.s 
> b/tests/migration/x86-a-b-bootblock.s
> new file mode 100644
> index 0000000000..7f290014af
> --- /dev/null
> +++ b/tests/migration/x86-a-b-bootblock.s
> @@ -0,0 +1,92 @@
> +# x86 bootblock used in migration test
> +#  repeatedly increments the first byte of each page in a 100MB
> +#  range.
> +#  Outputs an initial 'A' on serial followed by repeated 'B's
> +#
> +# run   make tests/migration/x86-a-b-bootblock.h
> +#   to regenerate the hex, and remember to include both the .h and .s
> +#   in any patches.
> +#
> +# Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
> +# This work is licensed under the terms of the GNU GPL, version 2 or later.
> +# See the COPYING file in the top-level directory.
> +#
> +# Author: address@hidden
> +
> +
> +.code16
> +.org 0x7c00
> +        .file   "fill.s"
> +        .text
> +        .globl  start
> +        .type   start, @function
> +start:             # at 0x7c00 ?
> +        cli
> +        lgdt gdtdesc
> +        mov $1,%eax
> +        mov %eax,%cr0  # Protected mode enable
> +        data32 ljmp $8,$0x7c20
> +
> +.org 0x7c20
> +.code32
> +        # A20 enable - not sure I actually need this
> +        inb $0x92,%al
> +        or  $2,%al
> +        outb %al, $0x92
> +
> +        # set up DS for the whole of RAM (needed on KVM)
> +        mov $16,%eax
> +        mov %eax,%ds
> +
> +        mov $65,%ax
> +        mov $0x3f8,%dx
> +        outb %al,%dx
> +
> +        # bl keeps a counter so we limit the output speed
> +        mov $0, %bl
> +mainloop:
> +        # Start from 1MB
> +        mov $(1024*1024),%eax
> +innerloop:
> +        incb (%eax)
> +        add $4096,%eax
> +        cmp $(100*1024*1024),%eax
> +        jl innerloop
> +
> +        inc %bl
> +        jnz mainloop
> +
> +        mov $66,%ax
> +        mov $0x3f8,%dx
> +        outb %al,%dx
> +
> +        jmp mainloop
> +
> +        # GDT magic from old (GPLv2)  Grub startup.S
> +        .p2align        2       /* force 4-byte alignment */
> +gdt:
> +        .word   0, 0
> +        .byte   0, 0, 0, 0
> +
> +        /* -- code segment --
> +         * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present
> +         * type = 32bit code execute/read, DPL = 0
> +         */
> +        .word   0xFFFF, 0
> +        .byte   0, 0x9A, 0xCF, 0
> +
> +        /* -- data segment --
> +         * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present
> +         * type = 32 bit data read/write, DPL = 0
> +         */
> +        .word   0xFFFF, 0
> +        .byte   0, 0x92, 0xCF, 0
> +
> +gdtdesc:
> +        .word   0x27                    /* limit */
> +        .long   gdt                     /* addr */
> +
> +/* I'm a bootable disk */
> +.org 0x7dfe
> +        .byte 0x55
> +        .byte 0xAA
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]