[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 02/11] hw/arm/virt: use VirtMachineState.gic_ver
From: |
Igor Mammedov |
Subject: |
Re: [Qemu-devel] [PATCH 02/11] hw/arm/virt: use VirtMachineState.gic_version |
Date: |
Thu, 15 Dec 2016 11:22:59 +0100 |
On Tue, 13 Dec 2016 22:45:13 +0100
Andrew Jones <address@hidden> wrote:
> machvirt_init may need to probe for the gic version. If so, then
> make sure the result is written to VirtMachineState. With the
> state up to date, use it instead of a local variable. This is a
> cleanup that prepares for VirtMachineState to be passed to functions
> even outside hw/arm/virt.c
>
> Signed-off-by: Andrew Jones <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
> ---
> hw/arm/virt.c | 35 +++++++++++++++++------------------
> 1 file changed, 17 insertions(+), 18 deletions(-)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index d451bc4f6b9b..67c0abb30b5b 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -319,7 +319,7 @@ static void fdt_add_psci_node(const VirtMachineState *vms)
> qemu_fdt_setprop_cell(fdt, "/psci", "migrate", migrate_fn);
> }
>
> -static void fdt_add_timer_nodes(const VirtMachineState *vms, int gictype)
> +static void fdt_add_timer_nodes(const VirtMachineState *vms)
> {
> /* On real hardware these interrupts are level-triggered.
> * On KVM they were edge-triggered before host kernel version 4.4,
> @@ -347,7 +347,7 @@ static void fdt_add_timer_nodes(const VirtMachineState
> *vms, int gictype)
> irqflags = GIC_FDT_IRQ_FLAGS_EDGE_LO_HI;
> }
>
> - if (gictype == 2) {
> + if (vms->gic_version == 2) {
> irqflags = deposit32(irqflags, GIC_FDT_IRQ_PPI_CPU_START,
> GIC_FDT_IRQ_PPI_CPU_WIDTH,
> (1 << vms->smp_cpus) - 1);
> @@ -462,7 +462,7 @@ static void fdt_add_v2m_gic_node(VirtMachineState *vms)
> qemu_fdt_setprop_cell(vms->fdt, "/intc/v2m", "phandle",
> vms->msi_phandle);
> }
>
> -static void fdt_add_gic_node(VirtMachineState *vms, int type)
> +static void fdt_add_gic_node(VirtMachineState *vms)
> {
> vms->gic_phandle = qemu_fdt_alloc_phandle(vms->fdt);
> qemu_fdt_setprop_cell(vms->fdt, "/", "interrupt-parent",
> vms->gic_phandle);
> @@ -473,7 +473,7 @@ static void fdt_add_gic_node(VirtMachineState *vms, int
> type)
> qemu_fdt_setprop_cell(vms->fdt, "/intc", "#address-cells", 0x2);
> qemu_fdt_setprop_cell(vms->fdt, "/intc", "#size-cells", 0x2);
> qemu_fdt_setprop(vms->fdt, "/intc", "ranges", NULL, 0);
> - if (type == 3) {
> + if (vms->gic_version == 3) {
> qemu_fdt_setprop_string(vms->fdt, "/intc", "compatible",
> "arm,gic-v3");
> qemu_fdt_setprop_sized_cells(vms->fdt, "/intc", "reg",
> @@ -500,7 +500,7 @@ static void fdt_add_gic_node(VirtMachineState *vms, int
> type)
> qemu_fdt_setprop_cell(vms->fdt, "/intc", "phandle", vms->gic_phandle);
> }
>
> -static void fdt_add_pmu_nodes(const VirtMachineState *vms, int gictype)
> +static void fdt_add_pmu_nodes(const VirtMachineState *vms)
> {
> CPUState *cpu;
> ARMCPU *armcpu;
> @@ -514,7 +514,7 @@ static void fdt_add_pmu_nodes(const VirtMachineState
> *vms, int gictype)
> }
> }
>
> - if (gictype == 2) {
> + if (vms->gic_version == 2) {
> irqflags = deposit32(irqflags, GIC_FDT_IRQ_PPI_CPU_START,
> GIC_FDT_IRQ_PPI_CPU_WIDTH,
> (1 << vms->smp_cpus) - 1);
> @@ -570,14 +570,14 @@ static void create_v2m(VirtMachineState *vms, qemu_irq
> *pic)
> fdt_add_v2m_gic_node(vms);
> }
>
> -static void create_gic(VirtMachineState *vms, qemu_irq *pic, int type)
> +static void create_gic(VirtMachineState *vms, qemu_irq *pic)
> {
> /* We create a standalone GIC */
> VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
> DeviceState *gicdev;
> SysBusDevice *gicbusdev;
> const char *gictype;
> - int i;
> + int type = vms->gic_version, i;
>
> gictype = (type == 3) ? gicv3_class_name() : gic_class_name();
>
> @@ -641,7 +641,7 @@ static void create_gic(VirtMachineState *vms, qemu_irq
> *pic, int type)
> pic[i] = qdev_get_gpio_in(gicdev, i);
> }
>
> - fdt_add_gic_node(vms, type);
> + fdt_add_gic_node(vms);
>
> if (type == 3 && !vmc->no_its) {
> create_its(vms, gicdev);
> @@ -1237,7 +1237,6 @@ static void machvirt_init(MachineState *machine)
> qemu_irq pic[NUM_IRQS];
> MemoryRegion *sysmem = get_system_memory();
> MemoryRegion *secure_sysmem = NULL;
> - int gic_version = vms->gic_version;
> int n, virt_max_cpus;
> MemoryRegion *ram = g_new(MemoryRegion, 1);
> const char *cpu_model = machine->cpu_model;
> @@ -1258,14 +1257,14 @@ static void machvirt_init(MachineState *machine)
> /* We can probe only here because during property set
> * KVM is not available yet
> */
> - if (!gic_version) {
> + if (!vms->gic_version) {
> if (!kvm_enabled()) {
> error_report("gic-version=host requires KVM");
> exit(1);
> }
>
> - gic_version = kvm_arm_vgic_probe();
> - if (!gic_version) {
> + vms->gic_version = kvm_arm_vgic_probe();
> + if (!vms->gic_version) {
> error_report("Unable to determine GIC version supported by
> host");
> exit(1);
> }
> @@ -1300,7 +1299,7 @@ static void machvirt_init(MachineState *machine)
> /* The maximum number of CPUs depends on the GIC version, or on how
> * many redistributors we can fit into the memory map.
> */
> - if (gic_version == 3) {
> + if (vms->gic_version == 3) {
> virt_max_cpus = vms->memmap[VIRT_GIC_REDIST].size / 0x20000;
> clustersz = GICV3_TARGETLIST_BITS;
> } else {
> @@ -1417,7 +1416,7 @@ static void machvirt_init(MachineState *machine)
>
> object_property_set_bool(cpuobj, true, "realized", NULL);
> }
> - fdt_add_timer_nodes(vms, gic_version);
> + fdt_add_timer_nodes(vms);
> fdt_add_cpu_nodes(vms);
> fdt_add_psci_node(vms);
>
> @@ -1427,9 +1426,9 @@ static void machvirt_init(MachineState *machine)
>
> create_flash(vms, sysmem, secure_sysmem ? secure_sysmem : sysmem);
>
> - create_gic(vms, pic, gic_version);
> + create_gic(vms, pic);
>
> - fdt_add_pmu_nodes(vms, gic_version);
> + fdt_add_pmu_nodes(vms);
>
> create_uart(vms, pic, VIRT_UART, sysmem, serial_hds[0]);
>
> @@ -1458,7 +1457,7 @@ static void machvirt_init(MachineState *machine)
> guest_info->memmap = vms->memmap;
> guest_info->irqmap = vms->irqmap;
> guest_info->use_highmem = vms->highmem;
> - guest_info->gic_version = gic_version;
> + guest_info->gic_version = vms->gic_version;
> guest_info->no_its = vmc->no_its;
> guest_info_state->machine_done.notify = virt_guest_info_machine_done;
> qemu_add_machine_init_done_notifier(&guest_info_state->machine_done);
- [Qemu-devel] [PATCH 00/11] Remove VirtGuestInfo, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 01/11] hw/arm/virt: parameter passing cleanups, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 02/11] hw/arm/virt: use VirtMachineState.gic_version, Andrew Jones, 2016/12/13
- Re: [Qemu-devel] [PATCH 02/11] hw/arm/virt: use VirtMachineState.gic_version,
Igor Mammedov <=
- [Qemu-devel] [PATCH 04/11] hw/arm/virt: eliminate struct VirtGuestInfoState, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 03/11] hw/arm/virt: use VirtMachineState.smp_cpus, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 05/11] hw/arm/virt: remove include/hw/arm/virt-acpi-build.h, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 06/11] hw/arm/virt: move VirtMachineState/Class to virt.h, Andrew Jones, 2016/12/13
- [Qemu-devel] [PATCH 07/11] hw/arm/virt: pass VirtMachineState instead of VirtGuestInfo, Andrew Jones, 2016/12/13