diff options
author | Andre Przywara <andre.przywara@arm.com> | 2017-04-25 15:39:18 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2017-06-09 11:16:47 +0100 |
commit | cd9a8066c90f32f0888d32a6e7f80f55ae4cde5f (patch) | |
tree | 9e438d194f305d56e86024918ad93c8de3b641c3 | |
parent | fc189e9c6833c64d6a29e9196c689f41fca3b241 (diff) | |
download | kvmtool-cd9a8066c90f32f0888d32a6e7f80f55ae4cde5f.tar.gz |
FDT: use static phandles
The current implementation of fdt__alloc_phandle() suffers from being
implemented in a static inline function situated in a header file.
This will only create expected results within a single compilation
unit.
It seems a bit over the top to use a function to allocate phandles,
when at the end of the day a phandle is just a unique identifier.
To simplify things - especially with upcoming patches - we just
introduce an enum per architecture to hold all possible phandle sources
and use that instead of the dynamic allocation.
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r-- | arm/aarch32/include/kvm/fdt-arch.h | 6 | ||||
-rw-r--r-- | arm/aarch64/include/kvm/fdt-arch.h | 6 | ||||
-rw-r--r-- | arm/fdt.c | 7 | ||||
-rw-r--r-- | arm/include/arm-common/fdt-arch.h | 6 | ||||
-rw-r--r-- | include/kvm/fdt.h | 8 | ||||
-rw-r--r-- | mips/include/kvm/fdt-arch.h | 6 | ||||
-rw-r--r-- | powerpc/include/kvm/fdt-arch.h | 6 | ||||
-rw-r--r-- | powerpc/kvm.c | 2 | ||||
-rw-r--r-- | x86/include/kvm/fdt-arch.h | 6 |
9 files changed, 41 insertions, 12 deletions
diff --git a/arm/aarch32/include/kvm/fdt-arch.h b/arm/aarch32/include/kvm/fdt-arch.h new file mode 100644 index 00000000..e448bf1e --- /dev/null +++ b/arm/aarch32/include/kvm/fdt-arch.h @@ -0,0 +1,6 @@ +#ifndef KVM__KVM_FDT_H +#define KVM__KVM_FDT_H + +#include "arm-common/fdt-arch.h" + +#endif /* KVM__KVM_FDT_H */ diff --git a/arm/aarch64/include/kvm/fdt-arch.h b/arm/aarch64/include/kvm/fdt-arch.h new file mode 100644 index 00000000..e448bf1e --- /dev/null +++ b/arm/aarch64/include/kvm/fdt-arch.h @@ -0,0 +1,6 @@ +#ifndef KVM__KVM_FDT_H +#define KVM__KVM_FDT_H + +#include "arm-common/fdt-arch.h" + +#endif /* KVM__KVM_FDT_H */ @@ -114,7 +114,6 @@ static int setup_fdt(struct kvm *kvm) { struct device_header *dev_hdr; u8 staging_fdt[FDT_MAX_SIZE]; - u32 gic_phandle = fdt__alloc_phandle(); u64 mem_reg_prop[] = { cpu_to_fdt64(kvm->arch.memory_guest_start), cpu_to_fdt64(kvm->ram_size), @@ -134,7 +133,7 @@ static int setup_fdt(struct kvm *kvm) /* Header */ _FDT(fdt_begin_node(fdt, "")); - _FDT(fdt_property_cell(fdt, "interrupt-parent", gic_phandle)); + _FDT(fdt_property_cell(fdt, "interrupt-parent", PHANDLE_GIC)); _FDT(fdt_property_string(fdt, "compatible", "linux,dummy-virt")); _FDT(fdt_property_cell(fdt, "#address-cells", 0x2)); _FDT(fdt_property_cell(fdt, "#size-cells", 0x2)); @@ -166,7 +165,7 @@ static int setup_fdt(struct kvm *kvm) /* CPU and peripherals (interrupt controller, timers, etc) */ generate_cpu_nodes(fdt, kvm); if (generate_cpu_peripheral_fdt_nodes) - generate_cpu_peripheral_fdt_nodes(fdt, kvm, gic_phandle); + generate_cpu_peripheral_fdt_nodes(fdt, kvm, PHANDLE_GIC); /* Virtio MMIO devices */ dev_hdr = device__first_dev(DEVICE_BUS_MMIO); @@ -185,7 +184,7 @@ static int setup_fdt(struct kvm *kvm) } /* PCI host controller */ - pci__generate_fdt_nodes(fdt, gic_phandle); + pci__generate_fdt_nodes(fdt, PHANDLE_GIC); /* PSCI firmware */ _FDT(fdt_begin_node(fdt, "psci")); diff --git a/arm/include/arm-common/fdt-arch.h b/arm/include/arm-common/fdt-arch.h new file mode 100644 index 00000000..53ba6331 --- /dev/null +++ b/arm/include/arm-common/fdt-arch.h @@ -0,0 +1,6 @@ +#ifndef ARM__FDT_H +#define ARM__FDT_H + +enum phandles {PHANDLE_RESERVED = 0, PHANDLE_GIC, PHANDLES_MAX}; + +#endif /* ARM__FDT_H */ diff --git a/include/kvm/fdt.h b/include/kvm/fdt.h index 53d85a48..beadc7f3 100644 --- a/include/kvm/fdt.h +++ b/include/kvm/fdt.h @@ -7,6 +7,8 @@ #include <linux/types.h> +#include "kvm/fdt-arch.h" + #define FDT_MAX_SIZE 0x10000 /* Those definitions are generic FDT values for specifying IRQ @@ -33,10 +35,4 @@ enum irq_type { } \ } while (0) -static inline u32 fdt__alloc_phandle(void) -{ - static u32 phandle = 0; - return ++phandle; -} - #endif /* KVM__FDT_H */ diff --git a/mips/include/kvm/fdt-arch.h b/mips/include/kvm/fdt-arch.h new file mode 100644 index 00000000..b0302457 --- /dev/null +++ b/mips/include/kvm/fdt-arch.h @@ -0,0 +1,6 @@ +#ifndef KVM__KVM_FDT_H +#define KVM__KVM_FDT_H + +enum phandles {PHANDLE_RESERVED = 0, PHANDLES_MAX}; + +#endif /* KVM__KVM_FDT_H */ diff --git a/powerpc/include/kvm/fdt-arch.h b/powerpc/include/kvm/fdt-arch.h new file mode 100644 index 00000000..d48c0554 --- /dev/null +++ b/powerpc/include/kvm/fdt-arch.h @@ -0,0 +1,6 @@ +#ifndef KVM__KVM_FDT_H +#define KVM__KVM_FDT_H + +enum phandles {PHANDLE_RESERVED = 0, PHANDLE_XICP, PHANDLES_MAX}; + +#endif /* KVM__KVM_FDT_H */ diff --git a/powerpc/kvm.c b/powerpc/kvm.c index 3c1596d7..c738c1d6 100644 --- a/powerpc/kvm.c +++ b/powerpc/kvm.c @@ -40,8 +40,6 @@ #define HUGETLBFS_PATH "/var/lib/hugetlbfs/global/pagesize-16MB/" -#define PHANDLE_XICP 0x00001111 - static char kern_cmdline[2048]; struct kvm_ext kvm_req_ext[] = { diff --git a/x86/include/kvm/fdt-arch.h b/x86/include/kvm/fdt-arch.h new file mode 100644 index 00000000..eebd73f9 --- /dev/null +++ b/x86/include/kvm/fdt-arch.h @@ -0,0 +1,6 @@ +#ifndef X86__FDT_ARCH_H +#define X86__FDT_ARCH_H + +enum phandles {PHANDLE_RESERVED = 0, PHANDLES_MAX}; + +#endif /* KVM__KVM_FDT_H */ |