Commit ac4c403c authored by Juergen Gross's avatar Juergen Gross
Browse files

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: default avatarJuergen Gross <jgross@suse.com>
Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Link: https://lore.kernel.org/r/20210730071804.4302-2-jgross@suse.com


Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
parent 4b511d5b
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -9,13 +9,26 @@
#include <linux/types.h>
#include <linux/cache.h>
#include <linux/export.h>
#include <linux/printk.h>

#include <asm/xen/hypercall.h>

#include <xen/xen.h>
#include <xen/interface/xen.h>
#include <xen/interface/version.h>
#include <xen/features.h>

/*
 * Linux kernel expects at least Xen 4.0.
 *
 * Assume some features to be available for that reason (depending on guest
 * mode, of course).
 */
#define chk_required_feature(f) {					\
		if (!xen_feature(f))					\
			panic("Xen: feature %s not available!\n", #f);	\
	}

u8 xen_features[XENFEAT_NR_SUBMAPS * 32] __read_mostly;
EXPORT_SYMBOL_GPL(xen_features);

@@ -31,4 +44,9 @@ void xen_setup_features(void)
		for (j = 0; j < 32; j++)
			xen_features[i * 32 + j] = !!(fi.submap & 1<<j);
	}

	if (xen_pv_domain()) {
		chk_required_feature(XENFEAT_mmu_pt_update_preserve_ad);
		chk_required_feature(XENFEAT_gnttab_map_avail_bits);
	}
}