This was brought up on the linux-kernel mailing list recently, I believe
molnar ingo made this change, the latter representation is indeed correct.
(apply the patch)
On Tue, 2 Feb 1999, Stephen Costaras wrote:
>
> I tried patching the 2.2.1 kernel w/ the latest patch on ftp.us.kernel.org
> (19990128-2.2.0). Everything worked ok except for the patch against:
>
> mm/mmap.c
>
> Seems that this patch is trying to do the following:
>
>
> ***************
> *** 556,562 ****
> unsigned long start, unsigned long end)
> {
> unsigned long first = start & PGDIR_MASK;
> - unsigned long last = (end & PGDIR_MASK) + PGDIR_SIZE;
>
> if (!prev) {
> prev = mm->mmap;
> --- 556,562 ----
> unsigned long start, unsigned long end)
> {
> unsigned long first = start & PGDIR_MASK;
> + unsigned long last = ((end-1) & PGDIR_MASK) + PGDIR_SIZE;
>
> if (!prev) {
> prev = mm->mmap;
>
> BUT that line is actually:
>
> unsigned long last = (end + PGDIR_SIZE -1) & PGDIR_MASK;
>
> ...
>
>
> I'm not at all familiar with this level of the kernel so does anyone
> know if this is ok to leave?
>
> Steve
>