|
@@ -76,10 +76,8 @@ static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
|
|
|
msg->header.msgtype = CHANNELMSG_INITIATE_CONTACT;
|
|
|
msg->vmbus_version_requested = version;
|
|
|
msg->interrupt_page = virt_to_phys(vmbus_connection.int_page);
|
|
|
- msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages);
|
|
|
- msg->monitor_page2 = virt_to_phys(
|
|
|
- (void *)((unsigned long)vmbus_connection.monitor_pages +
|
|
|
- PAGE_SIZE));
|
|
|
+ msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
|
|
|
+ msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
|
|
|
|
|
|
/*
|
|
|
* Add to list before we send the request since we may
|
|
@@ -169,9 +167,10 @@ int vmbus_connect(void)
|
|
|
* Setup the monitor notification facility. The 1st page for
|
|
|
* parent->child and the 2nd page for child->parent
|
|
|
*/
|
|
|
- vmbus_connection.monitor_pages =
|
|
|
- (void *)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 1);
|
|
|
- if (vmbus_connection.monitor_pages == NULL) {
|
|
|
+ vmbus_connection.monitor_pages[0] = (void *)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
|
|
|
+ vmbus_connection.monitor_pages[1] = (void *)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 0);
|
|
|
+ if ((vmbus_connection.monitor_pages[0] == NULL) ||
|
|
|
+ (vmbus_connection.monitor_pages[1] == NULL)) {
|
|
|
ret = -ENOMEM;
|
|
|
goto cleanup;
|
|
|
}
|
|
@@ -229,10 +228,10 @@ cleanup:
|
|
|
vmbus_connection.int_page = NULL;
|
|
|
}
|
|
|
|
|
|
- if (vmbus_connection.monitor_pages) {
|
|
|
- free_pages((unsigned long)vmbus_connection.monitor_pages, 1);
|
|
|
- vmbus_connection.monitor_pages = NULL;
|
|
|
- }
|
|
|
+ free_pages((unsigned long)vmbus_connection.monitor_pages[0], 1);
|
|
|
+ free_pages((unsigned long)vmbus_connection.monitor_pages[1], 1);
|
|
|
+ vmbus_connection.monitor_pages[0] = NULL;
|
|
|
+ vmbus_connection.monitor_pages[1] = NULL;
|
|
|
|
|
|
kfree(msginfo);
|
|
|
|