diff mbox series

[2/3] KVM: arm64: Generate hyp_constants.h for the host

Message ID 20211202171048.26924-3-will@kernel.org (mailing list archive)
State New, archived
Headers show
Series KVM: arm64: Keep hyp and host headers separate where possible | expand

Commit Message

Will Deacon Dec. 2, 2021, 5:10 p.m. UTC
In order to avoid exposing hypervisor (EL2) data structures directly to
the host, generate hyp_constants.h to provide constants such as structure
sizes to the host without dragging in the definitions themselves.

Signed-off-by: Will Deacon <will@kernel.org>
---
 arch/arm64/kvm/.gitignore          |  2 ++
 arch/arm64/kvm/Makefile            | 16 ++++++++++++++++
 arch/arm64/kvm/hyp/hyp-constants.c | 10 ++++++++++
 3 files changed, 28 insertions(+)
 create mode 100644 arch/arm64/kvm/.gitignore
 create mode 100644 arch/arm64/kvm/hyp/hyp-constants.c

Comments

Fuad Tabba Dec. 3, 2021, 8:28 a.m. UTC | #1
Hi Will,

On Thu, Dec 2, 2021 at 5:11 PM Will Deacon <will@kernel.org> wrote:
>
> In order to avoid exposing hypervisor (EL2) data structures directly to
> the host, generate hyp_constants.h to provide constants such as structure
> sizes to the host without dragging in the definitions themselves.

That's some fine kbuild wizardry right there! :)

Tested-by: Fuad Tabba <tabba@google.com>
Reviewed-by: Fuad Tabba <tabba@google.com>

Cheers,
/fuad

> Signed-off-by: Will Deacon <will@kernel.org>
> ---
>  arch/arm64/kvm/.gitignore          |  2 ++
>  arch/arm64/kvm/Makefile            | 16 ++++++++++++++++
>  arch/arm64/kvm/hyp/hyp-constants.c | 10 ++++++++++
>  3 files changed, 28 insertions(+)
>  create mode 100644 arch/arm64/kvm/.gitignore
>  create mode 100644 arch/arm64/kvm/hyp/hyp-constants.c
>
> diff --git a/arch/arm64/kvm/.gitignore b/arch/arm64/kvm/.gitignore
> new file mode 100644
> index 000000000000..6182aefb8302
> --- /dev/null
> +++ b/arch/arm64/kvm/.gitignore
> @@ -0,0 +1,2 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +hyp_constants.h
> diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
> index 989bb5dad2c8..0b561752f8d8 100644
> --- a/arch/arm64/kvm/Makefile
> +++ b/arch/arm64/kvm/Makefile
> @@ -25,3 +25,19 @@ kvm-y := $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o \
>          vgic/vgic-its.o vgic/vgic-debug.o
>
>  kvm-$(CONFIG_HW_PERF_EVENTS)  += pmu-emul.o
> +
> +always-y := hyp_constants.h hyp-constants.s
> +
> +define rule_gen_hyp_constants
> +       $(call filechk,offsets,__HYP_CONSTANTS_H__)
> +endef
> +
> +CFLAGS_hyp-constants.o = -I $(srctree)/$(src)/hyp/include
> +$(obj)/hyp-constants.s: $(src)/hyp/hyp-constants.c FORCE
> +       $(call if_changed_dep,cc_s_c)
> +
> +$(obj)/hyp_constants.h: $(obj)/hyp-constants.s FORCE
> +       $(call if_changed_rule,gen_hyp_constants)
> +
> +obj-kvm := $(addprefix $(obj)/, $(kvm-y))
> +$(obj-kvm): $(obj)/hyp_constants.h
> diff --git a/arch/arm64/kvm/hyp/hyp-constants.c b/arch/arm64/kvm/hyp/hyp-constants.c
> new file mode 100644
> index 000000000000..b3742a6691e8
> --- /dev/null
> +++ b/arch/arm64/kvm/hyp/hyp-constants.c
> @@ -0,0 +1,10 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +
> +#include <linux/kbuild.h>
> +#include <nvhe/memory.h>
> +
> +int main(void)
> +{
> +       DEFINE(STRUCT_HYP_PAGE_SIZE,    sizeof(struct hyp_page));
> +       return 0;
> +}
> --
> 2.34.0.rc2.393.gf8c9666880-goog
>
diff mbox series

Patch

diff --git a/arch/arm64/kvm/.gitignore b/arch/arm64/kvm/.gitignore
new file mode 100644
index 000000000000..6182aefb8302
--- /dev/null
+++ b/arch/arm64/kvm/.gitignore
@@ -0,0 +1,2 @@ 
+# SPDX-License-Identifier: GPL-2.0-only
+hyp_constants.h
diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 989bb5dad2c8..0b561752f8d8 100644
--- a/arch/arm64/kvm/Makefile
+++ b/arch/arm64/kvm/Makefile
@@ -25,3 +25,19 @@  kvm-y := $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o \
 	 vgic/vgic-its.o vgic/vgic-debug.o
 
 kvm-$(CONFIG_HW_PERF_EVENTS)  += pmu-emul.o
+
+always-y := hyp_constants.h hyp-constants.s
+
+define rule_gen_hyp_constants
+	$(call filechk,offsets,__HYP_CONSTANTS_H__)
+endef
+
+CFLAGS_hyp-constants.o = -I $(srctree)/$(src)/hyp/include
+$(obj)/hyp-constants.s: $(src)/hyp/hyp-constants.c FORCE
+	$(call if_changed_dep,cc_s_c)
+
+$(obj)/hyp_constants.h: $(obj)/hyp-constants.s FORCE
+	$(call if_changed_rule,gen_hyp_constants)
+
+obj-kvm := $(addprefix $(obj)/, $(kvm-y))
+$(obj-kvm): $(obj)/hyp_constants.h
diff --git a/arch/arm64/kvm/hyp/hyp-constants.c b/arch/arm64/kvm/hyp/hyp-constants.c
new file mode 100644
index 000000000000..b3742a6691e8
--- /dev/null
+++ b/arch/arm64/kvm/hyp/hyp-constants.c
@@ -0,0 +1,10 @@ 
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/kbuild.h>
+#include <nvhe/memory.h>
+
+int main(void)
+{
+	DEFINE(STRUCT_HYP_PAGE_SIZE,	sizeof(struct hyp_page));
+	return 0;
+}