]> xenbits.xensource.com Git - people/ssmith/netchannel2-pvops.git/commitdiff
Update grant table interface for cset 53481eed0801 of
authorSteven Smith <ssmith@weybridge.uk.xensource.com>
Wed, 22 Apr 2009 13:06:31 +0000 (14:06 +0100)
committerSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 19 May 2009 14:04:18 +0000 (15:04 +0100)
xen-unstable.hg.

arch/x86/xen/grant-table.c
drivers/xen/grant-table.c
include/xen/grant_table.h
include/xen/interface/grant_table.h

index db42957a5dacf0352f47e0d38faa326f76f84a85..38fce06f6ea503171c9fb1048328cf3cb33d7f2a 100644 (file)
@@ -54,6 +54,16 @@ static int map_pte_fn(pte_t *pte, struct page *pmd_page,
        return 0;
 }
 
+static int map_pte_fn_status(pte_t *pte, struct page *pmd_page,
+                            unsigned long addr, void *data)
+{
+       uint64_t **frames = (uint64_t **)data;
+
+       set_pte_at(&init_mm, addr, pte, mfn_pte((*frames)[0], PAGE_KERNEL));
+       (*frames)++;
+       return 0;
+}
+
 static int unmap_pte_fn(pte_t *pte, struct page *pmd_page,
                        unsigned long addr, void *data)
 {
@@ -82,6 +92,27 @@ int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_frames,
        return rc;
 }
 
+int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_frames,
+                          unsigned long max_nr_frames, void **__shared)
+
+{
+       int rc;
+       void *shared = *__shared;
+
+       if (shared == NULL) {
+               struct vm_struct *area =
+                       xen_alloc_vm_area(PAGE_SIZE * max_nr_frames);
+               BUG_ON(area == NULL);
+               shared = area->addr;
+               *__shared = shared;
+       }
+
+       rc = apply_to_page_range(&init_mm, (unsigned long)shared,
+                                PAGE_SIZE * nr_frames,
+                                map_pte_fn_status, &frames);
+       return rc;
+}
+
 void arch_gnttab_unmap_shared(void *shared, unsigned long nr_frames)
 {
        apply_to_page_range(&init_mm, (unsigned long)shared,
index 08edcaeb4875f22d4105e69256307c5cfb7abb79..df09c339debd8b685d61708aafa4c8bfae78b0a6 100644 (file)
@@ -580,7 +580,7 @@ static int gnttab_map(unsigned int start_idx, unsigned int end_idx)
        struct gnttab_setup_table setup;
        struct gnttab_get_status_frames getframes;
        unsigned long *frames;
-       unsigned long *sframes;
+       uint64_t *sframes;
        unsigned int nr_gframes = end_idx + 1;
        unsigned int nr_sframes = nr_status_frames(nr_gframes);
        int rc;
@@ -608,13 +608,13 @@ static int gnttab_map(unsigned int start_idx, unsigned int end_idx)
        if (grant_table_version > 1) {
                getframes.dom        = DOMID_SELF;
                getframes.nr_frames  = nr_sframes;
-               set_xen_guest_handle(getframes.frame_list, sframes);
+               getframes.frame_list = (unsigned long)sframes;
 
                rc = HYPERVISOR_grant_table_op(GNTTABOP_get_status_frames,
                                               &getframes, 1);
                BUG_ON(rc || getframes.status);
 
-               rc = arch_gnttab_map_shared(sframes, nr_sframes,
+               rc = arch_gnttab_map_status(sframes, nr_sframes,
                                            max_nr_grant_status_frames(),
                                            (void **)&grstatus);
                BUG_ON(rc);
index 95871f019c09de997f732da3055d89805fe6f750..fcdf0f0a2be5094b74b364d9fdc261fcf586c579 100644 (file)
@@ -163,6 +163,8 @@ gnttab_set_unmap_op(struct gnttab_unmap_grant_ref *unmap, unsigned long addr,
 
 int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_frames,
                           unsigned long max_nr_frames, void **__shared);
+int arch_gnttab_map_status(uint64_t *frames, unsigned long nr_frames,
+                          unsigned long max_nr_frames, void **__shared);
 void arch_gnttab_unmap_shared(void *shared, unsigned long nr_frames);
 
 #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr))
index c0f3e42706edfc29d3d0212fd89218d4905ef214..c41b9a7335fef5338b29567a6a0efa038bf1be55 100644 (file)
@@ -444,11 +444,11 @@ DEFINE_GUEST_HANDLE_STRUCT(gnttab_set_version);
 #define GNTTABOP_get_status_frames     9
 struct gnttab_get_status_frames {
     /* IN parameters. */
-    domid_t  dom;
     uint32_t nr_frames;
+    domid_t  dom;
     /* OUT parameters. */
     int16_t  status;              /* GNTST_* */
-    GUEST_HANDLE(ulong) frame_list;
+    uint64_t frame_list;
 };
 DEFINE_GUEST_HANDLE_STRUCT(gnttab_get_status_frames);