'generator' content='cgit v1.2.3'/>
<meta name='robots' content='index, nofollow'/>
<link rel='stylesheet' type='text/css' href='/cgit-css/cgit.css'/>
<link rel='shortcut icon' href='/favicon.ico'/>
<link rel='alternate' title='Atom feed' href='https://gitolite.ideasonboard.com/renesas/virt/virtio-spec.git/atom/cl-os.tex?h=master' type='application/atom+xml'/>
<link rel='vcs-git' href='https://gitolite.ideasonboard.com/renesas/virt/virtio-spec.git' title='renesas/virt/virtio-spec.git Git repository'/>
</head>
<body>
<div id='cgit'><table id='header'>
<tr>
<td class='logo' rowspan='2'><a href='/'><img src='/logo.png' alt='cgit logo'/></a></td>
<td class='main'><a href='/'>index</a> : <a title='renesas/virt/virtio-spec.git' href='/renesas/virt/virtio-spec.git/'>renesas/virt/virtio-spec.git</a></td><td class='form'><form method='get'>
<input type='hidden' name='id' value='12fe939f1df9482d6134f9ec5ae39ddacc3df426'/><select name='h' onchange='this.form.submit();'>
<option value='master' selected='selected'>master</option>
<option value='virtio-gpu'>virtio-gpu</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>Virtio specification</td><td class='sub right'>Laurent Pinchart</td></tr></table>
<table class='tabs'><tr><td>
<a href='/renesas/virt/virtio-spec.git/'>summary</a><a href='/renesas/virt/virtio-spec.git/refs/?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>refs</a><a href='/renesas/virt/virtio-spec.git/log/cl-os.tex'>log</a><a class='active' href='/renesas/virt/virtio-spec.git/tree/cl-os.tex?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>tree</a><a href='/renesas/virt/virtio-spec.git/commit/cl-os.tex?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>commit</a><a href='/renesas/virt/virtio-spec.git/diff/cl-os.tex?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>diff</a></td><td class='form'><form class='right' method='get' action='/renesas/virt/virtio-spec.git/log/cl-os.tex'>
<input type='hidden' name='id' value='12fe939f1df9482d6134f9ec5ae39ddacc3df426'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/renesas/virt/virtio-spec.git/tree/?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>root</a>/<a href='/renesas/virt/virtio-spec.git/tree/cl-os.tex?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>cl-os.tex</a></div><div class='content'>blob: da78bf80315a33e6186a759d6ec6a8724ba40304 (<a href='/renesas/virt/virtio-spec.git/plain/cl-os.tex?id=12fe939f1df9482d6134f9ec5ae39ddacc3df426'>plain</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
<a id='n12' href='#n12'>12</a>
<a id='n13' href='#n13'>13</a>
<a id='n14' href='#n14'>14</a>
<a id='n15' href='#n15'>15</a>
<a id='n16' href='#n16'>16</a>
<a id='n17' href='#n17'>17</a>
<a id='n18' href='#n18'>18</a>
<a id='n19' href='#n19'>19</a>
<a id='n20' href='#n20'>20</a>
<a id='n21' href='#n21'>21</a>
<a id='n22' href='#n22'>22</a>
<a id='n23' href='#n23'>23</a>
<a id='n24' href='#n24'>24</a>
<a id='n25' href='#n25'>25</a>
<a id='n26' href='#n26'>26</a>
<a id='n27' href='#n27'>27</a>
<a id='n28' href='#n28'>28</a>
<a id='n29' href='#n29'>29</a>
<a id='n30' href='#n30'>30</a>
<a id='n31' href='#n31'>31</a>
<a id='n32' href='#n32'>32</a>
<a id='n33' href='#n33'>33</a>
<a id='n34' href='#n34'>34</a>
<a id='n35' href='#n35'>35</a>
<a id='n36' href='#n36'>36</a>
<a id='n37' href='#n37'>37</a>
<a id='n38' href='#n38'>38</a>
<a id='n39' href='#n39'>39</a>
<a id='n40' href='#n40'>40</a>
<a id='n41' href='#n41'>41</a>
<a id='n42' href='#n42'>42</a>
<a id='n43' href='#n43'>43</a>
<a id='n44' href='#n44'>44</a>
<a id='n45' href='#n45'>45</a>
<a id='n46' href='#n46'>46</a>
<a id='n47' href='#n47'>47</a>
<a id='n48' href='#n48'>48</a>
<a id='n49' href='#n49'>49</a>
<a id='n50' href='#n50'>50</a>
<a id='n51' href='#n51'>51</a>
<a id='n52' href='#n52'>52</a>
<a id='n53' href='#n53'>53</a>
<a id='n54' href='#n54'>54</a>
<a id='n55' href='#n55'>55</a>
<a id='n56' href='#n56'>56</a>
<a id='n57' href='#n57'>57</a>
<a id='n58' href='#n58'>58</a>
<a id='n59' href='#n59'>59</a>
<a id='n60' href='#n60'>60</a>
<a id='n61' href='#n61'>61</a>
<a id='n62' href='#n62'>62</a>
<a id='n63' href='#n63'>63</a>
<a id='n64' href='#n64'>64</a>
<a id='n65' href='#n65'>65</a>
<a id='n66' href='#n66'>66</a>
<a id='n67' href='#n67'>67</a>
<a id='n68' href='#n68'>68</a>
<a id='n69' href='#n69'>69</a>
<a id='n70' href='#n70'>70</a>
<a id='n71' href='#n71'>71</a>
<a id='n72' href='#n72'>72</a>
<a id='n73' href='#n73'>73</a>
<a id='n74' href='#n74'>74</a>
<a id='n75' href='#n75'>75</a>
<a id='n76' href='#n76'>76</a>
<a id='n77' href='#n77'>77</a>
<a id='n78' href='#n78'>78</a>
<a id='n79' href='#n79'>79</a>
<a id='n80' href='#n80'>80</a>
<a id='n81' href='#n81'>81</a>
<a id='n82' href='#n82'>82</a>
<a id='n83' href='#n83'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
<a id='n91' href='#n91'>91</a>
<a id='n92' href='#n92'>92</a>
<a id='n93' href='#n93'>93</a>
<a id='n94' href='#n94'>94</a>
<a id='n95' href='#n95'>95</a>
<a id='n96' href='#n96'>96</a>
<a id='n97' href='#n97'>97</a>
<a id='n98' href='#n98'>98</a>
<a id='n99' href='#n99'>99</a>
<a id='n100' href='#n100'>100</a>
<a id='n101' href='#n101'>101</a>
<a id='n102' href='#n102'>102</a>
<a id='n103' href='#n103'>103</a>
<a id='n104' href='#n104'>104</a>
<a id='n105' href='#n105'>105</a>
<a id='n106' href='#n106'>106</a>
<a id='n107' href='#n107'>107</a>
<a id='n108' href='#n108'>108</a>
<a id='n109' href='#n109'>109</a>
<a id='n110' href='#n110'>110</a>
<a id='n111' href='#n111'>111</a>
<a id='n112' href='#n112'>112</a>
<a id='n113' href='#n113'>113</a>
<a id='n114' href='#n114'>114</a>
<a id='n115' href='#n115'>115</a>
<a id='n116' href='#n116'>116</a>
<a id='n117' href='#n117'>117</a>
<a id='n118' href='#n118'>118</a>
<a id='n119' href='#n119'>119</a>
<a id='n120' href='#n120'>120</a>
<a id='n121' href='#n121'>121</a>
<a id='n122' href='#n122'>122</a>
<a id='n123' href='#n123'>123</a>
<a id='n124' href='#n124'>124</a>
<a id='n125' href='#n125'>125</a>
<a id='n126' href='#n126'>126</a>
<a id='n127' href='#n127'>127</a>
<a id='n128' href='#n128'>128</a>
<a id='n129' href='#n129'>129</a>
<a id='n130' href='#n130'>130</a>
<a id='n131' href='#n131'>131</a>
<a id='n132' href='#n132'>132</a>
<a id='n133' href='#n133'>133</a>
<a id='n134' href='#n134'>134</a>
</pre></td>
<td class='lines'><pre><code><span class="hl num">540</span> &amp; <span class="hl num">11</span> Oct <span class="hl num">2015</span> &amp; Greg Kurz &amp; <span class="hl opt">{</span>virtqueues: fix
trivial typo

See
<span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Basic Facilities of a Virtio Device / Virtqueues / Virtqueue Interrupt Suppression<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">541</span> &amp; <span class="hl num">11</span> Oct <span class="hl num">2015</span> &amp; Paolo Bonzini &amp; <span class="hl opt">{</span>virtio-blk: fix typo
in legacy framing requirements section

See
<span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Device Types / Block Device / Legacy Interface: Framing Requirements<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">545</span> &amp; <span class="hl num">18</span> Oct <span class="hl num">2015</span> &amp; Paolo Bonzini &amp; <span class="hl opt">{</span>virtio-blk: restore VIRTIO_BLK_F_FLUSH and VIRTIO_BLK_F_CONFIG_WCE

VIRTIO_BLK_F_CONFIG_WCE is important in order to achieve good performance
(up to <span class="hl num">2</span>x, though more realistically +<span class="hl num">30</span>-<span class="hl num">40</span>\%) in latency-bound workloads.
However, it was removed by mistake together with VIRTIO_BLK_F_FLUSH.

In addition, even removing VIRTIO_BLK_F_FLUSH was probably not a great
idea, because it simplifies simple drivers (e.g. firmware) that are okay
with a writethrough cache but still need data to persist after power loss.
What really should have been removed is just the possibility that devices
not propose VIRTIO_BLK_F_FLUSH, but even that only deserves a &quot;SHOULD&quot; in
the new world of conformance statements.

Restore these, with the following changes:

* clarify and use conformance statements in order to define writeback
and writethrough caching according to what is commonly done by high-end
storage.

* clarify (with conformance statements) the influence of the
VIRTIO_BLK_F_FLUSH feature on caching and how to proceed if only one of
VIRTIO_BLK_F_FLUSH and VIRTIO_BLK_F_CONFIG_WCE is negotiated.

* strengthen the requirement for persisting writes to MUST after
a VIRTIO_BLK_T_FLUSH request (and in other cases too involving the
new features).

The suggested behavior upon feature negotiation is okay for the Linux
implementation of virtio1, even after the implementation is modified to
support the two new features.

This fixes VIRTIO-<span class="hl num">144</span>.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Device Types / Block Device<span class="hl opt">}</span>,
<span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Conformance / Driver Conformance / Block Driver Conformance<span class="hl opt">}</span> and
<span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Conformance / Device Conformance / Block Device Conformance<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">546</span> &amp; <span class="hl num">18</span> Oct <span class="hl num">2015</span> &amp; Michael S. Tsirkin &amp; <span class="hl opt">{</span>pci: clarify configuration access capability rules

