Closed e-ago closed 4 years ago
I'm not sure I follow. What would the expected output of the script be in this case?
The output would be:
$ cat Module.symvers | egrep nvidia_p2p
0xadf40bc1 nvidia_p2p_free_dma_mapping /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x1c254be6 nvidia_p2p_get_pages /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x5d649138 nvidia_p2p_register_rsync_driver /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x95397da4 nvidia_p2p_dma_map_pages /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0xb73bde45 nvidia_p2p_init_mapping /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x9718676b nvidia_p2p_unregister_rsync_driver /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x4c9ba34e nvidia_p2p_destroy_mapping /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x7e399228 nvidia_p2p_put_pages /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0xd186c986 nvidia_p2p_get_rsync_registers /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x43c5682e nvidia_p2p_dma_unmap_pages /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x5868c8aa nvidia_p2p_free_page_table /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
0x51395286 nvidia_p2p_put_rsync_registers /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia (unknown)
Sorry. I don't follow. Where do the different addresses come from? And why are those 32 bit addresses?
@tzafrir-mellanox I'm sorry, let me rephrase that. With the latest commit the script is no more using the CRC checksum of nvidia.ko exported symbols.
$ nm -a /lib/modules/4.4.0-141-generic/kernel/drivers/video/nvidia.ko | egrep p2p
000000004c9ba34e A __crc_nvidia_p2p_destroy_mapping
0000000095397da4 A __crc_nvidia_p2p_dma_map_pages
0000000043c5682e A __crc_nvidia_p2p_dma_unmap_pages
00000000adf40bc1 A __crc_nvidia_p2p_free_dma_mapping
000000005868c8aa A __crc_nvidia_p2p_free_page_table
000000001c254be6 A __crc_nvidia_p2p_get_pages
00000000d186c986 A __crc_nvidia_p2p_get_rsync_registers
00000000b73bde45 A __crc_nvidia_p2p_init_mapping
000000007e399228 A __crc_nvidia_p2p_put_pages
0000000051395286 A __crc_nvidia_p2p_put_rsync_registers
000000005d649138 A __crc_nvidia_p2p_register_rsync_driver
000000009718676b A __crc_nvidia_p2p_unregister_rsync_driver
...
0000000000009c80 T nvidia_p2p_destroy_mapping
0000000000009f20 T nvidia_p2p_dma_map_pages
0000000000009b60 T nvidia_p2p_dma_unmap_pages
0000000000009160 T nvidia_p2p_free_dma_mapping
0000000000009c70 T nvidia_p2p_free_page_table
0000000000009470 T nvidia_p2p_get_pages
0000000000009930 T nvidia_p2p_get_rsync_registers
0000000000009df0 T nvidia_p2p_init_mapping
00000000000002d8 D nvidia_p2p_page_cache_name
00000000000004c0 r nvidia_p2p_page_size_mappings
0000000000000850 B nvidia_p2p_page_t_cache
0000000000009d20 T nvidia_p2p_put_pages
00000000000098c0 T nvidia_p2p_put_rsync_registers
0000000000009860 T nvidia_p2p_register_rsync_driver
0000000000009be0 T nvidia_p2p_unregister_rsync_driver
Disclaimer: I don't know much about this code. I know how to write scripts.
On Ubuntu 18.04 and on Ubuntu 19.10 the new version is needed. On RHEL 7.4 and on Ubuntu 16.04 it breaks.
Specifically the following fixes the issue for the "older" systems:
-modules_pat="crc_nvidiap2p|T nvidiap2p" +modules_pat="crc_nvidiap2p"
Therefore the problem seems to be indeed with the newly-added nvidiap2p* symbols and not with any bug in the script.
So I can fix the script to only provide the non-crc symbols if there are no crc symbols. It should work for both platforms. But I really don't understand why.
A fix along those lines: https://github.com/Mellanox/nv_peer_memory/pull/60
fixed by #60 closing
This change https://github.com/Mellanox/nv_peer_memory/commit/25774c3f8e1b9306672de48042d9d132d19383d9#diff-bdbe24543d2311a2bc6b64a3d102fc31L90 returns the wrong symbols' version:
And:
The result is:
The fix is to revert the commit with:
done < <(nm -o $nvidia_mod | grep "__crc_nvidia_p2p_")