# ARM64 MMU·page table·TLB 소스 분석

v6.18.37 / arch/arm64/include/asm/tlbflush.h

가상 주소 해석을 바꾼 뒤에는 CPU가 저장한 옛 번역도 처리해야 합니다. 이 단원은 v6.18.37의 flush_tlb_all을 읽어 PTE 변경, TLB 무효화, 완료와 명령 동기화가 별도 단계임을 설명합니다.

## flush_tlb_all

```c

static inline void flush_tlb_all(void)
{
	dsb(ishst);
	__tlbi(vmalle1is);
	__tlbi_sync_s1ish_kernel();
	isb();
}

```

### 364행

```c

static inline void flush_tlb_all(void)

```

커널이 관리하는 EL1 Stage-1 변환을 공유 범위에서 무효화하는 helper입니다. 이름의 all을 모든 장치·모든 Stage-2까지 포함한다고 읽지 않습니다.

### 366행

```c

	dsb(ishst);

```

앞선 페이지 표 store가 inner-shareable 범위에서 무효화보다 앞서도록 DSB ISHST를 수행합니다.

### 367행

```c

	__tlbi(vmalle1is);

```

VMALLE1IS 형태의 TLBI를 발행합니다. EL1 변환을 inner-shareable 범위로 무효화하는 명령이며 일반 RAM 데이터를 지우지 않습니다.

### 368행

```c

	__tlbi_sync_s1ish_kernel();

```

이 helper는 DSB ISH를 수행하고 필요한 반복 TLBI 보완 경로를 호출합니다. 무효화 요청을 보낸 것과 공유 범위에서 완료를 기다리는 것을 구분합니다.

### 369행

```c

	isb();

```

이후 명령 실행이 갱신한 변환 환경과 동기화되도록 ISB를 수행합니다.