The point of the configuration access capability is to enable
access to other capabilities.  The intent never was to allow
writes to a random place within device BARs.
Limiting drivers simplifies devices - and devices can always
add another capability if drivers ever want to access
some other range.

This resolves VIRTIO-<span class="hl num">145</span>.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>drivernormative:Virtio Transport Options / Virtio Over
PCI Bus / PCI Device Layout / PCI configuration access
capability<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">547</span> &amp; <span class="hl num">18</span> Oct <span class="hl num">2015</span> &amp; Michael S. Tsirkin &amp; <span class="hl opt">{</span>add advice on transition from legacy interfaces

Reading legacy chapters gives a hint about what changed,
let&apos;s help readers discover this useful shortcut.

This resolves VIRTIO-<span class="hl num">146</span>.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Transition from earlier specification drafts<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">554</span> &amp; <span class="hl num">16</span> Feb <span class="hl num">2016</span> &amp; Thomas Huth &amp; <span class="hl opt">{</span>virtio-net: fix inconsistent legacy header size

    Current text says:
    	The legacy driver only presented num_buffers in the struct
    	virtio_net_hdr when VIRTIO_NET_F_MRG_RXBUF was not negotiated;

    Should be:
    	&quot;<span class="hl kwa">\dots</span> was negotiated <span class="hl kwa">\dots</span>&quot; instead of &quot;<span class="hl kwa">\dots</span> was not negotiated <span class="hl kwa">\dots</span>&quot;

    To be consistent with the following:
    	without that feature the structure was <span class="hl num">2</span> bytes shorter.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Device Types / Network Device / Device Operation / Legacy Interface: Device Operation<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">555</span> &amp; <span class="hl num">16</span> Feb <span class="hl num">2016</span> &amp; Michael S. Tsirkin &amp; <span class="hl opt">{</span>virtio header: tweak
