Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xen: check required Xen features

Linux kernel is not supported to run on Xen versions older than 4.0.

Add tests for required Xen features always being present in Xen 4.0
and newer.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Link: https://lore.kernel.org/r/20210730071804.4302-2-jgross@suse.com
Signed-off-by: Juergen Gross <jgross@suse.com>

+18
+18
drivers/xen/features.c
··· 9 9 #include <linux/types.h> 10 10 #include <linux/cache.h> 11 11 #include <linux/export.h> 12 + #include <linux/printk.h> 12 13 13 14 #include <asm/xen/hypercall.h> 14 15 16 + #include <xen/xen.h> 15 17 #include <xen/interface/xen.h> 16 18 #include <xen/interface/version.h> 17 19 #include <xen/features.h> 20 + 21 + /* 22 + * Linux kernel expects at least Xen 4.0. 23 + * 24 + * Assume some features to be available for that reason (depending on guest 25 + * mode, of course). 26 + */ 27 + #define chk_required_feature(f) { \ 28 + if (!xen_feature(f)) \ 29 + panic("Xen: feature %s not available!\n", #f); \ 30 + } 18 31 19 32 u8 xen_features[XENFEAT_NR_SUBMAPS * 32] __read_mostly; 20 33 EXPORT_SYMBOL_GPL(xen_features); ··· 43 30 break; 44 31 for (j = 0; j < 32; j++) 45 32 xen_features[i * 32 + j] = !!(fi.submap & 1<<j); 33 + } 34 + 35 + if (xen_pv_domain()) { 36 + chk_required_feature(XENFEAT_mmu_pt_update_preserve_ad); 37 + chk_required_feature(XENFEAT_gnttab_map_avail_bits); 46 38 } 47 39 }