Correct bad memory reference when dumpdev == NODEV (i.e. DISKLESS).
This commit is contained in:
parent
8a15866490
commit
486ad2cc03
|
@ -34,7 +34,7 @@
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91
|
* from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91
|
||||||
* $Id: autoconf.c,v 1.9 1994/07/27 00:21:16 mycroft Exp $
|
* $Id: autoconf.c,v 1.10 1994/08/14 22:47:28 gwr Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -87,6 +87,7 @@ configure()
|
||||||
* parameter based on device(s) used.
|
* parameter based on device(s) used.
|
||||||
*/
|
*/
|
||||||
swapconf();
|
swapconf();
|
||||||
|
dumpconf();
|
||||||
cold = 0;
|
cold = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,13 +112,6 @@ swapconf()
|
||||||
swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
|
swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* XXXX needs more work */
|
|
||||||
if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
|
|
||||||
/*dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) - physmem;*/
|
|
||||||
dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
|
|
||||||
ctob(physmem)/DEV_BSIZE;
|
|
||||||
if (dumplo < btodb(CLBYTES))
|
|
||||||
dumplo = btodb(CLBYTES);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DOSWAP /* change swdevt and dumpdev */
|
#define DOSWAP /* change swdevt and dumpdev */
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
|
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
|
||||||
* $Id: machdep.c,v 1.115 1994/08/03 06:28:10 mycroft Exp $
|
* $Id: machdep.c,v 1.116 1994/08/14 22:47:33 gwr Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -122,8 +122,6 @@ static vm_size_t avail_remaining;
|
||||||
|
|
||||||
int _udatasel, _ucodesel, _gsel_tss;
|
int _udatasel, _ucodesel, _gsel_tss;
|
||||||
|
|
||||||
long dumplo;
|
|
||||||
|
|
||||||
void dumpsys __P((void));
|
void dumpsys __P((void));
|
||||||
|
|
||||||
caddr_t allocsys();
|
caddr_t allocsys();
|
||||||
|
@ -714,8 +712,52 @@ boot(howto)
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned dumpmag = 0x8fca0101; /* magic number for savecore */
|
/*
|
||||||
int dumpsize = 0; /* also for savecore */
|
* These variables are needed by /sbin/savecore
|
||||||
|
*/
|
||||||
|
u_long dumpmag = 0x8fca0101; /* magic number */
|
||||||
|
int dumpsize = 0; /* pages */
|
||||||
|
long dumplo = 0; /* blocks */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is called by configure to set dumplo, dumpsize.
|
||||||
|
* Dumps always skip the first CLBYTES of disk space
|
||||||
|
* in case there might be a disk label stored there.
|
||||||
|
* If there is extra space, put dump at the end to
|
||||||
|
* reduce the chance that swapping trashes it.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
dumpconf()
|
||||||
|
{
|
||||||
|
int nblks; /* size of dump area */
|
||||||
|
int maj;
|
||||||
|
int (*getsize)();
|
||||||
|
|
||||||
|
if (dumpdev == NODEV)
|
||||||
|
return;
|
||||||
|
|
||||||
|
maj = major(dumpdev);
|
||||||
|
if (maj < 0 || maj >= nblkdev)
|
||||||
|
panic("dumpconf: bad dumpdev=0x%x", dumpdev);
|
||||||
|
getsize = bdevsw[maj].d_psize;
|
||||||
|
if (getsize == NULL)
|
||||||
|
return;
|
||||||
|
nblks = (*getsize)(dumpdev);
|
||||||
|
if (nblks <= ctod(1))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Position dump image near end of space, page aligned. */
|
||||||
|
dumpsize = physmem; /* pages */
|
||||||
|
dumplo = nblks - ctod(dumpsize);
|
||||||
|
dumplo &= ~(ctod(1)-1);
|
||||||
|
|
||||||
|
/* If it does not fit, truncate it by moving dumplo. */
|
||||||
|
if (dumplo < ctod(1)) {
|
||||||
|
dumplo = ctod(1);
|
||||||
|
dumpsize = dtoc(nblks - dumplo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Doadump comes here after turning off memory management and
|
* Doadump comes here after turning off memory management and
|
||||||
* getting on the dump stack, either when called above, or by
|
* getting on the dump stack, either when called above, or by
|
||||||
|
|
Loading…
Reference in New Issue