[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Xen domU vs. more than 652 MiB of RAM
From: |
Thomas Schwinge |
Subject: |
Re: Xen domU vs. more than 652 MiB of RAM |
Date: |
Thu, 1 Oct 2009 17:59:22 +0200 |
User-agent: |
Mutt/1.5.11 |
Hello!
On Thu, Oct 01, 2009 at 05:25:17PM +0200, Samuel Thibault wrote:
> Thomas Schwinge, le Thu 01 Oct 2009 17:00:43 +0200, a écrit :
> > > Attached is a patch I've found in my xen checkout, I can't remember
> > > whether it works.
> >
> > Unfortunately not. I rebooted blubber with a kernel containing this
> > patch; see the attached log file.
>
> Please also see xm dmesg, where the precise IP where the kernel crashed
> should be (maybe only with debug options), and then you can addr2line
> it.
Unfortunately I don't have the time at the moment to dive into this
issue, but here is all the data. If you have ideas what to try and it
doesn't take too much time, then I can try. Or, as I said, you can log
into the machine.
(XEN) Unhandled page fault in domain 203 on VCPU 0 (ec=0000)
(XEN) Pagetable walk from 00003000:
(XEN) L3[0x000] = 000000005a1d0001 000001dd
(XEN) L2[0x000] = 0000000000000000 ffffffff
(XEN) domain_crash_sync called from entry.S (ff1888be)
(XEN) Domain 203 (vcpu#0) crashed on cpu#0:
(XEN) ----[ Xen-3.2-1 x86_32p debug=n Not tainted ]----
(XEN) CPU: 0
(XEN) EIP: e019:[<2000a0af>]
(XEN) EFLAGS: 00000207 CONTEXT: guest
(XEN) eax: 00000600 ebx: c01e4000 ecx: 00000200 edx: 00000000
(XEN) esi: 00003000 edi: 201e4000 ebp: 200837a4 esp: 2008372c
(XEN) cr0: 8005003b cr4: 000006f0 cr3: 5a1d1000 cr2: 00003000
(XEN) ds: e021 es: e021 fs: e021 gs: e021 ss: e021 cs: e019
(XEN) Guest stack trace from esp=2008372c:
(XEN) 00000000 2000a0af 0001e019 00010007 0000000a 00000000 00000000
00000000
(XEN) 20065546 2008376c 200837d4 200245b6 0000000a 00000000 00003000
00000000
(XEN) 201dd000 00000000 00000000 00000000 00000000 00000000 200837a4
200050f1
(XEN) 200837a0 00000000 fffffff9 00000200 00007ff0 001e4000 20083824
2000b949
(XEN) 201e4000 00000000 200837d4 200398eb 0000000a 201e4000 30303030
0001080a
(XEN) 00000000 201dd000 200837f4 20024e20 20065518 20083800 200398c0
00000010
(XEN) 00000000 dff7c7b9 20083804 20024e48 20065518 20083818 20083824
200051ea
(XEN) 20065518 00000000 0de00000 0001080a 00007ff0 20083854 20083884
20005320
(XEN) 00000000 00000000 00000000 00000000 00000000 38303032 30343131
00000000
(XEN) 201d9454 2007ed94 20083874 20024e20 200699a5 20083880 200398c0
00000010
(XEN) 00000000 2007ed94 20083884 0001080a 0000000f 2007ed94 200838a4
20005707
(XEN) 200699a5 20084000 00000474 00000000 001d9000 00000000 00000000
20000016
(XEN) 001d9000 00000000 3e400000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
(XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
tschwinge@zenhost:~/tmp/gnumach/gnumach-xen.build $ addr2line -i -f -e
gnumach 0x2000a0af
pmap_set_page_readonly_init
/home/tschwinge/tmp/gnumach/gnumach-xen.build/../gnumach-xen/i386/intel/pmap.c:812
798 /* This needs to be called instead of pmap_set_page_readonly as
long as RC3
799 * still points to the bootstrap dirbase. */
800 void pmap_set_page_readonly_init(void *_vaddr) {
801 vm_offset_t vaddr = (vm_offset_t) _vaddr;
802 #if PAE
803 pt_entry_t *pdpbase = (void*) boot_info.pt_base;
804 vm_offset_t dirbase = ptetokv(pdpbase[0]);
805 #else
806 vm_offset_t dirbase = boot_info.pt_base;
807 #endif
808 struct pmap linear_pmap = {
809 .dirbase = (void*) dirbase,
810 };
811 /* Modify our future kernel map (can't use
update_va_mapping for this)... */
812 if (*pmap_pde(kernel_pmap, vaddr) & INTEL_PTE_VALID)
813 if (!hyp_mmu_update_la (kvtolin(vaddr),
pa_to_pte (kv_to_ma(vaddr)) | INTEL_PTE_VALID))
814 panic("couldn't set hiMMU readonly for
vaddr %p(%p)\n", vaddr, kv_to_ma (vaddr));
815 /* ... and the bootstrap map. */
816 if (*pmap_pde(&linear_pmap, vaddr) & INTEL_PTE_VALID)
817 if (hyp_do_update_va_mapping (vaddr, pa_to_pte
(kv_to_ma(vaddr)) | INTEL_PTE_VALID, UVMF_NONE))
818 panic("couldn't set MMU readonly for
vaddr %p(%p)\n", vaddr, kv_to_ma (vaddr));
819 }
/* This needs to be called instead of pmap_set_page_readonly as long as RC3
* still points to the bootstrap dirbase. */
void pmap_set_page_readonly_init(void *_vaddr) {
2000a050: 55 push %ebp
2000a051: 89 e5 mov %esp,%ebp
2000a053: 57 push %edi
2000a054: 56 push %esi
2000a055: 53 push %ebx
2000a056: 83 ec 5c sub $0x5c,%esp
#else
vm_offset_t dirbase = boot_info.pt_base;
#endif
struct pmap linear_pmap = {
.dirbase = (void*) dirbase,
};
2000a059: a1 7c e9 07 20 mov 0x2007e97c,%eax
2000a05e: 8b 15 00 e0 06 20 mov 0x2006e000,%edx
}
}
/* This needs to be called instead of pmap_set_page_readonly as long as RC3
* still points to the bootstrap dirbase. */
void pmap_set_page_readonly_init(void *_vaddr) {
2000a064: 8b 7d 08 mov 0x8(%ebp),%edi
#else
vm_offset_t dirbase = boot_info.pt_base;
#endif
struct pmap linear_pmap = {
.dirbase = (void*) dirbase,
};
2000a067: 8b 00 mov (%eax),%eax
2000a069: c1 e8 0c shr $0xc,%eax
2000a06c: 8b 04 82 mov (%edx,%eax,4),%eax
2000a06f: 8d 55 c8 lea -0x38(%ebp),%edx
2000a072: 89 55 ac mov %edx,-0x54(%ebp)
2000a075: 31 d2 xor %edx,%edx
2000a077: c1 e0 0c shl $0xc,%eax
2000a07a: 05 00 00 00 20 add $0x20000000,%eax
2000a07f: c7 44 15 c8 00 00 00 movl $0x0,-0x38(%ebp,%edx,1)
2000a086: 00
2000a087: 83 c2 04 add $0x4,%edx
2000a08a: 83 fa 18 cmp $0x18,%edx
2000a08d: 72 f0 jb 2000a07f
<pmap_set_page_readonly_init+0x2f>
static inline pt_entry_t *
pmap_pde(pmap_t pmap, vm_offset_t addr)
{
if (pmap == kernel_pmap)
addr = kvtolin(addr);
2000a08f: 8d 9f 00 00 00 a0 lea -0x60000000(%edi),%ebx
#endif
struct pmap linear_pmap = {
.dirbase = (void*) dirbase,
};
/* Modify our future kernel map (can't use update_va_mapping for
this)... */
if (*pmap_pde(kernel_pmap, vaddr) & INTEL_PTE_VALID)
2000a095: 8b 15 0c f8 07 20 mov 0x2007f80c,%edx
#else
vm_offset_t dirbase = boot_info.pt_base;
#endif
struct pmap linear_pmap = {
.dirbase = (void*) dirbase,
};
2000a09b: 89 45 c8 mov %eax,-0x38(%ebp)
static inline pt_entry_t *
pmap_pde(pmap_t pmap, vm_offset_t addr)
{
if (pmap == kernel_pmap)
addr = kvtolin(addr);
return &pmap->dirbase[lin2pdenum(addr)];
2000a09e: 89 d8 mov %ebx,%eax
2000a0a0: c1 e8 15 shr $0x15,%eax
2000a0a3: 8d 34 c5 00 00 00 00 lea 0x0(,%eax,8),%esi
2000a0aa: 89 75 c0 mov %esi,-0x40(%ebp)
#endif
struct pmap linear_pmap = {
.dirbase = (void*) dirbase,
};
/* Modify our future kernel map (can't use update_va_mapping for
this)... */
if (*pmap_pde(kernel_pmap, vaddr) & INTEL_PTE_VALID)
2000a0ad: 8b 12 mov (%edx),%edx
2000a0af: 8b 0c c2 mov (%edx,%eax,8),%ecx
2000a0b2: f6 c1 01 test $0x1,%cl
2000a0b5: 75 61 jne 2000a118
<pmap_set_page_readonly_init+0xc8>
#endif /* NCPUS > 1 */
static inline pt_entry_t *
pmap_pde(pmap_t pmap, vm_offset_t addr)
{
if (pmap == kernel_pmap)
2000a0b7: 8b 75 ac mov -0x54(%ebp),%esi
2000a0ba: 39 35 0c f8 07 20 cmp %esi,0x2007f80c
2000a0c0: 74 0b je 2000a0cd
<pmap_set_page_readonly_init+0x7d>
2000a0c2: 89 f8 mov %edi,%eax
2000a0c4: c1 e8 15 shr $0x15,%eax
2000a0c7: c1 e0 03 shl $0x3,%eax
2000a0ca: 89 45 c0 mov %eax,-0x40(%ebp)
/* Modify our future kernel map (can't use update_va_mapping for
this)... */
if (*pmap_pde(kernel_pmap, vaddr) & INTEL_PTE_VALID)
if (!hyp_mmu_update_la (kvtolin(vaddr), pa_to_pte
(kv_to_ma(vaddr)) | INTEL_PTE_VALID))
panic("couldn't set hiMMU readonly for vaddr
%p(%p)\n", vaddr, kv_to_ma (vaddr));
/* ... and the bootstrap map. */
if (*pmap_pde(&linear_pmap, vaddr) & INTEL_PTE_VALID)
2000a0cd: 8b 45 c8 mov -0x38(%ebp),%eax
2000a0d0: 8b 55 c0 mov -0x40(%ebp),%edx
2000a0d3: f6 04 10 01 testb $0x1,(%eax,%edx,1)
2000a0d7: 74 37 je 2000a110
<pmap_set_page_readonly_init+0xc0>
if (hyp_do_update_va_mapping (vaddr, pa_to_pte
(kv_to_ma(vaddr)) | INTEL_PTE_VALID, UVMF_NONE))
2000a0d9: 8d 87 00 00 00 e0 lea -0x20000000(%edi),%eax
reservation.domid = DOMID_SELF;
if (hyp_memory_op(XENMEM_decrease_reservation,
kvtolin(&reservation)) != 1)
panic("couldn't free page %d\n", mfn);
}
_hypcall4(int, update_va_mapping, unsigned long, va, unsigned long, val_lo,
unsigned long, val_hi, unsigned long, flags);
2000a0df: 31 d2 xor %edx,%edx
2000a0e1: 89 c6 mov %eax,%esi
2000a0e3: 25 ff 0f 00 00 and $0xfff,%eax
2000a0e8: 89 45 b8 mov %eax,-0x48(%ebp)
2000a0eb: a1 54 e7 07 20 mov 0x2007e754,%eax
2000a0f0: c1 ee 0c shr $0xc,%esi
2000a0f3: 89 75 a8 mov %esi,-0x58(%ebp)
2000a0f6: 89 fb mov %edi,%ebx
2000a0f8: 8b 0c b0 mov (%eax,%esi,4),%ecx
2000a0fb: 89 d6 mov %edx,%esi
2000a0fd: c1 e1 0c shl $0xc,%ecx
2000a100: 83 c9 01 or $0x1,%ecx
2000a103: e8 b8 80 ff ff call 200021c0
<__hyp_update_va_mapping>
2000a108: 85 c0 test %eax,%eax
2000a10a: 0f 85 a3 00 00 00 jne 2000a1b3
<pmap_set_page_readonly_init+0x163>
panic("couldn't set MMU readonly for vaddr
%p(%p)\n", vaddr, kv_to_ma (vaddr));
}
2000a110: 83 c4 5c add $0x5c,%esp
2000a113: 5b pop %ebx
2000a114: 5e pop %esi
2000a115: 5f pop %edi
2000a116: 5d pop %ebp
2000a117: c3 ret
struct pmap linear_pmap = {
.dirbase = (void*) dirbase,
};
/* Modify our future kernel map (can't use update_va_mapping for
this)... */
if (*pmap_pde(kernel_pmap, vaddr) & INTEL_PTE_VALID)
if (!hyp_mmu_update_la (kvtolin(vaddr), pa_to_pte
(kv_to_ma(vaddr)) | INTEL_PTE_VALID))
2000a118: 8d 87 00 00 00 e0 lea -0x20000000(%edi),%eax
{
struct mmu_update update =
{
.ptr = pte,
.val = val,
};
2000a11e: 81 e1 00 f0 ff ff and $0xfffff000,%ecx
2000a124: 89 c2 mov %eax,%edx
2000a126: 25 ff 0f 00 00 and $0xfff,%eax
2000a12b: 89 45 b4 mov %eax,-0x4c(%ebp)
2000a12e: a1 54 e7 07 20 mov 0x2007e754,%eax
2000a133: c1 eb 09 shr $0x9,%ebx
2000a136: c1 ea 0c shr $0xc,%edx
2000a139: 81 e3 f8 0f 00 00 and $0xff8,%ebx
2000a13f: 89 55 b0 mov %edx,-0x50(%ebp)
* kvtolin when giving pointers as parameters for the hypercall to read data
* at. Use kv_to_la when they may be used before GDT got set up. */
_hypcall1(long, set_trap_table, vm_offset_t /* struct trap_info * */,
traps);
_hypcall4(int, mmu_update, vm_offset_t /* struct mmu_update * */, req, int,
count, vm_offset_t /* int * */, success_count, domid_t, domid)
2000a142: be f0 7f 00 00 mov $0x7ff0,%esi
2000a147: 8b 14 90 mov (%eax,%edx,4),%edx
{
struct mmu_update update =
{
.ptr = pte,
.val = val,
};
2000a14a: 8d 04 19 lea (%ecx,%ebx,1),%eax
* kvtolin when giving pointers as parameters for the hypercall to read data
* at. Use kv_to_la when they may be used before GDT got set up. */
_hypcall1(long, set_trap_table, vm_offset_t /* struct trap_info * */,
traps);
_hypcall4(int, mmu_update, vm_offset_t /* struct mmu_update * */, req, int,
count, vm_offset_t /* int * */, success_count, domid_t, domid)
2000a14d: b9 01 00 00 00 mov $0x1,%ecx
Regards,
Thomas
signature.asc
Description: Digital signature
- Xen domU vs. more than 652 MiB of RAM, Thomas Schwinge, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Samuel Thibault, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Thomas Schwinge, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Samuel Thibault, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Thomas Schwinge, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Samuel Thibault, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Thomas Schwinge, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Samuel Thibault, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM, Samuel Thibault, 2009/10/01
- Re: Xen domU vs. more than 652 MiB of RAM,
Thomas Schwinge <=
- Re: Xen domU vs. more than 652 MiB of RAM, Samuel Thibault, 2009/10/13
- Re: Xen domU vs. more than 652 MiB of RAM, Thomas Schwinge, 2009/10/14