----- Original Message ----- > On Thu, Mar 21, 2013 at 11:04:16AM -0400, Dave Anderson wrote: > > > > > > ----- Original Message ----- > > > > > After your fix, the module could show module address now. > > > However I don't know whether this showing is correct or not... > > > For while I want to check the module's defined global variant like > > > below, I just find it is not being mapped yet... > > > But this variant definition is very straightforward, like: > > > int cctdev_major = 0; > > > > > > > > > crash> sym cctdev_major > > > bf16564d (B) cctdev_major > > > crash> vtop -k bf16564d > > > VIRTUAL PHYSICAL > > > bf16564d (not mapped) > > > > > > PAGE DIRECTORY: c0004000 > > > PGD: c0006fc4 => 1f3cdc11 > > > PMD: c0006fc4 => 1f3cdc11 > > > PTE: 1f3cd594 => 0 > > > > > > I don't know what is going wrong there, and I am planning to manually > > > print out symbols' address before trigger the dump, and to see > > > whether they could be aligned. > > > > > > Do you have some better idea how to fix it?... > > > > No, not really, I'm not an ARM guy... > > > > But it's possible/probable that the "vtop" translation on kernel module > > virtual (vmalloc) addresses may not be working correctly. I also noted > > yesterday that "vtop" on user-space virtual addresses fails pretty miserably > > most of the time. Both arm_kvtop() and arm_uvtop() both end up calling the > > common arm_vtop() function, so I'm guessing that it's the culprit. > > AFAICT, arm_uvtop() should do the translation depending whether the address > falls to the kernel virtual address or userspace. There's a check: > > if (is_kernel_thread(tc->task) && IS_KVADDR(uvaddr)) > > and I believe that IS_KVADDR() is enough here as it checks both the module and > kernel virtual memory limits. > > I asked Luc whether he could provide his last file set to me as well. > Hope they will shed some light into this. > > Dave, If for some reason you can't get them, I can make them available to you. And Lei Wen can also give you a sample dumpfile from his environment. > Are you able to access module symbols on ARM dump (the one that Luc provided)? > Or is it failing completely? I *think* so... This module text disassembly looks right: crash> dis usbnet_suspend 0xbf000ae8 <usbnet_suspend>: push {r3, r4, r5, lr} 0xbf000aec <usbnet_suspend+4>: add r0, r0, #32 0xbf000af0 <usbnet_suspend+8>: mov r5, r1 0xbf000af4 <usbnet_suspend+12>: bl 0xc01b8264 <dev_get_drvdata> 0xbf000af8 <usbnet_suspend+16>: ldrb r3, [r0, #36] ; 0x24 0xbf000afc <usbnet_suspend+20>: mov r4, r0 0xbf000b00 <usbnet_suspend+24>: add r2, r3, #1 0xbf000b04 <usbnet_suspend+28>: cmp r3, #0 0xbf000b08 <usbnet_suspend+32>: strb r2, [r0, #36] ; 0x24 0xbf000b0c <usbnet_suspend+36>: bne 0xbf000bdc <usbnet_suspend+244> 0xbf000b10 <usbnet_suspend+40>: mrs r3, CPSR 0xbf000b14 <usbnet_suspend+44>: orr r3, r3, #128 ; 0x80 0xbf000b18 <usbnet_suspend+48>: msr CPSR_c, r3 0xbf000b1c <usbnet_suspend+52>: mov r0, #1 0xbf000b20 <usbnet_suspend+56>: bl 0xc0015f40 <add_preempt_count> 0xbf000b24 <usbnet_suspend+60>: ldr r3, [r4, #200] ; 0xc8 0xbf000b28 <usbnet_suspend+64>: cmp r3, #0 0xbf000b2c <usbnet_suspend+68>: beq 0xbf000b70 <usbnet_suspend+136> 0xbf000b30 <usbnet_suspend+72>: tst r5, #1024 ; 0x400 0xbf000b34 <usbnet_suspend+76>: beq 0xbf000b70 <usbnet_suspend+136> 0xbf000b38 <usbnet_suspend+80>: mrs r3, CPSR ... This (r) data looks OK: crash> p smsc95xx_netdev_ops smsc95xx_netdev_ops = $8 = { ndo_init = 0, ndo_uninit = 0, ndo_open = 0xbf000514 <usbnet_open>, ndo_stop = 0xbf000bec <usbnet_stop>, ndo_start_xmit = 0xbf001a60 <usbnet_start_xmit>, ndo_select_queue = 0, ndo_change_rx_flags = 0, ndo_set_rx_mode = 0, ndo_set_multicast_list = 0xbf008abc <smsc95xx_set_multicast>, ndo_set_mac_address = 0xc025d854 <eth_mac_addr>, ndo_validate_addr = 0xc025d6f8 <eth_validate_addr>, ndo_do_ioctl = 0xbf00926c <smsc95xx_ioctl>, ndo_set_config = 0, ndo_change_mtu = 0xbf000de0 <usbnet_change_mtu>, ndo_neigh_setup = 0, ndo_tx_timeout = 0xbf000d4c <usbnet_tx_timeout>, ndo_get_stats64 = 0, ndo_get_stats = 0, ndo_vlan_rx_add_vid = 0, ndo_vlan_rx_kill_vid = 0, ndo_set_vf_mac = 0, ndo_set_vf_vlan = 0, ndo_set_vf_tx_rate = 0, ndo_get_vf_config = 0, ndo_set_vf_port = 0, ndo_get_vf_port = 0, ndo_setup_tc = 0, ndo_add_slave = 0, ndo_del_slave = 0, ndo_fix_features = 0, crash> But the user-space vtop is clearly wrong: crash> vm PID: 1495 TASK: c1ef1380 CPU: 0 COMMAND: "bash" MM PGD RSS TOTAL_VM c30cd1e0 c1de4000 1484k 2940k VMA START END FLAGS FILE c1e9ae90 8000 c2000 8001875 /bin/bash c1e9aee8 c9000 ce000 8101877 /bin/bash c1e9af40 ce000 d3000 100077 c2fc27b0 1247000 1268000 100077 c2fc2650 4001c000 4001d000 100077 c1e9af98 40038000 40055000 8000875 /lib/ld-linux.so.3 c2fc20d0 4005c000 4005d000 8100875 /lib/ld-linux.so.3 c2fc2758 4005d000 4005e000 8100877 /lib/ld-linux.so.3 ... crash> vtop 8000 VIRTUAL PHYSICAL 8000 8000 PAGE DIRECTORY: c1de4000 PGD: c1de4000 => 412 PMD: c1de4000 => 412 PAGE: 0 (1MB) VMA START END FLAGS FILE c1e9ae90 8000 c2000 8001875 /bin/bash crash> vtop 4005d000 VIRTUAL PHYSICAL 4005d000 4005d000 PAGE DIRECTORY: c1de4000 PGD: c1de5000 => 40000412 PMD: c1de5000 => 40000412 PAGE: 40000000 (1MB) VMA START END FLAGS FILE c2fc2758 4005d000 4005e000 8100877 /lib/ld-linux.so.3 crash> Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility