mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-22 10:21:04 +00:00
parent
8ce197d7fa
commit
f988c254df
@ -63,7 +63,18 @@ void Kernel::Processor::schedule(Processor_client * const client)
|
|||||||
{
|
{
|
||||||
if (_id != executing_id()) {
|
if (_id != executing_id()) {
|
||||||
|
|
||||||
/* remote add client and let target processor notice it if necessary */
|
/*
|
||||||
|
* Remote add client and let target processor notice it if necessary
|
||||||
|
*
|
||||||
|
* The interrupt controller might provide redundant submission of
|
||||||
|
* inter-processor interrupts. Thus its possible that once the targeted
|
||||||
|
* processor is able to grab the kernel lock, multiple remote updates
|
||||||
|
* occured and consequently the processor traps multiple times for the
|
||||||
|
* sole purpose of recognizing the result of the accumulative changes.
|
||||||
|
* Hence, we omit further interrupts if there is one pending already.
|
||||||
|
* Additionailly we omit the interrupt if the insertion doesn't
|
||||||
|
* rescind the current scheduling choice of the processor.
|
||||||
|
*/
|
||||||
if (_scheduler.insert_and_check(client) && !_ip_interrupt_pending) {
|
if (_scheduler.insert_and_check(client) && !_ip_interrupt_pending) {
|
||||||
pic()->trigger_ip_interrupt(_id);
|
pic()->trigger_ip_interrupt(_id);
|
||||||
_ip_interrupt_pending = true;
|
_ip_interrupt_pending = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user