Date: Thu, 19 Dec 1996 10:10:33 -0700 (MST) From: Terry Lambert <terry@lambert.org> To: hasty@rah.star-gate.com (Amancio Hasty) Cc: terry@lambert.org, hackers@freebsd.org, multimedia@freebsd.org Subject: Re: mmap problems? Message-ID: <199612191710.KAA11716@phaeton.artisoft.com> In-Reply-To: <199612190619.WAA08457@rah.star-gate.com> from "Amancio Hasty" at Dec 18, 96 10:19:32 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> > You'll have to look carefully at the driver to see which is happening
> > (if either is the correct reason).
[ ... ]
Well, I did say "if".
Personally, I'd:
meteor_mmap(dev_t dev, int offset, int nprot)
{
int unit;
meteor_reg_t *mtr;
unit = UNIT(minor(dev));
printf( "meteor_mmap: unit=%d of %d, offset=%d, nprot=%08x\n",
unit, NMETEOR, offset, nprot);
if (unit >= NMETEOR) /* at this point could this happen? */
{
printf( "meteor_mmap: failed: unit exceeded possible units\n");
return(-1);
}
mtr = &(meteor[unit]);
if(nprot & PROT_EXEC)
{
printf("meteor_mmap: can't map a device PROT_EXEC!\n");
return -1;
}
printf("meteor_mmap: device pages(%08x)\n", mtr->alloc_pages * page_size);
if(offset >= mtr->alloc_pages * PAGE_SIZE)
{
printf("meteor_mmap: offset (%08x) exceeds device pages\n", offset);
return -1;
}
return i386_btop(vtophys(mtr->bigbuf) + offset);
}
This leaves a possible failure of (vtophys() + offset) to be valid;
you can check that, but it's unlikely (the pages are wired).
Terry Lambert
terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612191710.KAA11716>
