<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=Guest_Driver_Lifecycle%3A_A_Field_Guide</id>
	<title>Guest Driver Lifecycle: A Field Guide - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=Guest_Driver_Lifecycle%3A_A_Field_Guide"/>
	<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;action=history"/>
	<updated>2026-10-12T06:46:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;diff=23964&amp;oldid=prev</id>
		<title>WikiBot: Fix repository links: point to the cgit tree URLs (git.vgpu.io/open-iov.git/tree/...)</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;diff=23964&amp;oldid=prev"/>
		<updated>2026-10-12T04:40:06Z</updated>

		<summary type="html">&lt;p&gt;Fix repository links: point to the cgit tree URLs (git.vgpu.io/open-iov.git/tree/...)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:40, 12 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Guest Driver Lifecycle: A Field Guide =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Guest Driver Lifecycle: A Field Guide =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;'''Scope.''' A walking tour of what happens between &amp;quot;guest boots&amp;quot; and &amp;quot;CUDA initializes&amp;quot;, using message, function and control IDs observed from an unmodified 570.144 guest. Canonical source: [https://git.vgpu.io/open-iov/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;blob/master&lt;/del&gt;/docs/03-architecture/07-driver-lifecycle-field-guide.md &amp;lt;code&amp;gt;../docs/03-architecture/07-driver-lifecycle-field-guide.md&amp;lt;/code&amp;gt;]; if this page and the docs tree disagree, the docs tree wins.&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;'''Scope.''' A walking tour of what happens between &amp;quot;guest boots&amp;quot; and &amp;quot;CUDA initializes&amp;quot;, using message, function and control IDs observed from an unmodified 570.144 guest. Canonical source: [https://git.vgpu.io/open-iov&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.git&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tree&lt;/ins&gt;/docs/03-architecture/07-driver-lifecycle-field-guide.md &amp;lt;code&amp;gt;../docs/03-architecture/07-driver-lifecycle-field-guide.md&amp;lt;/code&amp;gt;]; if this page and the docs tree disagree, the docs tree wins.&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;Status: 2026-10-12, tree &amp;lt;code&amp;gt;master @ 2f066727&amp;lt;/code&amp;gt;. Tags: &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt; observed with the stock guest driver; &amp;lt;code&amp;gt;[design]&amp;lt;/code&amp;gt; stages documented ahead of arrival.&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;Status: 2026-10-12, tree &amp;lt;code&amp;gt;master @ 2f066727&amp;lt;/code&amp;gt;. Tags: &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt; observed with the stock guest driver; &amp;lt;code&amp;gt;[design]&amp;lt;/code&amp;gt; stages documented ahead of arrival.&amp;lt;/blockquote&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l200&quot;&gt;Line 200:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 200:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 11. Related documentation ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 11. Related documentation ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://git.vgpu.io/open-iov/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;blob/master&lt;/del&gt;/docs/03-architecture/07-driver-lifecycle-field-guide.md &amp;lt;code&amp;gt;../docs/03-architecture/07-driver-lifecycle-field-guide.md&amp;lt;/code&amp;gt;] — canonical field guide.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://git.vgpu.io/open-iov&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.git&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tree&lt;/ins&gt;/docs/03-architecture/07-driver-lifecycle-field-guide.md &amp;lt;code&amp;gt;../docs/03-architecture/07-driver-lifecycle-field-guide.md&amp;lt;/code&amp;gt;] — canonical field guide.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] — GSP boot, message queues and RM architecture.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] — GSP boot, message queues and RM architecture.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[GSP RPC Emulation|&amp;lt;code&amp;gt;GSP-RPC-Emulation.md&amp;lt;/code&amp;gt;]] — control/alloc emulation on the host side.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[GSP RPC Emulation|&amp;lt;code&amp;gt;GSP-RPC-Emulation.md&amp;lt;/code&amp;gt;]] — control/alloc emulation on the host side.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;diff=23935&amp;oldid=prev</id>
		<title>WikiBot: Carry the site-wide About/licensing message on every page (2026-10-12)</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;diff=23935&amp;oldid=prev"/>
		<updated>2026-10-12T04:29:42Z</updated>

		<summary type="html">&lt;p&gt;Carry the site-wide About/licensing message on every page (2026-10-12)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:29, 12 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{About message}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Guest Driver Lifecycle: A Field Guide =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Guest Driver Lifecycle: A Field Guide =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-23860:rev-23935 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;diff=23860&amp;oldid=prev</id>
		<title>WikiBot: Add page from tracked wiki source (2026 IA update)</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Guest_Driver_Lifecycle:_A_Field_Guide&amp;diff=23860&amp;oldid=prev"/>
		<updated>2026-10-12T04:22:06Z</updated>

		<summary type="html">&lt;p&gt;Add page from tracked wiki source (2026 IA update)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Guest Driver Lifecycle: A Field Guide =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Scope.''' A walking tour of what happens between &amp;quot;guest boots&amp;quot; and &amp;quot;CUDA initializes&amp;quot;, using message, function and control IDs observed from an unmodified 570.144 guest. Canonical source: [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/07-driver-lifecycle-field-guide.md &amp;lt;code&amp;gt;../docs/03-architecture/07-driver-lifecycle-field-guide.md&amp;lt;/code&amp;gt;]; if this page and the docs tree disagree, the docs tree wins.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Status: 2026-10-12, tree &amp;lt;code&amp;gt;master @ 2f066727&amp;lt;/code&amp;gt;. Tags: &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt; observed with the stock guest driver; &amp;lt;code&amp;gt;[design]&amp;lt;/code&amp;gt; stages documented ahead of arrival.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. How to read this page ==&lt;br /&gt;
&lt;br /&gt;
Each stage lists what the '''guest''' does, what the '''device/firmware''' must answer, what host emulation does today, and the log signature to look for (host-side &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; with prefixes &amp;lt;code&amp;gt;vgsp:&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;vgsp-rm:&amp;lt;/code&amp;gt;; guest-side &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; in the VM). IDs are for 570.144 on the Turing (TU104) profile; other generations add IDs and change versioned values, but the ''stages'' are stable.&lt;br /&gt;
&lt;br /&gt;
== 2. Stage map ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;guest boots&lt;br /&gt;
  │&lt;br /&gt;
  ├─ 1. PCI probe &amp;amp;amp; config space ........ lspci is the reference&lt;br /&gt;
  ├─ 2. GSP boot handshake .............. WPR, FWSEC, booter, RISC-V core&lt;br /&gt;
  ├─ 3. Static configuration ............ GET_GSP_STATIC_INFO (65)&lt;br /&gt;
  ├─ 4. Message queues .................. SET_GUEST_SYSTEM_INFO (1) + init traffic&lt;br /&gt;
  ├─ 5. RM control battery .............. GSP_RM_CONTROL (76) × ~160&lt;br /&gt;
  ├─ 6. Object creation ................. GSP_RM_ALLOC (103) × ~60&lt;br /&gt;
  └─ 7. UVM registration/context ........ cuInit → channel manager → execution frontier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3. PCI probe and config space ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' reads IDs, walks capabilities, sizes BARs, enables Memory Space and Bus Master, programs MSI-X. '''Device must:''' report a coherent TU104-family GPU with 16 MB BAR0, 256 MB BAR1, an MSI-X capability and a link capability the driver accepts. '''Emulation:''' config space is synthesized and BAR sizes are enforced. The hypervisor is the usual source of surprises — a device on the root bus can have its PCIe capability rewritten to &amp;quot;root complex integrated endpoint&amp;quot;, removing link information the driver wants; attach behind a root port. '''Log:''' guest-side &amp;lt;code&amp;gt;lspci -vvv&amp;lt;/code&amp;gt; is the reference.&lt;br /&gt;
&lt;br /&gt;
== 4. GSP boot handshake ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' writes WPR descriptors, releases FWSEC, then the booter, then the RISC-V core; polls a status mailbox for &amp;quot;GSP init done&amp;quot;. '''Device must:''' complete every stage in the order the driver polls and leave the mailbox in the state the driver expects. '''Emulation:''' the host module models the stage state machine and auto-clears self-clearing triggers (e.g. MMU invalidate registers) so polls terminate.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgsp: GSP-BOOT: ... trigger auto-cleared ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Static configuration ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' &amp;lt;code&amp;gt;GET_GSP_STATIC_INFO&amp;lt;/code&amp;gt; (65) → a large &amp;lt;code&amp;gt;GspStaticConfigInfo&amp;lt;/code&amp;gt; structure; reads the VBIOS image from the BAR0 window; queries device/FB/BUS info. '''Device must:''' provide self-consistent sizes, engine inventories, memory geometry, interrupt topology and a parseable VBIOS blob. '''Emulation:''' the static structures are synthesized for TU104 (FB size, BAR layout, engine list, vGPU-friendly VF values).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgsp-rm: GET_GSP_STATIC_INFO → ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Message queues ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' sends &amp;lt;code&amp;gt;SET_GUEST_SYSTEM_INFO&amp;lt;/code&amp;gt; (1) with libos regions, a queue buffer description and a page table (the buffer is &amp;lt;code&amp;gt;NV_MEMORY_NONCONTIGUOUS&amp;lt;/code&amp;gt;); also &amp;lt;code&amp;gt;GSP_SET_SYSTEM_INFO&amp;lt;/code&amp;gt; (72), &amp;lt;code&amp;gt;SET_REGISTRY&amp;lt;/code&amp;gt; (73) and &amp;lt;code&amp;gt;CONTINUATION_RECORD&amp;lt;/code&amp;gt; (71) as init traffic. '''Device must:''' consume them silently (async) and consume the command queue exactly in the guest's write order. '''Emulation:''' parses the queue chain, builds the geometry, links the status queue and consumes elements one by one — '''element-based, not byte-stream-based''': one message is one element and may span pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgsp: libos region[i] id8=... pa=... size=...&lt;br /&gt;
vgsp: queue args sharedPA=... ptes=... cmdOff=... statOff=...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 7. The RM control battery ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' sends &amp;lt;code&amp;gt;GSP_RM_CONTROL&amp;lt;/code&amp;gt; (76) for every subsystem it initializes. Of the ~160 observed control IDs, 23 are special-cased with real values; the rest are answered with a generic &amp;lt;code&amp;gt;SUCCESS&amp;lt;/code&amp;gt; and zeroed params (the fallback).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Control&lt;br /&gt;
! Meaning&lt;br /&gt;
! What matters&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20800a40&amp;lt;/code&amp;gt; family&lt;br /&gt;
| internal device info table&lt;br /&gt;
| per-index values, entry count&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20801112&amp;lt;/code&amp;gt;&lt;br /&gt;
| FIFO device info table&lt;br /&gt;
| engine inventory; count must match engine queries&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20800a5c&amp;lt;/code&amp;gt;&lt;br /&gt;
| interrupt kernel table&lt;br /&gt;
| vector topology the driver maps&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20800a59&amp;lt;/code&amp;gt;&lt;br /&gt;
| GMMU static info&lt;br /&gt;
| fault buffer sizes; a wrong value breaks UVM early&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20800a01&amp;lt;/code&amp;gt;&lt;br /&gt;
| display static info&lt;br /&gt;
| display count; headless values are fine&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20801823/-a/-b&amp;lt;/code&amp;gt;&lt;br /&gt;
| BUS/FB info V2&lt;br /&gt;
| sysmem connection type and PCIe link caps feed bandwidth math&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20802a07&amp;lt;/code&amp;gt;&lt;br /&gt;
| CE physical caps&lt;br /&gt;
| per-engine bits; UVM refuses channels without &amp;lt;code&amp;gt;sysmem&amp;lt;/code&amp;gt; support&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20802a0a/0b&amp;lt;/code&amp;gt;&lt;br /&gt;
| all-CE caps&lt;br /&gt;
| caps table for all engines&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20802a02&amp;lt;/code&amp;gt;&lt;br /&gt;
| CE PCE mask&lt;br /&gt;
| one bit per engine&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20802a08&amp;lt;/code&amp;gt;&lt;br /&gt;
| CE fault method buffer size&lt;br /&gt;
| method buffer sizing&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x90f10106&amp;lt;/code&amp;gt;&lt;br /&gt;
| vaspace reserved-PDE contract&lt;br /&gt;
| carries page-table physical addresses (see [[GSP RPC Emulation|&amp;lt;code&amp;gt;GSP-RPC-Emulation.md&amp;lt;/code&amp;gt;]])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20800123&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;0x20800170&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;GPU_GET_ENGINES&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;GET_ENGINES_V2&amp;lt;/code&amp;gt;&lt;br /&gt;
| engine inventory; the guest must see the full list, including async copy (&amp;lt;code&amp;gt;COPY14&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x800201&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;GPU_GET_CLASSLIST&amp;lt;/code&amp;gt;&lt;br /&gt;
| class list; must agree with engine list and CE caps&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x2080012b&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;GPU_PROMOTE_CTX&amp;lt;/code&amp;gt; (560-byte params)&lt;br /&gt;
| load-bearing GR context-validity operation; a wrong shape is a server wedge handled by the supervised fail-safe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20803039&amp;lt;/code&amp;gt;&lt;br /&gt;
| NVLink masks/VBIOS info&lt;br /&gt;
| fallback: generic &amp;lt;code&amp;gt;SUCCESS&amp;lt;/code&amp;gt; with zeroed params&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0x20800a70&amp;lt;/code&amp;gt;&lt;br /&gt;
| BUS flush with sysmembar&lt;br /&gt;
| fallback: generic &amp;lt;code&amp;gt;SUCCESS&amp;lt;/code&amp;gt; with zeroed params; UVM issues these often&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgsp-rm: GSP_RM_CONTROL cmd=0x... hClient=0x... hObject=0x... paramsSize=...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 8. Object creation ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' &amp;lt;code&amp;gt;GSP_RM_ALLOC&amp;lt;/code&amp;gt; (103) creates the object tree. Typical order for a CUDA process:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0x0        NV01_ROOT              (client root, 120-byte params)&lt;br /&gt;
0x80       NV01_DEVICE_0          (56 bytes)&lt;br /&gt;
0x2080     NV20_SUBDEVICE_0       (4 bytes)&lt;br /&gt;
0x90f1     FERMI_VASPACE_A        (48 bytes)  ← the GPU address space&lt;br /&gt;
0xa06c     KEPLER_CHANNEL_GROUP_A (20 bytes)  ← CE channel group&lt;br /&gt;
0xc46f     TURING_CHANNEL_GPFIFO_A(368 bytes) ← the channel (GPFIFO VA, instance/userd descriptors)&lt;br /&gt;
0xc076     GP100_UVM_SW           (0 bytes)&lt;br /&gt;
0xc5b5     TURING_DMA_COPY_A      (8 bytes)   ← CE object&lt;br /&gt;
0xc5c0     TURING_COMPUTE_A       (16 bytes)  ← compute object (engine registration path)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A hard-won rule from the &amp;lt;code&amp;gt;TURING_COMPUTE_A&amp;lt;/code&amp;gt; (0xc5c0) alloc: the caller may issue it with &amp;lt;code&amp;gt;paramsSize=0&amp;lt;/code&amp;gt; against a small stack local while the kernel side treats the class params as 16 bytes and copies reply params back. The emulation must '''echo the request params back in the alloc reply''', or the user-mode client segfaults. Channel parameters decode into &amp;lt;code&amp;gt;gpFifoOffset&amp;lt;/code&amp;gt; (a GPU VA), &amp;lt;code&amp;gt;gpFifoEntries&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;engineType&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;COPY0 = 0x9&amp;lt;/code&amp;gt;), and &amp;lt;code&amp;gt;NV_MEMORY_DESC_PARAMS&amp;lt;/code&amp;gt; for instance/userd/ramfc/method buffers with '''physical''' addresses and apertures (&amp;lt;code&amp;gt;ADDR_SYSMEM = 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ADDR_FBMEM = 2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgsp-rm: GSP_RM_ALLOC class=0x... paramsSize=... hClient=... hParent=... hObject=...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 9. UVM registration and the execution frontier ==&lt;br /&gt;
&lt;br /&gt;
'''Guest:''' &amp;lt;code&amp;gt;cuInit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;UVM_REGISTER_GPU&amp;lt;/code&amp;gt; → channel-manager creation → page-tree initialization; each UVM channel does a first push and waits on a semaphore. '''Emulation today:''' the host decodes the pushes UVM generates and executes their memsets, copies and semaphore releases in software by translating the semaphore VA to a guest physical address — a bridge, not forwarding: no work reaches the physical GPU through it yet.&lt;br /&gt;
&lt;br /&gt;
'''Progress:''' context creation now returns (the driver-API smoke completes end to end) and the frontier is execution. The host GR ladder allocates a GR0 channel and a compute-class object; a first semaphore push against an uncommitted GR context faulted &amp;lt;code&amp;gt;CTXNOTVALID&amp;lt;/code&amp;gt;, and a following &amp;lt;code&amp;gt;GPU_PROMOTE_CTX&amp;lt;/code&amp;gt; wedged GSP-RM into its designed locked fail-safe. Later, a forwarded guest CUDA launch reached the front-end (ring entry fetched, methods executed) with no observed inline launch-descriptor install and no grid dispatched; context validity at dispatch is ruled out. See [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]]. The roadmap from here is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;UVM registers → cuInit returns → context creation → memory allocation&lt;br /&gt;
→ channel creation for the process → kernel launch → (real execution)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each remaining step needs the same treatment: satisfy the interface, forward the work, relay the completions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nvidia-uvm: ... Tracker entry for value N (sema VA 0x...) channel ID ... CE ...&lt;br /&gt;
nvidia-uvm: ... pending push '' started at ... in channel_init() releasing value N&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10. Quick reference: function IDs from a stock 570.144 guest ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function&lt;br /&gt;
! Name&lt;br /&gt;
! Frequency per CUDA run (approx.)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| SET_GUEST_SYSTEM_INFO&lt;br /&gt;
| once&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| FREE&lt;br /&gt;
| ~14&lt;br /&gt;
|-&lt;br /&gt;
| 47&lt;br /&gt;
| UNLOADING_GUEST_DRIVER&lt;br /&gt;
| on unload&lt;br /&gt;
|-&lt;br /&gt;
| 65&lt;br /&gt;
| GET_GSP_STATIC_INFO&lt;br /&gt;
| once&lt;br /&gt;
|-&lt;br /&gt;
| 70&lt;br /&gt;
| UPDATE_BAR_PDE&lt;br /&gt;
| a few&lt;br /&gt;
|-&lt;br /&gt;
| 71/72/73&lt;br /&gt;
| CONTINUATION_RECORD / GSP_SET_SYSTEM_INFO / SET_REGISTRY&lt;br /&gt;
| once each&lt;br /&gt;
|-&lt;br /&gt;
| 76&lt;br /&gt;
| GSP_RM_CONTROL&lt;br /&gt;
| ~160&lt;br /&gt;
|-&lt;br /&gt;
| 103&lt;br /&gt;
| GSP_RM_ALLOC&lt;br /&gt;
| ~60&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If a new driver version produces '''new function numbers''', do not guess: add a handler that logs the raw payload, then decode it against that version's observed traffic.&lt;br /&gt;
&lt;br /&gt;
== 11. Related documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/07-driver-lifecycle-field-guide.md &amp;lt;code&amp;gt;../docs/03-architecture/07-driver-lifecycle-field-guide.md&amp;lt;/code&amp;gt;] — canonical field guide.&lt;br /&gt;
* [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] — GSP boot, message queues and RM architecture.&lt;br /&gt;
* [[GSP RPC Emulation|&amp;lt;code&amp;gt;GSP-RPC-Emulation.md&amp;lt;/code&amp;gt;]] — control/alloc emulation on the host side.&lt;br /&gt;
* [[RPC Message Format|&amp;lt;code&amp;gt;RPC-Message-Format.md&amp;lt;/code&amp;gt;]] — wire format of the function 76/103 traffic.&lt;br /&gt;
* [[Address Reference|&amp;lt;code&amp;gt;Address-Reference.md&amp;lt;/code&amp;gt;]] and [[GSP 570.144W Firmware Analysis|&amp;lt;code&amp;gt;GSP-570.144W-Firmware-Analysis.md&amp;lt;/code&amp;gt;]] — ID reference and the firmware they belong to.&lt;br /&gt;
* [[UVM in the Guest|&amp;lt;code&amp;gt;UVM-in-the-Guest.md&amp;lt;/code&amp;gt;]], [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]], [[The Host Module (vgsp.ko)|&amp;lt;code&amp;gt;Host-Module.md&amp;lt;/code&amp;gt;]], [[Physical GPU Backend and Guest Wiring|&amp;lt;code&amp;gt;Physical-GPU-Backend.md&amp;lt;/code&amp;gt;]] — registration, the frontier, the host stages and the forwarding backend.&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>