From owner-p4-projects@FreeBSD.ORG Thu Jan 18 22:58:54 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5D26416A415; Thu, 18 Jan 2007 22:58:54 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 17D9016A40F for ; Thu, 18 Jan 2007 22:58:54 +0000 (UTC) (envelope-from jkim@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id F0FE413C44B for ; Thu, 18 Jan 2007 22:58:53 +0000 (UTC) (envelope-from jkim@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id l0IMwrEl088355 for ; Thu, 18 Jan 2007 22:58:53 GMT (envelope-from jkim@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l0IMwrOJ088352 for perforce@freebsd.org; Thu, 18 Jan 2007 22:58:53 GMT (envelope-from jkim@freebsd.org) Date: Thu, 18 Jan 2007 22:58:53 GMT Message-Id: <200701182258.l0IMwrOJ088352@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jkim@freebsd.org using -f From: Jung-uk Kim To: Perforce Change Reviews Cc: Subject: PERFORCE change 113146 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jan 2007 22:58:54 -0000 http://perforce.freebsd.org/chv.cgi?CH=113146 Change 113146 by jkim@jkim_hammer on 2007/01/18 22:58:37 Clean up mmap and sync amd64 with i386. Now they are almost identical. Affected files ... .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux.h#13 edit .. //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_machdep.c#25 edit .. //depot/projects/linuxolator/src/sys/i386/linux/linux.h#11 edit .. //depot/projects/linuxolator/src/sys/i386/linux/linux_machdep.c#18 edit Differences ... ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux.h#13 (text+ko) ==== @@ -167,6 +167,15 @@ #define LINUX_MAP_ANON 0x0020 #define LINUX_MAP_GROWSDOWN 0x0100 +struct l_mmap_argv { + l_uintptr_t addr; + l_size_t len; + l_int prot; + l_int flags; + l_int fd; + l_off_t pgoff; +} __packed; + /* * stat family of syscalls */ ==== //depot/projects/linuxolator/src/sys/amd64/linux32/linux32_machdep.c#25 (text+ko) ==== @@ -739,16 +739,6 @@ return (0); } -/* XXX move */ -struct l_mmap_argv { - l_ulong addr; - l_ulong len; - l_ulong prot; - l_ulong flags; - l_ulong fd; - l_ulong pgoff; -}; - #define STACK_SIZE (2 * 1024 * 1024) #define GUARD_SIZE (4 * PAGE_SIZE) @@ -834,10 +824,13 @@ bsd_args.flags |= MAP_PRIVATE; if (linux_args->flags & LINUX_MAP_FIXED) bsd_args.flags |= MAP_FIXED; - if (linux_args->flags & LINUX_MAP_ANON) + if (linux_args->flags & LINUX_MAP_ANON) { bsd_args.flags |= MAP_ANON; - else + bsd_args.fd = -1; + } else { bsd_args.flags |= MAP_NOSYNC; + bsd_args.fd = linux_args->fd; + } if (linux_args->flags & LINUX_MAP_GROWSDOWN) { bsd_args.flags |= MAP_STACK; @@ -863,11 +856,7 @@ * fixed size of (STACK_SIZE - GUARD_SIZE). */ - /* This gives us TOS */ - bsd_args.addr = (caddr_t)PTRIN(linux_args->addr) + - linux_args->len; - - if ((caddr_t)PTRIN(bsd_args.addr) > + if ((caddr_t)PTRIN(linux_args->addr) + linux_args->len > p->p_vmspace->vm_maxsaddr) { /* * Some linux apps will attempt to mmap @@ -905,7 +894,8 @@ * not using VM_STACK we map the full stack, since we * don't have a way to autogrow it. */ - bsd_args.addr -= bsd_args.len; + bsd_args.addr = (caddr_t)PTRIN(linux_args->addr) - + bsd_args.len; } else { bsd_args.addr = (caddr_t)PTRIN(linux_args->addr); bsd_args.len = linux_args->len; @@ -918,9 +908,7 @@ if (linux_args->prot & PROT_READ) bsd_args.prot = linux_args->prot | PROT_EXEC; - if (linux_args->flags & LINUX_MAP_ANON) - bsd_args.fd = -1; - else { + if (bsd_args.fd != -1) { /* * Linux follows Solaris mmap(2) description: * The file descriptor fildes is opened with @@ -933,7 +921,7 @@ * argument as described below. */ - if ((error = fget(td, linux_args->fd, &fp)) != 0) + if ((error = fget(td, bsd_args.fd, &fp)) != 0) return (error); if (fp->f_type != DTYPE_VNODE) { fdrop(fp, td); @@ -946,7 +934,6 @@ return (EACCES); } - bsd_args.fd = linux_args->fd; fdrop(fp, td); } bsd_args.pos = (off_t)linux_args->pgoff * PAGE_SIZE; ==== //depot/projects/linuxolator/src/sys/i386/linux/linux.h#11 (text+ko) ==== @@ -142,6 +142,15 @@ #define LINUX_MAP_ANON 0x0020 #define LINUX_MAP_GROWSDOWN 0x0100 +struct l_mmap_argv { + l_uintptr_t addr; + l_size_t len; + l_int prot; + l_int flags; + l_int fd; + l_off_t pgoff; +} __packed; + /* * stat family of syscalls */ ==== //depot/projects/linuxolator/src/sys/i386/linux/linux_machdep.c#18 (text+ko) ==== @@ -576,16 +576,6 @@ return (0); } -/* XXX move */ -struct l_mmap_argv { - l_caddr_t addr; - l_int len; - l_int prot; - l_int flags; - l_int fd; - l_int pos; -}; - #define STACK_SIZE (2 * 1024 * 1024) #define GUARD_SIZE (4 * PAGE_SIZE) @@ -667,10 +657,13 @@ bsd_args.flags |= MAP_PRIVATE; if (linux_args->flags & LINUX_MAP_FIXED) bsd_args.flags |= MAP_FIXED; - if (linux_args->flags & LINUX_MAP_ANON) + if (linux_args->flags & LINUX_MAP_ANON) { bsd_args.flags |= MAP_ANON; - else + bsd_args.fd = -1; + } else { bsd_args.flags |= MAP_NOSYNC; + bsd_args.fd = linux_args->fd; + } if (linux_args->flags & LINUX_MAP_GROWSDOWN) { bsd_args.flags |= MAP_STACK; @@ -696,10 +689,8 @@ * fixed size of (STACK_SIZE - GUARD_SIZE). */ - /* This gives us TOS */ - bsd_args.addr = linux_args->addr + linux_args->len; - - if (bsd_args.addr > p->p_vmspace->vm_maxsaddr) { + if ((caddr_t)PTRIN(linux_args->addr) + linux_args->len > + p->p_vmspace->vm_maxsaddr) { /* * Some linux apps will attempt to mmap * thread stacks near the top of their @@ -735,16 +726,15 @@ * not using VM_STACK we map the full stack, since we * don't have a way to autogrow it. */ - bsd_args.addr -= bsd_args.len; + bsd_args.addr = (caddr_t)PTRIN(linux_args->addr) - + bsd_args.len; } else { - bsd_args.addr = linux_args->addr; + bsd_args.addr = (caddr_t)PTRIN(linux_args->addr); bsd_args.len = linux_args->len; } bsd_args.prot = linux_args->prot; - if (linux_args->flags & LINUX_MAP_ANON) - bsd_args.fd = -1; - else { + if (bsd_args.fd != -1) { /* * Linux follows Solaris mmap(2) description: * The file descriptor fildes is opened with @@ -757,7 +747,7 @@ * argument as described below. */ - if ((error = fget(td, linux_args->fd, &fp)) != 0) + if ((error = fget(td, bsd_args.fd, &fp)) != 0) return (error); if (fp->f_type != DTYPE_VNODE) { fdrop(fp, td); @@ -770,7 +760,6 @@ return (EACCES); } - bsd_args.fd = linux_args->fd; fdrop(fp, td); } bsd_args.pos = linux_args->pos;