[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3] hw/core/null-machine: Add the possibility to
From: |
Alistair Francis |
Subject: |
Re: [Qemu-devel] [PATCH v3] hw/core/null-machine: Add the possibility to instantiate a CPU and RAM |
Date: |
Wed, 18 Jan 2017 09:57:36 -0800 |
On Wed, Jan 18, 2017 at 4:44 AM, Thomas Huth <address@hidden> wrote:
> Sometimes it is useful to have just a machine with CPU and RAM, without
> any further hardware in it, e.g. if you just want to do some instruction
> debugging for TCG with a remote GDB attached to QEMU, or run some embedded
> code with the "-semihosting" QEMU parameter. qemu-system-m68k already
> features a "dummy" machine, and xtensa a "sim" machine for exactly this
> purpose.
> All target architectures have nowadays also a "none" machine, which would
> be a perfect match for this, too - but it currently does not allow to add
> CPU and RAM yet. Thus let's add these possibilities in a generic way to the
> "none" machine, too, so that we hopefully do not need additional "dummy"
> machines in the future anymore (and maybe can also get rid of the already
> existing "dummy"/"sim" machines one day).
> Note that the default behaviour of the "none" machine is not changed, i.e.
> no CPU and no RAM is instantiated by default. You have explicitely got to
> specify the CPU model with "-cpu" and the amount of RAM with "-m" to get
> these new features.
>
> Signed-off-by: Thomas Huth <address@hidden>
> ---
> v3:
> - Get rid of the cpu_init_def() wrapper again, make null-machine.o
> target dependent instead and use cpu_init() directly.
> - Omit the loader code for the "-kernel" option for now (users can
> use "-device loader,..." instead). We can add code for the -kernel
> parameter later (either an implementation or a warning), once we've
> decided how it should behave for the "none" machine.
I think there should at least be a warning to start with though. It
seems confusing that no errors are reported but the argument is
ignored.
Thanks,
Alistair
>
> hw/core/Makefile.objs | 2 +-
> hw/core/null-machine.c | 27 +++++++++++++++++++++++++--
> 2 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
> index a4c94e5..0b6c0f1 100644
> --- a/hw/core/Makefile.objs
> +++ b/hw/core/Makefile.objs
> @@ -12,7 +12,6 @@ common-obj-$(CONFIG_XILINX_AXI) += stream.o
> common-obj-$(CONFIG_PTIMER) += ptimer.o
> common-obj-$(CONFIG_SOFTMMU) += sysbus.o
> common-obj-$(CONFIG_SOFTMMU) += machine.o
> -common-obj-$(CONFIG_SOFTMMU) += null-machine.o
> common-obj-$(CONFIG_SOFTMMU) += loader.o
> common-obj-$(CONFIG_SOFTMMU) += qdev-properties-system.o
> common-obj-$(CONFIG_SOFTMMU) += register.o
> @@ -20,3 +19,4 @@ common-obj-$(CONFIG_SOFTMMU) += or-irq.o
> common-obj-$(CONFIG_PLATFORM_BUS) += platform-bus.o
>
> obj-$(CONFIG_SOFTMMU) += generic-loader.o
> +obj-$(CONFIG_SOFTMMU) += null-machine.o
> diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c
> index 0351ba7..27c8369 100644
> --- a/hw/core/null-machine.c
> +++ b/hw/core/null-machine.c
> @@ -13,18 +13,41 @@
>
> #include "qemu/osdep.h"
> #include "qemu-common.h"
> +#include "qemu/error-report.h"
> #include "hw/hw.h"
> #include "hw/boards.h"
> +#include "sysemu/sysemu.h"
> +#include "exec/address-spaces.h"
> +#include "cpu.h"
>
> -static void machine_none_init(MachineState *machine)
> +static void machine_none_init(MachineState *mch)
> {
> + CPUState *cpu = NULL;
> +
> + /* Initialize CPU (if a model has been specified) */
> + if (mch->cpu_model) {
> + cpu = cpu_init(mch->cpu_model);
> + if (!cpu) {
> + error_report("Unable to initialize CPU");
> + exit(1);
> + }
> + }
> +
> + /* RAM at address zero */
> + if (mch->ram_size) {
> + MemoryRegion *ram = g_new(MemoryRegion, 1);
> +
> + memory_region_allocate_system_memory(ram, NULL, "ram",
> mch->ram_size);
> + memory_region_add_subregion(get_system_memory(), 0, ram);
> + }
> }
>
> static void machine_none_machine_init(MachineClass *mc)
> {
> mc->desc = "empty machine";
> mc->init = machine_none_init;
> - mc->max_cpus = 0;
> + mc->max_cpus = 1;
> + mc->default_ram_size = 0;
> }
>
> DEFINE_MACHINE("none", machine_none_machine_init)
> --
> 1.8.3.1
>
>