[Intel-xe] [PATCH 3/3] drm/xe: NULL binding implementation

Zanoni, Paulo R paulo.r.zanoni at intel.com
Wed Jun 14 20:24:39 UTC 2023


On Wed, 2023-06-14 at 18:48 +0000, Zanoni, Paulo R wrote:
> On Wed, 2023-06-07 at 22:03 -0700, Matthew Brost wrote:
> > Add uAPI and implementation for NULL bindings. A NULL binding is defined
> > as writes dropped and read zero. A single bit in the uAPI has been added
> > which results in a single bit in the PTEs being set.
> > 
> > NULL bindings are indended to be used to implement VK sparse bindings,
> > in particular residencyNonResidentStrict property.
> 
> I tried to test this on my Mesa Sparse branch, and I'm getting BUG()s.
> The interesting thing about this is that multiple BUG()s are competing
> to appear on dmesg at the same time. Perhaps there's some kind of race
> condition here? I'd happily try experimental patches for this.

One thing I forgot to mention is that I got this by running dEQP with
multiple instances in parallel. The problem happened very quickly soon
after I started running the tests.

So now I left dEQP running single-threaded and it took way longer for
the problem to happen, but it still did. After running more than 3500
tests, I have 10 of these BUG() messages on my dmesg. It may still be a
race condition (I'm not sure how much parallelism is done within the
tests), but it may not be.

