What is the point of mincore() in reserve_area() in libs/wine/mmap.c?

Albert Lee trisk at opensolaris.org
Tue May 4 19:20:55 CDT 2010


On Tue, 04 May 2010 10:22:44 -0600, Charles Davis
<cdavis at mymail.mines.edu> wrote:
> On 5/4/10 10:17 AM, Johann "Myrkraverk" Oskarsson wrote:
>> Hi all,
>> 
>> In the Solaris/BSD implementation of reserve_area() in libs/wine/mmap.c
>> there is
>> 
>>         for (i = 0; i < size; i += pagesize)
>>             if (mincore( (caddr_t)addr + i, pagesize, &vec ) != -1)
>>             break;
>> 
>> &vec is never used again in that function.  What is the point of
>> mincore() ?
> It's trying to see if the address is valid. From the manpage:
> 
> RETURN VALUES
>      Upon successful completion, a value of 0 is returned.  Otherwise,
>      a value of -1 is returned and errno is set to indicate the error.
> 
> ERRORS
>      [EINVAL]           addr is not a valid address for user mode.
> 
>      [EFAULT]           an error occurred trying to copy to the output
>                         character array vec.
> 
> vec is to make sure it failed because the address was invalid, not
> because it couldn't write the flags out.
> 
> Chip

It's a clever, though stop-the-world expensive way to determine which
areas of the address space already have mappings present so MAP_FIXED can
be used without accidentally clobbering another mapping. The strategy
probably should be revisited for OpenSolaris since mmap now accepts an
address hint.

-Albert




More information about the wine-devel mailing list