read_unlock, write_unlock for 2.4.21-20.EL
환경 : 2.4.21-20.EL
코드 :
read_lock(&tasklist_lock);
child = find_task_by_pid(pid);
read_unlock(&tasklist_lock);
error 메세지
RedCastle.o: unresolved symbol __write_lock_failed
RedCastle.o: unresolved symbol __read_lock_failed
#ifdef CONFIG_SMP
extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
EXPORT_SYMBOL_NOVERS(__write_lock_failed);
EXPORT_SYMBOL_NOVERS(__read_lock_failed);
#endif
질문:
SMP가 아닌 경우 위와 같이 error 메세지가 발생합니다.
제가 생각해 보건데 SMP에서만 EXPORT가 되어 있습니다.
1. 2.4.21-20.EL 환경에서는 read_lock, read_unlock을 사용할 수 없는 지? 만약 사용할 수 없다면 위의 소스가 안전 한지 궁금합니다.
2. 2.4.9 커널에서는 read_lock, read_unlock을 사용할 수 있었는데 write_trylock 함수만 사용할 수 없었습니다. write_trylock함수를 write_lock로 사용했는데 이 부분에 대해서는 조언 부탁드립니다.
3. rw_lock 관련 정보가 있으면 부탁 드립니다.
read_lock(), read_unlock()은 spinlock의 일종
read_lock(), read_unlock()은 spinlock의 일종입니다. SMP가 아닌 경우, 또는 2.6 커널의 경우 preemptible kernel이 아닌 경우 spinlock은 의미가 없습니다. 코드 상에서 child라는 변수를 race condition으로부터 보호하고 싶다면 안전한 코드라고 할 수 있을 것입니다. 에러가 나는 것은 설정이 잘 안맞아서 그럴 것입니다.
댓글 달기