Documentation/features/sched/membarrier-sync-core/arch-support.txt GitHub 원문 ↗

Linux 6.18.37 · Architecture Feature Support

membarrier-sync-core architecture support

아키텍처가 CPU core를 serialize하는 `membarrier`를 지원합니다. 아키텍처별 상태표의 전문 번역입니다.

Source pathDocumentation/features/sched/membarrier-sync-core/arch-support.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

arch-support.txt:1-69

`membarrier-sync-core`의 Kconfig 기준은 `ARCH_HAS_MEMBARRIER_SYNC_CORE`입니다. 표는 지원 여부뿐 아니라 하드웨어상 불가능하거나 적용되지 않는 경우도 구분합니다.

membarrier-sync-core 상태별 아키텍처 수
상태의미아키텍처 수
`TODO``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음15
`ok``ok` - 해당 아키텍처가 기능을 지원함6

원문 matrix의 상태별 행 수를 집계했습니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 #
2 # Feature name: membarrier-sync-core
3 # Kconfig: ARCH_HAS_MEMBARRIER_SYNC_CORE
4 # description: arch supports core serializing membarrier
5 #
6 # Architecture requirements
7 #
8 # * arm/arm64/powerpc/s390
9 #
10 # Rely on implicit context synchronization as a result of exception return
11 # when returning from IPI handler, and when returning to user-space.
12 #
13 # * riscv
14 #
15 # riscv uses xRET as return from interrupt and to return to user-space.
16 #
17 # Given that xRET is not core serializing, we rely on FENCE.I for providing
18 # core serialization:
19 #
20 # - by calling sync_core_before_usermode() on return from interrupt (cf.
21 # ipi_sync_core()),
22 #
23 # - via switch_mm() and sync_core_before_usermode() (respectively, for
24 # uthread->uthread and kthread->uthread transitions) before returning
25 # to user-space.
26 #
27 # The serialization in switch_mm() is activated by prepare_sync_core_cmd().
28 #
29 # * x86
30 #
31 # x86-32 uses IRET as return from interrupt, which takes care of the IPI.
32 # However, it uses both IRET and SYSEXIT to go back to user-space. The IRET
33 # instruction is core serializing, but not SYSEXIT.
34 #
35 # x86-64 uses IRET as return from interrupt, which takes care of the IPI.
36 # However, it can return to user-space through either SYSRETL (compat code),
37 # SYSRETQ, or IRET.
38 #
39 # Given that neither SYSRET{L,Q}, nor SYSEXIT, are core serializing, we rely
40 # instead on write_cr3() performed by switch_mm() to provide core serialization
41 # after changing the current mm, and deal with the special case of kthread ->
42 # uthread (temporarily keeping current mm into active_mm) by issuing a
43 # sync_core_before_usermode() in that specific case.
44 #
45 -----------------------
46 | arch |status|
47 -----------------------
48 | alpha: | TODO |
49 | arc: | TODO |
50 | arm: | ok |
51 | arm64: | ok |
52 | csky: | TODO |
53 | hexagon: | TODO |
54 | loongarch: | TODO |
55 | m68k: | TODO |
56 | microblaze: | TODO |
57 | mips: | TODO |
58 | nios2: | TODO |
59 | openrisc: | TODO |
60 | parisc: | TODO |
61 | powerpc: | ok |
62 | riscv: | ok |
63 | s390: | ok |
64 | sh: | TODO |
65 | sparc: | TODO |
66 | um: | TODO |
67 | x86: | ok |
68 | xtensa: | TODO |
69 -----------------------
70

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

membarrier-sync-core 아키텍처 지원 현황

1-69

기능 이름은 `membarrier-sync-core`이고 관련 Kconfig symbol은 `ARCH_HAS_MEMBARRIER_SYNC_CORE`입니다. 아키텍처가 CPU core를 serialize하는 `membarrier`를 지원합니다.

arm, arm64, powerpc, s390은 IPI handler와 user space로 돌아올 때 exception return이 만드는 암묵적 context synchronization에 의존합니다.

riscv의 xRET은 core-serializing 명령이 아니므로 FENCE.I를 사용합니다. interrupt 복귀에서는 `sync_core_before_usermode()`와 `ipi_sync_core()`를, user-space 복귀에서는 `switch_mm()`과 `sync_core_before_usermode()`를 사용합니다. `switch_mm()`의 serialization은 `prepare_sync_core_cmd()`가 활성화합니다.

x86에서 IRET은 core-serializing이지만 SYSEXIT과 SYSRET{L,Q}는 그렇지 않습니다. 따라서 `switch_mm()`이 수행하는 `write_cr3()`로 현재 `mm` 변경 뒤 core serialization을 제공하고, kthread에서 uthread로 전환하는 특수 경로에서는 `sync_core_before_usermode()`를 실행합니다.

이 표는 upstream Linux 아키텍처 21개의 상태를 나열합니다. 현재 `ok`인 아키텍처는 6개이며 `arm`, `arm64`, `powerpc`, `riscv`, `s390`, `x86`.

상태 기호는 `ok`가 지원됨, `TODO`가 아직 미지원, `..`가 하드웨어상 지원 불가, `N/A`가 적용 대상 아님을 뜻합니다.

membarrier-sync-core 지원 matrix
아키텍처지원 상태
`alpha``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`arc``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`arm``ok` - 해당 아키텍처가 기능을 지원함
`arm64``ok` - 해당 아키텍처가 기능을 지원함
`csky``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`hexagon``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`loongarch``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`m68k``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`microblaze``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`mips``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`nios2``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`openrisc``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`parisc``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`powerpc``ok` - 해당 아키텍처가 기능을 지원함
`riscv``ok` - 해당 아키텍처가 기능을 지원함
`s390``ok` - 해당 아키텍처가 기능을 지원함
`sh``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`sparc``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`um``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음
`x86``ok` - 해당 아키텍처가 기능을 지원함
`xtensa``TODO` - 해당 아키텍처가 아직 기능을 지원하지 않음

원문의 ASCII architecture/status 표를 행 순서와 상태 기호를 보존해 구조화했습니다.

#
# Feature name:          membarrier-sync-core
#         Kconfig:       ARCH_HAS_MEMBARRIER_SYNC_CORE
#         description:   arch supports core serializing membarrier
#
# Architecture requirements
#
# * arm/arm64/powerpc/s390
#
# Rely on implicit context synchronization as a result of exception return
# when returning from IPI handler, and when returning to user-space.
#
# * riscv
#
# riscv uses xRET as return from interrupt and to return to user-space.
#
# Given that xRET is not core serializing, we rely on FENCE.I for providing
# core serialization:
#
#  - by calling sync_core_before_usermode() on return from interrupt (cf.
#    ipi_sync_core()),
#
#  - via switch_mm() and sync_core_before_usermode() (respectively, for
#    uthread->uthread and kthread->uthread transitions) before returning
#    to user-space.
#
#  The serialization in switch_mm() is activated by prepare_sync_core_cmd().
#
# * x86
#
# x86-32 uses IRET as return from interrupt, which takes care of the IPI.
# However, it uses both IRET and SYSEXIT to go back to user-space. The IRET
# instruction is core serializing, but not SYSEXIT.
#
# x86-64 uses IRET as return from interrupt, which takes care of the IPI.
# However, it can return to user-space through either SYSRETL (compat code),
# SYSRETQ, or IRET.
#
# Given that neither SYSRET{L,Q}, nor SYSEXIT, are core serializing, we rely
# instead on write_cr3() performed by switch_mm() to provide core serialization
# after changing the current mm, and deal with the special case of kthread ->
# uthread (temporarily keeping current mm into active_mm) by issuing a
# sync_core_before_usermode() in that specific case.
#
    -----------------------
    |         arch |status|
    -----------------------
    |       alpha: | TODO |
    |         arc: | TODO |
    |         arm: |  ok  |
    |       arm64: |  ok  |
    |        csky: | TODO |
    |     hexagon: | TODO |
    |   loongarch: | TODO |
    |        m68k: | TODO |
    |  microblaze: | TODO |
    |        mips: | TODO |
    |       nios2: | TODO |
    |    openrisc: | TODO |
    |      parisc: | TODO |
    |     powerpc: |  ok  |
    |       riscv: |  ok  |
    |        s390: |  ok  |
    |          sh: | TODO |
    |       sparc: | TODO |
    |          um: | TODO |
    |         x86: |  ok  |
    |      xtensa: | TODO |
    -----------------------