When faulting or updating the device page table properly handle the case of device memory entry. Signed-off-by: Jérôme Glisse <jglisse@xxxxxxxxxx> --- mm/hmm.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/mm/hmm.c b/mm/hmm.c index a5706d2..9455443 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -616,6 +616,13 @@ static void hmm_mirror_update_pte(struct hmm_mirror *mirror, goto out; } + if (hmm_pte_test_valid_dev(hmm_pte)) { + *hmm_pte &= event->pte_mask; + if (!hmm_pte_test_valid_dev(hmm_pte)) + hmm_pt_iter_directory_unref(iter); + return; + } + if (!hmm_pte_test_valid_dma(hmm_pte)) return; @@ -808,6 +815,12 @@ static int hmm_mirror_fault_pmd(pmd_t *pmdp, ptep = pte_offset_map(pmdp, start); hmm_pt_iter_directory_lock(iter); do { + if (hmm_pte_test_valid_dev(&hmm_pte[i])) { + if (write) + hmm_pte_set_write(&hmm_pte[i]); + continue; + } + if (!pte_present(*ptep) || (write && !pte_write(*ptep)) || pte_protnone(*ptep)) { -- 2.4.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>