Merge tag 'docs-4.14' of git://git.lwn.net/linux

Pull documentation fixes from Jonathan Corbet:
"A cleanup from Mauro that needed to wait for the media pull, plus a
handful of other fixes that wandered in"

* tag 'docs-4.14' of git://git.lwn.net/linux:
kokr/memory-barriers.txt: Apply atomic_t.txt change
kokr/doc: Update memory-barriers.txt for read-to-write dependencies
docs-rst: don't require adjustbox anymore
docs-rst: conf.py: only setup notice box colors if Sphinx < 1.6
docs-rst: conf.py: remove lscape from LaTeX preamble

+69 -126
+40 -22
Documentation/conf.py
··· 271 271 272 272 # Additional stuff for the LaTeX preamble. 273 273 'preamble': ''' 274 - \\usepackage{ifthen} 274 + % Use some font with UTF-8 support with XeLaTeX 275 + \\usepackage{fontspec} 276 + \\setsansfont{DejaVu Serif} 277 + \\setromanfont{DejaVu Sans} 278 + \\setmonofont{DejaVu Sans Mono} 275 279 276 - % Allow generate some pages in landscape 277 - \\usepackage{lscape} 280 + ''' 281 + } 282 + 283 + # Fix reference escape troubles with Sphinx 1.4.x 284 + if major == 1 and minor > 3: 285 + latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n' 286 + 287 + if major == 1 and minor <= 4: 288 + latex_elements['preamble'] += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}' 289 + elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)): 290 + latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in' 291 + latex_elements['preamble'] += '\\fvset{fontsize=auto}\n' 292 + 293 + # Customize notice background colors on Sphinx < 1.6: 294 + if major == 1 and minor < 6: 295 + latex_elements['preamble'] += ''' 296 + \\usepackage{ifthen} 278 297 279 298 % Put notes in color and let them be inside a table 280 299 \\definecolor{NoteColor}{RGB}{204,255,255} ··· 344 325 } 345 326 \\makeatother 346 327 347 - % Use some font with UTF-8 support with XeLaTeX 348 - \\usepackage{fontspec} 349 - \\setsansfont{DejaVu Serif} 350 - \\setromanfont{DejaVu Sans} 351 - \\setmonofont{DejaVu Sans Mono} 352 - 353 - % To allow adjusting table sizes 354 - \\usepackage{adjustbox} 355 - 356 328 ''' 357 - } 358 329 359 - # Fix reference escape troubles with Sphinx 1.4.x 360 - if major == 1 and minor > 3: 361 - latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n' 362 - 363 - if major == 1 and minor <= 4: 364 - latex_elements['preamble'] += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}' 365 - elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)): 366 - latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in' 367 - latex_elements['preamble'] += '\\fvset{fontsize=auto}\n' 330 + # With Sphinx 1.6, it is possible to change the Bg color directly 331 + # by using: 332 + # \definecolor{sphinxnoteBgColor}{RGB}{204,255,255} 333 + # \definecolor{sphinxwarningBgColor}{RGB}{255,204,204} 334 + # \definecolor{sphinxattentionBgColor}{RGB}{255,255,204} 335 + # \definecolor{sphinximportantBgColor}{RGB}{192,255,204} 336 + # 337 + # However, it require to use sphinx heavy box with: 338 + # 339 + # \renewenvironment{sphinxlightbox} {% 340 + # \\begin{sphinxheavybox} 341 + # } 342 + # \\end{sphinxheavybox} 343 + # } 344 + # 345 + # Unfortunately, the implementation is buggy: if a note is inside a 346 + # table, it isn't displayed well. So, for now, let's use boring 347 + # black and white notes. 368 348 369 349 # Grouping the document tree into LaTeX files. List of tuples 370 350 # (source start file, target name, title,
+29 -103
Documentation/translations/ko_KR/memory-barriers.txt
··· 523 523 즉, ACQUIRE 는 최소한의 "취득" 동작처럼, 그리고 RELEASE 는 최소한의 "공개" 524 524 처럼 동작한다는 의미입니다. 525 525 526 - core-api/atomic_ops.rst 에서 설명되는 어토믹 오퍼레이션들 중에는 완전히 527 - 순서잡힌 것들과 (배리어를 사용하지 않는) 완화된 순서의 것들 외에 ACQUIRE 와 528 - RELEASE 부류의 것들도 존재합니다. 로드와 스토어를 모두 수행하는 조합된 어토믹 529 - 오퍼레이션에서, ACQUIRE 는 해당 오퍼레이션의 로드 부분에만 적용되고 RELEASE 는 530 - 해당 오퍼레이션의 스토어 부분에만 적용됩니다. 526 + atomic_t.txt 에 설명된 어토믹 오퍼레이션들 중 일부는 완전히 순서잡힌 것들과 527 + (배리어를 사용하지 않는) 완화된 순서의 것들 외에 ACQUIRE 와 RELEASE 부류의 528 + 것들도 존재합니다. 로드와 스토어를 모두 수행하는 조합된 어토믹 오퍼레이션에서, 529 + ACQUIRE 는 해당 오퍼레이션의 로드 부분에만 적용되고 RELEASE 는 해당 530 + 오퍼레이션의 스토어 부분에만 적용됩니다. 531 531 532 532 메모리 배리어들은 두 CPU 간, 또는 CPU 와 디바이스 간에 상호작용의 가능성이 있을 533 533 때에만 필요합니다. 만약 어떤 코드에 그런 상호작용이 없을 것이 보장된다면, 해당 ··· 617 617 이 변경은 앞의 처음 두가지 결과 중 하나만이 발생할 수 있고, 세번째의 결과는 618 618 발생할 수 없도록 합니다. 619 619 620 - 데이터 의존성 배리어는 의존적 쓰기에 대해서도 순서를 잡아줍니다: 620 + 621 + [!] 이 상당히 반직관적인 상황은 분리된 캐시를 가지는 기계들에서 가장 잘 622 + 발생하는데, 예를 들면 한 캐시 뱅크는 짝수 번호의 캐시 라인들을 처리하고, 다른 623 + 뱅크는 홀수 번호의 캐시 라인들을 처리하는 경우임을 알아두시기 바랍니다. 포인터 624 + P 는 짝수 번호 캐시 라인에 저장되어 있고, 변수 B 는 홀수 번호 캐시 라인에 625 + 저장되어 있을 수 있습니다. 여기서 값을 읽어오는 CPU 의 캐시의 홀수 번호 처리 626 + 뱅크는 열심히 일감을 처리중인 반면 홀수 번호 처리 뱅크는 할 일 없이 한가한 627 + 중이라면 포인터 P (&B) 의 새로운 값과 변수 B 의 기존 값 (2) 를 볼 수 있습니다. 628 + 629 + 630 + 의존적 쓰기들의 순서를 맞추는데에는 데이터 의존성 배리어가 필요치 않은데, 이는 631 + 리눅스 커널이 지원하는 CPU 들은 (1) 쓰기가 정말로 일어날지, (2) 쓰기가 어디에 632 + 이루어질지, 그리고 (3) 쓰여질 값을 확실히 알기 전까지는 쓰기를 수행하지 않기 633 + 때문입니다. 하지만 "컨트롤 의존성" 섹션과 634 + Documentation/RCU/rcu_dereference.txt 파일을 주의 깊게 읽어 주시기 바랍니다: 635 + 컴파일러는 매우 창의적인 많은 방법으로 종속성을 깰 수 있습니다. 621 636 622 637 CPU 1 CPU 2 623 638 =============== =============== ··· 641 626 <쓰기 배리어> 642 627 WRITE_ONCE(P, &B); 643 628 Q = READ_ONCE(P); 644 - <데이터 의존성 배리어> 645 - *Q = 5; 629 + WRITE_ONCE(*Q, 5); 646 630 647 - 이 데이터 의존성 배리어는 Q 로의 읽기가 *Q 로의 스토어와 순서를 맞추게 648 - 해줍니다. 이는 다음과 같은 결과를 막습니다: 631 + 따라서, Q 로의 읽기와 *Q 로의 쓰기 사이에는 데이터 종속성 배리어가 필요치 632 + 않습니다. 달리 말하면, 데이터 종속성 배리어가 없더라도 다음 결과는 생기지 633 + 않습니다: 649 634 650 635 (Q == &B) && (B == 4) 651 636 652 637 이런 패턴은 드물게 사용되어야 함을 알아 두시기 바랍니다. 무엇보다도, 의존성 653 638 순서 규칙의 의도는 쓰기 작업을 -예방- 해서 그로 인해 발생하는 비싼 캐시 미스도 654 639 없애려는 것입니다. 이 패턴은 드물게 발생하는 에러 조건 같은것들을 기록하는데 655 - 사용될 수 있고, 이렇게 배리어를 사용해 순서를 지키게 함으로써 그런 기록이 656 - 사라지는 것을 막습니다. 657 - 658 - 659 - [!] 상당히 비직관적인 이 상황은 분리된 캐시를 가진 기계, 예를 들어 한 캐시 660 - 뱅크가 짝수번 캐시 라인을 처리하고 다른 뱅크는 홀수번 캐시 라인을 처리하는 기계 661 - 등에서 가장 잘 발생합니다. 포인터 P 는 홀수 번호의 캐시 라인에 있고, 변수 B 는 662 - 짝수 번호 캐시 라인에 있다고 생각해 봅시다. 그런 상태에서 읽기 작업을 하는 CPU 663 - 의 짝수번 뱅크는 할 일이 쌓여 매우 바쁘지만 홀수번 뱅크는 할 일이 없어 아무 664 - 일도 하지 않고 있었다면, 포인터 P 는 새 값 (&B) 을, 그리고 변수 B 는 옛날 값 665 - (2) 을 가지고 있는 상태가 보여질 수도 있습니다. 640 + 사용될 수 있으며, CPU의 자연적인 순서 보장이 그런 기록들을 사라지지 않게 641 + 해줍니다. 666 642 667 643 668 644 데이터 의존성 배리어는 매우 중요한데, 예를 들어 RCU 시스템에서 그렇습니다. ··· 1854 1848 이 코드는 객체의 업데이트된 death 마크가 레퍼런스 카운터 감소 동작 1855 1849 *전에* 보일 것을 보장합니다. 1856 1850 1857 - 더 많은 정보를 위해선 Documentation/core-api/atomic_ops.rst 문서를 참고하세요. 1858 - 어디서 이것들을 사용해야 할지 궁금하다면 "어토믹 오퍼레이션" 서브섹션을 1851 + 더 많은 정보를 위해선 Documentation/atomic_{t,bitops}.txt 문서를 1859 1852 참고하세요. 1860 1853 1861 1854 ··· 2473 2468 전체 메모리 배리어를 내포하고 또 일부는 내포하지 않지만, 커널에서 상당히 2474 2469 의존적으로 사용하는 기능 중 하나입니다. 2475 2470 2476 - 메모리의 어떤 상태를 수정하고 해당 상태에 대한 (예전의 또는 최신의) 정보를 2477 - 리턴하는 어토믹 오퍼레이션은 모두 SMP-조건적 범용 메모리 배리어(smp_mb())를 2478 - 실제 오퍼레이션의 앞과 뒤에 내포합니다. 이런 오퍼레이션은 다음의 것들을 2479 - 포함합니다: 2480 - 2481 - xchg(); 2482 - atomic_xchg(); atomic_long_xchg(); 2483 - atomic_inc_return(); atomic_long_inc_return(); 2484 - atomic_dec_return(); atomic_long_dec_return(); 2485 - atomic_add_return(); atomic_long_add_return(); 2486 - atomic_sub_return(); atomic_long_sub_return(); 2487 - atomic_inc_and_test(); atomic_long_inc_and_test(); 2488 - atomic_dec_and_test(); atomic_long_dec_and_test(); 2489 - atomic_sub_and_test(); atomic_long_sub_and_test(); 2490 - atomic_add_negative(); atomic_long_add_negative(); 2491 - test_and_set_bit(); 2492 - test_and_clear_bit(); 2493 - test_and_change_bit(); 2494 - 2495 - /* exchange 조건이 성공할 때 */ 2496 - cmpxchg(); 2497 - atomic_cmpxchg(); atomic_long_cmpxchg(); 2498 - atomic_add_unless(); atomic_long_add_unless(); 2499 - 2500 - 이것들은 메모리 배리어 효과가 필요한 ACQUIRE 부류와 RELEASE 부류 오퍼레이션들을 2501 - 구현할 때, 그리고 객체 해제를 위해 레퍼런스 카운터를 조정할 때, 암묵적 메모리 2502 - 배리어 효과가 필요한 곳 등에 사용됩니다. 2503 - 2504 - 2505 - 다음의 오퍼레이션들은 메모리 배리어를 내포하지 _않기_ 때문에 문제가 될 수 2506 - 있지만, RELEASE 부류의 오퍼레이션들과 같은 것들을 구현할 때 사용될 수도 2507 - 있습니다: 2508 - 2509 - atomic_set(); 2510 - set_bit(); 2511 - clear_bit(); 2512 - change_bit(); 2513 - 2514 - 이것들을 사용할 때에는 필요하다면 적절한 (예를 들면 smp_mb__before_atomic() 2515 - 같은) 메모리 배리어가 명시적으로 함께 사용되어야 합니다. 2516 - 2517 - 2518 - 아래의 것들도 메모리 배리어를 내포하지 _않기_ 때문에, 일부 환경에서는 (예를 2519 - 들면 smp_mb__before_atomic() 과 같은) 명시적인 메모리 배리어 사용이 필요합니다. 2520 - 2521 - atomic_add(); 2522 - atomic_sub(); 2523 - atomic_inc(); 2524 - atomic_dec(); 2525 - 2526 - 이것들이 통계 생성을 위해 사용된다면, 그리고 통계 데이터 사이에 관계가 존재하지 2527 - 않는다면 메모리 배리어는 필요치 않을 겁니다. 2528 - 2529 - 객체의 수명을 관리하기 위해 레퍼런스 카운팅 목적으로 사용된다면, 레퍼런스 2530 - 카운터는 락으로 보호되는 섹션에서만 조정되거나 호출하는 쪽이 이미 충분한 2531 - 레퍼런스를 잡고 있을 것이기 때문에 메모리 배리어는 아마 필요 없을 겁니다. 2532 - 2533 - 만약 어떤 락을 구성하기 위해 사용된다면, 락 관련 동작은 일반적으로 작업을 특정 2534 - 순서대로 진행해야 하므로 메모리 배리어가 필요할 수 있습니다. 2535 - 2536 - 기본적으로, 각 사용처에서는 메모리 배리어가 필요한지 아닌지 충분히 고려해야 2537 - 합니다. 2538 - 2539 - 아래의 오퍼레이션들은 특별한 락 관련 동작들입니다: 2540 - 2541 - test_and_set_bit_lock(); 2542 - clear_bit_unlock(); 2543 - __clear_bit_unlock(); 2544 - 2545 - 이것들은 ACQUIRE 류와 RELEASE 류의 오퍼레이션들을 구현합니다. 락 관련 도구를 2546 - 구현할 때에는 이것들을 좀 더 선호하는 편이 나은데, 이것들의 구현은 많은 2547 - 아키텍쳐에서 최적화 될 수 있기 때문입니다. 2548 - 2549 - [!] 이런 상황에 사용할 수 있는 특수한 메모리 배리어 도구들이 있습니다만, 일부 2550 - CPU 에서는 사용되는 어토믹 인스트럭션 자체에 메모리 배리어가 내포되어 있어서 2551 - 어토믹 오퍼레이션과 메모리 배리어를 함께 사용하는 게 불필요한 일이 될 수 2552 - 있는데, 그런 경우에 이 특수 메모리 배리어 도구들은 no-op 이 되어 실질적으로 2553 - 아무일도 하지 않습니다. 2554 - 2555 - 더 많은 내용을 위해선 Documentation/core-api/atomic_ops.rst 를 참고하세요. 2471 + 더 많은 내용을 위해선 Documentation/atomic_t.txt 를 참고하세요. 2556 2472 2557 2473 2558 2474 디바이스 액세스
-1
scripts/sphinx-pre-install
··· 40 40 # 41 41 42 42 my %texlive = ( 43 - 'adjustbox.sty' => 'texlive-adjustbox', 44 43 'amsfonts.sty' => 'texlive-amsfonts', 45 44 'amsmath.sty' => 'texlive-amsmath', 46 45 'amssymb.sty' => 'texlive-amsfonts',