2016-10-03 5 views
0

드라이버 컨텍스트에서 스핀 록 및 지연과 관련된 일반적인 질문이 있습니다. gpio에서 읽고 쓰는 Linux 드라이버가 있습니다. 읽기 및 쓰기 작업은 단일 핀으로 이루어지며 완전히 타이밍 기반입니다 (HDQ 프로토콜). 원래 드라이버는 udelay() 호출을 사용하여 구현되었으며 최악의 시나리오는 약 500 us입니다. 드라이버는 인터럽트로 구현하지 않습니다. 특정 GPIO에서 정기적 인 읽기 및 쓰기로 일반 gpio_get_value()gpio_set_value()을 사용합니다. 이러한 지연 사이에는 드라이버가 스핀 록을 포함합니다. 얼마나 안전합니까? 나는 spinlocks로 묶인 이러한 딜레이에 조금 관심이있다.리눅스 드라이버 컨텍스트에서 마이크로 초 지연 및 스핀 록

답변

2

udelay은 원자 섹션 (즉, 스핀 록 또는 인터럽트)에서 사용하는 것이 안전합니다. 모든 세부 사항은 the kernel timers howto을보십시오.

udelay이 통화 대기 중이므로 성능이 걱정 될 수 있습니다. 그러나 스케줄이 가능한 절전 모드를 사용할 때 정확한 타이밍이 아니기 때문에 타이밍 요구 사항을 충족하는지 확신하기가 어려울 수 있습니다. 프로세서의 경우, usleep은 충분히 정확해야하지만 udelay보다 덜 확실합니다. 또한 usleep을 호출 할 때 스핀 록을 유지할 수 없으므로 다른 동기화 메커니즘을 사용해야합니다.

관련 문제