> 
> [  582.816170] ------------[ cut here ]------------
> [  582.816170] ------------[ cut here ]------------
> [  582.816172] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  582.816173] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  582.816180] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
> [  582.816183] CPU: 0 PID: 18152 Comm: deqp-vk Tainted: G        W          6.3.0pz+ #90
> [  582.816185] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  582.816186] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  582.816245] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  582.816246] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  582.816248] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  582.816249] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  582.816250] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  582.816251] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  582.816252] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  582.816253] FS:  00007f9088034740(0000) GS:ffff8a4060400000(0000) knlGS:0000000000000000
> [  582.816254] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  582.816256] CR2: 000055c1f75fc1a4 CR3: 000000013c396002 CR4: 0000000000770ef0
> [  582.816257] PKRU: 55555554
> [  582.816258] Call Trace:
> [  582.816260]  <TASK>
> [  582.816262]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  582.816304]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  582.816345]  ? update_load_avg+0x7e/0x780
> [  582.816348]  ? __cgroup_account_cputime+0x4c/0x70
> [  582.816351]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  582.816391]  ? psi_group_change+0x152/0x3d0
> [  582.816394]  ? select_task_rq_fair+0x174/0x1720
> [  582.816396]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  582.816399]  ? lock_timer_base+0x61/0x80
> [  582.816401]  ? preempt_count_add+0x6a/0xa0
> [  582.816404]  ? _raw_spin_unlock+0x15/0x30
> [  582.816406]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  582.816434]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  582.816473]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  582.816514]  ? tomoyo_init_request_info+0x95/0xc0
> [  582.816516]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  582.816519]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  582.816540]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  582.816581]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  582.816606]  drm_ioctl+0x24c/0x490 [drm]
> [  582.816628]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  582.816669]  __x64_sys_ioctl+0x8d/0xd0
> [  582.816672]  do_syscall_64+0x37/0x90
> [  582.816674]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  582.816678] RIP: 0033:0x7f9087d1cafb
> [  582.816679] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  582.816681] RSP: 002b:00007ffd011743e0 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  582.816682] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f9087d1cafb
> [  582.816683] RDX: 00007ffd011744c0 RSI: 0000000040786445 RDI: 000000000000000e
> [  582.816684] RBP: 00007ffd01174470 R08: 0000000000000000 R09: 0000000000000078
> [  582.816685] R10: 00007ffd011721e3 R11: 0000000000000246 R12: 0000000000000000
> [  582.816686] R13: 00007ffd011763a8 R14: 0000000000000000 R15: 00007f908847c020
> [  582.816687]  </TASK>
> [  582.816687] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  582.816717]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  582.816749]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  582.816754] ---[ end trace 0000000000000000 ]---
> [  582.816755] invalid opcode: 0000 [#2] PREEMPT SMP NOPTI
> [  582.816757] CPU: 1 PID: 18149 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  582.816759] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  582.816760] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  582.816809] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  582.816811] RSP: 0018:ffffa6170f327a40 EFLAGS: 00010202
> [  582.816812] RAX: ffff8a3cc48d5f40 RBX: ffff8a3dfe41d200 RCX: 0000000000000002
> [  582.816813] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3dfe6c9200
> [  582.816814] RBP: ffff8a3f0c6c6400 R08: ffff8a3dfe6c9260 R09: 0000000000000001
> [  582.816815] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  582.816816] R13: 0000000000020000 R14: ffff8a3dfe6c9200 R15: ffff8a3dfe6c9200
> [  582.816817] FS:  00007f0c7e81f740(0000) GS:ffff8a4060440000(0000) knlGS:0000000000000000
> [  582.816818] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  582.816819] CR2: 000055e47877c1a4 CR3: 000000013c2a2005 CR4: 0000000000770ee0
> [  582.816820] PKRU: 55555554
> [  582.816821] Call Trace:
> [  582.816822]  <TASK>
> [  582.816824]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  582.816865]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  582.816906]  ? update_load_avg+0x7e/0x780
> [  582.816908]  ? __cgroup_account_cputime+0x4c/0x70
> [  582.816910]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  582.816950]  ? psi_group_change+0x152/0x3d0
> [  582.816952]  ? select_task_rq_fair+0x174/0x1720
> [  582.816954]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  582.816957]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  582.816959]  ? preempt_count_add+0x6a/0xa0
> [  582.816961]  ? _raw_spin_unlock+0x15/0x30
> [  582.816963]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  582.816986]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  582.817027]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  582.817068]  ? tomoyo_init_request_info+0x95/0xc0
> [  582.817070]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  582.817072]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  582.817094]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  582.817135]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  582.817160]  drm_ioctl+0x24c/0x490 [drm]
> [  582.817183]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  582.817234]  __x64_sys_ioctl+0x8d/0xd0
> [  582.817237]  do_syscall_64+0x37/0x90
> [  582.817240]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  582.817243] RIP: 0033:0x7f0c7e43dafb
> [  582.817245] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  582.817246] RSP: 002b:00007ffcbf6e36e0 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  582.817248] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f0c7e43dafb
> [  582.817249] RDX: 00007ffcbf6e37c0 RSI: 0000000040786445 RDI: 000000000000000e
> [  582.817250] RBP: 00007ffcbf6e3770 R08: 0000000000000000 R09: 0000000000000078
> [  582.817251] R10: 00007ffcbf6e14e3 R11: 0000000000000246 R12: 0000000000000000
> [  582.817252] R13: 00007ffcbf6e56a8 R14: 0000000000000000 R15: 00007f0c7eb13020
> [  582.817253]  </TASK>
> [  582.817254] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  582.817288]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  582.817324]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  582.817341] ---[ end trace 0000000000000000 ]---
> [  583.825648] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  583.825739] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  583.825741] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  583.825744] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  583.825746] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  583.825748] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  583.825749] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  583.825750] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  583.825752] FS:  00007f9088034740(0000) GS:ffff8a4060400000(0000) knlGS:0000000000000000
> [  583.825754] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  583.825756] CR2: 000055c1f75fc1a4 CR3: 000000013c396002 CR4: 0000000000770ef0
> [  583.825757] PKRU: 55555554
> [  584.824359] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  584.824440] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  584.824442] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  584.824445] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  584.824446] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  584.824448] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  584.824449] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  584.824450] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  584.824451] FS:  00007f0c7e81f740(0000) GS:ffff8a4060440000(0000) knlGS:0000000000000000
> [  584.824453] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  584.824454] CR2: 000055e47877c1a4 CR3: 000000013c2a2005 CR4: 0000000000770ee0
> [  584.824456] PKRU: 55555554
> [  584.923394] ------------[ cut here ]------------
> [  584.923398] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  584.923413] invalid opcode: 0000 [#3] PREEMPT SMP NOPTI
> [  584.923416] CPU: 5 PID: 18148 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  584.923418] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  584.923420] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  584.923492] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  584.923494] RSP: 0018:ffffa6170f3afa40 EFLAGS: 00010202
> [  584.923497] RAX: ffff8a3cc8455f40 RBX: ffff8a3dfe6ad200 RCX: 0000000000000002
> [  584.923499] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3dfe6af800
> [  584.923500] RBP: ffff8a3f0c74e000 R08: ffff8a3dfe6af860 R09: 0000000000000001
> [  584.923501] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  584.923502] R13: 0000000000020000 R14: ffff8a3dfe6af800 R15: ffff8a3dfe6af800
> [  584.923503] FS:  00007f6e7e01c740(0000) GS:ffff8a4060540000(0000) knlGS:0000000000000000
> [  584.923504] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  584.923505] CR2: 00005639e8e701a4 CR3: 000000018b27c003 CR4: 0000000000770ee0
> [  584.923507] PKRU: 55555554
> [  584.923508] Call Trace:
> [  584.923511]  <TASK>
> [  584.923513]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  584.923569]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  584.923610]  ? update_load_avg+0x7e/0x780
> [  584.923613]  ? __cgroup_account_cputime+0x4c/0x70
> [  584.923616]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  584.923655]  ? psi_group_change+0x152/0x3d0
> [  584.923658]  ? select_task_rq_fair+0x174/0x1720
> [  584.923660]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  584.923663]  ? lock_timer_base+0x61/0x80
> [  584.923665]  ? preempt_count_add+0x6a/0xa0
> [  584.923667]  ? _raw_spin_unlock+0x15/0x30
> [  584.923670]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  584.923697]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  584.923737]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  584.923776]  ? tomoyo_init_request_info+0x95/0xc0
> [  584.923780]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  584.923782]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  584.923803]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  584.923842]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  584.923870]  drm_ioctl+0x24c/0x490 [drm]
> [  584.923893]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  584.923938]  __x64_sys_ioctl+0x8d/0xd0
> [  584.923942]  do_syscall_64+0x37/0x90
> [  584.923944]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  584.923948] RIP: 0033:0x7f6e7dc3dafb
> [  584.923949] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  584.923951] RSP: 002b:00007ffcc1247030 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  584.923952] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f6e7dc3dafb
> [  584.923953] RDX: 00007ffcc1247110 RSI: 0000000040786445 RDI: 000000000000000e
> [  584.923954] RBP: 00007ffcc12470c0 R08: 0000000000000000 R09: 0000000000000078
> [  584.923955] R10: 00007ffcc1244e33 R11: 0000000000000246 R12: 0000000000000000
> [  584.923956] R13: 00007ffcc1248ff8 R14: 0000000000000000 R15: 00007f6e7e378020
> [  584.923957]  </TASK>
> [  584.923958] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  584.923991]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  584.924025]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  584.924031] ---[ end trace 0000000000000000 ]---
> [  586.008597] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  586.008679] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  586.008681] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  586.008684] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  586.008685] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  586.008687] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  586.008688] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  586.008689] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  586.008691] FS:  00007f6e7e01c740(0000) GS:ffff8a4060540000(0000) knlGS:0000000000000000
> [  586.008692] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  586.008694] CR2: 00005639e8e701a4 CR3: 000000018b27c003 CR4: 0000000000770ee0
> [  586.008695] PKRU: 55555554
> [  586.010521] ------------[ cut here ]------------
> [  586.010524] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  586.010531] invalid opcode: 0000 [#4] PREEMPT SMP NOPTI
> [  586.010534] CPU: 6 PID: 18150 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  586.010537] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  586.010538] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  586.010616] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  586.010618] RSP: 0018:ffffa6170f3b7a40 EFLAGS: 00010202
> [  586.010621] RAX: ffff8a3d273b5f40 RBX: ffff8a3f0c45d000 RCX: 0000000000000002
> [  586.010622] RDX: 0000000000000013 RSI: ffff8a3cc1f14000 RDI: ffff8a3f0c483000
> [  586.010623] RBP: ffff8a3d20083800 R08: ffff8a3f0c483060 R09: 0000000000000001
> [  586.010625] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  586.010626] R13: 0000000000020000 R14: ffff8a3f0c483000 R15: ffff8a3f0c483000
> [  586.010627] FS:  00007ff676bb2740(0000) GS:ffff8a4060580000(0000) knlGS:0000000000000000
> [  586.010628] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  586.010630] CR2: 000056437f23d1a4 CR3: 00000002c5f46002 CR4: 0000000000770ee0
> [  586.010632] PKRU: 55555554
> [  586.010632] Call Trace:
> [  586.010635]  <TASK>
> [  586.010638]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  586.010702]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  586.010764]  ? update_load_avg+0x7e/0x780
> [  586.010768]  ? __cgroup_account_cputime+0x4c/0x70
> [  586.010772]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  586.010833]  ? psi_group_change+0x152/0x3d0
> [  586.010837]  ? select_task_rq_fair+0x174/0x1720
> [  586.010840]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  586.010844]  ? lock_timer_base+0x61/0x80
> [  586.010846]  ? preempt_count_add+0x6a/0xa0
> [  586.010849]  ? _raw_spin_unlock+0x15/0x30
> [  586.010852]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  586.010889]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  586.010955]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  586.011018]  ? tomoyo_init_request_info+0x95/0xc0
> [  586.011022]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  586.011024]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  586.011064]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  586.011124]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  586.011161]  drm_ioctl+0x24c/0x490 [drm]
> [  586.011193]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  586.011261]  __x64_sys_ioctl+0x8d/0xd0
> [  586.011265]  do_syscall_64+0x37/0x90
> [  586.011268]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  586.011272] RIP: 0033:0x7ff676d1cafb
> [  586.011275] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  586.011276] RSP: 002b:00007ffeacdccf10 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  586.011279] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ff676d1cafb
> [  586.011280] RDX: 00007ffeacdccff0 RSI: 0000000040786445 RDI: 000000000000000e
> [  586.011281] RBP: 00007ffeacdccfa0 R08: 0000000000000000 R09: 0000000000000078
> [  586.011283] R10: 00007ffeacdcad13 R11: 0000000000000246 R12: 0000000000000000
> [  586.011284] R13: 00007ffeacdceed8 R14: 0000000000000000 R15: 00007ff6774af020
> [  586.011286]  </TASK>
> [  586.011287] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  586.011337]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  586.011390]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  586.011398] ---[ end trace 0000000000000000 ]---
> [  586.137384] ------------[ cut here ]------------
> [  586.137390] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  586.137397] invalid opcode: 0000 [#5] PREEMPT SMP NOPTI
> [  586.137401] CPU: 7 PID: 18153 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  586.137404] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  586.137406] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  586.137488] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  586.137490] RSP: 0018:ffffa6170f3cfa40 EFLAGS: 00010202
> [  586.137493] RAX: ffff8a3d41f75f40 RBX: ffff8a3f0c24de00 RCX: 0000000000000002
> [  586.137495] RDX: 0000000000000013 RSI: ffff8a3cc1f14000 RDI: ffff8a3f0c24c000
> [  586.137496] RBP: ffff8a3cc6177c00 R08: ffff8a3f0c24c060 R09: 0000000000000001
> [  586.137498] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  586.137499] R13: 0000000000020000 R14: ffff8a3f0c24c000 R15: ffff8a3f0c24c000
> [  586.137501] FS:  00007fc966258740(0000) GS:ffff8a40605c0000(0000) knlGS:0000000000000000
> [  586.137503] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  586.137504] CR2: 00007fc963c90a9a CR3: 00000002c5ca6001 CR4: 0000000000770ee0
> [  586.137506] PKRU: 55555554
> [  586.137507] Call Trace:
> [  586.137510]  <TASK>
> [  586.137513]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  586.137576]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  586.137638]  ? update_load_avg+0x7e/0x780
> [  586.137642]  ? __cgroup_account_cputime+0x4c/0x70
> [  586.137646]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  586.137705]  ? psi_group_change+0x152/0x3d0
> [  586.137710]  ? select_task_rq_fair+0x174/0x1720
> [  586.137713]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  586.137717]  ? lock_timer_base+0x61/0x80
> [  586.137720]  ? preempt_count_add+0x6a/0xa0
> [  586.137723]  ? _raw_spin_unlock+0x15/0x30
> [  586.137726]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  586.137765]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  586.137826]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  586.137887]  ? tomoyo_init_request_info+0x95/0xc0
> [  586.137891]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  586.137894]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  586.137925]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  586.137985]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  586.138017]  drm_ioctl+0x24c/0x490 [drm]
> [  586.138047]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  586.138107]  __x64_sys_ioctl+0x8d/0xd0
> [  586.138112]  do_syscall_64+0x37/0x90
> [  586.138115]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  586.138119] RIP: 0033:0x7fc96643dafb
> [  586.138122] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  586.138124] RSP: 002b:00007ffc7383a720 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  586.138127] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fc96643dafb
> [  586.138128] RDX: 00007ffc7383a800 RSI: 0000000040786445 RDI: 000000000000000e
> [  586.138130] RBP: 00007ffc7383a7b0 R08: 0000000000000000 R09: 0000000000000078
> [  586.138131] R10: 00007ffc73838523 R11: 0000000000000246 R12: 0000000000000000
> [  586.138132] R13: 00007ffc7383c6e8 R14: 0000000000000000 R15: 00007fc966b56020
> [  586.138135]  </TASK>
> [  586.138136] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  586.138183]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  586.138236]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  586.138245] ---[ end trace 0000000000000000 ]---
> [  586.203830] ------------[ cut here ]------------
> [  586.203834] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  586.203841] invalid opcode: 0000 [#6] PREEMPT SMP NOPTI
> [  586.203844] CPU: 3 PID: 18151 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  586.203846] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  586.203848] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  586.203920] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  586.203921] RSP: 0018:ffffa6170f3bfa40 EFLAGS: 00010202
> [  586.203924] RAX: ffff8a3cc6cedf40 RBX: ffff8a3e36f7be00 RCX: 0000000000000002
> [  586.203925] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3e36f7a400
> [  586.203926] RBP: ffff8a3eed3e9000 R08: ffff8a3e36f7a460 R09: 0000000000000001
> [  586.203927] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  586.203928] R13: 0000000000020000 R14: ffff8a3e36f7a400 R15: ffff8a3e36f7a400
> [  586.203929] FS:  00007ff5022c2740(0000) GS:ffff8a40604c0000(0000) knlGS:0000000000000000
> [  586.203930] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  586.203931] CR2: 00005637548a21a4 CR3: 0000000487fe8003 CR4: 0000000000770ee0
> [  586.203933] PKRU: 55555554
> [  586.203933] Call Trace:
> [  586.203936]  <TASK>
> [  586.203938]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  586.203985]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  586.204031]  ? update_load_avg+0x7e/0x780
> [  586.204035]  ? __cgroup_account_cputime+0x4c/0x70
> [  586.204038]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  586.204081]  ? psi_group_change+0x152/0x3d0
> [  586.204084]  ? select_task_rq_fair+0x174/0x1720
> [  586.204087]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  586.204090]  ? lock_timer_base+0x61/0x80
> [  586.204092]  ? preempt_count_add+0x6a/0xa0
> [  586.204095]  ? _raw_spin_unlock+0x15/0x30
> [  586.204098]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  586.204131]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  586.204176]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  586.204220]  ? tomoyo_init_request_info+0x95/0xc0
> [  586.204224]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  586.204226]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  586.204249]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  586.266200]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  586.266241]  drm_ioctl+0x24c/0x490 [drm]
> [  586.266273]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  586.266332]  __x64_sys_ioctl+0x8d/0xd0
> [  586.266336]  do_syscall_64+0x37/0x90
> [  586.266340]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  586.266345] RIP: 0033:0x7ff5024fcafb
> [  586.266348] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  586.266350] RSP: 002b:00007ffdca7cde00 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  586.266353] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ff5024fcafb
> [  586.266354] RDX: 00007ffdca7cdee0 RSI: 0000000040786445 RDI: 000000000000000e
> [  586.266355] RBP: 00007ffdca7cde90 R08: 0000000000000000 R09: 0000000000000078
> [  586.266357] R10: 00007ffdca7cbc03 R11: 0000000000000246 R12: 0000000000000000
> [  586.266358] R13: 00007ffdca7cfdc8 R14: 0000000000000000 R15: 00007ff502bc0020
> [  586.266361]  </TASK>
> [  586.266362] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  586.266414]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  586.266469]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  586.266495] ---[ end trace 0000000000000000 ]---
> [  586.961460] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  586.961541] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  586.961542] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  586.961545] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  586.961546] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  586.961548] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  586.961549] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  586.961550] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  586.961551] FS:  00007ff676bb2740(0000) GS:ffff8a4060580000(0000) knlGS:0000000000000000
> [  586.961552] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  586.961553] CR2: 000056437f23d1a4 CR3: 00000002c5f46002 CR4: 0000000000770ee0
> [  586.961555] PKRU: 55555554
> [  587.916215] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  587.916313] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  587.916316] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  587.916318] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  587.916321] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  587.916322] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  587.916323] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  587.916325] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  587.916326] FS:  00007fc966258740(0000) GS:ffff8a40605c0000(0000) knlGS:0000000000000000
> [  587.916328] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  587.916330] CR2: 00007fc963c90a9a CR3: 00000002c5ca6001 CR4: 0000000000770ee0
> [  587.916331] PKRU: 55555554
> [  588.857849] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  588.857933] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  588.857935] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  588.857937] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  588.857938] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  588.857939] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  588.857940] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  588.857941] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  588.857942] FS:  00007ff5022c2740(0000) GS:ffff8a40604c0000(0000) knlGS:0000000000000000
> [  588.857943] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  588.857944] CR2: 00005637548a21a4 CR3: 0000000487fe8003 CR4: 0000000000770ee0
> [  588.857960] PKRU: 55555554
> [  702.893558] ------------[ cut here ]------------
> [  702.893562] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  702.893568] invalid opcode: 0000 [#7] PREEMPT SMP NOPTI
> [  702.893571] CPU: 1 PID: 18205 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  702.893572] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  702.893573] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  702.893631] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  702.893632] RSP: 0018:ffffa6170f5d3a40 EFLAGS: 00010202
> [  702.893634] RAX: ffff8a3cdb7d3f80 RBX: ffff8a3e36fc2e00 RCX: 0000000000000002
> [  702.893635] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3e36fc0e00
> [  702.893636] RBP: ffff8a4047e6d800 R08: ffff8a3e36fc0e60 R09: 0000000000000001
> [  702.893637] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  702.893638] R13: 0000000000020000 R14: ffff8a3e36fc0e00 R15: ffff8a3e36fc0e00
> [  702.893639] FS:  00007f5c1292f740(0000) GS:ffff8a4060440000(0000) knlGS:0000000000000000
> [  702.893640] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  702.893641] CR2: 00007f5c0f107000 CR3: 000000015c374005 CR4: 0000000000770ee0
> [  702.893642] PKRU: 55555554
> [  702.893643] Call Trace:
> [  702.893645]  <TASK>
> [  702.893647]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  702.893689]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  702.893730]  ? update_load_avg+0x7e/0x780
> [  702.893733]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  702.893771]  ? ___slab_alloc+0x4d5/0x9a0
> [  702.893774]  ? xe_vm_bind_ioctl+0xf96/0x2430 [xe]
> [  702.893812]  ? xe_vm_bind_ioctl+0xf96/0x2430 [xe]
> [  702.893849]  ? preempt_count_add+0x6a/0xa0
> [  702.893852]  ? _raw_spin_unlock+0x15/0x30
> [  702.893855]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  702.893883]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  702.893922]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  702.893961]  ? tomoyo_init_request_info+0x95/0xc0
> [  702.893963]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  702.893965]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  702.893986]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  702.894024]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  702.894049]  drm_ioctl+0x24c/0x490 [drm]
> [  702.894070]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  702.894109]  __x64_sys_ioctl+0x8d/0xd0
> [  702.894112]  do_syscall_64+0x37/0x90
> [  702.894114]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  702.894118] RIP: 0033:0x7f5c12b1cafb
> [  702.894119] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  702.894121] RSP: 002b:00007ffe4ff4caf0 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  702.894122] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5c12b1cafb
> [  702.894123] RDX: 00007ffe4ff4cbd0 RSI: 0000000040786445 RDI: 000000000000000e
> [  702.894124] RBP: 00007ffe4ff4cb80 R08: 0000000000000000 R09: 0000000000000078
> [  702.894125] R10: 00007ffe4ff4a8f3 R11: 0000000000000246 R12: 0000000000000000
> [  702.894125] R13: 00007ffe4ff4eab8 R14: 0000000000000000 R15: 00007f5c1322b020
> [  702.894127]  </TASK>
> [  702.894127] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  702.894157]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  702.894189]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  702.894194] ---[ end trace 0000000000000000 ]---
> [  703.331800] ------------[ cut here ]------------
> [  703.331804] kernel BUG at drivers/gpu/drm/xe/xe_vm.c:67!
> [  703.331810] invalid opcode: 0000 [#8] PREEMPT SMP NOPTI
> [  703.331813] CPU: 7 PID: 18207 Comm: deqp-vk Tainted: G      D W          6.3.0pz+ #90
> [  703.331815] Hardware name: ASUSTeK COMPUTER INC. ZenBook UX325EA_UX325EA/UX325EA, BIOS UX325EA.316 06/10/2022
> [  703.331816] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  703.331874] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  703.331876] RSP: 0018:ffffa6170f5e3a40 EFLAGS: 00010202
> [  703.331878] RAX: ffff8a3d20bd9fc0 RBX: ffff8a3e36f88400 RCX: 0000000000000002
> [  703.331879] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3ecd756200
> [  703.331880] RBP: ffff8a3eb86d6400 R08: ffff8a3ecd756260 R09: 0000000000000001
> [  703.331881] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  703.331881] R13: 0000000000020000 R14: ffff8a3ecd756200 R15: ffff8a3ecd756200
> [  703.331882] FS:  00007f924fc1d740(0000) GS:ffff8a40605c0000(0000) knlGS:0000000000000000
> [  703.331884] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  703.331885] CR2: 00007f9240000020 CR3: 00000002c5ee6001 CR4: 0000000000770ee0
> [  703.331886] PKRU: 55555554
> [  703.331887] Call Trace:
> [  703.331889]  <TASK>
> [  703.331891]  ? xe_vma_create+0x59/0x2d0 [xe]
> [  703.331933]  vm_bind_ioctl_lookup_vma+0xc21/0xef0 [xe]
> [  703.331974]  ? __vm_bind_ioctl_lookup_vma.constprop.0+0x8f/0x150 [xe]
> [  703.332010]  ? _raw_spin_lock+0x13/0x40
> [  703.332014]  ? psi_group_change+0x152/0x3d0
> [  703.332018]  ? select_task_rq_fair+0x174/0x1720
> [  703.332021]  ? _raw_spin_lock_irqsave+0x23/0x50
> [  703.332023]  ? preempt_count_add+0x6a/0xa0
> [  703.332025]  ? _raw_spin_unlock+0x15/0x30
> [  703.332028]  ? drm_syncobj_find+0x49/0x80 [drm]
> [  703.332055]  ? xe_sync_entry_parse+0xcd/0x640 [xe]
> [  703.332095]  xe_vm_bind_ioctl+0x122a/0x2430 [xe]
> [  703.332134]  ? tomoyo_init_request_info+0x95/0xc0
> [  703.332137]  ? tomoyo_path_number_perm+0x68/0x1d0
> [  703.332139]  ? drm_syncobj_get_handle+0x74/0x100 [drm]
> [  703.332160]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  703.332198]  drm_ioctl_kernel+0xbe/0x160 [drm]
> [  703.332222]  drm_ioctl+0x24c/0x490 [drm]
> [  703.332244]  ? __pfx_xe_vm_bind_ioctl+0x10/0x10 [xe]
> [  703.332283]  __x64_sys_ioctl+0x8d/0xd0
> [  703.332286]  do_syscall_64+0x37/0x90
> [  703.332288]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  703.332291] RIP: 0033:0x7f924f83dafb
> [  703.332293] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 1c 48 8b 44 24 18 64 48 2b 04 25 28 00 00
> [  703.332294] RSP: 002b:00007ffce8a0d910 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> [  703.332295] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f924f83dafb
> [  703.332296] RDX: 00007ffce8a0d9f0 RSI: 0000000040786445 RDI: 000000000000000e
> [  703.332297] RBP: 00007ffce8a0d9a0 R08: 0000000000000000 R09: 0000000000000078
> [  703.332298] R10: 00007ffce8a0b713 R11: 0000000000000246 R12: 0000000000000000
> [  703.332299] R13: 00007ffce8a0f8d8 R14: 0000000000000000 R15: 00007f924ff11020
> [  703.332300]  </TASK>
> [  703.332301] Modules linked in: ccm rfcomm cmac algif_hash algif_skcipher af_alg qrtr bnep nls_ascii nls_cp437 vfat fat snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_probes snd_soc_dmic joydev snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic btusb btrtl btbcm btintel btmtk snd_sof_pci_intel_tgl snd_sof_intel_hda_common x86_pkg_temp_thermal intel_powerclamp coretemp snd_soc_acpi_intel_match snd_soc_hdac_hda snd_sof_pci kvm_intel snd_sof_xtensa_dsp iwlmvm bluetooth snd_sof_intel_hda kvm mac80211 snd_sof snd_sof_utils snd_hda_ext_core snd_soc_acpi libarc4 irqbypass crc32_pclmul snd_soc_core jitterentropy_rng ghash_clmulni_intel snd_compress iwlwifi sha512_ssse3 snd_hda_intel sha512_generic snd_intel_dspcfg mei_hdcp intel_rapl_msr ctr snd_hda_codec uvcvideo cfg80211 asus_nb_wmi drbg aesni_intel videobuf2_vmalloc videobuf2_memops asus_wmi snd_hwdep uvc ansi_cprng videobuf2_v4l2 crypto_simd ledtrig_audio cryptd ecdh_generic sparse_keymap snd_hda_core ecc platform_profile
> [  703.332330]  iTCO_wdt videodev snd_pcm intel_pmc_bxt intel_cstate iTCO_vendor_support intel_uncore videobuf2_common mc pcspkr watchdog processor_thermal_device_pci_legacy snd_timer mei_me wmi_bmof intel_soc_dts_iosf snd processor_thermal_device ucsi_acpi mei soundcore processor_thermal_rfim typec_ucsi processor_thermal_mbox rfkill processor_thermal_rapl roles typec intel_rapl_common int3403_thermal battery int340x_thermal_zone int3400_thermal intel_pmc_core button acpi_thermal_rel acpi_tad acpi_pad evdev hid_multitouch serio_raw msr parport_pc ppdev lp parport fuse efi_pstore configfs efivarfs ip_tables x_tables autofs4 ext4 crc32c_generic crc16 mbcache jbd2 r8152 mii nvme nvme_core t10_pi crc64_rocksoft crc64 crc_t10dif crct10dif_generic xe hid_generic drm_ttm_helper ttm i2c_algo_bit gpu_sched drm_buddy drm_suballoc_helper drm_display_helper drm_kms_helper rtsx_pci_sdmmc xhci_pci mmc_core xhci_hcd crct10dif_pclmul drm crct10dif_common crc32c_intel usbcore rtsx_pci i2c_i801 intel_lpss_pci cec i2c_smbus i2c_hid_acpi
> [  703.332362]  intel_lpss rc_core i2c_hid idma64 vmd usb_common hid video wmi
> [  703.332367] ---[ end trace 0000000000000000 ]---
> [  703.934202] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  703.934284] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  703.934287] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  703.934290] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  703.934292] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  703.934293] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  703.934295] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  703.934296] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  703.934298] FS:  00007f5c1292f740(0000) GS:ffff8a4060440000(0000) knlGS:0000000000000000
> [  703.934300] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  703.934301] CR2: 00007f5c0f107000 CR3: 000000015c374005 CR4: 0000000000770ee0
> [  703.934314] PKRU: 55555554
> [  704.939954] RIP: 0010:xe_vma_userptr_pin_pages+0x23/0x400 [xe]
> [  704.940023] Code: 90 90 90 90 90 90 90 0f 1f 44 00 00 41 57 41 56 41 55 41 54 55 53 65 48 8b 04 25 c0 13 03 00 48 83 ec 40 48 83 7f 38 00 74 02 <0f> 0b 8b 4f 30 49 89 fe f6 c1 02 75 f3 48 8b 57 18 48 8b 80 e0 08
> [  704.940025] RSP: 0018:ffffa6170f3c7a40 EFLAGS: 00010202
> [  704.940027] RAX: ffff8a3d28398000 RBX: ffff8a3da44cce00 RCX: 0000000000000002
> [  704.940028] RDX: 0000000000000017 RSI: ffff8a3cc1f14000 RDI: ffff8a3da44cee00
> [  704.940029] RBP: ffff8a3cd4e5f400 R08: ffff8a3da44cee60 R09: 0000000000000001
> [  704.940030] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
> [  704.940030] R13: 0000000000020000 R14: ffff8a3da44cee00 R15: ffff8a3da44cee00
> [  704.940031] FS:  00007f924fc1d740(0000) GS:ffff8a40605c0000(0000) knlGS:0000000000000000
> [  704.940032] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [  704.940033] CR2: 00007f9240000020 CR3: 00000002c5ee6001 CR4: 0000000000770ee0
> [  704.940035] PKRU: 55555554
> [  705.036071] ------------[ cut here ]------------
> 
> 
> 
> Suggested-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> Signed-off-by: Matthew Brost <matthew.brost at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_bo.h           |  1 +
>  drivers/gpu/drm/xe/xe_exec.c         |  2 +
>  drivers/gpu/drm/xe/xe_gt_pagefault.c |  4 +-
>  drivers/gpu/drm/xe/xe_pt.c           | 71 +++++++++++++++------
>  drivers/gpu/drm/xe/xe_vm.c           | 95 ++++++++++++++++++----------
>  drivers/gpu/drm/xe/xe_vm.h           | 12 +++-
>  drivers/gpu/drm/xe/xe_vm_types.h     |  1 +
>  include/uapi/drm/xe_drm.h            |  8 +++
>  8 files changed, 138 insertions(+), 56 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index dd3d448fee0b..3a148cc6e811 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -61,6 +61,7 @@
>  #define XE_PPGTT_PTE_LM			BIT_ULL(11)
>  #define XE_PDE_64K			BIT_ULL(6)
>  #define XE_PTE_PS64			BIT_ULL(8)
> +#define XE_PTE_NULL			BIT_ULL(9)
>  
> 
> 
> 
>  #define XE_PAGE_PRESENT			BIT_ULL(0)
>  #define XE_PAGE_RW			BIT_ULL(1)
> diff --git a/drivers/gpu/drm/xe/xe_exec.c b/drivers/gpu/drm/xe/xe_exec.c
> index e44076ee2e11..4f7694a29348 100644
> --- a/drivers/gpu/drm/xe/xe_exec.c
> +++ b/drivers/gpu/drm/xe/xe_exec.c
> @@ -120,6 +120,8 @@ static int xe_exec_begin(struct xe_engine *e, struct ww_acquire_ctx *ww,
>  	 * to a location where the GPU can access it).
>  	 */
>  	list_for_each_entry(vma, &vm->rebind_list, rebind_link) {
> +		XE_WARN_ON(xe_vma_is_null(vma));
> +
>  		if (xe_vma_is_userptr(vma))
>  			continue;
>  
> 
> 
> 
> diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c
> index 73db7f7c0381..6faebd02f3fb 100644
> --- a/drivers/gpu/drm/xe/xe_gt_pagefault.c
> +++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c
> @@ -533,8 +533,8 @@ static int handle_acc(struct xe_gt *gt, struct acc *acc)
>  
> 
> 
> 
>  	trace_xe_vma_acc(vma);
>  
> 
> 
> 
> -	/* Userptr can't be migrated, nothing to do */
> -	if (xe_vma_is_userptr(vma))
> +	/* Userptr or null can't be migrated, nothing to do */
> +	if (xe_vma_has_no_bo(vma))
>  		goto unlock_vm;
>  
> 
> 
> 
>  	/* Lock VM and BOs dma-resv */
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index 39ec94549439..265ee45bee5c 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -81,7 +81,9 @@ u64 gen8_pde_encode(struct xe_bo *bo, u64 bo_offset,
>  static dma_addr_t vma_addr(struct xe_vma *vma, u64 offset,
>  			   size_t page_size, bool *is_vram)
>  {
> -	if (xe_vma_is_userptr(vma)) {
> +	if (xe_vma_is_null(vma)) {
> +		return 0;
> +	} else if (xe_vma_is_userptr(vma)) {
>  		struct xe_res_cursor cur;
>  		u64 page;
>  
> 
> 
> 
> @@ -559,6 +561,10 @@ static bool xe_pt_hugepte_possible(u64 addr, u64 next, unsigned int level,
>  	if (next - xe_walk->va_curs_start > xe_walk->curs->size)
>  		return false;
>  
> 
> 
> 
> +	/* null VMA's do not have dma adresses */
> +	if (xe_walk->pte_flags & XE_PTE_FLAG_NULL)
> +		return true;
> +
>  	/* Is the DMA address huge PTE size aligned? */
>  	size = next - addr;
>  	dma = addr - xe_walk->va_curs_start + xe_res_dma(xe_walk->curs);
> @@ -575,6 +581,10 @@ xe_pt_scan_64K(u64 addr, u64 next, struct xe_pt_stage_bind_walk *xe_walk)
>  {
>  	struct xe_res_cursor curs = *xe_walk->curs;
>  
> 
> 
> 
> +	/* null VMA's do not have dma adresses */
> +	if (xe_walk->pte_flags & XE_PTE_FLAG_NULL)
> +		return true;
> +
>  	if (!IS_ALIGNED(addr, SZ_64K))
>  		return false;
>  
> 
> 
> 
> @@ -631,12 +641,29 @@ xe_pt_stage_bind_entry(struct xe_ptw *parent, pgoff_t offset,
>  	/* Is this a leaf entry ?*/
>  	if (level == 0 || xe_pt_hugepte_possible(addr, next, level, xe_walk)) {
>  		struct xe_res_cursor *curs = xe_walk->curs;
> +		u64 pte = 0;
> +		bool is_null = xe_walk->pte_flags & XE_PTE_FLAG_NULL;
>  
> 
> 
> 
>  		XE_WARN_ON(xe_walk->va_curs_start != addr);
>  
> 
> 
> 
> -		pte = __gen8_pte_encode(xe_res_dma(curs) + xe_walk->dma_offset,
> -					xe_walk->cache, xe_walk->pte_flags,
> -					level);
> +		if (is_null) {
> +			pte |= XE_PAGE_PRESENT | XE_PAGE_RW;
> +			if (xe_walk->pte_flags & XE_PTE_FLAG_READ_ONLY)
> +				pte &= ~XE_PAGE_RW;
> +
> +			if (level == 1)
> +				pte |= XE_PDE_PS_2M;
> +			else if (level == 2)
> +				pte |= XE_PDPE_PS_1G;
> +
> +			pte |= XE_PTE_NULL;
> +		} else {
> +			pte = __gen8_pte_encode(xe_res_dma(curs) +
> +						xe_walk->dma_offset,
> +						xe_walk->cache,
> +						xe_walk->pte_flags,
> +						level);
> +		}
>  		pte |= xe_walk->default_pte;
>  
> 
> 
> 
>  		/*
> @@ -654,7 +681,8 @@ xe_pt_stage_bind_entry(struct xe_ptw *parent, pgoff_t offset,
>  		if (unlikely(ret))
>  			return ret;
>  
> 
> 
> 
> -		xe_res_next(curs, next - addr);
> +		if (!is_null)
> +			xe_res_next(curs, next - addr);
>  		xe_walk->va_curs_start = next;
>  		*action = ACTION_CONTINUE;
>  
> 
> 
> 
> @@ -761,24 +789,29 @@ xe_pt_stage_bind(struct xe_tile *tile, struct xe_vma *vma,
>  		xe_walk.dma_offset = vram_region_gpu_offset(bo->ttm.resource);
>  		xe_walk.cache = XE_CACHE_WB;
>  	} else {
> -		if (!xe_vma_is_userptr(vma) && bo->flags & XE_BO_SCANOUT_BIT)
> +		if (!xe_vma_has_no_bo(vma) && bo->flags & XE_BO_SCANOUT_BIT)
>  			xe_walk.cache = XE_CACHE_WT;
>  		else
>  			xe_walk.cache = XE_CACHE_WB;
>  	}
> -	if (!xe_vma_is_userptr(vma) && xe_bo_is_stolen(bo))
> +	if (!xe_vma_has_no_bo(vma) && xe_bo_is_stolen(bo))
>  		xe_walk.dma_offset = xe_ttm_stolen_gpu_offset(xe_bo_device(bo));
>  
> 
> 
> 
>  	xe_bo_assert_held(bo);
> -	if (xe_vma_is_userptr(vma))
> -		xe_res_first_sg(vma->userptr.sg, 0, vma->end - vma->start + 1,
> -				&curs);
> -	else if (xe_bo_is_vram(bo) || xe_bo_is_stolen(bo))
> -		xe_res_first(bo->ttm.resource, vma->bo_offset,
> -			     vma->end - vma->start + 1, &curs);
> -	else
> -		xe_res_first_sg(xe_bo_get_sg(bo), vma->bo_offset,
> -				vma->end - vma->start + 1, &curs);
> +
> +	if (!xe_vma_is_null(vma)) {
> +		if (xe_vma_is_userptr(vma))
> +			xe_res_first_sg(vma->userptr.sg, 0,
> +					vma->end - vma->start + 1, &curs);
> +		else if (xe_bo_is_vram(bo) || xe_bo_is_stolen(bo))
> +			xe_res_first(bo->ttm.resource, vma->bo_offset,
> +				     vma->end - vma->start + 1, &curs);
> +		else
> +			xe_res_first_sg(xe_bo_get_sg(bo), vma->bo_offset,
> +					vma->end - vma->start + 1, &curs);
> +	} else {
> +		curs.size = vma->end - vma->start + 1;
> +	}
>  
> 
> 
> 
>  	ret = xe_pt_walk_range(&pt->base, pt->level, vma->start, vma->end + 1,
>  				&xe_walk.base);
> @@ -967,7 +1000,7 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
>  
> 
> 
> 
>  	if (xe_vma_is_userptr(vma))
>  		lockdep_assert_held_read(&vm->userptr.notifier_lock);
> -	else
> +	else if (!xe_vma_is_null(vma))
>  		dma_resv_assert_held(vma->bo->ttm.base.resv);
>  
> 
> 
> 
>  	dma_resv_assert_held(&vm->resv);
> @@ -1330,7 +1363,7 @@ __xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
>  				   DMA_RESV_USAGE_KERNEL :
>  				   DMA_RESV_USAGE_BOOKKEEP);
>  
> 
> 
> 
> -		if (!xe_vma_is_userptr(vma) && !vma->bo->vm)
> +		if (!xe_vma_has_no_bo(vma) && !vma->bo->vm)
>  			dma_resv_add_fence(vma->bo->ttm.base.resv, fence,
>  					   DMA_RESV_USAGE_BOOKKEEP);
>  		xe_pt_commit_bind(vma, entries, num_entries, rebind,
> @@ -1647,7 +1680,7 @@ __xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e
>  				   DMA_RESV_USAGE_BOOKKEEP);
>  
> 
> 
> 
>  		/* This fence will be installed by caller when doing eviction */
> -		if (!xe_vma_is_userptr(vma) && !vma->bo->vm)
> +		if (!xe_vma_has_no_bo(vma) && !vma->bo->vm)
>  			dma_resv_add_fence(vma->bo->ttm.base.resv, fence,
>  					   DMA_RESV_USAGE_BOOKKEEP);
>  		xe_pt_commit_unbind(vma, entries, num_entries,
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 94fc9c330235..f7629db275f9 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -590,7 +590,7 @@ static void preempt_rebind_work_func(struct work_struct *w)
>  		goto out_unlock;
>  
> 
> 
> 
>  	list_for_each_entry(vma, &vm->rebind_list, rebind_link) {
> -		if (xe_vma_is_userptr(vma) || vma->destroyed)
> +		if (xe_vma_has_no_bo(vma) || vma->destroyed)
>  			continue;
>  
> 
> 
> 
>  		err = xe_bo_validate(vma->bo, vm, false);
> @@ -843,6 +843,7 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
>  				    u64 bo_offset_or_userptr,
>  				    u64 start, u64 end,
>  				    bool read_only,
> +				    bool is_null,
>  				    u64 tile_mask)
>  {
>  	struct xe_vma *vma;
> @@ -868,8 +869,11 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
>  	vma->vm = vm;
>  	vma->start = start;
>  	vma->end = end;
> +	vma->pte_flags = 0;
>  	if (read_only)
> -		vma->pte_flags = XE_PTE_FLAG_READ_ONLY;
> +		vma->pte_flags |= XE_PTE_FLAG_READ_ONLY;
> +	if (is_null)
> +		vma->pte_flags |= XE_PTE_FLAG_NULL;
>  
> 
> 
> 
>  	if (tile_mask) {
>  		vma->tile_mask = tile_mask;
> @@ -886,23 +890,26 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
>  		vma->bo_offset = bo_offset_or_userptr;
>  		vma->bo = xe_bo_get(bo);
>  		list_add_tail(&vma->bo_link, &bo->vmas);
> -	} else /* userptr */ {
> -		u64 size = end - start + 1;
> -		int err;
> +	} else /* userptr or null */ {
> +		if (!is_null) {
> +			u64 size = end - start + 1;
> +			int err;
>  
> 
> 
> 
> -		vma->userptr.ptr = bo_offset_or_userptr;
> +			vma->userptr.ptr = bo_offset_or_userptr;
>  
> 
> 
> 
> -		err = mmu_interval_notifier_insert(&vma->userptr.notifier,
> -						   current->mm,
> -						   vma->userptr.ptr, size,
> -						   &vma_userptr_notifier_ops);
> -		if (err) {
> -			kfree(vma);
> -			vma = ERR_PTR(err);
> -			return vma;
> +			err = mmu_interval_notifier_insert(&vma->userptr.notifier,
> +							   current->mm,
> +							   vma->userptr.ptr, size,
> +							   &vma_userptr_notifier_ops);
> +			if (err) {
> +				kfree(vma);
> +				vma = ERR_PTR(err);
> +				return vma;
> +			}
> +
> +			vma->userptr.notifier_seq = LONG_MAX;
>  		}
>  
> 
> 
> 
> -		vma->userptr.notifier_seq = LONG_MAX;
>  		xe_vm_get(vm);
>  	}
>  
> 
> 
> 
> @@ -942,6 +949,8 @@ static void xe_vma_destroy_late(struct xe_vma *vma)
>  		 */
>  		mmu_interval_notifier_remove(&vma->userptr.notifier);
>  		xe_vm_put(vm);
> +	} else if (xe_vma_is_null(vma)) {
> +		xe_vm_put(vm);
>  	} else {
>  		xe_bo_put(vma->bo);
>  	}
> @@ -1024,7 +1033,7 @@ static void xe_vma_destroy(struct xe_vma *vma, struct dma_fence *fence)
>  		list_del_init(&vma->userptr.invalidate_link);
>  		spin_unlock(&vm->userptr.invalidated_lock);
>  		list_del(&vma->userptr_link);
> -	} else {
> +	} else if (!xe_vma_is_null(vma)) {
>  		xe_bo_assert_held(vma->bo);
>  		list_del(&vma->bo_link);
>  
> 
> 
> 
> @@ -1391,7 +1400,7 @@ void xe_vm_close_and_put(struct xe_vm *vm)
>  	while (vm->vmas.rb_node) {
>  		struct xe_vma *vma = to_xe_vma(vm->vmas.rb_node);
>  
> 
> 
> 
> -		if (xe_vma_is_userptr(vma)) {
> +		if (xe_vma_has_no_bo(vma)) {
>  			down_read(&vm->userptr.notifier_lock);
>  			vma->destroyed = true;
>  			up_read(&vm->userptr.notifier_lock);
> @@ -1400,7 +1409,7 @@ void xe_vm_close_and_put(struct xe_vm *vm)
>  		rb_erase(&vma->vm_node, &vm->vmas);
>  
> 
> 
> 
>  		/* easy case, remove from VMA? */
> -		if (xe_vma_is_userptr(vma) || vma->bo->vm) {
> +		if (xe_vma_has_no_bo(vma) || vma->bo->vm) {
>  			xe_vma_destroy(vma, NULL);
>  			continue;
>  		}
> @@ -2034,7 +2043,7 @@ static int xe_vm_prefetch(struct xe_vm *vm, struct xe_vma *vma,
>  
> 
> 
> 
>  	XE_BUG_ON(region > ARRAY_SIZE(region_to_mem_type));
>  
> 
> 
> 
> -	if (!xe_vma_is_userptr(vma)) {
> +	if (!xe_vma_has_no_bo(vma)) {
>  		err = xe_bo_migrate(vma->bo, region_to_mem_type[region]);
>  		if (err)
>  			return err;
> @@ -2643,6 +2652,8 @@ static struct xe_vma *vm_unbind_lookup_vmas(struct xe_vm *vm,
>  					  lookup->start - 1,
>  					  (first->pte_flags &
>  					   XE_PTE_FLAG_READ_ONLY),
> +					  (first->pte_flags &
> +					   XE_PTE_FLAG_NULL),
>  					  first->tile_mask);
>  		if (first->bo)
>  			xe_bo_unlock(first->bo, &ww);
> @@ -2675,6 +2686,7 @@ static struct xe_vma *vm_unbind_lookup_vmas(struct xe_vm *vm,
>  					 last->end,
>  					 (last->pte_flags &
>  					  XE_PTE_FLAG_READ_ONLY),
> +					 (last->pte_flags & XE_PTE_FLAG_NULL),
>  					 last->tile_mask);
>  		if (last->bo)
>  			xe_bo_unlock(last->bo, &ww);
> @@ -2742,7 +2754,7 @@ static struct xe_vma *vm_prefetch_lookup_vmas(struct xe_vm *vm,
>  		      *next;
>  	struct rb_node *node;
>  
> 
> 
> 
> -	if (!xe_vma_is_userptr(vma)) {
> +	if (!xe_vma_has_no_bo(vma)) {
>  		if (!xe_bo_can_migrate(vma->bo, region_to_mem_type[region]))
>  			return ERR_PTR(-EINVAL);
>  	}
> @@ -2751,7 +2763,7 @@ static struct xe_vma *vm_prefetch_lookup_vmas(struct xe_vm *vm,
>  	while ((node = rb_next(node))) {
>  		if (!xe_vma_cmp_vma_cb(lookup, node)) {
>  			__vma = to_xe_vma(node);
> -			if (!xe_vma_is_userptr(__vma)) {
> +			if (!xe_vma_has_no_bo(__vma)) {
>  				if (!xe_bo_can_migrate(__vma->bo, region_to_mem_type[region]))
>  					goto flush_list;
>  			}
> @@ -2765,7 +2777,7 @@ static struct xe_vma *vm_prefetch_lookup_vmas(struct xe_vm *vm,
>  	while ((node = rb_prev(node))) {
>  		if (!xe_vma_cmp_vma_cb(lookup, node)) {
>  			__vma = to_xe_vma(node);
> -			if (!xe_vma_is_userptr(__vma)) {
> +			if (!xe_vma_has_no_bo(__vma)) {
>  				if (!xe_bo_can_migrate(__vma->bo, region_to_mem_type[region]))
>  					goto flush_list;
>  			}
> @@ -2824,21 +2836,23 @@ static struct xe_vma *vm_bind_ioctl_lookup_vma(struct xe_vm *vm,
>  
> 
> 
> 
>  	switch (VM_BIND_OP(op)) {
>  	case XE_VM_BIND_OP_MAP:
> -		XE_BUG_ON(!bo);
> -
> -		err = xe_bo_lock(bo, &ww, 0, true);
> -		if (err)
> -			return ERR_PTR(err);
> +		if (bo) {
> +			err = xe_bo_lock(bo, &ww, 0, true);
> +			if (err)
> +				return ERR_PTR(err);
> +		}
>  		vma = xe_vma_create(vm, bo, bo_offset_or_userptr, addr,
>  				    addr + range - 1,
>  				    op & XE_VM_BIND_FLAG_READONLY,
> +				    op & XE_VM_BIND_FLAG_NULL,
>  				    tile_mask);
> -		xe_bo_unlock(bo, &ww);
> +		if (bo)
> +			xe_bo_unlock(bo, &ww);
>  		if (!vma)
>  			return ERR_PTR(-ENOMEM);
>  
> 
> 
> 
>  		xe_vm_insert_vma(vm, vma);
> -		if (!bo->vm) {
> +		if (bo && !bo->vm) {
>  			vm_insert_extobj(vm, vma);
>  			err = add_preempt_fences(vm, bo);
>  			if (err) {
> @@ -2872,6 +2886,7 @@ static struct xe_vma *vm_bind_ioctl_lookup_vma(struct xe_vm *vm,
>  		vma = xe_vma_create(vm, NULL, bo_offset_or_userptr, addr,
>  				    addr + range - 1,
>  				    op & XE_VM_BIND_FLAG_READONLY,
> +				    op & XE_VM_BIND_FLAG_NULL,
>  				    tile_mask);
>  		if (!vma)
>  			return ERR_PTR(-ENOMEM);
> @@ -2897,11 +2912,12 @@ static struct xe_vma *vm_bind_ioctl_lookup_vma(struct xe_vm *vm,
>  #ifdef TEST_VM_ASYNC_OPS_ERROR
>  #define SUPPORTED_FLAGS	\
>  	(FORCE_ASYNC_OP_ERROR | XE_VM_BIND_FLAG_ASYNC | \
> -	 XE_VM_BIND_FLAG_READONLY | XE_VM_BIND_FLAG_IMMEDIATE | 0xffff)
> +	 XE_VM_BIND_FLAG_READONLY | XE_VM_BIND_FLAG_IMMEDIATE | \
> +	 XE_VM_BIND_FLAG_NULL | 0xffff)
>  #else
>  #define SUPPORTED_FLAGS	\
>  	(XE_VM_BIND_FLAG_ASYNC | XE_VM_BIND_FLAG_READONLY | \
> -	 XE_VM_BIND_FLAG_IMMEDIATE | 0xffff)
> +	 XE_VM_BIND_FLAG_IMMEDIATE | XE_VM_BIND_FLAG_NULL | 0xffff)
>  #endif
>  #define XE_64K_PAGE_MASK 0xffffull
>  
> 
> 
> 
> @@ -2949,6 +2965,7 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe,
>  		u32 obj = (*bind_ops)[i].obj;
>  		u64 obj_offset = (*bind_ops)[i].obj_offset;
>  		u32 region = (*bind_ops)[i].region;
> +		bool is_null = op &  XE_VM_BIND_FLAG_NULL;
>  
> 
> 
> 
>  		if (XE_IOCTL_ERR(xe, (*bind_ops)[i].pad) ||
>  		    XE_IOCTL_ERR(xe, (*bind_ops)[i].reserved[0] ||
> @@ -2982,8 +2999,13 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe,
>  		if (XE_IOCTL_ERR(xe, VM_BIND_OP(op) >
>  				 XE_VM_BIND_OP_PREFETCH) ||
>  		    XE_IOCTL_ERR(xe, op & ~SUPPORTED_FLAGS) ||
> +		    XE_IOCTL_ERR(xe, obj && is_null) ||
> +		    XE_IOCTL_ERR(xe, obj_offset && is_null) ||
> +		    XE_IOCTL_ERR(xe, VM_BIND_OP(op) != XE_VM_BIND_OP_MAP &&
> +				 is_null) ||
>  		    XE_IOCTL_ERR(xe, !obj &&
> -				 VM_BIND_OP(op) == XE_VM_BIND_OP_MAP) ||
> +				 VM_BIND_OP(op) == XE_VM_BIND_OP_MAP &&
> +				 !is_null) ||
>  		    XE_IOCTL_ERR(xe, !obj &&
>  				 VM_BIND_OP(op) == XE_VM_BIND_OP_UNMAP_ALL) ||
>  		    XE_IOCTL_ERR(xe, addr &&
> @@ -3389,6 +3411,7 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
>  	int ret;
>  
> 
> 
> 
>  	XE_BUG_ON(!xe_vm_in_fault_mode(vma->vm));
> +	XE_WARN_ON(xe_vma_is_null(vma));
>  	trace_xe_vma_usm_invalidate(vma);
>  
> 
> 
> 
>  	/* Check that we don't race with page-table updates */
> @@ -3451,8 +3474,11 @@ int xe_analyze_vm(struct drm_printer *p, struct xe_vm *vm, int gt_id)
>  	for (node = rb_first(&vm->vmas); node; node = rb_next(node)) {
>  		struct xe_vma *vma = to_xe_vma(node);
>  		bool is_userptr = xe_vma_is_userptr(vma);
> +		bool is_null = xe_vma_is_null(vma);
>  
> 
> 
> 
> -		if (is_userptr) {
> +		if (is_null) {
> +			addr = 0;
> +		} else if (is_userptr) {
>  			struct xe_res_cursor cur;
>  
> 
> 
> 
>  			xe_res_first_sg(vma->userptr.sg, 0, XE_PAGE_SIZE,
> @@ -3463,7 +3489,8 @@ int xe_analyze_vm(struct drm_printer *p, struct xe_vm *vm, int gt_id)
>  		}
>  		drm_printf(p, " [%016llx-%016llx] S:0x%016llx A:%016llx %s\n",
>  			   vma->start, vma->end, vma->end - vma->start + 1ull,
> -			   addr, is_userptr ? "USR" : is_vram ? "VRAM" : "SYS");
> +			   addr, is_null ? "NULL" : is_userptr ? "USR" :
> +			   is_vram ? "VRAM" : "SYS");
>  	}
>  	up_read(&vm->lock);
>  
> 
> 
> 
> diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
> index 372f26153209..38731e200813 100644
> --- a/drivers/gpu/drm/xe/xe_vm.h
> +++ b/drivers/gpu/drm/xe/xe_vm.h
> @@ -115,11 +115,21 @@ static inline void xe_vm_reactivate_rebind(struct xe_vm *vm)
>  	}
>  }
>  
> 
> 
> 
> -static inline bool xe_vma_is_userptr(struct xe_vma *vma)
> +static inline bool xe_vma_is_null(struct xe_vma *vma)
> +{
> +	return vma->pte_flags & XE_PTE_FLAG_NULL;
> +}
> +
> +static inline bool xe_vma_has_no_bo(struct xe_vma *vma)
>  {
>  	return !vma->bo;
>  }
>  
> 
> 
> 
> +static inline bool xe_vma_is_userptr(struct xe_vma *vma)
> +{
> +	return xe_vma_has_no_bo(vma) && !xe_vma_is_null(vma);
> +}
> +
>  int xe_vma_userptr_pin_pages(struct xe_vma *vma);
>  
> 
> 
> 
>  int xe_vma_userptr_check_repin(struct xe_vma *vma);
> diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
> index 6daddd29d416..f775bafe4619 100644
> --- a/drivers/gpu/drm/xe/xe_vm_types.h
> +++ b/drivers/gpu/drm/xe/xe_vm_types.h
> @@ -31,6 +31,7 @@ struct xe_vma {
>  	u64 end;
>  	/** @pte_flags: pte flags for this VMA */
>  #define XE_PTE_FLAG_READ_ONLY		BIT(0)
> +#define XE_PTE_FLAG_NULL		BIT(1)
>  	u32 pte_flags;
>  
> 
> 
> 
>  	/** @bo: BO if not a userptr, must be NULL is userptr */
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 0ebc50beb5e5..39a1ce89732f 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -456,6 +456,14 @@ struct drm_xe_vm_bind_op {
>  	 * than differing the MAP to the page fault handler.
>  	 */
>  #define XE_VM_BIND_FLAG_IMMEDIATE	(0x1 << 18)
> +	/*
> +	 * When the NULL flag is set, the page tables are setup with a special
> +	 * bit which indicates writes are dropped and all reads return zero.  In
> +	 * the future, the NULL flags will only be valid for XE_VM_BIND_OP_MAP
> +	 * operations, the BO handle MBZ, and the BO offset MBZ. This flag is
> +	 * intended to implement VK sparse bindings.
> +	 */
> +#define XE_VM_BIND_FLAG_NULL		(0x1 << 19)
>  
> 
> 
> 
>  	/** @reserved: Reserved */
>  	__u64 reserved[2];
> 



More information about the Intel-xe mailing list