Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aarch64 build fails #151

Closed
frezbo opened this issue May 13, 2022 · 16 comments
Closed

aarch64 build fails #151

frezbo opened this issue May 13, 2022 · 16 comments
Assignees
Labels
bug Something isn't working build-problem Implemented Fixed, in test prior to release integration
Milestone

Comments

@frezbo
Copy link

frezbo commented May 13, 2022

Describe the bug
aarch64 compilation fails

To Reproduce
Building using qemu aarch64 emulation

#0 812.3 In file included from ./include/linux/kernel.h:16,
#0 812.3                  from ./include/linux/list.h:9,
#0 812.3                  from ./include/linux/preempt.h:11,
#0 812.3                  from ./include/linux/spinlock.h:55,
#0 812.3                  from /tmp/build/0/kernel-open/common/inc/nv-lock.h:29,
#0 812.3                  from /tmp/build/0/kernel-open/common/inc/nv-linux.h:32,
#0 812.3                  from /tmp/build/0/kernel-open/nvidia/nv-vm.c:26:
#0 812.3 /tmp/build/0/kernel-open/nvidia/nv-vm.c: In function 'nv_get_max_sysmem_address':
#0 812.3 ./include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast
#0 812.3    20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
#0 812.3       |                                   ^~
#0 812.3 ./include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
#0 812.3    26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
#0 812.3       |                  ^~~~~~~~~~~
#0 812.3 ./include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
#0 812.3    36 |         __builtin_choose_expr(__safe_cmp(x, y), \
#0 812.3       |                               ^~~~~~~~~~
#0 812.3 ./include/linux/minmax.h:52:25: note: in expansion of macro '__careful_cmp'
#0 812.3    52 | #define max(x, y)       __careful_cmp(x, y, >)
#0 812.3       |                         ^~~~~~~~~~~~~
#0 812.3 /tmp/build/0/kernel-open/nvidia/nv-vm.c:225:26: note: in expansion of macro 'max'
#0 812.3   225 |         global_max_pfn = max(global_max_pfn, node_end_pfn(node_id));
#0 812.3       |                          ^~~
#0 813.0 /tmp/build/0/kernel-open/nvidia/nv-mmap.c: In function 'nv_encode_caching':
#0 813.0 /tmp/build/0/kernel-open/nvidia/nv-mmap.c:343:16: warning: this statement may fall through [-Wimplicit-fallthrough=]
#0 813.0   343 |             if (NV_ALLOW_CACHING(memory_type))
#0 813.0       |                ^
#0 813.0 /tmp/build/0/kernel-open/nvidia/nv-mmap.c:346:9: note: here
#0 813.0   346 |         default:
#0 813.0       |         ^~~~~~~
#0 813.8   CC [M]  /tmp/build/0/kernel-open/nvidia/os-pci.o
#0 814.9   CC [M]  /tmp/build/0/kernel-open/nvidia/os-registry.o
#0 816.0   CC [M]  /tmp/build/0/kernel-open/nvidia/os-usermap.o
#0 817.2   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-modeset-interface.o
#0 817.6   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-pci-table.o
#0 820.8   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-kthread-q.o
#0 821.9   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-memdbg.o
#0 822.2   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-ibmnpu.o
#0 824.0   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-report-err.o
#0 825.3   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-rsync.o
#0 828.1   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-msi.o
#0 831.0   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-caps.o
#0 834.4   CC [M]  /tmp/build/0/kernel-open/nvidia/nv-frontend.o
#0 836.0   CC [M]  /tmp/build/0/kernel-open/nvidia/nv_uvm_interface.o
#0 836.6   CC [M]  /tmp/build/0/kernel-open/nvidia/nvlink_linux.o
#0 838.9   CC [M]  /tmp/build/0/kernel-open/nvidia/nvlink_caps.o
#0 843.2   CC [M]  /tmp/build/0/kernel-open/nvidia/linux_nvswitch.o
#0 844.8   CC [M]  /tmp/build/0/kernel-open/nvidia/procfs_nvswitch.o
#0 845.3   CC [M]  /tmp/build/0/kernel-open/nvidia/i2c_nvswitch.o
#0 846.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_common.o
#0 851.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_linux.o
#0 854.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/nvstatus.o
#0 855.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/nvCpuUuid.o
#0 855.5   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/nv-kthread-q.o
#0 857.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/nv-kthread-q-selftest.o
#0 858.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm.o
#0 859.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_tools.o
#0 859.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_global.o
#0 860.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu.o
#0 865.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu_isr.o
#0 872.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_procfs.o
#0 874.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_va_space.o
#0 875.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_va_space_mm.o
#0 876.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu_semaphore.o
#0 877.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_mem.o
#0 879.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_rm_mem.o
#0 880.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_channel.o
#0 881.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_lock.o
#0 889.5   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_hal.o
#0 893.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_range_tree.o
#0 895.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_rb_tree.o
#0 899.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_range_allocator.o
#0 904.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_va_range.o
#0 906.5   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_va_policy.o
#0 907.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_va_block.o
#0 913.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_range_group.o
#0 915.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu_replayable_faults.o
#0 917.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu_non_replayable_faults.o
#0 920.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu_access_counters.o
#0 924.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_events.o
#0 926.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_module.o
#0 927.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_mmu.o
#0 929.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pte_batch.o
#0 930.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_tlb_batch.o
#0 931.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_push.o
#0 939.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pushbuffer.o
#0 939.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_thread_context.o
#0 940.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_tracker.o
#0 941.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_maxwell.o
#0 955.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_maxwell_host.o
#0 957.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_maxwell_ce.o
#0 958.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_maxwell_mmu.o
#0 960.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_maxwell_fault_buffer.o
#0 961.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_maxwell_access_counter_buffer.o
#0 962.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pascal.o
#0 964.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pascal_ce.o
#0 965.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pascal_host.o
#0 970.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pascal_mmu.o
#0 970.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pascal_fault_buffer.o
#0 971.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_volta_host.o
#0 974.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_volta_mmu.o
#0 977.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_volta.o
#0 978.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_volta_fault_buffer.o
#0 987.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_volta_access_counter_buffer.o
#0 989.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_turing.o
#0 990.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_turing_access_counter_buffer.o
#0 990.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_turing_fault_buffer.o
#0 991.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_turing_mmu.o
#0 992.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_turing_host.o
#0 993.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ampere.o
#0 996.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ampere_ce.o
#0 1000.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ampere_host.o
#0 1002.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ampere_mmu.o
#0 1003.5   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_policy.o
#0 1006.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_utils.o
#0 1007.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_kvmalloc.o
#0 1008.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pmm_sysmem.o
#0 1011.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pmm_gpu.o
#0 1018.5   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_migrate.o
#0 1018.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_populate_pageable.o
#0 1019.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_migrate_pageable.o
#0 1021.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_map_external.o
#0 1021.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_user_channel.o
#0 1022.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_hmm.o
#0 1024.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_heuristics.o
#0 1029.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_thrashing.o
#0 1034.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_prefetch.o
#0 1034.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ats.o
#0 1036.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ats_ibm.o
#0 1038.3 /tmp/build/0/kernel-open/nvidia-uvm/uvm_pmm_gpu.c: In function 'uvm_pmm_gpu_alloc_kernel':
#0 1038.3 /tmp/build/0/kernel-open/nvidia-uvm/uvm_pmm_gpu.c:645:16: warning: unused variable 'gpu' [-Wunused-variable]
#0 1038.3   645 |     uvm_gpu_t *gpu = uvm_pmm_to_gpu(pmm);
#0 1038.3       |                ^~~
#0 1043.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ats_faults.o
#0 1046.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_test.o
#0 1046.9   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_test_rng.o
#0 1048.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_range_tree_test.o
#0 1050.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_range_allocator_test.o
#0 1052.3   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_gpu_semaphore_test.o
#0 1054.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_hmm_sanity_test.o
#0 1057.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_mem_test.o
#0 1059.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_rm_mem_test.o
#0 1064.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_page_tree_test.o
#0 1065.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_tracker_test.o
#0 1066.5   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_push_test.o
#0 1068.6   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_channel_test.o
#0 1073.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_ce_test.o
#0 1076.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_host_test.o
#0 1080.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_lock_test.o
#0 1082.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_utils_test.o
#0 1083.1   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_kvmalloc_test.o
#0 1084.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pmm_test.o
#0 1087.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_pmm_sysmem_test.o
#0 1089.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_events_test.o
#0 1095.8   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_perf_module_test.o
#0 1100.9 /tmp/build/0/kernel-open/nvidia-uvm/uvm_test.c: In function 'uvm_test_ioctl':
#0 1100.9 /tmp/build/0/kernel-open/nvidia-uvm/uvm_test.c:337:1: warning: the frame size of 2192 bytes is larger than 2048 bytes [-Wframe-larger-than=]
#0 1100.9   337 | }
#0 1100.9       | ^
#0 1102.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_get_rm_ptes_test.o
#0 1103.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_fault_buffer_flush_test.o
#0 1110.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_peer_identity_mappings_test.o
#0 1111.2   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_va_block_test.o
#0 1112.7   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_range_group_tree_test.o
#0 1114.4   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_thread_context_test.o
#0 1115.0   CC [M]  /tmp/build/0/kernel-open/nvidia-uvm/uvm_rb_tree_test.o
#0 1116.9   CC [M]  /tmp/build/0/kernel-open/nvidia-modeset/nvidia-modeset-linux.o
#0 1117.7   CC [M]  /tmp/build/0/kernel-open/nvidia-modeset/nv-kthread-q.o
#0 1120.6   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm.o
#0 1126.7   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-drv.o
#0 1131.0   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-utils.o
#0 1135.3   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.o
#0 1136.4   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-encoder.o
#0 1140.5   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-connector.o
#0 1140.8   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-gem.o
#0 1141.9   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-fb.o
#0 1144.7   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-modeset.o
#0 1145.4   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-prime-fence.o
#0 1145.9   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-linux.o
#0 1147.7   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-helper.o
#0 1149.9   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nv-pci-table.o
#0 1153.7   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-gem-nvkms-memory.o
#0 1155.2   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-gem-user-memory.o
#0 1157.8   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-gem-dma-buf.o
#0 1159.1 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c: In function 'cursor_plane_req_config_update':
#0 1159.2 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c:88:32: warning: unused variable 'nv_drm_plane_state' [-Wunused-variable]
#0 1159.2    88 |     struct nv_drm_plane_state *nv_drm_plane_state =
#0 1159.2       |                                ^~~~~~~~~~~~~~~~~~
#0 1159.2 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c:87:27: warning: unused variable 'nv_dev' [-Wunused-variable]
#0 1159.2    87 |     struct nv_drm_device *nv_dev = to_nv_device(plane->dev);
#0 1159.2       |                           ^~~~~~
#0 1159.2 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c: In function 'plane_req_config_update':
#0 1159.2 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c:189:9: warning: unused variable 'ret' [-Wunused-variable]
#0 1159.2   189 |     int ret = 0;
#0 1159.2       |         ^~~
#0 1159.2 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c: In function 'nv_drm_plane_atomic_set_property':
#0 1159.2 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c:504:32: warning: unused variable 'nv_drm_plane_state' [-Wunused-variable]
#0 1159.2   504 |     struct nv_drm_plane_state *nv_drm_plane_state =
#0 1159.2       |                                ^~~~~~~~~~~~~~~~~~
#0 1159.4 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c: In function 'nv_drm_enumerate_crtcs_and_planes':
#0 1159.4 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-crtc.c:1148:13: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
#0 1159.4  1148 |             struct drm_plane *overlay_plane =
#0 1159.4       |             ^~~~~~
#0 1159.5   CC [M]  /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-format.o
#0 1165.7   CC [M]  /tmp/build/0/kernel-open/nvidia-peermem/nvidia-peermem.o
#0 1168.3 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-modeset.c: In function '__will_generate_flip_event':
#0 1168.3   LD [M]  /tmp/build/0/kernel-open/nvidia.o
#0 1168.3 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-modeset.c:98:10: warning: unused variable 'overlay_event' [-Wunused-variable]
#0 1168.3    98 |     bool overlay_event = false;
#0 1168.3       |          ^~~~~~~~~~~~~
#0 1168.3 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-modeset.c:97:10: warning: unused variable 'primary_event' [-Wunused-variable]
#0 1168.3    97 |     bool primary_event = false;
#0 1168.3       |          ^~~~~~~~~~~~~
#0 1168.3 /tmp/build/0/kernel-open/nvidia-drm/nvidia-drm-modeset.c:96:23: warning: unused variable 'primary_plane' [-Wunused-variable]
#0 1168.3    96 |     struct drm_plane *primary_plane = crtc->primary;
#0 1168.3       |                       ^~~~~~~~~~~~~
#0 1168.7 ld -r -o /tmp/build/0/kernel-open/nvidia/nv-interface.o /tmp/build/0/kernel-open/nvidia/nv.o /tmp/build/0/kernel-open/nvidia/nv-pci.o /tmp/build/0/kernel-open/nvidia/nv-dmabuf.o /tmp/build/0/kernel-open/nvidia/nv-acpi.o /tmp/build/0/kernel-open/nvidia/nv-cray.o /tmp/build/0/kernel-open/nvidia/nv-dma.o /tmp/build/0/kernel-open/nvidia/nv-i2c.o /tmp/build/0/kernel-open/nvidia/nv-mmap.o /tmp/build/0/kernel-open/nvidia/nv-p2p.o /tmp/build/0/kernel-open/nvidia/nv-pat.o /tmp/build/0/kernel-open/nvidia/nv-procfs.o /tmp/build/0/kernel-open/nvidia/nv-procfs-utils.o /tmp/build/0/kernel-open/nvidia/nv-usermap.o /tmp/build/0/kernel-open/nvidia/nv-vm.o /tmp/build/0/kernel-open/nvidia/nv-vtophys.o /tmp/build/0/kernel-open/nvidia/os-interface.o /tmp/build/0/kernel-open/nvidia/os-mlock.o /tmp/build/0/kernel-open/nvidia/os-pci.o /tmp/build/0/kernel-open/nvidia/os-registry.o /tmp/build/0/kernel-open/nvidia/os-usermap.o /tmp/build/0/kernel-open/nvidia/nv-modeset-interface.o /tmp/build/0/kernel-open/nvidia/nv-pci-table.o /tmp/build/0/kernel-open/nvidia/nv-kthread-q.o /tmp/build/0/kernel-open/nvidia/nv-memdbg.o /tmp/build/0/kernel-open/nvidia/nv-ibmnpu.o /tmp/build/0/kernel-open/nvidia/nv-report-err.o /tmp/build/0/kernel-open/nvidia/nv-rsync.o /tmp/build/0/kernel-open/nvidia/nv-msi.o /tmp/build/0/kernel-open/nvidia/nv-caps.o /tmp/build/0/kernel-open/nvidia/nv-frontend.o /tmp/build/0/kernel-open/nvidia/nv_uvm_interface.o /tmp/build/0/kernel-open/nvidia/nvlink_linux.o /tmp/build/0/kernel-open/nvidia/nvlink_caps.o /tmp/build/0/kernel-open/nvidia/linux_nvswitch.o /tmp/build/0/kernel-open/nvidia/procfs_nvswitch.o /tmp/build/0/kernel-open/nvidia/i2c_nvswitch.o
#0 1170.8 ld -r -o /tmp/build/0/kernel-open/nvidia-modeset/nv-modeset-interface.o /tmp/build/0/kernel-open/nvidia-modeset/nvidia-modeset-linux.o /tmp/build/0/kernel-open/nvidia-modeset/nv-kthread-q.o
#0 1170.9   LD [M]  /tmp/build/0/kernel-open/nvidia-modeset.o
#0 1173.7   LD [M]  /tmp/build/0/kernel-open/nvidia-uvm.o
#0 1178.1   LD [M]  /tmp/build/0/kernel-open/nvidia-drm.o
#0 1178.8   LD [M]  /tmp/build/0/kernel-open/nvidia-peermem.o
#0 1180.5   MODPOST /tmp/build/0/kernel-open/Module.symvers
#0 1181.2 ERROR: modpost: "__aarch64_ldadd4_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 ERROR: modpost: "__aarch64_ldclr4_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 ERROR: modpost: "__aarch64_cas4_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 ERROR: modpost: "__aarch64_ldset8_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 ERROR: modpost: "__aarch64_ldadd8_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 ERROR: modpost: "__aarch64_cas8_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 ERROR: modpost: "__aarch64_ldset4_acq_rel" [/tmp/build/0/kernel-open/nvidia.ko] undefined!
#0 1181.2 make[3]: *** [scripts/Makefile.modpost:134: /tmp/build/0/kernel-open/Module.symvers] Error 1
#0 1181.2 make[3]: *** Deleting file '/tmp/build/0/kernel-open/Module.symvers'
#0 1181.2 make[2]: *** [Makefile:1783: modules] Error 2
#0 1181.2 make[2]: Leaving directory '/src'
#0 1181.2 make[1]: *** [Makefile:82: modules] Error 2
#0 1181.2 make[1]: Leaving directory '/tmp/build/0/kernel-open'
#0 1181.2 make: *** [Makefile:50: modules] Error 2
@frezbo frezbo added the bug Something isn't working label May 13, 2022
@hramrach
Copy link

