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 |
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 --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; +}
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