From: Matthew Wilcox <willy@linux.intel.com>
To: Andrea Arcangeli <aarcange@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>,
akpm@linux-foundation.org, hpa@zytor.com, mingo@elte.hu,
tglx@linutronix.de, linux-kernel@vger.kernel.org,
Jeremy Fitzhardinge <jeremy@goop.org>
Subject: Re: + x86-add-support-for-pud-sized-transparent-hugepages-checkpatch-fixes.patch added to -mm tree
Date: Wed, 9 Mar 2016 15:03:45 -0500 [thread overview]
Message-ID: <20160309200345.GA26114@linux.intel.com> (raw)
In-Reply-To: <20160309184540.GC2464@linux.intel.com>
On Wed, Mar 09, 2016 at 01:45:40PM -0500, Matthew Wilcox wrote:
> > In fact even before starting to fix the comment, I would recommend to
> > try again to call native_local_pmdp_get_and_clear and
> > native_local_ptep_get_and_clear to verify if it still breaks, just in
> > case the include ordering got fixed by accident in the meanwhile (that
> > was a comment in 2.6.25 when arch/x86/include/asm didn't even exist
> > yet, it was still in include/asm-x86). If it would manage to build
> > without the manual expansion, the comment could go and the duplication
> > as well.
>
> The ordering problem is still there. native_local_ptep_get_and_clear()
> is declared at line 726 of asm/pgtable.h and asm/pgtable_64.h is included
> at line 466 of asm/pgtable.h.
>
> I'll have a little play; see if I can resolve this ...
asm/pgtable.h:466
# include <asm/pgtable_64.h>
asm/pgtable.h:726
static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
{
pte_t res = *ptep;
/* Pure native function needs no input for mm, addr */
native_pte_clear(NULL, 0, ptep);
return res;
}
asm/pgtable_64.h:47
static inline void native_pte_clear(struct mm_struct *mm, unsigned long addr,
pte_t *ptep)
{
*ptep = native_make_pte(0);
}
asm/pgtable_64.h:73
static inline pte_t native_ptep_get_and_clear(pte_t *xp)
{
#ifdef CONFIG_SMP
return native_make_pte(xchg(&xp->pte, 0));
#else
/* native_local_ptep_get_and_clear,
but duplicated because of cyclic dependency */
pte_t ret = *xp;
native_pte_clear(NULL, 0, xp);
return ret;
#endif
}
Why don't we just convert native_ptep_get_and_clear to work the same way that
pgtable-2level and pgtable-3level work? ie:
#ifdef CONFIG_SMP
static inline pte_t native_ptep_get_and_clear(pte_t *xp)
{
return native_make_pte(xchg(&xp->pte, 0));
}
#else
#define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp)
#endif
Or perhaps better, centralise the non-SMP definitions:
arch/x86/include/asm/pgtable-2level.h | 6 ------
arch/x86/include/asm/pgtable-3level.h | 7 +------
arch/x86/include/asm/pgtable.h | 5 +++++
arch/x86/include/asm/pgtable_64.h | 18 ++----------------
4 files changed, 8 insertions(+), 28 deletions(-)
diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h
index fd74a11..520318f 100644
--- a/arch/x86/include/asm/pgtable-2level.h
+++ b/arch/x86/include/asm/pgtable-2level.h
@@ -42,17 +42,11 @@ static inline pte_t native_ptep_get_and_clear(pte_t *xp)
{
return __pte(xchg(&xp->pte_low, 0));
}
-#else
-#define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp)
-#endif
-#ifdef CONFIG_SMP
static inline pmd_t native_pmdp_get_and_clear(pmd_t *xp)
{
return __pmd(xchg((pmdval_t *)xp, 0));
}
-#else
-#define native_pmdp_get_and_clear(xp) native_local_pmdp_get_and_clear(xp)
#endif
/* Bit manipulation helper on pte/pgoff entry */
diff --git a/arch/x86/include/asm/pgtable-3level.h b/arch/x86/include/asm/pgtable-3level.h
index cdaa58c..b1b6412 100644
--- a/arch/x86/include/asm/pgtable-3level.h
+++ b/arch/x86/include/asm/pgtable-3level.h
@@ -149,11 +149,7 @@ static inline pte_t native_ptep_get_and_clear(pte_t *ptep)
return res;
}
-#else
-#define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp)
-#endif
-#ifdef CONFIG_SMP
union split_pmd {
struct {
u32 pmd_low;
@@ -161,6 +157,7 @@ union split_pmd {
};
pmd_t pmd;
};
+
static inline pmd_t native_pmdp_get_and_clear(pmd_t *pmdp)
{
union split_pmd res, *orig = (union split_pmd *)pmdp;
@@ -172,8 +169,6 @@ static inline pmd_t native_pmdp_get_and_clear(pmd_t *pmdp)
return res.pmd;
}
-#else
-#define native_pmdp_get_and_clear(xp) native_local_pmdp_get_and_clear(xp)
#endif
/* Encode and de-code a swap entry */
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index 1ff49ec..35306ca 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -740,6 +740,11 @@ static inline pmd_t native_local_pmdp_get_and_clear(pmd_t *pmdp)
return res;
}
+#ifndef CONFIG_SMP
+#define native_ptep_get_and_clear(p) native_local_ptep_get_and_clear(p)
+#define native_pmdp_get_and_clear(p) native_local_pmdp_get_and_clear(p)
+#endif
+
static inline void native_set_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep , pte_t pte)
{
diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
index 2ee7811..a0c0219 100644
--- a/arch/x86/include/asm/pgtable_64.h
+++ b/arch/x86/include/asm/pgtable_64.h
@@ -70,31 +70,17 @@ static inline void native_pmd_clear(pmd_t *pmd)
native_set_pmd(pmd, native_make_pmd(0));
}
+#ifdef CONFIG_SMP
static inline pte_t native_ptep_get_and_clear(pte_t *xp)
{
-#ifdef CONFIG_SMP
return native_make_pte(xchg(&xp->pte, 0));
-#else
- /* native_local_ptep_get_and_clear,
- but duplicated because of cyclic dependency */
- pte_t ret = *xp;
- native_pte_clear(NULL, 0, xp);
- return ret;
-#endif
}
static inline pmd_t native_pmdp_get_and_clear(pmd_t *xp)
{
-#ifdef CONFIG_SMP
return native_make_pmd(xchg(&xp->pmd, 0));
-#else
- /* native_local_pmdp_get_and_clear,
- but duplicated because of cyclic dependency */
- pmd_t ret = *xp;
- native_pmd_clear(xp);
- return ret;
-#endif
}
+#endif
static inline void native_set_pud(pud_t *pudp, pud_t pud)
{
next prev parent reply other threads:[~2016-03-09 20:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-02 22:53 + x86-add-support-for-pud-sized-transparent-hugepages-checkpatch-fixes.patch added to -mm tree akpm
2016-02-03 7:48 ` Ingo Molnar
2016-03-04 20:30 ` Matthew Wilcox
2016-03-09 12:08 ` Ingo Molnar
2016-03-09 16:55 ` Matthew Wilcox
2016-03-10 9:37 ` Ingo Molnar
2016-03-10 14:39 ` Matthew Wilcox
2016-03-09 17:40 ` Andrea Arcangeli
2016-03-09 18:45 ` Matthew Wilcox
2016-03-09 20:03 ` Matthew Wilcox [this message]
2016-03-09 23:08 ` Andrea Arcangeli
-- strict thread matches above, loose matches on Subject: below --
2016-01-27 20:30 akpm
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=20160309200345.GA26114@linux.intel.com \
--to=willy@linux.intel.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
/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.