asid 관련해서 질문드립니다.

suesueng 2019.10.21 11:20 조회 수 : 724

https://lore.kernel.org/patchwork/patch/852156/

 

리눅스에 반영된 cpu_do_switch_mm 시에 위 패치에 대해서 궁금한게 있는데요..

 

패치 내용중 일부는 아래와 같습니다

여기서 패치전 코드는 TTBR0에 해당 user task의 pgd +  asid를 넣어주고 있었는데

 

패치 후에는 TTBR1에만 asid를 넣어주고 있는것을 확인했습니다.

제가 생각하기에 TTBR0 과 TTBR1 레지스터 모두에 asid 를 넣어주어야 하지 않을까 싶은데요..

 

왜 asid 를 커널에만 사용하는건지... 아니면 제가 잘못 이해하고 있는건지 궁금합니다.

 

 

diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index 877d42fb0df6..0bd7550b7230 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -139,9 +139,12 @@  ENDPROC(cpu_do_resume)
  */
 ENTRY(cpu_do_switch_mm)
 	pre_ttbr0_update_workaround x0, x2, x3
+	mrs	x2, ttbr1_el1
 	mmid	x1, x1				// get mm->context.id
-	bfi	x0, x1, #48, #16		// set the ASID
-	msr	ttbr0_el1, x0			// set TTBR0
+	bfi	x2, x1, #48, #16		// set the ASID
+	msr	ttbr1_el1, x2			// in TTBR1 (since TCR.A1 is set)
+	isb
+	msr	ttbr0_el1, x0			// now update TTBR0
 	isb
 	post_ttbr0_update_workaround
 	ret
@@ -225,7 +228,7 @@  ENTRY(__cpu_setup)
 	 * both user and kernel.
 	 */
 	ldr	x10, =TCR_TxSZ(VA_BITS) | TCR_CACHE_FLAGS | TCR_SMP_FLAGS | \
-			TCR_TG_FLAGS | TCR_ASID16 | TCR_TBI0
+			TCR_TG_FLAGS | TCR_ASID16 | TCR_TBI0 | TCR_A1
 	tcr_set_idmap_t0sz	x10, x9
 
 	/*
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22257
517 alloc과 free함수에 대해서 질문입니다. [1] 정재훈 2011.06.28 93676
516 안드로이드 system 폴더안의 파일을 인식못하는데.. [5] 김영일 2011.04.14 69708
515 x86에서 ZONE_DMA 영역의 사용 [1] 홍문화 2011.05.02 58357
514 커널에서 page alloc에 관해서 [1] 미다리로23 2017.02.05 34582
513 디바이스 드라이버 모듈에서 작성한 함수를 커널에서 사용하는 방법 [1] 개짖는소리 2017.02.06 27054
512 Linux kernel의 CFS(Completely Fair Scheduling) 스케줄러에서 time slice 구하는 방법? [10] 김재호 2010.04.30 25230
511 "만들면서 배우는 OS..." 4장 kernel.asm 중 idtr 설정 질문드립니다 쿨쿨 2013.06.18 24967
510 리눅스 스케줄러 관련 [9] 홍문화 2011.02.23 22949
509 NFS NAS SAN 이란 무엇인가? file 박은병 2010.04.13 21882
508 s3c2440기반의 리눅스 커널 분석 중 MM관련 질문입니다. 유태경 2007.09.02 21523
507 /dev 폴더에 있는 node파일 중에서 어떤 것을 open해야 플래쉬를 사용할 수 있을까요? [1] 박종주 2012.02.17 19849
506 sparsemem에 대한 질문이 있습니다. [5] 안정모 2010.03.20 19719
505 16기 리눅스 커널 스터디 C조 18주차 질문입니다. [3] cien 2019.10.12 18832
504 tty, tty0, console, vc 는 각각 뭐하는 디바이스인지? [3] 이창만 2008.12.04 18557
503 ARM A8 이상의 프로세서를 공부할 때 스터디 방향 [4] 유강희 2011.06.15 18520
502 임베디드 OS 만들기 내용과 관련하여 문의드립니다. [5] 송인재 2010.03.25 18321
501 far call 이란 무엇인가요? [4] 박한범 2010.04.13 17841
500 파일시스템에 관한 질문(Htree [6] 사앙조 2017.05.22 17077
499 SMP관련 질문입니다. [2] 컴퓨터 2017.04.13 16586
XE Login