REQUEST_THREADED_IRQ

포스트: 4|아이템:R(19)
Tags

Posts

4 posts

[리눅스커널] 인터럽트 후반부 처리: setup_irq_thread() 함수 분석

Guillermo Austin Kim|2019년 2월 12일

이어서 IRQ 스레드를 생성 역할을 수행하는 setup_irq_thread() 함수를 분석하겠습니다.1 static int2 setup_irq_thread(struct irqaction *new, unsigned int irq, bool secondary)3 {4struct task_struct *t;5struct sched_param param = {6.sched_priority = MAX_USER_RT_PRIO/2,7};89if (!secondary) {10t = kthread_create(irq_thread, new, "irq/%d-%s", irq, 11 new->name);12} else {13t = kthread_create(irq_thread, new, "i

[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 생성 예제 코드 분석

Guillermo Austin Kim|2019년 2월 9일

이번에는 IRQ 스레드를 생성하는 예제 코드를 소개합니다. 실제 request_threaded_irq() 함수를 호출해서 IRQ 스레드를 생성하는 과정을 살펴보겠습니다. 분석할 코드는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.30/source/drivers/usb/dwc3/gadget.c]1 static int dwc3_gadget_start(struct usb_gadget *g,2 struct usb_gadget_driver *driver)3 {4 struct dwc3 *dwc = gadget_to_dwc(g);5 unsigned long flags;6 int ret = 0;7 int irq;89 irq = dwc->irq_gadget;1

[라즈베리파이][리눅스커널] IRQ Thread는 언제 생성할까?[2] #CS

Guillermo Austin Kim|2018년 6월 21일

# 인터럽트 후반부 처리1 IRQ Thread(threaded IRQ) 란 2. 인터럽트 후반부 처리(Bottom Half) 소개3.IRQ Thread는 언제 생성할까?[1] 4. IRQ Thread는 언제 생성할까?[2] 여기까지 request_threaded_irq 함수를 호출하면 결국 kthread_create 함수가 호출되어 IRQ Thread를 생성하는 코드를 짚어 봤습니다. 이제 분석한 대로 라즈베리파이에서 동작하는지 알아봐야겠죠. 이를 알아 보기 위한 코드를 소개할게요.diff --git a/kernel/kthread.c b/kernel/kthread.cindex 1c19edf82..0bc8a0037 100644--- a/kernel/kthread.c+++ b/kernel/kthread.

[라즈베리파이][리눅스커널] IRQ Thread는 언제 생성할까?[1] #CS

[라즈베리파이][리눅스커널] IRQ Thread는 언제 생성할까?[1] #CS

Guillermo Austin Kim|2018년 6월 19일

# 인터럽트 후반부 처리1 IRQ Thread(threaded IRQ) 란 2. 인터럽트 후반부 처리(Bottom Half) 소개3.IRQ Thread는 언제 생성할까?[1] IRQ Thread를 생성하기 위해서는 request_threaded_irq 을 호출하면 IRQ Thread가 생성된다고 설명해 드렸습니다. 사실 request_threaded_irq을 호출할 때 IRQ Thread가 생성되는 것은 아니고 다음 흐름에서 __kthread_create_on_node 함수가 실행할 때 생성됩니다. 우리는 커널 쓰레드를 생성할 때 kthread_create 함수를 호출한다고 배웠죠. IRQ Thread도 이 kthread_create 함수를 호출해서 생성합니다. 이로 I