
4.3.4 說明了設(shè)備側(cè)如何獲取頁與 sg 表。本節(jié)轉(zhuǎn)向 CPU 側(cè),對應(yīng) 4.3 的需求 N3,依次討論內(nèi)核態(tài)如何讀寫 BO(vmap)、用戶態(tài)如何將 BO 映射到自身地址空間(mmap),以及映射后發(fā)生缺頁時 helper 如何將頁插入頁表(vm_ops.fault)。本節(jié)的主線如下:vmap為內(nèi)核提供一段連續(xù)虛擬地址;mmap先將頁全部換入,但僅建立頁表為空的映射,待 CPU 訪問觸發(fā)缺頁時,再由缺頁回調(diào)將pages[]中的頁逐個插入頁表。1、vmap:內(nèi)核態(tài)的連續(xù)映射內(nèi)核代碼有時需要直接讀寫 BO,例如由 CPU 填充幀緩沖。然而 4.3.4 獲取的pages[]在物理上是分散的,內(nèi)核需要一段連續(xù)虛擬地址。drm_gem_shmem_vmap_locked即用于此:intdrm_gem_shmem_vmap_locked(structdrm_gem_shmem_object/