
- 2019/09/12 09:06
- rousalome.egloos.com/10003422
- 덧글수 : 6

핑백
[Linux Kernel(4.19) Hacks] [리눅스커널] 스핀락(spinlock) 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore - DEVBLOG - 개발자 메타블로그 2019-09-12 17:41:51 #
... 러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore 원문 링크 [리눅스커널] 스핀락(spinlock) 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore 미리보기 리눅스 커널에서 spin_lock_irq() 함수 뿐만 아니라 spin_lock_ir ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널동기화: 임계영역(Critical Section)과 레이스 컨디션이란 2019-09-14 17:45:17 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널동기화: 레이스 컨디션은 왜 발생할까? 2019-09-14 17:45:32 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 커널동기화: 레이스 컨디션 커널 패치 소개 2019-09-14 17:45:50 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화 - 유저 프로세스 시스템 콜 호출 시 레이스 컨디션 2019-09-14 17:46:40 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화 - 커널 프로세스 레이스 컨디션 2019-09-14 17:47:07 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [라즈베리파이] 동기화 - 인터럽트 발생으로 레이스 컨디션 발생 2019-09-14 17:47:54 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [라즈베리파이] 동기화 - 커널 동기화 기법 소개 2019-09-14 17:48:24 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 스핀락과 뮤텍스 기법 차이점 알아보기 2019-09-14 17:48:37 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [라즈베리파이] 동기화 - 스핀락(spinlock) 소개 2019-09-14 17:49:13 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 스핀락 자료구조 알아보기 2019-09-14 17:49:26 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 스핀락(spinlock)을 쓰는 예제 코드 살펴보기 2019-09-14 17:49:40 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 스핀락(spinlock) 처리 흐름도 알아보기 2019-09-14 17:50:04 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 함수 분석 2019-09-14 17:50:33 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 어셈블리 코드 분석 2019-09-14 17:51:32 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [라즈베리파이] 동기화 - 스핀락(spinlock): spin_unlock() 함수 분석 2019-09-14 17:51:50 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq() 2019-09-14 17:52:12 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 뮤텍스의 기본 개념 소개하기 2019-09-14 17:52:48 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 뮤텍스 fastpath 동작 2019-09-14 17:53:04 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 뮤텍스 slowpath: mutex_lock() 함수 분석 2019-09-14 17:53:31 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화: 뮤텍스 slowpath: mutex_unlock() 함수 분석 2019-09-14 17:53:46 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화/디버깅: 스핀락(spinlock) 2019-09-14 17:54:06 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : [리눅스커널] 동기화/디버깅: 뮤텍스(Mutex) owner 확인해보기 2019-09-14 17:54:24 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : mutex lock vs spinlock ( 재현 상황 ) 2019-09-14 20:59:19 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : Spinlock(스핀락) - 소개 2019-09-14 20:59:27 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
Linux Kernel(4.19) Hacks : Spinlock(스핀락) - spin_lock() vs spin_lock_irq() vs spin_lock_irqsave() - 분석 2019-09-14 21:01:07 #
... 러그인 함수: spin_lock_irq()/spin_unlock_irq() 스핀락 플러그인 함수: spin_lock_irqsave()/spin_unlock_irqrestore뮤텍스란 뮤텍스의 기본 개념 소개하기 뮤텍스 ... more
덧글
-
최재국 2020/05/27 00:06 # 삭제 답글
spin_lock_irq() 함수를 호출한 후 인터럽트를 비활성화하다 보니 현재 인터럽트를 상태(활성화/비활성화)를 확인하기 어려움 이라고 적혀있는데
의미를 제대로 모르겠습니다. 인터럽트를 비활성화하고 들어갔는데 현재 인터럽트 상태를 확인하기가 어렵다?? 무슨말이죵 ..
인터럽트 비활성화하면 스케줄링(타이머 인터럽트)도 안되니까 딱히 흐름이 바뀌는것도 아닌거같은데 순차적으로 코드가 실행되고 나오면 끝아닌가요???
궁금합니다.!! -
AustinKim 2020/05/27 11:17 #
커널 내부에서 여러 수 많은 함수들이 호출될 수 있습니다. 그러다보니 함수 호출의 깊이가 깊어질 수 있죠.
여러 함수에서 spin_lock_irq() 함수를 사용하면 인터럽트를 '비활성화/활성화'하게 되고 이 결과 인터럽트를 설정한 순서에 맞게 '비활성화/활성화'하지 못할 수 있습니다. 그래서 인터럽트 플래그 상태를 저장해 놓고 이 플래그에 맞게 '비활성화/활성화'하면 순서에 맞게 인터럽트를 '비활성화/활성화'를 할 수 있습니다.
이런 용도로 사용하는게 spin_lock_irqsave() 함수입니다.
더 자세한 내용은 아래 링크를 참고하시면 좋겠습니다.
https://kldp.org/node/54671
https://stackoverflow.com/questions/2559602/spin-lock-irqsave-vs-spin-lock-irq
Thanks,
Austin Kim -
AustinKim 2020/05/27 11:18 # 답글
커널 내부에서 여러 수 많은 함수들이 호출될 수 있습니다. 그러다보니 함수 호출의 깊이가 깊어질 수 있죠.
여러 함수에서 spin_lock_irq() 함수를 사용하면 인터럽트를 '비활성화/활성화'하게 되고 이 결과 인터럽트를 설정한 순서에 맞게 '비활성화/활성화'하지 못할 수 있습니다. 그래서 인터럽트 플래그 상태를 저장해 놓고 이 플래그에 맞게 '비활성화/활성화'하면 순서에 맞게 인터럽트를 '비활성화/활성화'를 할 수 있습니다.
이런 용도로 사용하는게 spin_lock_irqsave() 함수입니다.
더 자세한 내용은 아래 링크를 참고하시면 좋겠습니다.
https://kldp.org/node/54671
https://stackoverflow.com/questions/2559602/spin-lock-irqsave-vs-spin-lock-irq
Thanks,
Austin Kim -
최재국 2020/08/04 13:16 # 삭제 답글
__raw_spin_lock() 함수를 보면서 이 차이점을 확인해볼까요?
[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/spinlock_api_smp.h]
01 static inline void __raw_spin_lock(raw_spinlock_t *lock)
02 {
03 local_irq_disable();
04 preempt_disable();
05 spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
06 LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
07 }
local_irq_disable(); 함수가 있다는 말은 함수 이름이 __raw_spin_lock_irq 인것같은데 오타인가요?? -
AustinKim 2020/08/04 15:40 #
오타가 맞습니다.
__raw_spin_lock() -> __raw_spin_lock_irq() 함수로 수정했습니다.
감사합니다. -
2020/08/04 15:40 # 답글
최근 덧글