diff options
| author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2016-01-28 19:49:24 -0500 |
|---|---|---|
| committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2016-04-19 17:48:12 -0400 |
| commit | 5c1458478c49b905652fc002708d09369763f58f (patch) | |
| tree | 07283a23c021a587034b145b1445c1cececd1a67 | |
| parent | 0c7d10e4b998b2f751cebf98435f1ec2dd312c87 (diff) | |
documentation: Add documentation for RCU's major data structures
This commit adds documentation for RCU's major data structures,
including rcu_state, rcu_node, rcu_data, rcu_dynticks, and rcu_head.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
12 files changed, 8291 insertions, 0 deletions
diff --git a/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCU.svg b/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCU.svg new file mode 100644 index 000000000000..727e270b11e4 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCU.svg | |||
| @@ -0,0 +1,474 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:28:20 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 3.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="9.1in" | ||
| 17 | height="8.9in" | ||
| 18 | viewBox="-66 -66 10932 10707" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="BigTreeClassicRCU.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata106"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs104"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3864" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="973" | ||
| 61 | inkscape:window-height="1137" | ||
| 62 | id="namedview102" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="0.9743589" | ||
| 65 | inkscape:cx="409.50003" | ||
| 66 | inkscape:cy="400.49997" | ||
| 67 | inkscape:window-x="915" | ||
| 68 | inkscape:window-y="24" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="0" | ||
| 77 | y="0" | ||
| 78 | width="10800" | ||
| 79 | height="5625" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="1125" | ||
| 86 | y="3600" | ||
| 87 | width="2700" | ||
| 88 | height="1350" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="3825" | ||
| 95 | y="900" | ||
| 96 | width="2700" | ||
| 97 | height="1350" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="6525" | ||
| 104 | y="3600" | ||
| 105 | width="2700" | ||
| 106 | height="1350" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Line --> | ||
| 111 | <polyline | ||
| 112 | points="3375,6525 3375,5046 " | ||
| 113 | style="stroke:#00d1d1;stroke-width:44.9934641;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 114 | id="polyline14" /> | ||
| 115 | <!-- Arrowhead on XXXpoint 3375 6525 - 3375 4860--> | ||
| 116 | <!-- Circle --> | ||
| 117 | <circle | ||
| 118 | cx="7425" | ||
| 119 | cy="6075" | ||
| 120 | r="114" | ||
| 121 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 122 | id="circle18" /> | ||
| 123 | <!-- Circle --> | ||
| 124 | <circle | ||
| 125 | cx="7875" | ||
| 126 | cy="6075" | ||
| 127 | r="114" | ||
| 128 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 129 | id="circle20" /> | ||
| 130 | <!-- Circle --> | ||
| 131 | <circle | ||
| 132 | cx="8325" | ||
| 133 | cy="6075" | ||
| 134 | r="114" | ||
| 135 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 136 | id="circle22" /> | ||
| 137 | <!-- Circle --> | ||
| 138 | <circle | ||
| 139 | cx="2025" | ||
| 140 | cy="6075" | ||
| 141 | r="114" | ||
| 142 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 143 | id="circle24" /> | ||
| 144 | <!-- Circle --> | ||
| 145 | <circle | ||
| 146 | cx="2475" | ||
| 147 | cy="6075" | ||
| 148 | r="114" | ||
| 149 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 150 | id="circle26" /> | ||
| 151 | <!-- Circle --> | ||
| 152 | <circle | ||
| 153 | cx="2925" | ||
| 154 | cy="6075" | ||
| 155 | r="114" | ||
| 156 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 157 | id="circle28" /> | ||
| 158 | <!-- Circle --> | ||
| 159 | <circle | ||
| 160 | cx="4725" | ||
| 161 | cy="4275" | ||
| 162 | r="114" | ||
| 163 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 164 | id="circle30" /> | ||
| 165 | <!-- Circle --> | ||
| 166 | <circle | ||
| 167 | cx="5175" | ||
| 168 | cy="4275" | ||
| 169 | r="114" | ||
| 170 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 171 | id="circle32" /> | ||
| 172 | <!-- Circle --> | ||
| 173 | <circle | ||
| 174 | cx="5625" | ||
| 175 | cy="4275" | ||
| 176 | r="114" | ||
| 177 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 178 | id="circle34" /> | ||
| 179 | <!-- Line: box --> | ||
| 180 | <rect | ||
| 181 | x="2025" | ||
| 182 | y="6525" | ||
| 183 | width="2700" | ||
| 184 | height="1800" | ||
| 185 | rx="0" | ||
| 186 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 187 | id="rect36" /> | ||
| 188 | <!-- Line --> | ||
| 189 | <polyline | ||
| 190 | points="2475,3600 3975,2310 " | ||
| 191 | style="stroke:#00d1d1;stroke-width:44.9934641;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 192 | id="polyline38" /> | ||
| 193 | <!-- Arrowhead on XXXpoint 2475 3600 - 4116 2190--> | ||
| 194 | <!-- Line --> | ||
| 195 | <polyline | ||
| 196 | points="7875,3600 6372,2310 " | ||
| 197 | style="stroke:#00d1d1;stroke-width:44.9934641;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 198 | id="polyline42" /> | ||
| 199 | <!-- Arrowhead on XXXpoint 7875 3600 - 6231 2190--> | ||
| 200 | <!-- Line --> | ||
| 201 | <polyline | ||
| 202 | points="6975,8775 6975,5046 " | ||
| 203 | style="stroke:#00d1d1;stroke-width:44.9934641;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 204 | id="polyline46" /> | ||
| 205 | <!-- Arrowhead on XXXpoint 6975 8775 - 6975 4860--> | ||
| 206 | <!-- Line --> | ||
| 207 | <polyline | ||
| 208 | points="1575,8775 1575,5046 " | ||
| 209 | style="stroke:#00d1d1;stroke-width:44.9934641;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 210 | id="polyline50" /> | ||
| 211 | <!-- Arrowhead on XXXpoint 1575 8775 - 1575 4860--> | ||
| 212 | <!-- Line --> | ||
| 213 | <polyline | ||
| 214 | points="8775,6525 8775,5046 " | ||
| 215 | style="stroke:#00d1d1;stroke-width:44.9934641;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 216 | id="polyline54" /> | ||
| 217 | <!-- Arrowhead on XXXpoint 8775 6525 - 8775 4860--> | ||
| 218 | <!-- Text --> | ||
| 219 | <text | ||
| 220 | xml:space="preserve" | ||
| 221 | x="1575" | ||
| 222 | y="9225" | ||
| 223 | fill="#000000" | ||
| 224 | font-family="Courier" | ||
| 225 | font-style="normal" | ||
| 226 | font-weight="bold" | ||
| 227 | font-size="288" | ||
| 228 | text-anchor="middle" | ||
| 229 | id="text58">struct</text> | ||
| 230 | <!-- Text --> | ||
| 231 | <text | ||
| 232 | xml:space="preserve" | ||
| 233 | x="1575" | ||
| 234 | y="9675" | ||
| 235 | fill="#000000" | ||
| 236 | font-family="Courier" | ||
| 237 | font-style="normal" | ||
| 238 | font-weight="bold" | ||
| 239 | font-size="288" | ||
| 240 | text-anchor="middle" | ||
| 241 | id="text60">rcu_data</text> | ||
| 242 | <!-- Text --> | ||
| 243 | <text | ||
| 244 | xml:space="preserve" | ||
| 245 | x="1575" | ||
| 246 | y="10350" | ||
| 247 | fill="#000000" | ||
| 248 | font-family="Helvetica" | ||
| 249 | font-style="normal" | ||
| 250 | font-weight="normal" | ||
| 251 | font-size="324" | ||
| 252 | text-anchor="middle" | ||
| 253 | id="text62">CPU 0</text> | ||
| 254 | <!-- Text --> | ||
| 255 | <text | ||
| 256 | xml:space="preserve" | ||
| 257 | x="3375" | ||
| 258 | y="6975" | ||
| 259 | fill="#000000" | ||
| 260 | font-family="Courier" | ||
| 261 | font-style="normal" | ||
| 262 | font-weight="bold" | ||
| 263 | font-size="288" | ||
| 264 | text-anchor="middle" | ||
| 265 | id="text64">struct</text> | ||
| 266 | <!-- Text --> | ||
| 267 | <text | ||
| 268 | xml:space="preserve" | ||
| 269 | x="3375" | ||
| 270 | y="7425" | ||
| 271 | fill="#000000" | ||
| 272 | font-family="Courier" | ||
| 273 | font-style="normal" | ||
| 274 | font-weight="bold" | ||
| 275 | font-size="288" | ||
| 276 | text-anchor="middle" | ||
| 277 | id="text66">rcu_data</text> | ||
| 278 | <!-- Text --> | ||
| 279 | <text | ||
| 280 | xml:space="preserve" | ||
| 281 | x="3375" | ||
| 282 | y="8100" | ||
| 283 | fill="#000000" | ||
| 284 | font-family="Helvetica" | ||
| 285 | font-style="normal" | ||
| 286 | font-weight="normal" | ||
| 287 | font-size="324" | ||
| 288 | text-anchor="middle" | ||
| 289 | id="text68">CPU 15</text> | ||
| 290 | <!-- Text --> | ||
| 291 | <text | ||
| 292 | xml:space="preserve" | ||
| 293 | x="6975" | ||
| 294 | y="9225" | ||
| 295 | fill="#000000" | ||
| 296 | font-family="Courier" | ||
| 297 | font-style="normal" | ||
| 298 | font-weight="bold" | ||
| 299 | font-size="288" | ||
| 300 | text-anchor="middle" | ||
| 301 | id="text70">struct</text> | ||
| 302 | <!-- Text --> | ||
| 303 | <text | ||
| 304 | xml:space="preserve" | ||
| 305 | x="6975" | ||
| 306 | y="9675" | ||
| 307 | fill="#000000" | ||
| 308 | font-family="Courier" | ||
| 309 | font-style="normal" | ||
| 310 | font-weight="bold" | ||
| 311 | font-size="288" | ||
| 312 | text-anchor="middle" | ||
| 313 | id="text72">rcu_data</text> | ||
| 314 | <!-- Text --> | ||
| 315 | <text | ||
| 316 | xml:space="preserve" | ||
| 317 | x="6975" | ||
| 318 | y="10350" | ||
| 319 | fill="#000000" | ||
| 320 | font-family="Helvetica" | ||
| 321 | font-style="normal" | ||
| 322 | font-weight="normal" | ||
| 323 | font-size="324" | ||
| 324 | text-anchor="middle" | ||
| 325 | id="text74">CPU 1007</text> | ||
| 326 | <!-- Text --> | ||
| 327 | <text | ||
| 328 | xml:space="preserve" | ||
| 329 | x="8730" | ||
| 330 | y="6930" | ||
| 331 | fill="#000000" | ||
| 332 | font-family="Courier" | ||
| 333 | font-style="normal" | ||
| 334 | font-weight="bold" | ||
| 335 | font-size="288" | ||
| 336 | text-anchor="middle" | ||
| 337 | id="text76">struct</text> | ||
| 338 | <!-- Text --> | ||
| 339 | <text | ||
| 340 | xml:space="preserve" | ||
| 341 | x="8730" | ||
| 342 | y="7380" | ||
| 343 | fill="#000000" | ||
| 344 | font-family="Courier" | ||
| 345 | font-style="normal" | ||
| 346 | font-weight="bold" | ||
| 347 | font-size="288" | ||
| 348 | text-anchor="middle" | ||
| 349 | id="text78">rcu_data</text> | ||
| 350 | <!-- Text --> | ||
| 351 | <text | ||
| 352 | xml:space="preserve" | ||
| 353 | x="8730" | ||
| 354 | y="8055" | ||
| 355 | fill="#000000" | ||
| 356 | font-family="Helvetica" | ||
| 357 | font-style="normal" | ||
| 358 | font-weight="normal" | ||
| 359 | font-size="324" | ||
| 360 | text-anchor="middle" | ||
| 361 | id="text80">CPU 1023</text> | ||
| 362 | <!-- Text --> | ||
| 363 | <text | ||
| 364 | xml:space="preserve" | ||
| 365 | x="225" | ||
| 366 | y="450" | ||
| 367 | fill="#000000" | ||
| 368 | font-family="Courier" | ||
| 369 | font-style="normal" | ||
| 370 | font-weight="bold" | ||
| 371 | font-size="288" | ||
| 372 | text-anchor="start" | ||
| 373 | id="text82">struct rcu_state</text> | ||
| 374 | <!-- Text --> | ||
| 375 | <text | ||
| 376 | xml:space="preserve" | ||
| 377 | x="2475" | ||
| 378 | y="4050" | ||
| 379 | fill="#000000" | ||
| 380 | font-family="Courier" | ||
| 381 | font-style="normal" | ||
| 382 | font-weight="bold" | ||
| 383 | font-size="288" | ||
| 384 | text-anchor="middle" | ||
| 385 | id="text84">struct</text> | ||
| 386 | <!-- Text --> | ||
| 387 | <text | ||
| 388 | xml:space="preserve" | ||
| 389 | x="2475" | ||
| 390 | y="4500" | ||
| 391 | fill="#000000" | ||
| 392 | font-family="Courier" | ||
| 393 | font-style="normal" | ||
| 394 | font-weight="bold" | ||
| 395 | font-size="288" | ||
| 396 | text-anchor="middle" | ||
| 397 | id="text86">rcu_node</text> | ||
| 398 | <!-- Text --> | ||
| 399 | <text | ||
| 400 | xml:space="preserve" | ||
| 401 | x="7875" | ||
| 402 | y="4500" | ||
| 403 | fill="#000000" | ||
| 404 | font-family="Courier" | ||
| 405 | font-style="normal" | ||
| 406 | font-weight="bold" | ||
| 407 | font-size="288" | ||
| 408 | text-anchor="middle" | ||
| 409 | id="text88">rcu_node</text> | ||
| 410 | <!-- Text --> | ||
| 411 | <text | ||
| 412 | xml:space="preserve" | ||
| 413 | x="7875" | ||
| 414 | y="4050" | ||
| 415 | fill="#000000" | ||
| 416 | font-family="Courier" | ||
| 417 | font-style="normal" | ||
| 418 | font-weight="bold" | ||
| 419 | font-size="288" | ||
| 420 | text-anchor="middle" | ||
| 421 | id="text90">struct</text> | ||
| 422 | <!-- Text --> | ||
| 423 | <text | ||
| 424 | xml:space="preserve" | ||
| 425 | x="5175" | ||
| 426 | y="1350" | ||
| 427 | fill="#000000" | ||
| 428 | font-family="Courier" | ||
| 429 | font-style="normal" | ||
| 430 | font-weight="bold" | ||
| 431 | font-size="288" | ||
| 432 | text-anchor="middle" | ||
| 433 | id="text92">struct</text> | ||
| 434 | <!-- Text --> | ||
| 435 | <text | ||
| 436 | xml:space="preserve" | ||
| 437 | x="5175" | ||
| 438 | y="1800" | ||
| 439 | fill="#000000" | ||
| 440 | font-family="Courier" | ||
| 441 | font-style="normal" | ||
| 442 | font-weight="bold" | ||
| 443 | font-size="288" | ||
| 444 | text-anchor="middle" | ||
| 445 | id="text94">rcu_node</text> | ||
| 446 | <!-- Line: box --> | ||
| 447 | <rect | ||
| 448 | x="225" | ||
| 449 | y="8775" | ||
| 450 | width="2700" | ||
| 451 | height="1800" | ||
| 452 | rx="0" | ||
| 453 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 454 | id="rect96" /> | ||
| 455 | <!-- Line: box --> | ||
| 456 | <rect | ||
| 457 | x="5625" | ||
| 458 | y="8775" | ||
| 459 | width="2700" | ||
| 460 | height="1800" | ||
| 461 | rx="0" | ||
| 462 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 463 | id="rect98" /> | ||
| 464 | <!-- Line: box --> | ||
| 465 | <rect | ||
| 466 | x="7380" | ||
| 467 | y="6480" | ||
| 468 | width="2700" | ||
| 469 | height="1800" | ||
| 470 | rx="0" | ||
| 471 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 472 | id="rect100" /> | ||
| 473 | </g> | ||
| 474 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBH.svg b/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBH.svg new file mode 100644 index 000000000000..9bbb1944f962 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBH.svg | |||
| @@ -0,0 +1,499 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:26:09 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 2.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="5.7in" | ||
| 17 | height="6.6in" | ||
| 18 | viewBox="-44 -44 6838 7888" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="BigTreeClassicRCUBH.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata110"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs108"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3868" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | <marker | ||
| 51 | inkscape:stockid="Arrow2Mend" | ||
| 52 | orient="auto" | ||
| 53 | refY="0.0" | ||
| 54 | refX="0.0" | ||
| 55 | id="Arrow2Mend" | ||
| 56 | style="overflow:visible;"> | ||
| 57 | <path | ||
| 58 | id="path3886" | ||
| 59 | style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" | ||
| 60 | d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " | ||
| 61 | transform="scale(0.6) rotate(180) translate(0,0)" /> | ||
| 62 | </marker> | ||
| 63 | </defs> | ||
| 64 | <sodipodi:namedview | ||
| 65 | pagecolor="#ffffff" | ||
| 66 | bordercolor="#666666" | ||
| 67 | borderopacity="1" | ||
| 68 | objecttolerance="10" | ||
| 69 | gridtolerance="10" | ||
| 70 | guidetolerance="10" | ||
| 71 | inkscape:pageopacity="0" | ||
| 72 | inkscape:pageshadow="2" | ||
| 73 | inkscape:window-width="878" | ||
| 74 | inkscape:window-height="1148" | ||
| 75 | id="namedview106" | ||
| 76 | showgrid="false" | ||
| 77 | inkscape:zoom="1.3547758" | ||
| 78 | inkscape:cx="256.5" | ||
| 79 | inkscape:cy="297" | ||
| 80 | inkscape:window-x="45" | ||
| 81 | inkscape:window-y="24" | ||
| 82 | inkscape:window-maximized="0" | ||
| 83 | inkscape:current-layer="g4" /> | ||
| 84 | <g | ||
| 85 | style="stroke-width:.025in; fill:none" | ||
| 86 | id="g4"> | ||
| 87 | <!-- Line: box --> | ||
| 88 | <rect | ||
| 89 | x="450" | ||
| 90 | y="0" | ||
| 91 | width="6300" | ||
| 92 | height="7350" | ||
| 93 | rx="0" | ||
| 94 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 95 | id="rect6" /> | ||
| 96 | <!-- Line: box --> | ||
| 97 | <rect | ||
| 98 | x="4950" | ||
| 99 | y="4950" | ||
| 100 | width="1500" | ||
| 101 | height="900" | ||
| 102 | rx="0" | ||
| 103 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 104 | id="rect8" /> | ||
| 105 | <!-- Line: box --> | ||
| 106 | <rect | ||
| 107 | x="750" | ||
| 108 | y="600" | ||
| 109 | width="5700" | ||
| 110 | height="3750" | ||
| 111 | rx="0" | ||
| 112 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 113 | id="rect10" /> | ||
| 114 | <!-- Line: box --> | ||
| 115 | <rect | ||
| 116 | x="0" | ||
| 117 | y="450" | ||
| 118 | width="6300" | ||
| 119 | height="7350" | ||
| 120 | rx="0" | ||
| 121 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 122 | id="rect12" /> | ||
| 123 | <!-- Line: box --> | ||
| 124 | <rect | ||
| 125 | x="300" | ||
| 126 | y="1050" | ||
| 127 | width="5700" | ||
| 128 | height="3750" | ||
| 129 | rx="0" | ||
| 130 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 131 | id="rect14" /> | ||
| 132 | <!-- Circle --> | ||
| 133 | <circle | ||
| 134 | cx="2850" | ||
| 135 | cy="3900" | ||
| 136 | r="76" | ||
| 137 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 138 | id="circle16" /> | ||
| 139 | <!-- Circle --> | ||
| 140 | <circle | ||
| 141 | cx="3150" | ||
| 142 | cy="3900" | ||
| 143 | r="76" | ||
| 144 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 145 | id="circle18" /> | ||
| 146 | <!-- Circle --> | ||
| 147 | <circle | ||
| 148 | cx="3450" | ||
| 149 | cy="3900" | ||
| 150 | r="76" | ||
| 151 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 152 | id="circle20" /> | ||
| 153 | <!-- Circle --> | ||
| 154 | <circle | ||
| 155 | cx="1350" | ||
| 156 | cy="5100" | ||
| 157 | r="76" | ||
| 158 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 159 | id="circle22" /> | ||
| 160 | <!-- Circle --> | ||
| 161 | <circle | ||
| 162 | cx="1650" | ||
| 163 | cy="5100" | ||
| 164 | r="76" | ||
| 165 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 166 | id="circle24" /> | ||
| 167 | <!-- Circle --> | ||
| 168 | <circle | ||
| 169 | cx="1950" | ||
| 170 | cy="5100" | ||
| 171 | r="76" | ||
| 172 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 173 | id="circle26" /> | ||
| 174 | <!-- Circle --> | ||
| 175 | <circle | ||
| 176 | cx="4350" | ||
| 177 | cy="5100" | ||
| 178 | r="76" | ||
| 179 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 180 | id="circle28" /> | ||
| 181 | <!-- Circle --> | ||
| 182 | <circle | ||
| 183 | cx="4650" | ||
| 184 | cy="5100" | ||
| 185 | r="76" | ||
| 186 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 187 | id="circle30" /> | ||
| 188 | <!-- Circle --> | ||
| 189 | <circle | ||
| 190 | cx="4950" | ||
| 191 | cy="5100" | ||
| 192 | r="76" | ||
| 193 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 194 | id="circle32" /> | ||
| 195 | <!-- Line --> | ||
| 196 | <polyline | ||
| 197 | points="1350,3450 2350,2590 " | ||
| 198 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 199 | id="polyline34" /> | ||
| 200 | <!-- Arrowhead on XXXpoint 1350 3450 - 2444 2510--> | ||
| 201 | <!-- Line --> | ||
| 202 | <polyline | ||
| 203 | points="4950,3450 3948,2590 " | ||
| 204 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 205 | id="polyline38" /> | ||
| 206 | <!-- Arrowhead on XXXpoint 4950 3450 - 3854 2510--> | ||
| 207 | <!-- Line: box --> | ||
| 208 | <rect | ||
| 209 | x="750" | ||
| 210 | y="3450" | ||
| 211 | width="1800" | ||
| 212 | height="900" | ||
| 213 | rx="0" | ||
| 214 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 215 | id="rect42" /> | ||
| 216 | <!-- Line --> | ||
| 217 | <polyline | ||
| 218 | points="2250,5400 2250,4414 " | ||
| 219 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 220 | id="polyline44" /> | ||
| 221 | <!-- Arrowhead on XXXpoint 2250 5400 - 2250 4290--> | ||
| 222 | <!-- Line: box --> | ||
| 223 | <rect | ||
| 224 | x="1500" | ||
| 225 | y="5400" | ||
| 226 | width="1500" | ||
| 227 | height="900" | ||
| 228 | rx="0" | ||
| 229 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 230 | id="rect48" /> | ||
| 231 | <!-- Line: box --> | ||
| 232 | <rect | ||
| 233 | x="300" | ||
| 234 | y="6600" | ||
| 235 | width="1500" | ||
| 236 | height="900" | ||
| 237 | rx="0" | ||
| 238 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 239 | id="rect50" /> | ||
| 240 | <!-- Line: box --> | ||
| 241 | <rect | ||
| 242 | x="3750" | ||
| 243 | y="3450" | ||
| 244 | width="1800" | ||
| 245 | height="900" | ||
| 246 | rx="0" | ||
| 247 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 248 | id="rect52" /> | ||
| 249 | <!-- Line: box --> | ||
| 250 | <rect | ||
| 251 | x="4500" | ||
| 252 | y="5400" | ||
| 253 | width="1500" | ||
| 254 | height="900" | ||
| 255 | rx="0" | ||
| 256 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 257 | id="rect54" /> | ||
| 258 | <!-- Line: box --> | ||
| 259 | <rect | ||
| 260 | x="3300" | ||
| 261 | y="6600" | ||
| 262 | width="1500" | ||
| 263 | height="900" | ||
| 264 | rx="0" | ||
| 265 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 266 | id="rect56" /> | ||
| 267 | <!-- Line: box --> | ||
| 268 | <rect | ||
| 269 | x="2250" | ||
| 270 | y="1650" | ||
| 271 | width="1800" | ||
| 272 | height="900" | ||
| 273 | rx="0" | ||
| 274 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 275 | id="rect58" /> | ||
| 276 | <!-- Text --> | ||
| 277 | <text | ||
| 278 | xml:space="preserve" | ||
| 279 | x="6450" | ||
| 280 | y="300" | ||
| 281 | fill="#000000" | ||
| 282 | font-family="Helvetica" | ||
| 283 | font-style="normal" | ||
| 284 | font-weight="normal" | ||
| 285 | font-size="192" | ||
| 286 | text-anchor="end" | ||
| 287 | id="text60">rcu_bh</text> | ||
| 288 | <!-- Text --> | ||
| 289 | <text | ||
| 290 | xml:space="preserve" | ||
| 291 | x="3150" | ||
| 292 | y="1950" | ||
| 293 | fill="#000000" | ||
| 294 | font-family="Courier" | ||
| 295 | font-style="normal" | ||
| 296 | font-weight="bold" | ||
| 297 | font-size="192" | ||
| 298 | text-anchor="middle" | ||
| 299 | id="text62">struct</text> | ||
| 300 | <!-- Text --> | ||
| 301 | <text | ||
| 302 | xml:space="preserve" | ||
| 303 | x="3150" | ||
| 304 | y="2250" | ||
| 305 | fill="#000000" | ||
| 306 | font-family="Courier" | ||
| 307 | font-style="normal" | ||
| 308 | font-weight="bold" | ||
| 309 | font-size="192" | ||
| 310 | text-anchor="middle" | ||
| 311 | id="text64">rcu_node</text> | ||
| 312 | <!-- Text --> | ||
| 313 | <text | ||
| 314 | xml:space="preserve" | ||
| 315 | x="1650" | ||
| 316 | y="3750" | ||
| 317 | fill="#000000" | ||
| 318 | font-family="Courier" | ||
| 319 | font-style="normal" | ||
| 320 | font-weight="bold" | ||
| 321 | font-size="192" | ||
| 322 | text-anchor="middle" | ||
| 323 | id="text66">struct</text> | ||
| 324 | <!-- Text --> | ||
| 325 | <text | ||
| 326 | xml:space="preserve" | ||
| 327 | x="1650" | ||
| 328 | y="4050" | ||
| 329 | fill="#000000" | ||
| 330 | font-family="Courier" | ||
| 331 | font-style="normal" | ||
| 332 | font-weight="bold" | ||
| 333 | font-size="192" | ||
| 334 | text-anchor="middle" | ||
| 335 | id="text68">rcu_node</text> | ||
| 336 | <!-- Text --> | ||
| 337 | <text | ||
| 338 | xml:space="preserve" | ||
| 339 | x="4650" | ||
| 340 | y="4050" | ||
| 341 | fill="#000000" | ||
| 342 | font-family="Courier" | ||
| 343 | font-style="normal" | ||
| 344 | font-weight="bold" | ||
| 345 | font-size="192" | ||
| 346 | text-anchor="middle" | ||
| 347 | id="text70">rcu_node</text> | ||
| 348 | <!-- Text --> | ||
| 349 | <text | ||
| 350 | xml:space="preserve" | ||
| 351 | x="4650" | ||
| 352 | y="3750" | ||
| 353 | fill="#000000" | ||
| 354 | font-family="Courier" | ||
| 355 | font-style="normal" | ||
| 356 | font-weight="bold" | ||
| 357 | font-size="192" | ||
| 358 | text-anchor="middle" | ||
| 359 | id="text72">struct</text> | ||
| 360 | <!-- Text --> | ||
| 361 | <text | ||
| 362 | xml:space="preserve" | ||
| 363 | x="2250" | ||
| 364 | y="5700" | ||
| 365 | fill="#000000" | ||
| 366 | font-family="Courier" | ||
| 367 | font-style="normal" | ||
| 368 | font-weight="bold" | ||
| 369 | font-size="192" | ||
| 370 | text-anchor="middle" | ||
| 371 | id="text74">struct</text> | ||
| 372 | <!-- Text --> | ||
| 373 | <text | ||
| 374 | xml:space="preserve" | ||
| 375 | x="2250" | ||
| 376 | y="6000" | ||
| 377 | fill="#000000" | ||
| 378 | font-family="Courier" | ||
| 379 | font-style="normal" | ||
| 380 | font-weight="bold" | ||
| 381 | font-size="192" | ||
| 382 | text-anchor="middle" | ||
| 383 | id="text76">rcu_data</text> | ||
| 384 | <!-- Text --> | ||
| 385 | <text | ||
| 386 | xml:space="preserve" | ||
| 387 | x="1050" | ||
| 388 | y="6900" | ||
| 389 | fill="#000000" | ||
| 390 | font-family="Courier" | ||
| 391 | font-style="normal" | ||
| 392 | font-weight="bold" | ||
| 393 | font-size="192" | ||
| 394 | text-anchor="middle" | ||
| 395 | id="text78">struct</text> | ||
| 396 | <!-- Text --> | ||
| 397 | <text | ||
| 398 | xml:space="preserve" | ||
| 399 | x="1050" | ||
| 400 | y="7200" | ||
| 401 | fill="#000000" | ||
| 402 | font-family="Courier" | ||
| 403 | font-style="normal" | ||
| 404 | font-weight="bold" | ||
| 405 | font-size="192" | ||
| 406 | text-anchor="middle" | ||
| 407 | id="text80">rcu_data</text> | ||
| 408 | <!-- Text --> | ||
| 409 | <text | ||
| 410 | xml:space="preserve" | ||
| 411 | x="5250" | ||
| 412 | y="5700" | ||
| 413 | fill="#000000" | ||
| 414 | font-family="Courier" | ||
| 415 | font-style="normal" | ||
| 416 | font-weight="bold" | ||
| 417 | font-size="192" | ||
| 418 | text-anchor="middle" | ||
| 419 | id="text82">struct</text> | ||
| 420 | <!-- Text --> | ||
| 421 | <text | ||
| 422 | xml:space="preserve" | ||
| 423 | x="5250" | ||
| 424 | y="6000" | ||
| 425 | fill="#000000" | ||
| 426 | font-family="Courier" | ||
| 427 | font-style="normal" | ||
| 428 | font-weight="bold" | ||
| 429 | font-size="192" | ||
| 430 | text-anchor="middle" | ||
| 431 | id="text84">rcu_data</text> | ||
| 432 | <!-- Text --> | ||
| 433 | <text | ||
| 434 | xml:space="preserve" | ||
| 435 | x="4050" | ||
| 436 | y="6900" | ||
| 437 | fill="#000000" | ||
| 438 | font-family="Courier" | ||
| 439 | font-style="normal" | ||
| 440 | font-weight="bold" | ||
| 441 | font-size="192" | ||
| 442 | text-anchor="middle" | ||
| 443 | id="text86">struct</text> | ||
| 444 | <!-- Text --> | ||
| 445 | <text | ||
| 446 | xml:space="preserve" | ||
| 447 | x="4050" | ||
| 448 | y="7200" | ||
| 449 | fill="#000000" | ||
| 450 | font-family="Courier" | ||
| 451 | font-style="normal" | ||
| 452 | font-weight="bold" | ||
| 453 | font-size="192" | ||
| 454 | text-anchor="middle" | ||
| 455 | id="text88">rcu_data</text> | ||
| 456 | <!-- Text --> | ||
| 457 | <text | ||
| 458 | xml:space="preserve" | ||
| 459 | x="450" | ||
| 460 | y="1350" | ||
| 461 | fill="#000000" | ||
| 462 | font-family="Courier" | ||
| 463 | font-style="normal" | ||
| 464 | font-weight="bold" | ||
| 465 | font-size="192" | ||
| 466 | text-anchor="start" | ||
| 467 | id="text90">struct rcu_state</text> | ||
| 468 | <!-- Text --> | ||
| 469 | <text | ||
| 470 | xml:space="preserve" | ||
| 471 | x="6000" | ||
| 472 | y="750" | ||
| 473 | fill="#000000" | ||
| 474 | font-family="Helvetica" | ||
| 475 | font-style="normal" | ||
| 476 | font-weight="normal" | ||
| 477 | font-size="192" | ||
| 478 | text-anchor="end" | ||
| 479 | id="text92">rcu_sched</text> | ||
| 480 | <!-- Line --> | ||
| 481 | <polyline | ||
| 482 | points="5250,5400 5250,4414 " | ||
| 483 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 484 | id="polyline94" /> | ||
| 485 | <!-- Arrowhead on XXXpoint 5250 5400 - 5250 4290--> | ||
| 486 | <!-- Line --> | ||
| 487 | <polyline | ||
| 488 | points="4050,6600 4050,4414 " | ||
| 489 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 490 | id="polyline98" /> | ||
| 491 | <!-- Arrowhead on XXXpoint 4050 6600 - 4050 4290--> | ||
| 492 | <!-- Line --> | ||
| 493 | <polyline | ||
| 494 | points="1050,6600 1050,4414 " | ||
| 495 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 496 | id="polyline102" /> | ||
| 497 | <!-- Arrowhead on XXXpoint 1050 6600 - 1050 4290--> | ||
| 498 | </g> | ||
| 499 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBHdyntick.svg b/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBHdyntick.svg new file mode 100644 index 000000000000..21ba7823479d --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBHdyntick.svg | |||
| @@ -0,0 +1,695 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:20:02 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 2.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="5.7in" | ||
| 17 | height="8.6in" | ||
| 18 | viewBox="-44 -44 6838 10288" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="BigTreeClassicRCUBHdyntick.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata166"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs164"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3924" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | <marker | ||
| 51 | inkscape:stockid="Arrow2Lend" | ||
| 52 | orient="auto" | ||
| 53 | refY="0.0" | ||
| 54 | refX="0.0" | ||
| 55 | id="Arrow2Lend" | ||
| 56 | style="overflow:visible;"> | ||
| 57 | <path | ||
| 58 | id="path3936" | ||
| 59 | style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" | ||
| 60 | d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " | ||
| 61 | transform="scale(1.1) rotate(180) translate(1,0)" /> | ||
| 62 | </marker> | ||
| 63 | </defs> | ||
| 64 | <sodipodi:namedview | ||
| 65 | pagecolor="#ffffff" | ||
| 66 | bordercolor="#666666" | ||
| 67 | borderopacity="1" | ||
| 68 | objecttolerance="10" | ||
| 69 | gridtolerance="10" | ||
| 70 | guidetolerance="10" | ||
| 71 | inkscape:pageopacity="0" | ||
| 72 | inkscape:pageshadow="2" | ||
| 73 | inkscape:window-width="845" | ||
| 74 | inkscape:window-height="988" | ||
| 75 | id="namedview162" | ||
| 76 | showgrid="false" | ||
| 77 | inkscape:zoom="1.0452196" | ||
| 78 | inkscape:cx="256.5" | ||
| 79 | inkscape:cy="387.00003" | ||
| 80 | inkscape:window-x="356" | ||
| 81 | inkscape:window-y="61" | ||
| 82 | inkscape:window-maximized="0" | ||
| 83 | inkscape:current-layer="g4" /> | ||
| 84 | <g | ||
| 85 | style="stroke-width:.025in; fill:none" | ||
| 86 | id="g4"> | ||
| 87 | <!-- Line: box --> | ||
| 88 | <rect | ||
| 89 | x="450" | ||
| 90 | y="0" | ||
| 91 | width="6300" | ||
| 92 | height="7350" | ||
| 93 | rx="0" | ||
| 94 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 95 | id="rect6" /> | ||
| 96 | <!-- Line: box --> | ||
| 97 | <rect | ||
| 98 | x="4950" | ||
| 99 | y="4950" | ||
| 100 | width="1500" | ||
| 101 | height="900" | ||
| 102 | rx="0" | ||
| 103 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 104 | id="rect8" /> | ||
| 105 | <!-- Line: box --> | ||
| 106 | <rect | ||
| 107 | x="750" | ||
| 108 | y="600" | ||
| 109 | width="5700" | ||
| 110 | height="3750" | ||
| 111 | rx="0" | ||
| 112 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 113 | id="rect10" /> | ||
| 114 | <!-- Line --> | ||
| 115 | <polyline | ||
| 116 | points="5250,8100 5688,5912 " | ||
| 117 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 118 | id="polyline12" /> | ||
| 119 | <!-- Arrowhead on XXXpoint 5250 8100 - 5710 5790--> | ||
| 120 | <polyline | ||
| 121 | points="5714 6068 5704 5822 5598 6044 " | ||
| 122 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 123 | id="polyline14" /> | ||
| 124 | <!-- Line --> | ||
| 125 | <polyline | ||
| 126 | points="4050,9300 4486,7262 " | ||
| 127 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 128 | id="polyline16" /> | ||
| 129 | <!-- Arrowhead on XXXpoint 4050 9300 - 4512 7140--> | ||
| 130 | <polyline | ||
| 131 | points="4514 7418 4506 7172 4396 7394 " | ||
| 132 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 133 | id="polyline18" /> | ||
| 134 | <!-- Line --> | ||
| 135 | <polyline | ||
| 136 | points="1040,9300 1476,7262 " | ||
| 137 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 138 | id="polyline20" /> | ||
| 139 | <!-- Arrowhead on XXXpoint 1040 9300 - 1502 7140--> | ||
| 140 | <polyline | ||
| 141 | points="1504 7418 1496 7172 1386 7394 " | ||
| 142 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 143 | id="polyline22" /> | ||
| 144 | <!-- Line --> | ||
| 145 | <polyline | ||
| 146 | points="2240,8100 2676,6062 " | ||
| 147 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 148 | id="polyline24" /> | ||
| 149 | <!-- Arrowhead on XXXpoint 2240 8100 - 2702 5940--> | ||
| 150 | <polyline | ||
| 151 | points="2704 6218 2696 5972 2586 6194 " | ||
| 152 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 153 | id="polyline26" /> | ||
| 154 | <!-- Line: box --> | ||
| 155 | <rect | ||
| 156 | x="0" | ||
| 157 | y="450" | ||
| 158 | width="6300" | ||
| 159 | height="7350" | ||
| 160 | rx="0" | ||
| 161 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 162 | id="rect28" /> | ||
| 163 | <!-- Line: box --> | ||
| 164 | <rect | ||
| 165 | x="300" | ||
| 166 | y="1050" | ||
| 167 | width="5700" | ||
| 168 | height="3750" | ||
| 169 | rx="0" | ||
| 170 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 171 | id="rect30" /> | ||
| 172 | <!-- Line --> | ||
| 173 | <polyline | ||
| 174 | points="1350,3450 2350,2590 " | ||
| 175 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 176 | id="polyline32" /> | ||
| 177 | <!-- Arrowhead on XXXpoint 1350 3450 - 2444 2510--> | ||
| 178 | <!-- Line --> | ||
| 179 | <polyline | ||
| 180 | points="4950,3450 3948,2590 " | ||
| 181 | style="stroke:#00d1d1;stroke-width:30.0045575;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 182 | id="polyline36" /> | ||
| 183 | <!-- Arrowhead on XXXpoint 4950 3450 - 3854 2510--> | ||
| 184 | <!-- Line --> | ||
| 185 | <polyline | ||
| 186 | points="4050,6600 4050,4414 " | ||
| 187 | style="stroke:#00d1d1;stroke-width:30.00455750000000066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 188 | id="polyline40" /> | ||
| 189 | <!-- Arrowhead on XXXpoint 4050 6600 - 4050 4290--> | ||
| 190 | <!-- Line --> | ||
| 191 | <polyline | ||
| 192 | points="1050,6600 1050,4414 " | ||
| 193 | style="stroke:#00d1d1;stroke-width:30.00455750000000066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 194 | id="polyline44" /> | ||
| 195 | <!-- Arrowhead on XXXpoint 1050 6600 - 1050 4290--> | ||
| 196 | <!-- Line --> | ||
| 197 | <polyline | ||
| 198 | points="2250,5400 2250,4414 " | ||
| 199 | style="stroke:#00d1d1;stroke-width:30.00455750000000066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 200 | id="polyline48" /> | ||
| 201 | <!-- Arrowhead on XXXpoint 2250 5400 - 2250 4290--> | ||
| 202 | <!-- Line --> | ||
| 203 | <polyline | ||
| 204 | points="2250,8100 2250,6364 " | ||
| 205 | style="stroke:#00ff00;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 206 | id="polyline52" /> | ||
| 207 | <!-- Arrowhead on XXXpoint 2250 8100 - 2250 6240--> | ||
| 208 | <!-- Line --> | ||
| 209 | <polyline | ||
| 210 | points="1050,9300 1050,7564 " | ||
| 211 | style="stroke:#00ff00;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 212 | id="polyline56" /> | ||
| 213 | <!-- Arrowhead on XXXpoint 1050 9300 - 1050 7440--> | ||
| 214 | <!-- Line --> | ||
| 215 | <polyline | ||
| 216 | points="4050,9300 4050,7564 " | ||
| 217 | style="stroke:#00ff00;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 218 | id="polyline60" /> | ||
| 219 | <!-- Arrowhead on XXXpoint 4050 9300 - 4050 7440--> | ||
| 220 | <!-- Line --> | ||
| 221 | <polyline | ||
| 222 | points="5250,8100 5250,6364 " | ||
| 223 | style="stroke:#00ff00;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 224 | id="polyline64" /> | ||
| 225 | <!-- Arrowhead on XXXpoint 5250 8100 - 5250 6240--> | ||
| 226 | <!-- Circle --> | ||
| 227 | <circle | ||
| 228 | cx="2850" | ||
| 229 | cy="3900" | ||
| 230 | r="76" | ||
| 231 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 232 | id="circle68" /> | ||
| 233 | <!-- Circle --> | ||
| 234 | <circle | ||
| 235 | cx="3150" | ||
| 236 | cy="3900" | ||
| 237 | r="76" | ||
| 238 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 239 | id="circle70" /> | ||
| 240 | <!-- Circle --> | ||
| 241 | <circle | ||
| 242 | cx="3450" | ||
| 243 | cy="3900" | ||
| 244 | r="76" | ||
| 245 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 246 | id="circle72" /> | ||
| 247 | <!-- Circle --> | ||
| 248 | <circle | ||
| 249 | cx="1350" | ||
| 250 | cy="5100" | ||
| 251 | r="76" | ||
| 252 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 253 | id="circle74" /> | ||
| 254 | <!-- Circle --> | ||
| 255 | <circle | ||
| 256 | cx="1650" | ||
| 257 | cy="5100" | ||
| 258 | r="76" | ||
| 259 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 260 | id="circle76" /> | ||
| 261 | <!-- Circle --> | ||
| 262 | <circle | ||
| 263 | cx="1950" | ||
| 264 | cy="5100" | ||
| 265 | r="76" | ||
| 266 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 267 | id="circle78" /> | ||
| 268 | <!-- Circle --> | ||
| 269 | <circle | ||
| 270 | cx="4350" | ||
| 271 | cy="5100" | ||
| 272 | r="76" | ||
| 273 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 274 | id="circle80" /> | ||
| 275 | <!-- Circle --> | ||
| 276 | <circle | ||
| 277 | cx="4650" | ||
| 278 | cy="5100" | ||
| 279 | r="76" | ||
| 280 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 281 | id="circle82" /> | ||
| 282 | <!-- Circle --> | ||
| 283 | <circle | ||
| 284 | cx="4950" | ||
| 285 | cy="5100" | ||
| 286 | r="76" | ||
| 287 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 288 | id="circle84" /> | ||
| 289 | <!-- Line: box --> | ||
| 290 | <rect | ||
| 291 | x="750" | ||
| 292 | y="3450" | ||
| 293 | width="1800" | ||
| 294 | height="900" | ||
| 295 | rx="0" | ||
| 296 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 297 | id="rect86" /> | ||
| 298 | <!-- Line: box --> | ||
| 299 | <rect | ||
| 300 | x="300" | ||
| 301 | y="6600" | ||
| 302 | width="1500" | ||
| 303 | height="900" | ||
| 304 | rx="0" | ||
| 305 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 306 | id="rect88" /> | ||
| 307 | <!-- Line: box --> | ||
| 308 | <rect | ||
| 309 | x="3750" | ||
| 310 | y="3450" | ||
| 311 | width="1800" | ||
| 312 | height="900" | ||
| 313 | rx="0" | ||
| 314 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 315 | id="rect90" /> | ||
| 316 | <!-- Line: box --> | ||
| 317 | <rect | ||
| 318 | x="4500" | ||
| 319 | y="5400" | ||
| 320 | width="1500" | ||
| 321 | height="900" | ||
| 322 | rx="0" | ||
| 323 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 324 | id="rect92" /> | ||
| 325 | <!-- Line: box --> | ||
| 326 | <rect | ||
| 327 | x="3300" | ||
| 328 | y="6600" | ||
| 329 | width="1500" | ||
| 330 | height="900" | ||
| 331 | rx="0" | ||
| 332 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 333 | id="rect94" /> | ||
| 334 | <!-- Line: box --> | ||
| 335 | <rect | ||
| 336 | x="2250" | ||
| 337 | y="1650" | ||
| 338 | width="1800" | ||
| 339 | height="900" | ||
| 340 | rx="0" | ||
| 341 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 342 | id="rect96" /> | ||
| 343 | <!-- Line: box --> | ||
| 344 | <rect | ||
| 345 | x="0" | ||
| 346 | y="9300" | ||
| 347 | width="2100" | ||
| 348 | height="900" | ||
| 349 | rx="0" | ||
| 350 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 351 | id="rect98" /> | ||
| 352 | <!-- Line: box --> | ||
| 353 | <rect | ||
| 354 | x="1350" | ||
| 355 | y="8100" | ||
| 356 | width="2100" | ||
| 357 | height="900" | ||
| 358 | rx="0" | ||
| 359 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 360 | id="rect100" /> | ||
| 361 | <!-- Line: box --> | ||
| 362 | <rect | ||
| 363 | x="3000" | ||
| 364 | y="9300" | ||
| 365 | width="2100" | ||
| 366 | height="900" | ||
| 367 | rx="0" | ||
| 368 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 369 | id="rect102" /> | ||
| 370 | <!-- Line: box --> | ||
| 371 | <rect | ||
| 372 | x="4350" | ||
| 373 | y="8100" | ||
| 374 | width="2100" | ||
| 375 | height="900" | ||
| 376 | rx="0" | ||
| 377 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 378 | id="rect104" /> | ||
| 379 | <!-- Line: box --> | ||
| 380 | <rect | ||
| 381 | x="1500" | ||
| 382 | y="5400" | ||
| 383 | width="1500" | ||
| 384 | height="900" | ||
| 385 | rx="0" | ||
| 386 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 387 | id="rect106" /> | ||
| 388 | <!-- Text --> | ||
| 389 | <text | ||
| 390 | xml:space="preserve" | ||
| 391 | x="6450" | ||
| 392 | y="300" | ||
| 393 | fill="#000000" | ||
| 394 | font-family="Helvetica" | ||
| 395 | font-style="normal" | ||
| 396 | font-weight="normal" | ||
| 397 | font-size="192" | ||
| 398 | text-anchor="end" | ||
| 399 | id="text108">rcu_bh</text> | ||
| 400 | <!-- Text --> | ||
| 401 | <text | ||
| 402 | xml:space="preserve" | ||
| 403 | x="3150" | ||
| 404 | y="1950" | ||
| 405 | fill="#000000" | ||
| 406 | font-family="Courier" | ||
| 407 | font-style="normal" | ||
| 408 | font-weight="bold" | ||
| 409 | font-size="192" | ||
| 410 | text-anchor="middle" | ||
| 411 | id="text110">struct</text> | ||
| 412 | <!-- Text --> | ||
| 413 | <text | ||
| 414 | xml:space="preserve" | ||
| 415 | x="3150" | ||
| 416 | y="2250" | ||
| 417 | fill="#000000" | ||
| 418 | font-family="Courier" | ||
| 419 | font-style="normal" | ||
| 420 | font-weight="bold" | ||
| 421 | font-size="192" | ||
| 422 | text-anchor="middle" | ||
| 423 | id="text112">rcu_node</text> | ||
| 424 | <!-- Text --> | ||
| 425 | <text | ||
| 426 | xml:space="preserve" | ||
| 427 | x="1650" | ||
| 428 | y="3750" | ||
| 429 | fill="#000000" | ||
| 430 | font-family="Courier" | ||
| 431 | font-style="normal" | ||
| 432 | font-weight="bold" | ||
| 433 | font-size="192" | ||
| 434 | text-anchor="middle" | ||
| 435 | id="text114">struct</text> | ||
| 436 | <!-- Text --> | ||
| 437 | <text | ||
| 438 | xml:space="preserve" | ||
| 439 | x="1650" | ||
| 440 | y="4050" | ||
| 441 | fill="#000000" | ||
| 442 | font-family="Courier" | ||
| 443 | font-style="normal" | ||
| 444 | font-weight="bold" | ||
| 445 | font-size="192" | ||
| 446 | text-anchor="middle" | ||
| 447 | id="text116">rcu_node</text> | ||
| 448 | <!-- Text --> | ||
| 449 | <text | ||
| 450 | xml:space="preserve" | ||
| 451 | x="4650" | ||
| 452 | y="4050" | ||
| 453 | fill="#000000" | ||
| 454 | font-family="Courier" | ||
| 455 | font-style="normal" | ||
| 456 | font-weight="bold" | ||
| 457 | font-size="192" | ||
| 458 | text-anchor="middle" | ||
| 459 | id="text118">rcu_node</text> | ||
| 460 | <!-- Text --> | ||
| 461 | <text | ||
| 462 | xml:space="preserve" | ||
| 463 | x="4650" | ||
| 464 | y="3750" | ||
| 465 | fill="#000000" | ||
| 466 | font-family="Courier" | ||
| 467 | font-style="normal" | ||
| 468 | font-weight="bold" | ||
| 469 | font-size="192" | ||
| 470 | text-anchor="middle" | ||
| 471 | id="text120">struct</text> | ||
| 472 | <!-- Text --> | ||
| 473 | <text | ||
| 474 | xml:space="preserve" | ||
| 475 | x="2250" | ||
| 476 | y="5700" | ||
| 477 | fill="#000000" | ||
| 478 | font-family="Courier" | ||
| 479 | font-style="normal" | ||
| 480 | font-weight="bold" | ||
| 481 | font-size="192" | ||
| 482 | text-anchor="middle" | ||
| 483 | id="text122">struct</text> | ||
| 484 | <!-- Text --> | ||
| 485 | <text | ||
| 486 | xml:space="preserve" | ||
| 487 | x="2250" | ||
| 488 | y="6000" | ||
| 489 | fill="#000000" | ||
| 490 | font-family="Courier" | ||
| 491 | font-style="normal" | ||
| 492 | font-weight="bold" | ||
| 493 | font-size="192" | ||
| 494 | text-anchor="middle" | ||
| 495 | id="text124">rcu_data</text> | ||
| 496 | <!-- Text --> | ||
| 497 | <text | ||
| 498 | xml:space="preserve" | ||
| 499 | x="1050" | ||
| 500 | y="6900" | ||
| 501 | fill="#000000" | ||
| 502 | font-family="Courier" | ||
| 503 | font-style="normal" | ||
| 504 | font-weight="bold" | ||
| 505 | font-size="192" | ||
| 506 | text-anchor="middle" | ||
| 507 | id="text126">struct</text> | ||
| 508 | <!-- Text --> | ||
| 509 | <text | ||
| 510 | xml:space="preserve" | ||
| 511 | x="1050" | ||
| 512 | y="7200" | ||
| 513 | fill="#000000" | ||
| 514 | font-family="Courier" | ||
| 515 | font-style="normal" | ||
| 516 | font-weight="bold" | ||
| 517 | font-size="192" | ||
| 518 | text-anchor="middle" | ||
| 519 | id="text128">rcu_data</text> | ||
| 520 | <!-- Text --> | ||
| 521 | <text | ||
| 522 | xml:space="preserve" | ||
| 523 | x="5250" | ||
| 524 | y="5700" | ||
| 525 | fill="#000000" | ||
| 526 | font-family="Courier" | ||
| 527 | font-style="normal" | ||
| 528 | font-weight="bold" | ||
| 529 | font-size="192" | ||
| 530 | text-anchor="middle" | ||
| 531 | id="text130">struct</text> | ||
| 532 | <!-- Text --> | ||
| 533 | <text | ||
| 534 | xml:space="preserve" | ||
| 535 | x="5250" | ||
| 536 | y="6000" | ||
| 537 | fill="#000000" | ||
| 538 | font-family="Courier" | ||
| 539 | font-style="normal" | ||
| 540 | font-weight="bold" | ||
| 541 | font-size="192" | ||
| 542 | text-anchor="middle" | ||
| 543 | id="text132">rcu_data</text> | ||
| 544 | <!-- Text --> | ||
| 545 | <text | ||
| 546 | xml:space="preserve" | ||
| 547 | x="4050" | ||
| 548 | y="6900" | ||
| 549 | fill="#000000" | ||
| 550 | font-family="Courier" | ||
| 551 | font-style="normal" | ||
| 552 | font-weight="bold" | ||
| 553 | font-size="192" | ||
| 554 | text-anchor="middle" | ||
| 555 | id="text134">struct</text> | ||
| 556 | <!-- Text --> | ||
| 557 | <text | ||
| 558 | xml:space="preserve" | ||
| 559 | x="4050" | ||
| 560 | y="7200" | ||
| 561 | fill="#000000" | ||
| 562 | font-family="Courier" | ||
| 563 | font-style="normal" | ||
| 564 | font-weight="bold" | ||
| 565 | font-size="192" | ||
| 566 | text-anchor="middle" | ||
| 567 | id="text136">rcu_data</text> | ||
| 568 | <!-- Text --> | ||
| 569 | <text | ||
| 570 | xml:space="preserve" | ||
| 571 | x="450" | ||
| 572 | y="1350" | ||
| 573 | fill="#000000" | ||
| 574 | font-family="Courier" | ||
| 575 | font-style="normal" | ||
| 576 | font-weight="bold" | ||
| 577 | font-size="192" | ||
| 578 | text-anchor="start" | ||
| 579 | id="text138">struct rcu_state</text> | ||
| 580 | <!-- Text --> | ||
| 581 | <text | ||
| 582 | xml:space="preserve" | ||
| 583 | x="1050" | ||
| 584 | y="9600" | ||
| 585 | fill="#000000" | ||
| 586 | font-family="Courier" | ||
| 587 | font-style="normal" | ||
| 588 | font-weight="bold" | ||
| 589 | font-size="192" | ||
| 590 | text-anchor="middle" | ||
| 591 | id="text140">struct</text> | ||
| 592 | <!-- Text --> | ||
| 593 | <text | ||
| 594 | xml:space="preserve" | ||
| 595 | x="1050" | ||
| 596 | y="9900" | ||
| 597 | fill="#000000" | ||
| 598 | font-family="Courier" | ||
| 599 | font-style="normal" | ||
| 600 | font-weight="bold" | ||
| 601 | font-size="192" | ||
| 602 | text-anchor="middle" | ||
| 603 | id="text142">rcu_dynticks</text> | ||
| 604 | <!-- Text --> | ||
| 605 | <text | ||
| 606 | xml:space="preserve" | ||
| 607 | x="4050" | ||
| 608 | y="9600" | ||
| 609 | fill="#000000" | ||
| 610 | font-family="Courier" | ||
| 611 | font-style="normal" | ||
| 612 | font-weight="bold" | ||
| 613 | font-size="192" | ||
| 614 | text-anchor="middle" | ||
| 615 | id="text144">struct</text> | ||
| 616 | <!-- Text --> | ||
| 617 | <text | ||
| 618 | xml:space="preserve" | ||
| 619 | x="4050" | ||
| 620 | y="9900" | ||
| 621 | fill="#000000" | ||
| 622 | font-family="Courier" | ||
| 623 | font-style="normal" | ||
| 624 | font-weight="bold" | ||
| 625 | font-size="192" | ||
| 626 | text-anchor="middle" | ||
| 627 | id="text146">rcu_dynticks</text> | ||
| 628 | <!-- Text --> | ||
| 629 | <text | ||
| 630 | xml:space="preserve" | ||
| 631 | x="2400" | ||
| 632 | y="8400" | ||
| 633 | fill="#000000" | ||
| 634 | font-family="Courier" | ||
| 635 | font-style="normal" | ||
| 636 | font-weight="bold" | ||
| 637 | font-size="192" | ||
| 638 | text-anchor="middle" | ||
| 639 | id="text148">struct</text> | ||
| 640 | <!-- Text --> | ||
| 641 | <text | ||
| 642 | xml:space="preserve" | ||
| 643 | x="2400" | ||
| 644 | y="8700" | ||
| 645 | fill="#000000" | ||
| 646 | font-family="Courier" | ||
| 647 | font-style="normal" | ||
| 648 | font-weight="bold" | ||
| 649 | font-size="192" | ||
| 650 | text-anchor="middle" | ||
| 651 | id="text150">rcu_dynticks</text> | ||
| 652 | <!-- Text --> | ||
| 653 | <text | ||
| 654 | xml:space="preserve" | ||
| 655 | x="5400" | ||
| 656 | y="8400" | ||
| 657 | fill="#000000" | ||
| 658 | font-family="Courier" | ||
| 659 | font-style="normal" | ||
| 660 | font-weight="bold" | ||
| 661 | font-size="192" | ||
| 662 | text-anchor="middle" | ||
| 663 | id="text152">struct</text> | ||
| 664 | <!-- Text --> | ||
| 665 | <text | ||
| 666 | xml:space="preserve" | ||
| 667 | x="5400" | ||
| 668 | y="8700" | ||
| 669 | fill="#000000" | ||
| 670 | font-family="Courier" | ||
| 671 | font-style="normal" | ||
| 672 | font-weight="bold" | ||
| 673 | font-size="192" | ||
| 674 | text-anchor="middle" | ||
| 675 | id="text154">rcu_dynticks</text> | ||
| 676 | <!-- Text --> | ||
| 677 | <text | ||
| 678 | xml:space="preserve" | ||
| 679 | x="6000" | ||
| 680 | y="750" | ||
| 681 | fill="#000000" | ||
| 682 | font-family="Helvetica" | ||
| 683 | font-style="normal" | ||
| 684 | font-weight="normal" | ||
| 685 | font-size="192" | ||
| 686 | text-anchor="end" | ||
| 687 | id="text156">rcu_sched</text> | ||
| 688 | <!-- Line --> | ||
| 689 | <polyline | ||
| 690 | points="5250,5400 5250,4414 " | ||
| 691 | style="stroke:#00d1d1;stroke-width:30.00455750000000066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 692 | id="polyline158" /> | ||
| 693 | <!-- Arrowhead on XXXpoint 5250 5400 - 5250 4290--> | ||
| 694 | </g> | ||
| 695 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntick.svg b/Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntick.svg new file mode 100644 index 000000000000..15adcac036c7 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntick.svg | |||
| @@ -0,0 +1,741 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:32:59 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 2.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="6.1in" | ||
| 17 | height="8.9in" | ||
| 18 | viewBox="-44 -44 7288 10738" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="BigTreePreemptRCUBHdyntick.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata182"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs180"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3940" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="874" | ||
| 61 | inkscape:window-height="1148" | ||
| 62 | id="namedview178" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="1.2097379" | ||
| 65 | inkscape:cx="274.5" | ||
| 66 | inkscape:cy="400.49997" | ||
| 67 | inkscape:window-x="946" | ||
| 68 | inkscape:window-y="24" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="900" | ||
| 77 | y="0" | ||
| 78 | width="6300" | ||
| 79 | height="7350" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="1200" | ||
| 86 | y="600" | ||
| 87 | width="5700" | ||
| 88 | height="3750" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="5400" | ||
| 95 | y="4950" | ||
| 96 | width="1500" | ||
| 97 | height="900" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="450" | ||
| 104 | y="450" | ||
| 105 | width="6300" | ||
| 106 | height="7350" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Line: box --> | ||
| 111 | <rect | ||
| 112 | x="750" | ||
| 113 | y="1050" | ||
| 114 | width="5700" | ||
| 115 | height="3750" | ||
| 116 | rx="0" | ||
| 117 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 118 | id="rect14" /> | ||
| 119 | <!-- Line: box --> | ||
| 120 | <rect | ||
| 121 | x="4950" | ||
| 122 | y="5400" | ||
| 123 | width="1500" | ||
| 124 | height="900" | ||
| 125 | rx="0" | ||
| 126 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 127 | id="rect16" /> | ||
| 128 | <!-- Line --> | ||
| 129 | <polyline | ||
| 130 | points="5250,8550 5688,6362 " | ||
| 131 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 132 | id="polyline18" /> | ||
| 133 | <!-- Arrowhead on XXXpoint 5250 8550 - 5710 6240--> | ||
| 134 | <polyline | ||
| 135 | points="5714 6518 5704 6272 5598 6494 " | ||
| 136 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 137 | id="polyline20" /> | ||
| 138 | <!-- Line --> | ||
| 139 | <polyline | ||
| 140 | points="4050,9750 4486,7712 " | ||
| 141 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 142 | id="polyline22" /> | ||
| 143 | <!-- Arrowhead on XXXpoint 4050 9750 - 4512 7590--> | ||
| 144 | <polyline | ||
| 145 | points="4514 7868 4506 7622 4396 7844 " | ||
| 146 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 147 | id="polyline24" /> | ||
| 148 | <!-- Line --> | ||
| 149 | <polyline | ||
| 150 | points="1040,9750 1476,7712 " | ||
| 151 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 152 | id="polyline26" /> | ||
| 153 | <!-- Arrowhead on XXXpoint 1040 9750 - 1502 7590--> | ||
| 154 | <polyline | ||
| 155 | points="1504 7868 1496 7622 1386 7844 " | ||
| 156 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 157 | id="polyline28" /> | ||
| 158 | <!-- Line --> | ||
| 159 | <polyline | ||
| 160 | points="2240,8550 2676,6512 " | ||
| 161 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 162 | id="polyline30" /> | ||
| 163 | <!-- Arrowhead on XXXpoint 2240 8550 - 2702 6390--> | ||
| 164 | <polyline | ||
| 165 | points="2704 6668 2696 6422 2586 6644 " | ||
| 166 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 167 | id="polyline32" /> | ||
| 168 | <!-- Line --> | ||
| 169 | <polyline | ||
| 170 | points="4050,9750 5682,6360 " | ||
| 171 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 172 | id="polyline34" /> | ||
| 173 | <!-- Arrowhead on XXXpoint 4050 9750 - 5736 6246--> | ||
| 174 | <polyline | ||
| 175 | points="5672 6518 5722 6276 5562 6466 " | ||
| 176 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 177 | id="polyline36" /> | ||
| 178 | <!-- Line --> | ||
| 179 | <polyline | ||
| 180 | points="1010,9750 2642,6360 " | ||
| 181 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 182 | id="polyline38" /> | ||
| 183 | <!-- Arrowhead on XXXpoint 1010 9750 - 2696 6246--> | ||
| 184 | <polyline | ||
| 185 | points="2632 6518 2682 6276 2522 6466 " | ||
| 186 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 187 | id="polyline40" /> | ||
| 188 | <!-- Line: box --> | ||
| 189 | <rect | ||
| 190 | x="0" | ||
| 191 | y="900" | ||
| 192 | width="6300" | ||
| 193 | height="7350" | ||
| 194 | rx="0" | ||
| 195 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 196 | id="rect42" /> | ||
| 197 | <!-- Line: box --> | ||
| 198 | <rect | ||
| 199 | x="300" | ||
| 200 | y="1500" | ||
| 201 | width="5700" | ||
| 202 | height="3750" | ||
| 203 | rx="0" | ||
| 204 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 205 | id="rect44" /> | ||
| 206 | <!-- Line --> | ||
| 207 | <polyline | ||
| 208 | points="1350,3900 2350,3040 " | ||
| 209 | style="stroke:#00d1d1;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 210 | id="polyline46" /> | ||
| 211 | <!-- Arrowhead on XXXpoint 1350 3900 - 2444 2960--> | ||
| 212 | <!-- Line --> | ||
| 213 | <polyline | ||
| 214 | points="4950,3900 3948,3040 " | ||
| 215 | style="stroke:#00d1d1;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 216 | id="polyline50" /> | ||
| 217 | <!-- Arrowhead on XXXpoint 4950 3900 - 3854 2960--> | ||
| 218 | <!-- Line --> | ||
| 219 | <polyline | ||
| 220 | points="4050,7050 4050,4864 " | ||
| 221 | style="stroke:#00d1d1;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 222 | id="polyline54" /> | ||
| 223 | <!-- Arrowhead on XXXpoint 4050 7050 - 4050 4740--> | ||
| 224 | <!-- Line --> | ||
| 225 | <polyline | ||
| 226 | points="1050,7050 1050,4864 " | ||
| 227 | style="stroke:#00d1d1;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 228 | id="polyline58" /> | ||
| 229 | <!-- Arrowhead on XXXpoint 1050 7050 - 1050 4740--> | ||
| 230 | <!-- Line --> | ||
| 231 | <polyline | ||
| 232 | points="2250,5850 2250,4864 " | ||
| 233 | style="stroke:#00d1d1;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 234 | id="polyline62" /> | ||
| 235 | <!-- Arrowhead on XXXpoint 2250 5850 - 2250 4740--> | ||
| 236 | <!-- Line --> | ||
| 237 | <polyline | ||
| 238 | points="2250,8550 2250,6814 " | ||
| 239 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 240 | id="polyline66" /> | ||
| 241 | <!-- Arrowhead on XXXpoint 2250 8550 - 2250 6690--> | ||
| 242 | <!-- Line --> | ||
| 243 | <polyline | ||
| 244 | points="1050,9750 1050,8014 " | ||
| 245 | style="stroke:#00ff00;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 246 | id="polyline70" /> | ||
| 247 | <!-- Arrowhead on XXXpoint 1050 9750 - 1050 7890--> | ||
| 248 | <!-- Line --> | ||
| 249 | <polyline | ||
| 250 | points="4050,9750 4050,8014 " | ||
| 251 | style="stroke:#00ff00;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 252 | id="polyline74" /> | ||
| 253 | <!-- Arrowhead on XXXpoint 4050 9750 - 4050 7890--> | ||
| 254 | <!-- Line --> | ||
| 255 | <polyline | ||
| 256 | points="5250,8550 5250,6814 " | ||
| 257 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 258 | id="polyline78" /> | ||
| 259 | <!-- Arrowhead on XXXpoint 5250 8550 - 5250 6690--> | ||
| 260 | <!-- Circle --> | ||
| 261 | <circle | ||
| 262 | cx="2850" | ||
| 263 | cy="4350" | ||
| 264 | r="76" | ||
| 265 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 266 | id="circle82" /> | ||
| 267 | <!-- Circle --> | ||
| 268 | <circle | ||
| 269 | cx="3150" | ||
| 270 | cy="4350" | ||
| 271 | r="76" | ||
| 272 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 273 | id="circle84" /> | ||
| 274 | <!-- Circle --> | ||
| 275 | <circle | ||
| 276 | cx="3450" | ||
| 277 | cy="4350" | ||
| 278 | r="76" | ||
| 279 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 280 | id="circle86" /> | ||
| 281 | <!-- Circle --> | ||
| 282 | <circle | ||
| 283 | cx="1350" | ||
| 284 | cy="5550" | ||
| 285 | r="76" | ||
| 286 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 287 | id="circle88" /> | ||
| 288 | <!-- Circle --> | ||
| 289 | <circle | ||
| 290 | cx="1650" | ||
| 291 | cy="5550" | ||
| 292 | r="76" | ||
| 293 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 294 | id="circle90" /> | ||
| 295 | <!-- Circle --> | ||
| 296 | <circle | ||
| 297 | cx="1950" | ||
| 298 | cy="5550" | ||
| 299 | r="76" | ||
| 300 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 301 | id="circle92" /> | ||
| 302 | <!-- Circle --> | ||
| 303 | <circle | ||
| 304 | cx="4350" | ||
| 305 | cy="5550" | ||
| 306 | r="76" | ||
| 307 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 308 | id="circle94" /> | ||
| 309 | <!-- Circle --> | ||
| 310 | <circle | ||
| 311 | cx="4650" | ||
| 312 | cy="5550" | ||
| 313 | r="76" | ||
| 314 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 315 | id="circle96" /> | ||
| 316 | <!-- Circle --> | ||
| 317 | <circle | ||
| 318 | cx="4950" | ||
| 319 | cy="5550" | ||
| 320 | r="76" | ||
| 321 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 322 | id="circle98" /> | ||
| 323 | <!-- Line: box --> | ||
| 324 | <rect | ||
| 325 | x="750" | ||
| 326 | y="3900" | ||
| 327 | width="1800" | ||
| 328 | height="900" | ||
| 329 | rx="0" | ||
| 330 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 331 | id="rect100" /> | ||
| 332 | <!-- Line: box --> | ||
| 333 | <rect | ||
| 334 | x="300" | ||
| 335 | y="7050" | ||
| 336 | width="1500" | ||
| 337 | height="900" | ||
| 338 | rx="0" | ||
| 339 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 340 | id="rect102" /> | ||
| 341 | <!-- Line: box --> | ||
| 342 | <rect | ||
| 343 | x="3750" | ||
| 344 | y="3900" | ||
| 345 | width="1800" | ||
| 346 | height="900" | ||
| 347 | rx="0" | ||
| 348 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 349 | id="rect104" /> | ||
| 350 | <!-- Line: box --> | ||
| 351 | <rect | ||
| 352 | x="4500" | ||
| 353 | y="5850" | ||
| 354 | width="1500" | ||
| 355 | height="900" | ||
| 356 | rx="0" | ||
| 357 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 358 | id="rect106" /> | ||
| 359 | <!-- Line: box --> | ||
| 360 | <rect | ||
| 361 | x="3300" | ||
| 362 | y="7050" | ||
| 363 | width="1500" | ||
| 364 | height="900" | ||
| 365 | rx="0" | ||
| 366 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 367 | id="rect108" /> | ||
| 368 | <!-- Line: box --> | ||
| 369 | <rect | ||
| 370 | x="2250" | ||
| 371 | y="2100" | ||
| 372 | width="1800" | ||
| 373 | height="900" | ||
| 374 | rx="0" | ||
| 375 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 376 | id="rect110" /> | ||
| 377 | <!-- Line: box --> | ||
| 378 | <rect | ||
| 379 | x="0" | ||
| 380 | y="9750" | ||
| 381 | width="2100" | ||
| 382 | height="900" | ||
| 383 | rx="0" | ||
| 384 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 385 | id="rect112" /> | ||
| 386 | <!-- Line: box --> | ||
| 387 | <rect | ||
| 388 | x="1350" | ||
| 389 | y="8550" | ||
| 390 | width="2100" | ||
| 391 | height="900" | ||
| 392 | rx="0" | ||
| 393 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 394 | id="rect114" /> | ||
| 395 | <!-- Line: box --> | ||
| 396 | <rect | ||
| 397 | x="3000" | ||
| 398 | y="9750" | ||
| 399 | width="2100" | ||
| 400 | height="900" | ||
| 401 | rx="0" | ||
| 402 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 403 | id="rect116" /> | ||
| 404 | <!-- Line: box --> | ||
| 405 | <rect | ||
| 406 | x="4350" | ||
| 407 | y="8550" | ||
| 408 | width="2100" | ||
| 409 | height="900" | ||
| 410 | rx="0" | ||
| 411 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 412 | id="rect118" /> | ||
| 413 | <!-- Line: box --> | ||
| 414 | <rect | ||
| 415 | x="1500" | ||
| 416 | y="5850" | ||
| 417 | width="1500" | ||
| 418 | height="900" | ||
| 419 | rx="0" | ||
| 420 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 421 | id="rect120" /> | ||
| 422 | <!-- Text --> | ||
| 423 | <text | ||
| 424 | xml:space="preserve" | ||
| 425 | x="6450" | ||
| 426 | y="750" | ||
| 427 | fill="#000000" | ||
| 428 | font-family="Helvetica" | ||
| 429 | font-style="normal" | ||
| 430 | font-weight="normal" | ||
| 431 | font-size="192" | ||
| 432 | text-anchor="end" | ||
| 433 | id="text122">rcu_bh</text> | ||
| 434 | <!-- Text --> | ||
| 435 | <text | ||
| 436 | xml:space="preserve" | ||
| 437 | x="3150" | ||
| 438 | y="2400" | ||
| 439 | fill="#000000" | ||
| 440 | font-family="Courier" | ||
| 441 | font-style="normal" | ||
| 442 | font-weight="bold" | ||
| 443 | font-size="192" | ||
| 444 | text-anchor="middle" | ||
| 445 | id="text124">struct</text> | ||
| 446 | <!-- Text --> | ||
| 447 | <text | ||
| 448 | xml:space="preserve" | ||
| 449 | x="3150" | ||
| 450 | y="2700" | ||
| 451 | fill="#000000" | ||
| 452 | font-family="Courier" | ||
| 453 | font-style="normal" | ||
| 454 | font-weight="bold" | ||
| 455 | font-size="192" | ||
| 456 | text-anchor="middle" | ||
| 457 | id="text126">rcu_node</text> | ||
| 458 | <!-- Text --> | ||
| 459 | <text | ||
| 460 | xml:space="preserve" | ||
| 461 | x="1650" | ||
| 462 | y="4200" | ||
| 463 | fill="#000000" | ||
| 464 | font-family="Courier" | ||
| 465 | font-style="normal" | ||
| 466 | font-weight="bold" | ||
| 467 | font-size="192" | ||
| 468 | text-anchor="middle" | ||
| 469 | id="text128">struct</text> | ||
| 470 | <!-- Text --> | ||
| 471 | <text | ||
| 472 | xml:space="preserve" | ||
| 473 | x="1650" | ||
| 474 | y="4500" | ||
| 475 | fill="#000000" | ||
| 476 | font-family="Courier" | ||
| 477 | font-style="normal" | ||
| 478 | font-weight="bold" | ||
| 479 | font-size="192" | ||
| 480 | text-anchor="middle" | ||
| 481 | id="text130">rcu_node</text> | ||
| 482 | <!-- Text --> | ||
| 483 | <text | ||
| 484 | xml:space="preserve" | ||
| 485 | x="4650" | ||
| 486 | y="4500" | ||
| 487 | fill="#000000" | ||
| 488 | font-family="Courier" | ||
| 489 | font-style="normal" | ||
| 490 | font-weight="bold" | ||
| 491 | font-size="192" | ||
| 492 | text-anchor="middle" | ||
| 493 | id="text132">rcu_node</text> | ||
| 494 | <!-- Text --> | ||
| 495 | <text | ||
| 496 | xml:space="preserve" | ||
| 497 | x="4650" | ||
| 498 | y="4200" | ||
| 499 | fill="#000000" | ||
| 500 | font-family="Courier" | ||
| 501 | font-style="normal" | ||
| 502 | font-weight="bold" | ||
| 503 | font-size="192" | ||
| 504 | text-anchor="middle" | ||
| 505 | id="text134">struct</text> | ||
| 506 | <!-- Text --> | ||
| 507 | <text | ||
| 508 | xml:space="preserve" | ||
| 509 | x="2250" | ||
| 510 | y="6150" | ||
| 511 | fill="#000000" | ||
| 512 | font-family="Courier" | ||
| 513 | font-style="normal" | ||
| 514 | font-weight="bold" | ||
| 515 | font-size="192" | ||
| 516 | text-anchor="middle" | ||
| 517 | id="text136">struct</text> | ||
| 518 | <!-- Text --> | ||
| 519 | <text | ||
| 520 | xml:space="preserve" | ||
| 521 | x="2250" | ||
| 522 | y="6450" | ||
| 523 | fill="#000000" | ||
| 524 | font-family="Courier" | ||
| 525 | font-style="normal" | ||
| 526 | font-weight="bold" | ||
| 527 | font-size="192" | ||
| 528 | text-anchor="middle" | ||
| 529 | id="text138">rcu_data</text> | ||
| 530 | <!-- Text --> | ||
| 531 | <text | ||
| 532 | xml:space="preserve" | ||
| 533 | x="1050" | ||
| 534 | y="7350" | ||
| 535 | fill="#000000" | ||
| 536 | font-family="Courier" | ||
| 537 | font-style="normal" | ||
| 538 | font-weight="bold" | ||
| 539 | font-size="192" | ||
| 540 | text-anchor="middle" | ||
| 541 | id="text140">struct</text> | ||
| 542 | <!-- Text --> | ||
| 543 | <text | ||
| 544 | xml:space="preserve" | ||
| 545 | x="1050" | ||
| 546 | y="7650" | ||
| 547 | fill="#000000" | ||
| 548 | font-family="Courier" | ||
| 549 | font-style="normal" | ||
| 550 | font-weight="bold" | ||
| 551 | font-size="192" | ||
| 552 | text-anchor="middle" | ||
| 553 | id="text142">rcu_data</text> | ||
| 554 | <!-- Text --> | ||
| 555 | <text | ||
| 556 | xml:space="preserve" | ||
| 557 | x="5250" | ||
| 558 | y="6150" | ||
| 559 | fill="#000000" | ||
| 560 | font-family="Courier" | ||
| 561 | font-style="normal" | ||
| 562 | font-weight="bold" | ||
| 563 | font-size="192" | ||
| 564 | text-anchor="middle" | ||
| 565 | id="text144">struct</text> | ||
| 566 | <!-- Text --> | ||
| 567 | <text | ||
| 568 | xml:space="preserve" | ||
| 569 | x="5250" | ||
| 570 | y="6450" | ||
| 571 | fill="#000000" | ||
| 572 | font-family="Courier" | ||
| 573 | font-style="normal" | ||
| 574 | font-weight="bold" | ||
| 575 | font-size="192" | ||
| 576 | text-anchor="middle" | ||
| 577 | id="text146">rcu_data</text> | ||
| 578 | <!-- Text --> | ||
| 579 | <text | ||
| 580 | xml:space="preserve" | ||
| 581 | x="4050" | ||
| 582 | y="7350" | ||
| 583 | fill="#000000" | ||
| 584 | font-family="Courier" | ||
| 585 | font-style="normal" | ||
| 586 | font-weight="bold" | ||
| 587 | font-size="192" | ||
| 588 | text-anchor="middle" | ||
| 589 | id="text148">struct</text> | ||
| 590 | <!-- Text --> | ||
| 591 | <text | ||
| 592 | xml:space="preserve" | ||
| 593 | x="4050" | ||
| 594 | y="7650" | ||
| 595 | fill="#000000" | ||
| 596 | font-family="Courier" | ||
| 597 | font-style="normal" | ||
| 598 | font-weight="bold" | ||
| 599 | font-size="192" | ||
| 600 | text-anchor="middle" | ||
| 601 | id="text150">rcu_data</text> | ||
| 602 | <!-- Text --> | ||
| 603 | <text | ||
| 604 | xml:space="preserve" | ||
| 605 | x="450" | ||
| 606 | y="1800" | ||
| 607 | fill="#000000" | ||
| 608 | font-family="Courier" | ||
| 609 | font-style="normal" | ||
| 610 | font-weight="bold" | ||
| 611 | font-size="192" | ||
| 612 | text-anchor="start" | ||
| 613 | id="text152">struct rcu_state</text> | ||
| 614 | <!-- Text --> | ||
| 615 | <text | ||
| 616 | xml:space="preserve" | ||
| 617 | x="1050" | ||
| 618 | y="10050" | ||
| 619 | fill="#000000" | ||
| 620 | font-family="Courier" | ||
| 621 | font-style="normal" | ||
| 622 | font-weight="bold" | ||
| 623 | font-size="192" | ||
| 624 | text-anchor="middle" | ||
| 625 | id="text154">struct</text> | ||
| 626 | <!-- Text --> | ||
| 627 | <text | ||
| 628 | xml:space="preserve" | ||
| 629 | x="1050" | ||
| 630 | y="10350" | ||
| 631 | fill="#000000" | ||
| 632 | font-family="Courier" | ||
| 633 | font-style="normal" | ||
| 634 | font-weight="bold" | ||
| 635 | font-size="192" | ||
| 636 | text-anchor="middle" | ||
| 637 | id="text156">rcu_dynticks</text> | ||
| 638 | <!-- Text --> | ||
| 639 | <text | ||
| 640 | xml:space="preserve" | ||
| 641 | x="4050" | ||
| 642 | y="10050" | ||
| 643 | fill="#000000" | ||
| 644 | font-family="Courier" | ||
| 645 | font-style="normal" | ||
| 646 | font-weight="bold" | ||
| 647 | font-size="192" | ||
| 648 | text-anchor="middle" | ||
| 649 | id="text158">struct</text> | ||
| 650 | <!-- Text --> | ||
| 651 | <text | ||
| 652 | xml:space="preserve" | ||
| 653 | x="4050" | ||
| 654 | y="10350" | ||
| 655 | fill="#000000" | ||
| 656 | font-family="Courier" | ||
| 657 | font-style="normal" | ||
| 658 | font-weight="bold" | ||
| 659 | font-size="192" | ||
| 660 | text-anchor="middle" | ||
| 661 | id="text160">rcu_dynticks</text> | ||
| 662 | <!-- Text --> | ||
| 663 | <text | ||
| 664 | xml:space="preserve" | ||
| 665 | x="2400" | ||
| 666 | y="8850" | ||
| 667 | fill="#000000" | ||
| 668 | font-family="Courier" | ||
| 669 | font-style="normal" | ||
| 670 | font-weight="bold" | ||
| 671 | font-size="192" | ||
| 672 | text-anchor="middle" | ||
| 673 | id="text162">struct</text> | ||
| 674 | <!-- Text --> | ||
| 675 | <text | ||
| 676 | xml:space="preserve" | ||
| 677 | x="2400" | ||
| 678 | y="9150" | ||
| 679 | fill="#000000" | ||
| 680 | font-family="Courier" | ||
| 681 | font-style="normal" | ||
| 682 | font-weight="bold" | ||
| 683 | font-size="192" | ||
| 684 | text-anchor="middle" | ||
| 685 | id="text164">rcu_dynticks</text> | ||
| 686 | <!-- Text --> | ||
| 687 | <text | ||
| 688 | xml:space="preserve" | ||
| 689 | x="5400" | ||
| 690 | y="8850" | ||
| 691 | fill="#000000" | ||
| 692 | font-family="Courier" | ||
| 693 | font-style="normal" | ||
| 694 | font-weight="bold" | ||
| 695 | font-size="192" | ||
| 696 | text-anchor="middle" | ||
| 697 | id="text166">struct</text> | ||
| 698 | <!-- Text --> | ||
| 699 | <text | ||
| 700 | xml:space="preserve" | ||
| 701 | x="5400" | ||
| 702 | y="9150" | ||
| 703 | fill="#000000" | ||
| 704 | font-family="Courier" | ||
| 705 | font-style="normal" | ||
| 706 | font-weight="bold" | ||
| 707 | font-size="192" | ||
| 708 | text-anchor="middle" | ||
| 709 | id="text168">rcu_dynticks</text> | ||
| 710 | <!-- Text --> | ||
| 711 | <text | ||
| 712 | xml:space="preserve" | ||
| 713 | x="6900" | ||
| 714 | y="300" | ||
| 715 | fill="#000000" | ||
| 716 | font-family="Helvetica" | ||
| 717 | font-style="normal" | ||
| 718 | font-weight="normal" | ||
| 719 | font-size="192" | ||
| 720 | text-anchor="end" | ||
| 721 | id="text170">rcu_preempt</text> | ||
| 722 | <!-- Text --> | ||
| 723 | <text | ||
| 724 | xml:space="preserve" | ||
| 725 | x="6000" | ||
| 726 | y="1200" | ||
| 727 | fill="#000000" | ||
| 728 | font-family="Helvetica" | ||
| 729 | font-style="normal" | ||
| 730 | font-weight="normal" | ||
| 731 | font-size="192" | ||
| 732 | text-anchor="end" | ||
| 733 | id="text172">rcu_sched</text> | ||
| 734 | <!-- Line --> | ||
| 735 | <polyline | ||
| 736 | points="5250,5850 5250,4864 " | ||
| 737 | style="stroke:#00d1d1;stroke-width:30.00205472;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 738 | id="polyline174" /> | ||
| 739 | <!-- Arrowhead on XXXpoint 5250 5850 - 5250 4740--> | ||
| 740 | </g> | ||
| 741 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntickCB.svg b/Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntickCB.svg new file mode 100644 index 000000000000..bbc3801470d0 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/BigTreePreemptRCUBHdyntickCB.svg | |||
| @@ -0,0 +1,858 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:29:48 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 2.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="7.4in" | ||
| 17 | height="9.9in" | ||
| 18 | viewBox="-44 -44 8938 11938" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="BigTreePreemptRCUBHdyntickCB.svg"> | ||
| 23 | <metadata | ||
| 24 | id="metadata212"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs210"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3970" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="881" | ||
| 61 | inkscape:window-height="1128" | ||
| 62 | id="namedview208" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="1.0195195" | ||
| 65 | inkscape:cx="333" | ||
| 66 | inkscape:cy="445.49997" | ||
| 67 | inkscape:window-x="936" | ||
| 68 | inkscape:window-y="24" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="900" | ||
| 77 | y="0" | ||
| 78 | width="6300" | ||
| 79 | height="7350" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="1200" | ||
| 86 | y="600" | ||
| 87 | width="5700" | ||
| 88 | height="3750" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="5400" | ||
| 95 | y="4950" | ||
| 96 | width="1500" | ||
| 97 | height="900" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="450" | ||
| 104 | y="450" | ||
| 105 | width="6300" | ||
| 106 | height="7350" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Line: box --> | ||
| 111 | <rect | ||
| 112 | x="750" | ||
| 113 | y="1050" | ||
| 114 | width="5700" | ||
| 115 | height="3750" | ||
| 116 | rx="0" | ||
| 117 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 118 | id="rect14" /> | ||
| 119 | <!-- Line: box --> | ||
| 120 | <rect | ||
| 121 | x="4950" | ||
| 122 | y="5400" | ||
| 123 | width="1500" | ||
| 124 | height="900" | ||
| 125 | rx="0" | ||
| 126 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 127 | id="rect16" /> | ||
| 128 | <!-- Line --> | ||
| 129 | <polyline | ||
| 130 | points="5250,8550 5688,6362 " | ||
| 131 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 132 | id="polyline18" /> | ||
| 133 | <!-- Arrowhead on XXXpoint 5250 8550 - 5710 6240--> | ||
| 134 | <polyline | ||
| 135 | points="5714 6518 5704 6272 5598 6494 " | ||
| 136 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 137 | id="polyline20" /> | ||
| 138 | <!-- Line --> | ||
| 139 | <polyline | ||
| 140 | points="4050,9750 4486,7712 " | ||
| 141 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 142 | id="polyline22" /> | ||
| 143 | <!-- Arrowhead on XXXpoint 4050 9750 - 4512 7590--> | ||
| 144 | <polyline | ||
| 145 | points="4514 7868 4506 7622 4396 7844 " | ||
| 146 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 147 | id="polyline24" /> | ||
| 148 | <!-- Line --> | ||
| 149 | <polyline | ||
| 150 | points="1040,9750 1476,7712 " | ||
| 151 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 152 | id="polyline26" /> | ||
| 153 | <!-- Arrowhead on XXXpoint 1040 9750 - 1502 7590--> | ||
| 154 | <polyline | ||
| 155 | points="1504 7868 1496 7622 1386 7844 " | ||
| 156 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 157 | id="polyline28" /> | ||
| 158 | <!-- Line --> | ||
| 159 | <polyline | ||
| 160 | points="2240,8550 2676,6512 " | ||
| 161 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 162 | id="polyline30" /> | ||
| 163 | <!-- Arrowhead on XXXpoint 2240 8550 - 2702 6390--> | ||
| 164 | <polyline | ||
| 165 | points="2704 6668 2696 6422 2586 6644 " | ||
| 166 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 167 | id="polyline32" /> | ||
| 168 | <!-- Line --> | ||
| 169 | <polyline | ||
| 170 | points="4050,9600 5692,6062 " | ||
| 171 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 172 | id="polyline34" /> | ||
| 173 | <!-- Arrowhead on XXXpoint 4050 9600 - 5744 5948--> | ||
| 174 | <polyline | ||
| 175 | points="5682 6220 5730 5978 5574 6170 " | ||
| 176 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 177 | id="polyline36" /> | ||
| 178 | <!-- Line --> | ||
| 179 | <polyline | ||
| 180 | points="1086,9600 2728,6062 " | ||
| 181 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 182 | id="polyline38" /> | ||
| 183 | <!-- Arrowhead on XXXpoint 1086 9600 - 2780 5948--> | ||
| 184 | <polyline | ||
| 185 | points="2718 6220 2766 5978 2610 6170 " | ||
| 186 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 187 | id="polyline40" /> | ||
| 188 | <!-- Line: box --> | ||
| 189 | <rect | ||
| 190 | x="0" | ||
| 191 | y="900" | ||
| 192 | width="6300" | ||
| 193 | height="7350" | ||
| 194 | rx="0" | ||
| 195 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 196 | id="rect42" /> | ||
| 197 | <!-- Line: box --> | ||
| 198 | <rect | ||
| 199 | x="300" | ||
| 200 | y="1500" | ||
| 201 | width="5700" | ||
| 202 | height="3750" | ||
| 203 | rx="0" | ||
| 204 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 205 | id="rect44" /> | ||
| 206 | <!-- Line --> | ||
| 207 | <polyline | ||
| 208 | points="1350,3900 2350,3040 " | ||
| 209 | style="stroke:#00d1d1;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 210 | id="polyline46" /> | ||
| 211 | <!-- Arrowhead on XXXpoint 1350 3900 - 2444 2960--> | ||
| 212 | <!-- Line --> | ||
| 213 | <polyline | ||
| 214 | points="4950,3900 3948,3040 " | ||
| 215 | style="stroke:#00d1d1;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 216 | id="polyline50" /> | ||
| 217 | <!-- Arrowhead on XXXpoint 4950 3900 - 3854 2960--> | ||
| 218 | <!-- Line --> | ||
| 219 | <polyline | ||
| 220 | points="4050,7050 4050,4864 " | ||
| 221 | style="stroke:#00d1d1;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 222 | id="polyline54" /> | ||
| 223 | <!-- Arrowhead on XXXpoint 4050 7050 - 4050 4740--> | ||
| 224 | <!-- Line --> | ||
| 225 | <polyline | ||
| 226 | points="1050,7050 1050,4864 " | ||
| 227 | style="stroke:#00d1d1;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 228 | id="polyline58" /> | ||
| 229 | <!-- Arrowhead on XXXpoint 1050 7050 - 1050 4740--> | ||
| 230 | <!-- Line --> | ||
| 231 | <polyline | ||
| 232 | points="2250,5850 2250,4864 " | ||
| 233 | style="stroke:#00d1d1;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 234 | id="polyline62" /> | ||
| 235 | <!-- Arrowhead on XXXpoint 2250 5850 - 2250 4740--> | ||
| 236 | <!-- Line --> | ||
| 237 | <polyline | ||
| 238 | points="2250,8550 2250,6814 " | ||
| 239 | style="stroke:#00ff00;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 240 | id="polyline66" /> | ||
| 241 | <!-- Arrowhead on XXXpoint 2250 8550 - 2250 6690--> | ||
| 242 | <!-- Line --> | ||
| 243 | <polyline | ||
| 244 | points="1050,9750 1050,8014 " | ||
| 245 | style="stroke:#00ff00;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 246 | id="polyline70" /> | ||
| 247 | <!-- Arrowhead on XXXpoint 1050 9750 - 1050 7890--> | ||
| 248 | <!-- Line --> | ||
| 249 | <polyline | ||
| 250 | points="4050,9750 4050,8014 " | ||
| 251 | style="stroke:#00ff00;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 252 | id="polyline74" /> | ||
| 253 | <!-- Arrowhead on XXXpoint 4050 9750 - 4050 7890--> | ||
| 254 | <!-- Line --> | ||
| 255 | <polyline | ||
| 256 | points="5250,8550 5250,6814 " | ||
| 257 | style="stroke:#00ff00;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 258 | id="polyline78" /> | ||
| 259 | <!-- Arrowhead on XXXpoint 5250 8550 - 5250 6690--> | ||
| 260 | <!-- Line --> | ||
| 261 | <polyline | ||
| 262 | points="6000,6300 8048,7910 " | ||
| 263 | style="stroke:#87cfff;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 264 | id="polyline82" /> | ||
| 265 | <!-- Arrowhead on XXXpoint 6000 6300 - 8146 7986--> | ||
| 266 | <!-- Circle --> | ||
| 267 | <circle | ||
| 268 | cx="2850" | ||
| 269 | cy="4350" | ||
| 270 | r="76" | ||
| 271 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 272 | id="circle86" /> | ||
| 273 | <!-- Circle --> | ||
| 274 | <circle | ||
| 275 | cx="3150" | ||
| 276 | cy="4350" | ||
| 277 | r="76" | ||
| 278 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 279 | id="circle88" /> | ||
| 280 | <!-- Circle --> | ||
| 281 | <circle | ||
| 282 | cx="3450" | ||
| 283 | cy="4350" | ||
| 284 | r="76" | ||
| 285 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 286 | id="circle90" /> | ||
| 287 | <!-- Circle --> | ||
| 288 | <circle | ||
| 289 | cx="1350" | ||
| 290 | cy="5550" | ||
| 291 | r="76" | ||
| 292 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 293 | id="circle92" /> | ||
| 294 | <!-- Circle --> | ||
| 295 | <circle | ||
| 296 | cx="1650" | ||
| 297 | cy="5550" | ||
| 298 | r="76" | ||
| 299 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 300 | id="circle94" /> | ||
| 301 | <!-- Circle --> | ||
| 302 | <circle | ||
| 303 | cx="1950" | ||
| 304 | cy="5550" | ||
| 305 | r="76" | ||
| 306 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 307 | id="circle96" /> | ||
| 308 | <!-- Circle --> | ||
| 309 | <circle | ||
| 310 | cx="4350" | ||
| 311 | cy="5550" | ||
| 312 | r="76" | ||
| 313 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 314 | id="circle98" /> | ||
| 315 | <!-- Circle --> | ||
| 316 | <circle | ||
| 317 | cx="4650" | ||
| 318 | cy="5550" | ||
| 319 | r="76" | ||
| 320 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 321 | id="circle100" /> | ||
| 322 | <!-- Circle --> | ||
| 323 | <circle | ||
| 324 | cx="4950" | ||
| 325 | cy="5550" | ||
| 326 | r="76" | ||
| 327 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 328 | id="circle102" /> | ||
| 329 | <!-- Line: box --> | ||
| 330 | <rect | ||
| 331 | x="7350" | ||
| 332 | y="7950" | ||
| 333 | width="1500" | ||
| 334 | height="900" | ||
| 335 | rx="0" | ||
| 336 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 337 | id="rect104" /> | ||
| 338 | <!-- Line: box --> | ||
| 339 | <rect | ||
| 340 | x="7350" | ||
| 341 | y="9450" | ||
| 342 | width="1500" | ||
| 343 | height="900" | ||
| 344 | rx="0" | ||
| 345 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 346 | id="rect106" /> | ||
| 347 | <!-- Line --> | ||
| 348 | <polyline | ||
| 349 | points="8100,8850 8100,9384 " | ||
| 350 | style="stroke:#000000;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 351 | id="polyline108" /> | ||
| 352 | <!-- Arrowhead on XXXpoint 8100 8850 - 8100 9510--> | ||
| 353 | <!-- Line: box --> | ||
| 354 | <rect | ||
| 355 | x="7350" | ||
| 356 | y="10950" | ||
| 357 | width="1500" | ||
| 358 | height="900" | ||
| 359 | rx="0" | ||
| 360 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 361 | id="rect112" /> | ||
| 362 | <!-- Line --> | ||
| 363 | <polyline | ||
| 364 | points="8100,10350 8100,10884 " | ||
| 365 | style="stroke:#000000;stroke-width:30;stroke-linejoin:miter;stroke-linecap:butt;marker-end:url(#Arrow1Mend)" | ||
| 366 | id="polyline114" /> | ||
| 367 | <!-- Arrowhead on XXXpoint 8100 10350 - 8100 11010--> | ||
| 368 | <!-- Line: box --> | ||
| 369 | <rect | ||
| 370 | x="750" | ||
| 371 | y="3900" | ||
| 372 | width="1800" | ||
| 373 | height="900" | ||
| 374 | rx="0" | ||
| 375 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 376 | id="rect118" /> | ||
| 377 | <!-- Line: box --> | ||
| 378 | <rect | ||
| 379 | x="300" | ||
| 380 | y="7050" | ||
| 381 | width="1500" | ||
| 382 | height="900" | ||
| 383 | rx="0" | ||
| 384 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 385 | id="rect120" /> | ||
| 386 | <!-- Line: box --> | ||
| 387 | <rect | ||
| 388 | x="3750" | ||
| 389 | y="3900" | ||
| 390 | width="1800" | ||
| 391 | height="900" | ||
| 392 | rx="0" | ||
| 393 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 394 | id="rect122" /> | ||
| 395 | <!-- Line: box --> | ||
| 396 | <rect | ||
| 397 | x="4500" | ||
| 398 | y="5850" | ||
| 399 | width="1500" | ||
| 400 | height="900" | ||
| 401 | rx="0" | ||
| 402 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 403 | id="rect124" /> | ||
| 404 | <!-- Line: box --> | ||
| 405 | <rect | ||
| 406 | x="3300" | ||
| 407 | y="7050" | ||
| 408 | width="1500" | ||
| 409 | height="900" | ||
| 410 | rx="0" | ||
| 411 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 412 | id="rect126" /> | ||
| 413 | <!-- Line: box --> | ||
| 414 | <rect | ||
| 415 | x="2250" | ||
| 416 | y="2100" | ||
| 417 | width="1800" | ||
| 418 | height="900" | ||
| 419 | rx="0" | ||
| 420 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 421 | id="rect128" /> | ||
| 422 | <!-- Line: box --> | ||
| 423 | <rect | ||
| 424 | x="0" | ||
| 425 | y="9750" | ||
| 426 | width="2100" | ||
| 427 | height="900" | ||
| 428 | rx="0" | ||
| 429 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 430 | id="rect130" /> | ||
| 431 | <!-- Line: box --> | ||
| 432 | <rect | ||
| 433 | x="1350" | ||
| 434 | y="8550" | ||
| 435 | width="2100" | ||
| 436 | height="900" | ||
| 437 | rx="0" | ||
| 438 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 439 | id="rect132" /> | ||
| 440 | <!-- Line: box --> | ||
| 441 | <rect | ||
| 442 | x="3000" | ||
| 443 | y="9750" | ||
| 444 | width="2100" | ||
| 445 | height="900" | ||
| 446 | rx="0" | ||
| 447 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 448 | id="rect134" /> | ||
| 449 | <!-- Line: box --> | ||
| 450 | <rect | ||
| 451 | x="4350" | ||
| 452 | y="8550" | ||
| 453 | width="2100" | ||
| 454 | height="900" | ||
| 455 | rx="0" | ||
| 456 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 457 | id="rect136" /> | ||
| 458 | <!-- Line: box --> | ||
| 459 | <rect | ||
| 460 | x="1500" | ||
| 461 | y="5850" | ||
| 462 | width="1500" | ||
| 463 | height="900" | ||
| 464 | rx="0" | ||
| 465 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 466 | id="rect138" /> | ||
| 467 | <!-- Text --> | ||
| 468 | <text | ||
| 469 | xml:space="preserve" | ||
| 470 | x="8100" | ||
| 471 | y="8250" | ||
| 472 | fill="#000000" | ||
| 473 | font-family="Courier" | ||
| 474 | font-style="normal" | ||
| 475 | font-weight="bold" | ||
| 476 | font-size="192" | ||
| 477 | text-anchor="middle" | ||
| 478 | id="text140">struct</text> | ||
| 479 | <!-- Text --> | ||
| 480 | <text | ||
| 481 | xml:space="preserve" | ||
| 482 | x="8100" | ||
| 483 | y="8550" | ||
| 484 | fill="#000000" | ||
| 485 | font-family="Courier" | ||
| 486 | font-style="normal" | ||
| 487 | font-weight="bold" | ||
| 488 | font-size="192" | ||
| 489 | text-anchor="middle" | ||
| 490 | id="text142">rcu_head</text> | ||
| 491 | <!-- Text --> | ||
| 492 | <text | ||
| 493 | xml:space="preserve" | ||
| 494 | x="8100" | ||
| 495 | y="9750" | ||
| 496 | fill="#000000" | ||
| 497 | font-family="Courier" | ||
| 498 | font-style="normal" | ||
| 499 | font-weight="bold" | ||
| 500 | font-size="192" | ||
| 501 | text-anchor="middle" | ||
| 502 | id="text144">struct</text> | ||
| 503 | <!-- Text --> | ||
| 504 | <text | ||
| 505 | xml:space="preserve" | ||
| 506 | x="8100" | ||
| 507 | y="10050" | ||
| 508 | fill="#000000" | ||
| 509 | font-family="Courier" | ||
| 510 | font-style="normal" | ||
| 511 | font-weight="bold" | ||
| 512 | font-size="192" | ||
| 513 | text-anchor="middle" | ||
| 514 | id="text146">rcu_head</text> | ||
| 515 | <!-- Text --> | ||
| 516 | <text | ||
| 517 | xml:space="preserve" | ||
| 518 | x="8100" | ||
| 519 | y="11250" | ||
| 520 | fill="#000000" | ||
| 521 | font-family="Courier" | ||
| 522 | font-style="normal" | ||
| 523 | font-weight="bold" | ||
| 524 | font-size="192" | ||
| 525 | text-anchor="middle" | ||
| 526 | id="text148">struct</text> | ||
| 527 | <!-- Text --> | ||
| 528 | <text | ||
| 529 | xml:space="preserve" | ||
| 530 | x="8100" | ||
| 531 | y="11550" | ||
| 532 | fill="#000000" | ||
| 533 | font-family="Courier" | ||
| 534 | font-style="normal" | ||
| 535 | font-weight="bold" | ||
| 536 | font-size="192" | ||
| 537 | text-anchor="middle" | ||
| 538 | id="text150">rcu_head</text> | ||
| 539 | <!-- Text --> | ||
| 540 | <text | ||
| 541 | xml:space="preserve" | ||
| 542 | x="6000" | ||
| 543 | y="1200" | ||
| 544 | fill="#000000" | ||
| 545 | font-family="Helvetica" | ||
| 546 | font-style="normal" | ||
| 547 | font-weight="normal" | ||
| 548 | font-size="192" | ||
| 549 | text-anchor="end" | ||
| 550 | id="text152">rcu_sched</text> | ||
| 551 | <!-- Text --> | ||
| 552 | <text | ||
| 553 | xml:space="preserve" | ||
| 554 | x="6450" | ||
| 555 | y="750" | ||
| 556 | fill="#000000" | ||
| 557 | font-family="Helvetica" | ||
| 558 | font-style="normal" | ||
| 559 | font-weight="normal" | ||
| 560 | font-size="192" | ||
| 561 | text-anchor="end" | ||
| 562 | id="text154">rcu_bh</text> | ||
| 563 | <!-- Text --> | ||
| 564 | <text | ||
| 565 | xml:space="preserve" | ||
| 566 | x="3150" | ||
| 567 | y="2400" | ||
| 568 | fill="#000000" | ||
| 569 | font-family="Courier" | ||
| 570 | font-style="normal" | ||
| 571 | font-weight="bold" | ||
| 572 | font-size="192" | ||
| 573 | text-anchor="middle" | ||
| 574 | id="text156">struct</text> | ||
| 575 | <!-- Text --> | ||
| 576 | <text | ||
| 577 | xml:space="preserve" | ||
| 578 | x="3150" | ||
| 579 | y="2700" | ||
| 580 | fill="#000000" | ||
| 581 | font-family="Courier" | ||
| 582 | font-style="normal" | ||
| 583 | font-weight="bold" | ||
| 584 | font-size="192" | ||
| 585 | text-anchor="middle" | ||
| 586 | id="text158">rcu_node</text> | ||
| 587 | <!-- Text --> | ||
| 588 | <text | ||
| 589 | xml:space="preserve" | ||
| 590 | x="1650" | ||
| 591 | y="4200" | ||
| 592 | fill="#000000" | ||
| 593 | font-family="Courier" | ||
| 594 | font-style="normal" | ||
| 595 | font-weight="bold" | ||
| 596 | font-size="192" | ||
| 597 | text-anchor="middle" | ||
| 598 | id="text160">struct</text> | ||
| 599 | <!-- Text --> | ||
| 600 | <text | ||
| 601 | xml:space="preserve" | ||
| 602 | x="1650" | ||
| 603 | y="4500" | ||
| 604 | fill="#000000" | ||
| 605 | font-family="Courier" | ||
| 606 | font-style="normal" | ||
| 607 | font-weight="bold" | ||
| 608 | font-size="192" | ||
| 609 | text-anchor="middle" | ||
| 610 | id="text162">rcu_node</text> | ||
| 611 | <!-- Text --> | ||
| 612 | <text | ||
| 613 | xml:space="preserve" | ||
| 614 | x="4650" | ||
| 615 | y="4500" | ||
| 616 | fill="#000000" | ||
| 617 | font-family="Courier" | ||
| 618 | font-style="normal" | ||
| 619 | font-weight="bold" | ||
| 620 | font-size="192" | ||
| 621 | text-anchor="middle" | ||
| 622 | id="text164">rcu_node</text> | ||
| 623 | <!-- Text --> | ||
| 624 | <text | ||
| 625 | xml:space="preserve" | ||
| 626 | x="4650" | ||
| 627 | y="4200" | ||
| 628 | fill="#000000" | ||
| 629 | font-family="Courier" | ||
| 630 | font-style="normal" | ||
| 631 | font-weight="bold" | ||
| 632 | font-size="192" | ||
| 633 | text-anchor="middle" | ||
| 634 | id="text166">struct</text> | ||
| 635 | <!-- Text --> | ||
| 636 | <text | ||
| 637 | xml:space="preserve" | ||
| 638 | x="2250" | ||
| 639 | y="6150" | ||
| 640 | fill="#000000" | ||
| 641 | font-family="Courier" | ||
| 642 | font-style="normal" | ||
| 643 | font-weight="bold" | ||
| 644 | font-size="192" | ||
| 645 | text-anchor="middle" | ||
| 646 | id="text168">struct</text> | ||
| 647 | <!-- Text --> | ||
| 648 | <text | ||
| 649 | xml:space="preserve" | ||
| 650 | x="2250" | ||
| 651 | y="6450" | ||
| 652 | fill="#000000" | ||
| 653 | font-family="Courier" | ||
| 654 | font-style="normal" | ||
| 655 | font-weight="bold" | ||
| 656 | font-size="192" | ||
| 657 | text-anchor="middle" | ||
| 658 | id="text170">rcu_data</text> | ||
| 659 | <!-- Text --> | ||
| 660 | <text | ||
| 661 | xml:space="preserve" | ||
| 662 | x="1050" | ||
| 663 | y="7350" | ||
| 664 | fill="#000000" | ||
| 665 | font-family="Courier" | ||
| 666 | font-style="normal" | ||
| 667 | font-weight="bold" | ||
| 668 | font-size="192" | ||
| 669 | text-anchor="middle" | ||
| 670 | id="text172">struct</text> | ||
| 671 | <!-- Text --> | ||
| 672 | <text | ||
| 673 | xml:space="preserve" | ||
| 674 | x="1050" | ||
| 675 | y="7650" | ||
| 676 | fill="#000000" | ||
| 677 | font-family="Courier" | ||
| 678 | font-style="normal" | ||
| 679 | font-weight="bold" | ||
| 680 | font-size="192" | ||
| 681 | text-anchor="middle" | ||
| 682 | id="text174">rcu_data</text> | ||
| 683 | <!-- Text --> | ||
| 684 | <text | ||
| 685 | xml:space="preserve" | ||
| 686 | x="5250" | ||
| 687 | y="6150" | ||
| 688 | fill="#000000" | ||
| 689 | font-family="Courier" | ||
| 690 | font-style="normal" | ||
| 691 | font-weight="bold" | ||
| 692 | font-size="192" | ||
| 693 | text-anchor="middle" | ||
| 694 | id="text176">struct</text> | ||
| 695 | <!-- Text --> | ||
| 696 | <text | ||
| 697 | xml:space="preserve" | ||
| 698 | x="5250" | ||
| 699 | y="6450" | ||
| 700 | fill="#000000" | ||
| 701 | font-family="Courier" | ||
| 702 | font-style="normal" | ||
| 703 | font-weight="bold" | ||
| 704 | font-size="192" | ||
| 705 | text-anchor="middle" | ||
| 706 | id="text178">rcu_data</text> | ||
| 707 | <!-- Text --> | ||
| 708 | <text | ||
| 709 | xml:space="preserve" | ||
| 710 | x="4050" | ||
| 711 | y="7350" | ||
| 712 | fill="#000000" | ||
| 713 | font-family="Courier" | ||
| 714 | font-style="normal" | ||
| 715 | font-weight="bold" | ||
| 716 | font-size="192" | ||
| 717 | text-anchor="middle" | ||
| 718 | id="text180">struct</text> | ||
| 719 | <!-- Text --> | ||
| 720 | <text | ||
| 721 | xml:space="preserve" | ||
| 722 | x="4050" | ||
| 723 | y="7650" | ||
| 724 | fill="#000000" | ||
| 725 | font-family="Courier" | ||
| 726 | font-style="normal" | ||
| 727 | font-weight="bold" | ||
| 728 | font-size="192" | ||
| 729 | text-anchor="middle" | ||
| 730 | id="text182">rcu_data</text> | ||
| 731 | <!-- Text --> | ||
| 732 | <text | ||
| 733 | xml:space="preserve" | ||
| 734 | x="450" | ||
| 735 | y="1800" | ||
| 736 | fill="#000000" | ||
| 737 | font-family="Courier" | ||
| 738 | font-style="normal" | ||
| 739 | font-weight="bold" | ||
| 740 | font-size="192" | ||
| 741 | text-anchor="start" | ||
| 742 | id="text184">struct rcu_state</text> | ||
| 743 | <!-- Text --> | ||
| 744 | <text | ||
| 745 | xml:space="preserve" | ||
| 746 | x="1050" | ||
| 747 | y="10050" | ||
| 748 | fill="#000000" | ||
| 749 | font-family="Courier" | ||
| 750 | font-style="normal" | ||
| 751 | font-weight="bold" | ||
| 752 | font-size="192" | ||
| 753 | text-anchor="middle" | ||
| 754 | id="text186">struct</text> | ||
| 755 | <!-- Text --> | ||
| 756 | <text | ||
| 757 | xml:space="preserve" | ||
| 758 | x="1050" | ||
| 759 | y="10350" | ||
| 760 | fill="#000000" | ||
| 761 | font-family="Courier" | ||
| 762 | font-style="normal" | ||
| 763 | font-weight="bold" | ||
| 764 | font-size="192" | ||
| 765 | text-anchor="middle" | ||
| 766 | id="text188">rcu_dynticks</text> | ||
| 767 | <!-- Text --> | ||
| 768 | <text | ||
| 769 | xml:space="preserve" | ||
| 770 | x="4050" | ||
| 771 | y="10050" | ||
| 772 | fill="#000000" | ||
| 773 | font-family="Courier" | ||
| 774 | font-style="normal" | ||
| 775 | font-weight="bold" | ||
| 776 | font-size="192" | ||
| 777 | text-anchor="middle" | ||
| 778 | id="text190">struct</text> | ||
| 779 | <!-- Text --> | ||
| 780 | <text | ||
| 781 | xml:space="preserve" | ||
| 782 | x="4050" | ||
| 783 | y="10350" | ||
| 784 | fill="#000000" | ||
| 785 | font-family="Courier" | ||
| 786 | font-style="normal" | ||
| 787 | font-weight="bold" | ||
| 788 | font-size="192" | ||
| 789 | text-anchor="middle" | ||
| 790 | id="text192">rcu_dynticks</text> | ||
| 791 | <!-- Text --> | ||
| 792 | <text | ||
| 793 | xml:space="preserve" | ||
| 794 | x="2400" | ||
| 795 | y="8850" | ||
| 796 | fill="#000000" | ||
| 797 | font-family="Courier" | ||
| 798 | font-style="normal" | ||
| 799 | font-weight="bold" | ||
| 800 | font-size="192" | ||
| 801 | text-anchor="middle" | ||
| 802 | id="text194">struct</text> | ||
| 803 | <!-- Text --> | ||
| 804 | <text | ||
| 805 | xml:space="preserve" | ||
| 806 | x="2400" | ||
| 807 | y="9150" | ||
| 808 | fill="#000000" | ||
| 809 | font-family="Courier" | ||
| 810 | font-style="normal" | ||
| 811 | font-weight="bold" | ||
| 812 | font-size="192" | ||
| 813 | text-anchor="middle" | ||
| 814 | id="text196">rcu_dynticks</text> | ||
| 815 | <!-- Text --> | ||
| 816 | <text | ||
| 817 | xml:space="preserve" | ||
| 818 | x="5400" | ||
| 819 | y="8850" | ||
| 820 | fill="#000000" | ||
| 821 | font-family="Courier" | ||
| 822 | font-style="normal" | ||
| 823 | font-weight="bold" | ||
| 824 | font-size="192" | ||
| 825 | text-anchor="middle" | ||
| 826 | id="text198">struct</text> | ||
| 827 | <!-- Text --> | ||
| 828 | <text | ||
| 829 | xml:space="preserve" | ||
| 830 | x="5400" | ||
| 831 | y="9150" | ||
| 832 | fill="#000000" | ||
| 833 | font-family="Courier" | ||
| 834 | font-style="normal" | ||
| 835 | font-weight="bold" | ||
| 836 | font-size="192" | ||
| 837 | text-anchor="middle" | ||
| 838 | id="text200">rcu_dynticks</text> | ||
| 839 | <!-- Text --> | ||
| 840 | <text | ||
| 841 | xml:space="preserve" | ||
| 842 | x="6900" | ||
| 843 | y="300" | ||
| 844 | fill="#000000" | ||
| 845 | font-family="Helvetica" | ||
| 846 | font-style="normal" | ||
| 847 | font-weight="normal" | ||
| 848 | font-size="192" | ||
| 849 | text-anchor="end" | ||
| 850 | id="text202">rcu_preempt</text> | ||
| 851 | <!-- Line --> | ||
| 852 | <polyline | ||
| 853 | points="5250,5850 5250,4864 " | ||
| 854 | style="stroke:#00d1d1;stroke-width:29.99463964;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 855 | id="polyline204" /> | ||
| 856 | <!-- Arrowhead on XXXpoint 5250 5850 - 5250 4740--> | ||
| 857 | </g> | ||
| 858 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/Data-Structures.html b/Documentation/RCU/Design/Data-Structures/Data-Structures.html new file mode 100644 index 000000000000..7eb47ac25ad7 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/Data-Structures.html | |||
| @@ -0,0 +1,1333 @@ | |||
| 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" | ||
| 2 | "http://www.w3.org/TR/html4/loose.dtd"> | ||
| 3 | <html> | ||
| 4 | <head><title>A Tour Through TREE_RCU's Data Structures [LWN.net]</title> | ||
| 5 | <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> | ||
| 6 | |||
| 7 | <p>January 27, 2016</p> | ||
| 8 | <p>This article was contributed by Paul E. McKenney</p> | ||
| 9 | |||
| 10 | <h3>Introduction</h3> | ||
| 11 | |||
| 12 | This document describes RCU's major data structures and their relationship | ||
| 13 | to each other. | ||
| 14 | |||
| 15 | <ol> | ||
| 16 | <li> <a href="#Data-Structure Relationships"> | ||
| 17 | Data-Structure Relationships</a> | ||
| 18 | <li> <a href="#The rcu_state Structure"> | ||
| 19 | The <tt>rcu_state</tt> Structure</a> | ||
| 20 | <li> <a href="#The rcu_node Structure"> | ||
| 21 | The <tt>rcu_node</tt> Structure</a> | ||
| 22 | <li> <a href="#The rcu_data Structure"> | ||
| 23 | The <tt>rcu_data</tt> Structure</a> | ||
| 24 | <li> <a href="#The rcu_dynticks Structure"> | ||
| 25 | The <tt>rcu_dynticks</tt> Structure</a> | ||
| 26 | <li> <a href="#The rcu_head Structure"> | ||
| 27 | The <tt>rcu_head</tt> Structure</a> | ||
| 28 | <li> <a href="#RCU-Specific Fields in the task_struct Structure"> | ||
| 29 | RCU-Specific Fields in the <tt>task_struct</tt> Structure</a> | ||
| 30 | <li> <a href="#Accessor Functions"> | ||
| 31 | Accessor Functions</a> | ||
| 32 | </ol> | ||
| 33 | |||
| 34 | At the end we have the | ||
| 35 | <a href="#Answers to Quick Quizzes">answers to the quick quizzes</a>. | ||
| 36 | |||
| 37 | <h3><a name="Data-Structure Relationships">Data-Structure Relationships</a></h3> | ||
| 38 | |||
| 39 | <p>RCU is for all intents and purposes a large state machine, and its | ||
| 40 | data structures maintain the state in such a way as to allow RCU readers | ||
| 41 | to execute extremely quickly, while also processing the RCU grace periods | ||
| 42 | requested by updaters in an efficient and extremely scalable fashion. | ||
| 43 | The efficiency and scalability of RCU updaters is provided primarily | ||
| 44 | by a combining tree, as shown below: | ||
| 45 | |||
| 46 | </p><p><img src="BigTreeClassicRCU.svg" alt="BigTreeClassicRCU.svg" width="30%"> | ||
| 47 | |||
| 48 | </p><p>This diagram shows an enclosing <tt>rcu_state</tt> structure | ||
| 49 | containing a tree of <tt>rcu_node</tt> structures. | ||
| 50 | Each leaf node of the <tt>rcu_node</tt> tree has up to 16 | ||
| 51 | <tt>rcu_data</tt> structures associated with it, so that there | ||
| 52 | are <tt>NR_CPUS</tt> number of <tt>rcu_data</tt> structures, | ||
| 53 | one for each possible CPU. | ||
| 54 | This structure is adjusted at boot time, if needed, to handle the | ||
| 55 | common case where <tt>nr_cpu_ids</tt> is much less than | ||
| 56 | <tt>NR_CPUs</tt>. | ||
| 57 | For example, a number of Linux distributions set <tt>NR_CPUs=4096</tt>, | ||
| 58 | which results in a three-level <tt>rcu_node</tt> tree. | ||
| 59 | If the actual hardware has only 16 CPUs, RCU will adjust itself | ||
| 60 | at boot time, resulting in an <tt>rcu_node</tt> tree with only a single node. | ||
| 61 | |||
| 62 | </p><p>The purpose of this combining tree is to allow per-CPU events | ||
| 63 | such as quiescent states, dyntick-idle transitions, | ||
| 64 | and CPU hotplug operations to be processed efficiently | ||
| 65 | and scalably. | ||
| 66 | Quiescent states are recorded by the per-CPU <tt>rcu_data</tt> structures, | ||
| 67 | and other events are recorded by the leaf-level <tt>rcu_node</tt> | ||
| 68 | structures. | ||
| 69 | All of these events are combined at each level of the tree until finally | ||
| 70 | grace periods are completed at the tree's root <tt>rcu_node</tt> | ||
| 71 | structure. | ||
| 72 | A grace period can be completed at the root once every CPU | ||
| 73 | (or, in the case of <tt>CONFIG_PREEMPT_RCU</tt>, task) | ||
| 74 | has passed through a quiescent state. | ||
| 75 | Once a grace period has completed, record of that fact is propagated | ||
| 76 | back down the tree. | ||
| 77 | |||
| 78 | </p><p>As can be seen from the diagram, on a 64-bit system | ||
| 79 | a two-level tree with 64 leaves can accommodate 1,024 CPUs, with a fanout | ||
| 80 | of 64 at the root and a fanout of 16 at the leaves. | ||
| 81 | |||
| 82 | <table> | ||
| 83 | <tr><th> </th></tr> | ||
| 84 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 85 | <tr><td> | ||
| 86 | Why isn't the fanout at the leaves also 64? | ||
| 87 | </td></tr> | ||
| 88 | <tr><th align="left">Answer:</th></tr> | ||
| 89 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 90 | Because there are more types of events that affect the leaf-level | ||
| 91 | <tt>rcu_node</tt> structures than further up the tree. | ||
| 92 | Therefore, if the leaf <tt>rcu_node</tt> structures have fanout of | ||
| 93 | 64, the contention on these structures' <tt>->structures</tt> | ||
| 94 | becomes excessive. | ||
| 95 | Experimentation on a wide variety of systems has shown that a fanout | ||
| 96 | of 16 works well for the leaves of the <tt>rcu_node</tt> tree. | ||
| 97 | </font> | ||
| 98 | |||
| 99 | <p><font color="ffffff">Of course, further experience with | ||
| 100 | systems having hundreds or thousands of CPUs may demonstrate | ||
| 101 | that the fanout for the non-leaf <tt>rcu_node</tt> structures | ||
| 102 | must also be reduced. | ||
| 103 | Such reduction can be easily carried out when and if it proves | ||
| 104 | necessary. | ||
| 105 | In the meantime, if you are using such a system and running into | ||
| 106 | contention problems on the non-leaf <tt>rcu_node</tt> structures, | ||
| 107 | you may use the <tt>CONFIG_RCU_FANOUT</tt> kernel configuration | ||
| 108 | parameter to reduce the non-leaf fanout as needed. | ||
| 109 | </font> | ||
| 110 | |||
| 111 | <p><font color="ffffff">Kernels built for systems with | ||
| 112 | strong NUMA characteristics might also need to adjust | ||
| 113 | <tt>CONFIG_RCU_FANOUT</tt> so that the domains of the | ||
| 114 | <tt>rcu_node</tt> structures align with hardware boundaries. | ||
| 115 | However, there has thus far been no need for this. | ||
| 116 | </font></td></tr> | ||
| 117 | <tr><td> </td></tr> | ||
| 118 | </table> | ||
| 119 | |||
| 120 | <p>If your system has more than 1,024 CPUs (or more than 512 CPUs on | ||
| 121 | a 32-bit system), then RCU will automatically add more levels to the | ||
| 122 | tree. | ||
| 123 | For example, if you are crazy enough to build a 64-bit system with 65,536 | ||
| 124 | CPUs, RCU would configure the <tt>rcu_node</tt> tree as follows: | ||
| 125 | |||
| 126 | </p><p><img src="HugeTreeClassicRCU.svg" alt="HugeTreeClassicRCU.svg" width="50%"> | ||
| 127 | |||
| 128 | </p><p>RCU currently permits up to a four-level tree, which on a 64-bit system | ||
| 129 | accommodates up to 4,194,304 CPUs, though only a mere 524,288 CPUs for | ||
| 130 | 32-bit systems. | ||
| 131 | On the other hand, you can set <tt>CONFIG_RCU_FANOUT</tt> to be | ||
| 132 | as small as 2 if you wish, which would permit only 16 CPUs, which | ||
| 133 | is useful for testing. | ||
| 134 | |||
| 135 | </p><p>This multi-level combining tree allows us to get most of the | ||
| 136 | performance and scalability | ||
| 137 | benefits of partitioning, even though RCU grace-period detection is | ||
| 138 | inherently a global operation. | ||
| 139 | The trick here is that only the last CPU to report a quiescent state | ||
| 140 | into a given <tt>rcu_node</tt> structure need advance to the <tt>rcu_node</tt> | ||
| 141 | structure at the next level up the tree. | ||
| 142 | This means that at the leaf-level <tt>rcu_node</tt> structure, only | ||
| 143 | one access out of sixteen will progress up the tree. | ||
| 144 | For the internal <tt>rcu_node</tt> structures, the situation is even | ||
| 145 | more extreme: Only one access out of sixty-four will progress up | ||
| 146 | the tree. | ||
| 147 | Because the vast majority of the CPUs do not progress up the tree, | ||
| 148 | the lock contention remains roughly constant up the tree. | ||
| 149 | No matter how many CPUs there are in the system, at most 64 quiescent-state | ||
| 150 | reports per grace period will progress all the way to the root | ||
| 151 | <tt>rcu_node</tt> structure, thus ensuring that the lock contention | ||
| 152 | on that root <tt>rcu_node</tt> structure remains acceptably low. | ||
| 153 | |||
| 154 | </p><p>In effect, the combining tree acts like a big shock absorber, | ||
| 155 | keeping lock contention under control at all tree levels regardless | ||
| 156 | of the level of loading on the system. | ||
| 157 | |||
| 158 | </p><p>The Linux kernel actually supports multiple flavors of RCU | ||
| 159 | running concurrently, so RCU builds separate data structures for each | ||
| 160 | flavor. | ||
| 161 | For example, for <tt>CONFIG_TREE_RCU=y</tt> kernels, RCU provides | ||
| 162 | rcu_sched and rcu_bh, as shown below: | ||
| 163 | |||
| 164 | </p><p><img src="BigTreeClassicRCUBH.svg" alt="BigTreeClassicRCUBH.svg" width="33%"> | ||
| 165 | |||
| 166 | </p><p>Energy efficiency is increasingly important, and for that | ||
| 167 | reason the Linux kernel provides <tt>CONFIG_NO_HZ_IDLE</tt>, which | ||
| 168 | turns off the scheduling-clock interrupts on idle CPUs, which in | ||
| 169 | turn allows those CPUs to attain deeper sleep states and to consume | ||
| 170 | less energy. | ||
| 171 | CPUs whose scheduling-clock interrupts have been turned off are | ||
| 172 | said to be in <i>dyntick-idle mode</i>. | ||
| 173 | RCU must handle dyntick-idle CPUs specially | ||
| 174 | because RCU would otherwise wake up each CPU on every grace period, | ||
| 175 | which would defeat the whole purpose of <tt>CONFIG_NO_HZ_IDLE</tt>. | ||
| 176 | RCU uses the <tt>rcu_dynticks</tt> structure to track | ||
| 177 | which CPUs are in dyntick idle mode, as shown below: | ||
| 178 | |||
| 179 | </p><p><img src="BigTreeClassicRCUBHdyntick.svg" alt="BigTreeClassicRCUBHdyntick.svg" width="33%"> | ||
| 180 | |||
| 181 | </p><p>However, if a CPU is in dyntick-idle mode, it is in that mode | ||
| 182 | for all flavors of RCU. | ||
| 183 | Therefore, a single <tt>rcu_dynticks</tt> structure is allocated per | ||
| 184 | CPU, and all of a given CPU's <tt>rcu_data</tt> structures share | ||
| 185 | that <tt>rcu_dynticks</tt>, as shown in the figure. | ||
| 186 | |||
| 187 | </p><p>Kernels built with <tt>CONFIG_PREEMPT_RCU</tt> support | ||
| 188 | rcu_preempt in addition to rcu_sched and rcu_bh, as shown below: | ||
| 189 | |||
| 190 | </p><p><img src="BigTreePreemptRCUBHdyntick.svg" alt="BigTreePreemptRCUBHdyntick.svg" width="35%"> | ||
| 191 | |||
| 192 | </p><p>RCU updaters wait for normal grace periods by registering | ||
| 193 | RCU callbacks, either directly via <tt>call_rcu()</tt> and | ||
| 194 | friends (namely <tt>call_rcu_bh()</tt> and <tt>call_rcu_sched()</tt>), | ||
| 195 | there being a separate interface per flavor of RCU) | ||
| 196 | or indirectly via <tt>synchronize_rcu()</tt> and friends. | ||
| 197 | RCU callbacks are represented by <tt>rcu_head</tt> structures, | ||
| 198 | which are queued on <tt>rcu_data</tt> structures while they are | ||
| 199 | waiting for a grace period to elapse, as shown in the following figure: | ||
| 200 | |||
| 201 | </p><p><img src="BigTreePreemptRCUBHdyntickCB.svg" alt="BigTreePreemptRCUBHdyntickCB.svg" width="40%"> | ||
| 202 | |||
| 203 | </p><p>This figure shows how <tt>TREE_RCU</tt>'s and | ||
| 204 | <tt>PREEMPT_RCU</tt>'s major data structures are related. | ||
| 205 | Lesser data structures will be introduced with the algorithms that | ||
| 206 | make use of them. | ||
| 207 | |||
| 208 | </p><p>Note that each of the data structures in the above figure has | ||
| 209 | its own synchronization: | ||
| 210 | |||
| 211 | <p><ol> | ||
| 212 | <li> Each <tt>rcu_state</tt> structures has a lock and a mutex, | ||
| 213 | and some fields are protected by the corresponding root | ||
| 214 | <tt>rcu_node</tt> structure's lock. | ||
| 215 | <li> Each <tt>rcu_node</tt> structure has a spinlock. | ||
| 216 | <li> The fields in <tt>rcu_data</tt> are private to the corresponding | ||
| 217 | CPU, although a few can be read and written by other CPUs. | ||
| 218 | <li> Similarly, the fields in <tt>rcu_dynticks</tt> are private | ||
| 219 | to the corresponding CPU, although a few can be read by | ||
| 220 | other CPUs. | ||
| 221 | </ol> | ||
| 222 | |||
| 223 | <p>It is important to note that different data structures can have | ||
| 224 | very different ideas about the state of RCU at any given time. | ||
| 225 | For but one example, awareness of the start or end of a given RCU | ||
| 226 | grace period propagates slowly through the data structures. | ||
| 227 | This slow propagation is absolutely necessary for RCU to have good | ||
| 228 | read-side performance. | ||
| 229 | If this balkanized implementation seems foreign to you, one useful | ||
| 230 | trick is to consider each instance of these data structures to be | ||
| 231 | a different person, each having the usual slightly different | ||
| 232 | view of reality. | ||
| 233 | |||
| 234 | </p><p>The general role of each of these data structures is as | ||
| 235 | follows: | ||
| 236 | |||
| 237 | </p><ol> | ||
| 238 | <li> <tt>rcu_state</tt>: | ||
| 239 | This structure forms the interconnection between the | ||
| 240 | <tt>rcu_node</tt> and <tt>rcu_data</tt> structures, | ||
| 241 | tracks grace periods, serves as short-term repository | ||
| 242 | for callbacks orphaned by CPU-hotplug events, | ||
| 243 | maintains <tt>rcu_barrier()</tt> state, | ||
| 244 | tracks expedited grace-period state, | ||
| 245 | and maintains state used to force quiescent states when | ||
| 246 | grace periods extend too long, | ||
| 247 | <li> <tt>rcu_node</tt>: This structure forms the combining | ||
| 248 | tree that propagates quiescent-state | ||
| 249 | information from the leaves to the root, and also propagates | ||
| 250 | grace-period information from the root to the leaves. | ||
| 251 | It provides local copies of the grace-period state in order | ||
| 252 | to allow this information to be accessed in a synchronized | ||
| 253 | manner without suffering the scalability limitations that | ||
| 254 | would otherwise be imposed by global locking. | ||
| 255 | In <tt>CONFIG_PREEMPT_RCU</tt> kernels, it manages the lists | ||
| 256 | of tasks that have blocked while in their current | ||
| 257 | RCU read-side critical section. | ||
| 258 | In <tt>CONFIG_PREEMPT_RCU</tt> with | ||
| 259 | <tt>CONFIG_RCU_BOOST</tt>, it manages the | ||
| 260 | per-<tt>rcu_node</tt> priority-boosting | ||
| 261 | kernel threads (kthreads) and state. | ||
| 262 | Finally, it records CPU-hotplug state in order to determine | ||
| 263 | which CPUs should be ignored during a given grace period. | ||
| 264 | <li> <tt>rcu_data</tt>: This per-CPU structure is the | ||
| 265 | focus of quiescent-state detection and RCU callback queuing. | ||
| 266 | It also tracks its relationship to the corresponding leaf | ||
| 267 | <tt>rcu_node</tt> structure to allow more-efficient | ||
| 268 | propagation of quiescent states up the <tt>rcu_node</tt> | ||
| 269 | combining tree. | ||
| 270 | Like the <tt>rcu_node</tt> structure, it provides a local | ||
| 271 | copy of the grace-period information to allow for-free | ||
| 272 | synchronized | ||
| 273 | access to this information from the corresponding CPU. | ||
| 274 | Finally, this structure records past dyntick-idle state | ||
| 275 | for the corresponding CPU and also tracks statistics. | ||
| 276 | <li> <tt>rcu_dynticks</tt>: | ||
| 277 | This per-CPU structure tracks the current dyntick-idle | ||
| 278 | state for the corresponding CPU. | ||
| 279 | Unlike the other three structures, the <tt>rcu_dynticks</tt> | ||
| 280 | structure is not replicated per RCU flavor. | ||
| 281 | <li> <tt>rcu_head</tt>: | ||
| 282 | This structure represents RCU callbacks, and is the | ||
| 283 | only structure allocated and managed by RCU users. | ||
| 284 | The <tt>rcu_head</tt> structure is normally embedded | ||
| 285 | within the RCU-protected data structure. | ||
| 286 | </ol> | ||
| 287 | |||
| 288 | <p>If all you wanted from this article was a general notion of how | ||
| 289 | RCU's data structures are related, you are done. | ||
| 290 | Otherwise, each of the following sections give more details on | ||
| 291 | the <tt>rcu_state</tt>, <tt>rcu_node</tt>, <tt>rcu_data</tt>, | ||
| 292 | and <tt>rcu_dynticks</tt> data structures. | ||
| 293 | |||
| 294 | <h3><a name="The rcu_state Structure"> | ||
| 295 | The <tt>rcu_state</tt> Structure</a></h3> | ||
| 296 | |||
| 297 | <p>The <tt>rcu_state</tt> structure is the base structure that | ||
| 298 | represents a flavor of RCU. | ||
| 299 | This structure forms the interconnection between the | ||
| 300 | <tt>rcu_node</tt> and <tt>rcu_data</tt> structures, | ||
| 301 | tracks grace periods, contains the lock used to | ||
| 302 | synchronize with CPU-hotplug events, | ||
| 303 | and maintains state used to force quiescent states when | ||
| 304 | grace periods extend too long, | ||
| 305 | |||
| 306 | </p><p>A few of the <tt>rcu_state</tt> structure's fields are discussed, | ||
| 307 | singly and in groups, in the following sections. | ||
| 308 | The more specialized fields are covered in the discussion of their | ||
| 309 | use. | ||
| 310 | |||
| 311 | <h5>Relationship to rcu_node and rcu_data Structures</h5> | ||
| 312 | |||
| 313 | This portion of the <tt>rcu_state</tt> structure is declared | ||
| 314 | as follows: | ||
| 315 | |||
| 316 | <pre> | ||
| 317 | 1 struct rcu_node node[NUM_RCU_NODES]; | ||
| 318 | 2 struct rcu_node *level[NUM_RCU_LVLS + 1]; | ||
| 319 | 3 struct rcu_data __percpu *rda; | ||
| 320 | </pre> | ||
| 321 | |||
| 322 | <table> | ||
| 323 | <tr><th> </th></tr> | ||
| 324 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 325 | <tr><td> | ||
| 326 | Wait a minute! | ||
| 327 | You said that the <tt>rcu_node</tt> structures formed a tree, | ||
| 328 | but they are declared as a flat array! | ||
| 329 | What gives? | ||
| 330 | </td></tr> | ||
| 331 | <tr><th align="left">Answer:</th></tr> | ||
| 332 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 333 | The tree is laid out in the array. | ||
| 334 | The first node In the array is the head, the next set of nodes in the | ||
| 335 | array are children of the head node, and so on until the last set of | ||
| 336 | nodes in the array are the leaves. | ||
| 337 | </font> | ||
| 338 | |||
| 339 | <p><font color="ffffff">See the following diagrams to see how | ||
| 340 | this works. | ||
| 341 | </font></td></tr> | ||
| 342 | <tr><td> </td></tr> | ||
| 343 | </table> | ||
| 344 | |||
| 345 | <p>The <tt>rcu_node</tt> tree is embedded into the | ||
| 346 | <tt>->node[]</tt> array as shown in the following figure: | ||
| 347 | |||
| 348 | </p><p><img src="TreeMapping.svg" alt="TreeMapping.svg" width="40%"> | ||
| 349 | |||
| 350 | </p><p>One interesting consequence of this mapping is that a | ||
| 351 | breadth-first traversal of the tree is implemented as a simple | ||
| 352 | linear scan of the array, which is in fact what the | ||
| 353 | <tt>rcu_for_each_node_breadth_first()</tt> macro does. | ||
| 354 | This macro is used at the beginning and ends of grace periods. | ||
| 355 | |||
| 356 | </p><p>Each entry of the <tt>->level</tt> array references | ||
| 357 | the first <tt>rcu_node</tt> structure on the corresponding level | ||
| 358 | of the tree, for example, as shown below: | ||
| 359 | |||
| 360 | </p><p><img src="TreeMappingLevel.svg" alt="TreeMappingLevel.svg" width="40%"> | ||
| 361 | |||
| 362 | </p><p>The zero<sup>th</sup> element of the array references the root | ||
| 363 | <tt>rcu_node</tt> structure, the first element references the | ||
| 364 | first child of the root <tt>rcu_node</tt>, and finally the second | ||
| 365 | element references the first leaf <tt>rcu_node</tt> structure. | ||
| 366 | |||
| 367 | </p><p>For whatever it is worth, if you draw the tree to be tree-shaped | ||
| 368 | rather than array-shaped, it is easy to draw a planar representation: | ||
| 369 | |||
| 370 | </p><p><img src="TreeLevel.svg" alt="TreeLevel.svg" width="60%"> | ||
| 371 | |||
| 372 | </p><p>Finally, the <tt>->rda</tt> field references a per-CPU | ||
| 373 | pointer to the corresponding CPU's <tt>rcu_data</tt> structure. | ||
| 374 | |||
| 375 | </p><p>All of these fields are constant once initialization is complete, | ||
| 376 | and therefore need no protection. | ||
| 377 | |||
| 378 | <h5>Grace-Period Tracking</h5> | ||
| 379 | |||
| 380 | <p>This portion of the <tt>rcu_state</tt> structure is declared | ||
| 381 | as follows: | ||
| 382 | |||
| 383 | <pre> | ||
| 384 | 1 unsigned long gpnum; | ||
| 385 | 2 unsigned long completed; | ||
| 386 | </pre> | ||
| 387 | |||
| 388 | <p>RCU grace periods are numbered, and | ||
| 389 | the <tt>->gpnum</tt> field contains the number of the grace | ||
| 390 | period that started most recently. | ||
| 391 | The <tt>->completed</tt> field contains the number of the | ||
| 392 | grace period that completed most recently. | ||
| 393 | If the two fields are equal, the RCU grace period that most recently | ||
| 394 | started has already completed, and therefore the corresponding | ||
| 395 | flavor of RCU is idle. | ||
| 396 | If <tt>->gpnum</tt> is one greater than <tt>->completed</tt>, | ||
| 397 | then <tt>->gpnum</tt> gives the number of the current RCU | ||
| 398 | grace period, which has not yet completed. | ||
| 399 | Any other combination of values indicates that something is broken. | ||
| 400 | These two fields are protected by the root <tt>rcu_node</tt>'s | ||
| 401 | <tt>->lock</tt> field. | ||
| 402 | |||
| 403 | </p><p>There are <tt>->gpnum</tt> and <tt>->completed</tt> fields | ||
| 404 | in the <tt>rcu_node</tt> and <tt>rcu_data</tt> structures | ||
| 405 | as well. | ||
| 406 | The fields in the <tt>rcu_state</tt> structure represent the | ||
| 407 | most current values, and those of the other structures are compared | ||
| 408 | in order to detect the start of a new grace period in a distributed | ||
| 409 | fashion. | ||
| 410 | The values flow from <tt>rcu_state</tt> to <tt>rcu_node</tt> | ||
| 411 | (down the tree from the root to the leaves) to <tt>rcu_data</tt>. | ||
| 412 | |||
| 413 | <h5>Miscellaneous</h5> | ||
| 414 | |||
| 415 | <p>This portion of the <tt>rcu_state</tt> structure is declared | ||
| 416 | as follows: | ||
| 417 | |||
| 418 | <pre> | ||
| 419 | 1 unsigned long gp_max; | ||
| 420 | 2 char abbr; | ||
| 421 | 3 char *name; | ||
| 422 | </pre> | ||
| 423 | |||
| 424 | <p>The <tt>->gp_max</tt> field tracks the duration of the longest | ||
| 425 | grace period in jiffies. | ||
| 426 | It is protected by the root <tt>rcu_node</tt>'s <tt>->lock</tt>. | ||
| 427 | |||
| 428 | <p>The <tt>->name</tt> field points to the name of the RCU flavor | ||
| 429 | (for example, “rcu_sched”), and is constant. | ||
| 430 | The <tt>->abbr</tt> field contains a one-character abbreviation, | ||
| 431 | for example, “s” for RCU-sched. | ||
| 432 | |||
| 433 | <h3><a name="The rcu_node Structure"> | ||
| 434 | The <tt>rcu_node</tt> Structure</a></h3> | ||
| 435 | |||
| 436 | <p>The <tt>rcu_node</tt> structures form the combining | ||
| 437 | tree that propagates quiescent-state | ||
| 438 | information from the leaves to the root and also that propagates | ||
| 439 | grace-period information from the root down to the leaves. | ||
| 440 | They provides local copies of the grace-period state in order | ||
| 441 | to allow this information to be accessed in a synchronized | ||
| 442 | manner without suffering the scalability limitations that | ||
| 443 | would otherwise be imposed by global locking. | ||
| 444 | In <tt>CONFIG_PREEMPT_RCU</tt> kernels, they manage the lists | ||
| 445 | of tasks that have blocked while in their current | ||
| 446 | RCU read-side critical section. | ||
| 447 | In <tt>CONFIG_PREEMPT_RCU</tt> with | ||
| 448 | <tt>CONFIG_RCU_BOOST</tt>, they manage the | ||
| 449 | per-<tt>rcu_node</tt> priority-boosting | ||
| 450 | kernel threads (kthreads) and state. | ||
| 451 | Finally, they record CPU-hotplug state in order to determine | ||
| 452 | which CPUs should be ignored during a given grace period. | ||
| 453 | |||
| 454 | </p><p>The <tt>rcu_node</tt> structure's fields are discussed, | ||
| 455 | singly and in groups, in the following sections. | ||
| 456 | |||
| 457 | <h5>Connection to Combining Tree</h5> | ||
| 458 | |||
| 459 | <p>This portion of the <tt>rcu_node</tt> structure is declared | ||
| 460 | as follows: | ||
| 461 | |||
| 462 | <pre> | ||
| 463 | 1 struct rcu_node *parent; | ||
| 464 | 2 u8 level; | ||
| 465 | 3 u8 grpnum; | ||
| 466 | 4 unsigned long grpmask; | ||
| 467 | 5 int grplo; | ||
| 468 | 6 int grphi; | ||
| 469 | </pre> | ||
| 470 | |||
| 471 | <p>The <tt>->parent</tt> pointer references the <tt>rcu_node</tt> | ||
| 472 | one level up in the tree, and is <tt>NULL</tt> for the root | ||
| 473 | <tt>rcu_node</tt>. | ||
| 474 | The RCU implementation makes heavy use of this field to push quiescent | ||
| 475 | states up the tree. | ||
| 476 | The <tt>->level</tt> field gives the level in the tree, with | ||
| 477 | the root being at level zero, its children at level one, and so on. | ||
| 478 | The <tt>->grpnum</tt> field gives this node's position within | ||
| 479 | the children of its parent, so this number can range between 0 and 31 | ||
| 480 | on 32-bit systems and between 0 and 63 on 64-bit systems. | ||
| 481 | The <tt>->level</tt> and <tt>->grpnum</tt> fields are | ||
| 482 | used only during initialization and for tracing. | ||
| 483 | The <tt>->grpmask</tt> field is the bitmask counterpart of | ||
| 484 | <tt>->grpnum</tt>, and therefore always has exactly one bit set. | ||
| 485 | This mask is used to clear the bit corresponding to this <tt>rcu_node</tt> | ||
| 486 | structure in its parent's bitmasks, which are described later. | ||
| 487 | Finally, the <tt>->grplo</tt> and <tt>->grphi</tt> fields | ||
| 488 | contain the lowest and highest numbered CPU served by this | ||
| 489 | <tt>rcu_node</tt> structure, respectively. | ||
| 490 | |||
| 491 | </p><p>All of these fields are constant, and thus do not require any | ||
| 492 | synchronization. | ||
| 493 | |||
| 494 | <h5>Synchronization</h5> | ||
| 495 | |||
| 496 | <p>This field of the <tt>rcu_node</tt> structure is declared | ||
| 497 | as follows: | ||
| 498 | |||
| 499 | <pre> | ||
| 500 | 1 raw_spinlock_t lock; | ||
| 501 | </pre> | ||
| 502 | |||
| 503 | <p>This field is used to protect the remaining fields in this structure, | ||
| 504 | unless otherwise stated. | ||
| 505 | That said, all of the fields in this structure can be accessed without | ||
| 506 | locking for tracing purposes. | ||
| 507 | Yes, this can result in confusing traces, but better some tracing confusion | ||
| 508 | than to be heisenbugged out of existence. | ||
| 509 | |||
| 510 | <h5>Grace-Period Tracking</h5> | ||
| 511 | |||
| 512 | <p>This portion of the <tt>rcu_node</tt> structure is declared | ||
| 513 | as follows: | ||
| 514 | |||
| 515 | <pre> | ||
| 516 | 1 unsigned long gpnum; | ||
| 517 | 2 unsigned long completed; | ||
| 518 | </pre> | ||
| 519 | |||
| 520 | <p>These fields are the counterparts of the fields of the same name in | ||
| 521 | the <tt>rcu_state</tt> structure. | ||
| 522 | They each may lag up to one behind their <tt>rcu_state</tt> | ||
| 523 | counterparts. | ||
| 524 | If a given <tt>rcu_node</tt> structure's <tt>->gpnum</tt> and | ||
| 525 | <tt>->complete</tt> fields are equal, then this <tt>rcu_node</tt> | ||
| 526 | structure believes that RCU is idle. | ||
| 527 | Otherwise, as with the <tt>rcu_state</tt> structure, | ||
| 528 | the <tt>->gpnum</tt> field will be one greater than the | ||
| 529 | <tt>->complete</tt> fields, with <tt>->gpnum</tt> | ||
| 530 | indicating which grace period this <tt>rcu_node</tt> believes | ||
| 531 | is still being waited for. | ||
| 532 | |||
| 533 | </p><p>The <tt>>gpnum</tt> field of each <tt>rcu_node</tt> | ||
| 534 | structure is updated at the beginning | ||
| 535 | of each grace period, and the <tt>->completed</tt> fields are | ||
| 536 | updated at the end of each grace period. | ||
| 537 | |||
| 538 | <h5>Quiescent-State Tracking</h5> | ||
| 539 | |||
| 540 | <p>These fields manage the propagation of quiescent states up the | ||
| 541 | combining tree. | ||
| 542 | |||
| 543 | </p><p>This portion of the <tt>rcu_node</tt> structure has fields | ||
| 544 | as follows: | ||
| 545 | |||
| 546 | <pre> | ||
| 547 | 1 unsigned long qsmask; | ||
| 548 | 2 unsigned long expmask; | ||
| 549 | 3 unsigned long qsmaskinit; | ||
| 550 | 4 unsigned long expmaskinit; | ||
| 551 | </pre> | ||
| 552 | |||
| 553 | <p>The <tt>->qsmask</tt> field tracks which of this | ||
| 554 | <tt>rcu_node</tt> structure's children still need to report | ||
| 555 | quiescent states for the current normal grace period. | ||
| 556 | Such children will have a value of 1 in their corresponding bit. | ||
| 557 | Note that the leaf <tt>rcu_node</tt> structures should be | ||
| 558 | thought of as having <tt>rcu_data</tt> structures as their | ||
| 559 | children. | ||
| 560 | Similarly, the <tt>->expmask</tt> field tracks which | ||
| 561 | of this <tt>rcu_node</tt> structure's children still need to report | ||
| 562 | quiescent states for the current expedited grace period. | ||
| 563 | An expedited grace period has | ||
| 564 | the same conceptual properties as a normal grace period, but the | ||
| 565 | expedited implementation accepts extreme CPU overhead to obtain | ||
| 566 | much lower grace-period latency, for example, consuming a few | ||
| 567 | tens of microseconds worth of CPU time to reduce grace-period | ||
| 568 | duration from milliseconds to tens of microseconds. | ||
| 569 | The <tt>->qsmaskinit</tt> field tracks which of this | ||
| 570 | <tt>rcu_node</tt> structure's children cover for at least | ||
| 571 | one online CPU. | ||
| 572 | This mask is used to initialize <tt>->qsmask</tt>, | ||
| 573 | and <tt>->expmaskinit</tt> is used to initialize | ||
| 574 | <tt>->expmask</tt> and the beginning of the | ||
| 575 | normal and expedited grace periods, respectively. | ||
| 576 | |||
| 577 | <table> | ||
| 578 | <tr><th> </th></tr> | ||
| 579 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 580 | <tr><td> | ||
| 581 | Why are these bitmasks protected by locking? | ||
| 582 | Come on, haven't you heard of atomic instructions??? | ||
| 583 | </td></tr> | ||
| 584 | <tr><th align="left">Answer:</th></tr> | ||
| 585 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 586 | Lockless grace-period computation! Such a tantalizing possibility! | ||
| 587 | </font> | ||
| 588 | |||
| 589 | <p><font color="ffffff">But consider the following sequence of events: | ||
| 590 | </font> | ||
| 591 | |||
| 592 | <ol> | ||
| 593 | <li> <font color="ffffff">CPU 0 has been in dyntick-idle | ||
| 594 | mode for quite some time. | ||
| 595 | When it wakes up, it notices that the current RCU | ||
| 596 | grace period needs it to report in, so it sets a | ||
| 597 | flag where the scheduling clock interrupt will find it. | ||
| 598 | </font><p> | ||
| 599 | <li> <font color="ffffff">Meanwhile, CPU 1 is running | ||
| 600 | <tt>force_quiescent_state()</tt>, | ||
| 601 | and notices that CPU 0 has been in dyntick idle mode, | ||
| 602 | which qualifies as an extended quiescent state. | ||
| 603 | </font><p> | ||
| 604 | <li> <font color="ffffff">CPU 0's scheduling clock | ||
| 605 | interrupt fires in the | ||
| 606 | middle of an RCU read-side critical section, and notices | ||
| 607 | that the RCU core needs something, so commences RCU softirq | ||
| 608 | processing. | ||
| 609 | </font> | ||
| 610 | <p> | ||
| 611 | <li> <font color="ffffff">CPU 0's softirq handler | ||
| 612 | executes and is just about ready | ||
| 613 | to report its quiescent state up the <tt>rcu_node</tt> | ||
| 614 | tree. | ||
| 615 | </font><p> | ||
| 616 | <li> <font color="ffffff">But CPU 1 beats it to the punch, | ||
| 617 | completing the current | ||
| 618 | grace period and starting a new one. | ||
| 619 | </font><p> | ||
| 620 | <li> <font color="ffffff">CPU 0 now reports its quiescent | ||
| 621 | state for the wrong | ||
| 622 | grace period. | ||
| 623 | That grace period might now end before the RCU read-side | ||
| 624 | critical section. | ||
| 625 | If that happens, disaster will ensue. | ||
| 626 | </font> | ||
| 627 | </ol> | ||
| 628 | |||
| 629 | <p><font color="ffffff">So the locking is absolutely required in | ||
| 630 | order to coordinate | ||
| 631 | clearing of the bits with the grace-period numbers in | ||
| 632 | <tt>->gpnum</tt> and <tt>->completed</tt>. | ||
| 633 | </font></td></tr> | ||
| 634 | <tr><td> </td></tr> | ||
| 635 | </table> | ||
| 636 | |||
| 637 | <h5>Blocked-Task Management</h5> | ||
| 638 | |||
| 639 | <p><tt>PREEMPT_RCU</tt> allows tasks to be preempted in the | ||
| 640 | midst of their RCU read-side critical sections, and these tasks | ||
| 641 | must be tracked explicitly. | ||
| 642 | The details of exactly why and how they are tracked will be covered | ||
| 643 | in a separate article on RCU read-side processing. | ||
| 644 | For now, it is enough to know that the <tt>rcu_node</tt> | ||
| 645 | structure tracks them. | ||
| 646 | |||
| 647 | <pre> | ||
| 648 | 1 struct list_head blkd_tasks; | ||
| 649 | 2 struct list_head *gp_tasks; | ||
| 650 | 3 struct list_head *exp_tasks; | ||
| 651 | 4 bool wait_blkd_tasks; | ||
| 652 | </pre> | ||
| 653 | |||
| 654 | <p>The <tt>->blkd_tasks</tt> field is a list header for | ||
| 655 | the list of blocked and preempted tasks. | ||
| 656 | As tasks undergo context switches within RCU read-side critical | ||
| 657 | sections, their <tt>task_struct</tt> structures are enqueued | ||
| 658 | (via the <tt>task_struct</tt>'s <tt>->rcu_node_entry</tt> | ||
| 659 | field) onto the head of the <tt>->blkd_tasks</tt> list for the | ||
| 660 | leaf <tt>rcu_node</tt> structure corresponding to the CPU | ||
| 661 | on which the outgoing context switch executed. | ||
| 662 | As these tasks later exit their RCU read-side critical sections, | ||
| 663 | they remove themselves from the list. | ||
| 664 | This list is therefore in reverse time order, so that if one of the tasks | ||
| 665 | is blocking the current grace period, all subsequent tasks must | ||
| 666 | also be blocking that same grace period. | ||
| 667 | Therefore, a single pointer into this list suffices to track | ||
| 668 | all tasks blocking a given grace period. | ||
| 669 | That pointer is stored in <tt>->gp_tasks</tt> for normal | ||
| 670 | grace periods and in <tt>->exp_tasks</tt> for expedited | ||
| 671 | grace periods. | ||
| 672 | These last two fields are <tt>NULL</tt> if either there is | ||
| 673 | no grace period in flight or if there are no blocked tasks | ||
| 674 | preventing that grace period from completing. | ||
| 675 | If either of these two pointers is referencing a task that | ||
| 676 | removes itself from the <tt>->blkd_tasks</tt> list, | ||
| 677 | then that task must advance the pointer to the next task on | ||
| 678 | the list, or set the pointer to <tt>NULL</tt> if there | ||
| 679 | are no subsequent tasks on the list. | ||
| 680 | |||
| 681 | </p><p>For example, suppose that tasks T1, T2, and T3 are | ||
| 682 | all hard-affinitied to the largest-numbered CPU in the system. | ||
| 683 | Then if task T1 blocked in an RCU read-side | ||
| 684 | critical section, then an expedited grace period started, | ||
| 685 | then task T2 blocked in an RCU read-side critical section, | ||
| 686 | then a normal grace period started, and finally task 3 blocked | ||
| 687 | in an RCU read-side critical section, then the state of the | ||
| 688 | last leaf <tt>rcu_node</tt> structure's blocked-task list | ||
| 689 | would be as shown below: | ||
| 690 | |||
| 691 | </p><p><img src="blkd_task.svg" alt="blkd_task.svg" width="60%"> | ||
| 692 | |||
| 693 | </p><p>Task T1 is blocking both grace periods, task T2 is | ||
| 694 | blocking only the normal grace period, and task T3 is blocking | ||
| 695 | neither grace period. | ||
| 696 | Note that these tasks will not remove themselves from this list | ||
| 697 | immediately upon resuming execution. | ||
| 698 | They will instead remain on the list until they execute the outermost | ||
| 699 | <tt>rcu_read_unlock()</tt> that ends their RCU read-side critical | ||
| 700 | section. | ||
| 701 | |||
| 702 | <p> | ||
| 703 | The <tt>->wait_blkd_tasks</tt> field indicates whether or not | ||
| 704 | the current grace period is waiting on a blocked task. | ||
| 705 | |||
| 706 | <h5>Sizing the <tt>rcu_node</tt> Array</h5> | ||
| 707 | |||
| 708 | <p>The <tt>rcu_node</tt> array is sized via a series of | ||
| 709 | C-preprocessor expressions as follows: | ||
| 710 | |||
| 711 | <pre> | ||
| 712 | 1 #ifdef CONFIG_RCU_FANOUT | ||
| 713 | 2 #define RCU_FANOUT CONFIG_RCU_FANOUT | ||
| 714 | 3 #else | ||
| 715 | 4 # ifdef CONFIG_64BIT | ||
| 716 | 5 # define RCU_FANOUT 64 | ||
| 717 | 6 # else | ||
| 718 | 7 # define RCU_FANOUT 32 | ||
| 719 | 8 # endif | ||
| 720 | 9 #endif | ||
| 721 | 10 | ||
| 722 | 11 #ifdef CONFIG_RCU_FANOUT_LEAF | ||
| 723 | 12 #define RCU_FANOUT_LEAF CONFIG_RCU_FANOUT_LEAF | ||
| 724 | 13 #else | ||
| 725 | 14 # ifdef CONFIG_64BIT | ||
| 726 | 15 # define RCU_FANOUT_LEAF 64 | ||
| 727 | 16 # else | ||
| 728 | 17 # define RCU_FANOUT_LEAF 32 | ||
| 729 | 18 # endif | ||
| 730 | 19 #endif | ||
| 731 | 20 | ||
| 732 | 21 #define RCU_FANOUT_1 (RCU_FANOUT_LEAF) | ||
| 733 | 22 #define RCU_FANOUT_2 (RCU_FANOUT_1 * RCU_FANOUT) | ||
| 734 | 23 #define RCU_FANOUT_3 (RCU_FANOUT_2 * RCU_FANOUT) | ||
| 735 | 24 #define RCU_FANOUT_4 (RCU_FANOUT_3 * RCU_FANOUT) | ||
| 736 | 25 | ||
| 737 | 26 #if NR_CPUS <= RCU_FANOUT_1 | ||
| 738 | 27 # define RCU_NUM_LVLS 1 | ||
| 739 | 28 # define NUM_RCU_LVL_0 1 | ||
| 740 | 29 # define NUM_RCU_NODES NUM_RCU_LVL_0 | ||
| 741 | 30 # define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0 } | ||
| 742 | 31 # define RCU_NODE_NAME_INIT { "rcu_node_0" } | ||
| 743 | 32 # define RCU_FQS_NAME_INIT { "rcu_node_fqs_0" } | ||
| 744 | 33 # define RCU_EXP_NAME_INIT { "rcu_node_exp_0" } | ||
| 745 | 34 #elif NR_CPUS <= RCU_FANOUT_2 | ||
| 746 | 35 # define RCU_NUM_LVLS 2 | ||
| 747 | 36 # define NUM_RCU_LVL_0 1 | ||
| 748 | 37 # define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1) | ||
| 749 | 38 # define NUM_RCU_NODES (NUM_RCU_LVL_0 + NUM_RCU_LVL_1) | ||
| 750 | 39 # define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0, NUM_RCU_LVL_1 } | ||
| 751 | 40 # define RCU_NODE_NAME_INIT { "rcu_node_0", "rcu_node_1" } | ||
| 752 | 41 # define RCU_FQS_NAME_INIT { "rcu_node_fqs_0", "rcu_node_fqs_1" } | ||
| 753 | 42 # define RCU_EXP_NAME_INIT { "rcu_node_exp_0", "rcu_node_exp_1" } | ||
| 754 | 43 #elif NR_CPUS <= RCU_FANOUT_3 | ||
| 755 | 44 # define RCU_NUM_LVLS 3 | ||
| 756 | 45 # define NUM_RCU_LVL_0 1 | ||
| 757 | 46 # define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_2) | ||
| 758 | 47 # define NUM_RCU_LVL_2 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1) | ||
| 759 | 48 # define NUM_RCU_NODES (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2) | ||
| 760 | 49 # define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0, NUM_RCU_LVL_1, NUM_RCU_LVL_2 } | ||
| 761 | 50 # define RCU_NODE_NAME_INIT { "rcu_node_0", "rcu_node_1", "rcu_node_2" } | ||
| 762 | 51 # define RCU_FQS_NAME_INIT { "rcu_node_fqs_0", "rcu_node_fqs_1", "rcu_node_fqs_2" } | ||
| 763 | 52 # define RCU_EXP_NAME_INIT { "rcu_node_exp_0", "rcu_node_exp_1", "rcu_node_exp_2" } | ||
| 764 | 53 #elif NR_CPUS <= RCU_FANOUT_4 | ||
| 765 | 54 # define RCU_NUM_LVLS 4 | ||
| 766 | 55 # define NUM_RCU_LVL_0 1 | ||
| 767 | 56 # define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_3) | ||
| 768 | 57 # define NUM_RCU_LVL_2 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_2) | ||
| 769 | 58 # define NUM_RCU_LVL_3 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1) | ||
| 770 | 59 # define NUM_RCU_NODES (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) | ||
| 771 | 60 # define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0, NUM_RCU_LVL_1, NUM_RCU_LVL_2, NUM_RCU_LVL_3 } | ||
| 772 | 61 # define RCU_NODE_NAME_INIT { "rcu_node_0", "rcu_node_1", "rcu_node_2", "rcu_node_3" } | ||
| 773 | 62 # define RCU_FQS_NAME_INIT { "rcu_node_fqs_0", "rcu_node_fqs_1", "rcu_node_fqs_2", "rcu_node_fqs_3" } | ||
| 774 | 63 # define RCU_EXP_NAME_INIT { "rcu_node_exp_0", "rcu_node_exp_1", "rcu_node_exp_2", "rcu_node_exp_3" } | ||
| 775 | 64 #else | ||
| 776 | 65 # error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" | ||
| 777 | 66 #endif | ||
| 778 | </pre> | ||
| 779 | |||
| 780 | <p>The maximum number of levels in the <tt>rcu_node</tt> structure | ||
| 781 | is currently limited to four, as specified by lines 21-24 | ||
| 782 | and the structure of the subsequent “if” statement. | ||
| 783 | For 32-bit systems, this allows 16*32*32*32=524,288 CPUs, which | ||
| 784 | should be sufficient for the next few years at least. | ||
| 785 | For 64-bit systems, 16*64*64*64=4,194,304 CPUs is allowed, which | ||
| 786 | should see us through the next decade or so. | ||
| 787 | This four-level tree also allows kernels built with | ||
| 788 | <tt>CONFIG_RCU_FANOUT=8</tt> to support up to 4096 CPUs, | ||
| 789 | which might be useful in very large systems having eight CPUs per | ||
| 790 | socket (but please note that no one has yet shown any measurable | ||
| 791 | performance degradation due to misaligned socket and <tt>rcu_node</tt> | ||
| 792 | boundaries). | ||
| 793 | In addition, building kernels with a full four levels of <tt>rcu_node</tt> | ||
| 794 | tree permits better testing of RCU's combining-tree code. | ||
| 795 | |||
| 796 | </p><p>The <tt>RCU_FANOUT</tt> symbol controls how many children | ||
| 797 | are permitted at each non-leaf level of the <tt>rcu_node</tt> tree. | ||
| 798 | If the <tt>CONFIG_RCU_FANOUT</tt> Kconfig option is not specified, | ||
| 799 | it is set based on the word size of the system, which is also | ||
| 800 | the Kconfig default. | ||
| 801 | |||
| 802 | </p><p>The <tt>RCU_FANOUT_LEAF</tt> symbol controls how many CPUs are | ||
| 803 | handled by each leaf <tt>rcu_node</tt> structure. | ||
| 804 | Experience has shown that allowing a given leaf <tt>rcu_node</tt> | ||
| 805 | structure to handle 64 CPUs, as permitted by the number of bits in | ||
| 806 | the <tt>->qsmask</tt> field on a 64-bit system, results in | ||
| 807 | excessive contention for the leaf <tt>rcu_node</tt> structures' | ||
| 808 | <tt>->lock</tt> fields. | ||
| 809 | The number of CPUs per leaf <tt>rcu_node</tt> structure is therefore | ||
| 810 | limited to 16 given the default value of <tt>CONFIG_RCU_FANOUT_LEAF</tt>. | ||
| 811 | If <tt>CONFIG_RCU_FANOUT_LEAF</tt> is unspecified, the value | ||
| 812 | selected is based on the word size of the system, just as for | ||
| 813 | <tt>CONFIG_RCU_FANOUT</tt>. | ||
| 814 | Lines 11-19 perform this computation. | ||
| 815 | |||
| 816 | </p><p>Lines 21-24 compute the maximum number of CPUs supported by | ||
| 817 | a single-level (which contains a single <tt>rcu_node</tt> structure), | ||
| 818 | two-level, three-level, and four-level <tt>rcu_node</tt> tree, | ||
| 819 | respectively, given the fanout specified by <tt>RCU_FANOUT</tt> | ||
| 820 | and <tt>RCU_FANOUT_LEAF</tt>. | ||
| 821 | These numbers of CPUs are retained in the | ||
| 822 | <tt>RCU_FANOUT_1</tt>, | ||
| 823 | <tt>RCU_FANOUT_2</tt>, | ||
| 824 | <tt>RCU_FANOUT_3</tt>, and | ||
| 825 | <tt>RCU_FANOUT_4</tt> | ||
| 826 | C-preprocessor variables, respectively. | ||
| 827 | |||
| 828 | </p><p>These variables are used to control the C-preprocessor <tt>#if</tt> | ||
| 829 | statement spanning lines 26-66 that computes the number of | ||
| 830 | <tt>rcu_node</tt> structures required for each level of the tree, | ||
| 831 | as well as the number of levels required. | ||
| 832 | The number of levels is placed in the <tt>NUM_RCU_LVLS</tt> | ||
| 833 | C-preprocessor variable by lines 27, 35, 44, and 54. | ||
| 834 | The number of <tt>rcu_node</tt> structures for the topmost level | ||
| 835 | of the tree is always exactly one, and this value is unconditionally | ||
| 836 | placed into <tt>NUM_RCU_LVL_0</tt> by lines 28, 36, 45, and 55. | ||
| 837 | The rest of the levels (if any) of the <tt>rcu_node</tt> tree | ||
| 838 | are computed by dividing the maximum number of CPUs by the | ||
| 839 | fanout supported by the number of levels from the current level down, | ||
| 840 | rounding up. This computation is performed by lines 37, | ||
| 841 | 46-47, and 56-58. | ||
| 842 | Lines 31-33, 40-42, 50-52, and 62-63 create initializers | ||
| 843 | for lockdep lock-class names. | ||
| 844 | Finally, lines 64-66 produce an error if the maximum number of | ||
| 845 | CPUs is too large for the specified fanout. | ||
| 846 | |||
| 847 | <h3><a name="The rcu_data Structure"> | ||
| 848 | The <tt>rcu_data</tt> Structure</a></h3> | ||
| 849 | |||
| 850 | <p>The <tt>rcu_data</tt> maintains the per-CPU state for the | ||
| 851 | corresponding flavor of RCU. | ||
| 852 | The fields in this structure may be accessed only from the corresponding | ||
| 853 | CPU (and from tracing) unless otherwise stated. | ||
| 854 | This structure is the | ||
| 855 | focus of quiescent-state detection and RCU callback queuing. | ||
| 856 | It also tracks its relationship to the corresponding leaf | ||
| 857 | <tt>rcu_node</tt> structure to allow more-efficient | ||
| 858 | propagation of quiescent states up the <tt>rcu_node</tt> | ||
| 859 | combining tree. | ||
| 860 | Like the <tt>rcu_node</tt> structure, it provides a local | ||
| 861 | copy of the grace-period information to allow for-free | ||
| 862 | synchronized | ||
| 863 | access to this information from the corresponding CPU. | ||
| 864 | Finally, this structure records past dyntick-idle state | ||
| 865 | for the corresponding CPU and also tracks statistics. | ||
| 866 | |||
| 867 | </p><p>The <tt>rcu_data</tt> structure's fields are discussed, | ||
| 868 | singly and in groups, in the following sections. | ||
| 869 | |||
| 870 | <h5>Connection to Other Data Structures</h5> | ||
| 871 | |||
| 872 | <p>This portion of the <tt>rcu_data</tt> structure is declared | ||
| 873 | as follows: | ||
| 874 | |||
| 875 | <pre> | ||
| 876 | 1 int cpu; | ||
| 877 | 2 struct rcu_state *rsp; | ||
| 878 | 3 struct rcu_node *mynode; | ||
| 879 | 4 struct rcu_dynticks *dynticks; | ||
| 880 | 5 unsigned long grpmask; | ||
| 881 | 6 bool beenonline; | ||
| 882 | </pre> | ||
| 883 | |||
| 884 | <p>The <tt>->cpu</tt> field contains the number of the | ||
| 885 | corresponding CPU, the <tt>->rsp</tt> pointer references | ||
| 886 | the corresponding <tt>rcu_state</tt> structure (and is most frequently | ||
| 887 | used to locate the name of the corresponding flavor of RCU for tracing), | ||
| 888 | and the <tt>->mynode</tt> field references the corresponding | ||
| 889 | <tt>rcu_node</tt> structure. | ||
| 890 | The <tt>->mynode</tt> is used to propagate quiescent states | ||
| 891 | up the combining tree. | ||
| 892 | <p>The <tt>->dynticks</tt> pointer references the | ||
| 893 | <tt>rcu_dynticks</tt> structure corresponding to this | ||
| 894 | CPU. | ||
| 895 | Recall that a single per-CPU instance of the <tt>rcu_dynticks</tt> | ||
| 896 | structure is shared among all flavors of RCU. | ||
| 897 | These first four fields are constant and therefore require not | ||
| 898 | synchronization. | ||
| 899 | |||
| 900 | </p><p>The <tt>->grpmask</tt> field indicates the bit in | ||
| 901 | the <tt>->mynode->qsmask</tt> corresponding to this | ||
| 902 | <tt>rcu_data</tt> structure, and is also used when propagating | ||
| 903 | quiescent states. | ||
| 904 | The <tt>->beenonline</tt> flag is set whenever the corresponding | ||
| 905 | CPU comes online, which means that the debugfs tracing need not dump | ||
| 906 | out any <tt>rcu_data</tt> structure for which this flag is not set. | ||
| 907 | |||
| 908 | <h5>Quiescent-State and Grace-Period Tracking</h5> | ||
| 909 | |||
| 910 | <p>This portion of the <tt>rcu_data</tt> structure is declared | ||
| 911 | as follows: | ||
| 912 | |||
| 913 | <pre> | ||
| 914 | 1 unsigned long completed; | ||
| 915 | 2 unsigned long gpnum; | ||
| 916 | 3 bool cpu_no_qs; | ||
| 917 | 4 bool core_needs_qs; | ||
| 918 | 5 bool gpwrap; | ||
| 919 | 6 unsigned long rcu_qs_ctr_snap; | ||
| 920 | </pre> | ||
| 921 | |||
| 922 | <p>The <tt>completed</tt> and <tt>gpnum</tt> | ||
| 923 | fields are the counterparts of the fields of the same name | ||
| 924 | in the <tt>rcu_state</tt> and <tt>rcu_node</tt> structures. | ||
| 925 | They may each lag up to one behind their <tt>rcu_node</tt> | ||
| 926 | counterparts, but in <tt>CONFIG_NO_HZ_IDLE</tt> and | ||
| 927 | <tt>CONFIG_NO_HZ_FULL</tt> kernels can lag | ||
| 928 | arbitrarily far behind for CPUs in dyntick-idle mode (but these counters | ||
| 929 | will catch up upon exit from dyntick-idle mode). | ||
| 930 | If a given <tt>rcu_data</tt> structure's <tt>->gpnum</tt> and | ||
| 931 | <tt>->complete</tt> fields are equal, then this <tt>rcu_data</tt> | ||
| 932 | structure believes that RCU is idle. | ||
| 933 | Otherwise, as with the <tt>rcu_state</tt> and <tt>rcu_node</tt> | ||
| 934 | structure, | ||
| 935 | the <tt>->gpnum</tt> field will be one greater than the | ||
| 936 | <tt>->complete</tt> fields, with <tt>->gpnum</tt> | ||
| 937 | indicating which grace period this <tt>rcu_data</tt> believes | ||
| 938 | is still being waited for. | ||
| 939 | |||
| 940 | <table> | ||
| 941 | <tr><th> </th></tr> | ||
| 942 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 943 | <tr><td> | ||
| 944 | All this replication of the grace period numbers can only cause | ||
| 945 | massive confusion. | ||
| 946 | Why not just keep a global pair of counters and be done with it??? | ||
| 947 | </td></tr> | ||
| 948 | <tr><th align="left">Answer:</th></tr> | ||
| 949 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 950 | Because if there was only a single global pair of grace-period | ||
| 951 | numbers, there would need to be a single global lock to allow | ||
| 952 | safely accessing and updating them. | ||
| 953 | And if we are not going to have a single global lock, we need | ||
| 954 | to carefully manage the numbers on a per-node basis. | ||
| 955 | Recall from the answer to a previous Quick Quiz that the consequences | ||
| 956 | of applying a previously sampled quiescent state to the wrong | ||
| 957 | grace period are quite severe. | ||
| 958 | </font></td></tr> | ||
| 959 | <tr><td> </td></tr> | ||
| 960 | </table> | ||
| 961 | |||
| 962 | <p>The <tt>->cpu_no_qs</tt> flag indicates that the | ||
| 963 | CPU has not yet passed through a quiescent state, | ||
| 964 | while the <tt>->core_needs_qs</tt> flag indicates that the | ||
| 965 | RCU core needs a quiescent state from the corresponding CPU. | ||
| 966 | The <tt>->gpwrap</tt> field indicates that the corresponding | ||
| 967 | CPU has remained idle for so long that the <tt>completed</tt> | ||
| 968 | and <tt>gpnum</tt> counters are in danger of overflow, which | ||
| 969 | will cause the CPU to disregard the values of its counters on | ||
| 970 | its next exit from idle. | ||
| 971 | Finally, the <tt>rcu_qs_ctr_snap</tt> field is used to detect | ||
| 972 | cases where a given operation has resulted in a quiescent state | ||
| 973 | for all flavors of RCU, for example, <tt>cond_resched_rcu_qs()</tt>. | ||
| 974 | |||
| 975 | <h5>RCU Callback Handling</h5> | ||
| 976 | |||
| 977 | <p>In the absence of CPU-hotplug events, RCU callbacks are invoked by | ||
| 978 | the same CPU that registered them. | ||
| 979 | This is strictly a cache-locality optimization: callbacks can and | ||
| 980 | do get invoked on CPUs other than the one that registered them. | ||
| 981 | After all, if the CPU that registered a given callback has gone | ||
| 982 | offline before the callback can be invoked, there really is no other | ||
| 983 | choice. | ||
| 984 | |||
| 985 | </p><p>This portion of the <tt>rcu_data</tt> structure is declared | ||
| 986 | as follows: | ||
| 987 | |||
| 988 | <pre> | ||
| 989 | 1 struct rcu_head *nxtlist; | ||
| 990 | 2 struct rcu_head **nxttail[RCU_NEXT_SIZE]; | ||
| 991 | 3 unsigned long nxtcompleted[RCU_NEXT_SIZE]; | ||
| 992 | 4 long qlen_lazy; | ||
| 993 | 5 long qlen; | ||
| 994 | 6 long qlen_last_fqs_check; | ||
| 995 | 7 unsigned long n_force_qs_snap; | ||
| 996 | 8 unsigned long n_cbs_invoked; | ||
| 997 | 9 unsigned long n_cbs_orphaned; | ||
| 998 | 10 unsigned long n_cbs_adopted; | ||
| 999 | 11 long blimit; | ||
| 1000 | </pre> | ||
| 1001 | |||
| 1002 | <p>The <tt>->nxtlist</tt> pointer and the | ||
| 1003 | <tt>->nxttail[]</tt> array form a four-segment list with | ||
| 1004 | older callbacks near the head and newer ones near the tail. | ||
| 1005 | Each segment contains callbacks with the corresponding relationship | ||
| 1006 | to the current grace period. | ||
| 1007 | The pointer out of the end of each of the four segments is referenced | ||
| 1008 | by the element of the <tt>->nxttail[]</tt> array indexed by | ||
| 1009 | <tt>RCU_DONE_TAIL</tt> (for callbacks handled by a prior grace period), | ||
| 1010 | <tt>RCU_WAIT_TAIL</tt> (for callbacks waiting on the current grace period), | ||
| 1011 | <tt>RCU_NEXT_READY_TAIL</tt> (for callbacks that will wait on the next | ||
| 1012 | grace period), and | ||
| 1013 | <tt>RCU_NEXT_TAIL</tt> (for callbacks that are not yet associated | ||
| 1014 | with a specific grace period) | ||
| 1015 | respectively, as shown in the following figure. | ||
| 1016 | |||
| 1017 | </p><p><img src="nxtlist.svg" alt="nxtlist.svg" width="40%"> | ||
| 1018 | |||
| 1019 | </p><p>In this figure, the <tt>->nxtlist</tt> pointer references the | ||
| 1020 | first | ||
| 1021 | RCU callback in the list. | ||
| 1022 | The <tt>->nxttail[RCU_DONE_TAIL]</tt> array element references | ||
| 1023 | the <tt>->nxtlist</tt> pointer itself, indicating that none | ||
| 1024 | of the callbacks is ready to invoke. | ||
| 1025 | The <tt>->nxttail[RCU_WAIT_TAIL]</tt> array element references callback | ||
| 1026 | CB 2's <tt>->next</tt> pointer, which indicates that | ||
| 1027 | CB 1 and CB 2 are both waiting on the current grace period. | ||
| 1028 | The <tt>->nxttail[RCU_NEXT_READY_TAIL]</tt> array element | ||
| 1029 | references the same RCU callback that <tt>->nxttail[RCU_WAIT_TAIL]</tt> | ||
| 1030 | does, which indicates that there are no callbacks waiting on the next | ||
| 1031 | RCU grace period. | ||
| 1032 | The <tt>->nxttail[RCU_NEXT_TAIL]</tt> array element references | ||
| 1033 | CB 4's <tt>->next</tt> pointer, indicating that all the | ||
| 1034 | remaining RCU callbacks have not yet been assigned to an RCU grace | ||
| 1035 | period. | ||
| 1036 | Note that the <tt>->nxttail[RCU_NEXT_TAIL]</tt> array element | ||
| 1037 | always references the last RCU callback's <tt>->next</tt> pointer | ||
| 1038 | unless the callback list is empty, in which case it references | ||
| 1039 | the <tt>->nxtlist</tt> pointer. | ||
| 1040 | |||
| 1041 | </p><p>CPUs advance their callbacks from the | ||
| 1042 | <tt>RCU_NEXT_TAIL</tt> to the <tt>RCU_NEXT_READY_TAIL</tt> to the | ||
| 1043 | <tt>RCU_WAIT_TAIL</tt> to the <tt>RCU_DONE_TAIL</tt> list segments | ||
| 1044 | as grace periods advance. | ||
| 1045 | The CPU advances the callbacks in its <tt>rcu_data</tt> structure | ||
| 1046 | whenever it notices that another RCU grace period has completed. | ||
| 1047 | The CPU detects the completion of an RCU grace period by noticing | ||
| 1048 | that the value of its <tt>rcu_data</tt> structure's | ||
| 1049 | <tt>->completed</tt> field differs from that of its leaf | ||
| 1050 | <tt>rcu_node</tt> structure. | ||
| 1051 | Recall that each <tt>rcu_node</tt> structure's | ||
| 1052 | <tt>->completed</tt> field is updated at the end of each | ||
| 1053 | grace period. | ||
| 1054 | |||
| 1055 | </p><p>The <tt>->nxtcompleted[]</tt> array records grace-period | ||
| 1056 | numbers corresponding to the list segments. | ||
| 1057 | This allows CPUs that go idle for extended periods to determine | ||
| 1058 | which of their callbacks are ready to be invoked after reawakening. | ||
| 1059 | |||
| 1060 | </p><p>The <tt>->qlen</tt> counter contains the number of | ||
| 1061 | callbacks in <tt>->nxtlist</tt>, and the | ||
| 1062 | <tt>->qlen_lazy</tt> contains the number of those callbacks that | ||
| 1063 | are known to only free memory, and whose invocation can therefore | ||
| 1064 | be safely deferred. | ||
| 1065 | The <tt>->qlen_last_fqs_check</tt> and | ||
| 1066 | <tt>->n_force_qs_snap</tt> coordinate the forcing of quiescent | ||
| 1067 | states from <tt>call_rcu()</tt> and friends when callback | ||
| 1068 | lists grow excessively long. | ||
| 1069 | |||
| 1070 | </p><p>The <tt>->n_cbs_invoked</tt>, | ||
| 1071 | <tt>->n_cbs_orphaned</tt>, and <tt>->n_cbs_adopted</tt> | ||
| 1072 | fields count the number of callbacks invoked, | ||
| 1073 | sent to other CPUs when this CPU goes offline, | ||
| 1074 | and received from other CPUs when those other CPUs go offline. | ||
| 1075 | Finally, the <tt>->blimit</tt> counter is the maximum number of | ||
| 1076 | RCU callbacks that may be invoked at a given time. | ||
| 1077 | |||
| 1078 | <h5>Dyntick-Idle Handling</h5> | ||
| 1079 | |||
| 1080 | <p>This portion of the <tt>rcu_data</tt> structure is declared | ||
| 1081 | as follows: | ||
| 1082 | |||
| 1083 | <pre> | ||
| 1084 | 1 int dynticks_snap; | ||
| 1085 | 2 unsigned long dynticks_fqs; | ||
| 1086 | </pre> | ||
| 1087 | |||
| 1088 | The <tt>->dynticks_snap</tt> field is used to take a snapshot | ||
| 1089 | of the corresponding CPU's dyntick-idle state when forcing | ||
| 1090 | quiescent states, and is therefore accessed from other CPUs. | ||
| 1091 | Finally, the <tt>->dynticks_fqs</tt> field is used to | ||
| 1092 | count the number of times this CPU is determined to be in | ||
| 1093 | dyntick-idle state, and is used for tracing and debugging purposes. | ||
| 1094 | |||
| 1095 | <h3><a name="The rcu_dynticks Structure"> | ||
| 1096 | The <tt>rcu_dynticks</tt> Structure</a></h3> | ||
| 1097 | |||
| 1098 | <p>The <tt>rcu_dynticks</tt> maintains the per-CPU dyntick-idle state | ||
| 1099 | for the corresponding CPU. | ||
| 1100 | Unlike the other structures, <tt>rcu_dynticks</tt> is not | ||
| 1101 | replicated over the different flavors of RCU. | ||
| 1102 | The fields in this structure may be accessed only from the corresponding | ||
| 1103 | CPU (and from tracing) unless otherwise stated. | ||
| 1104 | Its fields are as follows: | ||
| 1105 | |||
| 1106 | <pre> | ||
| 1107 | 1 int dynticks_nesting; | ||
| 1108 | 2 int dynticks_nmi_nesting; | ||
| 1109 | 3 atomic_t dynticks; | ||
| 1110 | </pre> | ||
| 1111 | |||
| 1112 | <p>The <tt>->dynticks_nesting</tt> field counts the | ||
| 1113 | nesting depth of normal interrupts. | ||
| 1114 | In addition, this counter is incremented when exiting dyntick-idle | ||
| 1115 | mode and decremented when entering it. | ||
| 1116 | This counter can therefore be thought of as counting the number | ||
| 1117 | of reasons why this CPU cannot be permitted to enter dyntick-idle | ||
| 1118 | mode, aside from non-maskable interrupts (NMIs). | ||
| 1119 | NMIs are counted by the <tt>->dynticks_nmi_nesting</tt> | ||
| 1120 | field, except that NMIs that interrupt non-dyntick-idle execution | ||
| 1121 | are not counted. | ||
| 1122 | |||
| 1123 | </p><p>Finally, the <tt>->dynticks</tt> field counts the corresponding | ||
| 1124 | CPU's transitions to and from dyntick-idle mode, so that this counter | ||
| 1125 | has an even value when the CPU is in dyntick-idle mode and an odd | ||
| 1126 | value otherwise. | ||
| 1127 | |||
| 1128 | <table> | ||
| 1129 | <tr><th> </th></tr> | ||
| 1130 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 1131 | <tr><td> | ||
| 1132 | Why not just count all NMIs? | ||
| 1133 | Wouldn't that be simpler and less error prone? | ||
| 1134 | </td></tr> | ||
| 1135 | <tr><th align="left">Answer:</th></tr> | ||
| 1136 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 1137 | It seems simpler only until you think hard about how to go about | ||
| 1138 | updating the <tt>rcu_dynticks</tt> structure's | ||
| 1139 | <tt>->dynticks</tt> field. | ||
| 1140 | </font></td></tr> | ||
| 1141 | <tr><td> </td></tr> | ||
| 1142 | </table> | ||
| 1143 | |||
| 1144 | <p>Additional fields are present for some special-purpose | ||
| 1145 | builds, and are discussed separately. | ||
| 1146 | |||
| 1147 | <h3><a name="The rcu_head Structure"> | ||
| 1148 | The <tt>rcu_head</tt> Structure</a></h3> | ||
| 1149 | |||
| 1150 | <p>Each <tt>rcu_head</tt> structure represents an RCU callback. | ||
| 1151 | These structures are normally embedded within RCU-protected data | ||
| 1152 | structures whose algorithms use asynchronous grace periods. | ||
| 1153 | In contrast, when using algorithms that block waiting for RCU grace periods, | ||
| 1154 | RCU users need not provide <tt>rcu_head</tt> structures. | ||
| 1155 | |||
| 1156 | </p><p>The <tt>rcu_head</tt> structure has fields as follows: | ||
| 1157 | |||
| 1158 | <pre> | ||
| 1159 | 1 struct rcu_head *next; | ||
| 1160 | 2 void (*func)(struct rcu_head *head); | ||
| 1161 | </pre> | ||
| 1162 | |||
| 1163 | <p>The <tt>->next</tt> field is used | ||
| 1164 | to link the <tt>rcu_head</tt> structures together in the | ||
| 1165 | lists within the <tt>rcu_data</tt> structures. | ||
| 1166 | The <tt>->func</tt> field is a pointer to the function | ||
| 1167 | to be called when the callback is ready to be invoked, and | ||
| 1168 | this function is passed a pointer to the <tt>rcu_head</tt> | ||
| 1169 | structure. | ||
| 1170 | However, <tt>kfree_rcu()</tt> uses the <tt>->func</tt> | ||
| 1171 | field to record the offset of the <tt>rcu_head</tt> | ||
| 1172 | structure within the enclosing RCU-protected data structure. | ||
| 1173 | |||
| 1174 | </p><p>Both of these fields are used internally by RCU. | ||
| 1175 | From the viewpoint of RCU users, this structure is an | ||
| 1176 | opaque “cookie”. | ||
| 1177 | |||
| 1178 | <table> | ||
| 1179 | <tr><th> </th></tr> | ||
| 1180 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 1181 | <tr><td> | ||
| 1182 | Given that the callback function <tt>->func</tt> | ||
| 1183 | is passed a pointer to the <tt>rcu_head</tt> structure, | ||
| 1184 | how is that function supposed to find the beginning of the | ||
| 1185 | enclosing RCU-protected data structure? | ||
| 1186 | </td></tr> | ||
| 1187 | <tr><th align="left">Answer:</th></tr> | ||
| 1188 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 1189 | In actual practice, there is a separate callback function per | ||
| 1190 | type of RCU-protected data structure. | ||
| 1191 | The callback function can therefore use the <tt>container_of()</tt> | ||
| 1192 | macro in the Linux kernel (or other pointer-manipulation facilities | ||
| 1193 | in other software environments) to find the beginning of the | ||
| 1194 | enclosing structure. | ||
| 1195 | </font></td></tr> | ||
| 1196 | <tr><td> </td></tr> | ||
| 1197 | </table> | ||
| 1198 | |||
| 1199 | <h3><a name="RCU-Specific Fields in the task_struct Structure"> | ||
| 1200 | RCU-Specific Fields in the <tt>task_struct</tt> Structure</a></h3> | ||
| 1201 | |||
| 1202 | <p>The <tt>CONFIG_PREEMPT_RCU</tt> implementation uses some | ||
| 1203 | additional fields in the <tt>task_struct</tt> structure: | ||
| 1204 | |||
| 1205 | <pre> | ||
| 1206 | 1 #ifdef CONFIG_PREEMPT_RCU | ||
| 1207 | 2 int rcu_read_lock_nesting; | ||
| 1208 | 3 union rcu_special rcu_read_unlock_special; | ||
| 1209 | 4 struct list_head rcu_node_entry; | ||
| 1210 | 5 struct rcu_node *rcu_blocked_node; | ||
| 1211 | 6 #endif /* #ifdef CONFIG_PREEMPT_RCU */ | ||
| 1212 | 7 #ifdef CONFIG_TASKS_RCU | ||
| 1213 | 8 unsigned long rcu_tasks_nvcsw; | ||
| 1214 | 9 bool rcu_tasks_holdout; | ||
| 1215 | 10 struct list_head rcu_tasks_holdout_list; | ||
| 1216 | 11 int rcu_tasks_idle_cpu; | ||
| 1217 | 12 #endif /* #ifdef CONFIG_TASKS_RCU */ | ||
| 1218 | </pre> | ||
| 1219 | |||
| 1220 | <p>The <tt>->rcu_read_lock_nesting</tt> field records the | ||
| 1221 | nesting level for RCU read-side critical sections, and | ||
| 1222 | the <tt>->rcu_read_unlock_special</tt> field is a bitmask | ||
| 1223 | that records special conditions that require <tt>rcu_read_unlock()</tt> | ||
| 1224 | to do additional work. | ||
| 1225 | The <tt>->rcu_node_entry</tt> field is used to form lists of | ||
| 1226 | tasks that have blocked within preemptible-RCU read-side critical | ||
| 1227 | sections and the <tt>->rcu_blocked_node</tt> field references | ||
| 1228 | the <tt>rcu_node</tt> structure whose list this task is a member of, | ||
| 1229 | or <tt>NULL</tt> if it is not blocked within a preemptible-RCU | ||
| 1230 | read-side critical section. | ||
| 1231 | |||
| 1232 | <p>The <tt>->rcu_tasks_nvcsw</tt> field tracks the number of | ||
| 1233 | voluntary context switches that this task had undergone at the | ||
| 1234 | beginning of the current tasks-RCU grace period, | ||
| 1235 | <tt>->rcu_tasks_holdout</tt> is set if the current tasks-RCU | ||
| 1236 | grace period is waiting on this task, <tt>->rcu_tasks_holdout_list</tt> | ||
| 1237 | is a list element enqueuing this task on the holdout list, | ||
| 1238 | and <tt>->rcu_tasks_idle_cpu</tt> tracks which CPU this | ||
| 1239 | idle task is running, but only if the task is currently running, | ||
| 1240 | that is, if the CPU is currently idle. | ||
| 1241 | |||
| 1242 | <h3><a name="Accessor Functions"> | ||
| 1243 | Accessor Functions</a></h3> | ||
| 1244 | |||
| 1245 | <p>The following listing shows the | ||
| 1246 | <tt>rcu_get_root()</tt>, <tt>rcu_for_each_node_breadth_first</tt>, | ||
| 1247 | <tt>rcu_for_each_nonleaf_node_breadth_first()</tt>, and | ||
| 1248 | <tt>rcu_for_each_leaf_node()</tt> function and macros: | ||
| 1249 | |||
| 1250 | <pre> | ||
| 1251 | 1 static struct rcu_node *rcu_get_root(struct rcu_state *rsp) | ||
| 1252 | 2 { | ||
| 1253 | 3 return &rsp->node[0]; | ||
| 1254 | 4 } | ||
| 1255 | 5 | ||
| 1256 | 6 #define rcu_for_each_node_breadth_first(rsp, rnp) \ | ||
| 1257 | 7 for ((rnp) = &(rsp)->node[0]; \ | ||
| 1258 | 8 (rnp) < &(rsp)->node[NUM_RCU_NODES]; (rnp)++) | ||
| 1259 | 9 | ||
| 1260 | 10 #define rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) \ | ||
| 1261 | 11 for ((rnp) = &(rsp)->node[0]; \ | ||
| 1262 | 12 (rnp) < (rsp)->level[NUM_RCU_LVLS - 1]; (rnp)++) | ||
| 1263 | 13 | ||
| 1264 | 14 #define rcu_for_each_leaf_node(rsp, rnp) \ | ||
| 1265 | 15 for ((rnp) = (rsp)->level[NUM_RCU_LVLS - 1]; \ | ||
| 1266 | 16 (rnp) < &(rsp)->node[NUM_RCU_NODES]; (rnp)++) | ||
| 1267 | </pre> | ||
| 1268 | |||
| 1269 | <p>The <tt>rcu_get_root()</tt> simply returns a pointer to the | ||
| 1270 | first element of the specified <tt>rcu_state</tt> structure's | ||
| 1271 | <tt>->node[]</tt> array, which is the root <tt>rcu_node</tt> | ||
| 1272 | structure. | ||
| 1273 | |||
| 1274 | </p><p>As noted earlier, the <tt>rcu_for_each_node_breadth_first()</tt> | ||
| 1275 | macro takes advantage of the layout of the <tt>rcu_node</tt> | ||
| 1276 | structures in the <tt>rcu_state</tt> structure's | ||
| 1277 | <tt>->node[]</tt> array, performing a breadth-first traversal by | ||
| 1278 | simply traversing the array in order. | ||
| 1279 | The <tt>rcu_for_each_nonleaf_node_breadth_first()</tt> macro operates | ||
| 1280 | similarly, but traverses only the first part of the array, thus excluding | ||
| 1281 | the leaf <tt>rcu_node</tt> structures. | ||
| 1282 | Finally, the <tt>rcu_for_each_leaf_node()</tt> macro traverses only | ||
| 1283 | the last part of the array, thus traversing only the leaf | ||
| 1284 | <tt>rcu_node</tt> structures. | ||
| 1285 | |||
| 1286 | <table> | ||
| 1287 | <tr><th> </th></tr> | ||
| 1288 | <tr><th align="left">Quick Quiz:</th></tr> | ||
| 1289 | <tr><td> | ||
| 1290 | What do <tt>rcu_for_each_nonleaf_node_breadth_first()</tt> and | ||
| 1291 | <tt>rcu_for_each_leaf_node()</tt> do if the <tt>rcu_node</tt> tree | ||
| 1292 | contains only a single node? | ||
| 1293 | </td></tr> | ||
| 1294 | <tr><th align="left">Answer:</th></tr> | ||
| 1295 | <tr><td bgcolor="#ffffff"><font color="ffffff"> | ||
| 1296 | In the single-node case, | ||
| 1297 | <tt>rcu_for_each_nonleaf_node_breadth_first()</tt> is a no-op | ||
| 1298 | and <tt>rcu_for_each_leaf_node()</tt> traverses the single node. | ||
| 1299 | </font></td></tr> | ||
| 1300 | <tr><td> </td></tr> | ||
| 1301 | </table> | ||
| 1302 | |||
| 1303 | <h3><a name="Summary"> | ||
| 1304 | Summary</a></h3> | ||
| 1305 | |||
| 1306 | So each flavor of RCU is represented by an <tt>rcu_state</tt> structure, | ||
| 1307 | which contains a combining tree of <tt>rcu_node</tt> and | ||
| 1308 | <tt>rcu_data</tt> structures. | ||
| 1309 | Finally, in <tt>CONFIG_NO_HZ_IDLE</tt> kernels, each CPU's dyntick-idle | ||
| 1310 | state is tracked by an <tt>rcu_dynticks</tt> structure. | ||
| 1311 | |||
| 1312 | If you made it this far, you are well prepared to read the code | ||
| 1313 | walkthroughs in the other articles in this series. | ||
| 1314 | |||
| 1315 | <h3><a name="Acknowledgments"> | ||
| 1316 | Acknowledgments</a></h3> | ||
| 1317 | |||
| 1318 | I owe thanks to Cyrill Gorcunov, Mathieu Desnoyers, Dhaval Giani, Paul | ||
| 1319 | Turner, Abhishek Srivastava, Matt Kowalczyk, and Serge Hallyn | ||
| 1320 | for helping me get this document into a more human-readable state. | ||
| 1321 | |||
| 1322 | <h3><a name="Legal Statement"> | ||
| 1323 | Legal Statement</a></h3> | ||
| 1324 | |||
| 1325 | <p>This work represents the view of the author and does not necessarily | ||
| 1326 | represent the view of IBM. | ||
| 1327 | |||
| 1328 | </p><p>Linux is a registered trademark of Linus Torvalds. | ||
| 1329 | |||
| 1330 | </p><p>Other company, product, and service names may be trademarks or | ||
| 1331 | service marks of others. | ||
| 1332 | |||
| 1333 | </body></html> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/HugeTreeClassicRCU.svg b/Documentation/RCU/Design/Data-Structures/HugeTreeClassicRCU.svg new file mode 100644 index 000000000000..2bf12b468206 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/HugeTreeClassicRCU.svg | |||
| @@ -0,0 +1,939 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:37:22 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 3.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="15.1in" | ||
| 17 | height="11.2in" | ||
| 18 | viewBox="-66 -66 18087 13407" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="HugeTreeClassicRCU.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata224"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs222"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3982" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="1134" | ||
| 61 | inkscape:window-height="789" | ||
| 62 | id="namedview220" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="0.60515873" | ||
| 65 | inkscape:cx="679.5" | ||
| 66 | inkscape:cy="504" | ||
| 67 | inkscape:window-x="786" | ||
| 68 | inkscape:window-y="24" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="450" | ||
| 77 | y="0" | ||
| 78 | width="17100" | ||
| 79 | height="8325" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="11025" | ||
| 86 | y="3600" | ||
| 87 | width="2700" | ||
| 88 | height="1350" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="4275" | ||
| 95 | y="3600" | ||
| 96 | width="2700" | ||
| 97 | height="1350" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="5400" | ||
| 104 | y="6300" | ||
| 105 | width="2700" | ||
| 106 | height="1350" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Line: box --> | ||
| 111 | <rect | ||
| 112 | x="9900" | ||
| 113 | y="6300" | ||
| 114 | width="2700" | ||
| 115 | height="1350" | ||
| 116 | rx="0" | ||
| 117 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 118 | id="rect14" /> | ||
| 119 | <!-- Line: box --> | ||
| 120 | <rect | ||
| 121 | x="14400" | ||
| 122 | y="6300" | ||
| 123 | width="2700" | ||
| 124 | height="1350" | ||
| 125 | rx="0" | ||
| 126 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 127 | id="rect16" /> | ||
| 128 | <!-- Line: box --> | ||
| 129 | <rect | ||
| 130 | x="900" | ||
| 131 | y="6300" | ||
| 132 | width="2700" | ||
| 133 | height="1350" | ||
| 134 | rx="0" | ||
| 135 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 136 | id="rect18" /> | ||
| 137 | <!-- Line: box --> | ||
| 138 | <rect | ||
| 139 | x="7650" | ||
| 140 | y="900" | ||
| 141 | width="2700" | ||
| 142 | height="1350" | ||
| 143 | rx="0" | ||
| 144 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 145 | id="rect20" /> | ||
| 146 | <!-- Line --> | ||
| 147 | <polyline | ||
| 148 | points="3150,9225 3150,7746 " | ||
| 149 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 150 | id="polyline22" /> | ||
| 151 | <!-- Arrowhead on XXXpoint 3150 9225 - 3150 7560--> | ||
| 152 | <!-- Circle --> | ||
| 153 | <circle | ||
| 154 | cx="8550" | ||
| 155 | cy="4275" | ||
| 156 | r="114" | ||
| 157 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 158 | id="circle26" /> | ||
| 159 | <!-- Circle --> | ||
| 160 | <circle | ||
| 161 | cx="9000" | ||
| 162 | cy="4275" | ||
| 163 | r="114" | ||
| 164 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 165 | id="circle28" /> | ||
| 166 | <!-- Circle --> | ||
| 167 | <circle | ||
| 168 | cx="9450" | ||
| 169 | cy="4275" | ||
| 170 | r="114" | ||
| 171 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 172 | id="circle30" /> | ||
| 173 | <!-- Line --> | ||
| 174 | <polyline | ||
| 175 | points="6750,6300 8250,5010 " | ||
| 176 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 177 | id="polyline32" /> | ||
| 178 | <!-- Arrowhead on XXXpoint 6750 6300 - 8391 4890--> | ||
| 179 | <!-- Line --> | ||
| 180 | <polyline | ||
| 181 | points="11250,6300 9747,5010 " | ||
| 182 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 183 | id="polyline36" /> | ||
| 184 | <!-- Arrowhead on XXXpoint 11250 6300 - 9606 4890--> | ||
| 185 | <!-- Circle --> | ||
| 186 | <circle | ||
| 187 | cx="13950" | ||
| 188 | cy="6975" | ||
| 189 | r="114" | ||
| 190 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 191 | id="circle40" /> | ||
| 192 | <!-- Circle --> | ||
| 193 | <circle | ||
| 194 | cx="13500" | ||
| 195 | cy="6975" | ||
| 196 | r="114" | ||
| 197 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 198 | id="circle42" /> | ||
| 199 | <!-- Circle --> | ||
| 200 | <circle | ||
| 201 | cx="13050" | ||
| 202 | cy="6975" | ||
| 203 | r="114" | ||
| 204 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 205 | id="circle44" /> | ||
| 206 | <!-- Circle --> | ||
| 207 | <circle | ||
| 208 | cx="9450" | ||
| 209 | cy="6975" | ||
| 210 | r="114" | ||
| 211 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 212 | id="circle46" /> | ||
| 213 | <!-- Circle --> | ||
| 214 | <circle | ||
| 215 | cx="9000" | ||
| 216 | cy="6975" | ||
| 217 | r="114" | ||
| 218 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 219 | id="circle48" /> | ||
| 220 | <!-- Circle --> | ||
| 221 | <circle | ||
| 222 | cx="8550" | ||
| 223 | cy="6975" | ||
| 224 | r="114" | ||
| 225 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 226 | id="circle50" /> | ||
| 227 | <!-- Circle --> | ||
| 228 | <circle | ||
| 229 | cx="4950" | ||
| 230 | cy="6975" | ||
| 231 | r="114" | ||
| 232 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 233 | id="circle52" /> | ||
| 234 | <!-- Circle --> | ||
| 235 | <circle | ||
| 236 | cx="4500" | ||
| 237 | cy="6975" | ||
| 238 | r="114" | ||
| 239 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 240 | id="circle54" /> | ||
| 241 | <!-- Circle --> | ||
| 242 | <circle | ||
| 243 | cx="4050" | ||
| 244 | cy="6975" | ||
| 245 | r="114" | ||
| 246 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 247 | id="circle56" /> | ||
| 248 | <!-- Circle --> | ||
| 249 | <circle | ||
| 250 | cx="1800" | ||
| 251 | cy="8775" | ||
| 252 | r="114" | ||
| 253 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 254 | id="circle58" /> | ||
| 255 | <!-- Circle --> | ||
| 256 | <circle | ||
| 257 | cx="2250" | ||
| 258 | cy="8775" | ||
| 259 | r="114" | ||
| 260 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 261 | id="circle60" /> | ||
| 262 | <!-- Circle --> | ||
| 263 | <circle | ||
| 264 | cx="2700" | ||
| 265 | cy="8775" | ||
| 266 | r="114" | ||
| 267 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 268 | id="circle62" /> | ||
| 269 | <!-- Circle --> | ||
| 270 | <circle | ||
| 271 | cx="15300" | ||
| 272 | cy="8775" | ||
| 273 | r="114" | ||
| 274 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 275 | id="circle64" /> | ||
| 276 | <!-- Circle --> | ||
| 277 | <circle | ||
| 278 | cx="15750" | ||
| 279 | cy="8775" | ||
| 280 | r="114" | ||
| 281 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 282 | id="circle66" /> | ||
| 283 | <!-- Circle --> | ||
| 284 | <circle | ||
| 285 | cx="16200" | ||
| 286 | cy="8775" | ||
| 287 | r="114" | ||
| 288 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 289 | id="circle68" /> | ||
| 290 | <!-- Circle --> | ||
| 291 | <circle | ||
| 292 | cx="10800" | ||
| 293 | cy="8775" | ||
| 294 | r="114" | ||
| 295 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 296 | id="circle70" /> | ||
| 297 | <!-- Circle --> | ||
| 298 | <circle | ||
| 299 | cx="11250" | ||
| 300 | cy="8775" | ||
| 301 | r="114" | ||
| 302 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 303 | id="circle72" /> | ||
| 304 | <!-- Circle --> | ||
| 305 | <circle | ||
| 306 | cx="11700" | ||
| 307 | cy="8775" | ||
| 308 | r="114" | ||
| 309 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 310 | id="circle74" /> | ||
| 311 | <!-- Circle --> | ||
| 312 | <circle | ||
| 313 | cx="6300" | ||
| 314 | cy="8775" | ||
| 315 | r="114" | ||
| 316 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 317 | id="circle76" /> | ||
| 318 | <!-- Circle --> | ||
| 319 | <circle | ||
| 320 | cx="6750" | ||
| 321 | cy="8775" | ||
| 322 | r="114" | ||
| 323 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 324 | id="circle78" /> | ||
| 325 | <!-- Circle --> | ||
| 326 | <circle | ||
| 327 | cx="7200" | ||
| 328 | cy="8775" | ||
| 329 | r="114" | ||
| 330 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 331 | id="circle80" /> | ||
| 332 | <!-- Line: box --> | ||
| 333 | <rect | ||
| 334 | x="0" | ||
| 335 | y="11475" | ||
| 336 | width="2700" | ||
| 337 | height="1800" | ||
| 338 | rx="0" | ||
| 339 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 340 | id="rect82" /> | ||
| 341 | <!-- Line: box --> | ||
| 342 | <rect | ||
| 343 | x="1800" | ||
| 344 | y="9225" | ||
| 345 | width="2700" | ||
| 346 | height="1800" | ||
| 347 | rx="0" | ||
| 348 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 349 | id="rect84" /> | ||
| 350 | <!-- Line: box --> | ||
| 351 | <rect | ||
| 352 | x="4500" | ||
| 353 | y="11475" | ||
| 354 | width="2700" | ||
| 355 | height="1800" | ||
| 356 | rx="0" | ||
| 357 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 358 | id="rect86" /> | ||
| 359 | <!-- Line: box --> | ||
| 360 | <rect | ||
| 361 | x="6300" | ||
| 362 | y="9270" | ||
| 363 | width="2700" | ||
| 364 | height="1800" | ||
| 365 | rx="0" | ||
| 366 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 367 | id="rect88" /> | ||
| 368 | <!-- Line: box --> | ||
| 369 | <rect | ||
| 370 | x="8955" | ||
| 371 | y="11475" | ||
| 372 | width="2700" | ||
| 373 | height="1800" | ||
| 374 | rx="0" | ||
| 375 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 376 | id="rect90" /> | ||
| 377 | <!-- Line: box --> | ||
| 378 | <rect | ||
| 379 | x="10755" | ||
| 380 | y="9270" | ||
| 381 | width="2700" | ||
| 382 | height="1800" | ||
| 383 | rx="0" | ||
| 384 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 385 | id="rect92" /> | ||
| 386 | <!-- Line: box --> | ||
| 387 | <rect | ||
| 388 | x="13455" | ||
| 389 | y="11475" | ||
| 390 | width="2700" | ||
| 391 | height="1800" | ||
| 392 | rx="0" | ||
| 393 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 394 | id="rect94" /> | ||
| 395 | <!-- Line: box --> | ||
| 396 | <rect | ||
| 397 | x="15255" | ||
| 398 | y="9270" | ||
| 399 | width="2700" | ||
| 400 | height="1800" | ||
| 401 | rx="0" | ||
| 402 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 403 | id="rect96" /> | ||
| 404 | <!-- Line --> | ||
| 405 | <polyline | ||
| 406 | points="11700,3600 10197,2310 " | ||
| 407 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 408 | id="polyline98" /> | ||
| 409 | <!-- Arrowhead on XXXpoint 11700 3600 - 10056 2190--> | ||
| 410 | <!-- Line --> | ||
| 411 | <polyline | ||
| 412 | points="6300,3600 7800,2310 " | ||
| 413 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 414 | id="polyline102" /> | ||
| 415 | <!-- Arrowhead on XXXpoint 6300 3600 - 7941 2190--> | ||
| 416 | <!-- Line --> | ||
| 417 | <polyline | ||
| 418 | points="3150,6300 4650,5010 " | ||
| 419 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 420 | id="polyline106" /> | ||
| 421 | <!-- Arrowhead on XXXpoint 3150 6300 - 4791 4890--> | ||
| 422 | <!-- Line --> | ||
| 423 | <polyline | ||
| 424 | points="14850,6300 13347,5010 " | ||
| 425 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 426 | id="polyline110" /> | ||
| 427 | <!-- Arrowhead on XXXpoint 14850 6300 - 13206 4890--> | ||
| 428 | <!-- Line --> | ||
| 429 | <polyline | ||
| 430 | points="1350,11475 1350,7746 " | ||
| 431 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 432 | id="polyline114" /> | ||
| 433 | <!-- Arrowhead on XXXpoint 1350 11475 - 1350 7560--> | ||
| 434 | <!-- Line --> | ||
| 435 | <polyline | ||
| 436 | points="16650,9225 16650,7746 " | ||
| 437 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 438 | id="polyline118" /> | ||
| 439 | <!-- Arrowhead on XXXpoint 16650 9225 - 16650 7560--> | ||
| 440 | <!-- Line --> | ||
| 441 | <polyline | ||
| 442 | points="14850,11475 14850,7746 " | ||
| 443 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 444 | id="polyline122" /> | ||
| 445 | <!-- Arrowhead on XXXpoint 14850 11475 - 14850 7560--> | ||
| 446 | <!-- Line --> | ||
| 447 | <polyline | ||
| 448 | points="12150,9225 12150,7746 " | ||
| 449 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 450 | id="polyline126" /> | ||
| 451 | <!-- Arrowhead on XXXpoint 12150 9225 - 12150 7560--> | ||
| 452 | <!-- Line --> | ||
| 453 | <polyline | ||
| 454 | points="10350,11475 10350,7746 " | ||
| 455 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 456 | id="polyline130" /> | ||
| 457 | <!-- Arrowhead on XXXpoint 10350 11475 - 10350 7560--> | ||
| 458 | <!-- Line --> | ||
| 459 | <polyline | ||
| 460 | points="7650,9225 7650,7746 " | ||
| 461 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 462 | id="polyline134" /> | ||
| 463 | <!-- Arrowhead on XXXpoint 7650 9225 - 7650 7560--> | ||
| 464 | <!-- Line --> | ||
| 465 | <polyline | ||
| 466 | points="5850,11475 5850,7746 " | ||
| 467 | style="stroke:#00d1d1;stroke-width:44.99790066;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 468 | id="polyline138" /> | ||
| 469 | <!-- Arrowhead on XXXpoint 5850 11475 - 5850 7560--> | ||
| 470 | <!-- Text --> | ||
| 471 | <text | ||
| 472 | xml:space="preserve" | ||
| 473 | x="12375" | ||
| 474 | y="4500" | ||
| 475 | fill="#000000" | ||
| 476 | font-family="Courier" | ||
| 477 | font-style="normal" | ||
| 478 | font-weight="bold" | ||
| 479 | font-size="288" | ||
| 480 | text-anchor="middle" | ||
| 481 | id="text142">rcu_node</text> | ||
| 482 | <!-- Text --> | ||
| 483 | <text | ||
| 484 | xml:space="preserve" | ||
| 485 | x="12375" | ||
| 486 | y="4050" | ||
| 487 | fill="#000000" | ||
| 488 | font-family="Courier" | ||
| 489 | font-style="normal" | ||
| 490 | font-weight="bold" | ||
| 491 | font-size="288" | ||
| 492 | text-anchor="middle" | ||
| 493 | id="text144">struct</text> | ||
| 494 | <!-- Text --> | ||
| 495 | <text | ||
| 496 | xml:space="preserve" | ||
| 497 | x="5625" | ||
| 498 | y="4050" | ||
| 499 | fill="#000000" | ||
| 500 | font-family="Courier" | ||
| 501 | font-style="normal" | ||
| 502 | font-weight="bold" | ||
| 503 | font-size="288" | ||
| 504 | text-anchor="middle" | ||
| 505 | id="text146">struct</text> | ||
| 506 | <!-- Text --> | ||
| 507 | <text | ||
| 508 | xml:space="preserve" | ||
| 509 | x="5625" | ||
| 510 | y="4500" | ||
| 511 | fill="#000000" | ||
| 512 | font-family="Courier" | ||
| 513 | font-style="normal" | ||
| 514 | font-weight="bold" | ||
| 515 | font-size="288" | ||
| 516 | text-anchor="middle" | ||
| 517 | id="text148">rcu_node</text> | ||
| 518 | <!-- Text --> | ||
| 519 | <text | ||
| 520 | xml:space="preserve" | ||
| 521 | x="6750" | ||
| 522 | y="6750" | ||
| 523 | fill="#000000" | ||
| 524 | font-family="Courier" | ||
| 525 | font-style="normal" | ||
| 526 | font-weight="bold" | ||
| 527 | font-size="288" | ||
| 528 | text-anchor="middle" | ||
| 529 | id="text150">struct</text> | ||
| 530 | <!-- Text --> | ||
| 531 | <text | ||
| 532 | xml:space="preserve" | ||
| 533 | x="6750" | ||
| 534 | y="7200" | ||
| 535 | fill="#000000" | ||
| 536 | font-family="Courier" | ||
| 537 | font-style="normal" | ||
| 538 | font-weight="bold" | ||
| 539 | font-size="288" | ||
| 540 | text-anchor="middle" | ||
| 541 | id="text152">rcu_node</text> | ||
| 542 | <!-- Text --> | ||
| 543 | <text | ||
| 544 | xml:space="preserve" | ||
| 545 | x="11250" | ||
| 546 | y="7200" | ||
| 547 | fill="#000000" | ||
| 548 | font-family="Courier" | ||
| 549 | font-style="normal" | ||
| 550 | font-weight="bold" | ||
| 551 | font-size="288" | ||
| 552 | text-anchor="middle" | ||
| 553 | id="text154">rcu_node</text> | ||
| 554 | <!-- Text --> | ||
| 555 | <text | ||
| 556 | xml:space="preserve" | ||
| 557 | x="11250" | ||
| 558 | y="6750" | ||
| 559 | fill="#000000" | ||
| 560 | font-family="Courier" | ||
| 561 | font-style="normal" | ||
| 562 | font-weight="bold" | ||
| 563 | font-size="288" | ||
| 564 | text-anchor="middle" | ||
| 565 | id="text156">struct</text> | ||
| 566 | <!-- Text --> | ||
| 567 | <text | ||
| 568 | xml:space="preserve" | ||
| 569 | x="15750" | ||
| 570 | y="7200" | ||
| 571 | fill="#000000" | ||
| 572 | font-family="Courier" | ||
| 573 | font-style="normal" | ||
| 574 | font-weight="bold" | ||
| 575 | font-size="288" | ||
| 576 | text-anchor="middle" | ||
| 577 | id="text158">rcu_node</text> | ||
| 578 | <!-- Text --> | ||
| 579 | <text | ||
| 580 | xml:space="preserve" | ||
| 581 | x="15750" | ||
| 582 | y="6750" | ||
| 583 | fill="#000000" | ||
| 584 | font-family="Courier" | ||
| 585 | font-style="normal" | ||
| 586 | font-weight="bold" | ||
| 587 | font-size="288" | ||
| 588 | text-anchor="middle" | ||
| 589 | id="text160">struct</text> | ||
| 590 | <!-- Text --> | ||
| 591 | <text | ||
| 592 | xml:space="preserve" | ||
| 593 | x="2250" | ||
| 594 | y="6750" | ||
| 595 | fill="#000000" | ||
| 596 | font-family="Courier" | ||
| 597 | font-style="normal" | ||
| 598 | font-weight="bold" | ||
| 599 | font-size="288" | ||
| 600 | text-anchor="middle" | ||
| 601 | id="text162">struct</text> | ||
| 602 | <!-- Text --> | ||
| 603 | <text | ||
| 604 | xml:space="preserve" | ||
| 605 | x="2250" | ||
| 606 | y="7200" | ||
| 607 | fill="#000000" | ||
| 608 | font-family="Courier" | ||
| 609 | font-style="normal" | ||
| 610 | font-weight="bold" | ||
| 611 | font-size="288" | ||
| 612 | text-anchor="middle" | ||
| 613 | id="text164">rcu_node</text> | ||
| 614 | <!-- Text --> | ||
| 615 | <text | ||
| 616 | xml:space="preserve" | ||
| 617 | x="1350" | ||
| 618 | y="13050" | ||
| 619 | fill="#000000" | ||
| 620 | font-family="Helvetica" | ||
| 621 | font-style="normal" | ||
| 622 | font-weight="normal" | ||
| 623 | font-size="324" | ||
| 624 | text-anchor="middle" | ||
| 625 | id="text166">CPU 0</text> | ||
| 626 | <!-- Text --> | ||
| 627 | <text | ||
| 628 | xml:space="preserve" | ||
| 629 | x="1350" | ||
| 630 | y="11925" | ||
| 631 | fill="#000000" | ||
| 632 | font-family="Courier" | ||
| 633 | font-style="normal" | ||
| 634 | font-weight="bold" | ||
| 635 | font-size="288" | ||
| 636 | text-anchor="middle" | ||
| 637 | id="text168">struct</text> | ||
| 638 | <!-- Text --> | ||
| 639 | <text | ||
| 640 | xml:space="preserve" | ||
| 641 | x="1350" | ||
| 642 | y="12375" | ||
| 643 | fill="#000000" | ||
| 644 | font-family="Courier" | ||
| 645 | font-style="normal" | ||
| 646 | font-weight="bold" | ||
| 647 | font-size="288" | ||
| 648 | text-anchor="middle" | ||
| 649 | id="text170">rcu_data</text> | ||
| 650 | <!-- Text --> | ||
| 651 | <text | ||
| 652 | xml:space="preserve" | ||
| 653 | x="3150" | ||
| 654 | y="10800" | ||
| 655 | fill="#000000" | ||
| 656 | font-family="Helvetica" | ||
| 657 | font-style="normal" | ||
| 658 | font-weight="normal" | ||
| 659 | font-size="324" | ||
| 660 | text-anchor="middle" | ||
| 661 | id="text172">CPU 15</text> | ||
| 662 | <!-- Text --> | ||
| 663 | <text | ||
| 664 | xml:space="preserve" | ||
| 665 | x="3150" | ||
| 666 | y="9675" | ||
| 667 | fill="#000000" | ||
| 668 | font-family="Courier" | ||
| 669 | font-style="normal" | ||
| 670 | font-weight="bold" | ||
| 671 | font-size="288" | ||
| 672 | text-anchor="middle" | ||
| 673 | id="text174">struct</text> | ||
| 674 | <!-- Text --> | ||
| 675 | <text | ||
| 676 | xml:space="preserve" | ||
| 677 | x="3150" | ||
| 678 | y="10125" | ||
| 679 | fill="#000000" | ||
| 680 | font-family="Courier" | ||
| 681 | font-style="normal" | ||
| 682 | font-weight="bold" | ||
| 683 | font-size="288" | ||
| 684 | text-anchor="middle" | ||
| 685 | id="text176">rcu_data</text> | ||
| 686 | <!-- Text --> | ||
| 687 | <text | ||
| 688 | xml:space="preserve" | ||
| 689 | x="5850" | ||
| 690 | y="11925" | ||
| 691 | fill="#000000" | ||
| 692 | font-family="Courier" | ||
| 693 | font-style="normal" | ||
| 694 | font-weight="bold" | ||
| 695 | font-size="288" | ||
| 696 | text-anchor="middle" | ||
| 697 | id="text178">struct</text> | ||
| 698 | <!-- Text --> | ||
| 699 | <text | ||
| 700 | xml:space="preserve" | ||
| 701 | x="5850" | ||
| 702 | y="12375" | ||
| 703 | fill="#000000" | ||
| 704 | font-family="Courier" | ||
| 705 | font-style="normal" | ||
| 706 | font-weight="bold" | ||
| 707 | font-size="288" | ||
| 708 | text-anchor="middle" | ||
| 709 | id="text180">rcu_data</text> | ||
| 710 | <!-- Text --> | ||
| 711 | <text | ||
| 712 | xml:space="preserve" | ||
| 713 | x="5850" | ||
| 714 | y="13050" | ||
| 715 | fill="#000000" | ||
| 716 | font-family="Helvetica" | ||
| 717 | font-style="normal" | ||
| 718 | font-weight="normal" | ||
| 719 | font-size="324" | ||
| 720 | text-anchor="middle" | ||
| 721 | id="text182">CPU 21823</text> | ||
| 722 | <!-- Text --> | ||
| 723 | <text | ||
| 724 | xml:space="preserve" | ||
| 725 | x="7650" | ||
| 726 | y="10845" | ||
| 727 | fill="#000000" | ||
| 728 | font-family="Helvetica" | ||
| 729 | font-style="normal" | ||
| 730 | font-weight="normal" | ||
| 731 | font-size="324" | ||
| 732 | text-anchor="middle" | ||
| 733 | id="text184">CPU 21839</text> | ||
| 734 | <!-- Text --> | ||
| 735 | <text | ||
| 736 | xml:space="preserve" | ||
| 737 | x="7650" | ||
| 738 | y="10170" | ||
| 739 | fill="#000000" | ||
| 740 | font-family="Courier" | ||
| 741 | font-style="normal" | ||
| 742 | font-weight="bold" | ||
| 743 | font-size="288" | ||
| 744 | text-anchor="middle" | ||
| 745 | id="text186">rcu_data</text> | ||
| 746 | <!-- Text --> | ||
| 747 | <text | ||
| 748 | xml:space="preserve" | ||
| 749 | x="7650" | ||
| 750 | y="9720" | ||
| 751 | fill="#000000" | ||
| 752 | font-family="Courier" | ||
| 753 | font-style="normal" | ||
| 754 | font-weight="bold" | ||
| 755 | font-size="288" | ||
| 756 | text-anchor="middle" | ||
| 757 | id="text188">struct</text> | ||
| 758 | <!-- Text --> | ||
| 759 | <text | ||
| 760 | xml:space="preserve" | ||
| 761 | x="10305" | ||
| 762 | y="11925" | ||
| 763 | fill="#000000" | ||
| 764 | font-family="Courier" | ||
| 765 | font-style="normal" | ||
| 766 | font-weight="bold" | ||
| 767 | font-size="288" | ||
| 768 | text-anchor="middle" | ||
| 769 | id="text190">struct</text> | ||
| 770 | <!-- Text --> | ||
| 771 | <text | ||
| 772 | xml:space="preserve" | ||
| 773 | x="10305" | ||
| 774 | y="12375" | ||
| 775 | fill="#000000" | ||
| 776 | font-family="Courier" | ||
| 777 | font-style="normal" | ||
| 778 | font-weight="bold" | ||
| 779 | font-size="288" | ||
| 780 | text-anchor="middle" | ||
| 781 | id="text192">rcu_data</text> | ||
| 782 | <!-- Text --> | ||
| 783 | <text | ||
| 784 | xml:space="preserve" | ||
| 785 | x="10305" | ||
| 786 | y="13050" | ||
| 787 | fill="#000000" | ||
| 788 | font-family="Helvetica" | ||
| 789 | font-style="normal" | ||
| 790 | font-weight="normal" | ||
| 791 | font-size="324" | ||
| 792 | text-anchor="middle" | ||
| 793 | id="text194">CPU 43679</text> | ||
| 794 | <!-- Text --> | ||
| 795 | <text | ||
| 796 | xml:space="preserve" | ||
| 797 | x="12105" | ||
| 798 | y="10845" | ||
| 799 | fill="#000000" | ||
| 800 | font-family="Helvetica" | ||
| 801 | font-style="normal" | ||
| 802 | font-weight="normal" | ||
| 803 | font-size="324" | ||
| 804 | text-anchor="middle" | ||
| 805 | id="text196">CPU 43695</text> | ||
| 806 | <!-- Text --> | ||
| 807 | <text | ||
| 808 | xml:space="preserve" | ||
| 809 | x="12105" | ||
| 810 | y="10170" | ||
| 811 | fill="#000000" | ||
| 812 | font-family="Courier" | ||
| 813 | font-style="normal" | ||
| 814 | font-weight="bold" | ||
| 815 | font-size="288" | ||
| 816 | text-anchor="middle" | ||
| 817 | id="text198">rcu_data</text> | ||
| 818 | <!-- Text --> | ||
| 819 | <text | ||
| 820 | xml:space="preserve" | ||
| 821 | x="12105" | ||
| 822 | y="9720" | ||
| 823 | fill="#000000" | ||
| 824 | font-family="Courier" | ||
| 825 | font-style="normal" | ||
| 826 | font-weight="bold" | ||
| 827 | font-size="288" | ||
| 828 | text-anchor="middle" | ||
| 829 | id="text200">struct</text> | ||
| 830 | <!-- Text --> | ||
| 831 | <text | ||
| 832 | xml:space="preserve" | ||
| 833 | x="14805" | ||
| 834 | y="11925" | ||
| 835 | fill="#000000" | ||
| 836 | font-family="Courier" | ||
| 837 | font-style="normal" | ||
| 838 | font-weight="bold" | ||
| 839 | font-size="288" | ||
| 840 | text-anchor="middle" | ||
| 841 | id="text202">struct</text> | ||
| 842 | <!-- Text --> | ||
| 843 | <text | ||
| 844 | xml:space="preserve" | ||
| 845 | x="14805" | ||
| 846 | y="12375" | ||
| 847 | fill="#000000" | ||
| 848 | font-family="Courier" | ||
| 849 | font-style="normal" | ||
| 850 | font-weight="bold" | ||
| 851 | font-size="288" | ||
| 852 | text-anchor="middle" | ||
| 853 | id="text204">rcu_data</text> | ||
| 854 | <!-- Text --> | ||
| 855 | <text | ||
| 856 | xml:space="preserve" | ||
| 857 | x="14805" | ||
| 858 | y="13050" | ||
| 859 | fill="#000000" | ||
| 860 | font-family="Helvetica" | ||
| 861 | font-style="normal" | ||
| 862 | font-weight="normal" | ||
| 863 | font-size="324" | ||
| 864 | text-anchor="middle" | ||
| 865 | id="text206">CPU 65519</text> | ||
| 866 | <!-- Text --> | ||
| 867 | <text | ||
| 868 | xml:space="preserve" | ||
| 869 | x="16605" | ||
| 870 | y="10845" | ||
| 871 | fill="#000000" | ||
| 872 | font-family="Helvetica" | ||
| 873 | font-style="normal" | ||
| 874 | font-weight="normal" | ||
| 875 | font-size="324" | ||
| 876 | text-anchor="middle" | ||
| 877 | id="text208">CPU 65535</text> | ||
| 878 | <!-- Text --> | ||
| 879 | <text | ||
| 880 | xml:space="preserve" | ||
| 881 | x="16605" | ||
| 882 | y="10170" | ||
| 883 | fill="#000000" | ||
| 884 | font-family="Courier" | ||
| 885 | font-style="normal" | ||
| 886 | font-weight="bold" | ||
| 887 | font-size="288" | ||
| 888 | text-anchor="middle" | ||
| 889 | id="text210">rcu_data</text> | ||
| 890 | <!-- Text --> | ||
| 891 | <text | ||
| 892 | xml:space="preserve" | ||
| 893 | x="16605" | ||
| 894 | y="9720" | ||
| 895 | fill="#000000" | ||
| 896 | font-family="Courier" | ||
| 897 | font-style="normal" | ||
| 898 | font-weight="bold" | ||
| 899 | font-size="288" | ||
| 900 | text-anchor="middle" | ||
| 901 | id="text212">struct</text> | ||
| 902 | <!-- Text --> | ||
| 903 | <text | ||
| 904 | xml:space="preserve" | ||
| 905 | x="675" | ||
| 906 | y="450" | ||
| 907 | fill="#000000" | ||
| 908 | font-family="Courier" | ||
| 909 | font-style="normal" | ||
| 910 | font-weight="bold" | ||
| 911 | font-size="288" | ||
| 912 | text-anchor="start" | ||
| 913 | id="text214">struct rcu_state</text> | ||
| 914 | <!-- Text --> | ||
| 915 | <text | ||
| 916 | xml:space="preserve" | ||
| 917 | x="9000" | ||
| 918 | y="1350" | ||
| 919 | fill="#000000" | ||
| 920 | font-family="Courier" | ||
| 921 | font-style="normal" | ||
| 922 | font-weight="bold" | ||
| 923 | font-size="288" | ||
| 924 | text-anchor="middle" | ||
| 925 | id="text216">struct</text> | ||
| 926 | <!-- Text --> | ||
| 927 | <text | ||
| 928 | xml:space="preserve" | ||
| 929 | x="9000" | ||
| 930 | y="1800" | ||
| 931 | fill="#000000" | ||
| 932 | font-family="Courier" | ||
| 933 | font-style="normal" | ||
| 934 | font-weight="bold" | ||
| 935 | font-size="288" | ||
| 936 | text-anchor="middle" | ||
| 937 | id="text218">rcu_node</text> | ||
| 938 | </g> | ||
| 939 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/TreeLevel.svg b/Documentation/RCU/Design/Data-Structures/TreeLevel.svg new file mode 100644 index 000000000000..7a7eb3bac95c --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/TreeLevel.svg | |||
| @@ -0,0 +1,828 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:41:29 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 3.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="17.7in" | ||
| 17 | height="10.4in" | ||
| 18 | viewBox="-66 -66 21237 12507" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="TreeLevel.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata216"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs214"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3974" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="1023" | ||
| 61 | inkscape:window-height="1148" | ||
| 62 | id="namedview212" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="0.55869424" | ||
| 65 | inkscape:cx="796.50006" | ||
| 66 | inkscape:cy="467.99997" | ||
| 67 | inkscape:window-x="897" | ||
| 68 | inkscape:window-y="24" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="0" | ||
| 77 | y="0" | ||
| 78 | width="20655" | ||
| 79 | height="8325" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="14130" | ||
| 86 | y="3600" | ||
| 87 | width="2700" | ||
| 88 | height="1350" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="7380" | ||
| 95 | y="3600" | ||
| 96 | width="2700" | ||
| 97 | height="1350" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="8505" | ||
| 104 | y="6300" | ||
| 105 | width="2700" | ||
| 106 | height="1350" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Line: box --> | ||
| 111 | <rect | ||
| 112 | x="13005" | ||
| 113 | y="6300" | ||
| 114 | width="2700" | ||
| 115 | height="1350" | ||
| 116 | rx="0" | ||
| 117 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 118 | id="rect14" /> | ||
| 119 | <!-- Line: box --> | ||
| 120 | <rect | ||
| 121 | x="17505" | ||
| 122 | y="6300" | ||
| 123 | width="2700" | ||
| 124 | height="1350" | ||
| 125 | rx="0" | ||
| 126 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 127 | id="rect16" /> | ||
| 128 | <!-- Line: box --> | ||
| 129 | <rect | ||
| 130 | x="4005" | ||
| 131 | y="6300" | ||
| 132 | width="2700" | ||
| 133 | height="1350" | ||
| 134 | rx="0" | ||
| 135 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 136 | id="rect18" /> | ||
| 137 | <!-- Line: box --> | ||
| 138 | <rect | ||
| 139 | x="10755" | ||
| 140 | y="900" | ||
| 141 | width="2700" | ||
| 142 | height="1350" | ||
| 143 | rx="0" | ||
| 144 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 145 | id="rect20" /> | ||
| 146 | <!-- Line --> | ||
| 147 | <polyline | ||
| 148 | points="6255,9225 6255,7746 " | ||
| 149 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 150 | id="polyline22" /> | ||
| 151 | <!-- Arrowhead on XXXpoint 6255 9225 - 6255 7560--> | ||
| 152 | <!-- Circle --> | ||
| 153 | <circle | ||
| 154 | cx="11655" | ||
| 155 | cy="4275" | ||
| 156 | r="114" | ||
| 157 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 158 | id="circle26" /> | ||
| 159 | <!-- Circle --> | ||
| 160 | <circle | ||
| 161 | cx="12105" | ||
| 162 | cy="4275" | ||
| 163 | r="114" | ||
| 164 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 165 | id="circle28" /> | ||
| 166 | <!-- Circle --> | ||
| 167 | <circle | ||
| 168 | cx="12555" | ||
| 169 | cy="4275" | ||
| 170 | r="114" | ||
| 171 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 172 | id="circle30" /> | ||
| 173 | <!-- Line --> | ||
| 174 | <polyline | ||
| 175 | points="9855,6300 11355,5010 " | ||
| 176 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 177 | id="polyline32" /> | ||
| 178 | <!-- Arrowhead on XXXpoint 9855 6300 - 11496 4890--> | ||
| 179 | <!-- Line --> | ||
| 180 | <polyline | ||
| 181 | points="14355,6300 12852,5010 " | ||
| 182 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 183 | id="polyline36" /> | ||
| 184 | <!-- Arrowhead on XXXpoint 14355 6300 - 12711 4890--> | ||
| 185 | <!-- Circle --> | ||
| 186 | <circle | ||
| 187 | cx="17055" | ||
| 188 | cy="6975" | ||
| 189 | r="114" | ||
| 190 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 191 | id="circle40" /> | ||
| 192 | <!-- Circle --> | ||
| 193 | <circle | ||
| 194 | cx="16605" | ||
| 195 | cy="6975" | ||
| 196 | r="114" | ||
| 197 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 198 | id="circle42" /> | ||
| 199 | <!-- Circle --> | ||
| 200 | <circle | ||
| 201 | cx="16155" | ||
| 202 | cy="6975" | ||
| 203 | r="114" | ||
| 204 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 205 | id="circle44" /> | ||
| 206 | <!-- Circle --> | ||
| 207 | <circle | ||
| 208 | cx="12555" | ||
| 209 | cy="6975" | ||
| 210 | r="114" | ||
| 211 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 212 | id="circle46" /> | ||
| 213 | <!-- Circle --> | ||
| 214 | <circle | ||
| 215 | cx="12105" | ||
| 216 | cy="6975" | ||
| 217 | r="114" | ||
| 218 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 219 | id="circle48" /> | ||
| 220 | <!-- Circle --> | ||
| 221 | <circle | ||
| 222 | cx="11655" | ||
| 223 | cy="6975" | ||
| 224 | r="114" | ||
| 225 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 226 | id="circle50" /> | ||
| 227 | <!-- Circle --> | ||
| 228 | <circle | ||
| 229 | cx="8055" | ||
| 230 | cy="6975" | ||
| 231 | r="114" | ||
| 232 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 233 | id="circle52" /> | ||
| 234 | <!-- Circle --> | ||
| 235 | <circle | ||
| 236 | cx="7605" | ||
| 237 | cy="6975" | ||
| 238 | r="114" | ||
| 239 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 240 | id="circle54" /> | ||
| 241 | <!-- Circle --> | ||
| 242 | <circle | ||
| 243 | cx="7155" | ||
| 244 | cy="6975" | ||
| 245 | r="114" | ||
| 246 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 247 | id="circle56" /> | ||
| 248 | <!-- Circle --> | ||
| 249 | <circle | ||
| 250 | cx="4905" | ||
| 251 | cy="8775" | ||
| 252 | r="114" | ||
| 253 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 254 | id="circle58" /> | ||
| 255 | <!-- Circle --> | ||
| 256 | <circle | ||
| 257 | cx="5355" | ||
| 258 | cy="8775" | ||
| 259 | r="114" | ||
| 260 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 261 | id="circle60" /> | ||
| 262 | <!-- Circle --> | ||
| 263 | <circle | ||
| 264 | cx="5805" | ||
| 265 | cy="8775" | ||
| 266 | r="114" | ||
| 267 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 268 | id="circle62" /> | ||
| 269 | <!-- Circle --> | ||
| 270 | <circle | ||
| 271 | cx="18405" | ||
| 272 | cy="8775" | ||
| 273 | r="114" | ||
| 274 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 275 | id="circle64" /> | ||
| 276 | <!-- Circle --> | ||
| 277 | <circle | ||
| 278 | cx="18855" | ||
| 279 | cy="8775" | ||
| 280 | r="114" | ||
| 281 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 282 | id="circle66" /> | ||
| 283 | <!-- Circle --> | ||
| 284 | <circle | ||
| 285 | cx="19305" | ||
| 286 | cy="8775" | ||
| 287 | r="114" | ||
| 288 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 289 | id="circle68" /> | ||
| 290 | <!-- Circle --> | ||
| 291 | <circle | ||
| 292 | cx="13905" | ||
| 293 | cy="8775" | ||
| 294 | r="114" | ||
| 295 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 296 | id="circle70" /> | ||
| 297 | <!-- Circle --> | ||
| 298 | <circle | ||
| 299 | cx="14355" | ||
| 300 | cy="8775" | ||
| 301 | r="114" | ||
| 302 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 303 | id="circle72" /> | ||
| 304 | <!-- Circle --> | ||
| 305 | <circle | ||
| 306 | cx="14805" | ||
| 307 | cy="8775" | ||
| 308 | r="114" | ||
| 309 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 310 | id="circle74" /> | ||
| 311 | <!-- Circle --> | ||
| 312 | <circle | ||
| 313 | cx="9405" | ||
| 314 | cy="8775" | ||
| 315 | r="114" | ||
| 316 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 317 | id="circle76" /> | ||
| 318 | <!-- Circle --> | ||
| 319 | <circle | ||
| 320 | cx="9855" | ||
| 321 | cy="8775" | ||
| 322 | r="114" | ||
| 323 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 324 | id="circle78" /> | ||
| 325 | <!-- Circle --> | ||
| 326 | <circle | ||
| 327 | cx="10305" | ||
| 328 | cy="8775" | ||
| 329 | r="114" | ||
| 330 | style="fill:#000000;stroke:#000000;stroke-width:21;" | ||
| 331 | id="circle80" /> | ||
| 332 | <!-- Line: box --> | ||
| 333 | <rect | ||
| 334 | x="225" | ||
| 335 | y="1125" | ||
| 336 | width="3150" | ||
| 337 | height="1125" | ||
| 338 | rx="0" | ||
| 339 | style="stroke:#000000;stroke-width:21; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 340 | id="rect82" /> | ||
| 341 | <!-- Line: box --> | ||
| 342 | <rect | ||
| 343 | x="225" | ||
| 344 | y="2250" | ||
| 345 | width="3150" | ||
| 346 | height="1125" | ||
| 347 | rx="0" | ||
| 348 | style="stroke:#000000;stroke-width:21; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 349 | id="rect84" /> | ||
| 350 | <!-- Line: box --> | ||
| 351 | <rect | ||
| 352 | x="225" | ||
| 353 | y="3375" | ||
| 354 | width="3150" | ||
| 355 | height="1125" | ||
| 356 | rx="0" | ||
| 357 | style="stroke:#000000;stroke-width:21; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 358 | id="rect86" /> | ||
| 359 | <!-- Line --> | ||
| 360 | <polyline | ||
| 361 | points="14805,3600 13302,2310 " | ||
| 362 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 363 | id="polyline88" /> | ||
| 364 | <!-- Arrowhead on XXXpoint 14805 3600 - 13161 2190--> | ||
| 365 | <!-- Line --> | ||
| 366 | <polyline | ||
| 367 | points="9405,3600 10905,2310 " | ||
| 368 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 369 | id="polyline92" /> | ||
| 370 | <!-- Arrowhead on XXXpoint 9405 3600 - 11046 2190--> | ||
| 371 | <!-- Line --> | ||
| 372 | <polyline | ||
| 373 | points="6255,6300 7755,5010 " | ||
| 374 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 375 | id="polyline96" /> | ||
| 376 | <!-- Arrowhead on XXXpoint 6255 6300 - 7896 4890--> | ||
| 377 | <!-- Line --> | ||
| 378 | <polyline | ||
| 379 | points="17955,6300 16452,5010 " | ||
| 380 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 381 | id="polyline100" /> | ||
| 382 | <!-- Arrowhead on XXXpoint 17955 6300 - 16311 4890--> | ||
| 383 | <!-- Line --> | ||
| 384 | <polyline | ||
| 385 | points="4455,11025 4455,7746 " | ||
| 386 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 387 | id="polyline104" /> | ||
| 388 | <!-- Arrowhead on XXXpoint 4455 11025 - 4455 7560--> | ||
| 389 | <!-- Line --> | ||
| 390 | <polyline | ||
| 391 | points="19755,9225 19755,7746 " | ||
| 392 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 393 | id="polyline108" /> | ||
| 394 | <!-- Arrowhead on XXXpoint 19755 9225 - 19755 7560--> | ||
| 395 | <!-- Line --> | ||
| 396 | <polyline | ||
| 397 | points="17955,11025 17955,7746 " | ||
| 398 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 399 | id="polyline112" /> | ||
| 400 | <!-- Arrowhead on XXXpoint 17955 11025 - 17955 7560--> | ||
| 401 | <!-- Line --> | ||
| 402 | <polyline | ||
| 403 | points="15255,9225 15255,7746 " | ||
| 404 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 405 | id="polyline116" /> | ||
| 406 | <!-- Arrowhead on XXXpoint 15255 9225 - 15255 7560--> | ||
| 407 | <!-- Line --> | ||
| 408 | <polyline | ||
| 409 | points="13455,11025 13455,7746 " | ||
| 410 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 411 | id="polyline120" /> | ||
| 412 | <!-- Arrowhead on XXXpoint 13455 11025 - 13455 7560--> | ||
| 413 | <!-- Line --> | ||
| 414 | <polyline | ||
| 415 | points="10755,9225 10755,7746 " | ||
| 416 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 417 | id="polyline124" /> | ||
| 418 | <!-- Arrowhead on XXXpoint 10755 9225 - 10755 7560--> | ||
| 419 | <!-- Line --> | ||
| 420 | <polyline | ||
| 421 | points="8955,11025 8955,7746 " | ||
| 422 | style="stroke:#00d1d1;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 423 | id="polyline128" /> | ||
| 424 | <!-- Arrowhead on XXXpoint 8955 11025 - 8955 7560--> | ||
| 425 | <!-- Line: box --> | ||
| 426 | <rect | ||
| 427 | x="12105" | ||
| 428 | y="11025" | ||
| 429 | width="2700" | ||
| 430 | height="1350" | ||
| 431 | rx="0" | ||
| 432 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 433 | id="rect132" /> | ||
| 434 | <!-- Line: box --> | ||
| 435 | <rect | ||
| 436 | x="13905" | ||
| 437 | y="9225" | ||
| 438 | width="2700" | ||
| 439 | height="1350" | ||
| 440 | rx="0" | ||
| 441 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 442 | id="rect134" /> | ||
| 443 | <!-- Line: box --> | ||
| 444 | <rect | ||
| 445 | x="16605" | ||
| 446 | y="11025" | ||
| 447 | width="2700" | ||
| 448 | height="1350" | ||
| 449 | rx="0" | ||
| 450 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 451 | id="rect136" /> | ||
| 452 | <!-- Line: box --> | ||
| 453 | <rect | ||
| 454 | x="18405" | ||
| 455 | y="9225" | ||
| 456 | width="2700" | ||
| 457 | height="1350" | ||
| 458 | rx="0" | ||
| 459 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 460 | id="rect138" /> | ||
| 461 | <!-- Line: box --> | ||
| 462 | <rect | ||
| 463 | x="9405" | ||
| 464 | y="9225" | ||
| 465 | width="2700" | ||
| 466 | height="1350" | ||
| 467 | rx="0" | ||
| 468 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 469 | id="rect140" /> | ||
| 470 | <!-- Line: box --> | ||
| 471 | <rect | ||
| 472 | x="7605" | ||
| 473 | y="11025" | ||
| 474 | width="2700" | ||
| 475 | height="1350" | ||
| 476 | rx="0" | ||
| 477 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 478 | id="rect142" /> | ||
| 479 | <!-- Line: box --> | ||
| 480 | <rect | ||
| 481 | x="4905" | ||
| 482 | y="9225" | ||
| 483 | width="2700" | ||
| 484 | height="1350" | ||
| 485 | rx="0" | ||
| 486 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 487 | id="rect144" /> | ||
| 488 | <!-- Line: box --> | ||
| 489 | <rect | ||
| 490 | x="3105" | ||
| 491 | y="11025" | ||
| 492 | width="2700" | ||
| 493 | height="1350" | ||
| 494 | rx="0" | ||
| 495 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 496 | id="rect146" /> | ||
| 497 | <!-- Line --> | ||
| 498 | <polyline | ||
| 499 | points="3375,1575 10701,1575 " | ||
| 500 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 501 | id="polyline148" /> | ||
| 502 | <!-- Arrowhead on XXXpoint 3375 1575 - 10890 1575--> | ||
| 503 | <!-- Line --> | ||
| 504 | <polyline | ||
| 505 | points="3375,3825 4050,3825 4050,5400 2700,5400 2700,6975 3951,6975 " | ||
| 506 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 507 | id="polyline152" /> | ||
| 508 | <!-- Arrowhead on XXXpoint 2700 6975 - 4140 6975--> | ||
| 509 | <!-- Line --> | ||
| 510 | <polyline | ||
| 511 | points="3375,2700 5175,2700 5175,4275 7326,4275 " | ||
| 512 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 513 | id="polyline156" /> | ||
| 514 | <!-- Arrowhead on XXXpoint 5175 4275 - 7515 4275--> | ||
| 515 | <!-- Text --> | ||
| 516 | <text | ||
| 517 | xml:space="preserve" | ||
| 518 | x="15480" | ||
| 519 | y="4500" | ||
| 520 | fill="#000000" | ||
| 521 | font-family="Courier" | ||
| 522 | font-style="normal" | ||
| 523 | font-weight="bold" | ||
| 524 | font-size="288" | ||
| 525 | text-anchor="middle" | ||
| 526 | id="text160">rcu_node</text> | ||
| 527 | <!-- Text --> | ||
| 528 | <text | ||
| 529 | xml:space="preserve" | ||
| 530 | x="15480" | ||
| 531 | y="4050" | ||
| 532 | fill="#000000" | ||
| 533 | font-family="Courier" | ||
| 534 | font-style="normal" | ||
| 535 | font-weight="bold" | ||
| 536 | font-size="288" | ||
| 537 | text-anchor="middle" | ||
| 538 | id="text162">struct</text> | ||
| 539 | <!-- Text --> | ||
| 540 | <text | ||
| 541 | xml:space="preserve" | ||
| 542 | x="8730" | ||
| 543 | y="4050" | ||
| 544 | fill="#000000" | ||
| 545 | font-family="Courier" | ||
| 546 | font-style="normal" | ||
| 547 | font-weight="bold" | ||
| 548 | font-size="288" | ||
| 549 | text-anchor="middle" | ||
| 550 | id="text164">struct</text> | ||
| 551 | <!-- Text --> | ||
| 552 | <text | ||
| 553 | xml:space="preserve" | ||
| 554 | x="8730" | ||
| 555 | y="4500" | ||
| 556 | fill="#000000" | ||
| 557 | font-family="Courier" | ||
| 558 | font-style="normal" | ||
| 559 | font-weight="bold" | ||
| 560 | font-size="288" | ||
| 561 | text-anchor="middle" | ||
| 562 | id="text166">rcu_node</text> | ||
| 563 | <!-- Text --> | ||
| 564 | <text | ||
| 565 | xml:space="preserve" | ||
| 566 | x="9855" | ||
| 567 | y="6750" | ||
| 568 | fill="#000000" | ||
| 569 | font-family="Courier" | ||
| 570 | font-style="normal" | ||
| 571 | font-weight="bold" | ||
| 572 | font-size="288" | ||
| 573 | text-anchor="middle" | ||
| 574 | id="text168">struct</text> | ||
| 575 | <!-- Text --> | ||
| 576 | <text | ||
| 577 | xml:space="preserve" | ||
| 578 | x="9855" | ||
| 579 | y="7200" | ||
| 580 | fill="#000000" | ||
| 581 | font-family="Courier" | ||
| 582 | font-style="normal" | ||
| 583 | font-weight="bold" | ||
| 584 | font-size="288" | ||
| 585 | text-anchor="middle" | ||
| 586 | id="text170">rcu_node</text> | ||
| 587 | <!-- Text --> | ||
| 588 | <text | ||
| 589 | xml:space="preserve" | ||
| 590 | x="14355" | ||
| 591 | y="7200" | ||
| 592 | fill="#000000" | ||
| 593 | font-family="Courier" | ||
| 594 | font-style="normal" | ||
| 595 | font-weight="bold" | ||
| 596 | font-size="288" | ||
| 597 | text-anchor="middle" | ||
| 598 | id="text172">rcu_node</text> | ||
| 599 | <!-- Text --> | ||
| 600 | <text | ||
| 601 | xml:space="preserve" | ||
| 602 | x="14355" | ||
| 603 | y="6750" | ||
| 604 | fill="#000000" | ||
| 605 | font-family="Courier" | ||
| 606 | font-style="normal" | ||
| 607 | font-weight="bold" | ||
| 608 | font-size="288" | ||
| 609 | text-anchor="middle" | ||
| 610 | id="text174">struct</text> | ||
| 611 | <!-- Text --> | ||
| 612 | <text | ||
| 613 | xml:space="preserve" | ||
| 614 | x="18855" | ||
| 615 | y="7200" | ||
| 616 | fill="#000000" | ||
| 617 | font-family="Courier" | ||
| 618 | font-style="normal" | ||
| 619 | font-weight="bold" | ||
| 620 | font-size="288" | ||
| 621 | text-anchor="middle" | ||
| 622 | id="text176">rcu_node</text> | ||
| 623 | <!-- Text --> | ||
| 624 | <text | ||
| 625 | xml:space="preserve" | ||
| 626 | x="18855" | ||
| 627 | y="6750" | ||
| 628 | fill="#000000" | ||
| 629 | font-family="Courier" | ||
| 630 | font-style="normal" | ||
| 631 | font-weight="bold" | ||
| 632 | font-size="288" | ||
| 633 | text-anchor="middle" | ||
| 634 | id="text178">struct</text> | ||
| 635 | <!-- Text --> | ||
| 636 | <text | ||
| 637 | xml:space="preserve" | ||
| 638 | x="5355" | ||
| 639 | y="6750" | ||
| 640 | fill="#000000" | ||
| 641 | font-family="Courier" | ||
| 642 | font-style="normal" | ||
| 643 | font-weight="bold" | ||
| 644 | font-size="288" | ||
| 645 | text-anchor="middle" | ||
| 646 | id="text180">struct</text> | ||
| 647 | <!-- Text --> | ||
| 648 | <text | ||
| 649 | xml:space="preserve" | ||
| 650 | x="5355" | ||
| 651 | y="7200" | ||
| 652 | fill="#000000" | ||
| 653 | font-family="Courier" | ||
| 654 | font-style="normal" | ||
| 655 | font-weight="bold" | ||
| 656 | font-size="288" | ||
| 657 | text-anchor="middle" | ||
| 658 | id="text182">rcu_node</text> | ||
| 659 | <!-- Text --> | ||
| 660 | <text | ||
| 661 | xml:space="preserve" | ||
| 662 | x="450" | ||
| 663 | y="1800" | ||
| 664 | fill="#000000" | ||
| 665 | font-family="Courier" | ||
| 666 | font-style="normal" | ||
| 667 | font-weight="bold" | ||
| 668 | font-size="324" | ||
| 669 | text-anchor="start" | ||
| 670 | id="text184">->level[0]</text> | ||
| 671 | <!-- Text --> | ||
| 672 | <text | ||
| 673 | xml:space="preserve" | ||
| 674 | x="450" | ||
| 675 | y="2925" | ||
| 676 | fill="#000000" | ||
| 677 | font-family="Courier" | ||
| 678 | font-style="normal" | ||
| 679 | font-weight="bold" | ||
| 680 | font-size="324" | ||
| 681 | text-anchor="start" | ||
| 682 | id="text186">->level[1]</text> | ||
| 683 | <!-- Text --> | ||
| 684 | <text | ||
| 685 | xml:space="preserve" | ||
| 686 | x="450" | ||
| 687 | y="4050" | ||
| 688 | fill="#000000" | ||
| 689 | font-family="Courier" | ||
| 690 | font-style="normal" | ||
| 691 | font-weight="bold" | ||
| 692 | font-size="324" | ||
| 693 | text-anchor="start" | ||
| 694 | id="text188">->level[2]</text> | ||
| 695 | <!-- Text --> | ||
| 696 | <text | ||
| 697 | xml:space="preserve" | ||
| 698 | x="12105" | ||
| 699 | y="1350" | ||
| 700 | fill="#000000" | ||
| 701 | font-family="Courier" | ||
| 702 | font-style="normal" | ||
| 703 | font-weight="bold" | ||
| 704 | font-size="288" | ||
| 705 | text-anchor="middle" | ||
| 706 | id="text190">struct</text> | ||
| 707 | <!-- Text --> | ||
| 708 | <text | ||
| 709 | xml:space="preserve" | ||
| 710 | x="12105" | ||
| 711 | y="1800" | ||
| 712 | fill="#000000" | ||
| 713 | font-family="Courier" | ||
| 714 | font-style="normal" | ||
| 715 | font-weight="bold" | ||
| 716 | font-size="288" | ||
| 717 | text-anchor="middle" | ||
| 718 | id="text192">rcu_node</text> | ||
| 719 | <!-- Text --> | ||
| 720 | <text | ||
| 721 | xml:space="preserve" | ||
| 722 | x="6255" | ||
| 723 | y="10125" | ||
| 724 | fill="#000000" | ||
| 725 | font-family="Helvetica" | ||
| 726 | font-style="normal" | ||
| 727 | font-weight="normal" | ||
| 728 | font-size="324" | ||
| 729 | text-anchor="middle" | ||
| 730 | id="text194">CPU 15</text> | ||
| 731 | <!-- Text --> | ||
| 732 | <text | ||
| 733 | xml:space="preserve" | ||
| 734 | x="4455" | ||
| 735 | y="11925" | ||
| 736 | fill="#000000" | ||
| 737 | font-family="Helvetica" | ||
| 738 | font-style="normal" | ||
| 739 | font-weight="normal" | ||
| 740 | font-size="324" | ||
| 741 | text-anchor="middle" | ||
| 742 | id="text196">CPU 0</text> | ||
| 743 | <!-- Text --> | ||
| 744 | <text | ||
| 745 | xml:space="preserve" | ||
| 746 | x="19755" | ||
| 747 | y="10125" | ||
| 748 | fill="#000000" | ||
| 749 | font-family="Helvetica" | ||
| 750 | font-style="normal" | ||
| 751 | font-weight="normal" | ||
| 752 | font-size="324" | ||
| 753 | text-anchor="middle" | ||
| 754 | id="text198">CPU 65535</text> | ||
| 755 | <!-- Text --> | ||
| 756 | <text | ||
| 757 | xml:space="preserve" | ||
| 758 | x="17955" | ||
| 759 | y="11925" | ||
| 760 | fill="#000000" | ||
| 761 | font-family="Helvetica" | ||
| 762 | font-style="normal" | ||
| 763 | font-weight="normal" | ||
| 764 | font-size="324" | ||
| 765 | text-anchor="middle" | ||
| 766 | id="text200">CPU 65519</text> | ||
| 767 | <!-- Text --> | ||
| 768 | <text | ||
| 769 | xml:space="preserve" | ||
| 770 | x="15255" | ||
| 771 | y="10125" | ||
| 772 | fill="#000000" | ||
| 773 | font-family="Helvetica" | ||
| 774 | font-style="normal" | ||
| 775 | font-weight="normal" | ||
| 776 | font-size="324" | ||
| 777 | text-anchor="middle" | ||
| 778 | id="text202">CPU 43695</text> | ||
| 779 | <!-- Text --> | ||
| 780 | <text | ||
| 781 | xml:space="preserve" | ||
| 782 | x="13455" | ||
| 783 | y="11925" | ||
| 784 | fill="#000000" | ||
| 785 | font-family="Helvetica" | ||
| 786 | font-style="normal" | ||
| 787 | font-weight="normal" | ||
| 788 | font-size="324" | ||
| 789 | text-anchor="middle" | ||
| 790 | id="text204">CPU 43679</text> | ||
| 791 | <!-- Text --> | ||
| 792 | <text | ||
| 793 | xml:space="preserve" | ||
| 794 | x="10755" | ||
| 795 | y="10125" | ||
| 796 | fill="#000000" | ||
| 797 | font-family="Helvetica" | ||
| 798 | font-style="normal" | ||
| 799 | font-weight="normal" | ||
| 800 | font-size="324" | ||
| 801 | text-anchor="middle" | ||
| 802 | id="text206">CPU 21839</text> | ||
| 803 | <!-- Text --> | ||
| 804 | <text | ||
| 805 | xml:space="preserve" | ||
| 806 | x="8955" | ||
| 807 | y="11925" | ||
| 808 | fill="#000000" | ||
| 809 | font-family="Helvetica" | ||
| 810 | font-style="normal" | ||
| 811 | font-weight="normal" | ||
| 812 | font-size="324" | ||
| 813 | text-anchor="middle" | ||
| 814 | id="text208">CPU 21823</text> | ||
| 815 | <!-- Text --> | ||
| 816 | <text | ||
| 817 | xml:space="preserve" | ||
| 818 | x="225" | ||
| 819 | y="450" | ||
| 820 | fill="#000000" | ||
| 821 | font-family="Courier" | ||
| 822 | font-style="normal" | ||
| 823 | font-weight="bold" | ||
| 824 | font-size="288" | ||
| 825 | text-anchor="start" | ||
| 826 | id="text210">struct rcu_state</text> | ||
| 827 | </g> | ||
| 828 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/TreeMapping.svg b/Documentation/RCU/Design/Data-Structures/TreeMapping.svg new file mode 100644 index 000000000000..729cfa9e6cdb --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/TreeMapping.svg | |||
| @@ -0,0 +1,305 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:43:22 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 1.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="3.1in" | ||
| 17 | height="0.9in" | ||
| 18 | viewBox="-12 -12 3699 1074" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="TreeMapping.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata66"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs64"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow2Lend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow2Lend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3836" | ||
| 46 | style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" | ||
| 47 | d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " | ||
| 48 | transform="scale(1.1) rotate(180) translate(1,0)" /> | ||
| 49 | </marker> | ||
| 50 | <marker | ||
| 51 | inkscape:stockid="Arrow2Mend" | ||
| 52 | orient="auto" | ||
| 53 | refY="0.0" | ||
| 54 | refX="0.0" | ||
| 55 | id="Arrow2Mend" | ||
| 56 | style="overflow:visible;"> | ||
| 57 | <path | ||
| 58 | id="path3842" | ||
| 59 | style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" | ||
| 60 | d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " | ||
| 61 | transform="scale(0.6) rotate(180) translate(0,0)" /> | ||
| 62 | </marker> | ||
| 63 | <marker | ||
| 64 | inkscape:stockid="Arrow1Mend" | ||
| 65 | orient="auto" | ||
| 66 | refY="0.0" | ||
| 67 | refX="0.0" | ||
| 68 | id="Arrow1Mend" | ||
| 69 | style="overflow:visible;"> | ||
| 70 | <path | ||
| 71 | id="path3824" | ||
| 72 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 73 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 74 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 75 | </marker> | ||
| 76 | </defs> | ||
| 77 | <sodipodi:namedview | ||
| 78 | pagecolor="#ffffff" | ||
| 79 | bordercolor="#666666" | ||
| 80 | borderopacity="1" | ||
| 81 | objecttolerance="10" | ||
| 82 | gridtolerance="10" | ||
| 83 | guidetolerance="10" | ||
| 84 | inkscape:pageopacity="0" | ||
| 85 | inkscape:pageshadow="2" | ||
| 86 | inkscape:window-width="991" | ||
| 87 | inkscape:window-height="606" | ||
| 88 | id="namedview62" | ||
| 89 | showgrid="false" | ||
| 90 | inkscape:zoom="3.0752688" | ||
| 91 | inkscape:cx="139.5" | ||
| 92 | inkscape:cy="40.5" | ||
| 93 | inkscape:window-x="891" | ||
| 94 | inkscape:window-y="177" | ||
| 95 | inkscape:window-maximized="0" | ||
| 96 | inkscape:current-layer="g4" /> | ||
| 97 | <g | ||
| 98 | style="stroke-width:.025in; fill:none" | ||
| 99 | id="g4"> | ||
| 100 | <!-- Line: box --> | ||
| 101 | <rect | ||
| 102 | x="0" | ||
| 103 | y="0" | ||
| 104 | width="3675" | ||
| 105 | height="1050" | ||
| 106 | rx="0" | ||
| 107 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 108 | id="rect6" /> | ||
| 109 | <!-- Line: box --> | ||
| 110 | <rect | ||
| 111 | x="75" | ||
| 112 | y="375" | ||
| 113 | width="375" | ||
| 114 | height="300" | ||
| 115 | rx="0" | ||
| 116 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 117 | id="rect8" /> | ||
| 118 | <!-- Line: box --> | ||
| 119 | <rect | ||
| 120 | x="600" | ||
| 121 | y="375" | ||
| 122 | width="375" | ||
| 123 | height="300" | ||
| 124 | rx="0" | ||
| 125 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 126 | id="rect10" /> | ||
| 127 | <!-- Line: box --> | ||
| 128 | <rect | ||
| 129 | x="1125" | ||
| 130 | y="375" | ||
| 131 | width="375" | ||
| 132 | height="300" | ||
| 133 | rx="0" | ||
| 134 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 135 | id="rect12" /> | ||
| 136 | <!-- Line: box --> | ||
| 137 | <rect | ||
| 138 | x="1650" | ||
| 139 | y="375" | ||
| 140 | width="375" | ||
| 141 | height="300" | ||
| 142 | rx="0" | ||
| 143 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 144 | id="rect14" /> | ||
| 145 | <!-- Line: box --> | ||
| 146 | <rect | ||
| 147 | x="2175" | ||
| 148 | y="375" | ||
| 149 | width="375" | ||
| 150 | height="300" | ||
| 151 | rx="0" | ||
| 152 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 153 | id="rect16" /> | ||
| 154 | <!-- Line: box --> | ||
| 155 | <rect | ||
| 156 | x="3225" | ||
| 157 | y="375" | ||
| 158 | width="375" | ||
| 159 | height="300" | ||
| 160 | rx="0" | ||
| 161 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 162 | id="rect18" /> | ||
| 163 | <!-- Line --> | ||
| 164 | <polyline | ||
| 165 | points="675,375 675,150 300,150 300,358 " | ||
| 166 | style="stroke:#000000;stroke-width:7.00088889;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 167 | id="polyline20" /> | ||
| 168 | <!-- Arrowhead on XXXpoint 300 150 - 300 390--> | ||
| 169 | <!-- Line --> | ||
| 170 | <polyline | ||
| 171 | points="1200,675 1200,900 300,900 300,691 " | ||
| 172 | style="stroke:#000000;stroke-width:7.00088889;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 173 | id="polyline24" /> | ||
| 174 | <!-- Arrowhead on XXXpoint 300 900 - 300 660--> | ||
| 175 | <!-- Line --> | ||
| 176 | <polyline | ||
| 177 | points="1725,375 1725,150 900,150 900,358 " | ||
| 178 | style="stroke:#000000;stroke-width:7.00088889;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 179 | id="polyline28" /> | ||
| 180 | <!-- Arrowhead on XXXpoint 900 150 - 900 390--> | ||
| 181 | <!-- Line --> | ||
| 182 | <polyline | ||
| 183 | points="2250,375 2250,75 825,75 825,358 " | ||
| 184 | style="stroke:#000000;stroke-width:7.00088889;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 185 | id="polyline32" /> | ||
| 186 | <!-- Arrowhead on XXXpoint 825 75 - 825 390--> | ||
| 187 | <!-- Line --> | ||
| 188 | <polyline | ||
| 189 | points="2775,675 2775,900 1425,900 1425,691 " | ||
| 190 | style="stroke:#000000;stroke-width:7.00088889;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 191 | id="polyline36" /> | ||
| 192 | <!-- Arrowhead on XXXpoint 1425 900 - 1425 660--> | ||
| 193 | <!-- Line --> | ||
| 194 | <polyline | ||
| 195 | points="3300,675 3300,975 1350,975 1350,691 " | ||
| 196 | style="stroke:#000000;stroke-width:7.00088889;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 197 | id="polyline40" /> | ||
| 198 | <!-- Arrowhead on XXXpoint 1350 975 - 1350 660--> | ||
| 199 | <!-- Line: box --> | ||
| 200 | <rect | ||
| 201 | x="2700" | ||
| 202 | y="375" | ||
| 203 | width="375" | ||
| 204 | height="300" | ||
| 205 | rx="0" | ||
| 206 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 207 | id="rect44" /> | ||
| 208 | <!-- Text --> | ||
| 209 | <text | ||
| 210 | xml:space="preserve" | ||
| 211 | x="300" | ||
| 212 | y="525" | ||
| 213 | fill="#000000" | ||
| 214 | font-family="Times" | ||
| 215 | font-style="normal" | ||
| 216 | font-weight="normal" | ||
| 217 | font-size="96" | ||
| 218 | text-anchor="middle" | ||
| 219 | id="text46">0:7 </text> | ||
| 220 | <!-- Text --> | ||
| 221 | <text | ||
| 222 | xml:space="preserve" | ||
| 223 | x="1350" | ||
| 224 | y="525" | ||
| 225 | fill="#000000" | ||
| 226 | font-family="Times" | ||
| 227 | font-style="normal" | ||
| 228 | font-weight="normal" | ||
| 229 | font-size="96" | ||
| 230 | text-anchor="middle" | ||
| 231 | id="text48">4:7 </text> | ||
| 232 | <!-- Text --> | ||
| 233 | <text | ||
| 234 | xml:space="preserve" | ||
| 235 | x="1875" | ||
| 236 | y="525" | ||
| 237 | fill="#000000" | ||
| 238 | font-family="Times" | ||
| 239 | font-style="normal" | ||
| 240 | font-weight="normal" | ||
| 241 | font-size="96" | ||
| 242 | text-anchor="middle" | ||
| 243 | id="text50">0:1 </text> | ||
| 244 | <!-- Text --> | ||
| 245 | <text | ||
| 246 | xml:space="preserve" | ||
| 247 | x="2400" | ||
| 248 | y="525" | ||
| 249 | fill="#000000" | ||
| 250 | font-family="Times" | ||
| 251 | font-style="normal" | ||
| 252 | font-weight="normal" | ||
| 253 | font-size="96" | ||
| 254 | text-anchor="middle" | ||
| 255 | id="text52">2:3 </text> | ||
| 256 | <!-- Text --> | ||
| 257 | <text | ||
| 258 | xml:space="preserve" | ||
| 259 | x="2925" | ||
| 260 | y="525" | ||
| 261 | fill="#000000" | ||
| 262 | font-family="Times" | ||
| 263 | font-style="normal" | ||
| 264 | font-weight="normal" | ||
| 265 | font-size="96" | ||
| 266 | text-anchor="middle" | ||
| 267 | id="text54">4:5 </text> | ||
| 268 | <!-- Text --> | ||
| 269 | <text | ||
| 270 | xml:space="preserve" | ||
| 271 | x="3450" | ||
| 272 | y="525" | ||
| 273 | fill="#000000" | ||
| 274 | font-family="Times" | ||
| 275 | font-style="normal" | ||
| 276 | font-weight="normal" | ||
| 277 | font-size="96" | ||
| 278 | text-anchor="middle" | ||
| 279 | id="text56">6:7 </text> | ||
| 280 | <!-- Text --> | ||
| 281 | <text | ||
| 282 | xml:space="preserve" | ||
| 283 | x="825" | ||
| 284 | y="525" | ||
| 285 | fill="#000000" | ||
| 286 | font-family="Times" | ||
| 287 | font-style="normal" | ||
| 288 | font-weight="normal" | ||
| 289 | font-size="96" | ||
| 290 | text-anchor="middle" | ||
| 291 | id="text58">0:3 </text> | ||
| 292 | <!-- Text --> | ||
| 293 | <text | ||
| 294 | xml:space="preserve" | ||
| 295 | x="3600" | ||
| 296 | y="150" | ||
| 297 | fill="#000000" | ||
| 298 | font-family="Courier" | ||
| 299 | font-style="normal" | ||
| 300 | font-weight="normal" | ||
| 301 | font-size="96" | ||
| 302 | text-anchor="end" | ||
| 303 | id="text60">struct rcu_state</text> | ||
| 304 | </g> | ||
| 305 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/TreeMappingLevel.svg b/Documentation/RCU/Design/Data-Structures/TreeMappingLevel.svg new file mode 100644 index 000000000000..5b416a4b8453 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/TreeMappingLevel.svg | |||
| @@ -0,0 +1,380 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:45:19 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 1.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="3.1in" | ||
| 17 | height="1.8in" | ||
| 18 | viewBox="-12 -12 3699 2124" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="TreeMappingLevel.svg"> | ||
| 23 | <metadata | ||
| 24 | id="metadata98"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title /> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs96"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow2Lend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow2Lend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3868" | ||
| 46 | style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" | ||
| 47 | d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " | ||
| 48 | transform="scale(1.1) rotate(180) translate(1,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="1598" | ||
| 61 | inkscape:window-height="1211" | ||
| 62 | id="namedview94" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="5.2508961" | ||
| 65 | inkscape:cx="139.5" | ||
| 66 | inkscape:cy="81" | ||
| 67 | inkscape:window-x="840" | ||
| 68 | inkscape:window-y="122" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="0" | ||
| 77 | y="0" | ||
| 78 | width="3675" | ||
| 79 | height="2100" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="75" | ||
| 86 | y="1350" | ||
| 87 | width="750" | ||
| 88 | height="225" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="75" | ||
| 95 | y="1575" | ||
| 96 | width="750" | ||
| 97 | height="225" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="75" | ||
| 104 | y="1800" | ||
| 105 | width="750" | ||
| 106 | height="225" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Arc --> | ||
| 111 | <path | ||
| 112 | style="stroke:#000000;stroke-width:7;stroke-linecap:butt;" | ||
| 113 | d="M 1800,900 A 118 118 0 0 0 1800 1125 " | ||
| 114 | id="path14" /> | ||
| 115 | <!-- Arc --> | ||
| 116 | <path | ||
| 117 | style="stroke:#000000;stroke-width:7;stroke-linecap:butt;" | ||
| 118 | d="M 750,900 A 75 75 0 0 0 750 1050 " | ||
| 119 | id="path16" /> | ||
| 120 | <!-- Line --> | ||
| 121 | <polyline | ||
| 122 | points="750,900 750,691 " | ||
| 123 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 124 | id="polyline18" /> | ||
| 125 | <!-- Arrowhead on XXXpoint 750 900 - 750 660--> | ||
| 126 | <!-- Line: box --> | ||
| 127 | <rect | ||
| 128 | x="75" | ||
| 129 | y="375" | ||
| 130 | width="375" | ||
| 131 | height="300" | ||
| 132 | rx="0" | ||
| 133 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 134 | id="rect22" /> | ||
| 135 | <!-- Line: box --> | ||
| 136 | <rect | ||
| 137 | x="600" | ||
| 138 | y="375" | ||
| 139 | width="375" | ||
| 140 | height="300" | ||
| 141 | rx="0" | ||
| 142 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 143 | id="rect24" /> | ||
| 144 | <!-- Line: box --> | ||
| 145 | <rect | ||
| 146 | x="1650" | ||
| 147 | y="375" | ||
| 148 | width="375" | ||
| 149 | height="300" | ||
| 150 | rx="0" | ||
| 151 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 152 | id="rect26" /> | ||
| 153 | <!-- Line: box --> | ||
| 154 | <rect | ||
| 155 | x="2175" | ||
| 156 | y="375" | ||
| 157 | width="375" | ||
| 158 | height="300" | ||
| 159 | rx="0" | ||
| 160 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 161 | id="rect28" /> | ||
| 162 | <!-- Line: box --> | ||
| 163 | <rect | ||
| 164 | x="3225" | ||
| 165 | y="375" | ||
| 166 | width="375" | ||
| 167 | height="300" | ||
| 168 | rx="0" | ||
| 169 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 170 | id="rect30" /> | ||
| 171 | <!-- Line --> | ||
| 172 | <polyline | ||
| 173 | points="675,375 675,150 300,150 300,358 " | ||
| 174 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 175 | id="polyline32" /> | ||
| 176 | <!-- Arrowhead on XXXpoint 300 150 - 300 390--> | ||
| 177 | <!-- Line --> | ||
| 178 | <polyline | ||
| 179 | points="1725,375 1725,150 900,150 900,358 " | ||
| 180 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 181 | id="polyline36" /> | ||
| 182 | <!-- Arrowhead on XXXpoint 900 150 - 900 390--> | ||
| 183 | <!-- Line --> | ||
| 184 | <polyline | ||
| 185 | points="2250,375 2250,75 825,75 825,358 " | ||
| 186 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 187 | id="polyline40" /> | ||
| 188 | <!-- Arrowhead on XXXpoint 825 75 - 825 390--> | ||
| 189 | <!-- Line --> | ||
| 190 | <polyline | ||
| 191 | points="2775,675 2775,975 1425,975 1425,691 " | ||
| 192 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 193 | id="polyline44" /> | ||
| 194 | <!-- Arrowhead on XXXpoint 1425 975 - 1425 660--> | ||
| 195 | <!-- Line: box --> | ||
| 196 | <rect | ||
| 197 | x="2700" | ||
| 198 | y="375" | ||
| 199 | width="375" | ||
| 200 | height="300" | ||
| 201 | rx="0" | ||
| 202 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 203 | id="rect48" /> | ||
| 204 | <!-- Line: box --> | ||
| 205 | <rect | ||
| 206 | x="1125" | ||
| 207 | y="375" | ||
| 208 | width="375" | ||
| 209 | height="300" | ||
| 210 | rx="0" | ||
| 211 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 212 | id="rect50" /> | ||
| 213 | <!-- Line --> | ||
| 214 | <polyline | ||
| 215 | points="3300,675 3300,1050 1350,1050 1350,691 " | ||
| 216 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 217 | id="polyline52" /> | ||
| 218 | <!-- Arrowhead on XXXpoint 1350 1050 - 1350 660--> | ||
| 219 | <!-- Line --> | ||
| 220 | <polyline | ||
| 221 | points="825,1425 975,1425 975,1200 225,1200 225,691 " | ||
| 222 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 223 | id="polyline56" /> | ||
| 224 | <!-- Arrowhead on XXXpoint 225 1200 - 225 660--> | ||
| 225 | <!-- Line --> | ||
| 226 | <polyline | ||
| 227 | points="1200,675 1200,975 300,975 300,691 " | ||
| 228 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 229 | id="polyline60" /> | ||
| 230 | <!-- Arrowhead on XXXpoint 300 975 - 300 660--> | ||
| 231 | <!-- Text --> | ||
| 232 | <text | ||
| 233 | xml:space="preserve" | ||
| 234 | x="150" | ||
| 235 | y="1500" | ||
| 236 | fill="#000000" | ||
| 237 | font-family="Helvetica" | ||
| 238 | font-style="normal" | ||
| 239 | font-weight="normal" | ||
| 240 | font-size="108" | ||
| 241 | text-anchor="start" | ||
| 242 | id="text64">->level[0]</text> | ||
| 243 | <!-- Text --> | ||
| 244 | <text | ||
| 245 | xml:space="preserve" | ||
| 246 | x="150" | ||
| 247 | y="1725" | ||
| 248 | fill="#000000" | ||
| 249 | font-family="Helvetica" | ||
| 250 | font-style="normal" | ||
| 251 | font-weight="normal" | ||
| 252 | font-size="108" | ||
| 253 | text-anchor="start" | ||
| 254 | id="text66">->level[1]</text> | ||
| 255 | <!-- Text --> | ||
| 256 | <text | ||
| 257 | xml:space="preserve" | ||
| 258 | x="150" | ||
| 259 | y="1950" | ||
| 260 | fill="#000000" | ||
| 261 | font-family="Helvetica" | ||
| 262 | font-style="normal" | ||
| 263 | font-weight="normal" | ||
| 264 | font-size="108" | ||
| 265 | text-anchor="start" | ||
| 266 | id="text68">->level[2]</text> | ||
| 267 | <!-- Text --> | ||
| 268 | <text | ||
| 269 | xml:space="preserve" | ||
| 270 | x="300" | ||
| 271 | y="525" | ||
| 272 | fill="#000000" | ||
| 273 | font-family="Times" | ||
| 274 | font-style="normal" | ||
| 275 | font-weight="normal" | ||
| 276 | font-size="96" | ||
| 277 | text-anchor="middle" | ||
| 278 | id="text70">0:7 </text> | ||
| 279 | <!-- Text --> | ||
| 280 | <text | ||
| 281 | xml:space="preserve" | ||
| 282 | x="1350" | ||
| 283 | y="525" | ||
| 284 | fill="#000000" | ||
| 285 | font-family="Times" | ||
| 286 | font-style="normal" | ||
| 287 | font-weight="normal" | ||
| 288 | font-size="96" | ||
| 289 | text-anchor="middle" | ||
| 290 | id="text72">4:7 </text> | ||
| 291 | <!-- Text --> | ||
| 292 | <text | ||
| 293 | xml:space="preserve" | ||
| 294 | x="1875" | ||
| 295 | y="525" | ||
| 296 | fill="#000000" | ||
| 297 | font-family="Times" | ||
| 298 | font-style="normal" | ||
| 299 | font-weight="normal" | ||
| 300 | font-size="96" | ||
| 301 | text-anchor="middle" | ||
| 302 | id="text74">0:1 </text> | ||
| 303 | <!-- Text --> | ||
| 304 | <text | ||
| 305 | xml:space="preserve" | ||
| 306 | x="2400" | ||
| 307 | y="525" | ||
| 308 | fill="#000000" | ||
| 309 | font-family="Times" | ||
| 310 | font-style="normal" | ||
| 311 | font-weight="normal" | ||
| 312 | font-size="96" | ||
| 313 | text-anchor="middle" | ||
| 314 | id="text76">2:3 </text> | ||
| 315 | <!-- Text --> | ||
| 316 | <text | ||
| 317 | xml:space="preserve" | ||
| 318 | x="2925" | ||
| 319 | y="525" | ||
| 320 | fill="#000000" | ||
| 321 | font-family="Times" | ||
| 322 | font-style="normal" | ||
| 323 | font-weight="normal" | ||
| 324 | font-size="96" | ||
| 325 | text-anchor="middle" | ||
| 326 | id="text78">4:5 </text> | ||
| 327 | <!-- Text --> | ||
| 328 | <text | ||
| 329 | xml:space="preserve" | ||
| 330 | x="3450" | ||
| 331 | y="525" | ||
| 332 | fill="#000000" | ||
| 333 | font-family="Times" | ||
| 334 | font-style="normal" | ||
| 335 | font-weight="normal" | ||
| 336 | font-size="96" | ||
| 337 | text-anchor="middle" | ||
| 338 | id="text80">6:7 </text> | ||
| 339 | <!-- Text --> | ||
| 340 | <text | ||
| 341 | xml:space="preserve" | ||
| 342 | x="825" | ||
| 343 | y="525" | ||
| 344 | fill="#000000" | ||
| 345 | font-family="Times" | ||
| 346 | font-style="normal" | ||
| 347 | font-weight="normal" | ||
| 348 | font-size="96" | ||
| 349 | text-anchor="middle" | ||
| 350 | id="text82">0:3 </text> | ||
| 351 | <!-- Text --> | ||
| 352 | <text | ||
| 353 | xml:space="preserve" | ||
| 354 | x="3600" | ||
| 355 | y="150" | ||
| 356 | fill="#000000" | ||
| 357 | font-family="Courier" | ||
| 358 | font-style="normal" | ||
| 359 | font-weight="normal" | ||
| 360 | font-size="96" | ||
| 361 | text-anchor="end" | ||
| 362 | id="text84">struct rcu_state</text> | ||
| 363 | <!-- Line --> | ||
| 364 | <polyline | ||
| 365 | points="825,1875 1800,1875 1800,1125 " | ||
| 366 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:none" | ||
| 367 | id="polyline86" /> | ||
| 368 | <!-- Line --> | ||
| 369 | <polyline | ||
| 370 | points="1800,900 1800,691 " | ||
| 371 | style="stroke:#000000;stroke-width:7.00025806;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)" | ||
| 372 | id="polyline88" /> | ||
| 373 | <!-- Arrowhead on XXXpoint 1800 900 - 1800 660--> | ||
| 374 | <!-- Line --> | ||
| 375 | <polyline | ||
| 376 | points="825,1650 1200,1650 1200,1125 750,1125 750,1050 " | ||
| 377 | style="stroke:#000000;stroke-width:7; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 378 | id="polyline92" /> | ||
| 379 | </g> | ||
| 380 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/blkd_task.svg b/Documentation/RCU/Design/Data-Structures/blkd_task.svg new file mode 100644 index 000000000000..00e810bb8419 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/blkd_task.svg | |||
| @@ -0,0 +1,843 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:35:03 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 2.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="10.1in" | ||
| 17 | height="8.6in" | ||
| 18 | viewBox="-44 -44 12088 10288" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="blkd_task.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata212"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs210"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3970" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="1087" | ||
| 61 | inkscape:window-height="1144" | ||
| 62 | id="namedview208" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="1.0495049" | ||
| 65 | inkscape:cx="454.50003" | ||
| 66 | inkscape:cy="387.00003" | ||
| 67 | inkscape:window-x="833" | ||
| 68 | inkscape:window-y="28" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="450" | ||
| 77 | y="0" | ||
| 78 | width="6300" | ||
| 79 | height="7350" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="4950" | ||
| 86 | y="4950" | ||
| 87 | width="1500" | ||
| 88 | height="900" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="750" | ||
| 95 | y="600" | ||
| 96 | width="5700" | ||
| 97 | height="3750" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line --> | ||
| 102 | <polyline | ||
| 103 | points="5250,8100 5688,5912 " | ||
| 104 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 105 | id="polyline12" /> | ||
| 106 | <!-- Arrowhead on XXXpoint 5250 8100 - 5710 5790--> | ||
| 107 | <polyline | ||
| 108 | points="5714 6068 5704 5822 5598 6044 " | ||
| 109 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 110 | id="polyline14" /> | ||
| 111 | <!-- Line --> | ||
| 112 | <polyline | ||
| 113 | points="4050,9300 4486,7262 " | ||
| 114 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 115 | id="polyline16" /> | ||
| 116 | <!-- Arrowhead on XXXpoint 4050 9300 - 4512 7140--> | ||
| 117 | <polyline | ||
| 118 | points="4514 7418 4506 7172 4396 7394 " | ||
| 119 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 120 | id="polyline18" /> | ||
| 121 | <!-- Line --> | ||
| 122 | <polyline | ||
| 123 | points="1040,9300 1476,7262 " | ||
| 124 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 125 | id="polyline20" /> | ||
| 126 | <!-- Arrowhead on XXXpoint 1040 9300 - 1502 7140--> | ||
| 127 | <polyline | ||
| 128 | points="1504 7418 1496 7172 1386 7394 " | ||
| 129 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 130 | id="polyline22" /> | ||
| 131 | <!-- Line --> | ||
| 132 | <polyline | ||
| 133 | points="2240,8100 2676,6062 " | ||
| 134 | style="stroke:#00ff00;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 135 | id="polyline24" /> | ||
| 136 | <!-- Arrowhead on XXXpoint 2240 8100 - 2702 5940--> | ||
| 137 | <polyline | ||
| 138 | points="2704 6218 2696 5972 2586 6194 " | ||
| 139 | style="stroke:#00ff00;stroke-width:14;stroke-miterlimit:8; " | ||
| 140 | id="polyline26" /> | ||
| 141 | <!-- Line: box --> | ||
| 142 | <rect | ||
| 143 | x="0" | ||
| 144 | y="450" | ||
| 145 | width="6300" | ||
| 146 | height="7350" | ||
| 147 | rx="0" | ||
| 148 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffffff; " | ||
| 149 | id="rect28" /> | ||
| 150 | <!-- Line: box --> | ||
| 151 | <rect | ||
| 152 | x="300" | ||
| 153 | y="1050" | ||
| 154 | width="5700" | ||
| 155 | height="3750" | ||
| 156 | rx="0" | ||
| 157 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffff00; " | ||
| 158 | id="rect30" /> | ||
| 159 | <!-- Line --> | ||
| 160 | <polyline | ||
| 161 | points="1350,3450 2350,2590 " | ||
| 162 | style="stroke:#00d1d1;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 163 | id="polyline32" /> | ||
| 164 | <!-- Arrowhead on XXXpoint 1350 3450 - 2444 2510--> | ||
| 165 | <!-- Line --> | ||
| 166 | <polyline | ||
| 167 | points="4950,3450 3948,2590 " | ||
| 168 | style="stroke:#00d1d1;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 169 | id="polyline36" /> | ||
| 170 | <!-- Arrowhead on XXXpoint 4950 3450 - 3854 2510--> | ||
| 171 | <!-- Line --> | ||
| 172 | <polyline | ||
| 173 | points="4050,6600 4050,4414 " | ||
| 174 | style="stroke:#00d1d1;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 175 | id="polyline40" /> | ||
| 176 | <!-- Arrowhead on XXXpoint 4050 6600 - 4050 4290--> | ||
| 177 | <!-- Line --> | ||
| 178 | <polyline | ||
| 179 | points="1050,6600 1050,4414 " | ||
| 180 | style="stroke:#00d1d1;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 181 | id="polyline44" /> | ||
| 182 | <!-- Arrowhead on XXXpoint 1050 6600 - 1050 4290--> | ||
| 183 | <!-- Line --> | ||
| 184 | <polyline | ||
| 185 | points="2250,5400 2250,4414 " | ||
| 186 | style="stroke:#00d1d1;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 187 | id="polyline48" /> | ||
| 188 | <!-- Arrowhead on XXXpoint 2250 5400 - 2250 4290--> | ||
| 189 | <!-- Line --> | ||
| 190 | <polyline | ||
| 191 | points="2250,8100 2250,6364 " | ||
| 192 | style="stroke:#00ff00;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 193 | id="polyline52" /> | ||
| 194 | <!-- Arrowhead on XXXpoint 2250 8100 - 2250 6240--> | ||
| 195 | <!-- Line --> | ||
| 196 | <polyline | ||
| 197 | points="1050,9300 1050,7564 " | ||
| 198 | style="stroke:#00ff00;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 199 | id="polyline56" /> | ||
| 200 | <!-- Arrowhead on XXXpoint 1050 9300 - 1050 7440--> | ||
| 201 | <!-- Line --> | ||
| 202 | <polyline | ||
| 203 | points="4050,9300 4050,7564 " | ||
| 204 | style="stroke:#00ff00;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 205 | id="polyline60" /> | ||
| 206 | <!-- Arrowhead on XXXpoint 4050 9300 - 4050 7440--> | ||
| 207 | <!-- Line --> | ||
| 208 | <polyline | ||
| 209 | points="5250,8100 5250,6364 " | ||
| 210 | style="stroke:#00ff00;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 211 | id="polyline64" /> | ||
| 212 | <!-- Arrowhead on XXXpoint 5250 8100 - 5250 6240--> | ||
| 213 | <!-- Circle --> | ||
| 214 | <circle | ||
| 215 | cx="2850" | ||
| 216 | cy="3900" | ||
| 217 | r="76" | ||
| 218 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 219 | id="circle68" /> | ||
| 220 | <!-- Circle --> | ||
| 221 | <circle | ||
| 222 | cx="3150" | ||
| 223 | cy="3900" | ||
| 224 | r="76" | ||
| 225 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 226 | id="circle70" /> | ||
| 227 | <!-- Circle --> | ||
| 228 | <circle | ||
| 229 | cx="3450" | ||
| 230 | cy="3900" | ||
| 231 | r="76" | ||
| 232 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 233 | id="circle72" /> | ||
| 234 | <!-- Circle --> | ||
| 235 | <circle | ||
| 236 | cx="1350" | ||
| 237 | cy="5100" | ||
| 238 | r="76" | ||
| 239 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 240 | id="circle74" /> | ||
| 241 | <!-- Circle --> | ||
| 242 | <circle | ||
| 243 | cx="1650" | ||
| 244 | cy="5100" | ||
| 245 | r="76" | ||
| 246 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 247 | id="circle76" /> | ||
| 248 | <!-- Circle --> | ||
| 249 | <circle | ||
| 250 | cx="1950" | ||
| 251 | cy="5100" | ||
| 252 | r="76" | ||
| 253 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 254 | id="circle78" /> | ||
| 255 | <!-- Circle --> | ||
| 256 | <circle | ||
| 257 | cx="4350" | ||
| 258 | cy="5100" | ||
| 259 | r="76" | ||
| 260 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 261 | id="circle80" /> | ||
| 262 | <!-- Circle --> | ||
| 263 | <circle | ||
| 264 | cx="4650" | ||
| 265 | cy="5100" | ||
| 266 | r="76" | ||
| 267 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 268 | id="circle82" /> | ||
| 269 | <!-- Circle --> | ||
| 270 | <circle | ||
| 271 | cx="4950" | ||
| 272 | cy="5100" | ||
| 273 | r="76" | ||
| 274 | style="fill:#000000;stroke:#000000;stroke-width:14;" | ||
| 275 | id="circle84" /> | ||
| 276 | <!-- Line: box --> | ||
| 277 | <rect | ||
| 278 | x="750" | ||
| 279 | y="3450" | ||
| 280 | width="1800" | ||
| 281 | height="900" | ||
| 282 | rx="0" | ||
| 283 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 284 | id="rect86" /> | ||
| 285 | <!-- Line: box --> | ||
| 286 | <rect | ||
| 287 | x="300" | ||
| 288 | y="6600" | ||
| 289 | width="1500" | ||
| 290 | height="900" | ||
| 291 | rx="0" | ||
| 292 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 293 | id="rect88" /> | ||
| 294 | <!-- Line: box --> | ||
| 295 | <rect | ||
| 296 | x="4500" | ||
| 297 | y="5400" | ||
| 298 | width="1500" | ||
| 299 | height="900" | ||
| 300 | rx="0" | ||
| 301 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 302 | id="rect90" /> | ||
| 303 | <!-- Line: box --> | ||
| 304 | <rect | ||
| 305 | x="3300" | ||
| 306 | y="6600" | ||
| 307 | width="1500" | ||
| 308 | height="900" | ||
| 309 | rx="0" | ||
| 310 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 311 | id="rect92" /> | ||
| 312 | <!-- Line: box --> | ||
| 313 | <rect | ||
| 314 | x="2250" | ||
| 315 | y="1650" | ||
| 316 | width="1800" | ||
| 317 | height="900" | ||
| 318 | rx="0" | ||
| 319 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 320 | id="rect94" /> | ||
| 321 | <!-- Line: box --> | ||
| 322 | <rect | ||
| 323 | x="0" | ||
| 324 | y="9300" | ||
| 325 | width="2100" | ||
| 326 | height="900" | ||
| 327 | rx="0" | ||
| 328 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 329 | id="rect96" /> | ||
| 330 | <!-- Line: box --> | ||
| 331 | <rect | ||
| 332 | x="1350" | ||
| 333 | y="8100" | ||
| 334 | width="2100" | ||
| 335 | height="900" | ||
| 336 | rx="0" | ||
| 337 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 338 | id="rect98" /> | ||
| 339 | <!-- Line: box --> | ||
| 340 | <rect | ||
| 341 | x="3000" | ||
| 342 | y="9300" | ||
| 343 | width="2100" | ||
| 344 | height="900" | ||
| 345 | rx="0" | ||
| 346 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 347 | id="rect100" /> | ||
| 348 | <!-- Line: box --> | ||
| 349 | <rect | ||
| 350 | x="4350" | ||
| 351 | y="8100" | ||
| 352 | width="2100" | ||
| 353 | height="900" | ||
| 354 | rx="0" | ||
| 355 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#00ff00; " | ||
| 356 | id="rect102" /> | ||
| 357 | <!-- Line: box --> | ||
| 358 | <rect | ||
| 359 | x="1500" | ||
| 360 | y="5400" | ||
| 361 | width="1500" | ||
| 362 | height="900" | ||
| 363 | rx="0" | ||
| 364 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 365 | id="rect104" /> | ||
| 366 | <!-- Line --> | ||
| 367 | <polygon | ||
| 368 | points="5550,3450 7350,2850 7350,5100 5550,4350 5550,3450 " | ||
| 369 | style="stroke:#000000;stroke-width:14; stroke-linejoin:miter; stroke-linecap:butt; stroke-dasharray:120 120;fill:#ffbfbf; " | ||
| 370 | id="polygon106" /> | ||
| 371 | <!-- Line --> | ||
| 372 | <polyline | ||
| 373 | points="9300,3150 10734,3150 " | ||
| 374 | style="stroke:#000000;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 375 | id="polyline108" /> | ||
| 376 | <!-- Arrowhead on XXXpoint 9300 3150 - 10860 3150--> | ||
| 377 | <!-- Line: box --> | ||
| 378 | <rect | ||
| 379 | x="10800" | ||
| 380 | y="2850" | ||
| 381 | width="1200" | ||
| 382 | height="750" | ||
| 383 | rx="0" | ||
| 384 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 385 | id="rect112" /> | ||
| 386 | <!-- Line --> | ||
| 387 | <polyline | ||
| 388 | points="11400,3600 11400,4284 " | ||
| 389 | style="stroke:#000000;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 390 | id="polyline114" /> | ||
| 391 | <!-- Arrowhead on XXXpoint 11400 3600 - 11400 4410--> | ||
| 392 | <!-- Line: box --> | ||
| 393 | <rect | ||
| 394 | x="10800" | ||
| 395 | y="4350" | ||
| 396 | width="1200" | ||
| 397 | height="750" | ||
| 398 | rx="0" | ||
| 399 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 400 | id="rect118" /> | ||
| 401 | <!-- Line --> | ||
| 402 | <polyline | ||
| 403 | points="11400,5100 11400,5784 " | ||
| 404 | style="stroke:#000000;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 405 | id="polyline120" /> | ||
| 406 | <!-- Arrowhead on XXXpoint 11400 5100 - 11400 5910--> | ||
| 407 | <!-- Line: box --> | ||
| 408 | <rect | ||
| 409 | x="10800" | ||
| 410 | y="5850" | ||
| 411 | width="1200" | ||
| 412 | height="750" | ||
| 413 | rx="0" | ||
| 414 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 415 | id="rect124" /> | ||
| 416 | <!-- Line --> | ||
| 417 | <polyline | ||
| 418 | points="9300,3900 9900,3900 9900,4650 10734,4650 " | ||
| 419 | style="stroke:#000000;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 420 | id="polyline126" /> | ||
| 421 | <!-- Arrowhead on XXXpoint 9900 4650 - 10860 4650--> | ||
| 422 | <!-- Line --> | ||
| 423 | <polyline | ||
| 424 | points="9300,4650 9600,4650 9600,6150 10734,6150 " | ||
| 425 | style="stroke:#000000;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 426 | id="polyline130" /> | ||
| 427 | <!-- Arrowhead on XXXpoint 9600 6150 - 10860 6150--> | ||
| 428 | <!-- Text --> | ||
| 429 | <text | ||
| 430 | xml:space="preserve" | ||
| 431 | x="6450" | ||
| 432 | y="300" | ||
| 433 | fill="#000000" | ||
| 434 | font-family="Helvetica" | ||
| 435 | font-style="normal" | ||
| 436 | font-weight="normal" | ||
| 437 | font-size="192" | ||
| 438 | text-anchor="end" | ||
| 439 | id="text134">rcu_bh</text> | ||
| 440 | <!-- Text --> | ||
| 441 | <text | ||
| 442 | xml:space="preserve" | ||
| 443 | x="3150" | ||
| 444 | y="1950" | ||
| 445 | fill="#000000" | ||
| 446 | font-family="Courier" | ||
| 447 | font-style="normal" | ||
| 448 | font-weight="bold" | ||
| 449 | font-size="192" | ||
| 450 | text-anchor="middle" | ||
| 451 | id="text136">struct</text> | ||
| 452 | <!-- Text --> | ||
| 453 | <text | ||
| 454 | xml:space="preserve" | ||
| 455 | x="3150" | ||
| 456 | y="2250" | ||
| 457 | fill="#000000" | ||
| 458 | font-family="Courier" | ||
| 459 | font-style="normal" | ||
| 460 | font-weight="bold" | ||
| 461 | font-size="192" | ||
| 462 | text-anchor="middle" | ||
| 463 | id="text138">rcu_node</text> | ||
| 464 | <!-- Text --> | ||
| 465 | <text | ||
| 466 | xml:space="preserve" | ||
| 467 | x="1650" | ||
| 468 | y="3750" | ||
| 469 | fill="#000000" | ||
| 470 | font-family="Courier" | ||
| 471 | font-style="normal" | ||
| 472 | font-weight="bold" | ||
| 473 | font-size="192" | ||
| 474 | text-anchor="middle" | ||
| 475 | id="text140">struct</text> | ||
| 476 | <!-- Text --> | ||
| 477 | <text | ||
| 478 | xml:space="preserve" | ||
| 479 | x="1650" | ||
| 480 | y="4050" | ||
| 481 | fill="#000000" | ||
| 482 | font-family="Courier" | ||
| 483 | font-style="normal" | ||
| 484 | font-weight="bold" | ||
| 485 | font-size="192" | ||
| 486 | text-anchor="middle" | ||
| 487 | id="text142">rcu_node</text> | ||
| 488 | <!-- Text --> | ||
| 489 | <text | ||
| 490 | xml:space="preserve" | ||
| 491 | x="2250" | ||
| 492 | y="5700" | ||
| 493 | fill="#000000" | ||
| 494 | font-family="Courier" | ||
| 495 | font-style="normal" | ||
| 496 | font-weight="bold" | ||
| 497 | font-size="192" | ||
| 498 | text-anchor="middle" | ||
| 499 | id="text144">struct</text> | ||
| 500 | <!-- Text --> | ||
| 501 | <text | ||
| 502 | xml:space="preserve" | ||
| 503 | x="2250" | ||
| 504 | y="6000" | ||
| 505 | fill="#000000" | ||
| 506 | font-family="Courier" | ||
| 507 | font-style="normal" | ||
| 508 | font-weight="bold" | ||
| 509 | font-size="192" | ||
| 510 | text-anchor="middle" | ||
| 511 | id="text146">rcu_data</text> | ||
| 512 | <!-- Text --> | ||
| 513 | <text | ||
| 514 | xml:space="preserve" | ||
| 515 | x="1050" | ||
| 516 | y="6900" | ||
| 517 | fill="#000000" | ||
| 518 | font-family="Courier" | ||
| 519 | font-style="normal" | ||
| 520 | font-weight="bold" | ||
| 521 | font-size="192" | ||
| 522 | text-anchor="middle" | ||
| 523 | id="text148">struct</text> | ||
| 524 | <!-- Text --> | ||
| 525 | <text | ||
| 526 | xml:space="preserve" | ||
| 527 | x="1050" | ||
| 528 | y="7200" | ||
| 529 | fill="#000000" | ||
| 530 | font-family="Courier" | ||
| 531 | font-style="normal" | ||
| 532 | font-weight="bold" | ||
| 533 | font-size="192" | ||
| 534 | text-anchor="middle" | ||
| 535 | id="text150">rcu_data</text> | ||
| 536 | <!-- Text --> | ||
| 537 | <text | ||
| 538 | xml:space="preserve" | ||
| 539 | x="5250" | ||
| 540 | y="5700" | ||
| 541 | fill="#000000" | ||
| 542 | font-family="Courier" | ||
| 543 | font-style="normal" | ||
| 544 | font-weight="bold" | ||
| 545 | font-size="192" | ||
| 546 | text-anchor="middle" | ||
| 547 | id="text152">struct</text> | ||
| 548 | <!-- Text --> | ||
| 549 | <text | ||
| 550 | xml:space="preserve" | ||
| 551 | x="5250" | ||
| 552 | y="6000" | ||
| 553 | fill="#000000" | ||
| 554 | font-family="Courier" | ||
| 555 | font-style="normal" | ||
| 556 | font-weight="bold" | ||
| 557 | font-size="192" | ||
| 558 | text-anchor="middle" | ||
| 559 | id="text154">rcu_data</text> | ||
| 560 | <!-- Text --> | ||
| 561 | <text | ||
| 562 | xml:space="preserve" | ||
| 563 | x="4050" | ||
| 564 | y="6900" | ||
| 565 | fill="#000000" | ||
| 566 | font-family="Courier" | ||
| 567 | font-style="normal" | ||
| 568 | font-weight="bold" | ||
| 569 | font-size="192" | ||
| 570 | text-anchor="middle" | ||
| 571 | id="text156">struct</text> | ||
| 572 | <!-- Text --> | ||
| 573 | <text | ||
| 574 | xml:space="preserve" | ||
| 575 | x="4050" | ||
| 576 | y="7200" | ||
| 577 | fill="#000000" | ||
| 578 | font-family="Courier" | ||
| 579 | font-style="normal" | ||
| 580 | font-weight="bold" | ||
| 581 | font-size="192" | ||
| 582 | text-anchor="middle" | ||
| 583 | id="text158">rcu_data</text> | ||
| 584 | <!-- Text --> | ||
| 585 | <text | ||
| 586 | xml:space="preserve" | ||
| 587 | x="450" | ||
| 588 | y="1350" | ||
| 589 | fill="#000000" | ||
| 590 | font-family="Courier" | ||
| 591 | font-style="normal" | ||
| 592 | font-weight="bold" | ||
| 593 | font-size="192" | ||
| 594 | text-anchor="start" | ||
| 595 | id="text160">struct rcu_state</text> | ||
| 596 | <!-- Text --> | ||
| 597 | <text | ||
| 598 | xml:space="preserve" | ||
| 599 | x="1050" | ||
| 600 | y="9600" | ||
| 601 | fill="#000000" | ||
| 602 | font-family="Courier" | ||
| 603 | font-style="normal" | ||
| 604 | font-weight="bold" | ||
| 605 | font-size="192" | ||
| 606 | text-anchor="middle" | ||
| 607 | id="text162">struct</text> | ||
| 608 | <!-- Text --> | ||
| 609 | <text | ||
| 610 | xml:space="preserve" | ||
| 611 | x="1050" | ||
| 612 | y="9900" | ||
| 613 | fill="#000000" | ||
| 614 | font-family="Courier" | ||
| 615 | font-style="normal" | ||
| 616 | font-weight="bold" | ||
| 617 | font-size="192" | ||
| 618 | text-anchor="middle" | ||
| 619 | id="text164">rcu_dynticks</text> | ||
| 620 | <!-- Text --> | ||
| 621 | <text | ||
| 622 | xml:space="preserve" | ||
| 623 | x="4050" | ||
| 624 | y="9600" | ||
| 625 | fill="#000000" | ||
| 626 | font-family="Courier" | ||
| 627 | font-style="normal" | ||
| 628 | font-weight="bold" | ||
| 629 | font-size="192" | ||
| 630 | text-anchor="middle" | ||
| 631 | id="text166">struct</text> | ||
| 632 | <!-- Text --> | ||
| 633 | <text | ||
| 634 | xml:space="preserve" | ||
| 635 | x="4050" | ||
| 636 | y="9900" | ||
| 637 | fill="#000000" | ||
| 638 | font-family="Courier" | ||
| 639 | font-style="normal" | ||
| 640 | font-weight="bold" | ||
| 641 | font-size="192" | ||
| 642 | text-anchor="middle" | ||
| 643 | id="text168">rcu_dynticks</text> | ||
| 644 | <!-- Text --> | ||
| 645 | <text | ||
| 646 | xml:space="preserve" | ||
| 647 | x="2400" | ||
| 648 | y="8400" | ||
| 649 | fill="#000000" | ||
| 650 | font-family="Courier" | ||
| 651 | font-style="normal" | ||
| 652 | font-weight="bold" | ||
| 653 | font-size="192" | ||
| 654 | text-anchor="middle" | ||
| 655 | id="text170">struct</text> | ||
| 656 | <!-- Text --> | ||
| 657 | <text | ||
| 658 | xml:space="preserve" | ||
| 659 | x="2400" | ||
| 660 | y="8700" | ||
| 661 | fill="#000000" | ||
| 662 | font-family="Courier" | ||
| 663 | font-style="normal" | ||
| 664 | font-weight="bold" | ||
| 665 | font-size="192" | ||
| 666 | text-anchor="middle" | ||
| 667 | id="text172">rcu_dynticks</text> | ||
| 668 | <!-- Text --> | ||
| 669 | <text | ||
| 670 | xml:space="preserve" | ||
| 671 | x="5400" | ||
| 672 | y="8400" | ||
| 673 | fill="#000000" | ||
| 674 | font-family="Courier" | ||
| 675 | font-style="normal" | ||
| 676 | font-weight="bold" | ||
| 677 | font-size="192" | ||
| 678 | text-anchor="middle" | ||
| 679 | id="text174">struct</text> | ||
| 680 | <!-- Text --> | ||
| 681 | <text | ||
| 682 | xml:space="preserve" | ||
| 683 | x="5400" | ||
| 684 | y="8700" | ||
| 685 | fill="#000000" | ||
| 686 | font-family="Courier" | ||
| 687 | font-style="normal" | ||
| 688 | font-weight="bold" | ||
| 689 | font-size="192" | ||
| 690 | text-anchor="middle" | ||
| 691 | id="text176">rcu_dynticks</text> | ||
| 692 | <!-- Text --> | ||
| 693 | <text | ||
| 694 | xml:space="preserve" | ||
| 695 | x="6000" | ||
| 696 | y="750" | ||
| 697 | fill="#000000" | ||
| 698 | font-family="Helvetica" | ||
| 699 | font-style="normal" | ||
| 700 | font-weight="normal" | ||
| 701 | font-size="192" | ||
| 702 | text-anchor="end" | ||
| 703 | id="text178">rcu_sched</text> | ||
| 704 | <!-- Text --> | ||
| 705 | <text | ||
| 706 | xml:space="preserve" | ||
| 707 | x="11400" | ||
| 708 | y="3300" | ||
| 709 | fill="#000000" | ||
| 710 | font-family="Helvetica" | ||
| 711 | font-style="normal" | ||
| 712 | font-weight="normal" | ||
| 713 | font-size="216" | ||
| 714 | text-anchor="middle" | ||
| 715 | id="text180">T3</text> | ||
| 716 | <!-- Text --> | ||
| 717 | <text | ||
| 718 | xml:space="preserve" | ||
| 719 | x="11400" | ||
| 720 | y="4800" | ||
| 721 | fill="#000000" | ||
| 722 | font-family="Helvetica" | ||
| 723 | font-style="normal" | ||
| 724 | font-weight="normal" | ||
| 725 | font-size="216" | ||
| 726 | text-anchor="middle" | ||
| 727 | id="text182">T2</text> | ||
| 728 | <!-- Text --> | ||
| 729 | <text | ||
| 730 | xml:space="preserve" | ||
| 731 | x="11400" | ||
| 732 | y="6300" | ||
| 733 | fill="#000000" | ||
| 734 | font-family="Helvetica" | ||
| 735 | font-style="normal" | ||
| 736 | font-weight="normal" | ||
| 737 | font-size="216" | ||
| 738 | text-anchor="middle" | ||
| 739 | id="text184">T1</text> | ||
| 740 | <!-- Line --> | ||
| 741 | <polyline | ||
| 742 | points="5250,5400 5250,4414 " | ||
| 743 | style="stroke:#00d1d1;stroke-width:30.00057884;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 744 | id="polyline186" /> | ||
| 745 | <!-- Arrowhead on XXXpoint 5250 5400 - 5250 4290--> | ||
| 746 | <!-- Line: box --> | ||
| 747 | <rect | ||
| 748 | x="3750" | ||
| 749 | y="3450" | ||
| 750 | width="1800" | ||
| 751 | height="900" | ||
| 752 | rx="0" | ||
| 753 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 754 | id="rect190" /> | ||
| 755 | <!-- Line: box --> | ||
| 756 | <rect | ||
| 757 | x="7350" | ||
| 758 | y="2850" | ||
| 759 | width="1950" | ||
| 760 | height="750" | ||
| 761 | rx="0" | ||
| 762 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 763 | id="rect192" /> | ||
| 764 | <!-- Line: box --> | ||
| 765 | <rect | ||
| 766 | x="7350" | ||
| 767 | y="3600" | ||
| 768 | width="1950" | ||
| 769 | height="750" | ||
| 770 | rx="0" | ||
| 771 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 772 | id="rect194" /> | ||
| 773 | <!-- Line: box --> | ||
| 774 | <rect | ||
| 775 | x="7350" | ||
| 776 | y="4350" | ||
| 777 | width="1950" | ||
| 778 | height="750" | ||
| 779 | rx="0" | ||
| 780 | style="stroke:#000000;stroke-width:30; stroke-linejoin:miter; stroke-linecap:butt; fill:#ffbfbf; " | ||
| 781 | id="rect196" /> | ||
| 782 | <!-- Text --> | ||
| 783 | <text | ||
| 784 | xml:space="preserve" | ||
| 785 | x="4650" | ||
| 786 | y="4050" | ||
| 787 | fill="#000000" | ||
| 788 | font-family="Courier" | ||
| 789 | font-style="normal" | ||
| 790 | font-weight="bold" | ||
| 791 | font-size="192" | ||
| 792 | text-anchor="middle" | ||
| 793 | id="text198">rcu_node</text> | ||
| 794 | <!-- Text --> | ||
| 795 | <text | ||
| 796 | xml:space="preserve" | ||
| 797 | x="4650" | ||
| 798 | y="3750" | ||
| 799 | fill="#000000" | ||
| 800 | font-family="Courier" | ||
| 801 | font-style="normal" | ||
| 802 | font-weight="bold" | ||
| 803 | font-size="192" | ||
| 804 | text-anchor="middle" | ||
| 805 | id="text200">struct</text> | ||
| 806 | <!-- Text --> | ||
| 807 | <text | ||
| 808 | xml:space="preserve" | ||
| 809 | x="7500" | ||
| 810 | y="3300" | ||
| 811 | fill="#000000" | ||
| 812 | font-family="Courier" | ||
| 813 | font-style="normal" | ||
| 814 | font-weight="bold" | ||
| 815 | font-size="192" | ||
| 816 | text-anchor="start" | ||
| 817 | id="text202">blkd_tasks</text> | ||
| 818 | <!-- Text --> | ||
| 819 | <text | ||
| 820 | xml:space="preserve" | ||
| 821 | x="7500" | ||
| 822 | y="4050" | ||
| 823 | fill="#000000" | ||
| 824 | font-family="Courier" | ||
| 825 | font-style="normal" | ||
| 826 | font-weight="bold" | ||
| 827 | font-size="192" | ||
| 828 | text-anchor="start" | ||
| 829 | id="text204">gp_tasks</text> | ||
| 830 | <!-- Text --> | ||
| 831 | <text | ||
| 832 | xml:space="preserve" | ||
| 833 | x="7500" | ||
| 834 | y="4800" | ||
| 835 | fill="#000000" | ||
| 836 | font-family="Courier" | ||
| 837 | font-style="normal" | ||
| 838 | font-weight="bold" | ||
| 839 | font-size="192" | ||
| 840 | text-anchor="start" | ||
| 841 | id="text206">exp_tasks</text> | ||
| 842 | </g> | ||
| 843 | </svg> | ||
diff --git a/Documentation/RCU/Design/Data-Structures/nxtlist.svg b/Documentation/RCU/Design/Data-Structures/nxtlist.svg new file mode 100644 index 000000000000..abc4cc73a097 --- /dev/null +++ b/Documentation/RCU/Design/Data-Structures/nxtlist.svg | |||
| @@ -0,0 +1,396 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Creator: fig2dev Version 3.2 Patchlevel 5e --> | ||
| 3 | |||
| 4 | <!-- CreationDate: Wed Dec 9 17:39:46 2015 --> | ||
| 5 | |||
| 6 | <!-- Magnification: 3.000 --> | ||
| 7 | |||
| 8 | <svg | ||
| 9 | xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 10 | xmlns:cc="http://creativecommons.org/ns#" | ||
| 11 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 12 | xmlns:svg="http://www.w3.org/2000/svg" | ||
| 13 | xmlns="http://www.w3.org/2000/svg" | ||
| 14 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 15 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 16 | width="10.4in" | ||
| 17 | height="10.4in" | ||
| 18 | viewBox="-66 -66 12507 12507" | ||
| 19 | id="svg2" | ||
| 20 | version="1.1" | ||
| 21 | inkscape:version="0.48.4 r9939" | ||
| 22 | sodipodi:docname="nxtlist.fig"> | ||
| 23 | <metadata | ||
| 24 | id="metadata94"> | ||
| 25 | <rdf:RDF> | ||
| 26 | <cc:Work | ||
| 27 | rdf:about=""> | ||
| 28 | <dc:format>image/svg+xml</dc:format> | ||
| 29 | <dc:type | ||
| 30 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 31 | <dc:title></dc:title> | ||
| 32 | </cc:Work> | ||
| 33 | </rdf:RDF> | ||
| 34 | </metadata> | ||
| 35 | <defs | ||
| 36 | id="defs92"> | ||
| 37 | <marker | ||
| 38 | inkscape:stockid="Arrow1Mend" | ||
| 39 | orient="auto" | ||
| 40 | refY="0.0" | ||
| 41 | refX="0.0" | ||
| 42 | id="Arrow1Mend" | ||
| 43 | style="overflow:visible;"> | ||
| 44 | <path | ||
| 45 | id="path3852" | ||
| 46 | d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 47 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;" | ||
| 48 | transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 49 | </marker> | ||
| 50 | </defs> | ||
| 51 | <sodipodi:namedview | ||
| 52 | pagecolor="#ffffff" | ||
| 53 | bordercolor="#666666" | ||
| 54 | borderopacity="1" | ||
| 55 | objecttolerance="10" | ||
| 56 | gridtolerance="10" | ||
| 57 | guidetolerance="10" | ||
| 58 | inkscape:pageopacity="0" | ||
| 59 | inkscape:pageshadow="2" | ||
| 60 | inkscape:window-width="925" | ||
| 61 | inkscape:window-height="928" | ||
| 62 | id="namedview90" | ||
| 63 | showgrid="false" | ||
| 64 | inkscape:zoom="0.80021373" | ||
| 65 | inkscape:cx="467.99997" | ||
| 66 | inkscape:cy="467.99997" | ||
| 67 | inkscape:window-x="948" | ||
| 68 | inkscape:window-y="73" | ||
| 69 | inkscape:window-maximized="0" | ||
| 70 | inkscape:current-layer="g4" /> | ||
| 71 | <g | ||
| 72 | style="stroke-width:.025in; fill:none" | ||
| 73 | id="g4"> | ||
| 74 | <!-- Line: box --> | ||
| 75 | <rect | ||
| 76 | x="0" | ||
| 77 | y="0" | ||
| 78 | width="7875" | ||
| 79 | height="1125" | ||
| 80 | rx="0" | ||
| 81 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 82 | id="rect6" /> | ||
| 83 | <!-- Line: box --> | ||
| 84 | <rect | ||
| 85 | x="0" | ||
| 86 | y="1125" | ||
| 87 | width="7875" | ||
| 88 | height="1125" | ||
| 89 | rx="0" | ||
| 90 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 91 | id="rect8" /> | ||
| 92 | <!-- Line: box --> | ||
| 93 | <rect | ||
| 94 | x="0" | ||
| 95 | y="2250" | ||
| 96 | width="7875" | ||
| 97 | height="1125" | ||
| 98 | rx="0" | ||
| 99 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 100 | id="rect10" /> | ||
| 101 | <!-- Line: box --> | ||
| 102 | <rect | ||
| 103 | x="0" | ||
| 104 | y="3375" | ||
| 105 | width="7875" | ||
| 106 | height="1125" | ||
| 107 | rx="0" | ||
| 108 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 109 | id="rect12" /> | ||
| 110 | <!-- Line: box --> | ||
| 111 | <rect | ||
| 112 | x="0" | ||
| 113 | y="4500" | ||
| 114 | width="7875" | ||
| 115 | height="1125" | ||
| 116 | rx="0" | ||
| 117 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; fill:#87cfff; " | ||
| 118 | id="rect14" /> | ||
| 119 | <!-- Line: box --> | ||
| 120 | <rect | ||
| 121 | x="10575" | ||
| 122 | y="0" | ||
| 123 | width="1800" | ||
| 124 | height="1125" | ||
| 125 | rx="0" | ||
| 126 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 127 | id="rect16" /> | ||
| 128 | <!-- Line: box --> | ||
| 129 | <rect | ||
| 130 | x="10575" | ||
| 131 | y="1125" | ||
| 132 | width="1800" | ||
| 133 | height="1125" | ||
| 134 | rx="0" | ||
| 135 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 136 | id="rect18" /> | ||
| 137 | <!-- Line --> | ||
| 138 | <polyline | ||
| 139 | points="11475,2250 11475,3276 " | ||
| 140 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 141 | id="polyline20" /> | ||
| 142 | <!-- Arrowhead on XXXpoint 11475 2250 - 11475 3465--> | ||
| 143 | <!-- Line: box --> | ||
| 144 | <rect | ||
| 145 | x="10575" | ||
| 146 | y="6750" | ||
| 147 | width="1800" | ||
| 148 | height="1125" | ||
| 149 | rx="0" | ||
| 150 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 151 | id="rect24" /> | ||
| 152 | <!-- Line: box --> | ||
| 153 | <rect | ||
| 154 | x="10575" | ||
| 155 | y="7875" | ||
| 156 | width="1800" | ||
| 157 | height="1125" | ||
| 158 | rx="0" | ||
| 159 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 160 | id="rect26" /> | ||
| 161 | <!-- Line: box --> | ||
| 162 | <rect | ||
| 163 | x="10575" | ||
| 164 | y="10125" | ||
| 165 | width="1800" | ||
| 166 | height="1125" | ||
| 167 | rx="0" | ||
| 168 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 169 | id="rect28" /> | ||
| 170 | <!-- Line: box --> | ||
| 171 | <rect | ||
| 172 | x="10575" | ||
| 173 | y="11250" | ||
| 174 | width="1800" | ||
| 175 | height="1125" | ||
| 176 | rx="0" | ||
| 177 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 178 | id="rect30" /> | ||
| 179 | <!-- Line: box --> | ||
| 180 | <rect | ||
| 181 | x="10575" | ||
| 182 | y="3375" | ||
| 183 | width="1800" | ||
| 184 | height="1125" | ||
| 185 | rx="0" | ||
| 186 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 187 | id="rect32" /> | ||
| 188 | <!-- Line --> | ||
| 189 | <polyline | ||
| 190 | points="11475,5625 11475,6651 " | ||
| 191 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 192 | id="polyline34" /> | ||
| 193 | <!-- Arrowhead on XXXpoint 11475 5625 - 11475 6840--> | ||
| 194 | <!-- Line --> | ||
| 195 | <polyline | ||
| 196 | points="7875,225 10476,225 " | ||
| 197 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 198 | id="polyline38" /> | ||
| 199 | <!-- Arrowhead on XXXpoint 7875 225 - 10665 225--> | ||
| 200 | <!-- Line --> | ||
| 201 | <polyline | ||
| 202 | points="7875,1350 9675,1350 9675,675 7971,675 " | ||
| 203 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 204 | id="polyline42" /> | ||
| 205 | <!-- Arrowhead on XXXpoint 9675 675 - 7785 675--> | ||
| 206 | <!-- Line --> | ||
| 207 | <polyline | ||
| 208 | points="7875,2475 9675,2475 9675,4725 10476,4725 " | ||
| 209 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 210 | id="polyline46" /> | ||
| 211 | <!-- Arrowhead on XXXpoint 9675 4725 - 10665 4725--> | ||
| 212 | <!-- Line --> | ||
| 213 | <polyline | ||
| 214 | points="7875,3600 9225,3600 9225,5175 10476,5175 " | ||
| 215 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 216 | id="polyline50" /> | ||
| 217 | <!-- Arrowhead on XXXpoint 9225 5175 - 10665 5175--> | ||
| 218 | <!-- Line --> | ||
| 219 | <polyline | ||
| 220 | points="7875,4725 8775,4725 8775,11475 10476,11475 " | ||
| 221 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 222 | id="polyline54" /> | ||
| 223 | <!-- Arrowhead on XXXpoint 8775 11475 - 10665 11475--> | ||
| 224 | <!-- Line: box --> | ||
| 225 | <rect | ||
| 226 | x="10575" | ||
| 227 | y="4500" | ||
| 228 | width="1800" | ||
| 229 | height="1125" | ||
| 230 | rx="0" | ||
| 231 | style="stroke:#000000;stroke-width:45; stroke-linejoin:miter; stroke-linecap:butt; " | ||
| 232 | id="rect58" /> | ||
| 233 | <!-- Line --> | ||
| 234 | <polyline | ||
| 235 | points="11475,9000 11475,10026 " | ||
| 236 | style="stroke:#000000;stroke-width:45.00382345;stroke-linejoin:miter;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" | ||
| 237 | id="polyline60" /> | ||
| 238 | <!-- Arrowhead on XXXpoint 11475 9000 - 11475 10215--> | ||
| 239 | <!-- Text --> | ||
| 240 | <text | ||
| 241 | xml:space="preserve" | ||
| 242 | x="225" | ||
| 243 | y="675" | ||
| 244 | fill="#000000" | ||
| 245 | font-family="Courier" | ||
| 246 | font-style="normal" | ||
| 247 | font-weight="bold" | ||
| 248 | font-size="324" | ||
| 249 | text-anchor="start" | ||
| 250 | id="text64">nxtlist</text> | ||
| 251 | <!-- Text --> | ||
| 252 | <text | ||
| 253 | xml:space="preserve" | ||
| 254 | x="225" | ||
| 255 | y="1800" | ||
| 256 | fill="#000000" | ||
| 257 | font-family="Courier" | ||
| 258 | font-style="normal" | ||
| 259 | font-weight="bold" | ||
| 260 | font-size="324" | ||
| 261 | text-anchor="start" | ||
| 262 | id="text66">nxttail[RCU_DONE_TAIL]</text> | ||
| 263 | <!-- Text --> | ||
| 264 | <text | ||
| 265 | xml:space="preserve" | ||
| 266 | x="225" | ||
| 267 | y="2925" | ||
| 268 | fill="#000000" | ||
| 269 | font-family="Courier" | ||
| 270 | font-style="normal" | ||
| 271 | font-weight="bold" | ||
| 272 | font-size="324" | ||
| 273 | text-anchor="start" | ||
| 274 | id="text68">nxttail[RCU_WAIT_TAIL]</text> | ||
| 275 | <!-- Text --> | ||
| 276 | <text | ||
| 277 | xml:space="preserve" | ||
| 278 | x="225" | ||
| 279 | y="4050" | ||
| 280 | fill="#000000" | ||
| 281 | font-family="Courier" | ||
| 282 | font-style="normal" | ||
| 283 | font-weight="bold" | ||
| 284 | font-size="324" | ||
| 285 | text-anchor="start" | ||
| 286 | id="text70">nxttail[RCU_NEXT_READY_TAIL]</text> | ||
| 287 | <!-- Text --> | ||
| 288 | <text | ||
| 289 | xml:space="preserve" | ||
| 290 | x="225" | ||
| 291 | y="5175" | ||
| 292 | fill="#000000" | ||
| 293 | font-family="Courier" | ||
| 294 | font-style="normal" | ||
| 295 | font-weight="bold" | ||
| 296 | font-size="324" | ||
| 297 | text-anchor="start" | ||
| 298 | id="text72">nxttail[RCU_NEXT_TAIL]</text> | ||
| 299 | <!-- Text --> | ||
| 300 | <text | ||
| 301 | xml:space="preserve" | ||
| 302 | x="11475" | ||
| 303 | y="675" | ||
| 304 | fill="#000000" | ||
| 305 | font-family="Helvetica" | ||
| 306 | font-style="normal" | ||
| 307 | font-weight="normal" | ||
| 308 | font-size="324" | ||
| 309 | text-anchor="middle" | ||
| 310 | id="text74">CB 1</text> | ||
| 311 | <!-- Text --> | ||
| 312 | <text | ||
| 313 | xml:space="preserve" | ||
| 314 | x="11475" | ||
| 315 | y="1800" | ||
| 316 | fill="#000000" | ||
| 317 | font-family="Helvetica" | ||
| 318 | font-style="normal" | ||
| 319 | font-weight="normal" | ||
| 320 | font-size="324" | ||
| 321 | text-anchor="middle" | ||
| 322 | id="text76">next</text> | ||
| 323 | <!-- Text --> | ||
| 324 | <text | ||
| 325 | xml:space="preserve" | ||
| 326 | x="11475" | ||
| 327 | y="7425" | ||
| 328 | fill="#000000" | ||
| 329 | font-family="Helvetica" | ||
| 330 | font-style="normal" | ||
| 331 | font-weight="normal" | ||
| 332 | font-size="324" | ||
| 333 | text-anchor="middle" | ||
| 334 | id="text78">CB 3</text> | ||
| 335 | <!-- Text --> | ||
| 336 | <text | ||
| 337 | xml:space="preserve" | ||
| 338 | x="11475" | ||
| 339 | y="8550" | ||
| 340 | fill="#000000" | ||
| 341 | font-family="Helvetica" | ||
| 342 | font-style="normal" | ||
| 343 | font-weight="normal" | ||
| 344 | font-size="324" | ||
| 345 | text-anchor="middle" | ||
| 346 | id="text80">next</text> | ||
| 347 | <!-- Text --> | ||
| 348 | <text | ||
| 349 | xml:space="preserve" | ||
| 350 | x="11475" | ||
| 351 | y="10800" | ||
| 352 | fill="#000000" | ||
| 353 | font-family="Helvetica" | ||
| 354 | font-style="normal" | ||
| 355 | font-weight="normal" | ||
| 356 | font-size="324" | ||
| 357 | text-anchor="middle" | ||
| 358 | id="text82">CB 4</text> | ||
| 359 | <!-- Text --> | ||
| 360 | <text | ||
| 361 | xml:space="preserve" | ||
| 362 | x="11475" | ||
| 363 | y="11925" | ||
| 364 | fill="#000000" | ||
| 365 | font-family="Helvetica" | ||
| 366 | font-style="normal" | ||
| 367 | font-weight="normal" | ||
| 368 | font-size="324" | ||
| 369 | text-anchor="middle" | ||
| 370 | id="text84">next</text> | ||
| 371 | <!-- Text --> | ||
| 372 | <text | ||
| 373 | xml:space="preserve" | ||
| 374 | x="11475" | ||
| 375 | y="4050" | ||
| 376 | fill="#000000" | ||
| 377 | font-family="Helvetica" | ||
| 378 | font-style="normal" | ||
| 379 | font-weight="normal" | ||
| 380 | font-size="324" | ||
| 381 | text-anchor="middle" | ||
| 382 | id="text86">CB 2</text> | ||
| 383 | <!-- Text --> | ||
| 384 | <text | ||
| 385 | xml:space="preserve" | ||
| 386 | x="11475" | ||
| 387 | y="5175" | ||
| 388 | fill="#000000" | ||
| 389 | font-family="Helvetica" | ||
| 390 | font-style="normal" | ||
| 391 | font-weight="normal" | ||
| 392 | font-size="324" | ||
| 393 | text-anchor="middle" | ||
| 394 | id="text88">next</text> | ||
| 395 | </g> | ||
| 396 | </svg> | ||
