[PATCH v6 2/2] xen: move arm/include/asm/vm_event.h to asm-generic
asm/vm_event.h is common for ARM and RISC-V so it will be moved to asm-generic dir. Original asm/vm_event.h from ARM was updated: * use SPDX-License-Identifier. * update comment messages of stubs. * update #ifdef * instead of "include " -> "public/vm_event.h" As vm_event.h was moved to asm-generic then it is needed to create Makefile in arm/include/asm/ and add generated-y += vm_event.h to it. Signed-off-by: Oleksii Kurochko --- Changes in V6: - update the commit message. --- Changes in V5: - Update the commit message - Remove Acked-by:... - Switch ARM to use asm-generic/vm_event.h --- Changes in V4: - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs --- xen/arch/arm/include/asm/Makefile | 2 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/asm-generic/vm_event.h | 55 3 files changed, 57 insertions(+), 66 deletions(-) create mode 100644 xen/arch/arm/include/asm/Makefile delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/vm_event.h diff --git a/xen/arch/arm/include/asm/Makefile b/xen/arch/arm/include/asm/Makefile new file mode 100644 index 00..821addb0bf --- /dev/null +++ b/xen/arch/arm/include/asm/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +generic-y += vm_event.h diff --git a/xen/arch/arm/include/asm/vm_event.h b/xen/arch/arm/include/asm/vm_event.h deleted file mode 100644 index 4d861373b3..00 --- a/xen/arch/arm/include/asm/vm_event.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * vm_event.h: architecture specific vm_event handling routines - * - * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __ASM_ARM_VM_EVENT_H__ -#define __ASM_ARM_VM_EVENT_H__ - -#include -#include - -static inline int vm_event_init_domain(struct domain *d) -{ -/* Nothing to do. */ -return 0; -} - -static inline void vm_event_cleanup_domain(struct domain *d) -{ -memset(>monitor, 0, sizeof(d->monitor)); -} - -static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, - vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_sync_event(struct vcpu *v, bool value) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_reset_vmtrace(struct vcpu *v) -{ -/* Not supported on ARM. */ -} - -#endif /* __ASM_ARM_VM_EVENT_H__ */ diff --git a/xen/include/asm-generic/vm_event.h b/xen/include/asm-generic/vm_event.h new file mode 100644 index 00..29ab1b01b4 --- /dev/null +++ b/xen/include/asm-generic/vm_event.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * vm_event.h: stubs for architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_STUB_VM_EVENT_H__ +#define __ASM_STUB_VM_EVENT_H__ + +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_sync_event(struct vcpu *v, bool value) +{ +/* Nothing to do. */ +} +
[PATCH v6 1/2] xen: asm-generic support
Some headers are shared between individual architectures or are empty. To avoid duplication of these headers, asm-generic is introduced. With the following patch, an architecture uses generic headers mentioned in the file arch/$(ARCH)/include/asm/Makefile To use a generic header is needed to add to arch/$(ARCH)/include/asm/Makefile : generic-y += For each mentioned header in arch/$(ARCH)/include/asm/Makefile, the necessary wrapper in arch/$(ARCH)/include/generated/asm will be generated. As the base Makefile.asm-generic from Linux kernel was taken. ( 06c2afb862f9da8 "Linux 6.5-rc1" ). Signed-off-by: Oleksii Kurochko --- Changes in V6: - introduce $(asm-generic) macro in Kbuild.include. - move "asm-generic" after the rule "__distclean". --- Changes in V5: - Update the commit message - Update SPDX license in Makefile. - Remove code related to UML - Include $(src)/Makefile instead of $(kbuild-file) - Update comment message in Makefile.asm-generic - Update .gitignore - Update path to generated headers in CFLAGS. - Use the latest version of Linux's Makefile.asm-generic --- Changes in V4: - introduce asm-generic support - update commit message --- Changes in V3: - Rename stubs dir to asm-generic --- Changes in V2: - Nothing changed. --- .gitignore | 1 + xen/Makefile | 9 +- xen/scripts/Kbuild.include | 6 xen/scripts/Makefile.asm-generic | 53 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 xen/scripts/Makefile.asm-generic diff --git a/.gitignore b/.gitignore index 50273adb8d..287166f8fc 100644 --- a/.gitignore +++ b/.gitignore @@ -267,6 +267,7 @@ xen/arch/*/efi/efi.h xen/arch/*/efi/pe.c xen/arch/*/efi/runtime.c xen/arch/*/include/asm/asm-offsets.h +xen/arch/*/include/generated xen/build-dir-cppcheck/ xen/common/config_data.S xen/common/config.gz diff --git a/xen/Makefile b/xen/Makefile index f57e5a596c..2dc5e3526d 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -438,6 +438,7 @@ ifdef building_out_of_srctree endif CFLAGS += -I$(srctree)/include CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include +CFLAGS += -I$(objtree)/arch/$(SRCARCH)/include/generated # Note that link order matters! ALL_OBJS-y:= common/built_in.o @@ -580,16 +581,22 @@ _clean: rm -f $(TARGET).efi $(TARGET).efi.map $(TARGET).efi.elf $(TARGET).efi.stripped rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h rm -f .banner .allconfig.tmp include/xen/compile.h + rm -rf $(objtree)/arch/*/include/generated .PHONY: _distclean _distclean: clean rm -f tags TAGS cscope.files cscope.in.out cscope.out cscope.po.out GTAGS GPATH GRTAGS GSYMS .config source +# Support for using generic headers in asm-generic +PHONY += asm-generic +asm-generic: + $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm + $(TARGET).gz: $(TARGET) gzip -n -f -9 < $< > $@.new mv $@.new $@ -$(TARGET): outputmakefile FORCE +$(TARGET): outputmakefile asm-generic FORCE $(Q)$(MAKE) $(build)=tools $(Q)$(MAKE) $(build)=. include/xen/compile.h $(Q)$(MAKE) $(build)=include all diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include index 785a32c32e..c2bd8498e1 100644 --- a/xen/scripts/Kbuild.include +++ b/xen/scripts/Kbuild.include @@ -91,6 +91,12 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e clang-ifversion = $(shell [ $(CONFIG_CLANG_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) +### +# Shorthand for $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic obj +# Usage: +# $(Q)$(MAKE) $(asm-generic)=dir +asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj + ### # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= # Usage: diff --git a/xen/scripts/Makefile.asm-generic b/xen/scripts/Makefile.asm-generic new file mode 100644 index 00..92a3a741c5 --- /dev/null +++ b/xen/scripts/Makefile.asm-generic @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0-only +# include/asm-generic contains a lot of files that are used +# verbatim by several architectures. +# +# This Makefile reads the file arch/$(SRCARCH)/include/asm/Makefile +# and for each file listed in this file with generic-y creates +# a small wrapper file in arch/$(SRCARCH)/include/generated/asm. + +PHONY := all +all: + +src := $(subst /generated,,$(obj)) + +include $(srctree)/scripts/Kbuild.include +-include $(src)/Makefile + +redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y)) +redundant += $(foreach f, $(generic-y), $(if $(wildcard $(srctree)/$(src)/$(f)),$(f))) +redundant := $(sort $(redundant)) +$(if $(redundant),\ + $(warning redundant generic-y found in $(src)/Kbuild: $(redundant))) + +# If arch does not implement mandatory headers, fallback to asm-generic ones. +mandatory-y := $(filter-out $(ge
[PATCH v6 0/2] introduce stub directory to storing empty/stub headers
A lot of empty/stub headers should be introduced during the early steps of adding support of new architecture. An example can be found here: 1. https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ 2. https://lore.kernel.org/xen-devel/a92f99e8f697da99d77bfde562a549dbef3760ce.1692816595.git.sanasta...@raptorengineering.com/ As part of the patch series, asm/vm_event.h was moved to the stubs directory because It is the same for ARM, PPC, and RISC-V. --- Changes in V6: - introduce $(asm-generic) macro in Kbuild.include. - move "asm-generic" after the rule "__distclean". - update the commit message. --- Changes in V5: - Update SPDX license. - Remove code related to UML in Makefile.asm-generic. - Include $(src)/Makefile instead of $(kbuild-file). - Update comment message in Makefile.asm-generic. - Update .gitignore. - Update path to generated headers in CFLAGS. - Use the latest version of Linux's Makefile.asm-generic. - Introduce asm-generic's vm_event.h. - Switch ARM to use asm-generic/vm_event.h. --- Changes in V4: - add asm-generic support - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. - rename stubs dir to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs Oleksii Kurochko (2): xen: asm-generic support xen: move arm/include/asm/vm_event.h to asm-generic .gitignore | 1 + xen/Makefile| 9 +++- xen/arch/arm/include/asm/Makefile | 2 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/asm-generic/vm_event.h | 55 xen/scripts/Kbuild.include | 6 +++ xen/scripts/Makefile.asm-generic| 53 +++ 7 files changed, 125 insertions(+), 67 deletions(-) create mode 100644 xen/arch/arm/include/asm/Makefile delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/vm_event.h create mode 100644 xen/scripts/Makefile.asm-generic -- 2.41.0
[PATCH v1 1/2] xen: add stubs dir to include path
stubs dir will contain empty/stubs generic for all architectures headers. Signed-off-by: Oleksii Kurochko --- xen/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/xen/Makefile b/xen/Makefile index f57e5a596c..64c3542c84 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -438,6 +438,7 @@ ifdef building_out_of_srctree endif CFLAGS += -I$(srctree)/include CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include +CFLAGS += -I$(srctree)/include/stubs # Note that link order matters! ALL_OBJS-y:= common/built_in.o -- 2.41.0
[PATCH v1 0/2] introduce stub directory to storing empty/stub headers
A lot of empty/stub headers should be introduced during the early steps of adding support of new architecture. An example can be found here: 1. https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ 2. https://lore.kernel.org/xen-devel/a92f99e8f697da99d77bfde562a549dbef3760ce.1692816595.git.sanasta...@raptorengineering.com/ As part of the patch series, asm/vm_event.h was moved to the stubs directory because It is the same for ARM, PPC, and RISC-V. Oleksii Kurochko (2): xen: add stubs dir to include path xen: move arm/include/asm/vm_event.h to stubs xen/Makefile| 1 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/stubs/asm/vm_event.h| 55 3 files changed, 56 insertions(+), 66 deletions(-) delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/stubs/asm/vm_event.h -- 2.41.0
[PATCH v1 2/2] xen: move arm/include/asm/vm_event.h to stubs
asm/vm_event.h is common for ARM and RISC-V so it will be moved to stubs dir. Original asm/vm_event.h from ARM was updated: * use SPDX-License-Identifier. * update comment messages of stubs. * update #ifdef Signed-off-by: Oleksii Kurochko --- xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/stubs/asm/vm_event.h| 55 2 files changed, 55 insertions(+), 66 deletions(-) delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/stubs/asm/vm_event.h diff --git a/xen/arch/arm/include/asm/vm_event.h b/xen/arch/arm/include/asm/vm_event.h deleted file mode 100644 index 4d861373b3..00 --- a/xen/arch/arm/include/asm/vm_event.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * vm_event.h: architecture specific vm_event handling routines - * - * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __ASM_ARM_VM_EVENT_H__ -#define __ASM_ARM_VM_EVENT_H__ - -#include -#include - -static inline int vm_event_init_domain(struct domain *d) -{ -/* Nothing to do. */ -return 0; -} - -static inline void vm_event_cleanup_domain(struct domain *d) -{ -memset(>monitor, 0, sizeof(d->monitor)); -} - -static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, - vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_sync_event(struct vcpu *v, bool value) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_reset_vmtrace(struct vcpu *v) -{ -/* Not supported on ARM. */ -} - -#endif /* __ASM_ARM_VM_EVENT_H__ */ diff --git a/xen/include/stubs/asm/vm_event.h b/xen/include/stubs/asm/vm_event.h new file mode 100644 index 00..6bda6ce7df --- /dev/null +++ b/xen/include/stubs/asm/vm_event.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * vm_event.h: stubs for architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_STUB_VM_EVENT_H__ +#define __ASM_STUB_VM_EVENT_H__ + +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_sync_event(struct vcpu *v, bool value) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_reset_vmtrace(struct vcpu *v) +{ +/* Nothing to do. */ +} + +#endif /* __ASM_STUB_VM_EVENT_H__ */ -- 2.41.0
[PATCH v3 2/2] xen: move arm/include/asm/vm_event.h to asm-generic
asm/vm_event.h is common for ARM and RISC-V so it will be moved to asm-generic dir. Original asm/vm_event.h from ARM was updated: * use SPDX-License-Identifier. * update comment messages of stubs. * update #ifdef. * change public/domctl.h to public/vm_event.h. Signed-off-by: Oleksii Kurochko Acked-by: Stefano Stabellini --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs --- xen/arch/arm/include/asm/vm_event.h| 66 -- xen/include/asm-generic/asm/vm_event.h | 55 + 2 files changed, 55 insertions(+), 66 deletions(-) delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/asm/vm_event.h diff --git a/xen/arch/arm/include/asm/vm_event.h b/xen/arch/arm/include/asm/vm_event.h deleted file mode 100644 index 4d861373b3..00 --- a/xen/arch/arm/include/asm/vm_event.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * vm_event.h: architecture specific vm_event handling routines - * - * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __ASM_ARM_VM_EVENT_H__ -#define __ASM_ARM_VM_EVENT_H__ - -#include -#include - -static inline int vm_event_init_domain(struct domain *d) -{ -/* Nothing to do. */ -return 0; -} - -static inline void vm_event_cleanup_domain(struct domain *d) -{ -memset(>monitor, 0, sizeof(d->monitor)); -} - -static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, - vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_sync_event(struct vcpu *v, bool value) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_reset_vmtrace(struct vcpu *v) -{ -/* Not supported on ARM. */ -} - -#endif /* __ASM_ARM_VM_EVENT_H__ */ diff --git a/xen/include/asm-generic/asm/vm_event.h b/xen/include/asm-generic/asm/vm_event.h new file mode 100644 index 00..29ab1b01b4 --- /dev/null +++ b/xen/include/asm-generic/asm/vm_event.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * vm_event.h: stubs for architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_STUB_VM_EVENT_H__ +#define __ASM_STUB_VM_EVENT_H__ + +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_sync_event(struct vcpu *v, bool value) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_reset_vmtrace(struct vcpu *v) +{ +/* Nothing to do. */ +} + +#endif /* __ASM_STUB_VM_EVENT_H__ */ -- 2.41.0
[PATCH v3 1/2] xen: add asm-generic dir to include path
asm-generic dir will contain empty/stubs generic for all architectures. Signed-off-by: Oleksii Kurochko --- Changes in V3: - Rename stubs dir to asm-generic --- Changes in V2: - Nothing changed. --- xen/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/xen/Makefile b/xen/Makefile index f57e5a596c..5482c86080 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -438,6 +438,7 @@ ifdef building_out_of_srctree endif CFLAGS += -I$(srctree)/include CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include +CFLAGS += -I$(srctree)/include/asm-generic # Note that link order matters! ALL_OBJS-y:= common/built_in.o -- 2.41.0
[PATCH v3 0/2] introduce stub directory to storing empty/stub headers
A lot of empty/stub headers should be introduced during the early steps of adding support of new architecture. An example can be found here: 1. https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ 2. https://lore.kernel.org/xen-devel/a92f99e8f697da99d77bfde562a549dbef3760ce.1692816595.git.sanasta...@raptorengineering.com/ As part of the patch series, asm/vm_event.h was moved to the stubs directory because It is the same for ARM, PPC, and RISC-V. --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. - rename stubs dir to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs Oleksii Kurochko (2): xen: add asm-generic dir to include path xen: move arm/include/asm/vm_event.h to stubs xen/Makefile | 1 + xen/arch/arm/include/asm/vm_event.h| 66 -- xen/include/asm-generic/asm/vm_event.h | 55 + 3 files changed, 56 insertions(+), 66 deletions(-) delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/asm/vm_event.h -- 2.41.0
[PATCH v4 0/2] introduce stub directory to storing empty/stub headers
A lot of empty/stub headers should be introduced during the early steps of adding support of new architecture. An example can be found here: 1. https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ 2. https://lore.kernel.org/xen-devel/a92f99e8f697da99d77bfde562a549dbef3760ce.1692816595.git.sanasta...@raptorengineering.com/ As part of the patch series, asm/vm_event.h was moved to the stubs directory because It is the same for ARM, PPC, and RISC-V. --- Changes in V4: - add asm-generic support - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. - rename stubs dir to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs Oleksii Kurochko (2): xen: asm-generic support xen: move arm/include/asm/vm_event.h to asm-generic xen/Makefile | 10 +- xen/arch/arm/include/asm/Kbuild| 1 + xen/arch/ppc/include/asm/Kbuild| 1 + xen/arch/riscv/include/asm/Kbuild | 1 + xen/arch/x86/include/asm/Kbuild| 1 + xen/include/asm-generic/vm_event.h | 55 ++ xen/scripts/Makefile.asm-generic | 23 + 7 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 xen/arch/arm/include/asm/Kbuild create mode 100644 xen/arch/ppc/include/asm/Kbuild create mode 100644 xen/arch/riscv/include/asm/Kbuild create mode 100644 xen/arch/x86/include/asm/Kbuild create mode 100644 xen/include/asm-generic/vm_event.h create mode 100644 xen/scripts/Makefile.asm-generic -- 2.41.0
[PATCH v4 2/2] xen: move arm/include/asm/vm_event.h to asm-generic
asm/vm_event.h is common for ARM and RISC-V so it will be moved to asm-generic dir. Original asm/vm_event.h from ARM was updated: * use SPDX-License-Identifier. * update comment messages of stubs. * update #ifdef. * change public/domctl.h to public/vm_event.h. Signed-off-by: Oleksii Kurochko Acked-by: Stefano Stabellini --- Changes in V4: - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs --- xen/include/asm-generic/vm_event.h | 55 ++ 1 file changed, 55 insertions(+) create mode 100644 xen/include/asm-generic/vm_event.h diff --git a/xen/include/asm-generic/vm_event.h b/xen/include/asm-generic/vm_event.h new file mode 100644 index 00..620c7b971c --- /dev/null +++ b/xen/include/asm-generic/vm_event.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * vm_event.h: stubs for architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_GENERIC_VM_EVENT_H__ +#define __ASM_GENERIC_VM_EVENT_H__ + +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_sync_event(struct vcpu *v, bool value) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_reset_vmtrace(struct vcpu *v) +{ +/* Nothing to do. */ +} + +#endif /* __ASM_GENERIC_VM_EVENT_H__ */ -- 2.41.0
[PATCH v4 1/2] xen: asm-generic support
Some headers are shared between individual architectures or are empty. To avoid duplication of these headers, asm-generic is introduced. With the following patch, an architecture uses generic headers mentioned in the file arch/$(ARCH)/include/asm/Kbuild. To use a generic header is needed to add to arch/$(ARCH)/include/asm/Kbuild : generic-y += For each mentioned header in arch/$(ARCH)/include/asm/Kbuild, kbuild will generate the necessary wrapper in arch/$(ARCH)/include/generated/asm. Signed-off-by: Oleksii Kurochko --- Changes in V4: - introduce asm-generic support - update commit message --- Changes in V3: - Rename stubs dir to asm-generic --- Changes in V2: - Nothing changed. --- xen/Makefile | 10 +- xen/arch/arm/include/asm/Kbuild | 1 + xen/arch/ppc/include/asm/Kbuild | 1 + xen/arch/riscv/include/asm/Kbuild | 1 + xen/arch/x86/include/asm/Kbuild | 1 + xen/scripts/Makefile.asm-generic | 23 +++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 xen/arch/arm/include/asm/Kbuild create mode 100644 xen/arch/ppc/include/asm/Kbuild create mode 100644 xen/arch/riscv/include/asm/Kbuild create mode 100644 xen/arch/x86/include/asm/Kbuild create mode 100644 xen/scripts/Makefile.asm-generic diff --git a/xen/Makefile b/xen/Makefile index f57e5a596c..698d6ddeb8 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -438,6 +438,7 @@ ifdef building_out_of_srctree endif CFLAGS += -I$(srctree)/include CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include +CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include/generated # Note that link order matters! ALL_OBJS-y:= common/built_in.o @@ -580,6 +581,7 @@ _clean: rm -f $(TARGET).efi $(TARGET).efi.map $(TARGET).efi.elf $(TARGET).efi.stripped rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h rm -f .banner .allconfig.tmp include/xen/compile.h + rm -rf arch/*/include/generated .PHONY: _distclean _distclean: clean @@ -589,7 +591,7 @@ $(TARGET).gz: $(TARGET) gzip -n -f -9 < $< > $@.new mv $@.new $@ -$(TARGET): outputmakefile FORCE +$(TARGET): outputmakefile asm-generic FORCE $(Q)$(MAKE) $(build)=tools $(Q)$(MAKE) $(build)=. include/xen/compile.h $(Q)$(MAKE) $(build)=include all @@ -667,6 +669,12 @@ endif # need-sub-make PHONY += FORCE FORCE: +# Support for using generic headers in asm-generic +PHONY += asm-generic +asm-generic: + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \ + obj=arch/$(SRCARCH)/include/generated/asm + # Declare the contents of the PHONY variable as phony. We keep that # information in a variable so we can use it in if_changed and friends. .PHONY: $(PHONY) diff --git a/xen/arch/arm/include/asm/Kbuild b/xen/arch/arm/include/asm/Kbuild new file mode 100644 index 00..a4e40e534e --- /dev/null +++ b/xen/arch/arm/include/asm/Kbuild @@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0-only diff --git a/xen/arch/ppc/include/asm/Kbuild b/xen/arch/ppc/include/asm/Kbuild new file mode 100644 index 00..a4e40e534e --- /dev/null +++ b/xen/arch/ppc/include/asm/Kbuild @@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0-only diff --git a/xen/arch/riscv/include/asm/Kbuild b/xen/arch/riscv/include/asm/Kbuild new file mode 100644 index 00..a4e40e534e --- /dev/null +++ b/xen/arch/riscv/include/asm/Kbuild @@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0-only diff --git a/xen/arch/x86/include/asm/Kbuild b/xen/arch/x86/include/asm/Kbuild new file mode 100644 index 00..a4e40e534e --- /dev/null +++ b/xen/arch/x86/include/asm/Kbuild @@ -0,0 +1 @@ +# SPDX-License-Identifier: GPL-2.0-only diff --git a/xen/scripts/Makefile.asm-generic b/xen/scripts/Makefile.asm-generic new file mode 100644 index 00..0aac3f50b8 --- /dev/null +++ b/xen/scripts/Makefile.asm-generic @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: GPL-2.0 +# include/asm-generic contains a lot of files that are used +# verbatim by several architectures. +# +# This Makefile reads the file arch/$(SRCARCH)/include/asm/Kbuild +# and for each file listed in this file with generic-y creates +# a small wrapper file in $(obj) (arch/$(SRCARCH)/include/generated/asm) + +kbuild-file := $(srctree)/arch/$(SRCARCH)/include/asm/Kbuild +include $(kbuild-file) + +include scripts/Kbuild.include + +# Create output directory if not already present +_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) + +quiet_cmd_wrap = WRAP$@ +cmd_wrap = echo "\#include " >$@ + +all: $(patsubst %, $(obj)/%, $(generic-y)) + +$(obj)/%.h: + $(call cmd,wrap) -- 2.41.0
Re: [PATCH v4 2/2] xen: move arm/include/asm/vm_event.h to asm-generic
The change which adds generic-y += vm_event.h to ARM's Kbuild was lost during creation of the patch. Should be added in the next patch version On Fri, Sep 1, 2023, 18:02 Oleksii Kurochko wrote: > asm/vm_event.h is common for ARM and RISC-V so it will be moved to > asm-generic dir. > > Original asm/vm_event.h from ARM was updated: > * use SPDX-License-Identifier. > * update comment messages of stubs. > * update #ifdef. > * change public/domctl.h to public/vm_event.h. > > Signed-off-by: Oleksii Kurochko > Acked-by: Stefano Stabellini > --- > Changes in V4: > - update path of vm_event.h from include/asm-generic/asm to > include/asm-generic > --- > Changes in V3: > - add Acked-by: Stefano Stabellini for "xen: > move arm/include/asm/vm_event.h to asm-generic" > - update SPDX tag. > - move asm/vm_event.h to asm-generic. > --- > Changes in V2: > - change public/domctl.h to public/vm_event.h. > - update commit message of [PATCH v2 2/2] xen: move > arm/include/asm/vm_event.h to stubs > --- > xen/include/asm-generic/vm_event.h | 55 ++ > 1 file changed, 55 insertions(+) > create mode 100644 xen/include/asm-generic/vm_event.h > > diff --git a/xen/include/asm-generic/vm_event.h > b/xen/include/asm-generic/vm_event.h > new file mode 100644 > index 00..620c7b971c > --- /dev/null > +++ b/xen/include/asm-generic/vm_event.h > @@ -0,0 +1,55 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * vm_event.h: stubs for architecture specific vm_event handling routines > + * > + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) > + */ > + > +#ifndef __ASM_GENERIC_VM_EVENT_H__ > +#define __ASM_GENERIC_VM_EVENT_H__ > + > +#include > +#include > + > +static inline int vm_event_init_domain(struct domain *d) > +{ > +/* Nothing to do. */ > +return 0; > +} > + > +static inline void vm_event_cleanup_domain(struct domain *d) > +{ > +memset(>monitor, 0, sizeof(d->monitor)); > +} > + > +static inline void vm_event_toggle_singlestep(struct domain *d, struct > vcpu *v, > + vm_event_response_t *rsp) > +{ > +/* Nothing to do. */ > +} > + > +static inline > +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t > *rsp) > +{ > +/* Nothing to do. */ > +} > + > +static inline > +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) > +{ > +/* Nothing to do. */ > +} > + > +static inline > +void vm_event_sync_event(struct vcpu *v, bool value) > +{ > +/* Nothing to do. */ > +} > + > +static inline > +void vm_event_reset_vmtrace(struct vcpu *v) > +{ > +/* Nothing to do. */ > +} > + > +#endif /* __ASM_GENERIC_VM_EVENT_H__ */ > -- > 2.41.0 > >
[PATCH v7 1/2] xen: asm-generic support
Some headers are shared between individual architectures or are empty. To avoid duplication of these headers, asm-generic is introduced. With the following patch, an architecture uses generic headers mentioned in the file arch/$(ARCH)/include/asm/Makefile To use a generic header is needed to add to arch/$(ARCH)/include/asm/Makefile : generic-y += For each mentioned header in arch/$(ARCH)/include/asm/Makefile, the necessary wrapper in arch/$(ARCH)/include/generated/asm will be generated. As the base Makefile.asm-generic from Linux kernel was taken. ( 06c2afb862f9da8 "Linux 6.5-rc1" ). Signed-off-by: Oleksii Kurochko Reviewed-by: Anthony PERARD Acked-by: Jan Beulich --- Changes in V7: - update warning message in Makefile.asm-generic - add Reviewed-by: Anthony PERARD - add Acked-by: Jan Beulich --- Changes in V6: - introduce $(asm-generic) macro in Kbuild.include. - move "asm-generic" after the rule "__distclean". --- Changes in V5: - Update the commit message - Update SPDX license in Makefile. - Remove code related to UML - Include $(src)/Makefile instead of $(kbuild-file) - Update comment message in Makefile.asm-generic - Update .gitignore - Update path to generated headers in CFLAGS. - Use the latest version of Linux's Makefile.asm-generic --- Changes in V4: - introduce asm-generic support - update commit message --- Changes in V3: - Rename stubs dir to asm-generic --- Changes in V2: - Nothing changed. --- .gitignore | 1 + xen/Makefile | 9 +- xen/scripts/Kbuild.include | 6 xen/scripts/Makefile.asm-generic | 53 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 xen/scripts/Makefile.asm-generic diff --git a/.gitignore b/.gitignore index 50273adb8d..287166f8fc 100644 --- a/.gitignore +++ b/.gitignore @@ -267,6 +267,7 @@ xen/arch/*/efi/efi.h xen/arch/*/efi/pe.c xen/arch/*/efi/runtime.c xen/arch/*/include/asm/asm-offsets.h +xen/arch/*/include/generated xen/build-dir-cppcheck/ xen/common/config_data.S xen/common/config.gz diff --git a/xen/Makefile b/xen/Makefile index f57e5a596c..2dc5e3526d 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -438,6 +438,7 @@ ifdef building_out_of_srctree endif CFLAGS += -I$(srctree)/include CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include +CFLAGS += -I$(objtree)/arch/$(SRCARCH)/include/generated # Note that link order matters! ALL_OBJS-y:= common/built_in.o @@ -580,16 +581,22 @@ _clean: rm -f $(TARGET).efi $(TARGET).efi.map $(TARGET).efi.elf $(TARGET).efi.stripped rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h rm -f .banner .allconfig.tmp include/xen/compile.h + rm -rf $(objtree)/arch/*/include/generated .PHONY: _distclean _distclean: clean rm -f tags TAGS cscope.files cscope.in.out cscope.out cscope.po.out GTAGS GPATH GRTAGS GSYMS .config source +# Support for using generic headers in asm-generic +PHONY += asm-generic +asm-generic: + $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm + $(TARGET).gz: $(TARGET) gzip -n -f -9 < $< > $@.new mv $@.new $@ -$(TARGET): outputmakefile FORCE +$(TARGET): outputmakefile asm-generic FORCE $(Q)$(MAKE) $(build)=tools $(Q)$(MAKE) $(build)=. include/xen/compile.h $(Q)$(MAKE) $(build)=include all diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include index 785a32c32e..c2bd8498e1 100644 --- a/xen/scripts/Kbuild.include +++ b/xen/scripts/Kbuild.include @@ -91,6 +91,12 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e clang-ifversion = $(shell [ $(CONFIG_CLANG_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) +### +# Shorthand for $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic obj +# Usage: +# $(Q)$(MAKE) $(asm-generic)=dir +asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj + ### # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= # Usage: diff --git a/xen/scripts/Makefile.asm-generic b/xen/scripts/Makefile.asm-generic new file mode 100644 index 00..b0d356bfa3 --- /dev/null +++ b/xen/scripts/Makefile.asm-generic @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0-only +# include/asm-generic contains a lot of files that are used +# verbatim by several architectures. +# +# This Makefile reads the file arch/$(SRCARCH)/include/asm/Makefile +# and for each file listed in this file with generic-y creates +# a small wrapper file in arch/$(SRCARCH)/include/generated/asm. + +PHONY := all +all: + +src := $(subst /generated,,$(obj)) + +include $(srctree)/scripts/Kbuild.include +-include $(src)/Makefile + +redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y)) +redundant += $(foreach f, $(generic-y), $(if $(wildcard $(srctree)/$(src)/$(f)),$(f))) +redundant := $(sort $(redundant)) +$(if $(redundant),\ +
[PATCH v7 2/2] xen: move arm/include/asm/vm_event.h to asm-generic
asm/vm_event.h is common for ARM and RISC-V so it will be moved to asm-generic dir. Original asm/vm_event.h from ARM was updated: * use SPDX-License-Identifier. * update comment messages of stubs. * update #ifdef * instead of "include " -> "public/vm_event.h" As vm_event.h was moved to asm-generic then it is needed to create Makefile in arm/include/asm/ and add generated-y += vm_event.h to it. Signed-off-by: Oleksii Kurochko Acked-by: Tamas K Lengyel --- Changes in V7: - update guards in asm-generic/vm_event.h. - add Acked-by: Tamas K Lengyel --- Changes in V6: - update the commit message. --- Changes in V5: - Update the commit message - Remove Acked-by:... - Switch ARM to use asm-generic/vm_event.h --- Changes in V4: - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs --- xen/arch/arm/include/asm/Makefile | 2 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/asm-generic/vm_event.h | 55 3 files changed, 57 insertions(+), 66 deletions(-) create mode 100644 xen/arch/arm/include/asm/Makefile delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/vm_event.h diff --git a/xen/arch/arm/include/asm/Makefile b/xen/arch/arm/include/asm/Makefile new file mode 100644 index 00..821addb0bf --- /dev/null +++ b/xen/arch/arm/include/asm/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +generic-y += vm_event.h diff --git a/xen/arch/arm/include/asm/vm_event.h b/xen/arch/arm/include/asm/vm_event.h deleted file mode 100644 index 4d861373b3..00 --- a/xen/arch/arm/include/asm/vm_event.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * vm_event.h: architecture specific vm_event handling routines - * - * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __ASM_ARM_VM_EVENT_H__ -#define __ASM_ARM_VM_EVENT_H__ - -#include -#include - -static inline int vm_event_init_domain(struct domain *d) -{ -/* Nothing to do. */ -return 0; -} - -static inline void vm_event_cleanup_domain(struct domain *d) -{ -memset(>monitor, 0, sizeof(d->monitor)); -} - -static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, - vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_sync_event(struct vcpu *v, bool value) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_reset_vmtrace(struct vcpu *v) -{ -/* Not supported on ARM. */ -} - -#endif /* __ASM_ARM_VM_EVENT_H__ */ diff --git a/xen/include/asm-generic/vm_event.h b/xen/include/asm-generic/vm_event.h new file mode 100644 index 00..620c7b971c --- /dev/null +++ b/xen/include/asm-generic/vm_event.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * vm_event.h: stubs for architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_GENERIC_VM_EVENT_H__ +#define __ASM_GENERIC_VM_EVENT_H__ + +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{
[PATCH v7 0/2] introduce stub directory to storing empty/stub headers
A lot of empty/stub headers should be introduced during the early steps of adding support of new architecture. An example can be found here: 1. https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ 2. https://lore.kernel.org/xen-devel/a92f99e8f697da99d77bfde562a549dbef3760ce.1692816595.git.sanasta...@raptorengineering.com/ As part of the patch series, asm/vm_event.h was moved to the stubs directory because It is the same for ARM, PPC, and RISC-V. --- Changes in V7: - update warning message in Makefile.asm-generic - add Reviewed-by: Anthony PERARD for patch 1 - add Acked-by: Jan Beulich for patch 1 - update header guards in asm-generic/vm_event.h. - add Acked-by: Tamas K Lengyel for patch 2 --- Changes in V6: - introduce $(asm-generic) macro in Kbuild.include. - move "asm-generic" after the rule "__distclean". - update the commit message. --- Changes in V5: - Update SPDX license. - Remove code related to UML in Makefile.asm-generic. - Include $(src)/Makefile instead of $(kbuild-file). - Update comment message in Makefile.asm-generic. - Update .gitignore. - Update path to generated headers in CFLAGS. - Use the latest version of Linux's Makefile.asm-generic. - Introduce asm-generic's vm_event.h. - Switch ARM to use asm-generic/vm_event.h. --- Changes in V4: - add asm-generic support - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. - rename stubs dir to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs Oleksii Kurochko (2): xen: asm-generic support xen: move arm/include/asm/vm_event.h to asm-generic .gitignore | 1 + xen/Makefile| 9 +++- xen/arch/arm/include/asm/Makefile | 2 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/asm-generic/vm_event.h | 55 xen/scripts/Kbuild.include | 6 +++ xen/scripts/Makefile.asm-generic| 53 +++ 7 files changed, 125 insertions(+), 67 deletions(-) create mode 100644 xen/arch/arm/include/asm/Makefile delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/vm_event.h create mode 100644 xen/scripts/Makefile.asm-generic -- 2.41.0
[PATCH v1 22/29] xen/asm-generic: introduce stub header delay.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/delay.h | 21 + 1 file changed, 21 insertions(+) create mode 100644 xen/include/asm-generic/delay.h diff --git a/xen/include/asm-generic/delay.h b/xen/include/asm-generic/delay.h new file mode 100644 index 00..1e68c6cacb --- /dev/null +++ b/xen/include/asm-generic/delay.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef _ASM_GENERIC_DELAY_H +#define _ASM_GENERIC_DELAY_H + +#include + +static inline void udelay(unsigned long usecs) +{ +BUG(); +} + +#endif /* _ASM_GENERIC_DELAY_H */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 26/29] xen/asm-generic: introduce stub header monitor.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/monitor.h | 64 +++ 1 file changed, 64 insertions(+) create mode 100644 xen/include/asm-generic/monitor.h diff --git a/xen/include/asm-generic/monitor.h b/xen/include/asm-generic/monitor.h new file mode 100644 index 00..c61fe738a8 --- /dev/null +++ b/xen/include/asm-generic/monitor.h @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * include/asm-GENERIC/monitor.h + * + * Arch-specific monitor_op domctl handler. + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + * Copyright (c) 2016, Bitdefender S.R.L. + * + */ + +#ifndef __ASM_GENERIC_MONITOR_H__ +#define __ASM_GENERIC_MONITOR_H__ + +#include +#include + +static inline +void arch_monitor_allow_userspace(struct domain *d, bool allow_userspace) +{ +} + +static inline +int arch_monitor_domctl_op(struct domain *d, struct xen_domctl_monitor_op *mop) +{ +/* No arch-specific monitor ops on GENERIC. */ +return -EOPNOTSUPP; +} + +int arch_monitor_domctl_event(struct domain *d, + struct xen_domctl_monitor_op *mop); + +static inline +int arch_monitor_init_domain(struct domain *d) +{ +/* No arch-specific domain initialization on GENERIC. */ +return 0; +} + +static inline +void arch_monitor_cleanup_domain(struct domain *d) +{ +/* No arch-specific domain cleanup on GENERIC. */ +} + +static inline uint32_t arch_monitor_get_capabilities(struct domain *d) +{ +uint32_t capabilities = 0; + +return capabilities; +} + +#endif /* __ASM_GENERIC_MONITOR_H__ */ + + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 20/29] xen/asm-generic: introduce stub header div64.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/div64.h | 24 1 file changed, 24 insertions(+) create mode 100644 xen/include/asm-generic/div64.h diff --git a/xen/include/asm-generic/div64.h b/xen/include/asm-generic/div64.h new file mode 100644 index 00..9f9c20878b --- /dev/null +++ b/xen/include/asm-generic/div64.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_DIV64 +#define __ASM_GENERIC_DIV64 + +#include + +# define do_div(n,base) ({ \ +uint32_t __base = (base); \ +uint32_t __rem; \ +__rem = ((uint64_t)(n)) % __base; \ +(n) = ((uint64_t)(n)) / __base; \ +__rem; \ + }) + +#endif + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 19/29] xen/asm-generic: introduce stub header hardirq.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/hardirq.h | 27 +++ 1 file changed, 27 insertions(+) create mode 100644 xen/include/asm-generic/hardirq.h diff --git a/xen/include/asm-generic/hardirq.h b/xen/include/asm-generic/hardirq.h new file mode 100644 index 00..b4b71a7315 --- /dev/null +++ b/xen/include/asm-generic/hardirq.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_HARDIRQ_H +#define __ASM_GENERIC_HARDIRQ_H + +#include + +typedef struct { +unsigned long __softirq_pending; +unsigned int __local_irq_count; +} __cacheline_aligned irq_cpustat_t; + +#include /* Standard mappings for irq_cpustat_t above */ + +#define in_irq() (local_irq_count(smp_processor_id()) != 0) + +#define irq_enter() (local_irq_count(smp_processor_id())++) +#define irq_exit() (local_irq_count(smp_processor_id())--) + +#endif /* __ASM_GENERIC_HARDIRQ_H */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 23/29] xen/asm-generic: introduce stub header domain.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/domain.h | 53 1 file changed, 53 insertions(+) create mode 100644 xen/include/asm-generic/domain.h diff --git a/xen/include/asm-generic/domain.h b/xen/include/asm-generic/domain.h new file mode 100644 index 00..b2d244d121 --- /dev/null +++ b/xen/include/asm-generic/domain.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_DOMAIN_H__ +#define __ASM_GENERIC_DOMAIN_H__ + +#include +#include + +struct hvm_domain +{ +uint64_t params[HVM_NR_PARAMS]; +}; + +#define is_domain_direct_mapped(d) ((void)(d), 0) + +struct arch_vcpu_io { +}; + +struct arch_vcpu { +}; + +struct arch_domain { +struct hvm_domain hvm; +}; + +#include + +static inline struct vcpu_guest_context *alloc_vcpu_guest_context(void) +{ +return xmalloc(struct vcpu_guest_context); +} + +static inline void free_vcpu_guest_context(struct vcpu_guest_context *vgc) +{ +xfree(vgc); +} + +struct guest_memory_policy {}; +static inline void update_guest_memory_policy(struct vcpu *v, + struct guest_memory_policy *gmp) +{} + +static inline void arch_vcpu_block(struct vcpu *v) {} + +#endif /* __ASM_GENERIC_DOMAIN_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 07/29] xen/asm-generic: introduce stub header guest_atomics.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/guest_atomics.h | 47 + 1 file changed, 47 insertions(+) create mode 100644 xen/include/asm-generic/guest_atomics.h diff --git a/xen/include/asm-generic/guest_atomics.h b/xen/include/asm-generic/guest_atomics.h new file mode 100644 index 00..6c4e79350a --- /dev/null +++ b/xen/include/asm-generic/guest_atomics.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_GUEST_ATOMICS_H +#define __ASM_GENERIC_GUEST_ATOMICS_H + +#define guest_testop(name) \ +static inline int guest_##name(struct domain *d, int nr, volatile void *p) \ +{ \ +(void) d; \ +(void) nr; \ +(void) p; \ +\ +return 0; \ +} + +#define guest_bitop(name) \ +static inline void guest_##name(struct domain *d, int nr, volatile void *p) \ +{ \ +(void) d; \ +(void) nr; \ +(void) p; \ +} + +guest_bitop(set_bit) +guest_bitop(clear_bit) +guest_bitop(change_bit) + +#undef guest_bitop + +guest_testop(test_and_set_bit) +guest_testop(test_and_clear_bit) +guest_testop(test_and_change_bit) + +#undef guest_testop + + +#define guest_test_bit(d, nr, p) ((void)(d), test_bit(nr, p)) + +#endif /* __ASM_GENERIC_GUEST_ATOMICS_H */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 11/29] xen/asm-generic: introduce stub header mem_access.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/mem_access.h | 14 ++ 1 file changed, 14 insertions(+) create mode 100644 xen/include/asm-generic/mem_access.h diff --git a/xen/include/asm-generic/mem_access.h b/xen/include/asm-generic/mem_access.h new file mode 100644 index 00..d2a0b545a4 --- /dev/null +++ b/xen/include/asm-generic/mem_access.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_MEM_ACCESS +#define __ASM_GENERIC_MEM_ACCESS + +#endif + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 10/29] xen/asm-generic: introduce stub header iommu.h
The patch introduces stub header necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/iommu.h | 17 + 1 file changed, 17 insertions(+) create mode 100644 xen/include/asm-generic/iommu.h diff --git a/xen/include/asm-generic/iommu.h b/xen/include/asm-generic/iommu.h new file mode 100644 index 00..b08550e6b3 --- /dev/null +++ b/xen/include/asm-generic/iommu.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_IOMMU_H__ +#define __ASM_GENERIC_IOMMU_H__ + +struct arch_iommu { +}; + +#endif /* __ASM_IOMMU_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 09/29] xen/asm-generic: introduce stub header iocap.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/iocap.h | 17 + 1 file changed, 17 insertions(+) create mode 100644 xen/include/asm-generic/iocap.h diff --git a/xen/include/asm-generic/iocap.h b/xen/include/asm-generic/iocap.h new file mode 100644 index 00..dd7cb45488 --- /dev/null +++ b/xen/include/asm-generic/iocap.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_IOCAP_H__ +#define __ASM_GENERIC_IOCAP_H__ + +#define cache_flush_permitted(d)\ +(!rangeset_is_empty((d)->iomem_caps)) + +#endif /* __ASM_GENERIC_IOCAP_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 15/29] xen/asm-generic: introduce stub header xenoprof.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/xenoprof.h | 14 ++ 1 file changed, 14 insertions(+) create mode 100644 xen/include/asm-generic/xenoprof.h diff --git a/xen/include/asm-generic/xenoprof.h b/xen/include/asm-generic/xenoprof.h new file mode 100644 index 00..8ee3408b77 --- /dev/null +++ b/xen/include/asm-generic/xenoprof.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_XENOPROF_H__ +#define __ASM_GENERIC_XENOPROF_H__ + +#endif /* __ASM_GENERIC_XENOPROF_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 12/29] xen/asm-generic: introduce stub header pci.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/pci.h | 18 ++ 1 file changed, 18 insertions(+) create mode 100644 xen/include/asm-generic/pci.h diff --git a/xen/include/asm-generic/pci.h b/xen/include/asm-generic/pci.h new file mode 100644 index 00..b577ee105f --- /dev/null +++ b/xen/include/asm-generic/pci.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_PCI_H__ +#define __ASM_GENERIC_PCI_H__ + +struct arch_pci_dev { +}; + +#endif /* __ASM_GENERIC_PCI_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ + -- 2.41.0
[PATCH v1 13/29] xen/asm-generic: introduce stub header random.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/random.h | 20 1 file changed, 20 insertions(+) create mode 100644 xen/include/asm-generic/random.h diff --git a/xen/include/asm-generic/random.h b/xen/include/asm-generic/random.h new file mode 100644 index 00..cd2307e70b --- /dev/null +++ b/xen/include/asm-generic/random.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_RANDOM_H__ +#define __ASM_GENERIC_RANDOM_H__ + +static inline unsigned int arch_get_random(void) +{ +return 0; +} + +#endif /* __ASM_GENERIC_RANDOM_H__ */ + + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 21/29] xen/asm-generic: introduce stub header altp2m.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/altp2m.h | 34 1 file changed, 34 insertions(+) create mode 100644 xen/include/asm-generic/altp2m.h diff --git a/xen/include/asm-generic/altp2m.h b/xen/include/asm-generic/altp2m.h new file mode 100644 index 00..e73cc8a04f --- /dev/null +++ b/xen/include/asm-generic/altp2m.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_ALTP2M_H +#define __ASM_GENERIC_ALTP2M_H + +#include + +struct domain; +struct vcpu; + +/* Alternate p2m on/off per domain */ +static inline bool altp2m_active(const struct domain *d) +{ +/* Not implemented on GENERIC. */ +return false; +} + +/* Alternate p2m VCPU */ +static inline uint16_t altp2m_vcpu_idx(const struct vcpu *v) +{ +/* Not implemented on GENERIC, should not be reached. */ +BUG(); +return 0; +} + +#endif /* __ASM_GENERIC_ALTP2M_H */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 14/29] xen/asm-generic: introduce stub header setup.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/setup.h | 16 1 file changed, 16 insertions(+) create mode 100644 xen/include/asm-generic/setup.h diff --git a/xen/include/asm-generic/setup.h b/xen/include/asm-generic/setup.h new file mode 100644 index 00..37feac222f --- /dev/null +++ b/xen/include/asm-generic/setup.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_SETUP_H__ +#define __ASM_GENERIC_SETUP_H__ + +#define max_init_domid (0) + +#endif /* __ASM_GENERIC_SETUP_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 18/29] xen/asm-generic: introduce stub header smp.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/smp.h | 30 ++ 1 file changed, 30 insertions(+) create mode 100644 xen/include/asm-generic/smp.h diff --git a/xen/include/asm-generic/smp.h b/xen/include/asm-generic/smp.h new file mode 100644 index 00..5d6b7185f1 --- /dev/null +++ b/xen/include/asm-generic/smp.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_SMP_H +#define __ASM_GENERIC_SMP_H + +#ifndef __ASSEMBLY__ +#include +#include +#endif + +DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask); +DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask); + +#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) + +/* + * Do we, for platform reasons, need to actually keep CPUs online when we + * would otherwise prefer them to be off? + */ +#define park_offline_cpus false + +#endif + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 17/29] xen/asm-generic: introduce stub header percpu.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/percpu.h | 35 1 file changed, 35 insertions(+) create mode 100644 xen/include/asm-generic/percpu.h diff --git a/xen/include/asm-generic/percpu.h b/xen/include/asm-generic/percpu.h new file mode 100644 index 00..d1069adb61 --- /dev/null +++ b/xen/include/asm-generic/percpu.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_PERCPU_H__ +#define __ASM_GENERIC_PERCPU_H__ + +#ifndef __ASSEMBLY__ + +#include + +extern char __per_cpu_start[], __per_cpu_data_end[]; +extern unsigned long __per_cpu_offset[NR_CPUS]; +void percpu_init_areas(void); + +#define per_cpu(var, cpu) \ +(*RELOC_HIDE(_cpu__##var, __per_cpu_offset[cpu])) + +#define this_cpu(var) \ +(*RELOC_HIDE(_cpu__##var, __per_cpu_offset[get_processor_id()])) + +#define per_cpu_ptr(var, cpu) \ +(*RELOC_HIDE(var, __per_cpu_offset[cpu])) +#define this_cpu_ptr(var) \ +(*RELOC_HIDE(var, get_processor_id())) + +#endif + +#endif /* __ASM_GENERIC_PERCPU_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 28/29] xen/asm-generic: introduce stub header p2m.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/p2m.h | 115 ++ 1 file changed, 115 insertions(+) create mode 100644 xen/include/asm-generic/p2m.h diff --git a/xen/include/asm-generic/p2m.h b/xen/include/asm-generic/p2m.h new file mode 100644 index 00..554fd46608 --- /dev/null +++ b/xen/include/asm-generic/p2m.h @@ -0,0 +1,115 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_P2M_H__ +#define __ASM_GENERIC_P2M_H__ + +#include + +#define paddr_bits PADDR_BITS + +/* + * List of possible type for each page in the p2m entry. + * The number of available bit per page in the pte for this purpose is 4 bits. + * So it's possible to only have 16 fields. If we run out of value in the + * future, it's possible to use higher value for pseudo-type and don't store + * them in the p2m entry. + */ +typedef enum { +p2m_invalid = 0,/* Nothing mapped here */ +p2m_ram_rw, /* Normal read/write guest RAM */ +p2m_ram_ro, /* Read-only; writes are silently dropped */ +p2m_mmio_direct_dev,/* Read/write mapping of genuine Device MMIO area */ +p2m_mmio_direct_nc, /* Read/write mapping of genuine MMIO area non-cacheable */ +p2m_mmio_direct_c, /* Read/write mapping of genuine MMIO area cacheable */ +p2m_map_foreign_rw, /* Read/write RAM pages from foreign domain */ +p2m_map_foreign_ro, /* Read-only RAM pages from foreign domain */ +p2m_grant_map_rw, /* Read/write grant mapping */ +p2m_grant_map_ro, /* Read-only grant mapping */ +/* The types below are only used to decide the page attribute in the P2M */ +p2m_iommu_map_rw, /* Read/write iommu mapping */ +p2m_iommu_map_ro, /* Read-only iommu mapping */ +p2m_max_real_type, /* Types after this won't be store in the p2m */ +} p2m_type_t; + +#include + +static inline int get_page_and_type(struct page_info *page, +struct domain *domain, +unsigned long type) +{ +BUG(); +return 1; +} + +/* Look up a GFN and take a reference count on the backing page. */ +typedef unsigned int p2m_query_t; +#define P2M_ALLOC(1u<<0) /* Populate PoD and paged-out entries */ +#define P2M_UNSHARE (1u<<1) /* Break CoW sharing */ + +static inline struct page_info *get_page_from_gfn( +struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q) +{ +BUG(); +return NULL; +} + +static inline void memory_type_changed(struct domain *d) +{ +BUG(); +} + + +static inline int guest_physmap_mark_populate_on_demand(struct domain *d, unsigned long gfn, +unsigned int order) +{ +BUG(); +return 1; +} + +static inline int guest_physmap_add_entry(struct domain *d, +gfn_t gfn, +mfn_t mfn, +unsigned long page_order, +p2m_type_t t) +{ +BUG(); +return 1; +} + +/* Untyped version for RAM only, for compatibility */ +static inline int __must_check +guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn, + unsigned int page_order) +{ +return guest_physmap_add_entry(d, gfn, mfn, page_order, p2m_ram_rw); +} + +static inline mfn_t gfn_to_mfn(struct domain *d, gfn_t gfn) +{ +BUG(); +return _mfn(0); +} + +static inline bool arch_acquire_resource_check(struct domain *d) +{ +/* + * The reference counting of foreign entries in set_foreign_p2m_entry() + * is supported on GENERIC. + */ +return true; +} + +static inline void p2m_altp2m_check(struct vcpu *v, uint16_t idx) +{ +/* Not supported on GENERIC. */ +} + +#endif /* __ASM_GENERIC_P2M_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 24/29] xen/asm-generic: introduce stub header guest_access.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/guest_access.h | 31 ++ 1 file changed, 31 insertions(+) create mode 100644 xen/include/asm-generic/guest_access.h diff --git a/xen/include/asm-generic/guest_access.h b/xen/include/asm-generic/guest_access.h new file mode 100644 index 00..b865d37f4e --- /dev/null +++ b/xen/include/asm-generic/guest_access.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_GUEST_ACCESS_H__ +#define __ASM_GENERIC_GUEST_ACCESS_H__ + +#include + +unsigned long raw_copy_to_guest(void *to, const void *from, unsigned len); +unsigned long raw_copy_from_guest(void *to, const void *from, unsigned len); + +#define __raw_copy_to_guest raw_copy_to_guest +#define __raw_copy_from_guest raw_copy_from_guest + +#define guest_handle_okay(hnd, nr) (1) +#define guest_handle_subrange_okay(hnd, first, last) (1) + +struct domain; +unsigned long copy_to_guest_phys(struct domain *d, + paddr_t gpa, + void *buf, + unsigned int len); + +#endif /* __ASM_GENERIC_GUEST_ACCESS_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 29/29] xen/asm-generic: introduce stub header softirq.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/softirq.h | 17 + 1 file changed, 17 insertions(+) create mode 100644 xen/include/asm-generic/softirq.h diff --git a/xen/include/asm-generic/softirq.h b/xen/include/asm-generic/softirq.h new file mode 100644 index 00..83be855e50 --- /dev/null +++ b/xen/include/asm-generic/softirq.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_SOFTIRQ_H__ +#define __ASM_GENERIC_SOFTIRQ_H__ + +#define NR_ARCH_SOFTIRQS 0 + +#define arch_skip_send_event_check(cpu) 0 + +#endif /* __ASM_GENERIC_SOFTIRQ_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 27/29] xen/asm-generic: introduce stub header numa.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/numa.h | 35 ++ 1 file changed, 35 insertions(+) create mode 100644 xen/include/asm-generic/numa.h diff --git a/xen/include/asm-generic/numa.h b/xen/include/asm-generic/numa.h new file mode 100644 index 00..028f7b3638 --- /dev/null +++ b/xen/include/asm-generic/numa.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ARCH_GENERIC_NUMA_H +#define __ARCH_GENERIC_NUMA_H + +#include + +typedef u8 nodeid_t; + +/* Fake one node for now. See also node_online_map. */ +#define cpu_to_node(cpu) 0 +#define node_to_cpumask(node) (cpu_online_map) + +extern mfn_t first_valid_mfn; + +#define node_spanned_pages(nid) (max_page - mfn_x(first_valid_mfn)) +#define node_start_pfn(nid) (mfn_x(first_valid_mfn)) +#define __node_distance(a, b) (20) + +static inline unsigned int arch_get_dma_bitsize(void) +{ +return 32; +} + +#define arch_want_default_dmazone() (false) + +#endif /* __ARCH_GENERIC_NUMA_H */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 05/29] xen/asm-generic: introduce stub header event.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/event.h | 39 + 1 file changed, 39 insertions(+) create mode 100644 xen/include/asm-generic/event.h diff --git a/xen/include/asm-generic/event.h b/xen/include/asm-generic/event.h new file mode 100644 index 00..d25ba36aad --- /dev/null +++ b/xen/include/asm-generic/event.h @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_EVENT_H__ +#define __ASM_GENERIC_EVENT_H__ + +#include + +static inline void vcpu_mark_events_pending(struct vcpu *v) +{ +} + +static inline int vcpu_event_delivery_is_enabled(struct vcpu *v) +{ +return 0; +} + +static inline int local_events_need_delivery(void) +{ +return 0; +} + +static inline void local_event_delivery_enable(void) +{ +} + +static inline bool arch_virq_is_global(unsigned int virq) +{ +return true; +} + +#endif /* __ASM_GENERIC_EVENT_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 04/29] xen/asm-generic: introduce stub header device.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/device.h | 65 1 file changed, 65 insertions(+) create mode 100644 xen/include/asm-generic/device.h diff --git a/xen/include/asm-generic/device.h b/xen/include/asm-generic/device.h new file mode 100644 index 00..66e69ecd78 --- /dev/null +++ b/xen/include/asm-generic/device.h @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_DEVICE_H__ +#define __ASM_GENERIC_DEVICE_H__ + +struct dt_device_node; + +enum device_type +{ +DEV_DT, +DEV_PCI, +}; + +struct device { +enum device_type type; +#ifdef CONFIG_HAS_DEVICE_TREE +struct dt_device_node *of_node; /* Used by drivers imported from Linux */ +#endif +}; + +enum device_class +{ +DEVICE_SERIAL, +DEVICE_IOMMU, +DEVICE_GIC, +DEVICE_PCI_HOSTBRIDGE, +/* Use for error */ +DEVICE_UNKNOWN, +}; + +struct device_desc { +/* Device name */ +const char *name; +/* Device class */ +enum device_class class; +/* List of devices supported by this driver */ +const struct dt_device_match *dt_match; +/* + * Device initialization. + * + * -EAGAIN is used to indicate that device probing is deferred. + */ +int (*init)(struct dt_device_node *dev, const void *data); +}; + +typedef struct device device_t; + +#define DT_DEVICE_START(_name, _namestr, _class)\ +static const struct device_desc __dev_desc_##_name __used \ +__section(".dev.info") = { \ +.name = _namestr, \ +.class = _class,\ + +#define DT_DEVICE_END \ +}; + +#endif /* __ASM_GENERIC_DEVICE_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 03/29] xen/asm-generic: introduce stub header cpufeature.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/cpufeature.h | 23 +++ 1 file changed, 23 insertions(+) create mode 100644 xen/include/asm-generic/cpufeature.h diff --git a/xen/include/asm-generic/cpufeature.h b/xen/include/asm-generic/cpufeature.h new file mode 100644 index 00..86e2a8b455 --- /dev/null +++ b/xen/include/asm-generic/cpufeature.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_CPUFEATURE_H__ +#define __ASM_GENERIC_CPUFEATURE_H__ + +#ifndef __ASSEMBLY__ + +static inline int cpu_nr_siblings(unsigned int cpu) +{ +return 1; +} + +#endif + +#endif /* __ASM_GENERIC_CPUFEATURE_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 01/29] xen/asm-generic: introduce stub header spinlock.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/spinlock.h | 23 +++ 1 file changed, 23 insertions(+) create mode 100644 xen/include/asm-generic/spinlock.h diff --git a/xen/include/asm-generic/spinlock.h b/xen/include/asm-generic/spinlock.h new file mode 100644 index 00..22a9ec5222 --- /dev/null +++ b/xen/include/asm-generic/spinlock.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_SPINLOCK_H__ +#define __ASM_GENERIC_SPINLOCK_H__ + +#define arch_lock_acquire_barrier() smp_mb() +#define arch_lock_release_barrier() smp_mb() + +#define arch_lock_relax() cpu_relax() +#define arch_lock_signal() do { \ +} while(0) + +#define arch_lock_signal_wmb() arch_lock_signal() + +#endif /* __ASM_GENERIC_SPINLOCK_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 06/29] xen/asm-generic: introduce stub header grant_table.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/grant_table.h | 14 ++ 1 file changed, 14 insertions(+) create mode 100644 xen/include/asm-generic/grant_table.h diff --git a/xen/include/asm-generic/grant_table.h b/xen/include/asm-generic/grant_table.h new file mode 100644 index 00..bd8d85f1ff --- /dev/null +++ b/xen/include/asm-generic/grant_table.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_GRANTTABLE_H__ +#define __ASM_GENERIC_GRANTTABLE_H__ + +#endif /* __ASM_GENERIC_GRANTTABLE_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 00/29] Introduce stub headers necessary for full Xen build
Based on two patch series [1] and [2], the idea of which is to provide minimal amount of things for a complete Xen build, a large amount of headers are the same or almost the same, so it makes sense to move them to asm-generic. Also, providing such stub headers should help future architectures to add a full Xen build. [1] https://lore.kernel.org/xen-devel/cover.1694543103.git.sanasta...@raptorengineering.com/ [2] https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ Oleksii Kurochko (29): xen/asm-generic: introduce stub header spinlock.h xen/asm-generic: introduce stub header paging.h xen/asm-generic: introduce stub header cpufeature.h xen/asm-generic: introduce stub header device.h xen/asm-generic: introduce stub header event.h xen/asm-generic: introduce stub header grant_table.h xen/asm-generic: introduce stub header guest_atomics.h xen/asm-generic: introduce stub hypercall.h xen/asm-generic: introduce stub header iocap.h xen/asm-generic: introduce stub header iommu.h xen/asm-generic: introduce stub header mem_access.h xen/asm-generic: introduce stub header pci.h xen/asm-generic: introduce stub header random.h xen/asm-generic: introduce stub header setup.h xen/asm-generic: introduce stub header xenoprof.h xen/asm-generic: introduce stub header flushtlb.h xen/asm-generic: introduce stub header percpu.h xen/asm-generic: introduce stub header smp.h xen/asm-generic: introduce stub header hardirq.h xen/asm-generic: introduce stub header div64.h xen/asm-generic: introduce stub header altp2m.h xen/asm-generic: introduce stub header delay.h xen/asm-generic: introduce stub header domain.h xen/asm-generic: introduce stub header guest_access.h xen/asm-generic: introduce stub header irq.h xen/asm-generic: introduce stub header monitor.h xen/asm-generic: introduce stub header numa.h xen/asm-generic: introduce stub header p2m.h xen/asm-generic: introduce stub header softirq.h xen/include/asm-generic/altp2m.h| 34 +++ xen/include/asm-generic/cpufeature.h| 23 + xen/include/asm-generic/delay.h | 21 + xen/include/asm-generic/device.h| 65 ++ xen/include/asm-generic/div64.h | 24 + xen/include/asm-generic/domain.h| 53 +++ xen/include/asm-generic/event.h | 39 xen/include/asm-generic/flushtlb.h | 42 + xen/include/asm-generic/grant_table.h | 14 +++ xen/include/asm-generic/guest_access.h | 31 +++ xen/include/asm-generic/guest_atomics.h | 47 ++ xen/include/asm-generic/hardirq.h | 27 ++ xen/include/asm-generic/hypercall.h | 14 +++ xen/include/asm-generic/iocap.h | 17 xen/include/asm-generic/iommu.h | 17 xen/include/asm-generic/irq.h | 44 + xen/include/asm-generic/mem_access.h| 14 +++ xen/include/asm-generic/monitor.h | 64 + xen/include/asm-generic/numa.h | 35 xen/include/asm-generic/p2m.h | 115 xen/include/asm-generic/paging.h| 17 xen/include/asm-generic/pci.h | 18 xen/include/asm-generic/percpu.h| 35 xen/include/asm-generic/random.h| 20 + xen/include/asm-generic/setup.h | 16 xen/include/asm-generic/smp.h | 30 +++ xen/include/asm-generic/softirq.h | 17 xen/include/asm-generic/spinlock.h | 23 + xen/include/asm-generic/xenoprof.h | 14 +++ 29 files changed, 930 insertions(+) create mode 100644 xen/include/asm-generic/altp2m.h create mode 100644 xen/include/asm-generic/cpufeature.h create mode 100644 xen/include/asm-generic/delay.h create mode 100644 xen/include/asm-generic/device.h create mode 100644 xen/include/asm-generic/div64.h create mode 100644 xen/include/asm-generic/domain.h create mode 100644 xen/include/asm-generic/event.h create mode 100644 xen/include/asm-generic/flushtlb.h create mode 100644 xen/include/asm-generic/grant_table.h create mode 100644 xen/include/asm-generic/guest_access.h create mode 100644 xen/include/asm-generic/guest_atomics.h create mode 100644 xen/include/asm-generic/hardirq.h create mode 100644 xen/include/asm-generic/hypercall.h create mode 100644 xen/include/asm-generic/iocap.h create mode 100644 xen/include/asm-generic/iommu.h create mode 100644 xen/include/asm-generic/irq.h create mode 100644 xen/include/asm-generic/mem_access.h create mode 100644 xen/include/asm-generic/monitor.h create mode 100644 xen/include/asm-generic/numa.h create mode 100644 xen/include/asm-generic/p2m.h create mode 100644 xen/include/asm-generic/paging.h create mode 100644 xen/include/asm-generic/pci.h create mode 100644 xen/include/asm-generic/percpu.h create mode 100644 xen/include/asm-generic/random.h create mode 100644 xen/include/asm-generic/setup.h create mode 100644 xen/include/asm
[PATCH v1 08/29] xen/asm-generic: introduce stub hypercall.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/hypercall.h | 14 ++ 1 file changed, 14 insertions(+) create mode 100644 xen/include/asm-generic/hypercall.h diff --git a/xen/include/asm-generic/hypercall.h b/xen/include/asm-generic/hypercall.h new file mode 100644 index 00..d89196fb3e --- /dev/null +++ b/xen/include/asm-generic/hypercall.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_HYPERCALL_H__ +#define __ASM_GENERIC_HYPERCALL_H__ + +#endif /* __ASM_GENERIC_HYPERCALL_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 02/29] xen/asm-generic: introduce stub header paging.h
The patch introduces stub header needed for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/paging.h | 17 + 1 file changed, 17 insertions(+) create mode 100644 xen/include/asm-generic/paging.h diff --git a/xen/include/asm-generic/paging.h b/xen/include/asm-generic/paging.h new file mode 100644 index 00..2aab63b536 --- /dev/null +++ b/xen/include/asm-generic/paging.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_PAGING_H__ +#define __ASM_GENERIC_PAGING_H__ + +#define paging_mode_translate(d) (1) +#define paging_mode_external(d)(1) + +#endif /* __ASM_GENERIC_PAGING_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 16/29] xen/asm-generic: introduce stub header flushtlb.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/flushtlb.h | 42 ++ 1 file changed, 42 insertions(+) create mode 100644 xen/include/asm-generic/flushtlb.h diff --git a/xen/include/asm-generic/flushtlb.h b/xen/include/asm-generic/flushtlb.h new file mode 100644 index 00..79e4773179 --- /dev/null +++ b/xen/include/asm-generic/flushtlb.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_FLUSHTLB_H__ +#define __ASM_GENERIC_FLUSHTLB_H__ + +#include + +/* + * Filter the given set of CPUs, removing those that definitely flushed their + * TLB since @page_timestamp. + */ +/* XXX lazy implementation just doesn't clear anything */ +static inline void tlbflush_filter(cpumask_t *mask, uint32_t page_timestamp) {} + +#define tlbflush_current_time() (0) + +static inline void page_set_tlbflush_timestamp(struct page_info *page) +{ +BUG(); +} + +/* Flush specified CPUs' TLBs */ +void arch_flush_tlb_mask(const cpumask_t *mask); + +#endif /* __ASM_GENERIC_FLUSHTLB_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ + + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 25/29] xen/asm-generic: introduce stub header irq.h
The patch introduces header stub necessry for full Xen build. Signed-off-by: Oleksii Kurochko --- xen/include/asm-generic/irq.h | 44 +++ 1 file changed, 44 insertions(+) create mode 100644 xen/include/asm-generic/irq.h diff --git a/xen/include/asm-generic/irq.h b/xen/include/asm-generic/irq.h new file mode 100644 index 00..5f68cbd10d --- /dev/null +++ b/xen/include/asm-generic/irq.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef __ASM_GENERIC_IRQ_H__ +#define __ASM_GENERIC_IRQ_H__ + +#include +#include +#include + +/* TODO */ +#define nr_irqs 0U +#define nr_static_irqs 0 +#define arch_hwdom_irqs(domid) 0U + +#define domain_pirq_to_irq(d, pirq) (pirq) + +#define arch_evtchn_bind_pirq(d, pirq) ((void)((d) + (pirq))) + +struct arch_pirq { +}; + +struct arch_irq_desc { +unsigned int type; +}; + +static inline void arch_move_irqs(struct vcpu *v) +{ +BUG(); +} + +static inline int platform_get_irq(const struct dt_device_node *device, int index) +{ +BUG(); +} + +#endif /* __ASM_GENERIC_IRQ_H__ */ + +/* + * Local variables: + * mode: C + * c-file-style: BSD + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v5 1/2] xen: asm-generic support
Some headers are shared between individual architectures or are empty. To avoid duplication of these headers, asm-generic is introduced. With the following patch, an architecture uses generic headers mentioned in the file arch/$(ARCH)/include/asm/Makefile To use a generic header is needed to add to arch/$(ARCH)/include/asm/Makefile : generic-y += For each mentioned header in arch/$(ARCH)/include/asm/Makefile, the necessary wrapper in arch/$(ARCH)/include/generated/asm will be generated. As the base Makefile.asm-generic from Linux kernel was taken. ( 06c2afb862f9da8 "Linux 6.5-rc1" ). Signed-off-by: Oleksii Kurochko --- Changes in V5: - Update the commit message - Update SPDX license in Makefile. - Remove code related to UML - Include $(src)/Makefile instead of $(kbuild-file) - Update comment message in Makefile.asm-generic - Update .gitignore - Update path to generated headers in CFLAGS. - Use the latest version of Linux's Makefile.asm-generic --- Changes in V4: - introduce asm-generic support - update commit message --- Changes in V3: - Rename stubs dir to asm-generic --- Changes in V2: - Nothing changed. --- .gitignore | 1 + xen/Makefile | 10 +- xen/scripts/Makefile.asm-generic | 53 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 xen/scripts/Makefile.asm-generic diff --git a/.gitignore b/.gitignore index 50273adb8d..287166f8fc 100644 --- a/.gitignore +++ b/.gitignore @@ -267,6 +267,7 @@ xen/arch/*/efi/efi.h xen/arch/*/efi/pe.c xen/arch/*/efi/runtime.c xen/arch/*/include/asm/asm-offsets.h +xen/arch/*/include/generated xen/build-dir-cppcheck/ xen/common/config_data.S xen/common/config.gz diff --git a/xen/Makefile b/xen/Makefile index f57e5a596c..a86b64303d 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -438,6 +438,7 @@ ifdef building_out_of_srctree endif CFLAGS += -I$(srctree)/include CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include +CFLAGS += -I$(objtree)/arch/$(SRCARCH)/include/generated # Note that link order matters! ALL_OBJS-y:= common/built_in.o @@ -580,6 +581,7 @@ _clean: rm -f $(TARGET).efi $(TARGET).efi.map $(TARGET).efi.elf $(TARGET).efi.stripped rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h rm -f .banner .allconfig.tmp include/xen/compile.h + rm -rf $(objtree)/arch/*/include/generated .PHONY: _distclean _distclean: clean @@ -589,7 +591,7 @@ $(TARGET).gz: $(TARGET) gzip -n -f -9 < $< > $@.new mv $@.new $@ -$(TARGET): outputmakefile FORCE +$(TARGET): outputmakefile asm-generic FORCE $(Q)$(MAKE) $(build)=tools $(Q)$(MAKE) $(build)=. include/xen/compile.h $(Q)$(MAKE) $(build)=include all @@ -667,6 +669,12 @@ endif # need-sub-make PHONY += FORCE FORCE: +# Support for using generic headers in asm-generic +PHONY += asm-generic +asm-generic: + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \ + obj=arch/$(SRCARCH)/include/generated/asm + # Declare the contents of the PHONY variable as phony. We keep that # information in a variable so we can use it in if_changed and friends. .PHONY: $(PHONY) diff --git a/xen/scripts/Makefile.asm-generic b/xen/scripts/Makefile.asm-generic new file mode 100644 index 00..92a3a741c5 --- /dev/null +++ b/xen/scripts/Makefile.asm-generic @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0-only +# include/asm-generic contains a lot of files that are used +# verbatim by several architectures. +# +# This Makefile reads the file arch/$(SRCARCH)/include/asm/Makefile +# and for each file listed in this file with generic-y creates +# a small wrapper file in arch/$(SRCARCH)/include/generated/asm. + +PHONY := all +all: + +src := $(subst /generated,,$(obj)) + +include $(srctree)/scripts/Kbuild.include +-include $(src)/Makefile + +redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y)) +redundant += $(foreach f, $(generic-y), $(if $(wildcard $(srctree)/$(src)/$(f)),$(f))) +redundant := $(sort $(redundant)) +$(if $(redundant),\ + $(warning redundant generic-y found in $(src)/Kbuild: $(redundant))) + +# If arch does not implement mandatory headers, fallback to asm-generic ones. +mandatory-y := $(filter-out $(generated-y), $(mandatory-y)) +generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(srctree)/$(src)/$(f)),,$(f))) + +generic-y := $(addprefix $(obj)/, $(generic-y)) +generated-y := $(addprefix $(obj)/, $(generated-y)) + +# Remove stale wrappers when the corresponding files are removed from generic-y +old-headers := $(wildcard $(obj)/*.h) +unwanted:= $(filter-out $(generic-y) $(generated-y),$(old-headers)) + +quiet_cmd_wrap = WRAP$@ + cmd_wrap = echo "\#include " > $@ + +quiet_cmd_remove = REMOVE $(unwanted) + cmd_remove = rm -f $(unwanted) + +all: $(generic-y) + $(if $(unwanted),$(call cmd,remove)) + @: +
[PATCH v5 0/2] introduce stub directory to storing empty/stub headers
A lot of empty/stub headers should be introduced during the early steps of adding support of new architecture. An example can be found here: 1. https://lore.kernel.org/xen-devel/cover.1692181079.git.oleksii.kuroc...@gmail.com/ 2. https://lore.kernel.org/xen-devel/a92f99e8f697da99d77bfde562a549dbef3760ce.1692816595.git.sanasta...@raptorengineering.com/ As part of the patch series, asm/vm_event.h was moved to the stubs directory because It is the same for ARM, PPC, and RISC-V. --- Changes in V5: - Update SPDX license. - Remove code related to UML in Makefile.asm-generic. - Include $(src)/Makefile instead of $(kbuild-file). - Update comment message in Makefile.asm-generic. - Update .gitignore. - Update path to generated headers in CFLAGS. - Use the latest version of Linux's Makefile.asm-generic. - Introduce asm-generic's vm_event.h. - Switch ARM to use asm-generic/vm_event.h. --- Changes in V4: - add asm-generic support - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. - rename stubs dir to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs Oleksii Kurochko (2): xen: asm-generic support xen: move arm/include/asm/vm_event.h to stubs .gitignore | 1 + xen/Makefile| 10 - xen/arch/arm/include/asm/Makefile | 2 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/asm-generic/vm_event.h | 55 xen/scripts/Makefile.asm-generic| 53 +++ 6 files changed, 120 insertions(+), 67 deletions(-) create mode 100644 xen/arch/arm/include/asm/Makefile delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/vm_event.h create mode 100644 xen/scripts/Makefile.asm-generic -- 2.41.0
[PATCH v5 2/2] xen: move arm/include/asm/vm_event.h to stubs
asm/vm_event.h is common for ARM and RISC-V so it will be moved to stubs dir. Original asm/vm_event.h from ARM was updated: * use SPDX-License-Identifier. * update comment messages of stubs. * update #ifdef * instead of "include " -> "public/vm_event.h" As vm_event.h was moved to asm-generic then it is needed to create Makefile in arm/include/asm/ and add generated-y += vm_event.h to it. Signed-off-by: Oleksii Kurochko --- Changes in V5: - Update the commit message - Remove Acked-by:... - Switch ARM to use asm-generic/vm_event.h --- Changes in V4: - update path of vm_event.h from include/asm-generic/asm to include/asm-generic --- Changes in V3: - add Acked-by: Stefano Stabellini for "xen: move arm/include/asm/vm_event.h to asm-generic" - update SPDX tag. - move asm/vm_event.h to asm-generic. --- Changes in V2: - change public/domctl.h to public/vm_event.h. - update commit message of [PATCH v2 2/2] xen: move arm/include/asm/vm_event.h to stubs --- xen/arch/arm/include/asm/Makefile | 2 + xen/arch/arm/include/asm/vm_event.h | 66 - xen/include/asm-generic/vm_event.h | 55 3 files changed, 57 insertions(+), 66 deletions(-) create mode 100644 xen/arch/arm/include/asm/Makefile delete mode 100644 xen/arch/arm/include/asm/vm_event.h create mode 100644 xen/include/asm-generic/vm_event.h diff --git a/xen/arch/arm/include/asm/Makefile b/xen/arch/arm/include/asm/Makefile new file mode 100644 index 00..821addb0bf --- /dev/null +++ b/xen/arch/arm/include/asm/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +generic-y += vm_event.h diff --git a/xen/arch/arm/include/asm/vm_event.h b/xen/arch/arm/include/asm/vm_event.h deleted file mode 100644 index 4d861373b3..00 --- a/xen/arch/arm/include/asm/vm_event.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * vm_event.h: architecture specific vm_event handling routines - * - * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __ASM_ARM_VM_EVENT_H__ -#define __ASM_ARM_VM_EVENT_H__ - -#include -#include - -static inline int vm_event_init_domain(struct domain *d) -{ -/* Nothing to do. */ -return 0; -} - -static inline void vm_event_cleanup_domain(struct domain *d) -{ -memset(>monitor, 0, sizeof(d->monitor)); -} - -static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, - vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_sync_event(struct vcpu *v, bool value) -{ -/* Not supported on ARM. */ -} - -static inline -void vm_event_reset_vmtrace(struct vcpu *v) -{ -/* Not supported on ARM. */ -} - -#endif /* __ASM_ARM_VM_EVENT_H__ */ diff --git a/xen/include/asm-generic/vm_event.h b/xen/include/asm-generic/vm_event.h new file mode 100644 index 00..29ab1b01b4 --- /dev/null +++ b/xen/include/asm-generic/vm_event.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * vm_event.h: stubs for architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_STUB_VM_EVENT_H__ +#define __ASM_STUB_VM_EVENT_H__ + +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_sync_event(struct vcpu *v, bool value) +{ +/* Nothing to do. */ +} + +static inline +void vm_event_reset_vmtrace(struct
[PATCH] xen: avoid generation of stub header
Platforms which doesn't have HAS_PCI enabled it is needed to have , which contains only an empty definition of struct arch_pci_dev ( except ARM, it introduces several ARM-specific functions ). Also, for architectures ( such as PPC or RISC-V ) on initial stages of adding support, it is needed to generate for only define the mentioned above arch_pci_dev structure. For the Arm-only stubs ( mentioned in for disabled HAS_PCI and ARM-specific) will be needed to add directly alongside . Only to was added. Suggested-by: Jan Beulich Signed-off-by: Oleksii Kurochko --- xen/arch/arm/domain_build.c| 1 + xen/arch/arm/include/asm/pci.h | 7 --- xen/arch/ppc/include/asm/pci.h | 7 --- xen/include/xen/pci.h | 11 +++ 4 files changed, 12 insertions(+), 14 deletions(-) delete mode 100644 xen/arch/ppc/include/asm/pci.h diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 49792dd590..2dd2926b41 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h index 8cb46f6b71..7f77226c9b 100644 --- a/xen/arch/arm/include/asm/pci.h +++ b/xen/arch/arm/include/asm/pci.h @@ -130,13 +130,6 @@ bool pci_check_bar(const struct pci_dev *pdev, mfn_t start, mfn_t end); #else /*!CONFIG_HAS_PCI*/ -struct arch_pci_dev { }; - -static always_inline bool is_pci_passthrough_enabled(void) -{ -return false; -} - struct pci_dev; static inline void arch_pci_init_pdev(struct pci_dev *pdev) {} diff --git a/xen/arch/ppc/include/asm/pci.h b/xen/arch/ppc/include/asm/pci.h deleted file mode 100644 index e76c8e5475..00 --- a/xen/arch/ppc/include/asm/pci.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __ASM_PPC_PCI_H__ -#define __ASM_PPC_PCI_H__ - -struct arch_pci_dev { -}; - -#endif /* __ASM_PPC_PCI_H__ */ diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h index 251b8761a8..168ca320ce 100644 --- a/xen/include/xen/pci.h +++ b/xen/include/xen/pci.h @@ -68,7 +68,18 @@ typedef union { }; } pci_sbdf_t; +#ifdef CONFIG_HAS_PCI #include +#else + +struct arch_pci_dev { }; + +static always_inline bool is_pci_passthrough_enabled(void) +{ +return false; +} + +#endif struct pci_dev_info { /* -- 2.41.0
[PATCH] xen: remove
only declares udelay() function so udelay() Â declaration was moved to xen/delay.h. For x86, __udelay() was renamed to udelay() and removed inclusion of in x86 code. Signed-off-by: Oleksii Kurochko --- xen/arch/arm/include/asm/delay.h | 14 -- xen/arch/riscv/include/asm/delay.h | 13 - xen/arch/x86/cpu/microcode/core.c | 2 +- xen/arch/x86/delay.c | 2 +- xen/arch/x86/include/asm/delay.h | 13 - xen/include/xen/delay.h| 3 ++- 6 files changed, 4 insertions(+), 43 deletions(-) delete mode 100644 xen/arch/arm/include/asm/delay.h delete mode 100644 xen/arch/riscv/include/asm/delay.h delete mode 100644 xen/arch/x86/include/asm/delay.h diff --git a/xen/arch/arm/include/asm/delay.h b/xen/arch/arm/include/asm/delay.h deleted file mode 100644 index 042907d9d5..00 --- a/xen/arch/arm/include/asm/delay.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _ARM_DELAY_H -#define _ARM_DELAY_H - -extern void udelay(unsigned long usecs); - -#endif /* defined(_ARM_DELAY_H) */ -/* - * Local variables: - * mode: C - * c-file-style: "BSD" - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ diff --git a/xen/arch/riscv/include/asm/delay.h b/xen/arch/riscv/include/asm/delay.h deleted file mode 100644 index 2d59622c75..00 --- a/xen/arch/riscv/include/asm/delay.h +++ /dev/null @@ -1,13 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright (C) 2009 Chen Liqin - * Copyright (C) 2016 Regents of the University of California - */ - -#ifndef _ASM_RISCV_DELAY_H -#define _ASM_RISCV_DELAY_H - -#define udelay udelay -extern void udelay(unsigned long usecs); - -#endif /* _ASM_RISCV_DELAY_H */ diff --git a/xen/arch/x86/cpu/microcode/core.c b/xen/arch/x86/cpu/microcode/core.c index c3fee62906..48822360c0 100644 --- a/xen/arch/x86/cpu/microcode/core.c +++ b/xen/arch/x86/cpu/microcode/core.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -35,7 +36,6 @@ #include #include -#include #include #include #include diff --git a/xen/arch/x86/delay.c b/xen/arch/x86/delay.c index 2662c26272..b3a41881a1 100644 --- a/xen/arch/x86/delay.c +++ b/xen/arch/x86/delay.c @@ -15,7 +15,7 @@ #include #include -void __udelay(unsigned long usecs) +void udelay(unsigned long usecs) { unsigned long ticks = usecs * (cpu_khz / 1000); unsigned long s, e; diff --git a/xen/arch/x86/include/asm/delay.h b/xen/arch/x86/include/asm/delay.h deleted file mode 100644 index 9be2f46590..00 --- a/xen/arch/x86/include/asm/delay.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _X86_DELAY_H -#define _X86_DELAY_H - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines calling functions in arch/i386/lib/delay.c - */ - -extern void __udelay(unsigned long usecs); -#define udelay(n) __udelay(n) - -#endif /* defined(_X86_DELAY_H) */ diff --git a/xen/include/xen/delay.h b/xen/include/xen/delay.h index 9d70ef035f..a5189329c7 100644 --- a/xen/include/xen/delay.h +++ b/xen/include/xen/delay.h @@ -3,8 +3,9 @@ /* Copyright (C) 1993 Linus Torvalds */ -#include #define mdelay(n) (\ {unsigned long msec=(n); while (msec--) udelay(1000);}) +void udelay(unsigned long usecs); + #endif /* defined(_LINUX_DELAY_H) */ -- 2.41.0
[PATCH v2] xen: remove
only declares udelay() function so udelay() declaration was moved to xen/delay.h. For x86, __udelay() was renamed to udelay() and removed inclusion of in x86 code. For ppc, udelay() stub definition was moved to ppc/stubs.c. Suggested-by: Jan Beulich Signed-off-by: Oleksii Kurochko Reviewed-by: Jan Beulich --- Changes in v2: - rebase on top of the latest staging. - add Suggested-by:/Reviewed-by: Jan Beulich . - remove for PPC. - remove changes related to RISC-V's as they've not introduced in staging branch yet. --- xen/arch/arm/include/asm/delay.h | 14 -- xen/arch/ppc/include/asm/delay.h | 12 xen/arch/ppc/stubs.c | 7 +++ xen/arch/x86/cpu/microcode/core.c | 2 +- xen/arch/x86/delay.c | 2 +- xen/arch/x86/include/asm/delay.h | 13 - xen/include/xen/delay.h | 2 +- 7 files changed, 10 insertions(+), 42 deletions(-) delete mode 100644 xen/arch/arm/include/asm/delay.h delete mode 100644 xen/arch/ppc/include/asm/delay.h delete mode 100644 xen/arch/x86/include/asm/delay.h diff --git a/xen/arch/arm/include/asm/delay.h b/xen/arch/arm/include/asm/delay.h deleted file mode 100644 index 042907d9d5..00 --- a/xen/arch/arm/include/asm/delay.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _ARM_DELAY_H -#define _ARM_DELAY_H - -extern void udelay(unsigned long usecs); - -#endif /* defined(_ARM_DELAY_H) */ -/* - * Local variables: - * mode: C - * c-file-style: "BSD" - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - */ diff --git a/xen/arch/ppc/include/asm/delay.h b/xen/arch/ppc/include/asm/delay.h deleted file mode 100644 index da6635888b..00 --- a/xen/arch/ppc/include/asm/delay.h +++ /dev/null @@ -1,12 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -#ifndef __ASM_PPC_DELAY_H__ -#define __ASM_PPC_DELAY_H__ - -#include - -static inline void udelay(unsigned long usecs) -{ -BUG_ON("unimplemented"); -} - -#endif /* __ASM_PPC_DELAY_H__ */ diff --git a/xen/arch/ppc/stubs.c b/xen/arch/ppc/stubs.c index 4c276b0e39..a96e45626d 100644 --- a/xen/arch/ppc/stubs.c +++ b/xen/arch/ppc/stubs.c @@ -337,3 +337,10 @@ int __init parse_arch_dom0_param(const char *s, const char *e) { BUG_ON("unimplemented"); } + +/* delay.c */ + +void udelay(unsigned long usecs) +{ +BUG_ON("unimplemented"); +} diff --git a/xen/arch/x86/cpu/microcode/core.c b/xen/arch/x86/cpu/microcode/core.c index 65ebeb50de..22d5e04552 100644 --- a/xen/arch/x86/cpu/microcode/core.c +++ b/xen/arch/x86/cpu/microcode/core.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -35,7 +36,6 @@ #include #include -#include #include #include #include diff --git a/xen/arch/x86/delay.c b/xen/arch/x86/delay.c index 2662c26272..b3a41881a1 100644 --- a/xen/arch/x86/delay.c +++ b/xen/arch/x86/delay.c @@ -15,7 +15,7 @@ #include #include -void __udelay(unsigned long usecs) +void udelay(unsigned long usecs) { unsigned long ticks = usecs * (cpu_khz / 1000); unsigned long s, e; diff --git a/xen/arch/x86/include/asm/delay.h b/xen/arch/x86/include/asm/delay.h deleted file mode 100644 index 9be2f46590..00 --- a/xen/arch/x86/include/asm/delay.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _X86_DELAY_H -#define _X86_DELAY_H - -/* - * Copyright (C) 1993 Linus Torvalds - * - * Delay routines calling functions in arch/i386/lib/delay.c - */ - -extern void __udelay(unsigned long usecs); -#define udelay(n) __udelay(n) - -#endif /* defined(_X86_DELAY_H) */ diff --git a/xen/include/xen/delay.h b/xen/include/xen/delay.h index 9150226271..8fd3b8f99f 100644 --- a/xen/include/xen/delay.h +++ b/xen/include/xen/delay.h @@ -3,7 +3,7 @@ /* Copyright (C) 1993 Linus Torvalds */ -#include +void udelay(unsigned long usecs); static inline void mdelay(unsigned long msec) { -- 2.41.0
[PATCH v1 35/57] xen/riscv: introduce asm/domain.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/domain.h | 43 + 1 file changed, 43 insertions(+) create mode 100644 xen/arch/riscv/include/asm/domain.h diff --git a/xen/arch/riscv/include/asm/domain.h b/xen/arch/riscv/include/asm/domain.h new file mode 100644 index 00..680c357d4d --- /dev/null +++ b/xen/arch/riscv/include/asm/domain.h @@ -0,0 +1,43 @@ +#ifndef __ASM_RISCV_DOMAIN_H__ +#define __ASM_RISCV_DOMAIN_H__ + +#include +#include + +struct hvm_domain +{ +uint64_t params[HVM_NR_PARAMS]; +}; + +#define is_domain_direct_mapped(d) ((void)(d), 0) + +struct arch_vcpu_io { +}; + +struct arch_vcpu { +}; + +struct arch_domain { +struct hvm_domain hvm; +}; + +#include + +static inline struct vcpu_guest_context *alloc_vcpu_guest_context(void) +{ +return xmalloc(struct vcpu_guest_context); +} + +static inline void free_vcpu_guest_context(struct vcpu_guest_context *vgc) +{ +xfree(vgc); +} + +struct guest_memory_policy {}; +static inline void update_guest_memory_policy(struct vcpu *v, + struct guest_memory_policy *gmp) +{} + +static inline void arch_vcpu_block(struct vcpu *v) {} + +#endif /* __ASM_RISCV_DOMAIN_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 22/57] xen/riscv: introduce bitops.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/bitops.h | 288 1 file changed, 288 insertions(+) create mode 100644 xen/arch/riscv/include/asm/bitops.h diff --git a/xen/arch/riscv/include/asm/bitops.h b/xen/arch/riscv/include/asm/bitops.h new file mode 100644 index 00..24a49c499b --- /dev/null +++ b/xen/arch/riscv/include/asm/bitops.h @@ -0,0 +1,288 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2012 Regents of the University of California */ + +#ifndef _ASM_RISCV_BITOPS_H +#define _ASM_RISCV_BITOPS_H + +#include + +#define BITOP_BITS_PER_WORD 32 +#define BITOP_MASK(nr) (1UL << ((nr) % BITOP_BITS_PER_WORD)) +#define BITOP_WORD(nr) ((nr) / BITOP_BITS_PER_WORD) +#define BITS_PER_BYTE 8 + +#define __set_bit(n,p) set_bit(n,p) +#define __clear_bit(n,p)clear_bit(n,p) + +#define __AMO(op) "amo" #op ".w" + +#define __test_and_op_bit_ord(op, mod, nr, addr, ord) \ +({ \ + unsigned long __res, __mask;\ + __mask = BITOP_MASK(nr);\ + __asm__ __volatile__ ( \ + __AMO(op) #ord " %0, %2, %1"\ + : "=r" (__res), "+A" (addr[BITOP_WORD(nr)]) \ + : "r" (mod(__mask)) \ + : "memory");\ + ((__res & __mask) != 0);\ +}) + +#define __op_bit_ord(op, mod, nr, addr, ord) \ + __asm__ __volatile__ ( \ + __AMO(op) #ord " zero, %1, %0" \ + : "+A" (addr[BITOP_WORD(nr)]) \ + : "r" (mod(BITOP_MASK(nr))) \ + : "memory"); + +#define __test_and_op_bit(op, mod, nr, addr) \ + __test_and_op_bit_ord(op, mod, nr, addr, .aqrl) + +#define __op_bit(op, mod, nr, addr)\ + __op_bit_ord(op, mod, nr, addr, ) + +/* Bitmask modifiers */ +#define __NOP(x) (x) +#define __NOT(x) (~(x)) + +/** + * __test_and_set_bit - Set a bit and return its old value + * @nr: Bit to set + * @addr: Address to count from + * + * This operation may be reordered on other architectures than x86. + */ +static inline int __test_and_set_bit(int nr, volatile void *p) +{ + volatile uint32_t *addr = p; + + return __test_and_op_bit(or, __NOP, nr, addr); +} + +/** + * __test_and_clear_bit - Clear a bit and return its old value + * @nr: Bit to clear + * @addr: Address to count from + * + * This operation can be reordered on other architectures other than x86. + */ +static inline int __test_and_clear_bit(int nr, volatile void *p) +{ + volatile uint32_t *addr = p; + + return __test_and_op_bit(and, __NOT, nr, addr); +} + +/** + * set_bit - Atomically set a bit in memory + * @nr: the bit to set + * @addr: the address to start counting from + * + * Note: there are no guarantees that this function will not be reordered + * on non x86 architectures, so if you are writing portable code, + * make sure not to rely on its reordering guarantees. + * + * Note that @nr may be almost arbitrarily large; this function is not + * restricted to acting on a single-word quantity. + */ +static inline void set_bit(int nr, volatile void *p) +{ + volatile uint32_t *addr = p; + + __op_bit(or, __NOP, nr, addr); +} + +/** + * clear_bit - Clears a bit in memory + * @nr: Bit to clear + * @addr: Address to start counting from + * + * Note: there are no guarantees that this function will not be reordered + * on non x86 architectures, so if you are writing portable code, + * make sure not to rely on its reordering guarantees. + */ +static inline void clear_bit(int nr, volatile void *p) +{ + volatile uint32_t *addr = p; + + __op_bit(and, __NOT, nr, addr); +} + +static inline int test_bit(int nr, const volatile void *p) +{ + const volatile uint32_t *addr = (const volatile uint32_t *)p; + + return 1UL & (addr[BITOP_WORD(nr)] >> (nr & (BITOP_BITS_PER_WORD-1))); +} + +#undef __test_and_op_bit +#undef __op_bit +#undef __NOP +#undef __NOT +#undef __AMO + +static inline int fls(unsigned int x) +{ +return generic_fls(x); +} + +static inline int flsl(unsigned long x) +{ +return generic_flsl(x); +} + +#define test_and_set_bit __test_and_set_bit +#define test_and_clear_bit __test_and_clear_bit + +/* Based on linux/include/asm-generic/bitops/find.h */ + +#ifndef find_next_bit +/** + * find_next_bit - find the next set bit in a memory region + * @addr: The address to base the search on + * @offset: The bitnumber to s
[PATCH v1 54/57] xen/rirscv: add minimal amount of stubs to build full Xen
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/Kconfig| 1 + xen/arch/riscv/Makefile | 1 + xen/arch/riscv/early_printk.c | 168 - xen/arch/riscv/mm.c | 52 +++- xen/arch/riscv/setup.c| 9 +- xen/arch/riscv/stubs.c| 437 ++ xen/arch/riscv/traps.c| 25 ++ 7 files changed, 523 insertions(+), 170 deletions(-) create mode 100644 xen/arch/riscv/stubs.c diff --git a/xen/arch/riscv/Kconfig b/xen/arch/riscv/Kconfig index f382b36f6c..64caaa2750 100644 --- a/xen/arch/riscv/Kconfig +++ b/xen/arch/riscv/Kconfig @@ -4,6 +4,7 @@ config RISCV config RISCV_64 def_bool y select 64BIT + select HAS_PDX config ARCH_DEFCONFIG string diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index b08048948f..50c09469a0 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -5,6 +5,7 @@ obj-y += mm.o obj-$(CONFIG_RISCV_64) += riscv64/ obj-y += sbi.o obj-y += setup.o +obj-y += stubs.o obj-y += traps.o $(TARGET): $(TARGET)-syms diff --git a/xen/arch/riscv/early_printk.c b/xen/arch/riscv/early_printk.c index 60742a042d..610c814f54 100644 --- a/xen/arch/riscv/early_printk.c +++ b/xen/arch/riscv/early_printk.c @@ -40,171 +40,3 @@ void early_printk(const char *str) str++; } } - -/* - * The following #if 1 ... #endif should be removed after printk - * and related stuff are ready. - */ -#if 1 - -#include -#include - -/** - * strlen - Find the length of a string - * @s: The string to be sized - */ -size_t (strlen)(const char * s) -{ -const char *sc; - -for (sc = s; *sc != '\0'; ++sc) -/* nothing */; -return sc - s; -} - -/** - * memcpy - Copy one area of memory to another - * @dest: Where to copy to - * @src: Where to copy from - * @count: The size of the area. - * - * You should not use this function to access IO space, use memcpy_toio() - * or memcpy_fromio() instead. - */ -void *(memcpy)(void *dest, const void *src, size_t count) -{ -char *tmp = (char *) dest, *s = (char *) src; - -while (count--) -*tmp++ = *s++; - -return dest; -} - -int vsnprintf(char* str, size_t size, const char* format, va_list args) -{ -size_t i = 0; /* Current position in the output string */ -size_t written = 0; /* Total number of characters written */ -char* dest = str; - -while ( format[i] != '\0' && written < size - 1 ) -{ -if ( format[i] == '%' ) -{ -i++; - -if ( format[i] == '\0' ) -break; - -if ( format[i] == '%' ) -{ -if ( written < size - 1 ) -{ -dest[written] = '%'; -written++; -} -i++; -continue; -} - -/* - * Handle format specifiers. - * For simplicity, only %s and %d are implemented here. - */ - -if ( format[i] == 's' ) -{ -char* arg = va_arg(args, char*); -size_t arglen = strlen(arg); - -size_t remaining = size - written - 1; - -if ( arglen > remaining ) -arglen = remaining; - -memcpy(dest + written, arg, arglen); - -written += arglen; -i++; -} -else if ( format[i] == 'd' ) -{ -int arg = va_arg(args, int); - -/* Convert the integer to string representation */ -char numstr[32]; /* Assumes a maximum of 32 digits */ -int numlen = 0; -int num = arg; -size_t remaining; - -if ( arg < 0 ) -{ -if ( written < size - 1 ) -{ -dest[written] = '-'; -written++; -} - -num = -arg; -} - -do -{ -numstr[numlen] = '0' + num % 10; -num = num / 10; -numlen++; -} while ( num > 0 ); - -/* Reverse the string */ -for (int j = 0; j < numlen / 2; j++) -{ -char tmp = numstr[j]; -numstr[j] = numstr[numlen - 1 - j]; -numstr[numlen - 1 - j] = tmp; -} - -remaining = size - written - 1; - -if ( numlen > remaining ) -numlen = remaining; - -memcpy(dest + written, numstr, numlen); - -written += numlen; -i++; -} -} -else -{ -if ( written < size - 1 ) -{ -dest[written] =
[PATCH v1 52/57] xen: add necessary headers to common to build full Xen for RISC-V
Mostly patch was taken from the PPC patch series so can be skipped during review: https://lore.kernel.org/xen-devel/2c9eb4fc175a1bdd21293f2e2611d8e21991636d.1691016993.git.sanasta...@raptorengineering.com/#Z31xen:common:symbols.c Signed-off-by: Oleksii Kurochko --- xen/common/memory.c | 1 + xen/common/symbols.c | 1 + xen/include/xen/domain.h | 1 + xen/include/xen/iommu.h | 1 + xen/include/xen/sched.h | 1 + 5 files changed, 5 insertions(+) diff --git a/xen/common/memory.c b/xen/common/memory.c index b1dcbaf551..fa165ebc14 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include diff --git a/xen/common/symbols.c b/xen/common/symbols.c index 9377f41424..691e617925 100644 --- a/xen/common/symbols.c +++ b/xen/common/symbols.c @@ -19,6 +19,7 @@ #include #include #include +#include #ifdef SYMBOLS_ORIGIN extern const unsigned int symbols_offsets[]; diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h index d35af34841..767127b440 100644 --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -4,6 +4,7 @@ #include +#include #include #include #include diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h index 110693c59f..7368df9138 100644 --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index b4f43cd410..d8c8dd85a6 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include -- 2.41.0
[PATCH v1 27/57] xen/riscv: introduce cmpxchg.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/cmpxchg.h | 373 +++ 1 file changed, 373 insertions(+) create mode 100644 xen/arch/riscv/include/asm/cmpxchg.h diff --git a/xen/arch/riscv/include/asm/cmpxchg.h b/xen/arch/riscv/include/asm/cmpxchg.h new file mode 100644 index 00..8660ecd287 --- /dev/null +++ b/xen/arch/riscv/include/asm/cmpxchg.h @@ -0,0 +1,373 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2014 Regents of the University of California */ + +#ifndef _ASM_RISCV_CMPXCHG_H +#define _ASM_RISCV_CMPXCHG_H + +#include +#include +#include + +#define __xchg_relaxed(ptr, new, size) \ +({ \ + __typeof__(ptr) __ptr = (ptr); \ + __typeof__(new) __new = (new); \ + __typeof__(*(ptr)) __ret; \ + switch (size) { \ + case 4: \ + __asm__ __volatile__ ( \ + " amoswap.w %0, %2, %1\n" \ + : "=r" (__ret), "+A" (*__ptr) \ + : "r" (__new) \ + : "memory");\ + break; \ + case 8: \ + __asm__ __volatile__ ( \ + " amoswap.d %0, %2, %1\n" \ + : "=r" (__ret), "+A" (*__ptr) \ + : "r" (__new) \ + : "memory");\ + break; \ + default:\ + ASSERT_UNREACHABLE(); \ + } \ + __ret; \ +}) + +#define xchg_relaxed(ptr, x) \ +({ \ + __typeof__(*(ptr)) _x_ = (x); \ + (__typeof__(*(ptr))) __xchg_relaxed((ptr), \ + _x_, sizeof(*(ptr))); \ +}) + +#define __xchg_acquire(ptr, new, size) \ +({ \ + __typeof__(ptr) __ptr = (ptr); \ + __typeof__(new) __new = (new); \ + __typeof__(*(ptr)) __ret; \ + switch (size) { \ + case 4: \ + __asm__ __volatile__ ( \ + " amoswap.w %0, %2, %1\n" \ + RISCV_ACQUIRE_BARRIER \ + : "=r" (__ret), "+A" (*__ptr) \ + : "r" (__new) \ + : "memory");\ + break; \ + case 8: \ + __asm__ __volatile__ ( \ + " amoswap.d %0, %2, %1\n" \ + RISCV_ACQUIRE_BARRIER \ + : "=r" (__ret), "+A" (*__ptr) \ + : "r" (__new) \ + : "memory");\ + break; \ + default:\ + ASSERT_UNREACHABLE(); \ + } \ + __ret; \ +}) + +#define xchg_acquire(ptr, x)
[PATCH v1 40/57] xen/riscv: introduce asm/p2m.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/p2m.h | 105 +++ 1 file changed, 105 insertions(+) create mode 100644 xen/arch/riscv/include/asm/p2m.h diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/p2m.h new file mode 100644 index 00..993aec6d2c --- /dev/null +++ b/xen/arch/riscv/include/asm/p2m.h @@ -0,0 +1,105 @@ +#ifndef __ASM_RISCV_P2M_H__ +#define __ASM_RISCV_P2M_H__ + +#include + +#define paddr_bits PADDR_BITS + +/* + * List of possible type for each page in the p2m entry. + * The number of available bit per page in the pte for this purpose is 4 bits. + * So it's possible to only have 16 fields. If we run out of value in the + * future, it's possible to use higher value for pseudo-type and don't store + * them in the p2m entry. + */ +typedef enum { +p2m_invalid = 0,/* Nothing mapped here */ +p2m_ram_rw, /* Normal read/write guest RAM */ +p2m_ram_ro, /* Read-only; writes are silently dropped */ +p2m_mmio_direct_dev,/* Read/write mapping of genuine Device MMIO area */ +p2m_mmio_direct_nc, /* Read/write mapping of genuine MMIO area non-cacheable */ +p2m_mmio_direct_c, /* Read/write mapping of genuine MMIO area cacheable */ +p2m_map_foreign_rw, /* Read/write RAM pages from foreign domain */ +p2m_map_foreign_ro, /* Read-only RAM pages from foreign domain */ +p2m_grant_map_rw, /* Read/write grant mapping */ +p2m_grant_map_ro, /* Read-only grant mapping */ +/* The types below are only used to decide the page attribute in the P2M */ +p2m_iommu_map_rw, /* Read/write iommu mapping */ +p2m_iommu_map_ro, /* Read-only iommu mapping */ +p2m_max_real_type, /* Types after this won't be store in the p2m */ +} p2m_type_t; + +#include + +static inline int get_page_and_type(struct page_info *page, +struct domain *domain, +unsigned long type) +{ +BUG(); +return 1; +} + +/* Look up a GFN and take a reference count on the backing page. */ +typedef unsigned int p2m_query_t; +#define P2M_ALLOC(1u<<0) /* Populate PoD and paged-out entries */ +#define P2M_UNSHARE (1u<<1) /* Break CoW sharing */ + +static inline struct page_info *get_page_from_gfn( +struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q) +{ +BUG(); +return NULL; +} + +static inline void memory_type_changed(struct domain *d) +{ +BUG(); +} + + +static inline int guest_physmap_mark_populate_on_demand(struct domain *d, unsigned long gfn, +unsigned int order) +{ +BUG(); +return 1; +} + +static inline int guest_physmap_add_entry(struct domain *d, +gfn_t gfn, +mfn_t mfn, +unsigned long page_order, +p2m_type_t t) +{ +BUG(); +return 1; +} + +/* Untyped version for RAM only, for compatibility */ +static inline int __must_check +guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t mfn, + unsigned int page_order) +{ +return guest_physmap_add_entry(d, gfn, mfn, page_order, p2m_ram_rw); +} + +static inline mfn_t gfn_to_mfn(struct domain *d, gfn_t gfn) +{ +BUG(); +return _mfn(0); +} + +static inline bool arch_acquire_resource_check(struct domain *d) +{ +/* + * The reference counting of foreign entries in set_foreign_p2m_entry() + * is supported on RISCV. + */ +return true; +} + +static inline void p2m_altp2m_check(struct vcpu *v, uint16_t idx) +{ +/* Not supported on RISCV. */ +} + +#endif /* __ASM_RISCV_P2M_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 38/57] xen/riscv: introduce asm/monitor.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/monitor.h | 53 1 file changed, 53 insertions(+) create mode 100644 xen/arch/riscv/include/asm/monitor.h diff --git a/xen/arch/riscv/include/asm/monitor.h b/xen/arch/riscv/include/asm/monitor.h new file mode 100644 index 00..fb7ef6639d --- /dev/null +++ b/xen/arch/riscv/include/asm/monitor.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * include/asm-RISCV/monitor.h + * + * Arch-specific monitor_op domctl handler. + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + * Copyright (c) 2016, Bitdefender S.R.L. + * + */ + +#ifndef __ASM_RISCV_MONITOR_H__ +#define __ASM_RISCV_MONITOR_H__ + +#include +#include + +static inline +void arch_monitor_allow_userspace(struct domain *d, bool allow_userspace) +{ +} + +static inline +int arch_monitor_domctl_op(struct domain *d, struct xen_domctl_monitor_op *mop) +{ +/* No arch-specific monitor ops on RISCV. */ +return -EOPNOTSUPP; +} + +int arch_monitor_domctl_event(struct domain *d, + struct xen_domctl_monitor_op *mop); + +static inline +int arch_monitor_init_domain(struct domain *d) +{ +/* No arch-specific domain initialization on RISCV. */ +return 0; +} + +static inline +void arch_monitor_cleanup_domain(struct domain *d) +{ +/* No arch-specific domain cleanup on RISCV. */ +} + +static inline uint32_t arch_monitor_get_capabilities(struct domain *d) +{ +uint32_t capabilities = 0; + +return capabilities; +} + +#endif /* __ASM_RISCV_MONITOR_H__ */ -- 2.41.0
[PATCH v1 29/56] xxen/riscv: introduce asm/hardirq.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/hardirq.h | 26 ++ 1 file changed, 26 insertions(+) create mode 100644 xen/arch/riscv/include/asm/hardirq.h diff --git a/xen/arch/riscv/include/asm/hardirq.h b/xen/arch/riscv/include/asm/hardirq.h new file mode 100644 index 00..467421849a --- /dev/null +++ b/xen/arch/riscv/include/asm/hardirq.h @@ -0,0 +1,26 @@ +#ifndef __ASM_RISCV_HARDIRQ_H +#define __ASM_RISCV_HARDIRQ_H + +#include + +typedef struct { +unsigned long __softirq_pending; +unsigned int __local_irq_count; +} __cacheline_aligned irq_cpustat_t; + +#include /* Standard mappings for irq_cpustat_t above */ + +#define in_irq() (local_irq_count(smp_processor_id()) != 0) + +#define irq_enter() (local_irq_count(smp_processor_id())++) +#define irq_exit() (local_irq_count(smp_processor_id())--) + +#endif /* __ASM_RISCV_HARDIRQ_H */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 49/57] xen/riscv: add minimal stuff to asm/processor.h to build full Xen
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/processor.h | 15 +++ 1 file changed, 15 insertions(+) diff --git a/xen/arch/riscv/include/asm/processor.h b/xen/arch/riscv/include/asm/processor.h index 6db681d805..b6218a00a7 100644 --- a/xen/arch/riscv/include/asm/processor.h +++ b/xen/arch/riscv/include/asm/processor.h @@ -12,6 +12,9 @@ #ifndef __ASSEMBLY__ +/* TODO: need to be implemeted */ +#define get_processor_id() 0 + /* On stack VCPU state */ struct cpu_user_regs { @@ -53,6 +56,18 @@ struct cpu_user_regs unsigned long pregs; }; +/* TODO: need to implement */ +#define cpu_to_core(_cpu) (0) +#define cpu_to_socket(_cpu) (0) + +static inline void cpu_relax(void) +{ + int dummy; + /* In lieu of a halt instruction, induce a long-latency stall. */ + __asm__ __volatile__ ("div %0, %0, zero" : "=r" (dummy)); + barrier(); +} + static inline void wfi(void) { __asm__ __volatile__ ("wfi"); -- 2.41.0
[PATCH v1 48/57] xen/riscv: add minimal stuff to asm/page.h to build full Xen
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/page.h | 21 + 1 file changed, 21 insertions(+) diff --git a/xen/arch/riscv/include/asm/page.h b/xen/arch/riscv/include/asm/page.h index 95074e29b3..abbae75aaf 100644 --- a/xen/arch/riscv/include/asm/page.h +++ b/xen/arch/riscv/include/asm/page.h @@ -6,6 +6,7 @@ #ifndef __ASSEMBLY__ #include +#include #include #include @@ -32,6 +33,9 @@ #define PTE_LEAF_DEFAULT(PTE_VALID | PTE_READABLE | PTE_WRITABLE) #define PTE_TABLE (PTE_VALID) +/* TODO */ +#define PAGE_HYPERVISOR 0 + /* Calculate the offsets into the pagetables for a given VA */ #define pt_linear_offset(lvl, va) ((va) >> XEN_PT_LEVEL_SHIFT(lvl)) @@ -46,6 +50,9 @@ typedef struct { #endif } pte_t; +#define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT) +#define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT)) + static inline pte_t paddr_to_pte(paddr_t paddr, unsigned int permissions) { @@ -62,6 +69,20 @@ static inline bool pte_is_valid(pte_t p) return p.pte & PTE_VALID; } +static inline void invalidate_icache(void) +{ +BUG(); +} + +#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) +#define copy_page(dp, sp) memcpy(dp, sp, PAGE_SIZE) + +/* TODO: Flush the dcache for an entire page. */ +static inline void flush_page_to_ram(unsigned long mfn, bool sync_icache) +{ +BUG(); +} + #endif /* __ASSEMBLY__ */ #endif /* _ASM_RISCV_PAGE_H */ -- 2.41.0
[PATCH v1 44/57] xen/riscv: introduce asm/vm_event.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/vm_event.h | 52 +++ 1 file changed, 52 insertions(+) create mode 100644 xen/arch/riscv/include/asm/vm_event.h diff --git a/xen/arch/riscv/include/asm/vm_event.h b/xen/arch/riscv/include/asm/vm_event.h new file mode 100644 index 00..4cae80840a --- /dev/null +++ b/xen/arch/riscv/include/asm/vm_event.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * vm_event.h: architecture specific vm_event handling routines + * + * Copyright (c) 2015 Tamas K Lengyel (ta...@tklengyel.com) + */ + +#ifndef __ASM_RISCV_VM_EVENT_H__ +#define __ASM_RISCV_VM_EVENT_H__ + +#include +#include +#include + +static inline int vm_event_init_domain(struct domain *d) +{ +/* Nothing to do. */ +return 0; +} + +static inline void vm_event_cleanup_domain(struct domain *d) +{ +memset(>monitor, 0, sizeof(d->monitor)); +} + +static inline void vm_event_toggle_singlestep(struct domain *d, struct vcpu *v, + vm_event_response_t *rsp) +{ +/* Not supported on RISCV. */ +} + +static inline +void vm_event_register_write_resume(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Not supported on RISCV. */ +} + +static inline +void vm_event_emulate_check(struct vcpu *v, vm_event_response_t *rsp) +{ +/* Not supported on RISCV. */ +} + +static inline +void vm_event_sync_event(struct vcpu *v, bool value) +{ +/* Not supported on RISCV. */ +} + +void vm_event_reset_vmtrace(struct vcpu *v); + +#endif /* __ASM_RISCV_VM_EVENT_H__ */ -- 2.41.0
[PATCH v1 47/57] xen/riscv: add required things to asm/current.h
Add minimal requied things to be able to build full Xen. Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/current.h | 17 + 1 file changed, 17 insertions(+) diff --git a/xen/arch/riscv/include/asm/current.h b/xen/arch/riscv/include/asm/current.h index d84f15dc50..d03d172f14 100644 --- a/xen/arch/riscv/include/asm/current.h +++ b/xen/arch/riscv/include/asm/current.h @@ -3,6 +3,21 @@ #ifndef __ASM_CURRENT_H #define __ASM_CURRENT_H +#include + +#ifndef __ASSEMBLY__ + +struct vcpu; + +/* Which VCPU is "current" on this PCPU. */ +DECLARE_PER_CPU(struct vcpu *, curr_vcpu); + +#define current(this_cpu(curr_vcpu)) +#define set_current(vcpu) do { current = (vcpu); } while (0) +#define get_cpu_current(cpu) (per_cpu(curr_vcpu, cpu)) + +#define guest_cpu_user_regs() (0) + #define switch_stack_and_jump(stack, fn) do { \ asm volatile ( \ "mv sp, %0\n" \ @@ -10,4 +25,6 @@ unreachable(); \ } while ( false ) +#endif /* __ASSEMBLY__ */ + #endif /* __ASM_CURRENT_H */ -- 2.41.0
[PATCH v1 36/57] xen/riscv: introduce asm/guest_access.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/guest_access.h | 29 +++ 1 file changed, 29 insertions(+) create mode 100644 xen/arch/riscv/include/asm/guest_access.h diff --git a/xen/arch/riscv/include/asm/guest_access.h b/xen/arch/riscv/include/asm/guest_access.h new file mode 100644 index 00..7be5c4509d --- /dev/null +++ b/xen/arch/riscv/include/asm/guest_access.h @@ -0,0 +1,29 @@ +#ifndef __ASM_RISCV_GUEST_ACCESS_H__ +#define __ASM_RISCV_GUEST_ACCESS_H__ + +#include + +unsigned long raw_copy_to_guest(void *to, const void *from, unsigned len); +unsigned long raw_copy_from_guest(void *to, const void *from, unsigned len); + +#define __raw_copy_to_guest raw_copy_to_guest +#define __raw_copy_from_guest raw_copy_from_guest + +#define guest_handle_okay(hnd, nr) (1) +#define guest_handle_subrange_okay(hnd, first, last) (1) + +struct domain; +unsigned long copy_to_guest_phys(struct domain *d, + paddr_t gpa, + void *buf, + unsigned int len); + +#endif /* __ASM_RISCV_GUEST_ACCESS_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 41/57] xen/riscv: introduce asm/regs.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/regs.h | 27 +++ 1 file changed, 27 insertions(+) create mode 100644 xen/arch/riscv/include/asm/regs.h diff --git a/xen/arch/riscv/include/asm/regs.h b/xen/arch/riscv/include/asm/regs.h new file mode 100644 index 00..33ae759a3e --- /dev/null +++ b/xen/arch/riscv/include/asm/regs.h @@ -0,0 +1,27 @@ +#ifndef __ARM_RISCV_REGS_H__ +#define __ARM_RISCV_REGS_H__ + +#ifndef __ASSEMBLY__ + +#include +#include + +#define hyp_mode(r) (0) + +static inline bool guest_mode(const struct cpu_user_regs *r) +{ +BUG(); +} + +#endif + + +#endif /* __ARM_RISCV_REGS_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 50/57] xen/riscv: add minimal stuff to asm/smp.h to build full Xen
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/smp.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xen/arch/riscv/include/asm/smp.h b/xen/arch/riscv/include/asm/smp.h index cc8dd18254..a7b4f94ce4 100644 --- a/xen/arch/riscv/include/asm/smp.h +++ b/xen/arch/riscv/include/asm/smp.h @@ -17,4 +17,7 @@ DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask); */ #define park_offline_cpus false +/* TODO: need to be implemeted */ +#define smp_processor_id() (0) + #endif \ No newline at end of file -- 2.41.0
[PATCH v1 29/57] xen/riscv: introduce asm/hardirq.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/hardirq.h | 26 ++ 1 file changed, 26 insertions(+) create mode 100644 xen/arch/riscv/include/asm/hardirq.h diff --git a/xen/arch/riscv/include/asm/hardirq.h b/xen/arch/riscv/include/asm/hardirq.h new file mode 100644 index 00..467421849a --- /dev/null +++ b/xen/arch/riscv/include/asm/hardirq.h @@ -0,0 +1,26 @@ +#ifndef __ASM_RISCV_HARDIRQ_H +#define __ASM_RISCV_HARDIRQ_H + +#include + +typedef struct { +unsigned long __softirq_pending; +unsigned int __local_irq_count; +} __cacheline_aligned irq_cpustat_t; + +#include /* Standard mappings for irq_cpustat_t above */ + +#define in_irq() (local_irq_count(smp_processor_id()) != 0) + +#define irq_enter() (local_irq_count(smp_processor_id())++) +#define irq_exit() (local_irq_count(smp_processor_id())--) + +#endif /* __ASM_RISCV_HARDIRQ_H */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 55/57] xen/riscv: enable full Xen build
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/Makefile | 16 +++- xen/arch/riscv/arch.mk | 4 xen/arch/riscv/configs/tiny64_defconfig | 19 ++- xen/arch/riscv/stubs.c | 18 -- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index 50c09469a0..9c02cb0ccf 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -12,10 +12,24 @@ $(TARGET): $(TARGET)-syms $(OBJCOPY) -O binary -S $< $@ $(TARGET)-syms: $(objtree)/prelink.o $(obj)/xen.lds - $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) -o $@ + $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \ + $(objtree)/common/symbols-dummy.o -o $(dot-target).0 + $(NM) -pa --format=sysv $(dot-target).0 \ + | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \ + > $(dot-target).0.S + $(MAKE) $(build)=$(@D) $(dot-target).0.o + $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \ + $(dot-target).0.o -o $(dot-target).1 + $(NM) -pa --format=sysv $(dot-target).1 \ + | $(objtree)/tools/symbols $(all_symbols) --sysv --sort \ + > $(dot-target).1.S + $(MAKE) $(build)=$(@D) $(dot-target).1.o + $(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \ + $(dot-target).1.o -o $@ $(NM) -pa --format=sysv $@ \ | $(objtree)/tools/symbols --all-symbols --xensyms --sysv --sort \ > $@.map + rm -f $(@D)/.$(@F).[0-9]* $(obj)/xen.lds: $(src)/xen.lds.S FORCE $(call if_changed_dep,cpp_lds_S) diff --git a/xen/arch/riscv/arch.mk b/xen/arch/riscv/arch.mk index 8403f96b6f..12b1673fae 100644 --- a/xen/arch/riscv/arch.mk +++ b/xen/arch/riscv/arch.mk @@ -13,7 +13,3 @@ riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c # -mcmodel=medlow would force Xen into the lower half. CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany - -# TODO: Drop override when more of the build is working -override ALL_OBJS-y = arch/$(SRCARCH)/built_in.o -override ALL_LIBS-y = diff --git a/xen/arch/riscv/configs/tiny64_defconfig b/xen/arch/riscv/configs/tiny64_defconfig index 3c9a2ff941..4b488180ae 100644 --- a/xen/arch/riscv/configs/tiny64_defconfig +++ b/xen/arch/riscv/configs/tiny64_defconfig @@ -6,7 +6,24 @@ # CONFIG_HYPFS is not set # CONFIG_GRANT_TABLE is not set # CONFIG_SPECULATIVE_HARDEN_ARRAY is not set - +# CONFIG_ARGO is not set +# CONFIG_HYPFS_CONFIG is not set +# CONFIG_CORE_PARKING is not set +# CONFIG_DEBUG_TRACE is not set +# CONFIG_IOREQ_SERVER is not set +# CONFIG_CRASH_DEBUG is not setz +# CONFIG_KEXEC is not set +# CONFIG_LIVEPATCH is not set +# CONFIG_MEM_ACCESS is not set +# CONFIG_NUMA is not set +# CONFIG_PERF_COUNTERS is not set +# CONFIG_HAS_PMAP is not set +# CONFIG_TRACEBUFFER is not set +# CONFIG_XENOPROF is not set +# CONFIG_COMPAT is not set +# CONFIG_COVERAGE is not set +# CONFIG_UBSAN is not set +# CONFIG_NEEDS_LIBELF is not set CONFIG_RISCV_64=y CONFIG_DEBUG=y CONFIG_DEBUG_INFO=y diff --git a/xen/arch/riscv/stubs.c b/xen/arch/riscv/stubs.c index 3232039bc2..5f3040965e 100644 --- a/xen/arch/riscv/stubs.c +++ b/xen/arch/riscv/stubs.c @@ -417,21 +417,3 @@ int arch_get_paging_mempool_size(struct domain *d, uint64_t *size) { BUG(); } - -/* need for build until common code starts be buildable */ -unsigned long __read_mostly max_page; - -void printk(const char *fmt, ...) -{ -BUG(); -} - -void cf_check irq_actor_none(struct irq_desc *desc) -{ -BUG(); -} - -unsigned int cf_check irq_startup_none(struct irq_desc *desc) -{ -return 0; -} \ No newline at end of file -- 2.41.0
[PATCH v1 26/57] xen/riscv: introduce asm/atomic.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/atomic.h | 375 1 file changed, 375 insertions(+) create mode 100644 xen/arch/riscv/include/asm/atomic.h diff --git a/xen/arch/riscv/include/asm/atomic.h b/xen/arch/riscv/include/asm/atomic.h new file mode 100644 index 00..d4849cf282 --- /dev/null +++ b/xen/arch/riscv/include/asm/atomic.h @@ -0,0 +1,375 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Taken and modified from Linux. + * + * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. + * Copyright (C) 2012 Regents of the University of California + * Copyright (C) 2017 SiFive + * Copyright (C) 2021 Vates SAS + */ + +#ifndef _ASM_RISCV_ATOMIC_H +#define _ASM_RISCV_ATOMIC_H + +#include +#include +#include +#include +#include + +void __bad_atomic_size(void); + +static always_inline void read_atomic_size(const volatile void *p, + void *res, + unsigned int size) +{ +switch ( size ) { +case 1: *(uint8_t *)res = readb((uint8_t *)p); break; +case 2: *(uint16_t *)res = readw((uint16_t *)p); break; +case 4: *(uint32_t *)res = readl((uint32_t *)p); break; +case 8: *(uint32_t *)res = readq((uint64_t *)p); break; +default: __bad_atomic_size(); break; +} +} + +#define read_atomic(p) ({ \ +union { typeof(*p) val; char c[0]; } x_;\ +read_atomic_size(p, x_.c, sizeof(*p)); \ +x_.val; \ +}) + + +#define write_atomic(p, x) ({ \ +typeof(*p) __x = (x); \ +switch ( sizeof(*p) ) { \ +case 1: writeb((uint8_t)__x, (uint8_t *) p); break; \ +case 2: writew((uint16_t)__x, (uint16_t *) p); break; \ +case 4: writel((uint32_t)__x, (uint32_t *) p); break; \ +case 8: writeq((uint64_t)__x, (uint64_t *) p); break; \ +default: __bad_atomic_size(); break;\ +} \ +__x;\ +}) + +/* TODO: Fix this */ +#define add_sized(p, x) ({ \ +typeof(*(p)) __x = (x); \ +switch ( sizeof(*(p)) ) \ +{ \ +case 1: writeb(read_atomic(p) + __x, (uint8_t *)(p)); break;\ +case 2: writew(read_atomic(p) + __x, (uint16_t *)(p)); break; \ +case 4: writel(read_atomic(p) + __x, (uint32_t *)(p)); break; \ +default: __bad_atomic_size(); break;\ +} \ +}) + +/* + * __unqual_scalar_typeof(x) - Declare an unqualified scalar type, leaving + * non-scalar types unchanged. + * + * Prefer C11 _Generic for better compile-times and simpler code. Note: 'char' + * is not type-compatible with 'signed char', and we define a separate case. + */ +#define __scalar_type_to_expr_cases(type) \ +unsigned type: (unsigned type)0, \ +signed type:(signed type)0 + +#define __unqual_scalar_typeof(x) typeof( \ +_Generic((x), \ +char: (char)0, \ +__scalar_type_to_expr_cases(char), \ +__scalar_type_to_expr_cases(short), \ +__scalar_type_to_expr_cases(int), \ +__scalar_type_to_expr_cases(long), \ +__scalar_type_to_expr_cases(long long), \ +default: (x))) + +#define READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x)) +#define WRITE_ONCE(x, val) \ +do {\ +*(volatile typeof(x) *)&(x) = (val);\ +} while (0) + +#define __atomic_acquire_fence() \ + __asm__ __volatile__(RISCV_ACQUIRE_BARRIER "" ::: "memory") + +#define __atomic_release_fence() \ + __asm__ __volatile__(RISCV_RELEASE_BARRIER "" ::: "memory"); + +static inline int atomic_read(const atomic_t *v) +{ + return READ_ONCE(v->counter); +} + +static inline int _atomic_read(atomic_t v) +{ +return v.counter; +} + +static inline void atomic_set(atomic_t *v, int i) +{ + WRITE_ONCE(v->counter, i); +} + +static inline void
[PATCH v1 34/57] xen/riscv: introduce asm/delay.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/delay.h | 17 + 1 file changed, 17 insertions(+) create mode 100644 xen/arch/riscv/include/asm/delay.h diff --git a/xen/arch/riscv/include/asm/delay.h b/xen/arch/riscv/include/asm/delay.h new file mode 100644 index 00..40370e381a --- /dev/null +++ b/xen/arch/riscv/include/asm/delay.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2009 Chen Liqin + * Copyright (C) 2016 Regents of the University of California + */ + +#ifndef _ASM_RISCV_DELAY_H +#define _ASM_RISCV_DELAY_H + +#include + +static inline void udelay(unsigned long usecs) +{ +BUG(); +} + +#endif /* _ASM_RISCV_DELAY_H */ -- 2.41.0
[PATCH v1 28/57] xen/riscv: introduce asm/io.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/io.h | 132 1 file changed, 132 insertions(+) create mode 100644 xen/arch/riscv/include/asm/io.h diff --git a/xen/arch/riscv/include/asm/io.h b/xen/arch/riscv/include/asm/io.h new file mode 100644 index 00..8c83c9689b --- /dev/null +++ b/xen/arch/riscv/include/asm/io.h @@ -0,0 +1,132 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * {read,write}{b,w,l,q} based on arch/arm64/include/asm/io.h + * which was based on arch/arm/include/io.h + * + * Copyright (C) 1996-2000 Russell King + * Copyright (C) 2012 ARM Ltd. + * Copyright (C) 2014 Regents of the University of California + */ + +#ifndef _ASM_RISCV_IO_H +#define _ASM_RISCV_IO_H + +#include + +/* + * The RISC-V ISA doesn't yet specify how to query or modify PMAs, so we can't + * change the properties of memory regions. This should be fixed by the + * upcoming platform spec. + */ +#define ioremap_nocache(addr, size) ioremap((addr), (size)) +#define ioremap_wc(addr, size) ioremap((addr), (size)) +#define ioremap_wt(addr, size) ioremap((addr), (size)) + +/* Generic IO read/write. These perform native-endian accesses. */ +#define __raw_writeb __raw_writeb +static inline void __raw_writeb(u8 val, volatile void __iomem *addr) +{ + asm volatile("sb %0, 0(%1)" : : "r" (val), "r" (addr)); +} + +#define __raw_writew __raw_writew +static inline void __raw_writew(u16 val, volatile void __iomem *addr) +{ + asm volatile("sh %0, 0(%1)" : : "r" (val), "r" (addr)); +} + +#define __raw_writel __raw_writel +static inline void __raw_writel(u32 val, volatile void __iomem *addr) +{ + asm volatile("sw %0, 0(%1)" : : "r" (val), "r" (addr)); +} + +#ifdef CONFIG_64BIT +#define __raw_writeq __raw_writeq +static inline void __raw_writeq(u64 val, volatile void __iomem *addr) +{ + asm volatile("sd %0, 0(%1)" : : "r" (val), "r" (addr)); +} +#endif + +#define __raw_readb __raw_readb +static inline u8 __raw_readb(const volatile void __iomem *addr) +{ + u8 val; + + asm volatile("lb %0, 0(%1)" : "=r" (val) : "r" (addr)); + return val; +} + +#define __raw_readw __raw_readw +static inline u16 __raw_readw(const volatile void __iomem *addr) +{ + u16 val; + + asm volatile("lh %0, 0(%1)" : "=r" (val) : "r" (addr)); + return val; +} + +#define __raw_readl __raw_readl +static inline u32 __raw_readl(const volatile void __iomem *addr) +{ + u32 val; + + asm volatile("lw %0, 0(%1)" : "=r" (val) : "r" (addr)); + return val; +} + +#ifdef CONFIG_64BIT +#define __raw_readq __raw_readq +static inline u64 __raw_readq(const volatile void __iomem *addr) +{ + u64 val; + + asm volatile("ld %0, 0(%1)" : "=r" (val) : "r" (addr)); + return val; +} +#endif + +/* + * Unordered I/O memory access primitives. These are even more relaxed than + * the relaxed versions, as they don't even order accesses between successive + * operations to the I/O regions. + */ +#define readb_cpu(c) ({ u8 __r = __raw_readb(c); __r; }) +#define readw_cpu(c) ({ u16 __r = le16_to_cpu((__force __le16)__raw_readw(c)); __r; }) +#define readl_cpu(c) ({ u32 __r = le32_to_cpu((__force __le32)__raw_readl(c)); __r; }) + +#define writeb_cpu(v,c)((void)__raw_writeb((v),(c))) +#define writew_cpu(v,c)((void)__raw_writew((__force u16)cpu_to_le16(v),(c))) +#define writel_cpu(v,c)((void)__raw_writel((__force u32)cpu_to_le32(v),(c))) + +#ifdef CONFIG_64BIT +#define readq_cpu(c) ({ u64 __r = le64_to_cpu((__force __le64)__raw_readq(c)); __r; }) +#define writeq_cpu(v,c)((void)__raw_writeq((__force u64)cpu_to_le64(v),(c))) +#endif + +/* + * I/O memory access primitives. Reads are ordered relative to any + * following Normal memory access. Writes are ordered relative to any prior + * Normal memory access. The memory barriers here are necessary as RISC-V + * doesn't define any ordering between the memory space and the I/O space. + */ +#define __io_br() do {} while (0) +#define __io_ar(v) __asm__ __volatile__ ("fence i,r" : : : "memory"); +#define __io_bw() __asm__ __volatile__ ("fence w,o" : : : "memory"); +#define __io_aw() do { } while (0) + +#define readb(c) ({ u8 __v; __io_br(); __v = readb_cpu(c); __io_ar(__v); __v; }) +#define readw(c) ({ u16 __v; __io_br(); __v = readw_cpu(c); __io_ar(__v); __v; }) +#define readl(c) ({ u32 __v; __io_br(); __v = readl_cpu(c); __io_ar(__v); __v; }) + +#define writeb(v,c)({ __io_bw(); writeb_cpu((v),(c)); __io_aw(); }) +#define writew(v,c)({ __io_bw(); writew_cpu((v),(c)); __io_aw();
[PATCH v1 25/57] xen/riscv: introduce asm/smp.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/smp.h | 20 1 file changed, 20 insertions(+) create mode 100644 xen/arch/riscv/include/asm/smp.h diff --git a/xen/arch/riscv/include/asm/smp.h b/xen/arch/riscv/include/asm/smp.h new file mode 100644 index 00..cc8dd18254 --- /dev/null +++ b/xen/arch/riscv/include/asm/smp.h @@ -0,0 +1,20 @@ +#ifndef __ASM_RISCV_SMP_H +#define __ASM_RISCV_SMP_H + +#ifndef __ASSEMBLY__ +#include +#include +#endif + +DECLARE_PER_CPU(cpumask_var_t, cpu_sibling_mask); +DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask); + +#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) + +/* + * Do we, for platform reasons, need to actually keep CPUs online when we + * would otherwise prefer them to be off? + */ +#define park_offline_cpus false + +#endif \ No newline at end of file -- 2.41.0
[PATCH v1 53/57] xen/riscv: add minimal stuff to asm/mm.h to build full Xen
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/mm.h | 265 +++- 1 file changed, 263 insertions(+), 2 deletions(-) diff --git a/xen/arch/riscv/include/asm/mm.h b/xen/arch/riscv/include/asm/mm.h index 5e3ac5cde3..1d464afec9 100644 --- a/xen/arch/riscv/include/asm/mm.h +++ b/xen/arch/riscv/include/asm/mm.h @@ -3,10 +3,271 @@ #ifndef _ASM_RISCV_MM_H #define _ASM_RISCV_MM_H +#include +#include +#include + +#include #include -#define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT) -#define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT)) +#define paddr_to_pdx(pa)mfn_to_pdx(maddr_to_mfn(pa)) +#define gfn_to_gaddr(gfn) pfn_to_paddr(gfn_x(gfn)) +#define gaddr_to_gfn(ga)_gfn(paddr_to_pfn(ga)) +#define mfn_to_maddr(mfn) pfn_to_paddr(mfn_x(mfn)) +#define maddr_to_mfn(ma)_mfn(paddr_to_pfn(ma)) +#define vmap_to_mfn(va) maddr_to_mfn(virt_to_maddr((vaddr_t)va)) +#define vmap_to_page(va)mfn_to_page(vmap_to_mfn(va)) +#define paddr_to_pdx(pa)mfn_to_pdx(maddr_to_mfn(pa)) +#define gfn_to_gaddr(gfn) pfn_to_paddr(gfn_x(gfn)) +#define gaddr_to_gfn(ga)_gfn(paddr_to_pfn(ga)) +#define mfn_to_maddr(mfn) pfn_to_paddr(mfn_x(mfn)) +#define maddr_to_mfn(ma)_mfn(paddr_to_pfn(ma)) +#define vmap_to_mfn(va) maddr_to_mfn(virt_to_maddr((vaddr_t)va)) +#define vmap_to_page(va)mfn_to_page(vmap_to_mfn(va)) + +#define virt_to_maddr(va) ((paddr_t)((vaddr_t)(va) & PADDR_MASK)) +#define maddr_to_virt(pa) ((void *)((paddr_t)(pa) | XEN_VIRT_START)) + +/* Convert between Xen-heap virtual addresses and machine frame numbers. */ +#define __virt_to_mfn(va) (virt_to_maddr(va) >> PAGE_SHIFT) +#define __mfn_to_virt(mfn) (maddr_to_virt((paddr_t)(mfn) << PAGE_SHIFT)) + +/* Convert between Xen-heap virtual addresses and page-info structures. */ +static inline struct page_info *virt_to_page(const void *v) +{ +BUG(); +return NULL; +} + +/* + * We define non-underscored wrappers for above conversion functions. + * These are overriden in various source files while underscored version + * remain intact. + */ +#define virt_to_mfn(va) __virt_to_mfn(va) +#define mfn_to_virt(mfn)__mfn_to_virt(mfn) + +struct page_info +{ +/* Each frame can be threaded onto a doubly-linked list. */ +struct page_list_entry list; + +/* Reference count and various PGC_xxx flags and fields. */ +unsigned long count_info; + +/* Context-dependent fields follow... */ +union { +/* Page is in use: ((count_info & PGC_count_mask) != 0). */ +struct { +/* Type reference count and various PGT_xxx flags and fields. */ +unsigned long type_info; +} inuse; +/* Page is on a free list: ((count_info & PGC_count_mask) == 0). */ +union { +struct { +/* + * Index of the first *possibly* unscrubbed page in the buddy. + * One more bit than maximum possible order to accommodate + * INVALID_DIRTY_IDX. + */ +#define INVALID_DIRTY_IDX ((1UL << (MAX_ORDER + 1)) - 1) +unsigned long first_dirty:MAX_ORDER + 1; + +/* Do TLBs need flushing for safety before next page use? */ +bool need_tlbflush:1; + +#define BUDDY_NOT_SCRUBBING0 +#define BUDDY_SCRUBBING1 +#define BUDDY_SCRUB_ABORT 2 +unsigned long scrub_state:2; +}; + +unsigned long val; +} free; + +} u; + +union { +/* Page is in use, but not as a shadow. */ +struct { +/* Owner of this page (zero if page is anonymous). */ +struct domain *domain; +} inuse; + +/* Page is on a free list. */ +struct { +/* Order-size of the free chunk this page is the head of. */ +unsigned int order; +} free; + +} v; + +union { +/* + * Timestamp from 'TLB clock', used to avoid extra safety flushes. + * Only valid for: a) free pages, and b) pages with zero type count + */ +u32 tlbflush_timestamp; +}; +u64 pad; +}; + +#define frame_table ((struct page_info *)FRAMETABLE_VIRT_START) + +/* PDX of the first page in the frame table. */ +extern unsigned long frametable_base_pdx; + +/* Convert between machine frame numbers and page-info structures. */ +#define mfn_to_page(mfn)\ +(frame_table + (mfn_to_pdx(mfn) - frametable_base_pdx)) +#define page_to_mfn(pg) \ +pdx_to_mfn((unsigned long)((pg) - frame_table) + frametable_base_pdx) + +static inline void *page_to_virt(const struct page_info *pg) +{ +return mfn_to_virt(mfn_x(page_to_mfn(pg))); +} + +/* + * Common code requires get_page_type and put_page_type. + * We don't care about typecounts so we just do the minimum to make it + * happy. +
[PATCH v1 30/57] xen/riscv: introduce div64.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/div64.h | 22 ++ 1 file changed, 22 insertions(+) create mode 100644 xen/arch/riscv/include/asm/div64.h diff --git a/xen/arch/riscv/include/asm/div64.h b/xen/arch/riscv/include/asm/div64.h new file mode 100644 index 00..212dfe4e8a --- /dev/null +++ b/xen/arch/riscv/include/asm/div64.h @@ -0,0 +1,22 @@ +#ifndef __ASM_RISCV_DIV64 +#define __ASM_RISCV_DIV64 + +#include + +# define do_div(n,base) ({ \ +uint32_t __base = (base); \ +uint32_t __rem; \ +__rem = ((uint64_t)(n)) % __base; \ +(n) = ((uint64_t)(n)) / __base; \ +__rem; \ + }) + +#endif +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 43/57] xen/riscv: introduce asm/time.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/time.h | 20 1 file changed, 20 insertions(+) create mode 100644 xen/arch/riscv/include/asm/time.h diff --git a/xen/arch/riscv/include/asm/time.h b/xen/arch/riscv/include/asm/time.h new file mode 100644 index 00..d0571cdf32 --- /dev/null +++ b/xen/arch/riscv/include/asm/time.h @@ -0,0 +1,20 @@ +#ifndef __ASM_RISCV_TIME_H__ +#define __ASM_RISCV_TIME_H__ + +#include +#include +#include + +struct vcpu; + +/* TODO: implement */ +static inline void force_update_vcpu_system_time(struct vcpu *v) { BUG(); } + +typedef unsigned long cycles_t; + +static inline cycles_t get_cycles(void) +{ + return csr_read(CSR_TIME); +} + +#endif /* __ASM_RISCV_TIME_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 21/57] xen/riscv: introduce asm/xenoprof.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/xenoprof.h | 4 1 file changed, 4 insertions(+) create mode 100644 xen/arch/riscv/include/asm/xenoprof.h diff --git a/xen/arch/riscv/include/asm/xenoprof.h b/xen/arch/riscv/include/asm/xenoprof.h new file mode 100644 index 00..e3fc625932 --- /dev/null +++ b/xen/arch/riscv/include/asm/xenoprof.h @@ -0,0 +1,4 @@ +#ifndef __ASM_RISCV_XENOPROF_H__ +#define __ASM_RISCV_XENOPROF_H__ + +#endif /* __ASM_RISCV_XENOPROF_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 19/57] xen/riscv: introduce asm/setup.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/setup.h | 6 ++ 1 file changed, 6 insertions(+) create mode 100644 xen/arch/riscv/include/asm/setup.h diff --git a/xen/arch/riscv/include/asm/setup.h b/xen/arch/riscv/include/asm/setup.h new file mode 100644 index 00..9b3f8c6416 --- /dev/null +++ b/xen/arch/riscv/include/asm/setup.h @@ -0,0 +1,6 @@ +#ifndef __ASM_RISCV_SETUP_H__ +#define __ASM_RISCV_SETUP_H__ + +#define max_init_domid (0) + +#endif /* __ASM_RISCV_SETUP_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 23/57] xen/riscv: introduce flushtlb.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/flushtlb.h | 31 +++ 1 file changed, 31 insertions(+) create mode 100644 xen/arch/riscv/include/asm/flushtlb.h diff --git a/xen/arch/riscv/include/asm/flushtlb.h b/xen/arch/riscv/include/asm/flushtlb.h new file mode 100644 index 00..7059a53823 --- /dev/null +++ b/xen/arch/riscv/include/asm/flushtlb.h @@ -0,0 +1,31 @@ +#ifndef __ASM_RISCV_FLUSHTLB_H__ +#define __ASM_RISCV_FLUSHTLB_H__ + +#include + +/* + * Filter the given set of CPUs, removing those that definitely flushed their + * TLB since @page_timestamp. + */ +/* XXX lazy implementation just doesn't clear anything */ +static inline void tlbflush_filter(cpumask_t *mask, uint32_t page_timestamp) {} + +#define tlbflush_current_time() (0) + +static inline void page_set_tlbflush_timestamp(struct page_info *page) +{ +BUG(); +} + +/* Flush specified CPUs' TLBs */ +void arch_flush_tlb_mask(const cpumask_t *mask); + +#endif /* __ASM_RISCV_FLUSHTLB_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 24/57] xen/riscv: introduce asm/percpu.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/percpu.h | 33 + 1 file changed, 33 insertions(+) create mode 100644 xen/arch/riscv/include/asm/percpu.h diff --git a/xen/arch/riscv/include/asm/percpu.h b/xen/arch/riscv/include/asm/percpu.h new file mode 100644 index 00..6b317a28fd --- /dev/null +++ b/xen/arch/riscv/include/asm/percpu.h @@ -0,0 +1,33 @@ +#ifndef __ASM_RISCV_PERCPU_H__ +#define __ASM_RISCV_PERCPU_H__ + +#ifndef __ASSEMBLY__ + +#include + +extern char __per_cpu_start[], __per_cpu_data_end[]; +extern unsigned long __per_cpu_offset[NR_CPUS]; +void percpu_init_areas(void); + +#define per_cpu(var, cpu) \ +(*RELOC_HIDE(_cpu__##var, __per_cpu_offset[cpu])) + +#define this_cpu(var) \ +(*RELOC_HIDE(_cpu__##var, __per_cpu_offset[get_processor_id()])) + +#define per_cpu_ptr(var, cpu) \ +(*RELOC_HIDE(var, __per_cpu_offset[cpu])) +#define this_cpu_ptr(var) \ +(*RELOC_HIDE(var, get_processor_id())) + +#endif + +#endif /* __ASM_RISCV_PERCPU_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 51/57] xen: add RISCV support for pmu.h
Signed-off-by: Oleksii Kurochko --- xen/include/public/pmu.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xen/include/public/pmu.h b/xen/include/public/pmu.h index eb87a81e7b..801912900b 100644 --- a/xen/include/public/pmu.h +++ b/xen/include/public/pmu.h @@ -11,6 +11,8 @@ #include "arch-x86/pmu.h" #elif defined (__arm__) || defined (__aarch64__) #include "arch-arm.h" +#elif defined(__riscv) +#include "arch-riscv.h" #else #error "Unsupported architecture" #endif -- 2.41.0
[PATCH v1 33/57] xen/riscv: introduce asm/altp2m.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/altp2m.h | 28 1 file changed, 28 insertions(+) create mode 100644 xen/arch/riscv/include/asm/altp2m.h diff --git a/xen/arch/riscv/include/asm/altp2m.h b/xen/arch/riscv/include/asm/altp2m.h new file mode 100644 index 00..dc72a624f6 --- /dev/null +++ b/xen/arch/riscv/include/asm/altp2m.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Alternate p2m + * + * Copyright (c) 2014, Intel Corporation. + */ + +#ifndef __ASM_RISCV_ALTP2M_H +#define __ASM_RISCV_ALTP2M_H + +#include + +/* Alternate p2m on/off per domain */ +static inline bool altp2m_active(const struct domain *d) +{ +/* Not implemented on RISCV. */ +return false; +} + +/* Alternate p2m VCPU */ +static inline uint16_t altp2m_vcpu_idx(const struct vcpu *v) +{ +/* Not implemented on RISCV, should not be reached. */ +BUG(); +return 0; +} + +#endif /* __ASM_RISCV_ALTP2M_H */ -- 2.41.0
[PATCH v1 31/57] xen/riscv: define bug frame tables in xen.lds.S
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/xen.lds.S | 10 ++ 1 file changed, 10 insertions(+) diff --git a/xen/arch/riscv/xen.lds.S b/xen/arch/riscv/xen.lds.S index 9064852173..aa42d3d17b 100644 --- a/xen/arch/riscv/xen.lds.S +++ b/xen/arch/riscv/xen.lds.S @@ -40,6 +40,16 @@ SECTIONS . = ALIGN(PAGE_SIZE); .rodata : { _srodata = .; /* Read-only data */ +/* Bug frames table */ +__start_bug_frames = .; +*(.bug_frames.0) +__stop_bug_frames_0 = .; +*(.bug_frames.1) +__stop_bug_frames_1 = .; +*(.bug_frames.2) +__stop_bug_frames_2 = .; +*(.bug_frames.3) +__stop_bug_frames_3 = .; *(.rodata) *(.rodata.*) *(.data.rel.ro) -- 2.41.0
[PATCH v1 21/56] xxen/riscv: introduce asm/xenoprof.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/xenoprof.h | 4 1 file changed, 4 insertions(+) create mode 100644 xen/arch/riscv/include/asm/xenoprof.h diff --git a/xen/arch/riscv/include/asm/xenoprof.h b/xen/arch/riscv/include/asm/xenoprof.h new file mode 100644 index 00..e3fc625932 --- /dev/null +++ b/xen/arch/riscv/include/asm/xenoprof.h @@ -0,0 +1,4 @@ +#ifndef __ASM_RISCV_XENOPROF_H__ +#define __ASM_RISCV_XENOPROF_H__ + +#endif /* __ASM_RISCV_XENOPROF_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 56/57] test only riscv
Signed-off-by: Oleksii Kurochko --- automation/gitlab-ci/analyze.yaml | 16 - automation/gitlab-ci/build.yaml | 544 -- automation/gitlab-ci/test.yaml| 308 - 3 files changed, 868 deletions(-) diff --git a/automation/gitlab-ci/analyze.yaml b/automation/gitlab-ci/analyze.yaml index 4aa4abe2ee..89cef96771 100644 --- a/automation/gitlab-ci/analyze.yaml +++ b/automation/gitlab-ci/analyze.yaml @@ -20,22 +20,6 @@ codequality: gl-code-quality-report.json needs: [] -eclair-x86_64: - extends: .eclair-analysis - variables: -LOGFILE: "eclair-x86_64.log" -VARIANT: "X86_64" -RULESET: "Set1" - allow_failure: true - -eclair-ARM64: - extends: .eclair-analysis - variables: -LOGFILE: "eclair-ARM64.log" -VARIANT: "ARM64" -RULESET: "Set1" - allow_failure: true - .eclair-analysis:on-schedule: extends: .eclair-analysis rules: diff --git a/automation/gitlab-ci/build.yaml b/automation/gitlab-ci/build.yaml index 173613567c..210f7da264 100644 --- a/automation/gitlab-ci/build.yaml +++ b/automation/gitlab-ci/build.yaml @@ -271,247 +271,6 @@ needs: [] except: !reference [.test-jobs-common, except] -# Arm test artifacts - -alpine-3.18-arm64-rootfs-export: - extends: .test-jobs-artifact-common - image: registry.gitlab.com/xen-project/xen/tests-artifacts/alpine:3.18-arm64v8 - script: -- mkdir binaries && cp /initrd.tar.gz binaries/initrd.tar.gz - artifacts: -paths: - - binaries/initrd.tar.gz - tags: -- arm64 - -kernel-5.19-arm64-export: - extends: .test-jobs-artifact-common - image: registry.gitlab.com/xen-project/xen/tests-artifacts/kernel:5.19-arm64v8 - script: -- mkdir binaries && cp /Image binaries/Image - artifacts: -paths: - - binaries/Image - tags: -- arm64 - -qemu-system-aarch64-6.0.0-arm64-export: - extends: .test-jobs-artifact-common - image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:6.0.0-arm64v8 - script: -- mkdir binaries && cp /qemu-system-aarch64 binaries/qemu-system-aarch64 - artifacts: -paths: - - binaries/qemu-system-aarch64 - tags: -- arm64 - -qemu-system-aarch64-6.0.0-arm32-export: - extends: .test-jobs-artifact-common - image: registry.gitlab.com/xen-project/xen/tests-artifacts/qemu-system-aarch64:6.0.0-arm64v8 - script: -- mkdir binaries && cp /qemu-system-arm binaries/qemu-system-arm - artifacts: -paths: - - binaries/qemu-system-arm - tags: -- arm64 - -# x86_64 test artifacts - -alpine-3.18-rootfs-export: - extends: .test-jobs-artifact-common - image: registry.gitlab.com/xen-project/xen/tests-artifacts/alpine:3.18 - script: -- mkdir binaries && cp /initrd.tar.gz binaries/initrd.tar.gz - artifacts: -paths: - - binaries/initrd.tar.gz - tags: -- x86_64 - -kernel-6.1.19-export: - extends: .test-jobs-artifact-common - image: registry.gitlab.com/xen-project/xen/tests-artifacts/kernel:6.1.19 - script: -- mkdir binaries && cp /bzImage binaries/bzImage - artifacts: -paths: - - binaries/bzImage - tags: -- x86_64 - -# Jobs below this line - -# Build jobs needed for tests - -alpine-3.18-gcc: - extends: .gcc-x86-64-build - variables: -CONTAINER: alpine:3.18 - -alpine-3.18-gcc-debug: - extends: .gcc-x86-64-build-debug - variables: -CONTAINER: alpine:3.18 - -debian-stretch-gcc-debug: - extends: .gcc-x86-64-build-debug - variables: -CONTAINER: debian:stretch - -debian-unstable-clang-debug: - extends: .clang-x86-64-build-debug - variables: -CONTAINER: debian:unstable - -# Arm32 cross-build - -debian-unstable-gcc-arm32: - extends: .gcc-arm32-cross-build - variables: -CONTAINER: debian:unstable-arm64v8-arm32-gcc -HYPERVISOR_ONLY: y - -debian-unstable-gcc-arm32-debug: - extends: .gcc-arm32-cross-build-debug - variables: -CONTAINER: debian:unstable-arm64v8-arm32-gcc -HYPERVISOR_ONLY: y - -debian-unstable-gcc-arm32-randconfig: - extends: .gcc-arm32-cross-build - variables: -CONTAINER: debian:unstable-arm64v8-arm32-gcc -HYPERVISOR_ONLY: y -RANDCONFIG: y - -debian-unstable-gcc-arm32-debug-randconfig: - extends: .gcc-arm32-cross-build-debug - variables: -CONTAINER: debian:unstable-arm64v8-arm32-gcc -HYPERVISOR_ONLY: y -RANDCONFIG: y - -debian-unstable-gcc-arm32-staticmem: - extends: .gcc-arm32-cross-build - variables: -CONTAINER: debian:unstable-arm64v8-arm32-gcc -HYPERVISOR_ONLY: y -EXTRA_XEN_CONFIG: | - CONFIG_EXPERT=y - CONFIG_UNSUPPORTED=y - CONFIG_STATIC_MEMORY=y - -debian-unstable-gcc-arm32-debug-staticmem: - extends: .gcc-arm32-cross-build-debug - variables: -CONTAINER: debian:unstable-arm64v8-arm32-gcc -HYPERVISOR_ONLY: y -EXTRA_XEN_CONFIG: | - CONFIG_EXPERT=y - CONFIG_UNSUPPORTED=y - CONFIG_STATIC_MEMORY=y - -# Arm bui
[PATCH v1 39/57] xen/riscv: introduce asm/numa.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/numa.h | 38 +++ 1 file changed, 38 insertions(+) create mode 100644 xen/arch/riscv/include/asm/numa.h diff --git a/xen/arch/riscv/include/asm/numa.h b/xen/arch/riscv/include/asm/numa.h new file mode 100644 index 00..0cfeeed38a --- /dev/null +++ b/xen/arch/riscv/include/asm/numa.h @@ -0,0 +1,38 @@ +#ifndef __ARCH_RISCV_NUMA_H +#define __ARCH_RISCV_NUMA_H + +#include + +typedef u8 nodeid_t; + +/* Fake one node for now. See also node_online_map. */ +#define cpu_to_node(cpu) 0 +#define node_to_cpumask(node) (cpu_online_map) + +/* + * TODO: make first_valid_mfn static when NUMA is supported on RISCV, this + * is required because the dummy helpers are using it. + */ +extern mfn_t first_valid_mfn; + +/* XXX: implement NUMA support */ +#define node_spanned_pages(nid) (max_page - mfn_x(first_valid_mfn)) +#define node_start_pfn(nid) (mfn_x(first_valid_mfn)) +#define __node_distance(a, b) (20) + +static inline unsigned int arch_get_dma_bitsize(void) +{ +return 32; +} + +#define arch_want_default_dmazone() (false) + +#endif /* __ARCH_RISCV_NUMA_H */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 57/57] xxxen/riscv: WIP ( need advise )
These changes are needed only to make GitLab CI happy is it doesn't take into account tiny64_defconfig where unnecessary configs are disabled. I tried different approaches to deal with it: 1. Override EXTRA_XEN_CONFIG and EXTRA_FIXED_RANDCONFIG in the following way: EXTRA_XEN_CONFIG: CONFIG_1=n CONFIG_2=n ... 2. Override in arch-specific KConfig: CONFIG_1: default n Each option doesn't work for me fully. Could you please suggest other options or more correct way? Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/asm_defns.h | 44 + xen/arch/riscv/include/asm/grant_table.h | 57 ++ xen/arch/riscv/include/asm/guest_atomics.h | 16 +- xen/arch/riscv/include/asm/livepatch.h | 0 xen/arch/riscv/include/asm/mm.h| 5 ++ xen/arch/riscv/include/asm/p2m.h | 24 + xen/arch/riscv/include/asm/page.h | 16 ++ xen/arch/riscv/include/asm/perfc_defn.h| 0 xen/arch/riscv/mm.c| 33 + 9 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 xen/arch/riscv/include/asm/asm_defns.h create mode 100644 xen/arch/riscv/include/asm/livepatch.h create mode 100644 xen/arch/riscv/include/asm/perfc_defn.h diff --git a/xen/arch/riscv/include/asm/asm_defns.h b/xen/arch/riscv/include/asm/asm_defns.h new file mode 100644 index 00..dd0511a9c6 --- /dev/null +++ b/xen/arch/riscv/include/asm/asm_defns.h @@ -0,0 +1,44 @@ +#ifndef __ARM_ASM_DEFNS_H__ +#define __ARM_ASM_DEFNS_H__ + +#ifndef COMPILE_OFFSETS +/* NB. Auto-generated from arch/.../asm-offsets.c */ +#include +#endif +#include + +/* Macros for generic assembly code */ +#if defined(CONFIG_RISCV_32) +# define __OP32 +# define ASM_REG(index) asm("r" # index) +#elif defined(CONFIG_RISCV_64) +# define __OP32 "w" +/* + * Clang < 8.0 doesn't support register alllocation using the syntax rN. + * See https://reviews.llvm.org/rL328829. + */ +# define ASM_REG(index) asm("x" # index) +#else +# error "unknown ARM variant" +#endif + +#define RODATA_STR(label, msg) \ +.pushsection .rodata.str, "aMS", %progbits, 1 ; \ +label: .asciz msg; \ +.popsection + +#define ASM_INT(label, val) \ +.p2align 2; \ +label: .long (val); \ +.size label, . - label; \ +.type label, %object + +#endif /* __ARM_ASM_DEFNS_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/arch/riscv/include/asm/grant_table.h b/xen/arch/riscv/include/asm/grant_table.h index 600fb10669..8b7880d3ed 100644 --- a/xen/arch/riscv/include/asm/grant_table.h +++ b/xen/arch/riscv/include/asm/grant_table.h @@ -1,4 +1,61 @@ #ifndef __ASM_RISCV_GRANTTABLE_H__ #define __ASM_RISCV_GRANTTABLE_H__ +#define INITIAL_NR_GRANT_FRAMES 1U + +#define gnttab_shared_page(t, i) virt_to_page((t)->shared_raw[i]) + +#define gnttab_status_page(t, i) virt_to_page((t)->status[i]) + +#define gnttab_shared_gfn(d, t, i) \ +page_get_xenheap_gfn(gnttab_shared_page(t, i)) + +#define gnttab_status_gfn(d, t, i) \ +page_get_xenheap_gfn(gnttab_status_page(t, i)) + +#define gnttab_set_frame_gfn(gt, st, idx, gfn, mfn) \ +(gfn_eq(gfn, INVALID_GFN)\ + ? guest_physmap_remove_page((gt)->domain, \ + gnttab_get_frame_gfn(gt, st, idx), \ + mfn, 0) \ + : 0) + +#define gnttab_get_frame_gfn(gt, st, idx) ({ \ + (st) ? gnttab_status_gfn(NULL, gt, idx) \ +: gnttab_shared_gfn(NULL, gt, idx); \ +}) + +#define gnttab_need_iommu_mapping(d)\ +(is_domain_direct_mapped(d) && is_iommu_enabled(d)) + +static inline bool gnttab_release_host_mappings(const struct domain *d) +{ +BUG(); +} + +static inline void gnttab_mark_dirty(struct domain *d, mfn_t mfn) +{ +#ifndef NDEBUG +printk_once(XENLOG_G_WARNING "gnttab_mark_dirty not implemented yet\n"); +#endif +} + +static inline void gnttab_clear_flags(struct domain *d, + unsigned int mask, uint16_t *addr) +{ +BUG(); +} + +static inline bool gnttab_host_mapping_get_page_type(bool ro, + const struct domain *ld, + const struct domain *rd) +{ +return false; +} + +int create_grant_host_mapping(uint64_t gpaddr, mfn_t frame, + unsigned int flag
[PATCH v1 46/57] xen/riscv: define an address of frame table
Also the patchs adds some helpful macros. Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/config.h | 21 + 1 file changed, 21 insertions(+) diff --git a/xen/arch/riscv/include/asm/config.h b/xen/arch/riscv/include/asm/config.h index fa90ae0898..63ddcae1f9 100644 --- a/xen/arch/riscv/include/asm/config.h +++ b/xen/arch/riscv/include/asm/config.h @@ -77,12 +77,31 @@ name: #endif +#define VPN_BITS(9) +#define OFFSET_BITS (12) + #ifdef CONFIG_RISCV_64 + +#define SLOTN_ENTRY_BITS(HYP_PT_ROOT_LEVEL * VPN_BITS + OFFSET_BITS) +#define SLOTN(slot) (_AT(vaddr_t,slot) << SLOTN_ENTRY_BITS) +#define SLOTN_ENTRY_SIZESLOTN(1) + #define XEN_VIRT_START 0xC000 /* (_AC(-1, UL) + 1 - GB(1)) */ + +#define FRAMETABLE_VIRT_START SLOTN(196) +#define FRAMETABLE_SIZE GB(3) +#define FRAMETABLE_NR (FRAMETABLE_SIZE / sizeof(*frame_table)) +#define FRAMETABLE_VIRT_END (FRAMETABLE_VIRT_START + FRAMETABLE_SIZE - 1) + +#define VMAP_VIRT_START SLOTN(194) +#define VMAP_VIRT_SIZE GB(1) + #else #error "RV32 isn't supported" #endif +#define HYPERVISOR_VIRT_START XEN_VIRT_START + #define SMP_CACHE_BYTES (1 << 6) #define STACK_SIZE PAGE_SIZE @@ -95,6 +114,8 @@ #define RV_STAGE1_MODE SATP_MODE_SV32 #endif +#define HYP_PT_ROOT_LEVEL (CONFIG_PAGING_LEVELS - 1) + #endif /* __RISCV_CONFIG_H__ */ /* * Local variables: -- 2.41.0
[PATCH v1 37/57] xen/riscv: introduce asm/irq.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/irq.h | 34 1 file changed, 34 insertions(+) create mode 100644 xen/arch/riscv/include/asm/irq.h diff --git a/xen/arch/riscv/include/asm/irq.h b/xen/arch/riscv/include/asm/irq.h new file mode 100644 index 00..7b08785f3f --- /dev/null +++ b/xen/arch/riscv/include/asm/irq.h @@ -0,0 +1,34 @@ +#ifndef __ASM_RISCV_IRQ_H__ +#define __ASM_RISCV_IRQ_H__ + +#include +#include +#include + +/* TODO */ +#define nr_irqs 0U +#define nr_static_irqs 0 +#define arch_hwdom_irqs(domid) 0U + +#define domain_pirq_to_irq(d, pirq) (pirq) + +#define arch_evtchn_bind_pirq(d, pirq) ((void)((d) + (pirq))) + +struct arch_pirq { +}; + +struct arch_irq_desc { +unsigned int type; +}; + +static inline void arch_move_irqs(struct vcpu *v) +{ +BUG(); +} + +static inline int platform_get_irq(const struct dt_device_node *device, int index) +{ +BUG(); +} + +#endif /* __ASM_RISCV_IRQ_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 32/57] xen/riscv: introduce bit operations
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/Makefile| 1 + xen/arch/riscv/lib/Makefile| 1 + xen/arch/riscv/lib/find_next_bit.c | 278 + 3 files changed, 280 insertions(+) create mode 100644 xen/arch/riscv/lib/Makefile create mode 100644 xen/arch/riscv/lib/find_next_bit.c diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index 2fefe14e7c..b08048948f 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -1,5 +1,6 @@ obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-y += entry.o +obj-y += lib/ obj-y += mm.o obj-$(CONFIG_RISCV_64) += riscv64/ obj-y += sbi.o diff --git a/xen/arch/riscv/lib/Makefile b/xen/arch/riscv/lib/Makefile new file mode 100644 index 00..6fae6a1f10 --- /dev/null +++ b/xen/arch/riscv/lib/Makefile @@ -0,0 +1 @@ +obj-y += find_next_bit.o diff --git a/xen/arch/riscv/lib/find_next_bit.c b/xen/arch/riscv/lib/find_next_bit.c new file mode 100644 index 00..ac5a4687e3 --- /dev/null +++ b/xen/arch/riscv/lib/find_next_bit.c @@ -0,0 +1,278 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * find_next_bit.c: fallback find next bit implementation + * + * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowe...@redhat.com) + */ +#include +#include +#include + +#ifndef find_next_bit +/* + * Find the next set bit in a memory region. + */ +unsigned long find_next_bit(const unsigned long *addr, unsigned long size, + unsigned long offset) +{ + const unsigned long *p = addr + BIT_WORD(offset); + unsigned long result = offset & ~(BITS_PER_LONG-1); + unsigned long tmp; + + if (offset >= size) + return size; + size -= result; + offset %= BITS_PER_LONG; + if (offset) { + tmp = *(p++); + tmp &= (~0UL << offset); + if (size < BITS_PER_LONG) + goto found_first; + if (tmp) + goto found_middle; + size -= BITS_PER_LONG; + result += BITS_PER_LONG; + } + while (size & ~(BITS_PER_LONG-1)) { + if ((tmp = *(p++))) + goto found_middle; + result += BITS_PER_LONG; + size -= BITS_PER_LONG; + } + if (!size) + return result; + tmp = *p; + +found_first: + tmp &= (~0UL >> (BITS_PER_LONG - size)); + if (tmp == 0UL) /* Are any bits set? */ + return result + size; /* Nope. */ +found_middle: + return result + __ffs(tmp); +} +EXPORT_SYMBOL(find_next_bit); +#endif + +#ifndef find_next_zero_bit +/* + * This implementation of find_{first,next}_zero_bit was stolen from + * Linus' asm-alpha/bitops.h. + */ +unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, +unsigned long offset) +{ + const unsigned long *p = addr + BIT_WORD(offset); + unsigned long result = offset & ~(BITS_PER_LONG-1); + unsigned long tmp; + + if (offset >= size) + return size; + size -= result; + offset %= BITS_PER_LONG; + if (offset) { + tmp = *(p++); + tmp |= ~0UL >> (BITS_PER_LONG - offset); + if (size < BITS_PER_LONG) + goto found_first; + if (~tmp) + goto found_middle; + size -= BITS_PER_LONG; + result += BITS_PER_LONG; + } + while (size & ~(BITS_PER_LONG-1)) { + if (~(tmp = *(p++))) + goto found_middle; + result += BITS_PER_LONG; + size -= BITS_PER_LONG; + } + if (!size) + return result; + tmp = *p; + +found_first: + tmp |= ~0UL << size; + if (tmp == ~0UL)/* Are any bits zero? */ + return result + size; /* Nope. */ +found_middle: + return result + ffz(tmp); +} +EXPORT_SYMBOL(find_next_zero_bit); +#endif + +#ifndef find_first_bit +/* + * Find the first set bit in a memory region. + */ +unsigned long find_first_bit(const unsigned long *addr, unsigned long size) +{ + const unsigned long *p = addr; + unsigned long result = 0; + unsigned long tmp; + + while (size & ~(BITS_PER_LONG-1)) { + if ((tmp = *(p++))) + goto found; + result += BITS_PER_LONG; + size -= BITS_PER_LONG; + } + if (!size) + return result; + + tmp = (*p) & (~0UL >> (BITS_PER_LONG - size)); + if (tmp == 0UL) /* Are any bits set? */ + return result + size; /* Nope. */ +found: + return result + __ffs(tmp); +} +EXPORT_SYMBOL(find_first_bit); +#endif + +#ifndef find_first_zero_bit
[PATCH v1 42/57] xen/riscv: introduce asm/softirq.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/softirq.h | 16 1 file changed, 16 insertions(+) create mode 100644 xen/arch/riscv/include/asm/softirq.h diff --git a/xen/arch/riscv/include/asm/softirq.h b/xen/arch/riscv/include/asm/softirq.h new file mode 100644 index 00..8364aa2810 --- /dev/null +++ b/xen/arch/riscv/include/asm/softirq.h @@ -0,0 +1,16 @@ +#ifndef __ASM_RISCV_SOFTIRQ_H__ +#define __ASM_RISCV_SOFTIRQ_H__ + +#define NR_ARCH_SOFTIRQS 0 + +#define arch_skip_send_event_check(cpu) 0 + +#endif /* __ASM_RISCV_SOFTIRQ_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 20/57] xen/riscv: introduce asm/system.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/system.h | 83 + 1 file changed, 83 insertions(+) create mode 100644 xen/arch/riscv/include/asm/system.h diff --git a/xen/arch/riscv/include/asm/system.h b/xen/arch/riscv/include/asm/system.h new file mode 100644 index 00..b1d9936594 --- /dev/null +++ b/xen/arch/riscv/include/asm/system.h @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _ASM_RISCV_BARRIER_H +#define _ASM_RISCV_BARRIER_H + +#include +// #include + +#ifndef __ASSEMBLY__ + +#define RISCV_FENCE(p, s) \ +__asm__ __volatile__ ("fence " #p "," #s : : : "memory") + +/* These barriers need to enforce ordering on both devices or memory. */ +#define mb()RISCV_FENCE(iorw,iorw) +#define rmb() RISCV_FENCE(ir,ir) +#define wmb() RISCV_FENCE(ow,ow) + +/* These barriers do not need to enforce ordering on devices, just memory. */ +#define smp_mb()RISCV_FENCE(rw,rw) +#define smp_rmb() RISCV_FENCE(r,r) +#define smp_wmb() RISCV_FENCE(w,w) +#define smp_mb__before_atomic() smp_mb() +#define smp_mb__after_atomic() smp_mb() + +/* +#define __smp_store_release(p, v) \ +do {\ + compiletime_assert_atomic_type(*p); \ + RISCV_FENCE(rw,w); \ + WRITE_ONCE(*p, v); \ +} while (0) + +#define __smp_load_acquire(p) \ +({ \ +typeof(*p) ___p1 = READ_ONCE(*p); \ +compiletime_assert_atomic_type(*p); \ +RISCV_FENCE(r,rw); \ +___p1; \ +}) +*/ + +static inline unsigned long local_save_flags(void) +{ +return csr_read(sstatus); +} + +static inline void local_irq_enable(void) +{ +csr_set(sstatus, SSTATUS_SIE); +} + +static inline void local_irq_disable(void) +{ +csr_clear(sstatus, SSTATUS_SIE); +} + +#define local_irq_save(x) \ +({ \ +x = csr_read_clear(CSR_SSTATUS, SSTATUS_SIE); \ +local_irq_disable();\ +}) + +static inline void local_irq_restore(unsigned long flags) +{ + csr_set(CSR_SSTATUS, flags & SSTATUS_SIE); +} + +static inline int local_irq_is_enabled(void) +{ +unsigned long flags = local_save_flags(); + +return flags & SSTATUS_SIE; +} + +#define arch_fetch_and_add(x, v) __sync_fetch_and_add(x, v) + +// extern struct vcpu *__context_switch(struct vcpu *prev, struct vcpu *next); + +#endif /* __ASSEMBLY__ */ + + +#endif /* _ASM_RISCV_BARRIER_H */ -- 2.41.0
[PATCH v1 41/56] xxen/riscv: introduce asm/regs.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/regs.h | 27 +++ 1 file changed, 27 insertions(+) create mode 100644 xen/arch/riscv/include/asm/regs.h diff --git a/xen/arch/riscv/include/asm/regs.h b/xen/arch/riscv/include/asm/regs.h new file mode 100644 index 00..33ae759a3e --- /dev/null +++ b/xen/arch/riscv/include/asm/regs.h @@ -0,0 +1,27 @@ +#ifndef __ARM_RISCV_REGS_H__ +#define __ARM_RISCV_REGS_H__ + +#ifndef __ASSEMBLY__ + +#include +#include + +#define hyp_mode(r) (0) + +static inline bool guest_mode(const struct cpu_user_regs *r) +{ +BUG(); +} + +#endif + + +#endif /* __ARM_RISCV_REGS_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 45/57] xen/riscv: add definition of __read_mostly
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/cache.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xen/arch/riscv/include/asm/cache.h b/xen/arch/riscv/include/asm/cache.h index 69573eb051..94bd94db53 100644 --- a/xen/arch/riscv/include/asm/cache.h +++ b/xen/arch/riscv/include/asm/cache.h @@ -3,4 +3,6 @@ #ifndef _ASM_RISCV_CACHE_H #define _ASM_RISCV_CACHE_H +#define __read_mostly __section(".data.read_mostly") + #endif /* _ASM_RISCV_CACHE_H */ -- 2.41.0
[PATCH v1 01/57] xen/riscv:introduce asm/byteorder.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/byteorder.h | 16 1 file changed, 16 insertions(+) create mode 100644 xen/arch/riscv/include/asm/byteorder.h diff --git a/xen/arch/riscv/include/asm/byteorder.h b/xen/arch/riscv/include/asm/byteorder.h new file mode 100644 index 00..320a03c88f --- /dev/null +++ b/xen/arch/riscv/include/asm/byteorder.h @@ -0,0 +1,16 @@ +#ifndef __ASM_RISCV_BYTEORDER_H__ +#define __ASM_RISCV_BYTEORDER_H__ + +#define __BYTEORDER_HAS_U64__ + +#include + +#endif /* __ASM_RISCV_BYTEORDER_H__ */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 09/57] xen/riscv: introduce asm/event.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/event.h | 34 ++ 1 file changed, 34 insertions(+) create mode 100644 xen/arch/riscv/include/asm/event.h diff --git a/xen/arch/riscv/include/asm/event.h b/xen/arch/riscv/include/asm/event.h new file mode 100644 index 00..48630c77b3 --- /dev/null +++ b/xen/arch/riscv/include/asm/event.h @@ -0,0 +1,34 @@ +#ifndef __ASM_RISCV_EVENT_H__ +#define __ASM_RISCV_EVENT_H__ + +void vcpu_mark_events_pending(struct vcpu *v); + +static inline int vcpu_event_delivery_is_enabled(struct vcpu *v) +{ +return 0; +} + +static inline int local_events_need_delivery(void) +{ +return 0; +} + +static inline void local_event_delivery_enable(void) +{ +} + +/* No arch specific virq definition now. Default to global. */ +static inline bool arch_virq_is_global(unsigned int virq) +{ +return true; +} + +#endif +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 10/57] xen/riscv: introduce asm/grant_table.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/grant_table.h | 4 1 file changed, 4 insertions(+) create mode 100644 xen/arch/riscv/include/asm/grant_table.h diff --git a/xen/arch/riscv/include/asm/grant_table.h b/xen/arch/riscv/include/asm/grant_table.h new file mode 100644 index 00..600fb10669 --- /dev/null +++ b/xen/arch/riscv/include/asm/grant_table.h @@ -0,0 +1,4 @@ +#ifndef __ASM_RISCV_GRANTTABLE_H__ +#define __ASM_RISCV_GRANTTABLE_H__ + +#endif /* __ASM_RISCV_GRANTTABLE_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 12/57] xen/riscv: introduce asm/hypercall.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/hypercall.h | 4 1 file changed, 4 insertions(+) create mode 100644 xen/arch/riscv/include/asm/hypercall.h diff --git a/xen/arch/riscv/include/asm/hypercall.h b/xen/arch/riscv/include/asm/hypercall.h new file mode 100644 index 00..f58c2f2761 --- /dev/null +++ b/xen/arch/riscv/include/asm/hypercall.h @@ -0,0 +1,4 @@ +#ifndef __ASM_RISCV_HYPERCALL_H__ +#define __ASM_RISCV_HYPERCALL_H__ + +#endif /* __ASM_RISCV_HYPERCALL_H__ */ \ No newline at end of file -- 2.41.0
[PATCH v1 13/57] xen/riscv: introduce asm/iocap.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/iocap.h | 16 1 file changed, 16 insertions(+) create mode 100644 xen/arch/riscv/include/asm/iocap.h diff --git a/xen/arch/riscv/include/asm/iocap.h b/xen/arch/riscv/include/asm/iocap.h new file mode 100644 index 00..c3147b1aed --- /dev/null +++ b/xen/arch/riscv/include/asm/iocap.h @@ -0,0 +1,16 @@ +#ifndef __ASM_RISCV_IOCAP_H__ +#define __ASM_RISCV_IOCAP_H__ + +#define cache_flush_permitted(d)\ +(!rangeset_is_empty((d)->iomem_caps)) + +#endif + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0
[PATCH v1 11/57] xen/riscv: introduce asm/guest_atomics.h
Signed-off-by: Oleksii Kurochko --- xen/arch/riscv/include/asm/guest_atomics.h | 49 ++ 1 file changed, 49 insertions(+) create mode 100644 xen/arch/riscv/include/asm/guest_atomics.h diff --git a/xen/arch/riscv/include/asm/guest_atomics.h b/xen/arch/riscv/include/asm/guest_atomics.h new file mode 100644 index 00..71b0b11a25 --- /dev/null +++ b/xen/arch/riscv/include/asm/guest_atomics.h @@ -0,0 +1,49 @@ +#ifndef __ASM_RISCV_GUEST_ATOMICS_H +#define __ASM_RISCV_GUEST_ATOMICS_H + +/* + * TODO: implement guest atomics + */ + +#define guest_testop(name) \ +static inline int guest_##name(struct domain *d, int nr, volatile void *p) \ +{ \ +(void) d; \ +(void) nr; \ +(void) p; \ +\ +return 0; \ +} + +#define guest_bitop(name) \ +static inline void guest_##name(struct domain *d, int nr, volatile void *p) \ +{ \ +(void) d; \ +(void) nr; \ +(void) p; \ +} + +guest_bitop(set_bit) +guest_bitop(clear_bit) +guest_bitop(change_bit) + +#undef guest_bitop + +guest_testop(test_and_set_bit) +guest_testop(test_and_clear_bit) +guest_testop(test_and_change_bit) + +#undef guest_testop + + +#define guest_test_bit(d, nr, p) ((void)(d), test_bit(nr, p)) + +#endif /* __ASM_RISCV_GUEST_ATOMICS_H */ +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ -- 2.41.0