1830472 - undefined reference to `__aarch64_ldadd4_acq_rel
On aarch64 -moutline-atomics has been turned on by default, and those symbols are solely in libgcc.a,

Likely bad gcc flags or bad compiler. Can you build any non-trivial kernel modules in your build environment?

@frezbo
Copy link
Author

frezbo commented May 13, 2022

the proprietary version of the modules build fine in the same environment

@hramrach
Copy link

It does not build nearly as much code as this one.

Anyway, you can try to build with V=1 and see if there is any difference in the flags passed to the compiler.

@aritger
Copy link
Collaborator

aritger commented May 13, 2022

Note that rather than V=1, to enable verbose output for all of this build, add NV_VERBOSE=1 to the command line.

To debug unresolved symbol problems, I normally do something like this:

find . -name "*.o" | xargs nm -A | grep __aarch64_ldadd4_acq_rel

That will tell you which object files call the symbol and which object files define the symbol.

From a few google searches, I think the aarch64 build may need "-mno-outline-atomics" (some gcc configs apparently have -moutline-atomics enabled by default).

Does the following change fix the problem?


$ git diff
diff --git a/src/nvidia/Makefile b/src/nvidia/Makefile
index 9bdb826ad249..687c46c11b6c 100644
--- a/src/nvidia/Makefile
+++ b/src/nvidia/Makefile
@@ -67,6 +67,7 @@ ifeq ($(TARGET_ARCH),aarch64)
   CFLAGS += -mgeneral-regs-only
   CFLAGS += -march=armv8-a
   CFLAGS += -mstrict-align
+  CFLAGS += -mno-outline-atomics
 endif

 CFLAGS += -fno-pic


@aritger aritger self-assigned this May 13, 2022
@frezbo
Copy link
Author

frezbo commented May 13, 2022

@aritger the above patch fixes the build, thanks 👍

frezbo added a commit to frezbo/pkgs that referenced this issue May 13, 2022
Add NVIDIA open gpu kernel modules

Ref: https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/

Fix [arm64 build](NVIDIA/open-gpu-kernel-modules#151)

Signed-off-by: Noel Georgi <git@frezbo.dev>
@hramrach
Copy link

According to documentation of recent GCC -mno-outline-atomics is required if you are building for -march=armv8-a (without lse) and your environment does not have libgcc (which the kernel does not).

Building for -march=armv8-a+lse, -march=armv8.1-a, or any later architecture avoids the helpers for lse detection because the instructions are assumed to be available, and conversely -mno-outline-atomics generates pure armv8-a code without lse instructions.

The question is what's the desired outcome, how the architecture gets picked, and for what architecture nVidia builds the binary drivers.

Seeing the build output with the verbose flag would answer these questions. I can only guess that the build uses -march=native and builds for some arbitrary architecture that nVidia uses in-house while this emulated environment is armv8-a leading to gcc generating the compatibility helpers.

@woachk
Copy link

woachk commented May 14, 2022

Please condition the use of -mno-outline-atomics on availability though, to not break older OS releases.

GCC version wouldn’t be a nice heuristics because some distributions got it backported…

@frezbo
Copy link
Author

frezbo commented May 14, 2022

Attaching the full build log with V=1 and NV_VERBOSE=1 set

V=1.txt

NV_VERBOSE=1.txt

@hramrach
Copy link

Thanks, so either flag does equally good job at showing the compiler flags.

-march=armv8-a

is explicitly passed.

This flag is present in a few files in the project and you can amend it with eg.

sed -i -e s/-march=armv8-a/-march=armv8-a+lse/g */*/Makefile */Kbuild

nVidia is propbably using an older compiler that does not support these lse helpers and -moutline-atomics internally so adding -mno-outline-atomics unconditionally would fail.

Using -march=armv8-a+lse or -march=armv8.1-a might be easiest if all target systems support the newer instruction set and all target compilers support the architecture designation.

@pendragons-code
Copy link

Thanks, so either flag does equally good job at showing the compiler flags.

-march=armv8-a

is explicitly passed.

This flag is present in a few files in the project and you can amend it with eg.

sed -i -e s/-march=armv8-a/-march=armv8-a+lse/g */*/Makefile */Kbuild

nVidia is propbably using an older compiler that does not support these lse helpers and -moutline-atomics internally so adding -mno-outline-atomics unconditionally would fail.

Using -march=armv8-a+lse or -march=armv8.1-a might be easiest if all target systems support the newer instruction set and all target compilers support the architecture designation.

can confirm this seems accurate

@aritger
Copy link
Collaborator

aritger commented May 16, 2022

Thanks for the thorough comments, @hramrach.

In general, we try to build one binary that runs across a large set of CPUs. For now, I'd be reluctant to change -march.

TEST_CC_ARG can be used in the makefile to test if the compiler supports the flag, so I hope this is a workable solution:

diff --git a/src/nvidia/Makefile b/src/nvidia/Makefile
index 9bdb826ad249..2a3773131076 100644
--- a/src/nvidia/Makefile
+++ b/src/nvidia/Makefile
@@ -67,6 +67,7 @@ ifeq ($(TARGET_ARCH),aarch64)
   CFLAGS += -mgeneral-regs-only
   CFLAGS += -march=armv8-a
   CFLAGS += -mstrict-align
+  CONDITIONAL_CFLAGS += $(call TEST_CC_ARG, -mno-outline-atomics)
 endif

 CFLAGS += -fno-pic

@hramrach
Copy link

Why is it added to CONDITIONAL_CFLAGS and not CFLAGS?

Also this is only 1 of the 3 places that have -march=armv8-a

@woachk
Copy link

woachk commented May 16, 2022

@hramrach to not break compatibility with configs that use older compilers.

Enabling LSE by default would break CPUs as recent as the Cortex-A72 and the ThunderX... so it's not a good option at all.

@hramrach
Copy link

hramrach commented May 16, 2022

While there are multiple places where CONDITIONAL_CFLAGS are set I do not see any place where they are used, and they do not exist in the kernel at all.

Also it's the TEST_CC_ARG conditional that prevents breaking older compiles, not assignment to a different variable.

@PAR2020 PAR2020 added the Implemented Fixed, in test prior to release integration label May 19, 2022
@aritger
Copy link
Collaborator

aritger commented May 25, 2022

FYI - our next release should contain a fix for this.

@hamrach: you are correct, there were three places that required updating. The assignment to CONDITIONAL_CFLAGS in my previous comment was intentional: it is appended to CFLAGS later:

CFLAGS += $(CONDITIONAL_CFLAGS)

The difference, though, is that CONDITIONAL_CFLAGS is a simply expanded gnu make variable:

CONDITIONAL_CFLAGS :=

whereas CFLAGS is a recursively expanded gnu make variable (these different types of variables are described on https://www.gnu.org/software/make/manual/make.html#Flavors )

Normally, recursively expanded is more idiomatic in make. But, the use of TEST_CC_ARG triggers a test invocation of the compiler, and we want to do that only once, rather than each time CFLAGS is used.

@aritger
Copy link
Collaborator

aritger commented May 31, 2022

This should be fixed in 515.48.07. Please let me know if you continue to have troubles. Marking fixed.

@aritger aritger closed this as completed May 31, 2022
@PAR2020 PAR2020 added this to the 515.48.07 milestone May 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working build-problem Implemented Fixed, in test prior to release integration
Projects
None yet
Development

No branches or pull requests

6 participants