<?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=Physical_GPU_Backend_and_Guest_Wiring</id>
	<title>Physical GPU Backend and Guest Wiring - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://open-iov.org/index.php?action=history&amp;feed=atom&amp;title=Physical_GPU_Backend_and_Guest_Wiring"/>
	<link rel="alternate" type="text/html" href="https://open-iov.org/index.php?title=Physical_GPU_Backend_and_Guest_Wiring&amp;action=history"/>
	<updated>2026-10-12T06:49:01Z</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=Physical_GPU_Backend_and_Guest_Wiring&amp;diff=23985&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=Physical_GPU_Backend_and_Guest_Wiring&amp;diff=23985&amp;oldid=prev"/>
		<updated>2026-10-12T04:40:59Z</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;= Physical GPU Backend and Guest Wiring =&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 =&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.''' The design that executes guest work on the real GPU: why the host driver cannot be the path and how the live GSP-RM session is wired to the guest-facing emulation. Canonical sources: [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/08-physical-gpu-integration.md &amp;lt;code&amp;gt;../docs/03-architecture/08-physical-gpu-integration.md&amp;lt;/code&amp;gt;] and [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/11-physical-backend-guest-wiring.md &amp;lt;code&amp;gt;../docs/03-architecture/11-physical-backend-guest-wiring.md&amp;lt;/code&amp;gt;]; the docs tree wins on disagreement.&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.''' The design that executes guest work on the real GPU: why the host driver cannot be the path and how the live GSP-RM session is wired to the guest-facing emulation. Canonical sources: [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/08-physical-gpu-integration.md &amp;lt;code&amp;gt;../docs/03-architecture/08-physical-gpu-integration.md&amp;lt;/code&amp;gt;] and [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/11-physical-backend-guest-wiring.md &amp;lt;code&amp;gt;../docs/03-architecture/11-physical-backend-guest-wiring.md&amp;lt;/code&amp;gt;]; the docs tree wins on disagreement.&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;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; proven with the stock guest driver; &amp;lt;code&amp;gt;[gated]&amp;lt;/code&amp;gt; implemented default-off; &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt; partially built; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; current blocker; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; planned end state.&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;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; proven with the stock guest driver; &amp;lt;code&amp;gt;[gated]&amp;lt;/code&amp;gt; implemented default-off; &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt; partially built; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; current blocker; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; planned end state.&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-l153&quot;&gt;Line 153:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 153:&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/08-physical-gpu-integration.md &amp;lt;code&amp;gt;../docs/03-architecture/08-physical-gpu-integration.md&amp;lt;/code&amp;gt;] — canonical: mechanism choice and device bring-up.&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/08-physical-gpu-integration.md &amp;lt;code&amp;gt;../docs/03-architecture/08-physical-gpu-integration.md&amp;lt;/code&amp;gt;] — canonical: mechanism choice and device bring-up.&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;* [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/11-physical-backend-guest-wiring.md &amp;lt;code&amp;gt;../docs/03-architecture/11-physical-backend-guest-wiring.md&amp;lt;/code&amp;gt;] — canonical: the guest-wiring design.&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/11-physical-backend-guest-wiring.md &amp;lt;code&amp;gt;../docs/03-architecture/11-physical-backend-guest-wiring.md&amp;lt;/code&amp;gt;] — canonical: the guest-wiring design.&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 Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]], [[The vGSP Execution Plane (vEP)|&amp;lt;code&amp;gt;Execution-Plane.md&amp;lt;/code&amp;gt;]] — the GR wall and the software execution plane.&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 Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]], [[The vGSP Execution Plane (vEP)|&amp;lt;code&amp;gt;Execution-Plane.md&amp;lt;/code&amp;gt;]] — the GR wall and the software execution plane.&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 module that owns both planes.&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 module that owns both planes.&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;* [[Introduction to GMMU|&amp;lt;code&amp;gt;Introduction-to-GMMU.md&amp;lt;/code&amp;gt;]] — page-table seams and scratch mappings.&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;* [[Introduction to GMMU|&amp;lt;code&amp;gt;Introduction-to-GMMU.md&amp;lt;/code&amp;gt;]] — page-table seams and scratch mappings.&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;* [[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]], [[Project Status|&amp;lt;code&amp;gt;Project-Status.md&amp;lt;/code&amp;gt;]] — support scope and the honest status picture.&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;* [[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]], [[Project Status|&amp;lt;code&amp;gt;Project-Status.md&amp;lt;/code&amp;gt;]] — support scope and the honest status picture.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-23951:rev-23985 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://open-iov.org/index.php?title=Physical_GPU_Backend_and_Guest_Wiring&amp;diff=23951&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=Physical_GPU_Backend_and_Guest_Wiring&amp;diff=23951&amp;oldid=prev"/>
		<updated>2026-10-12T04:29:50Z</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;= Physical GPU Backend and Guest Wiring =&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 =&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-23869:rev-23951 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
	<entry>
		<id>https://open-iov.org/index.php?title=Physical_GPU_Backend_and_Guest_Wiring&amp;diff=23869&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=Physical_GPU_Backend_and_Guest_Wiring&amp;diff=23869&amp;oldid=prev"/>
		<updated>2026-10-12T04:22:13Z</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;= Physical GPU Backend and Guest Wiring =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;'''Scope.''' The design that executes guest work on the real GPU: why the host driver cannot be the path and how the live GSP-RM session is wired to the guest-facing emulation. Canonical sources: [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/08-physical-gpu-integration.md &amp;lt;code&amp;gt;../docs/03-architecture/08-physical-gpu-integration.md&amp;lt;/code&amp;gt;] and [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/11-physical-backend-guest-wiring.md &amp;lt;code&amp;gt;../docs/03-architecture/11-physical-backend-guest-wiring.md&amp;lt;/code&amp;gt;]; the docs tree wins on disagreement.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&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; proven with the stock guest driver; &amp;lt;code&amp;gt;[gated]&amp;lt;/code&amp;gt; implemented default-off; &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt; partially built; &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; current blocker; &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt; planned end state.&lt;br /&gt;
