[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: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH] tests/migration: Add source to PC boot block |
Date: |
Mon, 5 Feb 2018 18:06:52 +0000 |
User-agent: |
Mutt/1.9.1 (2017-09-22) |
* Wei Huang (address@hidden) wrote:
>
>
> 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.
I've split that out into a separate script and removed the Makefile
entry altogether; that way it also doesn't accidentally become a
dependency if the times on the .s/.h get screwed up.
> > 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.
Done.
V2 coming up.
Dave
> > + 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
> >
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK