From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f52.google.com (mail-qg0-f52.google.com [209.85.192.52]) by kanga.kvack.org (Postfix) with ESMTP id 1469A6B0256 for ; Thu, 13 Aug 2015 15:37:54 -0400 (EDT) Received: by qged69 with SMTP id d69so38155659qge.0 for ; Thu, 13 Aug 2015 12:37:53 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id a108si5482959qga.15.2015.08.13.12.37.53 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Aug 2015 12:37:53 -0700 (PDT) From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= Subject: [PATCH 04/15] HMM: add new HMM page table flag (select flag). Date: Thu, 13 Aug 2015 15:37:20 -0400 Message-Id: <1439494651-1255-5-git-send-email-jglisse@redhat.com> In-Reply-To: <1439494651-1255-1-git-send-email-jglisse@redhat.com> References: <1439494651-1255-1-git-send-email-jglisse@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: owner-linux-mm@kvack.org List-ID: To: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Linus Torvalds , joro@8bytes.org, Mel Gorman , "H. Peter Anvin" , Peter Zijlstra , Andrea Arcangeli , Johannes Weiner , Larry Woodman , Rik van Riel , Dave Airlie , Brendan Conoboy , Joe Donohue , Christophe Harle , Duncan Poole , Sherry Cheung , Subhash Gutti , John Hubbard , Mark Hairgrove , Lucien Dunning , Cameron Buschardt , Arvind Gopalakrishnan , Haggai Eran , Shachar Raindel , Liran Liss , Roland Dreier , Ben Sander , Greg Stoner , John Bridgman , Michael Mantor , Paul Blinzer , Leonid Shamis , Laurent Morichetti , Alexander Deucher , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= When migrating memory the same array for HMM page table entry might be use with several different devices. Add a new select flag so current device driver callback can know which entry are selected for the device. Signed-off-by: JA(C)rA'me Glisse --- include/linux/hmm_pt.h | 6 ++++-- mm/hmm.c | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/linux/hmm_pt.h b/include/linux/hmm_pt.h index b017aa7..f745d6c 100644 --- a/include/linux/hmm_pt.h +++ b/include/linux/hmm_pt.h @@ -77,8 +77,9 @@ static inline unsigned long hmm_pde_pfn(dma_addr_t pde) #define HMM_PTE_VALID_DEV_BIT 0 #define HMM_PTE_VALID_DMA_BIT 1 #define HMM_PTE_VALID_PFN_BIT 2 -#define HMM_PTE_WRITE_BIT 3 -#define HMM_PTE_DIRTY_BIT 4 +#define HMM_PTE_SELECT 3 +#define HMM_PTE_WRITE_BIT 4 +#define HMM_PTE_DIRTY_BIT 5 /* * Reserve some bits for device driver private flags. Note that thus can only * be manipulated using the hmm_pte_*_bit() sets of helpers. @@ -170,6 +171,7 @@ static inline bool hmm_pte_test_and_set_bit(dma_addr_t *ptep, HMM_PTE_BIT_HELPER(valid_dev, HMM_PTE_VALID_DEV_BIT) HMM_PTE_BIT_HELPER(valid_dma, HMM_PTE_VALID_DMA_BIT) HMM_PTE_BIT_HELPER(valid_pfn, HMM_PTE_VALID_PFN_BIT) +HMM_PTE_BIT_HELPER(select, HMM_PTE_SELECT) HMM_PTE_BIT_HELPER(dirty, HMM_PTE_DIRTY_BIT) HMM_PTE_BIT_HELPER(write, HMM_PTE_WRITE_BIT) diff --git a/mm/hmm.c b/mm/hmm.c index d44c54f..08c0160 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -743,6 +743,7 @@ static int hmm_mirror_fault_hpmd(struct hmm_mirror *mirror, BUG_ON(hmm_pte_pfn(hmm_pte[i]) != pfn); if (pmd_write(*pmdp)) hmm_pte_set_write(&hmm_pte[i]); + hmm_pte_set_select(&hmm_pte[i]); } while (addr += PAGE_SIZE, pfn++, i++, addr != next); hmm_pt_iter_directory_unlock(iter); mirror_fault->addr = addr; @@ -811,6 +812,7 @@ static int hmm_mirror_fault_pmd(pmd_t *pmdp, BUG_ON(hmm_pte_pfn(hmm_pte[i]) != pte_pfn(*ptep)); if (pte_write(*ptep)) hmm_pte_set_write(&hmm_pte[i]); + hmm_pte_set_select(&hmm_pte[i]); } while (addr += PAGE_SIZE, ptep++, i++, addr != next); hmm_pt_iter_directory_unlock(iter); pte_unmap(ptep - 1); @@ -843,7 +845,8 @@ static int hmm_mirror_dma_map(struct hmm_mirror *mirror, again: pte = ACCESS_ONCE(hmm_pte[i]); - if (!hmm_pte_test_valid_pfn(&pte)) { + if (!hmm_pte_test_valid_pfn(&pte) || + !hmm_pte_test_select(&pte)) { if (!hmm_pte_test_valid_dma(&pte)) { ret = -ENOENT; break; -- 1.9.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org