On 09/01/2020 09:15, Jürgen Groß wrote: > On 08.01.20 16:20, Sergey Dyasli wrote: >> This enables to use Outline instrumentation for Xen PV kernels. >> >> KASAN_INLINE and KASAN_VMALLOC options currently lead to boot crashes >> and hence disabled. >> >> Signed-off-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> >> --- >> RFC --> v1: >> - New functions with declarations in xen/xen-ops.h >> - Fixed the issue with free_kernel_image_pages() with the help of >> xen_pv_kasan_unpin_pgd() >> --- >> arch/x86/mm/kasan_init_64.c | 12 ++++++++++++ >> arch/x86/xen/Makefile | 7 +++++++ >> arch/x86/xen/enlighten_pv.c | 3 +++ >> arch/x86/xen/mmu_pv.c | 39 +++++++++++++++++++++++++++++++++++++ >> drivers/xen/Makefile | 2 ++ >> include/xen/xen-ops.h | 4 ++++ >> kernel/Makefile | 2 ++ >> lib/Kconfig.kasan | 3 ++- >> 8 files changed, 71 insertions(+), 1 deletion(-) >> >> diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c >> index cf5bc37c90ac..902a6a152d33 100644 >> --- a/arch/x86/mm/kasan_init_64.c >> +++ b/arch/x86/mm/kasan_init_64.c >> @@ -13,6 +13,9 @@ >> #include <linux/sched/task.h> >> #include <linux/vmalloc.h> >> +#include <xen/xen.h> >> +#include <xen/xen-ops.h> >> + >> #include <asm/e820/types.h> >> #include <asm/pgalloc.h> >> #include <asm/tlbflush.h> >> @@ -332,6 +335,11 @@ void __init kasan_early_init(void) >> for (i = 0; pgtable_l5_enabled() && i < PTRS_PER_P4D; i++) >> kasan_early_shadow_p4d[i] = __p4d(p4d_val); >> + if (xen_pv_domain()) { >> + pgd_t *pv_top_pgt = xen_pv_kasan_early_init(); > > You are breaking the build with CONFIG_XEN_PV undefined here. Right, the following is needed: diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 91d66520f0a3..3d20f000af12 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -241,8 +241,14 @@ static inline void xen_preemptible_hcall_end(void) #endif /* CONFIG_PREEMPT */ +#if defined(CONFIG_XEN_PV) pgd_t *xen_pv_kasan_early_init(void); void xen_pv_kasan_pin_pgd(pgd_t *pgd); void xen_pv_kasan_unpin_pgd(pgd_t *pgd); +#else +static inline pgd_t *xen_pv_kasan_early_init(void) { return NULL; } +static inline void xen_pv_kasan_pin_pgd(pgd_t *pgd) { } +static inline void xen_pv_kasan_unpin_pgd(pgd_t *pgd) { } +#endif /* defined(CONFIG_XEN_PV) */ #endif /* INCLUDE_XEN_OPS_H */ -- Thanks, Sergey