-/* subr_rmap.c.sav 4.6 82/10/10 */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved. The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ * @(#)subr_rmap.c.sav 7.1 (Berkeley) %G%
+ */
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/map.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/proc.h"
-#include "../h/text.h"
+#include "param.h"
+#include "systm.h"
+#include "map.h"
+#include "dir.h"
+#include "user.h"
+#include "proc.h"
+#include "text.h"
+#include "kernel.h"
/*
* Resource map handling routines.
*/
rminit(mp, size, addr, name, mapsize)
register struct map *mp;
- int size, addr;
+ long size, addr;
char *name;
int mapsize;
{
* This routine knows about the interleaving of the swapmap
* and handles that.
*/
+long
rmalloc(mp, size)
register struct map *mp;
+ long size;
{
register struct mapent *ep = (struct mapent *)(mp+1);
register int addr;
register struct mapent *bp;
swblk_t first, rest;
- if (size <= 0 || mp == swapmap && size > DMMAX)
+ if (size <= 0 || mp == swapmap && size > dmmax)
panic("rmalloc");
/*
* Search for a piece of the resource map which has enough
* then have to respect interleaving
* boundaries.
*/
- if (mp == swapmap &&
- (first = DMMAX - bp->m_addr%DMMAX) < bp->m_size) {
+ if (mp == swapmap && nswdev > 1 &&
+ (first = dmmax - bp->m_addr%dmmax) < bp->m_size) {
if (bp->m_size - first < size)
continue;
addr = bp->m_addr + first;
*/
rmfree(mp, size, addr)
struct map *mp;
- register int size, addr;
+ long size, addr;
{
struct mapent *firstbp;
register struct mapent *bp;
*/
for (bp2=bp; bp2->m_size; bp2++)
;
- if (bp2 == mp->m_limit)
+ if (bp2 + 1 >= mp->m_limit)
return (0);
while (bp2 > bp) {
(bp2+1)->m_addr = bp2->m_addr;