Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

This is with reference to LDD3 ch. 15, section "Mapping memory with nopage". I am having trouble understanding the third paragraph on page 429. It says:

Note that this implementation works for ISA memory regions but not for those on the PCI bus. PCI memory is mapped above the highest system memory, and there are no entries in the system memory map for those addresses. Because there is no struct page to return a pointer to, nopage cannot be used in these situations; you must use remap_pfn_range instead.


  1. Why would there be NO struct pages for PCI addresses? Aren't these addresses still within the processor address range (i.e less than 4 GB)?
  2. Referring to @gby's answer for http://stackoverflow.com/questions/11496999/how-does-one-determine-the-page-frame-number-for-device-memory, one explanation is that the "simple" module is useful only for mapping RAM areas to user virtual addresses. If so, how can one explain the invocation of the nopage method at all? By definition, arent all pages of main memory always available in the main memory? How can a page fault occur?

I would really appreciate any inputs/responses on this.

share|improve this question

closed as off topic by Gilles, Ulrich Dangel, jasonwryan, jw013, Tim Kennedy Sep 26 '12 at 19:18

Questions on Unix & Linux Stack Exchange are expected to relate to Unix or Linux within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here. If this question can be reworded to fit the rules in the help center, please edit the question.

Browse other questions tagged or ask your own question.