# TLB shootdown: TLBI, INVLPG/INVPCID와 SFENCE.VMA

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

페이지 표의 내용을 고쳐도 CPU가 TLB에 저장한 옛 번역은 남을 수 있습니다. arm64는 공유 범위 TLBI, x86은 INVLPG/INVPCID와 원격 호출, RISC-V는 SFENCE.VMA와 원격 요청을 조합합니다. 대표로 arm64 전체 EL1 변환 무효화의 짧은 순서를 읽습니다.

## 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를 수행합니다.

