Skip to content

Commit

Permalink
xen/hvm: If we fail to fetch an HVM parameter print out which flag it…
Browse files Browse the repository at this point in the history
… is.

Makes it easier to troubleshoot in the field.

Acked-by: Ian Campbell <ian.campbell@citrix.com>
[v1: Use macro per Ian's suggestion]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  • Loading branch information
Konrad Rzeszutek Wilk committed Nov 7, 2012
1 parent cf47a83 commit 6d877e6
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions include/xen/hvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,36 @@
#include <xen/interface/hvm/params.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)
{
struct xen_hvm_param xhv;
Expand All @@ -14,8 +44,8 @@ static inline int hvm_get_parameter(int idx, uint64_t *value)
xhv.index = idx;
r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
if (r < 0) {
printk(KERN_ERR "Cannot get hvm parameter %d: %d!\n",
idx, r);
printk(KERN_ERR "Cannot get hvm parameter %s (%d): %d!\n",
param_name(idx), idx, r);
return r;
}
*value = xhv.value;
Expand Down

0 comments on commit 6d877e6

Please sign in to comment.