Staging: hv: Use native page allocation/free functions
authorK. Y. Srinivasan <kys@microsoft.com>
Fri, 11 Feb 2011 17:59:00 +0000 (09:59 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Feb 2011 21:11:03 +0000 (13:11 -0800)
In preperation for getting rid of the osd.[ch] files;
change all page allocation/free functions to use native interfaces.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/channel.c
drivers/staging/hv/connection.c
drivers/staging/hv/hv.c
drivers/staging/hv/netvsc.c

index ba9afdabedc1c8d68db54ff4f958cdad4e5e83f7..6c292e69e991acf07f5eed338181a7bef6ada3c7 100644 (file)
@@ -180,8 +180,9 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
        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;
 
@@ -300,8 +301,8 @@ Cleanup:
 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;
 }
@@ -686,7 +687,8 @@ void vmbus_close(struct vmbus_channel *channel)
        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);
 
index b3ac66e5499fa262c3b39a31b1904f38f7c09098..ed0976aad6f033ecec9a869e9a3a21ec7680a2e5 100644 (file)
@@ -66,7 +66,8 @@ int vmbus_connect(void)
         * 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;
@@ -81,7 +82,8 @@ 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 = 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;
@@ -162,12 +164,12 @@ 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;
        }
 
@@ -203,7 +205,8 @@ int vmbus_disconnect(void)
        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);
index 021acbaae247d241d1732b6fa6265b197ef48144..419b4d6aef637fa5b475ffd8dfa9298b46a92add 100644 (file)
@@ -230,7 +230,12 @@ int hv_init(void)
        * 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,
@@ -462,10 +467,10 @@ void hv_synic_init(void *irqarg)
 
 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;
 }
 
@@ -502,6 +507,6 @@ void hv_synic_cleanup(void *arg)
 
        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]);
 }
index 431936338731f06cee25a19faf74cdc8460121ac..a271aa790c9372d02e5d0999728b0f26538e97a9 100644 (file)
@@ -223,7 +223,8 @@ static int netvsc_init_recv_buf(struct hv_device *device)
        /* 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",
@@ -360,7 +361,8 @@ static int netvsc_init_send_buf(struct hv_device *device)
        /* 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);
@@ -498,8 +500,8 @@ static int netvsc_destroy_recv_buf(struct netvsc_device *net_device)
                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;
        }
 
@@ -574,8 +576,8 @@ static int netvsc_destroy_send_buf(struct netvsc_device *net_device)
                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;
        }