From patchwork Tue Apr 25 14:39:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 9698305 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 4F1F46020A for ; Tue, 25 Apr 2017 14:37:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 322C62807B for ; Tue, 25 Apr 2017 14:37:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 26DCB28329; Tue, 25 Apr 2017 14:37:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93FDE2807B for ; Tue, 25 Apr 2017 14:37:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1948147AbdDYOh3 (ORCPT ); Tue, 25 Apr 2017 10:37:29 -0400 Received: from foss.arm.com ([217.140.101.70]:42078 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1948139AbdDYOhZ (ORCPT ); Tue, 25 Apr 2017 10:37:25 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1A3411688; Tue, 25 Apr 2017 07:37:25 -0700 (PDT) Received: from e104803-lin.lan (unknown [10.1.207.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E7AB13F220; Tue, 25 Apr 2017 07:37:23 -0700 (PDT) From: Andre Przywara To: Will Deacon , Marc Zyngier Cc: Jean-Philippe Brucker , kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [kvmtool PATCH v10 01/15] FDT: use static phandles Date: Tue, 25 Apr 2017 15:39:18 +0100 Message-Id: <20170425143932.17235-2-andre.przywara@arm.com> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20170425143932.17235-1-andre.przywara@arm.com> References: <20170425143932.17235-1-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- 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 +#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 */