summaryrefslogtreecommitdiffstats
path: root/tools/gdb_scripts/nvidia_init.gdb
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-14 06:43:11 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-14 06:43:11 -0400
commit5dd8165f1754e156a0f9fb16c7a6bfa90e99ed60 (patch)
tree7523e29d8044d4d5b6dcd7c1c888a3491137fcd1 /tools/gdb_scripts/nvidia_init.gdb
parent9a7263fce4e3156349a526631805fce66b87fb1b (diff)
downloadopen-iov-5dd8165f1754e156a0f9fb16c7a6bfa90e99ed60.tar.gz
open-iov-5dd8165f1754e156a0f9fb16c7a6bfa90e99ed60.zip
VFIO device registration fix + IOMMUFD callbacks + VFIO ioctl handlers
- Removed IOMMU group addition before vfio_register_emulated_iommu_dev() in nv_vgpu_mdev_create() - Added IOMMUFD callbacks (bind_iommufd, unbind_iommufd, attach_ioas, detach_ioas) using kernel's vfio_iommufd_emulated_* functions - Implemented VFIO ioctl handlers: GET_INFO, GET_REGION_INFO, GET_IRQ_INFO, SET_IRQS, MMAP - Added config space read/write handlers at offset 0x70000000000 - Mmap handler for config space, BAR0 (emulation shadow), BAR1-5 (physical VRAM/registers) - Interrupt handler for VFIO_DEVICE_SET_IRQS (DATA_EVENTFD, DATA_NONE, DATA_BOOL) - Added udev rules for vfio group permissions - Created stack_manager.sh unified tool - Fixed mdev remove crash with deferred cleanup in vfio_device_release callback - Kernel 6.8+ IOMMUFD compatibility - QEMU launches successfully with vGPU passthrough
Diffstat (limited to 'tools/gdb_scripts/nvidia_init.gdb')
-rw-r--r--tools/gdb_scripts/nvidia_init.gdb179
1 files changed, 179 insertions, 0 deletions
diff --git a/tools/gdb_scripts/nvidia_init.gdb b/tools/gdb_scripts/nvidia_init.gdb
new file mode 100644
index 0000000..c217419
--- /dev/null
+++ b/tools/gdb_scripts/nvidia_init.gdb
@@ -0,0 +1,179 @@
+# nvidia_init.gdb - GDB script for debugging NVIDIA driver initialization in guest
+# Usage: gdb -x nvidia_init.gdb ./vmlinux
+# Then: (gdb) target remote localhost:1234
+
+# ============================================================
+# CONFIGURATION
+# ============================================================
+# Path to guest kernel vmlinux with debug symbols
+# set pagination off
+# set confirm off
+
+# ============================================================
+# BREAKPOINTS - NVIDIA Driver Probe/Init
+# ============================================================
+
+# Core probe entry points
+break nvidia_probe
+break nvidia_init_module
+break nvidia_exit_module
+
+# GSP/RM initialization
+break nv_init_gsp
+break nv_gsp_init
+break nv_gsp_firmware_load
+break nv_gsp_bootstrap
+break nv_gsp_rpc_init
+
+# VFIO/mdev integration
+break nvidia_vgpu_vfio_get_ops
+break nvidia_vgpu_vfio_set_ops
+break nv_vgpu_mdev_register_parent
+break nv_vgpu_mdev_unregister_parent
+break nv_vgpu_create_callback
+break nv_vgpu_delete_callback
+break nv_vgpu_bar_info_callback
+break nv_vgpu_start_callback
+
+# PCI config space
+break nvidia_pci_probe
+break nvidia_pci_remove
+break pci_enable_device
+break pci_request_regions
+
+# MSI/MSI-X
+break pci_enable_msi_block
+break pci_enable_msix_range
+break nvidia_setup_msi
+break nvidia_setup_msix
+
+# BAR mapping
+break pci_iomap
+break pci_iounmap
+break nvidia_map_bars
+
+# Interrupt handling
+break request_threaded_irq
+break free_irq
+break nvidia_isr
+break nvidia_msi_isr
+break nvidia_msix_isr
+
+# DMA mapping
+break dma_map_page
+break dma_unmap_page
+break dma_map_sg
+break dma_unmap_sg
+
+# GSP RPC communication (OpenRM internal)
+break nv_gsp_rpc_send
+break nv_gsp_rpc_recv
+break nv_gsp_doorbell_ring
+break nv_gsp_doorbell_poll
+
+# ============================================================
+# WATCHPOINTS - Key Data Structures
+# ============================================================
+
+# Watch for GSP firmware load completion
+# watch *(int*)nv_gsp_fw_loaded
+
+# Watch for MSI-X table setup
+# watch *(int*)nv_msix_table_configured
+
+# ============================================================
+# COMMANDS - Helper Functions
+# ============================================================
+
+define nvidia_backtrace
+ bt
+ printf "\n=== NVIDIA Driver Stack ===\n"
+ info registers
+end
+document nvidia_backtrace
+ Show backtrace with register state for NVIDIA driver
+end
+
+define nvidia_pci_state
+ printf "=== PCI Config Space ===\n"
+ # Requires access to pci_dev structure
+ # p/x ((struct pci_dev*)$rdi)->vendor
+ # p/x ((struct pci_dev*)$rdi)->device
+ # p/x ((struct pci_dev*)$rdi)->command
+ # p/x ((struct pci_dev*)$rdi)->status
+end
+document nvidia_pci_state
+ Print PCI device state
+end
+
+define nvidia_gsp_state
+ printf "=== GSP State ===\n"
+ # p/x nv_gsp_fw_version
+ # p/x nv_gsp_fw_loaded
+ # p/x nv_gsp_rpc_initialized
+end
+document nvidia_gsp_state
+ Print GSP firmware state
+end
+
+define nvidia_vfio_state
+ printf "=== VFIO/mdev State ===\n"
+ # p/x nv_vgpu_mdev_registered
+ # p/x nv_vgpu_vfio_ops
+end
+document nvidia_vfio_state
+ Print VFIO/mdev registration state
+end
+
+# ============================================================
+# TRACEPOINTS (if kernel has tracepoints enabled)
+# ============================================================
+
+# trace nvidia:nvidia_probe_entry
+# trace nvidia:nvidia_probe_exit
+# trace nvidia:gsp_firmware_load
+# trace nvidia:gsp_rpc_send
+# trace nvidia:gsp_rpc_recv
+
+# ============================================================
+# AUTOMATION - Continue and Log
+# ============================================================
+
+# Log all breakpoint hits to file
+set logging file nvidia_init_debug.log
+set logging on
+
+# Auto-continue after logging (uncomment for automated runs)
+# set confirm off
+# commands 1
+# nvidia_backtrace
+# continue
+# end
+
+# ============================================================
+# CONVENIENCE ALIASES
+# ============================================================
+
+define hook-stop
+ # Print current function on every stop
+ printf "\n=== STOPPED at %s ===\n", __func__
+ # Print key state
+ # nvidia_gsp_state
+end
+
+# ============================================================
+# USAGE NOTES
+# ============================================================
+# 1. Compile guest kernel with CONFIG_DEBUG_INFO=y CONFIG_GDB_SCRIPTS=y
+# 2. Copy vmlinux from guest to host
+# 3. Launch QEMU: ./scripts/qemu_gdb_attach.sh
+# 4. In another terminal: gdb -x tools/gdb_scripts/nvidia_init.gdb ./vmlinux
+# 5. (gdb) target remote localhost:1234
+# 6. (gdb) continue
+#
+# For specific debugging:
+# - PCI probe issues: break nvidia_probe
+# - GSP firmware load: break nv_gsp_firmware_load
+# - MSI-X setup: break pci_enable_msix_range
+# - BAR mapping: break pci_iomap
+# - RPC communication: break nv_gsp_rpc_send \ No newline at end of file