커널

포스트: 228|조회수: 0|CIVILIZATION
Items

Posts

228 posts

[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (2) @process_one_work

Guillermo Austin Kim|2018년 9월 12일

From...워크는 누가 언제 호출하나? (1) @process_one_work 다음 24~26번 줄 코드를 분석하겠습니다.24 worker->current_work = work;25 worker->current_func = work->func;26 worker->current_pwq = pwq; 24~25번 줄 코드에서 worker->current_work이란 멤버에 work를 등록하고 worker->current_func 함수 포인터에 워크 핸들러 함수를 지정합니다. 26번 줄 코드를 보면 worker->current_pwq에 워커 풀 주소를 저장합니다. process_one_work() 함수에서 워크 핸들러는 worker->current_func 함

[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (1) @process_one_work

[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (1) @process_one_work

Guillermo Austin Kim|2018년 9월 11일

워크를 워크큐에 큐잉하면 다음 그림과 같이 insert_work() 함수에서 wake_up_worker() 이란 함수를 호출해서 워커 쓰레드를 깨웁니다. 이 동작 흐름은 위 그림과 같이 3단계로 분류할 수 있습니다. 1 단계워크를 워크큐에 큐잉합니다. 2 단계wake_up_worker() 함수를 호출해서 워커 쓰레드를 깨웁니다. 커널 스케줄러에게 워커 쓰레드를 깨워달라는 요청입니다. 3 단계스케줄링 정책에 따라 워커 쓰레드가 실행할 순서가 되면 커널 스케줄러가 워커 쓰레드를 실행합니다. 워커 쓰레드 핸들 함수는 worker_thread() 입니다. 이 함수에서 process_one_work() 함수를 호출해서 워크 핸들러를 호출하는 겁니다. 이번 소절에서는 process_one_work() 함

[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐 큐잉시 핵심함수 분석

[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐 큐잉시 핵심함수 분석

Guillermo Austin Kim|2018년 9월 10일

From:워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(1) 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(2) 이제부터 __queue_work() 함수에서 호출하는 다른 워크큐 주요 함수들을 알아봅니다. 시스템 워크큐 뿐만 아니라 다른 워크큐에서도 이용하는 함수들이니 잘 기억할 필요가 있습니다. get_work_pool() 함수get_work_pool() 함수 분석을 시작하겠습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/kernel/workqueue.c#L709]1 static struct worker_pool *get_work_pool(struct work_struct *work)2 {3unsigned lon

[라즈베리파이] git clone 명령어로 특정 커밋 코드로 돌리기

Guillermo Austin Kim|2018년 9월 10일

이번에는 git clone 명령어로 특정 커밋으로 소스 코드를 변경하는 과정을 알아봅시다. 돌아가려는 커밋은 6/13/2018 날짜입니다.commit 5762758699e1ddab22bf4c14eb225941761c52c8Author: Dave Stevenson Date: Wed Jun 13 15:21:10 2018 +0100 net: lan78xx: Disable TCP Segmentation Offload (TSO) TSO seems to be having issues when packets are dropped and the remote end uses Selective Acknowledge (SACK)