Question about max_pfn

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello all,

I can't undestand one thing in kernel source,
so if anybody has information about it,
please sched the light on it.

There is a max_pfn variable. According to the comment
this is "the highest page frame number we have available"
It is calculated on x86 while iterating over memory regions:

      for (i = 0; i < e820.nr_map; i++) {
              unsigned long start, end;
              /* RAM? */
              if (e820.map[i].type != E820_RAM)
                      continue;
              start = PFN_UP(e820.map[i].addr);
              end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
              if (start >= end)
                      continue;
              if (end > max_pfn)
                      max_pfn = end;
              memory_present(0, start, end);
      }

4GB RAM is installed on my node, 32 bit kernel,
4 * 1024 * 1024 / 4 = 1024 * 1024 = 1048576 page frames.
Page frames are counted starting from 0, so, I suppose,
max_pfn should equal 1048575.

However on my real node max_pfn = 1048576.
I think, that we should change
end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
to
end = PFN_DOWN(e820.map[i].addr + e820.map[i].size - 1);

What do you think about it, do I miss something?
Thanks.

--
Vasily Tarasov,
tarasov.vasily@xxxxxxxxx

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux