2.4 preempt kernel patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi.  I'm investigating preempt patch for 2.4 kernel.  (MIPS part of
preempt-kernel-rml-2.4.26-pre5-1.patch seems a bit old.  I'm looking
Jun Sun's 030304-b.preempt-mips.patch).

The patch contains following block (end of
arch/mips/kernel/irq.c:do_IRQ()):

 
 	if (softirq_pending(cpu))
 		do_softirq();
+
+#if defined(CONFIG_PREEMPT)
+	for(;;) {
+		preempt_enable_no_resched();
+		if (preempt_is_disabled() || !need_resched())
+			break;
+
+		db_assert(intr_off());
+		db_assert(!in_interrupt());
+
+		preempt_disable();
+		__sti();
+		preempt_schedule();
+		__cli();
+	}
+#endif
+
 	return 1;
 }
 

Q1.  What is purpose of this block?  (To decrease latency?  But other
archs (and 2.6 MIPS kernel) do not have block like this...)

Q2.  If an interrupt happened between __sti() and __cli(), and the
interrupt handler raise softirq, the softirq handler will not be
called soon (because do_softirq() immediately return if preempt
disabled).  So we must check softirq_pending again after this block?

Thank you.
---
Atsushi Nemoto


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux