Re: [Etherboot-discuss] Base memory leak in Etherboot-5.4.3.
Brought to you by:
marty_connor,
stefanhajnoczi
From: Glenn B. <gl...@my...> - 2007-05-26 02:23:52
|
2 days of hacking and I found the memory leak: Etherboot does clean up nicely, but prefix_exit is called using real_call(), which reallocates the 4K real_mode_stack from 40:13h just before Etherboot exits. The fix is to just free 4K of 40:13h base memory at the start of prefix_exit if PCBIOS is defined (since the other cleanups are conditioned on PCBIOS). That is, do something like the appended patch. I'm testing over the weekend, and will let you know when I've also tested on lots of machines, which should be in the next week or 2. --Glenn > Index: romprefix.S > =================================================================== > RCS file: /repository/etherboot/src/arch/i386/prefix/romprefix.S,v > retrieving revision 1.3 > diff -a -u -u -r1.3 romprefix.S > --- romprefix.S 23 Mar 2007 18:22:41 -0000 1.3 > +++ romprefix.S 26 May 2007 02:18:02 -0000 > @@ -269,6 +276,22 @@ > .section ".text16", "ax", @progbits > .globl prefix_exit > prefix_exit: > +#ifdef PCBIOS > + /* Free the 4KB real modes stack. > + It's been freed once, but the > + real_call() to prefix_exit caused > + it to be reallocated. */ > + pushw %ax > + pushw %es > + movw $0x40, %ax > + movw %ax, %es > + movw %es:(0x13), %ax > + addw $4,%ax /* Free 4KiB */ > + movw %ax,%es:(0x13) > + popw %es > + popw %ax > +#endif > + > popw %ax /* padding */ > popw %di /* Load original SP into temp register */ > addw $6,%di /* Calculate SP value before call to Etherboot */ |