Skip to content

Commit

Permalink
hv: fail the probing immediately when we are not in hyperv platform
Browse files Browse the repository at this point in the history
We wait for about 5 seconds for the success of the hyperv registration even if
we were not in hyperv platform. This is suboptimal, so the patch check the cpuid
in the beginning of hv_acpi_init() instead of in vmbus_bus_init() to fail the
probing immediately.

Signed-off-by: Jason Wang <[email protected]>
Cc: Haiyang Zhang <[email protected]>
Acked-by: K. Y. Srinivasan <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
jasowang authored and gregkh committed Aug 17, 2012
1 parent 4a52c4a commit 0592969
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 25 deletions.
25 changes: 0 additions & 25 deletions drivers/hv/hv.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,6 @@ struct hv_context hv_context = {
.signal_event_buffer = NULL,
};

/*
* query_hypervisor_presence
* - Query the cpuid for presence of windows hypervisor
*/
static int query_hypervisor_presence(void)
{
unsigned int eax;
unsigned int ebx;
unsigned int ecx;
unsigned int edx;
unsigned int op;

eax = 0;
ebx = 0;
ecx = 0;
edx = 0;
op = HVCPUID_VERSION_FEATURES;
cpuid(op, &eax, &ebx, &ecx, &edx);

return ecx & HV_PRESENT_BIT;
}

/*
* query_hypervisor_info - Get version info of the windows hypervisor
*/
Expand Down Expand Up @@ -160,9 +138,6 @@ int hv_init(void)
memset(hv_context.synic_message_page, 0,
sizeof(void *) * NR_CPUS);

if (!query_hypervisor_presence())
goto cleanup;

max_leaf = query_hypervisor_info();

/*
Expand Down
25 changes: 25 additions & 0 deletions drivers/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -719,10 +719,35 @@ static struct acpi_driver vmbus_acpi_driver = {
},
};

/*
* query_hypervisor_presence
* - Query the cpuid for presence of windows hypervisor
*/
static int query_hypervisor_presence(void)
{
unsigned int eax;
unsigned int ebx;
unsigned int ecx;
unsigned int edx;
unsigned int op;

eax = 0;
ebx = 0;
ecx = 0;
edx = 0;
op = HVCPUID_VERSION_FEATURES;
cpuid(op, &eax, &ebx, &ecx, &edx);

return ecx & HV_PRESENT_BIT;
}

static int __init hv_acpi_init(void)
{
int ret, t;

if (!query_hypervisor_presence())
return -ENODEV;

init_completion(&probe_event);

/*
Expand Down

0 comments on commit 0592969

Please sign in to comment.