Messages in this thread | | | Date | Wed, 3 Apr 1996 20:53:15 -0500 (EST) | From | Speed Racer <> | Subject | Re: Kernel >1.3.7X Breaks DOSEMU |
| |
On Mon, 1 Apr 1996, Joel Maslak wrote:
> I can't compile 1.3.79 (don't want to do surgery), haven't tried 1.3.78. > > 1.3.80, 1.3.81 cause DOSEMU to do wierd things. I no longer can run > TradeWars 2.0 or Word Perfect 5.1! Interestingly, I get a DOS prompt, can > load 'EDIT' and 'MSD'. I can also compile dosemu under 1.3.80, but that > doesn't help. > > I noticed many things -- sockets, network, and pipes -- changed. > Something broke it. Unfortunately, so much has changed between versions I > can't simply swap files arround. > > Is this related to the sendmail problem?
I dunno about that, but I was able to track the problem down... It seems that the behavior of the request_irq/free_irq functions in the kernel changed somewhere about 1.3.80 or so (date was Mar 27 I think) to make them take an extra argument. Needless to say, any program calling these functions will have problems...
Here is a patch that at least makes it compile. DANGER: I HAVE NOT TESTED IT THOROUGHLY AND HAVE NOT IDEA IF IT'S THE RIGHT THING TO DO! YOU HAVE BEEN WARNED! that being said, here goes...
root@mossad:/usr/src/dosemu-0.60.4/emumod => # diff -c emusys.c~ emusys.c *** emusys.c~ Sat Nov 4 12:46:45 1995 --- emusys.c Tue Apr 2 02:09:24 1996 *************** *** 98,110 **** case EMUSYS_REQUEST_IRQ: { if (tasks[irqnumber]) return -1; irqbits &= ~(1 << irqnumber); ! if (request_irq(irqnumber, &irq_handler, 0, ID_STRING )) return -1; tasks[irqnumber] = current; return irqnumber; } case EMUSYS_FREE_IRQ: { if (!tasks[irqnumber]) return -1; ! free_irq(irqnumber); tasks[irqnumber] = 0; irqbits &= ~(1 << irqnumber); return irqnumber; --- 98,110 ---- case EMUSYS_REQUEST_IRQ: { if (tasks[irqnumber]) return -1; irqbits &= ~(1 << irqnumber); ! if (request_irq(irqnumber, &irq_handler, 0, ID_STRING, NULL )) return -1; tasks[irqnumber] = current; return irqnumber; } case EMUSYS_FREE_IRQ: { if (!tasks[irqnumber]) return -1; ! free_irq(irqnumber, NULL); tasks[irqnumber] = 0; irqbits &= ~(1 << irqnumber); return irqnumber; *************** *** 118,124 **** { int i; for (i=3; i<16; i++) if (tasks[i]) { ! free_irq(i); tasks[i]=0; } irqbits = 0; --- 118,124 ---- { int i; for (i=3; i<16; i++) if (tasks[i]) { ! free_irq(i, NULL); tasks[i]=0; } irqbits = 0;
The problem is the extra argument, which is supposed to be a void* to dev_id. I couldn't find any documentation of dev_id anywhere in the kernel source tree; perhaps I didn't look hard enough? From what I can tell from looking at linux/arch/i386/kernel/irq.c, it doesn't look like dev_id is ever looked at, but I can't be sure of that.
I have no idea how well dosemu will work with this; I still can't get it to work (it complains about "emumodule not loaded" and if I try to load the module I get "gcc2_compiled undefined", "symbols from 1.3.79 don't match those from 1.3.79", etc. I thought this problem had been fixed already. If anyone wants to help, here's my setup:
linux-1.3.79 libc-5.3.8 gcc-2.7.2 (perhaps I need 2.7.2.l.3?) modules-1.3.69f dosemu-0.60.4
shag
Judd Bourgeois shagboy@mossad.thecia.net Finger for PGP public key It is one of the superstitions of the human mind to have imagined that virginity could be a virtue. -- Voltaire
| |