summaryrefslogtreecommitdiffstats
path: root/sys/kern/imgact_aout.c
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1996-01-19 04:00:31 +0000
committerdyson <dyson@FreeBSD.org>1996-01-19 04:00:31 +0000
commit8fc8a772af22f6e03233d248fa2dbd9b5c2bdd7d (patch)
tree3c31fd95ea745005a9cd6733db5a16f31bd828a6 /sys/kern/imgact_aout.c
parent6755beedbf0ddaa9e66e91c8e74f620ede6bfad5 (diff)
downloadFreeBSD-src-8fc8a772af22f6e03233d248fa2dbd9b5c2bdd7d.zip
FreeBSD-src-8fc8a772af22f6e03233d248fa2dbd9b5c2bdd7d.tar.gz
Eliminated many redundant vm_map_lookup operations for vm_mmap.
Speed up for vfs_bio -- addition of a routine bqrelse to greatly diminish overhead for merged cache. Efficiency improvement for vfs_cluster. It used to do alot of redundant calls to cluster_rbuild. Correct the ordering for vrele of .text and release of credentials. Use the selective tlb update for 486/586/P6. Numerous fixes to the size of objects allocated for files. Additionally, fixes in the various pagers. Fixes for proper positioning of vnode_pager_setsize in msdosfs and ext2fs. Fixes in the swap pager for exhausted resources. The pageout code will not as readily thrash. Change the page queue flags (PG_ACTIVE, PG_INACTIVE, PG_FREE, PG_CACHE) into page queue indices (PQ_ACTIVE, PQ_INACTIVE, PQ_FREE, PQ_CACHE), thereby improving efficiency of several routines. Eliminate even more unnecessary vm_page_protect operations. Significantly speed up process forks. Make vm_object_page_clean more efficient, thereby eliminating the pause that happens every 30seconds. Make sequential clustered writes B_ASYNC instead of B_DELWRI even in the case of filesystems mounted async. Fix a panic with busy pages when write clustering is done for non-VMIO buffers.
Diffstat (limited to 'sys/kern/imgact_aout.c')
-rw-r--r--sys/kern/imgact_aout.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c
index 3c7a007..2bfc188 100644
--- a/sys/kern/imgact_aout.c
+++ b/sys/kern/imgact_aout.c
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: imgact_aout.c,v 1.20 1995/12/11 04:56:00 dyson Exp $
+ * $Id: imgact_aout.c,v 1.21 1995/12/15 02:57:40 peter Exp $
*/
#include <sys/param.h>
@@ -148,15 +148,15 @@ exec_aout_imgact(imgp)
exec_new_vmspace(imgp);
/*
- * Map text read/execute
+ * Map text/data read/execute
*/
vmaddr = virtual_offset;
error =
vm_mmap(&vmspace->vm_map, /* map */
&vmaddr, /* address */
- a_out->a_text, /* size */
+ a_out->a_text + a_out->a_data, /* size */
VM_PROT_READ | VM_PROT_EXECUTE, /* protection */
- VM_PROT_READ | VM_PROT_EXECUTE | VM_PROT_WRITE, /* max protection */
+ VM_PROT_ALL, /* max protection */
MAP_PRIVATE | MAP_FIXED, /* flags */
(caddr_t)imgp->vp, /* vnode */
file_offset); /* offset */
@@ -164,20 +164,13 @@ exec_aout_imgact(imgp)
return (error);
/*
- * Map data read/write (if text is 0, assume text is in data area
- * [Bill's screwball mode])
+ * allow writing of data
*/
- vmaddr = virtual_offset + a_out->a_text;
- error =
- vm_mmap(&vmspace->vm_map,
- &vmaddr,
- a_out->a_data,
- VM_PROT_READ | VM_PROT_WRITE | (a_out->a_text ? 0 : VM_PROT_EXECUTE),
- VM_PROT_ALL, MAP_PRIVATE | MAP_FIXED,
- (caddr_t) imgp->vp,
- file_offset + a_out->a_text);
- if (error)
- return (error);
+ vm_map_protect(&vmspace->vm_map,
+ vmaddr + a_out->a_text,
+ vmaddr + a_out->a_text + a_out->a_data,
+ VM_PROT_ALL,
+ FALSE);
if (bss_size != 0) {
/*
@@ -186,7 +179,7 @@ exec_aout_imgact(imgp)
* instruction of the same name.
*/
vmaddr = virtual_offset + a_out->a_text + a_out->a_data;
- error = vm_map_find(&vmspace->vm_map, NULL, 0, &vmaddr, bss_size, FALSE);
+ error = vm_map_find(&vmspace->vm_map, NULL, 0, &vmaddr, bss_size, FALSE, VM_PROT_ALL, VM_PROT_ALL, 0);
if (error)
return (error);
}
OpenPOWER on IntegriCloud