메모리 오류를 검출하고 정정하기 위한 방법으로 패리티, ECC 메모리가 있는데요. 최근에는 만드는 사람들이 잘 만들어서 에러가 발생하지 않는다고 합니다. 하지만, 이론상으로는 발생할 확률이 여전히 남아 있고, 일반 가정용으로 사용하는 메모리는 이를 눈감아 줄만 하다고 하네요. 하지만, 정밀한 작업을 해야 하는 시스템에서는 여전히 이러한 오류 검출과 정정 기능이 구현된 메모리를 사용한다고 합니다. 각설하고, static void __init build_mem_type_table(void) 에서 mem_types 를 설정 할 때 사용하는 ecc_mask 의 초기값은 0 으로 설정되어 있습니다.
// arch/arm/mm/mmu.c
static unsigned int ecc_mask __initdata = 0;
하지만, make menuconfig 시 default command line 으로 "ecc=on" 이 설정되면,
ecc_mask = PMD_PROTECTION 값을 대입 합니다.
이를 처리하는 부분은 __early_param("ecc=", early_ecc) 와 static void __init early_ecc(char **p) 함수로 구현되어 있습니다.
PMD_PROTECTION 는 아래와 같이 정의 되어 있으며,
// include/asm-arm/pgtable-hwdef.h
#define PMD_PROTECTION (1 << 9) /* v5 */
이는 first level descriptor 의 p bit 에 해당합니다. ARM11 MPCore Tech Ref 문서에서 5.11 Hardware page table translation 부분의 페이지 261 에 보면, 아래와 같은 글이 있습니다.
If the P bit is supported and set for the memory region, it indicates to the system memory
controller that this memory region has ECC enabled.
// arch/arm/mm/mmu.c
static unsigned int ecc_mask __initdata = 0;
하지만, make menuconfig 시 default command line 으로 "ecc=on" 이 설정되면,
ecc_mask = PMD_PROTECTION 값을 대입 합니다.
이를 처리하는 부분은 __early_param("ecc=", early_ecc) 와 static void __init early_ecc(char **p) 함수로 구현되어 있습니다.
PMD_PROTECTION 는 아래와 같이 정의 되어 있으며,
// include/asm-arm/pgtable-hwdef.h
#define PMD_PROTECTION (1 << 9) /* v5 */
이는 first level descriptor 의 p bit 에 해당합니다. ARM11 MPCore Tech Ref 문서에서 5.11 Hardware page table translation 부분의 페이지 261 에 보면, 아래와 같은 글이 있습니다.
If the P bit is supported and set for the memory region, it indicates to the system memory
controller that this memory region has ECC enabled.
'리눅스커널' 카테고리의 다른 글
[ prepare_page_table ] arch/arm/mm/mmu.c (0) | 2009.10.02 |
---|---|
[ cpu_architecture ] arch/arm/kernel/setup.c (0) | 2009.10.02 |
[ build_mem_type_table ] arch/arm/mm/mmu.c (0) | 2009.10.02 |
[ convert_to_tag_list ] arch/arm/kernel/setup.c (0) | 2009.10.02 |
[ setup_processor ] arch/arm/kernel/setup.c (0) | 2009.10.02 |