<?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=The_Guest_Stack_and_CUDASW</id>
	<title>The Guest Stack and CUDASW - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=The_Guest_Stack_and_CUDASW"/>
	<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=The_Guest_Stack_and_CUDASW&amp;action=history"/>
	<updated>2026-10-12T06:40:14Z</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=The_Guest_Stack_and_CUDASW&amp;diff=23978&amp;oldid=prev</id>
		<title>WikiBot: Fix repository links: point to the cgit tree URLs</title>
		<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=The_Guest_Stack_and_CUDASW&amp;diff=23978&amp;oldid=prev"/>
		<updated>2026-10-12T04:40:56Z</updated>

		<summary type="html">&lt;p&gt;Fix repository links: point to the cgit tree URLs&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;= The Guest Stack and CUDASW =&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;= The Guest Stack and CUDASW =&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.''' What runs inside the guest, how the NVIDIA software layers sit on top of the device, and what the unmodified guest driver expects from the emulated GPU. 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/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;]; the docs tree wins on disagreement with this page.&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.''' What runs inside the guest, how the NVIDIA software layers sit on top of the device, and what the unmodified guest driver expects from the emulated GPU. 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/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;]; the docs tree wins on disagreement with this page.&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;[gated]&amp;lt;/code&amp;gt; implemented default-off behind supervised gates; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; known blocking limit; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; designed, not built; &amp;lt;code&amp;gt;[planned]&amp;lt;/code&amp;gt; roadmap.&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;[gated]&amp;lt;/code&amp;gt; implemented default-off behind supervised gates; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; known blocking limit; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; designed, not built; &amp;lt;code&amp;gt;[planned]&amp;lt;/code&amp;gt; roadmap.&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-l143&quot;&gt;Line 143:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 143:&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;* The guest's driver and the emulated firmware profile must agree on the RPC message versions. The guest negotiates these at start-up (&amp;lt;code&amp;gt;SET_GUEST_SYSTEM_INFO&amp;lt;/code&amp;gt; carries the VGX/RPC version); the emulation answers with a profile that matches the driver family in use.&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;* The guest's driver and the emulated firmware profile must agree on the RPC message versions. The guest negotiates these at start-up (&amp;lt;code&amp;gt;SET_GUEST_SYSTEM_INFO&amp;lt;/code&amp;gt; carries the VGX/RPC version); the emulation answers with a profile that matches the driver family in use.&lt;/div&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;* CUDA versions ride on driver versions; the test matrix tracks (driver, CUDA, firmware) triples ([https://git.vgpu.io/open-iov/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;blob/master&lt;/del&gt;/docs/05-operations/01-performance-correctness-security.md &amp;lt;code&amp;gt;../docs/05-operations/01-performance-correctness-security.md&amp;lt;/code&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;* CUDA versions ride on driver versions; the test matrix tracks (driver, CUDA, firmware) triples ([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/05-operations/01-performance-correctness-security.md &amp;lt;code&amp;gt;../docs/05-operations/01-performance-correctness-security.md&amp;lt;/code&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;== 9. 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;== 9. 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/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;] — canonical chapter.&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/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;] — canonical chapter.&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;* [[The Host Module (vgsp.ko)|&amp;lt;code&amp;gt;Host-Module.md&amp;lt;/code&amp;gt;]] — the other side of the boundary.&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;* [[The Host Module (vgsp.ko)|&amp;lt;code&amp;gt;Host-Module.md&amp;lt;/code&amp;gt;]] — the other side of the boundary.&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;* [[UVM in the Guest|&amp;lt;code&amp;gt;UVM-in-the-Guest.md&amp;lt;/code&amp;gt;]], [[CUDA Userspace Driver|&amp;lt;code&amp;gt;CUDA-Userspace-Driver.md&amp;lt;/code&amp;gt;]] — user-space driver internals.&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;* [[UVM in the Guest|&amp;lt;code&amp;gt;UVM-in-the-Guest.md&amp;lt;/code&amp;gt;]], [[CUDA Userspace Driver|&amp;lt;code&amp;gt;CUDA-Userspace-Driver.md&amp;lt;/code&amp;gt;]] — user-space driver internals.&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|&amp;lt;code&amp;gt;Driver-Lifecycle-Field-Guide.md&amp;lt;/code&amp;gt;]], [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] — the observed protocol reality.&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|&amp;lt;code&amp;gt;Driver-Lifecycle-Field-Guide.md&amp;lt;/code&amp;gt;]], [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] — the observed protocol reality.&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;* [[Physical GPU Backend and Guest Wiring|&amp;lt;code&amp;gt;Physical-GPU-Backend.md&amp;lt;/code&amp;gt;]], [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]] — where guest work is headed.&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;* [[Physical GPU Backend and Guest Wiring|&amp;lt;code&amp;gt;Physical-GPU-Backend.md&amp;lt;/code&amp;gt;]], [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]] — where guest work is headed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-23944:rev-23978 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://open-iov.org/index.php?title=The_Guest_Stack_and_CUDASW&amp;diff=23944&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=The_Guest_Stack_and_CUDASW&amp;diff=23944&amp;oldid=prev"/>
		<updated>2026-10-12T04:29:46Z</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;= The Guest Stack and CUDASW =&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;= The Guest Stack and CUDASW =&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-23864:rev-23944 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://open-iov.org/index.php?title=The_Guest_Stack_and_CUDASW&amp;diff=23864&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=The_Guest_Stack_and_CUDASW&amp;diff=23864&amp;oldid=prev"/>
		<updated>2026-10-12T04:22:10Z</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;= The Guest Stack and CUDASW =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Scope.''' What runs inside the guest, how the NVIDIA software layers sit on top of the device, and what the unmodified guest driver expects from the emulated GPU. Canonical source: [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;]; the docs tree wins on disagreement with this page.&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;[gated]&amp;lt;/code&amp;gt; implemented default-off behind supervised gates; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; known blocking limit; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; designed, not built; &amp;lt;code&amp;gt;[planned]&amp;lt;/code&amp;gt; roadmap.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 1. Vocabulary: what &amp;quot;CUDASW&amp;quot; means here ==&lt;br /&gt;
&lt;br /&gt;
'''CUDASW''' is the family of NVIDIA ''software'' components that sit between an application and the GPU driver. The project's compatibility target is the whole stack, not one library:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;application&lt;br /&gt;
   │  CUDA API (runtime)&lt;br /&gt;
libcudart.so ─────────────────────────────┐  runtime: device/stream/event&lt;br /&gt;
   │  CUDA driver API                    │  management, kernel launch&lt;br /&gt;
libcuda.so ───────────────────────────────┤  driver: contexts, modules,&lt;br /&gt;
   │  ioctls                             │  memory, channel submission&lt;br /&gt;
/dev/nvidia* ─────────────────────────────┘&lt;br /&gt;
nvidia.ko (RM + UVM + modeset)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adjacent members of the family: '''libnvidia-ptxjitcompiler''' (PTX→SASS JIT — usually &amp;quot;just works&amp;quot; once the driver initializes), '''libnvidia-fatbinaryloader / nvrtc''', '''UVM''' (&amp;lt;code&amp;gt;nvidia_uvm.ko&amp;lt;/code&amp;gt; — [[UVM in the Guest|&amp;lt;code&amp;gt;UVM-in-the-Guest.md&amp;lt;/code&amp;gt;]]), the '''graphics stack''' (&amp;lt;code&amp;gt;libGLX_nvidia&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;libnvidia-glcore&amp;lt;/code&amp;gt;, Vulkan ICD, &amp;lt;code&amp;gt;nvidia_modeset&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;nvidia_drm&amp;lt;/code&amp;gt;) and the '''video stack''' (NVENC/NVDEC) — both roadmapped.&lt;br /&gt;
&lt;br /&gt;
== 2. Layering rules the emulation must respect ==&lt;br /&gt;
&lt;br /&gt;
# '''The kernel driver is the contract.''' Everything above it talks to &amp;lt;code&amp;gt;nvidia.ko&amp;lt;/code&amp;gt; through stable ioctls, memory mappings and &amp;lt;code&amp;gt;/dev/nvidia*&amp;lt;/code&amp;gt; nodes. If the kernel driver initializes and behaves, user space follows.&lt;br /&gt;
# '''User space is opaque to us.''' We never intercept user-space APIs. All hooks are in the device model (host side) or in the ''hardware interface'' the kernel driver sees (guest side).&lt;br /&gt;
# '''Version skew is normal.''' Driver version, CUDA version and firmware version are three independent axes. The compatibility target is &amp;quot;the driver family that matches the emulated firmware profile&amp;quot;, with configuration-driven adaptation for others.&lt;br /&gt;
&lt;br /&gt;
== 3. Kernel-driver anatomy (what the guest brings) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component&lt;br /&gt;
! Role&lt;br /&gt;
! Why it matters here&lt;br /&gt;
|-&lt;br /&gt;
| RM core&lt;br /&gt;
| object model, handles, locks, device lifecycle&lt;br /&gt;
| drives the GSP boot and the whole RPC/control surface&lt;br /&gt;
|-&lt;br /&gt;
| Resource server (&amp;lt;code&amp;gt;resserv&amp;lt;/code&amp;gt;)&lt;br /&gt;
| allocates/tracks objects, memory, channels&lt;br /&gt;
| the client half of the client/server RM split&lt;br /&gt;
|-&lt;br /&gt;
| Memory manager (&amp;lt;code&amp;gt;memmgr&amp;lt;/code&amp;gt;)&lt;br /&gt;
| VRAM/sysmem objects, mappings, page tables&lt;br /&gt;
| the guest expects the GSP to own page-table leaves for its VA spaces&lt;br /&gt;
|-&lt;br /&gt;
| FIFO/runlist&lt;br /&gt;
| channels, TSGs, GPFIFO, USERD, doorbells&lt;br /&gt;
| where the guest's work is submitted&lt;br /&gt;
|-&lt;br /&gt;
| GSP client&lt;br /&gt;
| message queues, RPC transport, event handling&lt;br /&gt;
| the interface we emulate&lt;br /&gt;
|-&lt;br /&gt;
| UVM&lt;br /&gt;
| unified memory, page faults, channel manager&lt;br /&gt;
| starts early in CUDA init, extremely stateful&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nvidia_modeset&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;nvidia_drm&amp;lt;/code&amp;gt;&lt;br /&gt;
| display / DRM&lt;br /&gt;
| needed later for graphics&lt;br /&gt;
|-&lt;br /&gt;
| CE / GR HALs&lt;br /&gt;
| engine programming&lt;br /&gt;
| needed to ''execute'' forwarded work&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 4. Driver initialization vs runtime ==&lt;br /&gt;
&lt;br /&gt;
Understanding this split is the key to debugging.&lt;br /&gt;
&lt;br /&gt;
'''Initialization (boot/probe)''' — deterministic, mostly one-shot; where compatibility is won or lost [live]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;PCI probe → identify GPU from config space and BAR0 registers&lt;br /&gt;
   → boot the GSP (our emulated handshake)&lt;br /&gt;
   → read static configuration (device info tables, FB/BUS info, VBIOS, clocks)&lt;br /&gt;
   → create root client/device/subdevice objects&lt;br /&gt;
   → initialize RM subsystems (interrupts, FIFO, memory, GMMU, PMU)&lt;br /&gt;
   → expose /dev/nvidia* and register with the kernel&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual message/control IDs observed at each step are listed in [[Guest Driver Lifecycle: A Field Guide|&amp;lt;code&amp;gt;Driver-Lifecycle-Field-Guide.md&amp;lt;/code&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
'''Runtime (per-process, per-context)''' — driven by user-space workloads; where ''execution'' is won or lost:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;open /dev/nvidia* → cuInit → UVM registration (per process)&lt;br /&gt;
   → cuCtxCreate → object/allocations → memory maps&lt;br /&gt;
   → channel creation + push buffers + semaphores&lt;br /&gt;
   → kernel launches (GR) / copies (CE) / memops&lt;br /&gt;
   → faults, completions, events&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Context creation and the full CUDA driver-API smoke now pass (&amp;lt;code&amp;gt;ALL OK&amp;lt;/code&amp;gt;, copies matched) [live]. The current focus is execution: the backend is a '''module-owned GPU running its real GSP firmware as the resource-manager server''' ([[Physical GPU Backend and Guest Wiring|&amp;lt;code&amp;gt;Physical-GPU-Backend.md&amp;lt;/code&amp;gt;]]), with CE-class copies forwarded to the physical copy engine default-off [gated]. For GR, a forwarded guest launch reaches the front-end but the inline launch-descriptor install has not been observed — the open execution wall ([[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]]) [wall].&lt;br /&gt;
&lt;br /&gt;
== 5. What the guest expects from the device, per phase ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Phase&lt;br /&gt;
! Guest action&lt;br /&gt;
! Device/firmware expectation&lt;br /&gt;
|-&lt;br /&gt;
| Probe&lt;br /&gt;
| config space reads, BAR sizing, MSI-X capability&lt;br /&gt;
| a plausible TU104-family PCIe GPU&lt;br /&gt;
|-&lt;br /&gt;
| Boot&lt;br /&gt;
| BAR0 register writes, WPR setup, firmware boot sequence&lt;br /&gt;
| GSP boots, booter completes, &amp;quot;GSP init done&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Config&lt;br /&gt;
| RPC &amp;lt;code&amp;gt;GET_GSP_STATIC_INFO&amp;lt;/code&amp;gt;, device tables, VBIOS reads&lt;br /&gt;
| consistent, self-describing tables&lt;br /&gt;
|-&lt;br /&gt;
| RM init&lt;br /&gt;
| &amp;lt;code&amp;gt;GSP_RM_CONTROL&amp;lt;/code&amp;gt; battery (FB/BUS/CE/INTR/GMMU/...)&lt;br /&gt;
| correct shapes and plausible values&lt;br /&gt;
|-&lt;br /&gt;
| Objects&lt;br /&gt;
| &amp;lt;code&amp;gt;GSP_RM_ALLOC&amp;lt;/code&amp;gt; (root, device, subdevice, vaspace, channel, CE objects)&lt;br /&gt;
| success + correct handles/params&lt;br /&gt;
|-&lt;br /&gt;
| Runtime&lt;br /&gt;
| allocs/controls for maps and channels; pushes&lt;br /&gt;
| executed work, semaphores, faults&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The RPC surface is described in [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] and [[RPC Message Format|&amp;lt;code&amp;gt;RPC-Message-Format.md&amp;lt;/code&amp;gt;]]; the boot handshake in [[WPR Management|&amp;lt;code&amp;gt;WPR-Management.md&amp;lt;/code&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
== 6. Why user-space-only interception does not work ==&lt;br /&gt;
&lt;br /&gt;
Two hard-won facts from this project:&lt;br /&gt;
&lt;br /&gt;
# '''&amp;lt;code&amp;gt;libcuda&amp;lt;/code&amp;gt; issues raw &amp;lt;code&amp;gt;syscall&amp;lt;/code&amp;gt; instructions''', so an &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt; shim around &amp;lt;code&amp;gt;ioctl()&amp;lt;/code&amp;gt; sees nothing. Observing CUDA's kernel calls requires a &amp;lt;code&amp;gt;ptrace&amp;lt;/code&amp;gt;-based tracer (PTRACE_SYSCALL + PTRACE_GET_SYSCALL_INFO), as the project's diagnostics do.&lt;br /&gt;
# **The CUDA driver talks to the ''kernel driver'', not to the device.** All device interaction happens in &amp;lt;code&amp;gt;nvidia.ko&amp;lt;/code&amp;gt;. This is good news: the emulation boundary is a small set of kernel-side interfaces (MMIO, DMA, interrupts, the GSP protocol) rather than a large user-space API surface.&lt;br /&gt;
&lt;br /&gt;
== 7. Windows guests ==&lt;br /&gt;
&lt;br /&gt;
Windows brings its own kernel-mode driver, &amp;lt;code&amp;gt;nvlddmkm.sys&amp;lt;/code&amp;gt;, which uses the same underlying GSP device/firmware model but different host interfaces (WDDM, MSI-X semantics, ROM/VBIOS quirks). The emulation target is the same: satisfy the firmware interface, forward the work. Windows support is a roadmap item ([[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]]) [planned], and the design goal is that no Windows-specific code lives in the guest.&lt;br /&gt;
&lt;br /&gt;
== 8. Compatibility notes for versions ==&lt;br /&gt;
&lt;br /&gt;
* The guest's driver and the emulated firmware profile must agree on the RPC message versions. The guest negotiates these at start-up (&amp;lt;code&amp;gt;SET_GUEST_SYSTEM_INFO&amp;lt;/code&amp;gt; carries the VGX/RPC version); the emulation answers with a profile that matches the driver family in use.&lt;br /&gt;
* CUDA versions ride on driver versions; the test matrix tracks (driver, CUDA, firmware) triples ([https://git.vgpu.io/open-iov/blob/master/docs/05-operations/01-performance-correctness-security.md &amp;lt;code&amp;gt;../docs/05-operations/01-performance-correctness-security.md&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
== 9. Related documentation ==&lt;br /&gt;
&lt;br /&gt;
* [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/02-guest-stack-and-cudasw.md &amp;lt;code&amp;gt;../docs/03-architecture/02-guest-stack-and-cudasw.md&amp;lt;/code&amp;gt;] — canonical chapter.&lt;br /&gt;
* [[The Host Module (vgsp.ko)|&amp;lt;code&amp;gt;Host-Module.md&amp;lt;/code&amp;gt;]] — the other side of the boundary.&lt;br /&gt;
* [[UVM in the Guest|&amp;lt;code&amp;gt;UVM-in-the-Guest.md&amp;lt;/code&amp;gt;]], [[CUDA Userspace Driver|&amp;lt;code&amp;gt;CUDA-Userspace-Driver.md&amp;lt;/code&amp;gt;]] — user-space driver internals.&lt;br /&gt;
* [[Guest Driver Lifecycle: A Field Guide|&amp;lt;code&amp;gt;Driver-Lifecycle-Field-Guide.md&amp;lt;/code&amp;gt;]], [[GSP and GSP-RM|&amp;lt;code&amp;gt;GSP-and-GSP-RM.md&amp;lt;/code&amp;gt;]] — the observed protocol reality.&lt;br /&gt;
* [[Physical GPU Backend and Guest Wiring|&amp;lt;code&amp;gt;Physical-GPU-Backend.md&amp;lt;/code&amp;gt;]], [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]] — where guest work is headed.&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>