커널

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

Posts

228 posts

[Linux-Kernel] LKML: qla2xxx: fix a potential NULL pointer dereference

Guillermo Austin Kim|2019년 9월 29일

출처https://patchwork.kernel.org/patch/11150763/https://lkml.org/lkml/2019/9/18/796 //// 흥미로운 패치다.// diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.cindex 98e60a3..31714c9 100644--- a/drivers/scsi/qla2xxx/qla_os.c+++ b/drivers/scsi/qla2xxx/qla_os.c@@ -3232,6 +3232,10 @@ static void qla2x00_iocb_work_fn(struct work_struct *work) req->req_q_in, req->req_q_out, r

[리눅스커널] 워크큐: 워커 스레드 핸들 worker_thread() 함수 분석하기 (1/2)

Guillermo Austin Kim|2019년 9월 29일

커널 스레드를 처음 분석하려고 할 때 다음과 같은 의문이 생길 때가 있습니다.  새로운 커널 스레드 코드 분석을 시작할 때 어느 코드부터 분석해야 할까? 먼저 커널 스레드 핸들 함수를 열어봐야 합니다. 그 이유는 커널 스레드 세부 동작은 커널 스레드 핸들 함수에 구현됐기 때문입니다. 마찬가지로 워커 스레드 세부 동작을 알려면 먼저 스레드 핸들 함수인 worker_thread() 함수를 봐야 합니다. 이번 시간에는 worker_thread() 함수를 분석하면서 세부 동작 원리를 배워보겠습니다. 먼저 worker_thread() 함수의 주요 동작은 다음과 같습니다. 워크 실행필요 시 워커 스레드 생성 요청워커 스레드 종료 위 항목 중 핵심 동작은 워크를 실행하는 것이며 나머지는 워커를

[리눅스커널] 워크큐: 워커 스레드를 생성하는 create_worker() 함수 분석하기

Guillermo Austin Kim|2019년 9월 25일

워커 스레드를 생성하려면 create_worker() 함수를 호출해야 합니다. 이번 시간에는 create_worker() 함수 코드를 분석하면서 워커 스레드를 생성하는 과정을 배워보겠습니다. 먼저 create_worker() 함수가 하는 주요 동작은 다음과 같습니다. 워커풀 아이디 읽어오기 워커 스레드 이름을 지정해 워커 스레드 생성 요청하기 워커풀에 워커 스레드 등록하기 워커 정보를 갱신하고 만든 워커 스레드를 깨우기 각 단계 별 코드를 자세히 살펴보겠습니다. 다음은 create_worker() 함수 구현부입니다.1 static struct worker *create_worker(struct worker_pool *pool)2 {3 struct worker *worker = NULL;4 int

[리눅스커널] 워크큐: 워커 스레드는 누가 언제 만들까

Guillermo Austin Kim|2019년 9월 25일

이번 챕터 앞 부분에서 워크큐에 대해 다음과 같이 소개했습니다.  워크를 처리하는 워커 스레드를 미리 생성해 놓고 워크 실행 요청이 오면 해당 워커 스레드가 이를 처리한다. 이번 시간에는 워커 스레드의 핸들인 워커를 언제 생성하는지 알아보겠습니다. 그렇다면 워커는 어느 함수를 실행할 때 생성할까요?  워커는 create_worker() 함수를 호출할 때 생성합니다. 워커를 생성하는 create_worker() 함수를 분석하기 전 이 함수를 호출하는 경로를 알아보겠습니다.  maybe_create_worker()  get_unbound_pool()  workqueue_prepare_cpu() 커널 내부에서 워크를 사용해 후반부 처리를 하므로 커널은 워커 스레드를 미리