&lt;br /&gt;
== 1. The problem and its constraints ==&lt;br /&gt;
&lt;br /&gt;
The guest's real work (copies, memory operations, grid launches) must execute on the physical GPU. The constraints: one DKMS kernel module on the host, no daemon and no new host userspace; host and guest drivers unmodified, with no paravirtual enlightenment in the guest; all emulation and translation logic inside the module; and real execution — compute is not emulated in software.&lt;br /&gt;
&lt;br /&gt;
== 2. Why the host driver is not the path ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Interface&lt;br /&gt;
! What it offers&lt;br /&gt;
! Reachable from our module?&lt;br /&gt;
|-&lt;br /&gt;
| Host driver (distribution build)&lt;br /&gt;
| resource management, scheduling, memory&lt;br /&gt;
| No — no general RM entry points for third-party modules, no kernel-client interface, user-pointer ioctl surface&lt;br /&gt;
|-&lt;br /&gt;
| Host driver peer-memory exports&lt;br /&gt;
| pin/map memory for peer devices&lt;br /&gt;
| Partially — memory only, no submission&lt;br /&gt;
|-&lt;br /&gt;
| Vendor vGPU host stack&lt;br /&gt;
| mediated work submission and scheduling&lt;br /&gt;
| Requires the licensed vGPU host branch and a vGPU-aware guest — excluded&lt;br /&gt;
|-&lt;br /&gt;
| SR-IOV virtual functions&lt;br /&gt;
| hardware-partitioned device&lt;br /&gt;
| Not available on this GPU generation&lt;br /&gt;
|-&lt;br /&gt;
| The GPU's own GSP firmware&lt;br /&gt;
| the resource manager server itself&lt;br /&gt;
| Yes — once the module owns the device; this is the path used&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
With an unmodified host driver there is no callable submission interface into it, so the module must own the device and talk to the hardware itself.&lt;br /&gt;
&lt;br /&gt;
== 3. Mechanism options and the decision ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; (A) Proxy through the host driver: module -&amp;amp;gt; host driver's RM -&amp;amp;gt; real channel&lt;br /&gt;
     -&amp;amp;gt; GPU. Needs a modified host driver or a vendor interface — not implementable.&lt;br /&gt;
 (B) Own the GPU; own scheduling (no GSP): module -&amp;amp;gt; own channels/runlists/page&lt;br /&gt;
     tables -&amp;amp;gt; GPU. Reproduces the scheduler, MMU ownership, context switching.&lt;br /&gt;
 (C) Hybrid — only meaningful once (A) and (B) exist; not on the critical path.&lt;br /&gt;
 (D) Own the GPU; use its real GSP firmware as the server      &amp;amp;lt;- chosen&lt;br /&gt;
     guest push -&amp;amp;gt; module -&amp;amp;gt; real GSP-RM session -&amp;amp;gt; real channel -&amp;amp;gt; GPU&lt;br /&gt;
     The module becomes the host-side resource-manager client; scheduling,&lt;br /&gt;
     page tables and context management stay the firmware's job.&lt;br /&gt;
 (E) Vendor-managed sharing (vGPU host stack, SR-IOV VFs) — deployment-gated; out of scope.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option (D) is the recorded decision (2026-09-29): the only option satisfying module-only, no-daemon, unmodified drivers, real execution, and multi-tenant sharing.&lt;br /&gt;
