Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d877e6b authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk
Browse files

xen/hvm: If we fail to fetch an HVM parameter print out which flag it is.



Makes it easier to troubleshoot in the field.

Acked-by: default avatarIan Campbell <ian.campbell@citrix.com>
[v1: Use macro per Ian's suggestion]
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent cf47a83f
Loading
Loading
Loading
Loading
+32 −2
Original line number Original line Diff line number Diff line
@@ -5,6 +5,36 @@
#include <xen/interface/hvm/params.h>
#include <xen/interface/hvm/params.h>
#include <asm/xen/hypercall.h>
#include <asm/xen/hypercall.h>


static const char *param_name(int op)
{
#define PARAM(x) [HVM_PARAM_##x] = #x
	static const char *const names[] = {
		PARAM(CALLBACK_IRQ),
		PARAM(STORE_PFN),
		PARAM(STORE_EVTCHN),
		PARAM(PAE_ENABLED),
		PARAM(IOREQ_PFN),
		PARAM(BUFIOREQ_PFN),
		PARAM(TIMER_MODE),
		PARAM(HPET_ENABLED),
		PARAM(IDENT_PT),
		PARAM(DM_DOMAIN),
		PARAM(ACPI_S_STATE),
		PARAM(VM86_TSS),
		PARAM(VPT_ALIGN),
		PARAM(CONSOLE_PFN),
		PARAM(CONSOLE_EVTCHN),
	};
#undef PARAM

	if (op >= ARRAY_SIZE(names))
		return "unknown";

	if (!names[op])
		return "reserved";

	return names[op];
}
static inline int hvm_get_parameter(int idx, uint64_t *value)
static inline int hvm_get_parameter(int idx, uint64_t *value)
{
{
	struct xen_hvm_param xhv;
	struct xen_hvm_param xhv;
@@ -14,8 +44,8 @@ static inline int hvm_get_parameter(int idx, uint64_t *value)
	xhv.index = idx;
	xhv.index = idx;
	r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
	r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
	if (r < 0) {
	if (r < 0) {
		printk(KERN_ERR "Cannot get hvm parameter %d: %d!\n",
		printk(KERN_ERR "Cannot get hvm parameter %s (%d): %d!\n",
			idx, r);
			param_name(idx), idx, r);
		return r;
		return r;
	}
	}
	*value = xhv.value;
	*value = xhv.value;