newchannel->channel_callback_context = context;
/* Allocate the ring buffer */
- out = osd_page_alloc((send_ringbuffer_size + recv_ringbuffer_size)
- >> PAGE_SHIFT);
+ out = (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
+ get_order(send_ringbuffer_size + recv_ringbuffer_size));
+
if (!out)
return -ENOMEM;
errorout:
ringbuffer_cleanup(&newchannel->outbound);
ringbuffer_cleanup(&newchannel->inbound);
- osd_page_free(out, (send_ringbuffer_size + recv_ringbuffer_size)
- >> PAGE_SHIFT);
+ free_pages((unsigned long)out,
+ get_order(send_ringbuffer_size + recv_ringbuffer_size));
kfree(openInfo);
return err;
}
ringbuffer_cleanup(&channel->outbound);
ringbuffer_cleanup(&channel->inbound);
- osd_page_free(channel->ringbuffer_pages, channel->ringbuffer_pagecount);
+ free_pages((unsigned long)channel->ringbuffer_pages,
+ get_order(channel->ringbuffer_pagecount * PAGE_SIZE));
kfree(info);
* Setup the vmbus event connection for channel interrupt
* abstraction stuff
*/
- vmbus_connection.int_page = osd_page_alloc(1);
+ vmbus_connection.int_page =
+ (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO, 0);
if (vmbus_connection.int_page == NULL) {
ret = -1;
goto Cleanup;
* Setup the monitor notification facility. The 1st page for
* parent->child and the 2nd page for child->parent
*/
- vmbus_connection.monitor_pages = osd_page_alloc(2);
+ vmbus_connection.monitor_pages =
+ (void *)__get_free_pages((GFP_KERNEL|__GFP_ZERO), 1);
if (vmbus_connection.monitor_pages == NULL) {
ret = -1;
goto Cleanup;
destroy_workqueue(vmbus_connection.work_queue);
if (vmbus_connection.int_page) {
- osd_page_free(vmbus_connection.int_page, 1);
+ free_pages((unsigned long)vmbus_connection.int_page, 0);
vmbus_connection.int_page = NULL;
}
if (vmbus_connection.monitor_pages) {
- osd_page_free(vmbus_connection.monitor_pages, 2);
+ free_pages((unsigned long)vmbus_connection.monitor_pages, 1);
vmbus_connection.monitor_pages = NULL;
}
if (ret != 0)
goto Cleanup;
- osd_page_free(vmbus_connection.int_page, 1);
+ free_pages((unsigned long)vmbus_connection.int_page, 0);
+ free_pages((unsigned long)vmbus_connection.monitor_pages, 1);
/* TODO: iterate thru the msg list and free up */
destroy_workqueue(vmbus_connection.work_queue);
* Allocate the hypercall page memory
* virtaddr = osd_page_alloc(1);
*/
- virtaddr = osd_virtual_alloc_exec(PAGE_SIZE);
+#ifdef __x86_64__
+ virtaddr = __vmalloc(PAGE_SIZE, GFP_KERNEL, PAGE_KERNEL_EXEC);
+#else
+ virtaddr = __vmalloc(PAGE_SIZE, GFP_KERNEL,
+ __pgprot(__PAGE_KERNEL & (~_PAGE_NX)));
+#endif
if (!virtaddr) {
DPRINT_ERR(VMBUS,
Cleanup:
if (hv_context.synic_event_page[cpu])
- osd_page_free(hv_context.synic_event_page[cpu], 1);
+ free_page((unsigned long)hv_context.synic_event_page[cpu]);
if (hv_context.synic_message_page[cpu])
- osd_page_free(hv_context.synic_message_page[cpu], 1);
+ free_page((unsigned long)hv_context.synic_message_page[cpu]);
return;
}
wrmsrl(HV_X64_MSR_SIEFP, siefp.as_uint64);
- osd_page_free(hv_context.synic_message_page[cpu], 1);
- osd_page_free(hv_context.synic_event_page[cpu], 1);
+ free_page((unsigned long)hv_context.synic_message_page[cpu]);
+ free_page((unsigned long)hv_context.synic_event_page[cpu]);
}
/* ASSERT((netDevice->ReceiveBufferSize & (PAGE_SIZE - 1)) == 0); */
net_device->recv_buf =
- osd_page_alloc(net_device->recv_buf_size >> PAGE_SHIFT);
+ (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
+ get_order(net_device->recv_buf_size));
if (!net_device->recv_buf) {
DPRINT_ERR(NETVSC,
"unable to allocate receive buffer of size %d",
/* ASSERT((netDevice->SendBufferSize & (PAGE_SIZE - 1)) == 0); */
net_device->send_buf =
- osd_page_alloc(net_device->send_buf_size >> PAGE_SHIFT);
+ (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
+ get_order(net_device->send_buf_size));
if (!net_device->send_buf) {
DPRINT_ERR(NETVSC, "unable to allocate send buffer of size %d",
net_device->send_buf_size);
DPRINT_INFO(NETVSC, "Freeing up receive buffer...");
/* Free up the receive buffer */
- osd_page_free(net_device->recv_buf,
- net_device->recv_buf_size >> PAGE_SHIFT);
+ free_pages((unsigned long)net_device->recv_buf,
+ get_order(net_device->recv_buf_size));
net_device->recv_buf = NULL;
}
DPRINT_INFO(NETVSC, "Freeing up send buffer...");
/* Free up the receive buffer */
- osd_page_free(net_device->send_buf,
- net_device->send_buf_size >> PAGE_SHIFT);
+ free_pages((unsigned long)net_device->send_buf,
+ get_order(net_device->send_buf_size));
net_device->send_buf = NULL;
}