Quick Reference
This chapter introduced the following symbols related to memory handling. The list doesn’t include the symbols introduced in the first section, as that section is a huge list in itself and those symbols are rarely useful to device drivers.
-
#include <linux/mm.h> All the functions and structures related to memory management are prototyped and defined in this header.
-
int remap_page_range(unsigned long virt_add, unsigned long phys_add, unsigned long size, pgprot_t prot); This function sits at the heart of mmap. It maps
sizebytes of physical addresses, starting atphys_addr, to the virtual addressvirt_add. The protection bits associated with the virtual space are specified inprot.-
struct page *virt_to_page(void *kaddr);,void *page_address(struct page *page); These macros convert between kernel logical addresses and their associated memory map entries. page_address only works for low-memory pages, or high-memory pages that have been explicitly mapped.
-
void *__va(unsigned long physaddr);,unsigned long __pa(void *kaddr); These macros convert between kernel logical addresses and physical addresses.
-
unsigned long kmap(struct page *page);,void kunmap(struct page *page); kmap returns a kernel virtual address that is mapped to the given page, creating the mapping if need be. kunmap deletes the mapping for the given page.
-
#include <linux/iobuf.h>,void kiobuf_init(struct kiobuf *iobuf);,int alloc_kiovec(int number, struct kiobuf **iobuf); ...