解决了debian上编译后,kernel_thread_func被优化掉的问题

This commit is contained in:
fslongjin
2022-04-26 00:25:15 +08:00
parent 4a41e734a5
commit 4473ff594c
11 changed files with 111 additions and 33 deletions

View File

@ -459,7 +459,6 @@ void do_IRQ(struct pt_regs *rsp, ul number)
irq->handler(number, irq->parameter, rsp);
else
kwarn("Intr vector [%d] does not have a handler!");
// 向中断控制器发送应答消息
if (irq->controller != NULL && irq->controller->ack != NULL)
irq->controller->ack(number);
@ -485,10 +484,10 @@ void do_IRQ(struct pt_regs *rsp, ul number)
{
// printk_color(RED, BLACK, "SMP IPI [ %d ]\n", number);
apic_local_apic_edge_ack(number);
{
irq_desc_t * irq = &SMP_IPI_desc[number-200];
if(irq->handler!=NULL)
irq_desc_t *irq = &SMP_IPI_desc[number - 200];
if (irq->handler != NULL)
irq->handler(number, irq->parameter, rsp);
}
}
@ -498,9 +497,11 @@ void do_IRQ(struct pt_regs *rsp, ul number)
kwarn("do IRQ receive: %d", number);
}
kdebug("before softirq");
// 检测是否有未处理的软中断
if (softirq_status != 0)
do_softirq();
kdebug("after softirq");
// 检测当前进程是否持有自旋锁,若持有自旋锁,则不进行抢占式的进程调度
if (current_pcb->preempt_count > 0)
return;
@ -510,6 +511,7 @@ void do_IRQ(struct pt_regs *rsp, ul number)
// 检测当前进程是否可被调度
if (current_pcb->flags & PROC_NEED_SCHED)
{
kdebug("to sched");
sched_cfs();
}
}

View File

@ -51,7 +51,7 @@ hardware_intr_controller HPET_intr_controller =
void HPET_handler(uint64_t number, uint64_t param, struct pt_regs *regs)
{
// printk("(HPET)");
printk("(HPET)");
switch (param)
{
case 0: // 定时器0中断