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] Question: How to map granted pages into domU properly?

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Question: How to map granted pages into domU properly?
From: abc <abc@xxxxxxxxxxxxxx>
Date: Thu, 04 Sep 2008 17:09:54 +0200
Delivery-date: Thu, 04 Sep 2008 08:10:21 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.16 (X11/20080707)
Hi,

I'm writing a diploma-thesis based on paravirtualized XEN v3.2.1 and openSuSE 11.0 (32bit PAE). The idea of my thesis is to use XEN as a research platform for on-die message passing interface hardware. Therefore several domUs should communicate via a configurable kernel-module over shared-memory.

Currently I encountered a problem in granting kernel-pages from dom0 to domUs. The pages can be mapped successfully. But when the kernel-module in domU, tries to read the content of this page, a kernel oops occurs.

Can you explain me how to grant pages and how to map them into domUs properly?




These are my sources (shortened):


Dom0 -----------------------------------------------

static inline unsigned long vaddr2pfn(void *vaddr) {

 struct page* Page = vmalloc_to_page(vaddr);
 unsigned long PFN = page_to_pfn(Page);

 return PFN;
}

 unsigned int ForeignDomainID = 12; // <-- Hard coded
 unsigned long Page = get_zeroed_page(0);
 unsigned long PFN = vaddr2pfn( (void *) Page);
 unsigned long MFN = virt_to_phys( (void *) PFN);
grant_ref = gnttab_grant_foreign_access( ForeignDomainID, MFN, 0 );

----------------------------------------------------

grant_ref then is magically being transported to domU..

DomU (domID=12) ------------------------------------

 struct vm_struct *Area = alloc_vm_area(PAGE_SIZE);
 struct gnttab_map_grant_ref operation;
gnttab_set_map_op(&operation, (unsigned long) Area->addr, GNTMAP_host_map | GNTMAP_application_map, grant_ref, 0);
 HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &operation, 1);
 // print content of operation to syslog..

 Unsigned long* Dword = (Unsigned long*) Area->addr;
unsigned long Content = *Dword // <-- BUG: unable to handle kernel paging request at d928a000

----------------------------------------------------

Dom0 - /var/log/messages ---------------------------

Sep  4 16:43:19 mpibench1 kernel: sm_communicator: instanciating in dom0
Sep 4 16:43:19 mpibench1 kernel: sm_communicator: granting memory to guest #12 Sep 4 16:43:19 mpibench1 kernel: sm_communicator: granted page @0xe0738000 (mfn=0x40020738) to domain #12
Sep  4 16:43:19 mpibench1 kernel: sm_communicator: grant_refs[1]==21 (0x15)

----------------------------------------------------

