[kernel] spin_lock 과 module_exit
글쓴이: poplinux / 작성시간: 목, 2012/01/05 - 11:07오전
spin_lock 이 걸려 있는 상태에서 module_exit() 를 할 경우 문제가 발생하게 되는데 해결 방법이 무엇이 있을까요?
대략 코드를 아래와 같이 작성하여 테스트 중입니다.
spinlock_t lock; struct task_struct *th_id; static int thr_spin_lock(void *arg) { int data=0; spin_lock(&lock); ssleep(10); spin_unlock(&lock); return 0; } static int __init lock_init(void) { th_id = (struct task_struct *)kthread_run(thr_spin_lock, NULL, "TEST"); return 0; } static void __exit lock_release(void) { RETRY: if(spin_is_locked(&lock)){ msleep(1000); goto RETRY: } kthread_stop(th_id); }
아래와 같은 순서로 작업을 진행합니다.
그럼 spin_lock 이 걸린 상황에서 rmmod 가 호출되겠지요.
insmod ./lock.ko
rmmod lock
이렇게 진행될 경우 시스템 행(데드락?) 이 걸려 버립니다.
물론 기다렸다가 spin_lock이 unlock 된 상태에서 rmmod 하면 정상동작을 합니다.
spin_lock 을 module_exit 할 때 안전하게 처리할 수 있는 방법이 있을까요?
조언 부탁드립니다.
Forums:
저 커널 쓰래드를 어떻게 죽이고 난 다음 종료하면
저 커널 쓰래드를 어떻게 죽이고 난 다음 종료하면 되지 않을까요?
댓글 달기