]> xenbits.xensource.com Git - xen.git/commitdiff
libxc: match types of 'subject' and 'foreigndom' between struct xc_mmu and do_mmu_update
authorDario Faggioli <dario.faggioli@citrix.com>
Thu, 24 Jan 2013 12:47:57 +0000 (12:47 +0000)
committerDario Faggioli <dario.faggioli@citrix.com>
Thu, 24 Jan 2013 12:47:57 +0000 (12:47 +0000)
In do_mmu_update() (in the hypervisor) the parameter 'foreigndom' is
'unsigned int' and both its high (bits 31-16) and low (bits 15-0) are
parts utilised, as explained here:
 http://xenbits.xen.org/docs/unstable/hypercall/include,public,xen.h.html#Func_HYPERVISOR_mmu_update

However, the actual parameter, i.e., the 'subject' field in
struct xc_mmu is declared as domid_t, which typedef-s to uint16_t.
This means we are never able to pass anything via the higher 16 bits
of 'foreigndom', which in turns may cause the hypercall to fail when
called on an actual foreign domain.

Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
tools/libxc/xc_private.c
tools/libxc/xc_private.h

index 3e03a91fba8e6f6e307cdeb25877dc4c7fd450c6..c0b73a620d20ad14a45b836225fcce62754a4eb1 100644 (file)
@@ -478,13 +478,13 @@ static int flush_mmu_updates(xc_interface *xch, struct xc_mmu *mmu)
     return err;
 }
 
-struct xc_mmu *xc_alloc_mmu_updates(xc_interface *xch, domid_t dom)
+struct xc_mmu *xc_alloc_mmu_updates(xc_interface *xch, unsigned int subject)
 {
     struct xc_mmu *mmu = malloc(sizeof(*mmu));
     if ( mmu == NULL )
         return mmu;
     mmu->idx     = 0;
-    mmu->subject = dom;
+    mmu->subject = subject;
     return mmu;
 }
 
index 7b83ef316a43146c3ee017cd751e4592e67bfc22..92271c9b47d2ccfb5a8767d71106253dd750e48c 100644 (file)
@@ -308,10 +308,10 @@ void discard_file_cache(xc_interface *xch, int fd, int flush);
 struct xc_mmu {
     mmu_update_t updates[MAX_MMU_UPDATES];
     int          idx;
-    domid_t      subject;
+    unsigned int subject;
 };
 /* Structure returned by xc_alloc_mmu_updates must be free()'ed by caller. */
-struct xc_mmu *xc_alloc_mmu_updates(xc_interface *xch, domid_t dom);
+struct xc_mmu *xc_alloc_mmu_updates(xc_interface *xch, unsigned int subject);
 int xc_add_mmu_update(xc_interface *xch, struct xc_mmu *mmu,
                    unsigned long long ptr, unsigned long long val);
 int xc_flush_mmu_updates(xc_interface *xch, struct xc_mmu *mmu);