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. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> --- arm/aarch32/include/kvm/fdt-arch.h | 6 ++++++ arm/aarch64/include/kvm/fdt-arch.h | 6 ++++++ arm/fdt.c | 7 +++---- arm/include/arm-common/fdt-arch.h | 6 ++++++ include/kvm/fdt.h | 8 ++------ mips/include/kvm/fdt-arch.h | 6 ++++++ powerpc/include/kvm/fdt-arch.h | 6 ++++++ powerpc/kvm.c | 2 -- x86/include/kvm/fdt-arch.h | 6 ++++++ 9 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 arm/aarch32/include/kvm/fdt-arch.h create mode 100644 arm/aarch64/include/kvm/fdt-arch.h create mode 100644 arm/include/arm-common/fdt-arch.h create mode 100644 mips/include/kvm/fdt-arch.h create mode 100644 powerpc/include/kvm/fdt-arch.h create mode 100644 x86/include/kvm/fdt-arch.h diff --git a/arm/aarch32/include/kvm/fdt-arch.h b/arm/aarch32/include/kvm/fdt-arch.h new file mode 100644 index 0000000..e448bf1 --- /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 0000000..e448bf1 --- /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 */ diff --git a/arm/fdt.c b/arm/fdt.c index 381d48f..bcd0c3a 100644 --- a/arm/fdt.c +++ b/arm/fdt.c @@ -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 0000000..53ba633 --- /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 53d85a4..beadc7f 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 0000000..b030245 --- /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 0000000..d48c055 --- /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 3c1596d..c738c1d 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 0000000..eebd73f --- /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 */ -- 2.9.0