qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [questions] host panic happened when kvm guest access the m


From: Zhang Haoyu
Subject: [Qemu-devel] [questions] host panic happened when kvm guest access the memory which was provided by host remap_pfn_range page to qemu
Date: Wed, 16 Apr 2014 15:55:41 +0800

Hi, all
 
I provide host's memory to guest by remap_pfn_range host page to qemu, and when guest access the page, host paniced.
 
host code:
static int my_mmap(struct file *filep, struct vm_area_struct *vma)
{
    int ret;
    unsigned long page;
 
    if (vma->vm_end < vma->vm_start)
        return -EINVAL;
 
    page = __get_free_page(GFP_KERNEL);
    if (!page)
        return -ENOMEM;
 
    ret = remap_pfn_range(vma, vma->vm_start, page >> PAGE_SHIFT, PAGE_SIZE, vma->vm_page_prot);
    return ret;
}
 
qemu code:
#define PC_SHMEM_PHY_ADDR 0xfeff8000
MemoryRegion *my_shmem_region = NULL;
static void pc_share_memory_init(MemoryRegion *system_memory)
{
    int fd;
    void *ptr;
 
    fd = open("/dev/g2h", O_RDWR);
    if (fd < 0)
        return;
 
    ptr = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, fd, 0);
    if(!ptr) {
        close(fd);
        return;
    }
 
    my_shmem_region = g_malloc(sizeof(*my_shmem_region));
    memory_region_init_ram_ptr(my_shmem_region, "share.ram", PAGE_SIZE, ptr);
    vmstate_register_ram_global(my_shmem_region);
    memory_region_add_subregion(system_memory, PC_SHMEM_PHY_ADDR, my_shmem_region);
 
    e820_add_entry(PC_SHMEM_PHY_ADDR, PAGE_SIZE, E820_RESERVED);
    return;
}
 
guest:
mapping the PC_SHMEM_PHY_ADDR, when access it, host paniced, [cut here] shown as below,
 
[    0.892825] ------------[ cut here ]------------
[    0.892850] kernel BUG at arch/x86/kvm/../../../virt/kvm/kvm_main.c:1346!
[    0.892876] invalid opcode: 0000 [#1] SMP
[    0.892934] Modules linked in: tun g2h_main(O) nfsv4 fuse nfsd auth_rpcgss nfs_acl nfs lockd dns_resolver fscache sunrpc xt_tcpudp nf_conntrack_ipv4 nf_defrag_ipv4
[    0.894519] CPU 0
[    0.894541] Pid: 21808, comm: kvm Tainted: G           O 3.9.7 #25 Gigabyte Technology Co., Ltd. To be filled by O.E.M./B75M-D3V
[    0.894590] RIP: 0010:[<ffffffffa097d06e>]  [<ffffffffa097d06e>] __gfn_to_pfn_memslot+0x2e6/0x355 [kvm]
[    0.894660] RSP: 0018:ffff8803a54dbb38  EFLAGS: 00010246
[    0.894693] RAX: 0000000000000000 RBX: 00007f37902be000 RCX: ffff88041e5dd000
[    0.894728] RDX: ffffea0000000000 RSI: 0000000000000046 RDI: ffffea0000000000
[    0.894763] RBP: 00000000000fef00 R08: 0000000000000002 R09: 0000000000000000
[    0.894798] R10: 0000000000000000 R11: 0000000000000000 R12: ffff8803a54dbc4b
[    0.894833] R13: ffff8803a55ebac8 R14: 0000000000000000 R15: ffff8803a56b8301
[    0.894868] FS:  00007f3784534700(0000) GS:ffff88041e200000(0000) knlGS:0000000000000000
[    0.894913] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    0.894956] CR2: 0000000001c4fc1c CR3: 00000003ab076000 CR4: 00000000001427e0
[    0.895000] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[    0.895035] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[    0.895070] Process kvm (pid: 21808, threadinfo ffff8803a54da000, task ffff8803ca961000)
[    0.895114] Stack:
[    0.895143]  ffff8803a54dbbb8 0000000000000001 ffff8803a54dbbb7 00ffffff00000000
[    0.895256]  ffff8803a5588000 ffffffffa097d11d 000000000003fe37 ffff8803a5588000
[    0.895374]  00000000000feff8 0000000000000000 00000000feff8000 ffff8803a54dbc50
[    0.895487] Call Trace:
[    0.895522]  [<ffffffffa097d11d>] ? __gfn_to_pfn+0x2b/0x50 [kvm]
[    0.895565]  [<ffffffffa09927ee>] ? try_async_pf+0x38/0x1a1 [kvm]
[    0.895603]  [<ffffffffa097cd4d>] ? kvm_host_page_size+0x73/0x7b [kvm]
[    0.895643]  [<ffffffffa099752e>] ? tdp_page_fault+0xf1/0x1ee [kvm]
[    0.895682]  [<ffffffffa0993aee>] ? kvm_mmu_page_fault+0x1e/0xbb [kvm]
[    0.895719]  [<ffffffffa0a17cb9>] ? vmx_handle_exit+0x730/0x776 [kvm_intel]
[    0.895756]  [<ffffffff8149c09c>] ? _raw_spin_unlock_irqrestore+0xc/0xd
[    0.895792]  [<ffffffff813d15b5>] ? skb_dequeue+0x50/0x58
[    0.895827]  [<ffffffff81048aaf>] ? recalc_sigpending+0x12/0x41
[    0.895863]  [<ffffffffa0a16d28>] ? vmx_vcpu_run+0x38a/0x464 [kvm_intel]
[    0.895902]  [<ffffffffa099fc19>] ? apic_update_ppr+0x15/0x74 [kvm]
[    0.895941]  [<ffffffffa09a5a29>] ? e1000_check_irq_ignore+0xfa/0x129 [kvm]
[    0.895981]  [<ffffffffa0990174>] ? kvm_arch_vcpu_ioctl_run+0xb3e/0xec5 [kvm]
[    0.896021]  [<ffffffffa098b737>] ? kvm_arch_vcpu_load+0xc1/0x18c [kvm]
[    0.896058]  [<ffffffffa097c0d3>] ? kvm_vcpu_ioctl+0x118/0x462 [kvm]
[    0.896094]  [<ffffffff8110e9a6>] ? vfs_ioctl+0x1e/0x31
[    0.896128]  [<ffffffff8110f17d>] ? do_vfs_ioctl+0x3ae/0x3f0
[    0.896163]  [<ffffffff81100d48>] ? vfs_read+0x93/0xf5
[    0.896196]  [<ffffffff81101f69>] ? fput+0xf/0xac
[    0.896229]  [<ffffffff8110f20c>] ? sys_ioctl+0x4d/0x7d
[    0.896263]  [<ffffffff814a23e9>] ? system_call_fastpath+0x16/0x1b
[    0.896296] Code: 8a 9b a0 31 c0 e8 92 79 b1 e0 49 8b b5 98 00 00 00 48 c7 c7 e2 8a 9b a0 31 c0 e8 7d 79 b1 e0 4c 89 f7 e8 05 ed ff ff 84 c0 75 1e <0f> 0b 45 84 ff
[    0.897491] RIP  [<ffffffffa097d06e>] __gfn_to_pfn_memslot+0x2e6/0x355 [kvm]
[    0.897545]  RSP <ffff8803a54dbb38>
 
Any ideas?
 
Thanks,
Zhang Haoyu

reply via email to

[Prev in Thread] Current Thread [Next in Thread]