blob: ab1fa25a95fbac508a39368bdb027f6ea70c0ae8 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="308.78021"
height="271.41113"
id="svg2"
version="1.1"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="RCUGuaranteeMid.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<inkscape:path-effect
effect="bspline"
id="path-effect1270"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect1266"
is_visible="true"
lpeversion="1"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="Arrow2Send"
style="overflow:visible">
<path
id="path3892"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-0.3,0,0,-0.3,0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send"
style="overflow:visible">
<path
id="path3874"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3862"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible">
<path
id="path3885"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Sstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Sstart"
style="overflow:visible">
<path
id="path3888"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.2,0,0,0.2,1.2,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mstart"
style="overflow:visible">
<path
id="path3882"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.4,0,0,0.4,4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lstart"
style="overflow:visible">
<path
id="path3876"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(0.8,0,0,0.8,10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-3"
style="overflow:visible">
<path
id="path3885-6"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-5"
style="overflow:visible">
<path
id="path3885-3"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-6"
style="overflow:visible">
<path
id="path3885-2"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.4674888"
inkscape:cx="159.33721"
inkscape:cy="133.38183"
inkscape:document-units="px"
inkscape:current-layer="g5416"
showgrid="false"
fit-margin-top="5"
fit-margin-left="5"
fit-margin-right="5"
fit-margin-bottom="5"
inkscape:window-width="1846"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="0">
<inkscape:grid
type="xygrid"
id="grid3960"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="33.719383"
originy="14.377357"
spacingx="1"
spacingy="1" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(56.531737,-783.16107)">
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Big Arrows">
<g
transform="translate(0,53.92809)"
id="g5416">
<path
inkscape:connector-curvature="0"
id="path5410"
d="m 156.21652,758.06766 -25.6982,0.32748 -0.38479,86.55125 -77.839262,0.39552"
style="fill:none;stroke:#00ff00;stroke-width:15.3268;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
id="path5414"
d="m 53.751752,861.30308 -0.36641,-31.87817 -1.83208,2.93133 -10.99248,12.82455 z"
style="fill:#00ff00;fill-opacity:1;stroke:#00ff00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:#64c8c8;fill-opacity:1;stroke:#64c8c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 142.17983,994.22342 0.36641,-31.87817 1.83208,2.93133 10.99248,12.82455 z"
id="path5450"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#64c8c8;stroke-width:16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 146.7381,978.20321 -27.79961,0.11706 0.18419,-88.73732 -80.358952,-0.0615"
id="path5456"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
id="text5466"
y="891.99835"
x="42.399769"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
id="tspan5468"
y="891.99835"
x="42.399769"
sodipodi:role="line"
style="font-size:8px;line-height:1.25;font-family:sans-serif">... this can happen</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.948683px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M 88.499834,855.13067 98.0701,878.6298"
id="path5470"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
id="text5466-7"
y="848.10419"
x="49.993519"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
xml:space="preserve"><tspan
id="tspan5468-2"
y="848.10419"
x="49.993519"
sodipodi:role="line"
style="font-size:8px;line-height:1.25;font-family:sans-serif">Given this ordering</tspan></text>
<text
id="text5466-7-3"
y="132.93481"
x="-838.94916"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
xml:space="preserve"
transform="rotate(-90)"><tspan
id="tspan5468-2-6"
y="132.93481"
x="-838.94916"
sodipodi:role="line"
style="font-size:8px;line-height:1.25;font-family:sans-serif">(r1 == 1) ....</tspan></text>
<text
id="text5466-7-3-7"
y="-116.00721"
x="896.62994"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
xml:space="preserve"
transform="rotate(90)"><tspan
id="tspan5468-2-6-5"
y="-116.00721"
x="896.62994"
sodipodi:role="line"
style="font-size:8px;line-height:1.25;font-family:sans-serif">(r1 == 0) </tspan></text>
</g>
</g>
<g
transform="translate(0,53.928085)"
id="g3022">
<path
inkscape:connector-curvature="0"
id="path5380-9"
d="M 196.0701,946.23118 V 963.0974"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M -5.6390443,814.31178 V 831.178"
id="path5150"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path5346"
d="M -5.6390443,858.31178 V 875.178"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
<path
inkscape:connector-curvature="0"
id="path5380"
d="m 196.0701,770.60077 v 16.86622"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M -5.6390443,902.31178 V 919.178"
id="path3854"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
x="-5.6878724"
y="784.27686"
id="text3259"><tspan
sodipodi:role="line"
id="tspan3261"
x="-5.6878724"
y="784.27686"
style="font-size:8px;line-height:1.25;font-family:sans-serif">P0()</tspan></text>
<g
id="g4938"
transform="translate(-50.761023,8.8689084)">
<rect
style="fill:#fe9696;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946-4-0"
width="90.785385"
height="25.518795"
x="-0.27071345"
y="780.38611" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="45.225494"
y="795.24121"
id="text4948-7"><tspan
sodipodi:role="line"
x="45.225494"
y="795.24121"
id="tspan4952-0"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">rcu_read_lock();</tspan></text>
</g>
<g
id="g4944"
transform="translate(-50.761023,52.868908)">
<rect
style="fill:#96c8fe;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946"
width="90.785385"
height="25.518795"
x="-26.934711"
y="40.741337"
transform="translate(26.663998,740.34064)" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="45.225494"
y="795.93317"
id="text4948"><tspan
sodipodi:role="line"
x="45.225494"
y="795.93317"
id="tspan4952"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">r1 = READ_ONCE(x);</tspan></text>
</g>
<g
id="g5348"
transform="translate(-55.616397,96.868908)">
<rect
style="fill:#96c8fe;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946-4"
width="90.785385"
height="25.518795"
x="4.5846601"
y="780.96802" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="50.311337"
y="795.81921"
id="text5352"><tspan
sodipodi:role="line"
x="50.311337"
y="795.81921"
id="tspan5356"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">r2 = READ_ONCE(y);</tspan></text>
</g>
<g
id="g4938-7"
transform="translate(-50.761023,140.82313)">
<rect
style="fill:#fe9696;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946-4-0-9"
width="90.785385"
height="25.518795"
x="-0.27071345"
y="780.38611" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="45.225494"
y="795.24121"
id="text4948-7-7"><tspan
sodipodi:role="line"
x="45.225494"
y="795.24121"
id="tspan4952-0-6"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">rcu_read_unlock();</tspan></text>
</g>
<g
transform="translate(120.53686,-36.98029)"
id="g5360">
<g
id="g5348-5"
transform="translate(30.841553,1.844585)">
<rect
style="fill:#96c8fe;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946-4-8"
width="90.785385"
height="25.518795"
x="4.5846601"
y="780.96802" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="50.311337"
y="795.81921"
id="text5352-8"><tspan
sodipodi:role="line"
x="50.311337"
y="795.81921"
id="tspan5356-4"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">WRITE_ONCE(x, 1);</tspan></text>
</g>
</g>
<g
transform="translate(120.53686,181.12412)"
id="g5360-5">
<g
id="g5348-5-6"
transform="translate(30.841553,1.844585)">
<rect
style="fill:#96c8fe;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946-4-8-5"
width="90.785385"
height="25.518795"
x="4.5846601"
y="780.96802" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="50.311337"
y="795.81921"
id="text5352-8-6"><tspan
sodipodi:role="line"
x="50.311337"
y="795.81921"
id="tspan5356-4-8"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">WRITE_ONCE(y, 1);</tspan></text>
</g>
</g>
<g
id="g4938-7-4"
transform="translate(156.23379,140.32688)">
<rect
style="fill:#fe9696;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4946-4-0-9-8"
width="90.570572"
height="156.38358"
x="-0.055897169"
y="649.5213" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"
x="45.225494"
y="729.80878"
id="text4948-7-7-8"><tspan
sodipodi:role="line"
x="45.225494"
y="729.80878"
id="tspan4952-0-6-3"
style="font-size:8px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">synchronize_rcu();</tspan></text>
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Sans;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
x="196.02127"
y="794.23138"
id="text3267"><tspan
sodipodi:role="line"
id="tspan3269"
x="196.02127"
y="794.23138"
style="font-size:8px;line-height:1.25;font-family:sans-serif">P1()</tspan></text>
</g>
</svg>