RE: [Xen-devel] Re: Oops when loading xen_platform_pci module in HVMdoma
"Yu, Ke" <ke.yu@xxxxxxxxx> wrote on 09/07/2006 08:09:43 PM:
> Steve Dobbelstein wrote:
> > steved@xxxxxxxxxx wrote on 09/05/2006 07:56:00 PM:
> > Digging into this further I found that the problem is that they
> > hypercall mechanism its trying to execute the instructions for the
> > hypercall which reside in the hypercall stubs page. However, the
> > page table entry for the page has the _PAGE_NX (no execute) bit set.
> > (I'm running a 64-bit OS with PAE in the HVM domain.) The error code
> > in the oops (0x11) indicates that the page fault is because of the
> > _PAGE_NX bit. 0x01 -> access rights violation 0x10 -> The fault was
> > caused by an instruction fetch.
> > I tried hacking some code to turn off the NX bit in the PTE for the
> > hypercall stubs page, but I still get the oops. I'm thinking it's
> > because the NX bit is set in the PMD.
> > I'm quite new to the paging mechanism, so I'm not sure how to fix
> > this at the moment. I'll keep poking around. thought I'd share my
> > findings so far.
> > Steve D.
> I also meet this opps in IA32 Non-PAE guest . Since it has no NX bit
> in IA32, there may be other issue. Hope this info is helpful.
> Best Regards
> Xen version 3.0.
> Hypercall area is 1 pages (order 0 allocation)
> Unable to handle kernel paging request at virtual address 1dd9c27c
> printing eip:
> *pde = 00000000
> Oops: 0002 [#1]
> Modules linked in: xen_platform_pci
> CPU: 0
> EIP: 0060:[<cdd9e00c>] Not tainted VLI
> EFLAGS: 00010202 (2.6.16 #3)
> EIP is at 0xcdd9e00c
> eax: 1dd9c27c ebx: 00000006 ecx: cdcffe04 edx: 00000000
> esi: 00000001 edi: cdcffe08 ebp: 00000006 esp: cdcffdf4
> ds: 007b es: 007b ss: 0068
> Process insmod (pid: 3778, threadinfo=cdcfe000 task=cfc16530)
> Stack: <0>0000007b d0809f53 d080a7af cdd9c000 00000000 00000000
> 00000000 00000007
> 00000000 f3000000 0000c100 d081100e 566e6558 65584d4d
> 4d4d566e cfeb0900
> cfeb0800 cfeb0800 f3000000 cfeb0800 d0809667 c0454b00
> 0000c100 00000100
> Call Trace:
> [<d0809f53>] setup_xen_features+0x43/0x90 [xen_platform_pci]
> [<d081100e>] init_xen_info+0xe/0xa0 [xen_platform_pci]
> [<d0809667>] platform_pci_init+0xf7/0x250 [xen_platform_pci]
> [<c012a900>] __call_usermodehelper+0x0/0x70
> [<c022caea>] pci_match_device+0x2a/0x120
> [<c022cc65>] __pci_device_probe+0x65/0x80
> [<c022ccaf>] pci_device_probe+0x2f/0x60
> [<c02940e9>] driver_probe_device+0x99/0xf0
> [<c02941c0>] __driver_attach+0x0/0x70
> [<c0294227>] __driver_attach+0x67/0x70
> [<c029347d>] bus_for_each_dev+0x5d/0x80
> [<c0294255>] driver_attach+0x25/0x30
> [<c02941c0>] __driver_attach+0x0/0x70
> [<c0293a84>] bus_add_driver+0x84/0xe0
> [<c0294783>] driver_register+0x63/0xa0
> [<c0294700>] klist_devices_get+0x0/0x10
> [<c0294710>] klist_devices_put+0x0/0x10
> [<c022cf65>] __pci_register_driver+0x55/0x90
> [<d08110b9>] platform_pci_module_init+0x19/0x50 [xen_platform_pci]
> [<c0136cc2>] sys_init_module+0x132/0x200
> [<c0103115>] syscall_call+0x7/0xb
> Code: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 00 00 00 00 00 00 00 00 00 00 f8 04 14 46 05 00 00 00 50 06 14 46
> <00> 00 00 00 50 06 14 46 00 00 00 00 00 00 00 00 00 00 00 00 00
Thanks for the tip. Your page fault appears to be after the hypercall. On
my system the hypercall is at setup_xen_features+40. Your page fault is at
setup_xen_features+0x43. I'm running on a 64-bit OS, so I would expect my
code for setup_xen_features to be a little larger than the 32-bit version.
That would mean the hypercall on the 32-bit version would be at or before
offset 0x40. So I thing yours is page faulting after the hypercall.
Also, the error code in your oops indicates the fault was caused by a write
to a non-present page while in supervisor mode. That's different from the
execution fault that I am seeing.
I'll be aware that once I fix the fault on the hypercall that I might run
into another page fault soon thereafter.
Xen-devel mailing list