From owner-freebsd-emulation Mon Apr 22 8:47:56 2002 Delivered-To: freebsd-emulation@freebsd.org Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by hub.freebsd.org (Postfix) with ESMTP id 8E2F137B431; Mon, 22 Apr 2002 08:46:24 -0700 (PDT) Received: from grasshopper.cs.duke.edu (grasshopper.cs.duke.edu [152.3.145.30]) by duke.cs.duke.edu (8.9.3/8.9.3) with ESMTP id KAA02472; Mon, 22 Apr 2002 10:07:25 -0400 (EDT) Received: (from gallatin@localhost) by grasshopper.cs.duke.edu (8.11.6/8.9.1) id g3ME6tV42317; Mon, 22 Apr 2002 10:06:55 -0400 (EDT) (envelope-from gallatin@cs.duke.edu) From: Andrew Gallatin MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15556.6399.62081.426193@grasshopper.cs.duke.edu> Date: Mon, 22 Apr 2002 10:06:55 -0400 (EDT) To: Kenneth Culver Cc: freebsd-hackers@freebsd.org, freebsd-emulation@freebsd.org Subject: Re: implementing linux mmap2 syscall In-Reply-To: <200204211525.08827.culverk@yumyumyum.org> References: <200204211525.08827.culverk@yumyumyum.org> X-Mailer: VM 6.75 under 21.1 (patch 12) "Channel Islands" XEmacs Lucid Sender: owner-freebsd-emulation@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org Kenneth Culver writes: > static inline unsigned long do_mmap(struct file *file, unsigned long addr, <..> > ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); > out: > return ret; > } > > This is what mmap2 does: > > andstatic inline long do_mmap2( > unsigned long addr, unsigned long len, > unsigned long prot, unsigned long flags, > unsigned long fd, unsigned long pgoff) <...> > error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); > > So what it looks like to me is that mmap2 expects an offset that's already > page-aligned (I'm not sure if this is the right way to say it), where mmap > doesn't. the FreeBSD code in the linuxulator basically just takes the offset To me, it looks like mmap2 takes an offset that's a page index, rather than a byte position. Since linux passes the offset with a 32-bit long, rather than a 64-bit off_t like we do, they need to do this in order to be able to map offsets larger than 4GB into a file. For linux_mmap2, I'd think we want to do roughly the same things as linux_mmap, but with bsd_args.pos = ctob((off_t)linux_args.pos) Drew To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-emulation" in the body of the message