All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tkhai Kirill <tkhai@yandex.ru>
To: sparclinux@vger.kernel.org
Subject: Re: Re: [PATCH]sparc32: Fix impossibility of swap disabling after intensive swap using
Date: Thu, 27 May 2010 20:28:03 +0000	[thread overview]
Message-ID: <110641274992083@web61.yandex.ru> (raw)
In-Reply-To: <20100429.165815.235700454.davem@davemloft.net>

Yes, it solves the problem.

26.05.10, 10:38, "David Miller" <davem@davemloft.net>:

> From: Тхай Кирилл 
>  Date: Fri, 30 Apr 2010 09:57:19 +0400
>  
>  > I can mistake, but it seems to me, that pte_none is more wide check,
>  > than belonging pte to mmu device.
>  
>  Not exactly.  pte_none() should be true if the PTE encodes nothing,
>  not a swap entry, not a MMU PTE, nothing at all.
>  
>  > In other case none_mask must be something like 0xF0000004, because
>  > hardware ignores ptes with zeroed lower two bits.
>  
>  It seems that the correct thing to do is to kill this none_mask thing
>  entirely.
>  
>  Could you try this patch instead of your's?
>  
>  Thanks!
>  
>  --
>  sparc32: Kill none_mask, it's bogus.
>  
>  For some reason, the pte_none() calculation for srmmu sparc32
>  chips was masking out the top 4 bits.  That doesn't make any
>  sense, as those are just some of the physical bits of the PTE
>  encoding.
>  
>  Furthermore, this mistake breaks things when the offset of of a swap
>  entry has a large enough offset as reported by Тхай Кирилл.
>  
>  Sun4c always set it to zero, so it's really completely useless,
>  kill it.
>  
>  Reported-by: Тхай Кирилл 
>  Signed-off-by: David S. Miller 
>  ---
>   arch/sparc/include/asm/pgtable_32.h |    5 ++---
>   arch/sparc/mm/srmmu.c               |    2 --
>   arch/sparc/mm/sun4c.c               |    3 ---
>   3 files changed, 2 insertions(+), 8 deletions(-)
>  
>  diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h
>  index 77f906d..0ece77f 100644
>  --- a/arch/sparc/include/asm/pgtable_32.h
>  +++ b/arch/sparc/include/asm/pgtable_32.h
>  @@ -142,13 +142,12 @@ BTFIXUPDEF_CALL_CONST(unsigned long, pgd_page_vaddr, pgd_t)
>   #define pmd_page(pmd) BTFIXUP_CALL(pmd_page)(pmd)
>   #define pgd_page_vaddr(pgd) BTFIXUP_CALL(pgd_page_vaddr)(pgd)
>   
>  -BTFIXUPDEF_SETHI(none_mask)
>   BTFIXUPDEF_CALL_CONST(int, pte_present, pte_t)
>   BTFIXUPDEF_CALL(void, pte_clear, pte_t *)
>   
>   static inline int pte_none(pte_t pte)
>   {
>  -	return !(pte_val(pte) & ~BTFIXUP_SETHI(none_mask));
>  +	return !pte_val(pte);
>   }
>   
>   #define pte_present(pte) BTFIXUP_CALL(pte_present)(pte)
>  @@ -160,7 +159,7 @@ BTFIXUPDEF_CALL(void, pmd_clear, pmd_t *)
>   
>   static inline int pmd_none(pmd_t pmd)
>   {
>  -	return !(pmd_val(pmd) & ~BTFIXUP_SETHI(none_mask));
>  +	return !pmd_val(pmd);
>   }
>   
>   #define pmd_bad(pmd) BTFIXUP_CALL(pmd_bad)(pmd)
>  diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
>  index f5f75a5..b0b43aa 100644
>  --- a/arch/sparc/mm/srmmu.c
>  +++ b/arch/sparc/mm/srmmu.c
>  @@ -2215,8 +2215,6 @@ void __init ld_mmu_srmmu(void)
>   	BTFIXUPSET_CALL(pmd_page, srmmu_pmd_page, BTFIXUPCALL_NORM);
>   	BTFIXUPSET_CALL(pgd_page_vaddr, srmmu_pgd_page, BTFIXUPCALL_NORM);
>   
>  -	BTFIXUPSET_SETHI(none_mask, 0xF0000000);
>  -
>   	BTFIXUPSET_CALL(pte_present, srmmu_pte_present, BTFIXUPCALL_NORM);
>   	BTFIXUPSET_CALL(pte_clear, srmmu_pte_clear, BTFIXUPCALL_SWAPO0G0);
>   
>  diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c
>  index cf38846..4289f90 100644
>  --- a/arch/sparc/mm/sun4c.c
>  +++ b/arch/sparc/mm/sun4c.c
>  @@ -2087,9 +2087,6 @@ void __init ld_mmu_sun4c(void)
>   
>   	BTFIXUPSET_CALL(set_pte, sun4c_set_pte, BTFIXUPCALL_STO1O0);
>   
>  -	/* The 2.4.18 code does not set this on sun4c, how does it work? XXX */
>  -	/* BTFIXUPSET_SETHI(none_mask, 0x00000000); */	/* Defaults to zero? */
>  -
>   	BTFIXUPSET_CALL(pte_pfn, sun4c_pte_pfn, BTFIXUPCALL_NORM);
>   #if 0 /* PAGE_SHIFT <= 12 */ /* Eek. Investigate. XXX */
>   	BTFIXUPSET_CALL(pmd_page, sun4c_pmd_page, BTFIXUPCALL_ANDNINT(PAGE_SIZE - 1));
>  
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-05-27 20:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-29 23:58 [PATCH]sparc32: Fix impossibility of swap disabling after David Miller
2010-04-30  5:57 ` Re: [PATCH]sparc32: Fix impossibility of swap disabling after intensive swap using Тхай Кирилл
2010-04-30  6:04 ` Tkhai Kirill
2010-05-26  6:38 ` [PATCH]sparc32: Fix impossibility of swap disabling after David Miller
2010-05-27 20:28 ` Tkhai Kirill [this message]
2010-05-27 20:41 ` David Miller

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=110641274992083@web61.yandex.ru \
    --to=tkhai@yandex.ru \
    --cc=sparclinux@vger.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 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.