All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	David Rientjes <rientjes@google.com>,
	Hugh Dickins <hughd@google.com>,
	Davidlohr Bueso <dave@stgolabs.net>,
	Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com>,
	Hillf Danton <hillf.zj@alibaba-inc.com>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [RFC v3 PATCH 04/10] mm/hugetlb: expose hugetlb fault mutex for use by fallocate
Date: Fri, 22 May 2015 09:50:32 -0700	[thread overview]
Message-ID: <555F5E58.4030106@oracle.com> (raw)
In-Reply-To: <20150522062344.GB21526@hori1.linux.bs1.fc.nec.co.jp>

On 05/21/2015 11:23 PM, Naoya Horiguchi wrote:
> On Thu, May 21, 2015 at 08:47:38AM -0700, Mike Kravetz wrote:
>> hugetlb page faults are currently synchronized by the table of
>> mutexes (htlb_fault_mutex_table).  fallocate code will need to
>> synchronize with the page fault code when it allocates or
>> deletes pages.  Expose interfaces so that fallocate operations
>> can be synchronized with page faults.
>>
>> Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
>> ---
>>   include/linux/hugetlb.h |  3 +++
>>   mm/hugetlb.c            | 23 ++++++++++++++++++++++-
>>   2 files changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
>> index fd337f2..d0d033e 100644
>> --- a/include/linux/hugetlb.h
>> +++ b/include/linux/hugetlb.h
>> @@ -82,6 +82,9 @@ void putback_active_hugepage(struct page *page);
>>   bool is_hugepage_active(struct page *page);
>>   void free_huge_page(struct page *page);
>>   void hugetlb_fix_reserve_counts(struct inode *inode, bool restore_reserve);
>> +u32 hugetlb_fault_mutex_shared_hash(struct address_space *mapping, pgoff_t idx);
>> +void hugetlb_fault_mutex_lock(u32 hash);
>> +void hugetlb_fault_mutex_unlock(u32 hash);
>>   
>>   #ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE
>>   pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud);
>> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
>> index 620cc9e..df0d32a 100644
>> --- a/mm/hugetlb.c
>> +++ b/mm/hugetlb.c
>> @@ -3183,7 +3183,8 @@ static u32 fault_mutex_hash(struct hstate *h, struct mm_struct *mm,
>>   	unsigned long key[2];
>>   	u32 hash;
>>   
>> -	if (vma->vm_flags & VM_SHARED) {
>> +	/* !vma implies this was called from hugetlbfs fallocate code */
>> +	if (!vma || vma->vm_flags & VM_SHARED) {
>>   		key[0] = (unsigned long) mapping;
>>   		key[1] = idx;
>>   	} else {
>> @@ -3209,6 +3210,26 @@ static u32 fault_mutex_hash(struct hstate *h, struct mm_struct *mm,
>>   }
>>   #endif
>>   
>> +/*
>> + * Interfaces to the fault mutex routines for use by hugetlbfs
>> + * fallocate code.  Faults must be synchronized with page adds or
>> + * deletes by fallocate.  fallocate only deals with shared mappings.
>> + */
>> +u32 hugetlb_fault_mutex_shared_hash(struct address_space *mapping, pgoff_t idx)
>> +{
>> +	return fault_mutex_hash(NULL, NULL, NULL, mapping, idx, 0);
>> +}
>> +
>> +void hugetlb_fault_mutex_lock(u32 hash)
>> +{
>> +	mutex_lock(&htlb_fault_mutex_table[hash]);
>> +}
>> +
>> +void hugetlb_fault_mutex_unlock(u32 hash)
>> +{
>> +	mutex_unlock(&htlb_fault_mutex_table[hash]);
>> +}
>> +
>>   int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
>>   			unsigned long address, unsigned int flags)
>>   {
> 
> You introduce new lock/unlock interfaces, so how about making the existing
> user of this lock (i.e. hugetlb_fault()) use them?
> 

I will make that change in the next version of the patch set.

Thanks,
-- 
Mike Kravetz


> Thanks,
> Naoya Horiguchi
> 

--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	David Rientjes <rientjes@google.com>,
	Hugh Dickins <hughd@google.com>,
	Davidlohr Bueso <dave@stgolabs.net>,
	Aneesh Kumar <aneesh.kumar@linux.vnet.ibm.com>,
	Hillf Danton <hillf.zj@alibaba-inc.com>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [RFC v3 PATCH 04/10] mm/hugetlb: expose hugetlb fault mutex for use by fallocate
Date: Fri, 22 May 2015 09:50:32 -0700	[thread overview]
Message-ID: <555F5E58.4030106@oracle.com> (raw)
In-Reply-To: <20150522062344.GB21526@hori1.linux.bs1.fc.nec.co.jp>

On 05/21/2015 11:23 PM, Naoya Horiguchi wrote:
> On Thu, May 21, 2015 at 08:47:38AM -0700, Mike Kravetz wrote:
>> hugetlb page faults are currently synchronized by the table of
>> mutexes (htlb_fault_mutex_table).  fallocate code will need to
>> synchronize with the page fault code when it allocates or
>> deletes pages.  Expose interfaces so that fallocate operations
>> can be synchronized with page faults.
>>
>> Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
>> ---
>>   include/linux/hugetlb.h |  3 +++
>>   mm/hugetlb.c            | 23 ++++++++++++++++++++++-
>>   2 files changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
>> index fd337f2..d0d033e 100644
>> --- a/include/linux/hugetlb.h
>> +++ b/include/linux/hugetlb.h
>> @@ -82,6 +82,9 @@ void putback_active_hugepage(struct page *page);
>>   bool is_hugepage_active(struct page *page);
>>   void free_huge_page(struct page *page);
>>   void hugetlb_fix_reserve_counts(struct inode *inode, bool restore_reserve);
>> +u32 hugetlb_fault_mutex_shared_hash(struct address_space *mapping, pgoff_t idx);
>> +void hugetlb_fault_mutex_lock(u32 hash);
>> +void hugetlb_fault_mutex_unlock(u32 hash);
>>   
>>   #ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE
>>   pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud);
>> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
>> index 620cc9e..df0d32a 100644
>> --- a/mm/hugetlb.c
>> +++ b/mm/hugetlb.c
>> @@ -3183,7 +3183,8 @@ static u32 fault_mutex_hash(struct hstate *h, struct mm_struct *mm,
>>   	unsigned long key[2];
>>   	u32 hash;
>>   
>> -	if (vma->vm_flags & VM_SHARED) {
>> +	/* !vma implies this was called from hugetlbfs fallocate code */
>> +	if (!vma || vma->vm_flags & VM_SHARED) {
>>   		key[0] = (unsigned long) mapping;
>>   		key[1] = idx;
>>   	} else {
>> @@ -3209,6 +3210,26 @@ static u32 fault_mutex_hash(struct hstate *h, struct mm_struct *mm,
>>   }
>>   #endif
>>   
>> +/*
>> + * Interfaces to the fault mutex routines for use by hugetlbfs
>> + * fallocate code.  Faults must be synchronized with page adds or
>> + * deletes by fallocate.  fallocate only deals with shared mappings.
>> + */
>> +u32 hugetlb_fault_mutex_shared_hash(struct address_space *mapping, pgoff_t idx)
>> +{
>> +	return fault_mutex_hash(NULL, NULL, NULL, mapping, idx, 0);
>> +}
>> +
>> +void hugetlb_fault_mutex_lock(u32 hash)
>> +{
>> +	mutex_lock(&htlb_fault_mutex_table[hash]);
>> +}
>> +
>> +void hugetlb_fault_mutex_unlock(u32 hash)
>> +{
>> +	mutex_unlock(&htlb_fault_mutex_table[hash]);
>> +}
>> +
>>   int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
>>   			unsigned long address, unsigned int flags)
>>   {
> 
> You introduce new lock/unlock interfaces, so how about making the existing
> user of this lock (i.e. hugetlb_fault()) use them?
> 

I will make that change in the next version of the patch set.

Thanks,
-- 
Mike Kravetz


> Thanks,
> Naoya Horiguchi
> 

  reply	other threads:[~2015-05-22 16:51 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-21 15:47 [RFC v3 PATCH 00/10] hugetlbfs: add fallocate support Mike Kravetz
2015-05-21 15:47 ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 01/10] mm/hugetlb: compute/return the number of regions added by region_add() Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 02/10] mm/hugetlb: handle races in alloc_huge_page and hugetlb_reserve_pages Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 03/10] mm/hugetlb: add region_del() to delete a specific range of entries Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-22  6:21   ` Naoya Horiguchi
2015-05-22  6:21     ` Naoya Horiguchi
2015-05-22 16:48     ` Mike Kravetz
2015-05-22 16:48       ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 04/10] mm/hugetlb: expose hugetlb fault mutex for use by fallocate Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-22  6:23   ` Naoya Horiguchi
2015-05-22  6:23     ` Naoya Horiguchi
2015-05-22 16:50     ` Mike Kravetz [this message]
2015-05-22 16:50       ` Mike Kravetz
2015-05-22 17:01   ` Davidlohr Bueso
2015-05-22 17:01     ` Davidlohr Bueso
2015-05-22 17:10     ` Mike Kravetz
2015-05-22 17:10       ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 05/10] hugetlbfs: hugetlb_vmtruncate_list() needs to take a range to delete Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 06/10] hugetlbfs: truncate_hugepages() takes a range of pages Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-22  8:08   ` Naoya Horiguchi
2015-05-22  8:08     ` Naoya Horiguchi
2015-05-22 17:07     ` Mike Kravetz
2015-05-22 17:07       ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 07/10] hugetlbfs: New huge_add_to_page_cache helper routine Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 08/10] mm/hugetlb: vma_has_reserves() needs to handle fallocate hole punch Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 09/10] hugetlbfs: add hugetlbfs_fallocate() Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-26  6:54   ` Naoya Horiguchi
2015-05-26  6:54     ` Naoya Horiguchi
2015-05-26 17:53     ` Mike Kravetz
2015-05-26 17:53       ` Mike Kravetz
2015-05-21 15:47 ` [RFC v3 PATCH 10/10] mm: madvise allow remove operation for hugetlbfs Mike Kravetz
2015-05-21 15:47   ` Mike Kravetz
2015-05-22 21:50 ` [RFC v3 PATCH 00/10] hugetlbfs: add fallocate support Davidlohr Bueso
2015-05-22 21:50   ` Davidlohr Bueso
2015-05-23  2:32   ` Mike Kravetz
2015-05-23  2:32     ` Mike Kravetz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=555F5E58.4030106@oracle.com \
    --to=mike.kravetz@oracle.com \
    --cc=aneesh.kumar@linux.vnet.ibm.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave@stgolabs.net \
    --cc=hch@infradead.org \
    --cc=hillf.zj@alibaba-inc.com \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=rientjes@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.