WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Sharing grant_table pages between 2 miniOS

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Sharing grant_table pages between 2 miniOS
From: "Lamia M. Youseff" <lyouseff@xxxxxxxxxxx>
Date: Mon, 14 May 2007 20:34:58 -0700
Delivery-date: Mon, 14 May 2007 20:33:21 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 1.5.0.10 (X11/20070221)
Dear All,
I am doing a small experiment with grant table to share 4 pages of memory between 2 miniOS, but have not been successful. For some reason, my GNTTABOP_map_grant_ref returns -1, and the 2 miniOS does not see the same machine address. I have attached here the code for the two threads i created for DomA and DomB respectively, as well as their output. Please, suggest what i should change here. I will appreciate too if you can point me to a pointer that explains grant tables with some example code.
Thank you for your reply in advance,
-- Lamia Youseff

/******************************************************************************
* kernel.c -  mini-Os-grnt-garntee (Dom A. domid = 30)
*******************************************************************************/

void UCSB_grantee_thread(void *p)
{

grant_ref_t gref[1]; // each grant_ref_t should provide me with 4k of shared memory
 void **map;
 char mystring[30]="Welcome to Shared Memory.\n";
 unsigned long mfn;

 *map = (void *) alloc_pages(2);
 memcpy(*map, mystring, 30);

 // get the machine physical address of the domain
 mfn = virt_to_mfn(*map);

 // now, share the page with remote domain (say dom 31)
 gref[0] = gnttab_grant_access(   31, //domid
                  mfn, // the page to be shared
                  0 ); // i.e. 0 == rw. 1 == ro.

 printk("My machine address is %u\n", virt_to_mach(*map));
 printk("My grant_ref_t is %d.\n",  (unsigned int) gref[0]);

 // now sleep till the other domain access the page
 for (;;){
   sleep(1000);
 }
 return;
}


/******************************************************************************
* kernel.c -- mini-Os-grnt-garnted (i.e. DomB, domid = 31)
* ****************************************************************************/
void UCSB_granted_thread(void *p)
{
 unsigned long vm_area;
 int error_val;

 gnttab_map_grant_ref_t aop[1];
 grant_handle_t ghandle[1];
 int i;

 grant_ref_t gref[1];
 gref[0] = 8;

 vm_area = (unsigned long) alloc_pages(4);

 aop[0].host_addr      = vm_area;
 aop[0].dom              =  30;  // domAid;
 aop[0].ref                =  gref[0];
 aop[0].flags             =  ( GNTMAP_host_map | GNTMAP_readonly );

 error_val = HYPERVISOR_grant_table_op( GNTTABOP_map_grant_ref, aop, 1);

 printk("My machine address is %u\n", virt_to_mach(vm_area));
printk("Error in granting_op in (HYPERVISOR_grant_table_o). Error %d....%d\n", aop[0].status, error_val);
 printk("Error ==> %s\n", gnttabop_error(aop[0].status));

 if (aop[0].status != GNTST_okay){
   printk("Error in the return status for GNTTAB_entry %d\n", i);
   return;
 }
if ( unlikely(aop[0].handle < 0) ){
   printk("Error in aop[0].handle\n");
   return;
 }
 else ghandle[0]= aop[0].handle;

 printk("My string is %s\n", (char *) vm_area);

 return ;
}

/**************************************************
*  Output from DomA
**************************************************/
Started domain Mini-OS-grantee
Xen Minimal OS!
start_info:   0001f000
 nr_pages:   8192  shared_inf: 001af000
 pt_base:    00022000  mod_start:  0x0
 mod_len:    0
 flags:      0x0
 stack:      000140e0-000160e0
MM: Init
 _text:        00000000
 _etext:       0000b19a
 _edata:       0000c7a0
 stack start:  000140e0
 _end:         00016534
 start_pfn:    2a
 max_pfn:      2000
Mapping memory range 0x400000 - 0x2000000
MM: Initialise page allocator for 38000(38000)-2000000(2000000)
MM: done
Demand map pfns start at 2200 (02200000).
Initialised demand area.
Initialising timer interface
Initialising console ... done.
gnttab_table mapped at 02200000.
Initialising scheduler
Thread "Idle": pointer: 0x3a00c, stack: 0x3c000
Initialising xenbus
Thread "xenstore": pointer: 0x3a03c, stack: 0x3e000
Dummy main: start_info=000160e0
Thread "xenbus_tester": pointer: 0x3a06c, stack: 0x40000
Thread "UCSB_grantee_thread": pointer: 0x3a09c, stack: 0x42000
Xenbus tests disabled, because of a Xend bug.
Thread "xenbus_tester" exited.
My machine address is 979255296
My grant_ref_t is 8.


/**************************************************
*  Output from DomB
**************************************************/
Started domain Mini-OS-granted
Xen Minimal OS!
start_info:   0001f000
 nr_pages:   8192  shared_inf: 001a9000
 pt_base:    00022000  mod_start:  0x0
 mod_len:    0
 flags:      0x0
cmd_line: stack: 00014180-00016180
MM: Init
 _text:        00000000
 _etext:       0000b1ce
 _edata:       0000c840
 stack start:  00014180
 _end:         000165d4
 start_pfn:    2a
 max_pfn:      2000
Mapping memory range 0x400000 - 0x2000000
MM: Initialise page allocator for 38000(38000)-2000000(2000000)
MM: done
Demand map pfns start at 2200 (02200000).
Initialised demand area.
Initialising timer interface
Initialising console ... done.
gnttab_table mapped at 02200000.
Initialising scheduler
Thread "Idle": pointer: 0x3a00c, stack: 0x3c000
Initialising xenbus
Thread "xenstore": pointer: 0x3a03c, stack: 0x3e000
Dummy main: start_info=00016180
Thread "xenbus_tester": pointer: 0x3a06c, stack: 0x40000
Thread "UCSB_granted_thread": pointer: 0x3a09c, stack: 0x42000
Xenbus tests disabled, because of a Xend bug.
Thread "xenbus_tester" exited.
My machine address is 200548352
Error in granting_op in (HYPERVISOR_grant_table_o). Error 0....-1
Error ==> okay
My string is
My string is
Thread "UCSB_granted_thread" exited.

[$$]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0                                   0   256     1     r-----   1120.0
Mini-OS-granted                           31    32     1     -b----      0.0
Mini-OS-grantee                           30    32     1     -b----      0.0




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>