&lt;br /&gt;
== 4. The chosen mechanism: bring-up ladder ==&lt;br /&gt;
&lt;br /&gt;
The module binds the physical GPU as its driver while the distribution driver is unbound (dedicated-GPU deployment, §9). Each stage is reversible and independently verified:&lt;br /&gt;
&lt;br /&gt;
# '''Ownership''' — the board's power domain is held active across the window (the platform, not PCI, owns it); the module binds the device and maps BAR0/1/3. &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Firmware staging''' — the matching GSP image is fetched and validated (ELF64 RISC-V; loadable section, version, hardware signature); no device state touched. &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Boot''' — protected region in video memory, secure-verification stage, booter, RISC-V core start: FWSEC → Booter Load → RISC-V active → GSP-RM init-done. &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Host RM client''' — the module speaks the already-mapped RPC protocol to the real firmware: device/subdevice, vaspaces, channels, memory. &amp;quot;Call the host driver's RM&amp;quot; becomes &amp;quot;be the RM client&amp;quot;. &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Guest mediation''' — the guest-facing emulation stays unchanged; real-resource objects translate to GSP-RM requests, and server-owned ranges populate the real MMU. &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Work path''' — decoded guest pushes become real push streams; resolved host pages map through module-built scratch page tables; the firmware schedules the work. &amp;lt;code&amp;gt;[gated]&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Completion relay''' — hardware-completed semaphores land in guest-polled memory; events and faults relay through the existing MSI-X injection path. &amp;lt;code&amp;gt;[gated]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. The two planes and the wiring ==&lt;br /&gt;
&lt;br /&gt;
The '''emulation plane''' serves the guest: BAR shadows, the sysmem msgq protocol, a hand-built TU104 static-configuration model, and a software work pipeline that executes decoded memsets, copies and semaphore releases. The '''physical backend plane''' owns the device, boots the real GSP-RM and runs the RM client ladder. The wiring joins them at the lifecycle seam (mdev create/remove), a static-config identity overlay, a read-only control whitelist, and — for eligible copy-engine work — the scratch-mapped forwarding path, all default-off and fail-open to software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;GUEST (QEMU)    HOST: vgsp.ko (module-owned GPU)                  PHYSICAL GPU&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
INIT  preflight: distribution driver green; no vgsp/mdev/QEMU          [live]&lt;br /&gt;
      claim: power domain held -&amp;amp;gt; distribution driver released -&amp;amp;gt; module&lt;br /&gt;
         binds the device -&amp;amp;gt; liveness check                             [live]&lt;br /&gt;
      boot: FWSEC -&amp;amp;gt; Booter Load -&amp;amp;gt; RISC-V active -&amp;amp;gt; GSP-RM init        [live]&lt;br /&gt;
      mdev + ladder: backend joins the live session; real objects,&lt;br /&gt;
         channels, first real CE copy                                   [live]&lt;br /&gt;
      guest: nvidia.ko probes; emulation serves handshake, static config,&lt;br /&gt;
         RM battery, UVM registration                                   [live]&lt;br /&gt;