DomU - /var/log/messages ---------------------------

Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: instanciating in domU Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: mapping page #21 from domain #0 Sep 4 16:43:37 mpibench_guest2 kernel: klogd 1.4.1, ---------- state change ---------- Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: new area={next=0xd7671760, addr=0xd928a000, size=0x2000, flags=0x1, pages=0x0, nr_pages=0, phys_addr=0x0} Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &Operation, 1); Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: struct gnttab_map_grant_ref Operation = {: Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: /* IN parameters. */ Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: uint64_t host_addr=0x00000000d928a000; Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: uint32_t flags=2=GNTMAP_host_map; Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: grant_ref_t ref=21;
Sep  4 16:43:37 mpibench_guest2 kernel: sm_communicator:   domid_t  dom=0;
Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: /* OUT parameters. */ Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: int16_t status=0; Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: grant_handle_t handle=0; Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: uint64_t dev_bus_addr=0x0000040020738000;
Sep  4 16:43:37 mpibench_guest2 kernel: sm_communicator:}
Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: successfully mapped page @0xd928a000 (handle=0, phys=0x0000040020738000) Sep 4 16:43:37 mpibench_guest2 kernel: sm_communicator: GrantedPage @0xd928a000 Sep 4 16:43:37 mpibench_guest2 kernel: BUG: unable to handle kernel paging request at d928a000 Sep 4 16:43:37 mpibench_guest2 kernel: IP: [<d9460896>] :sm_communicator:m_init+0x1e1/0x210 Sep 4 16:43:37 mpibench_guest2 kernel: *pdpt = 0000000002794001 *pde = 0000000002861067 *pte = 0000040020738863
Sep  4 16:43:37 mpibench_guest2 kernel: Oops: 0009 [#1] SMP
Sep 4 16:43:37 mpibench_guest2 kernel: last sysfs file: /sys/devices/xen/vif-0/net/eth0/type Sep 4 16:43:37 mpibench_guest2 kernel: Modules linked in: sm_communicator(+) nfs lockd nfs_acl sunrpc iptable_filter ip_tables ip6table_filter ip6_tables x_tables ipv6 af_packet 8250 serial_core loop dm_mod joydev reiserfs xenblk xennet
Sep  4 16:43:37 mpibench_guest2 kernel:
Sep 4 16:43:38 mpibench_guest2 kernel: Pid: 2383, comm: insmod Tainted: G N (2.6.25.5-1.1-xen #1) Sep 4 16:43:38 mpibench_guest2 kernel: EIP: 0061:[<d9460896>] EFLAGS: 00010246 CPU: 0 Sep 4 16:43:38 mpibench_guest2 kernel: EIP is at m_init+0x1e1/0x210 [sm_communicator] Sep 4 16:43:38 mpibench_guest2 kernel: EAX: 0000002c EBX: 00000000 ECX: f5636000 EDX: f5636000 Sep 4 16:43:38 mpibench_guest2 kernel: ESI: d928a000 EDI: d9463a20 EBP: d6d49e88 ESP: d6d49e64 Sep 4 16:43:38 mpibench_guest2 kernel: DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0069 Sep 4 16:43:38 mpibench_guest2 kernel: Process insmod (pid: 2383, ti=d6d48000 task=d750c160 task.ti=d6d48000) Sep 4 16:43:38 mpibench_guest2 kernel: Stack: d9461590 d928a000 d7532900 00000001 00000025 d6d49e88 d7532900 00000001 Sep 4 16:43:38 mpibench_guest2 kernel: 00000025 d6d49fb0 c013be4d 00000024 000003e8 00000064 d6e27c00 0000e793 Sep 4 16:43:38 mpibench_guest2 kernel: 0000001f d6d49f88 d7957718 00000000 d9462800 00000000 00000000 00000000
Sep  4 16:43:38 mpibench_guest2 kernel: Call Trace:
Sep 4 16:43:38 mpibench_guest2 kernel: [<c013be4d>] sys_init_module+0x1989/0x1ab6
Sep  4 16:43:38 mpibench_guest2 kernel:  [<c0103f5a>] syscall_call+0x7/0xb
Sep  4 16:43:38 mpibench_guest2 kernel:  [<f57fe416>] 0xf57fe416
Sep  4 16:43:38 mpibench_guest2 kernel:  =======================
Sep 4 16:43:38 mpibench_guest2 kernel: Code: ff eb 4a 8b 04 9f ba 00 00 00 00 e8 7e fc ff ff 89 c6 a1 98 39 46 d9 85 c0 78 32 89 74 24 04 c7 04 24 90 15 46 d9 e8 66 a2 e7 e6 <8b> 06 89 44 24 04 c7 04 24 b8 15 46 d9 e8 54 a2 e7 e6 83 c3 01 Sep 4 16:43:38 mpibench_guest2 kernel: EIP: [<d9460896>] m_init+0x1e1/0x210 [sm_communicator] SS:ESP 0069:d6d49e64
Sep  4 16:43:38 mpibench_guest2 kernel: ---[ end trace fc6d563289120224 ]---

------------------------------------------



Any help on this would be appreciated. I'm working on this for a while now and being currently stucked at this point.


Regards,

Gregor Rebel
Candidate Diplom Informatiker


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

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