0

次のようにタスクレットをスケジュールする割り込みハンドラーがあります(疑似コード)-

struct tasklet_struct mytasklet;

void my_tasklet_function(unsigned long arg1) {
    ...
    pr_alert("Inside tasklet function\n");
    ...
}

int my_probe() {
    ....
    ....
    tasklet_init(&mytasklet, my_tasklet_function, arg1);
    ....
    /* Register interrupt handler my_irq_handler*/
    ....
}

irqreturn_t my_irq_handler(int irq, void *data) {
    ...
    status = read_reg(base_addr, intr_status_reg_offset)
    write_reg(base_addr, intr_status_reg_offset, status);

    if (status & INTR_MASK_1) {
         ....
         pr_alert("intr 1 came\n");
    }
    ...
    ...
    pr_alert("Schedule tasklet\n");
    tasklet_schedule(&mytasklet);
    pr_alert("Exit irq\n");

    return IRQ_HANDLED;
}

次の出力の後にカーネルがハングすることが観察されています

intr 1 came
Schedule tasklet

「Exit irq」の出力は表示されません。タスクレット機能の印刷物は印刷されません。

  • このタスクレットがスケジュールされない理由は何ですか?

  • カーネルがハングする原因は何ですか?

4

1 に答える 1