25e545e858
an UP kernel. PR: 117350 Submitted by: Yi Wang <wangyi6854 at gmail.com> Patch by: fchang at cs.ubc.ca Tested by: Yi Wang <wangyi6854 at gmail.com>
45 lines
1.2 KiB
Diff
45 lines
1.2 KiB
Diff
--- vmmon-only/freebsd/driver.c.orig 2008-03-04 10:05:14.000000000 +0300
|
|
+++ vmmon-only/freebsd/driver.c 2008-03-04 10:09:23.000000000 +0300
|
|
@@ -397,12 +397,12 @@
|
|
if ((error = falloc(td, &fp, &fd)) != 0)
|
|
return error;
|
|
|
|
- FILEDESC_LOCK(p->p_fd);
|
|
+ FILEDESC_XLOCK(p->p_fd);
|
|
fp->f_data = data;
|
|
fp->f_flag = flags & FMASK;
|
|
fp->f_ops = &vmmon_fileops;
|
|
fp->f_type = DTYPE_SOCKET;
|
|
- FILEDESC_UNLOCK(p->p_fd);
|
|
+ FILEDESC_XUNLOCK(p->p_fd);
|
|
|
|
#if __FreeBSD_version >= 501111
|
|
/* falloc now returns TWO references to the file, not one. */
|
|
@@ -1309,6 +1309,19 @@
|
|
return FALSE;
|
|
}
|
|
|
|
+static vm_paddr_t
|
|
+get_avail_end(void)
|
|
+{
|
|
+ vm_paddr_t avail_end;
|
|
+ int i;
|
|
+ avail_end = phys_avail[1];
|
|
+ for (i = 0; phys_avail[i + 1]; i += 2) {
|
|
+ if (phys_avail[i + 1] > avail_end)
|
|
+ avail_end = phys_avail[i + 1];
|
|
+ }
|
|
+ return avail_end;
|
|
+}
|
|
+
|
|
/*
|
|
* Allocate and lock numPages of memory physically continguous addresses
|
|
* below 4GB.
|
|
@@ -1341,6 +1354,7 @@
|
|
VMDEBUG("vmmon_alloc_low_pages: malloc MemRange failed\n");
|
|
return ENOMEM;
|
|
}
|
|
+ vm_paddr_t avail_end = get_avail_end();
|
|
if (avail_end > ISA_DMA_BOUNCE_THRESHOLD)
|
|
high = trunc_page(ISA_DMA_BOUNCE_THRESHOLD);
|
|
else
|