change motivation

    The changes are not just to remove Linux assumptions,
    we have also renamed ring-&gt;queue.
    Tweak the header description accordingly.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Basic Facilities of a Virtio Device / Virtqueues / Helpers for Operating Virtqueues<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">558</span> &amp; <span class="hl num">16</span> Feb <span class="hl num">2016</span> &amp; Michael S. Tsirkin &amp; <span class="hl opt">{</span>rename virtio_ring.h to virtio_queue.h

    Since vring* and VRING* have been replaced with virtq* and VIRTQ*
    respectively, rename the header virtio_ring.h to virtio_queue.h.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:virtio-queue.h<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
<span class="hl num">559</span> &amp; <span class="hl num">16</span> Feb <span class="hl num">2016</span> &amp; Michael S. Tsirkin &amp; <span class="hl opt">{</span>init: sort status bits

    Status bit order is inconsistent: they are neither in increasing
    order nor in the order they are likely to be used.

    The second approach seems more useful since there aren&apos;t
    that many bits, so the numerical order does not help much.

    A typical order of use would be:

<span class="hl kwa">\begin</span><span class="hl opt">{</span>itemize<span class="hl opt">}</span>   
<span class="hl kwa">\item</span>    ACKNOWLEDGE
<span class="hl kwa">\item</span>    DRIVER
<span class="hl kwa">\item</span>    then either FAILED or FEATURES_OK
<span class="hl kwa">\item</span>    then either FAILED or DRIVER_OK
<span class="hl kwa">\item</span>    then DEVICE_NEEDS_RESET (if device detects an error)
<span class="hl kwa">\end</span><span class="hl opt">{</span>itemize<span class="hl opt">}</span>
    
    Sort the bits accordingly.

See <span class="hl kwa">\ref</span><span class="hl opt">{</span>sec:Basic Facilities of a Virtio Device / Device Status Field<span class="hl opt">}</span>.
<span class="hl opt">}</span> \\
<span class="hl kwa">\hline</span>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.25.1</a>) at 2025-12-06 13:04:43 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
