This one doesn't appear to have come through, yesterday.
Weird ? Perhaps the list doesn't like largeish attachments,
so I've uploaded it here in stead:
http://www.noterik.nl/ramon/fmw-19990821a.tar.gz
---
Hey everybody,
Here's a new tree. This is from the changelog:
-------------------------------------------------------------
fmw-990821a:
- (RvH) I cleaned up all of the code, giving it bigger indents
and converting to C-style comments whenever things got really
ugly. It's still not the clearest code I've ever seen but it'll
do for now. I also moved the virtualised test code into a
separate file, virtcode.c.
- (RvH) I changed host-linux.c so that it takes the amount of
quanta to run as an argument to ioctl(). Now it doesn't trap
back to the user application on ever quantum. Question:
on 2.2 we use current->need_resched, but is this true for
2.0 too, or does it have need_resched as a global variable ?
- (RvH) I integrated Ulrich's mmap() code into the module, and
fixed it so that it compiles on 2.2 kernels.
- (RvH) I changed the way interrupts are allocated. Now, the
host code needs to call init_reflect() (in monitor.c) after
init_monitor() for every interrupt that needs to be reflected
back to the host OS. The monitor.c code then dynamically
generates and relocates a correct interrupt stub. The host
code is responsible for allocating/freeing memory for the
stubs.
- (RvH) I fixed up the interrupts so that the code works on my
SMP machine. I still have 2.0 code in there too, but I can't
test that --- can anybody test this on a 2.0 SMP box ?
2.2 SMP is rather annoying because it allocates lots of IPIs,
and most of them aren't fixed (2.2 SMP does not use the 0x20-
0x2f mapping for the PIC, but has everything go through the
I/O APIC with rather weird interrupt mappings). In order to
allocate the correct interrupts I need access to a kernel
array called irq_vector[], which unfortunately is not exported
to modules. Thus you need to patch the linux kernel if you
want to run this code on a 2.2 SMP box. The patch is simple:
put the following code in linux/arch/i386/kernel/i386_ksyms.c:
#ifdef __SMP__
#include "irq.h"
EXPORT_SYMBOL(irq_vector);
#endif
and everything will work just beautifully (or anyway, that's
what it looks like.)
-------------------------------------------------------------
I also added the BeOS port to the tree, and put the BeOS
makefile in Makefile.be. However, (1) it shouldn't compile
anymore because I changed the way monitor.c works. I decided
not to touch the BeOS code because I don't have a BeOS box,
and I'd probably just mess it up :). And (2), you'll probably
want to use host-beos.h in stead of host-linux.h.
What we really need is a GNU Autoconf script. I happily decided
to write one, but after reading through the autoconf texinfo
documentation and getting utterly confused I figured that there
must be somebody on this list who has more experienced with this
than I am. Could someone write an autoconf script ? That'd
be nice.
Also, I noticed that the code runs extremely slowly on my
dual pentium-90. When the freemware user program is running,
then the mouse moves only about once a second, and running
other programs takes *very* long. On an AMD K6-350 I didn't
have any such problems. Does anybody have any idea why it
is so slow on my pentium ? I don't think it should do that...
Ramon