Clarifications on PFN_UP(x) macro

stl st.lambert02 at
Tue Jun 4 04:41:21 EDT 2013

I need some clarifications concerning the macro

#define PFN_UP(x)    (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)

found in "pfn.h"

I suppose that its aim is to give the page frame number of the page
following the page holding the physical address x, contrary to
PFN_DOWN(x) which give the page frame number of the page holding the
address x.

Assuming that the first page has the range 0x0000 to 0x0FFF,
the second 0x1000 to 0x1FFF and so on, it seems that there is
an issu with the starting address of each page, for example:
x = 0x10000  (PFN number 10)
0x10000 + 0xFFF >> 12    =    10, but should be 11 no?

I certainly misunderstood something.
Could someone clarify this point please?


More information about the Kernelnewbies mailing list