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.
- 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)?
- 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.