From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: Andrew Morton <akpm@linux-foundation.org>,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Mel Gorman <mgorman@suse.de>,
Matthew Wilcox <matthew.r.wilcox@intel.com>,
Minchan Kim <minchan@kernel.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"arc-linux-dev@synopsys.com" <arc-linux-dev@synopsys.com>
Subject: Re: [PATCH 04/11] ARCv2: mm: THP support
Date: Fri, 28 Aug 2015 06:09:37 +0000 [thread overview]
Message-ID: <C2D7FE5348E1B147BCA15975FBA23075CFB86BEE@IN01WEMBXB.internal.synopsys.com> (raw)
In-Reply-To: <20150827153254.GA21103@node.dhcp.inet.fi>
On Thursday 27 August 2015 09:03 PM, Kirill A. Shutemov wrote:
> On Thu, Aug 27, 2015 at 02:33:07PM +0530, Vineet Gupta wrote:
>> +pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp)
>> +{
>> + struct list_head *lh;
>> + pgtable_t pgtable;
>> + pte_t *ptep;
>> +
>> + assert_spin_locked(&mm->page_table_lock);
>> +
>> + pgtable = pmd_huge_pte(mm, pmdp);
>> + lh = (struct list_head *) pgtable;
>> + if (list_empty(lh))
>> + pmd_huge_pte(mm, pmdp) = (pgtable_t) NULL;
>> + else {
>> + pmd_huge_pte(mm, pmdp) = (pgtable_t) lh->next;
>> + list_del(lh);
>> + }
> Side question: why pgtable_t is unsigned long on ARC and not struct page *
> or pte_t *, like on other archs? We could avoid these casts.
Well we avoid some and add some, but I agree that it is better as pte_t *
-------------->
>From 7170a998bd4d5014ade94f4e5ba979c929d1ee18 Mon Sep 17 00:00:00 2001
From: Vineet Gupta <vgupta@synopsys.com>
Date: Fri, 28 Aug 2015 08:39:57 +0530
Subject: [PATCH] ARC: mm: switch pgtable_to to pte_t *
ARC is the only arch with unsigned long type (vs. struct page *).
Historically this was done to avoid the page_address() calls in various
arch hooks which need to get the virtual/logical address of the table.
Some arches alternately define it as pte_t *, and is as efficient as
unsigned long (generated code doesn't change)
Suggested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
arch/arc/include/asm/page.h | 4 ++--
arch/arc/include/asm/pgalloc.h | 6 +++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h
index 9c8aa41e45c2..2994cac1069e 100644
--- a/arch/arc/include/asm/page.h
+++ b/arch/arc/include/asm/page.h
@@ -43,7 +43,6 @@ typedef struct {
typedef struct {
unsigned long pgprot;
} pgprot_t;
-typedef unsigned long pgtable_t;
#define pte_val(x) ((x).pte)
#define pgd_val(x) ((x).pgd)
@@ -60,7 +59,6 @@ typedef unsigned long pgtable_t;
typedef unsigned long pte_t;
typedef unsigned long pgd_t;
typedef unsigned long pgprot_t;
-typedef unsigned long pgtable_t;
#define pte_val(x) (x)
#define pgd_val(x) (x)
@@ -71,6 +69,8 @@ typedef unsigned long pgtable_t;
#endif
+typedef pte_t * pgtable_t;
+
#define ARCH_PFN_OFFSET (CONFIG_LINUX_LINK_BASE >> PAGE_SHIFT)
#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)
diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h
index 81208bfd9dcb..9149b5ca26d7 100644
--- a/arch/arc/include/asm/pgalloc.h
+++ b/arch/arc/include/asm/pgalloc.h
@@ -107,7 +107,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
pgtable_t pte_pg;
struct page *page;
- pte_pg = __get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte());
+ pte_pg = (pgtable_t)__get_free_pages(GFP_KERNEL | __GFP_REPEAT,
__get_order_pte());
if (!pte_pg)
return 0;
memzero((void *)pte_pg, PTRS_PER_PTE * 4);
@@ -128,12 +128,12 @@ static inline void pte_free_kernel(struct mm_struct *mm,
pte_t *pte)
static inline void pte_free(struct mm_struct *mm, pgtable_t ptep)
{
pgtable_page_dtor(virt_to_page(ptep));
- free_pages(ptep, __get_order_pte());
+ free_pages((unsigned long)ptep, __get_order_pte());
}
#define __pte_free_tlb(tlb, pte, addr) pte_free((tlb)->mm, pte)
#define check_pgt_cache() do { } while (0)
-#define pmd_pgtable(pmd) pmd_page_vaddr(pmd)
+#define pmd_pgtable(pmd) ((pgtable_t) pmd_page_vaddr(pmd))
#endif /* _ASM_ARC_PGALLOC_H */
--
1.9.1
--
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>
next prev parent reply other threads:[~2015-08-28 6:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-27 9:03 [PATCH 00/11] THP support for ARC Vineet Gupta
2015-08-27 9:03 ` [PATCH 01/11] ARC: mm: pte flags comsetic cleanups, comments Vineet Gupta
2015-08-27 9:03 ` [PATCH 02/11] ARC: mm: Introduce PTE_SPECIAL Vineet Gupta
2015-08-27 9:03 ` [PATCH 03/11] Documentation/features/vm: pte_special now supported by ARC Vineet Gupta
2015-08-27 9:03 ` [PATCH 04/11] ARCv2: mm: THP support Vineet Gupta
2015-08-27 15:32 ` Kirill A. Shutemov
2015-08-27 16:56 ` Vineet Gupta
2015-08-28 6:09 ` Vineet Gupta [this message]
2015-08-27 9:03 ` [PATCH 05/11] ARCv2: mm: THP: boot validation/reporting Vineet Gupta
2015-08-27 9:03 ` [PATCH 06/11] Documentation/features/vm: THP now supported by ARC Vineet Gupta
2015-08-27 9:03 ` [PATCH 07/11] mm: move some code around Vineet Gupta
2015-08-27 9:03 ` [PATCH 08/11] mm,thp: reduce ifdef'ery for THP in generic code Vineet Gupta
2015-09-16 22:25 ` Andrew Morton
2015-09-16 23:45 ` Vineet Gupta
2015-08-27 9:03 ` [PATCH 09/11] mm,thp: introduce flush_pmd_tlb_range Vineet Gupta
2015-09-16 22:26 ` Andrew Morton
2015-09-16 23:57 ` Vineet Gupta
2015-08-27 9:03 ` [PATCH 10/11] ARCv2: mm: THP: Implement flush_pmd_tlb_range() optimization Vineet Gupta
2015-08-27 9:03 ` [PATCH 11/11] ARCv2: Add a DT which enables THP Vineet Gupta
2015-09-03 8:46 ` [PATCH 00/11] THP support for ARC Vineet Gupta
2015-09-16 22:27 ` Andrew Morton
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=C2D7FE5348E1B147BCA15975FBA23075CFB86BEE@IN01WEMBXB.internal.synopsys.com \
--to=vineet.gupta1@synopsys.com \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=arc-linux-dev@synopsys.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=kirill@shutemov.name \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=matthew.r.wilcox@intel.com \
--cc=mgorman@suse.de \
--cc=minchan@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox