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

Re: [Xen-devel] Question: How to map granted pages into domU properly?

To: abc <abc@xxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] Question: How to map granted pages into domU properly?
From: Asim <linkasim@xxxxxxxxx>
Date: Thu, 4 Sep 2008 10:35:36 -0500
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Thu, 04 Sep 2008 08:35:58 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=xGhsstm20BSZKb99TvIeh9xbu9VJ+m/AIf7p3Rm1lUA=; b=qPn3+0pRqn9sNG/rytcGfhz1ZnVogMc9T9fyhyhinSDSePOKxHhPrTatpI98sKVj/N ZpdniCcvQnKqNVPCuqZFrgif6ZS2+5ed96zkAGl4HMZlyIJFutFlhDyXT2pKQBuehq7s icqbfJ+yn/lqDH4VpXq5BwCuDfkHN1c5UWAxU=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=ET9tmeJTc5e1klUiZrV3miengmi+Oxf9ZEcLesn846xuGGpbo2ke8IvaoBgv2yIFyu avXX46jR66JQEW0/Ls1I+r+Qs/OyYEtwyaRT8Xg9efRLEuX3FLnXJq9KktvWjtjlyBQA NmA6d/d+XdPp7/Jo97WIvLAR1ioEQe6ygLVyA=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <48BFFA42.2020303@xxxxxxxxxxxxxx>
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>
References: <48BFFA42.2020303@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
I don't know the correct process to map pages but here is a guess :-

Did you check the permissions of the page and if domU has permissions
to read them?  From mm.h  this is the permissions legend.

28000001: L2 page, pinned
58000001: GDT page, pinned
e0000000: writable page, not pinned

You want your permissions to be e0000000. If no then one of the ways
to change permissions is:
  pgprot_val(vma->vm_page_prot) |= (_PAGE_DIRTY | _PAGE_VALID);

 You can also see mm.c in the xen source directory (xen-.3.3*/../../)
for better understanding of this process.

Regards,
Asim



On 9/4/08, abc <abc@xxxxxxxxxxxxxx> wrote:
> 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
>

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

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