WORK  guest CUDA app -&amp;amp;gt; libcuda -&amp;amp;gt; nvidia.ko -&amp;amp;gt; GPFIFO -&amp;amp;gt; doorbell&lt;br /&gt;
      host pump decodes; eligible CE copies forwarded via module-built scratch&lt;br /&gt;
         page tables; GR: launch reaches the front-end, descriptor not seen [wall]&lt;br /&gt;
DONE  engine authors the release in guest memory; host relays via MSI-X   [gated]&lt;br /&gt;
TEARDOWN mdev remove -&amp;amp;gt; QEMU stop -&amp;amp;gt; module unload -&amp;amp;gt; clean GSP-RM shutdown&lt;br /&gt;
      -&amp;amp;gt; protected region down -&amp;amp;gt; distribution driver rebound            [live]&lt;br /&gt;
FAIL  a failed mutating operation parks the device in a locked fail-safe;&lt;br /&gt;
      never auto-retried; recovery is supervised                          [live]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Proven capabilities ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Capability&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
| Control plane (GSP boot emulation, RPC, BAR/PCI/MSI-X)&lt;br /&gt;
| done &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Driver-API baseline (init, devices, context, allocation, copies, free, destroy)&lt;br /&gt;
| done — 64/64 payload round-trip &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Software bridge for decoded memory/state operations&lt;br /&gt;
| in progress &amp;lt;code&amp;gt;[wip]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Device ownership, firmware staging, board-liveness checks&lt;br /&gt;
| verified live &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Power domain held active across the ownership window&lt;br /&gt;
| verified across supervised cycles &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Real GSP boot by the module, through init-done and clean release&lt;br /&gt;
| done, no reboot on clean cycles &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Host RM client and first real engine work (static config, real objects, 4 KiB CE copy)&lt;br /&gt;
| done &amp;lt;code&amp;gt;[live]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Guest-copy forwarding, deferred release, hardware-primary copies, engine-authored relay, fault relay&lt;br /&gt;
| default-off, verified live; one relayed-copy mismatch under triage &amp;lt;code&amp;gt;[gated]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CUDA kernel execution (&amp;lt;code&amp;gt;vectorAdd&amp;lt;/code&amp;gt;)&lt;br /&gt;
| open &amp;lt;code&amp;gt;[wall]&amp;lt;/code&amp;gt; — the launch-descriptor install path; correct results are the &amp;lt;code&amp;gt;[target]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 7. The execution frontier ==&lt;br /&gt;
&lt;br /&gt;
The RM client ladder reaches the compute engine (a GR0 channel plus a compute-class object). A forwarded guest CUDA launch now reaches the front-end (ring entry fetched, methods executed) but the inline launch-descriptor install has not been observed and no grid has dispatched; context validity at dispatch is ruled out. The wall is the form of the forwarded launch method stream — see [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]]. A failed mutating operation on the backend parks the device in a locked fail-safe that is never auto-retried; recovery is a supervised step.&lt;br /&gt;
&lt;br /&gt;
== 8. Safety and platform discipline ==&lt;br /&gt;
&lt;br /&gt;
* '''Dedicated GPU deployment.''' One GPU serves the vGPU service; the host uses another GPU or integrated graphics. The distribution driver stays unmodified and is unbound from that device only while the service is active.&lt;br /&gt;
* '''The board's power domain belongs to the platform.''' Releasing the last driver can power-gate the board and the power-on sequence can fail; the ownership path holds the whole board in a held-active state across the window, verifies config-space liveness, and aborts on any power-loss signature without retry.&lt;br /&gt;
* '''Supervised cycles.''' The device is driven by the module under supervised cycles with a written recovery plan. A failed mutating operation parks the device in a locked fail-safe and is never auto-retried; any reboot requires explicit human approval with a written reason and post-reboot plan first.&lt;br /&gt;
* '''Fail closed.''' No forwarding seam programs guest-derived page tables into the real MMU until the population path is proven end to end; the current forwarded path submits engine work only through module-built scratch page tables mapping already-resolved host pages.&lt;br /&gt;
&lt;br /&gt;
== 9. Sharing policy and isolation ==&lt;br /&gt;
&lt;br /&gt;
* '''Dedicated GPU (chosen):''' one GPU serves the vGPU service; a multi-GPU host gives the distribution driver its own GPU.&lt;br /&gt;
* '''Shared single GPU with the host driver bound:''' no conforming mechanism exists on this generation without vendor interfaces; it would require relaxing a constraint (vendor vGPU stack, SR-IOV hardware, or a host daemon).&lt;br /&gt;
* Isolation is one real GSP client per mdev with per-client page tables; host access to guest memory stays behind the hypervisor's per-device DMA interface, and tenant policy is a later layer on top ([[GMMU Multi-Tenant Protection|&amp;lt;code&amp;gt;GMMU-Multi-Tenant-Protection.md&amp;lt;/code&amp;gt;]]).&lt;br /&gt;
&lt;br /&gt;
== 10. Open questions ==&lt;br /&gt;
&lt;br /&gt;
* Firmware/host driver ABI match for the supported family on the development GPU.&lt;br /&gt;
* GPU unbind/reset lifecycle and recovery after guest faults.&lt;br /&gt;
* Which guest allocations need real VRAM and which can stay in system memory.&lt;br /&gt;
* Fault semantics and per-tenant scheduling once multiple mdevs share the service GPU.&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/08-physical-gpu-integration.md &amp;lt;code&amp;gt;../docs/03-architecture/08-physical-gpu-integration.md&amp;lt;/code&amp;gt;] — canonical: mechanism choice and device bring-up.&lt;br /&gt;
* [https://git.vgpu.io/open-iov/blob/master/docs/03-architecture/11-physical-backend-guest-wiring.md &amp;lt;code&amp;gt;../docs/03-architecture/11-physical-backend-guest-wiring.md&amp;lt;/code&amp;gt;] — canonical: the guest-wiring design.&lt;br /&gt;
* [[The Execution Frontier|&amp;lt;code&amp;gt;Execution-Frontier.md&amp;lt;/code&amp;gt;]], [[The vGSP Execution Plane (vEP)|&amp;lt;code&amp;gt;Execution-Plane.md&amp;lt;/code&amp;gt;]] — the GR wall and the software execution plane.&lt;br /&gt;
* [[The Host Module (vgsp.ko)|&amp;lt;code&amp;gt;Host-Module.md&amp;lt;/code&amp;gt;]] — the module that owns both planes.&lt;br /&gt;
* [[Introduction to GMMU|&amp;lt;code&amp;gt;Introduction-to-GMMU.md&amp;lt;/code&amp;gt;]] — page-table seams and scratch mappings.&lt;br /&gt;
* [[Hardware and Software Matrix|&amp;lt;code&amp;gt;Hardware-Software-Matrix.md&amp;lt;/code&amp;gt;]], [[Project Status|&amp;lt;code&amp;gt;Project-Status.md&amp;lt;/code&amp;gt;]] — support scope and the honest status picture.&lt;/div&gt;</summary>
		<author><name>WikiBot</name></author>
	</entry>
</feed>