Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

doc: Remove rcu_dynticks from Data-Structures

rcu_dynticks was folded into rcu_data structure. Update the data
structures RCU document accordingly.

Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Cc: <kernel-team@android.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>

authored by

Joel Fernandes (Google) and committed by
Paul E. McKenney
c9b6f899 5cc379a4

+25 -760
-695
Documentation/RCU/Design/Data-Structures/BigTreeClassicRCUBHdyntick.svg
··· 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>
+25 -65
Documentation/RCU/Design/Data-Structures/Data-Structures.html
··· 23 23 The <tt>rcu_segcblist</tt> Structure</a> 24 24 <li> <a href="#The rcu_data Structure"> 25 25 The <tt>rcu_data</tt> Structure</a> 26 - <li> <a href="#The rcu_dynticks Structure"> 27 - The <tt>rcu_dynticks</tt> Structure</a> 28 26 <li> <a href="#The rcu_head Structure"> 29 27 The <tt>rcu_head</tt> Structure</a> 30 28 <li> <a href="#RCU-Specific Fields in the task_struct Structure"> ··· 172 174 RCU must handle dyntick-idle CPUs specially 173 175 because RCU would otherwise wake up each CPU on every grace period, 174 176 which would defeat the whole purpose of <tt>CONFIG_NO_HZ_IDLE</tt>. 175 - RCU uses the <tt>rcu_dynticks</tt> structure to track 176 - which CPUs are in dyntick idle mode, as shown below: 177 - 178 - </p><p><img src="BigTreeClassicRCUBHdyntick.svg" alt="BigTreeClassicRCUBHdyntick.svg" width="33%"> 179 - 180 - </p><p>However, if a CPU is in dyntick-idle mode, it is in that mode 181 - for all flavors of RCU. 182 - Therefore, a single <tt>rcu_dynticks</tt> structure is allocated per 183 - CPU, and all of a given CPU's <tt>rcu_data</tt> structures share 184 - that <tt>rcu_dynticks</tt>, as shown in the figure. 177 + RCU uses the dynticks related fields in the <tt>rcu_data</tt> structure 178 + to track which CPUs are in dyntick idle mode. 185 179 186 180 </p><p>Kernels built with <tt>CONFIG_PREEMPT_RCU</tt> support 187 181 rcu_preempt in addition to rcu_sched and rcu_bh, as shown below: ··· 206 216 <li> Each <tt>rcu_node</tt> structure has a spinlock. 207 217 <li> The fields in <tt>rcu_data</tt> are private to the corresponding 208 218 CPU, although a few can be read and written by other CPUs. 209 - <li> Similarly, the fields in <tt>rcu_dynticks</tt> are private 210 - to the corresponding CPU, although a few can be read by 211 - other CPUs. 212 219 </ol> 213 220 214 221 <p>It is important to note that different data structures can have ··· 261 274 access to this information from the corresponding CPU. 262 275 Finally, this structure records past dyntick-idle state 263 276 for the corresponding CPU and also tracks statistics. 264 - <li> <tt>rcu_dynticks</tt>: 265 - This per-CPU structure tracks the current dyntick-idle 266 - state for the corresponding CPU. 267 - Unlike the other three structures, the <tt>rcu_dynticks</tt> 268 - structure is not replicated per RCU flavor. 269 277 <li> <tt>rcu_head</tt>: 270 278 This structure represents RCU callbacks, and is the 271 279 only structure allocated and managed by RCU users. ··· 271 289 <p>If all you wanted from this article was a general notion of how 272 290 RCU's data structures are related, you are done. 273 291 Otherwise, each of the following sections give more details on 274 - the <tt>rcu_state</tt>, <tt>rcu_node</tt>, <tt>rcu_data</tt>, 275 - and <tt>rcu_dynticks</tt> data structures. 292 + the <tt>rcu_state</tt>, <tt>rcu_node</tt> and <tt>rcu_data</tt> data 293 + structures. 276 294 277 295 <h3><a name="The rcu_state Structure"> 278 296 The <tt>rcu_state</tt> Structure</a></h3> ··· 999 1017 1000 1018 <pre> 1001 1019 1 int cpu; 1002 - 2 struct rcu_state *rsp; 1003 - 3 struct rcu_node *mynode; 1004 - 4 struct rcu_dynticks *dynticks; 1005 - 5 unsigned long grpmask; 1006 - 6 bool beenonline; 1020 + 2 struct rcu_node *mynode; 1021 + 3 unsigned long grpmask; 1022 + 4 bool beenonline; 1007 1023 </pre> 1008 1024 1009 1025 <p>The <tt>-&gt;cpu</tt> field contains the number of the 1010 - corresponding CPU, the <tt>-&gt;rsp</tt> pointer references 1011 - the corresponding <tt>rcu_state</tt> structure (and is most frequently 1012 - used to locate the name of the corresponding flavor of RCU for tracing), 1013 - and the <tt>-&gt;mynode</tt> field references the corresponding 1014 - <tt>rcu_node</tt> structure. 1026 + corresponding CPU and the <tt>-&gt;mynode</tt> field references the 1027 + corresponding <tt>rcu_node</tt> structure. 1015 1028 The <tt>-&gt;mynode</tt> is used to propagate quiescent states 1016 1029 up the combining tree. 1017 - <p>The <tt>-&gt;dynticks</tt> pointer references the 1018 - <tt>rcu_dynticks</tt> structure corresponding to this 1019 - CPU. 1020 - Recall that a single per-CPU instance of the <tt>rcu_dynticks</tt> 1021 - structure is shared among all flavors of RCU. 1022 - These first four fields are constant and therefore require not 1023 - synchronization. 1030 + These two fields are constant and therefore do not require synchronization. 1024 1031 1025 - </p><p>The <tt>-&gt;grpmask</tt> field indicates the bit in 1032 + <p>The <tt>-&gt;grpmask</tt> field indicates the bit in 1026 1033 the <tt>-&gt;mynode-&gt;qsmask</tt> corresponding to this 1027 1034 <tt>rcu_data</tt> structure, and is also used when propagating 1028 1035 quiescent states. ··· 1152 1181 count the number of times this CPU is determined to be in 1153 1182 dyntick-idle state, and is used for tracing and debugging purposes. 1154 1183 1155 - <h3><a name="The rcu_dynticks Structure"> 1156 - The <tt>rcu_dynticks</tt> Structure</a></h3> 1157 - 1158 - <p>The <tt>rcu_dynticks</tt> maintains the per-CPU dyntick-idle state 1159 - for the corresponding CPU. 1160 - Unlike the other structures, <tt>rcu_dynticks</tt> is not 1161 - replicated over the different flavors of RCU. 1162 - The fields in this structure may be accessed only from the corresponding 1163 - CPU (and from tracing) unless otherwise stated. 1164 - Its fields are as follows: 1184 + <p> 1185 + This portion of the rcu_data structure is declared as follows: 1165 1186 1166 1187 <pre> 1167 1188 1 long dynticks_nesting; 1168 1189 2 long dynticks_nmi_nesting; 1169 1190 3 atomic_t dynticks; 1170 1191 4 bool rcu_need_heavy_qs; 1171 - 5 unsigned long rcu_qs_ctr; 1172 - 6 bool rcu_urgent_qs; 1192 + 5 bool rcu_urgent_qs; 1173 1193 </pre> 1194 + 1195 + <p>These fields in the rcu_data structure maintain the per-CPU dyntick-idle 1196 + state for the corresponding CPU. 1197 + The fields may be accessed only from the corresponding CPU (and from tracing) 1198 + unless otherwise stated. 1174 1199 1175 1200 <p>The <tt>-&gt;dynticks_nesting</tt> field counts the 1176 1201 nesting depth of process execution, so that in normal circumstances ··· 1209 1242 This flag is checked by RCU's context-switch and <tt>cond_resched()</tt> 1210 1243 code, which provide a momentary idle sojourn in response. 1211 1244 1212 - </p><p>The <tt>-&gt;rcu_qs_ctr</tt> field is used to record 1213 - quiescent states from <tt>cond_resched()</tt>. 1214 - Because <tt>cond_resched()</tt> can execute quite frequently, this 1215 - must be quite lightweight, as in a non-atomic increment of this 1216 - per-CPU field. 1217 - 1218 1245 </p><p>Finally, the <tt>-&gt;rcu_urgent_qs</tt> field is used to record 1219 - the fact that the RCU core code would really like to see a quiescent 1220 - state from the corresponding CPU, with the various other fields indicating 1221 - just how badly RCU wants this quiescent state. 1222 - This flag is checked by RCU's context-switch and <tt>cond_resched()</tt> 1223 - code, which, if nothing else, non-atomically increment <tt>-&gt;rcu_qs_ctr</tt> 1224 - in response. 1246 + the fact that the RCU core code would really like to see a quiescent state from 1247 + the corresponding CPU, with the various other fields indicating just how badly 1248 + RCU wants this quiescent state. 1249 + This flag is checked by RCU's context-switch path 1250 + (<tt>rcu_note_context_switch</tt>) and the cond_resched code. 1225 1251 1226 1252 <table> 1227 1253 <tr><th>&nbsp;</th></tr> ··· 1391 1431 which contains a combining tree of <tt>rcu_node</tt> and 1392 1432 <tt>rcu_data</tt> structures. 1393 1433 Finally, in <tt>CONFIG_NO_HZ_IDLE</tt> kernels, each CPU's dyntick-idle 1394 - state is tracked by an <tt>rcu_dynticks</tt> structure. 1434 + state is tracked by dynticks-related fields in the <tt>rcu_data</tt> structure. 1395 1435 1396 1436 If you made it this far, you are well prepared to read the code 1397 1437 walkthroughs in the other articles in this series.