For the past five years now, I've been working on various real-time
solutions for Linux. Part of this involvement has been the development
of what has been known for a while as the Adeos nanokernel, and also
the refactoring of RTAI and its reimplementation known as the "Fusion"
track within this project. In order to take this work to the next step
and further increase the collaboration and integration with mainstream
kernel development, the following patchset introduces the
interrupt pipeline for Linux.
The I-pipe (in its abbreviated form) is a much stripped down version of
the interrupt pipeline that was contained in the Adeos implementation.
This refactored patchset retains many of the same properties of its
Adeos ancestor, including the ability to implement an executive running
side-by-side with Linux, albeit with less integration with Linux as was
possible with the full Adeos.
Most importantly, this patch makes it possible to obtain deterministic
interrupt response times from the Linux kernel without any further
additions or modifications. A driver, for example, may register a
handler as part of a priority interrupt domain in front of Linux and
thereafter obtain its interrupts in a deterministic fashion regardless
of whether any piece of Linux code has disabled interrupts. Also, it
should be relatively simple to create future iterations which would
allow what remains of Adeos to load itself on top of the I-pipe in
order to allow multiple executives to run side-by-side with Linux in a
fully-integrated fashion, as in Fusion for example.
Basically, the I-pipe inserts itself between the interrupt-management
hardware and Linux. Any attempt from any Linux component to disable
interrupts results in Linux's I-pipe stage to be stalled. While stalled,
a pipeline stage will not receive interrupts. However, any pipeline
stage of higher priority will continue receiving interrupts, unless it
too stalled its own stage. It follows that interrupts are almost never
disabled.
I've broken down the patch into a core set of changes and an x86
architecture-dependent implementation. As you will notice, the changes
in both cases are mainly the addition of the files implementing the
I-pipe, specifically:
- include/linux/ipipe.h
- include/asm-i386/ipipe.h
- ipipe/*
- kernel/ipipe.c
- arch/i386/kernel/ipipe.c
Note that this patch can be conjugated with PREEMPT_RT, as had been
previously demonstrated by the availability of a combo patch including
both Adeos and PREEMPT_RT. I therefore encourage those interested in
PREEMPT_RT to review the I-pipe patches.
Looking forward to your feedback,
--
Philippe.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]