Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: David Daney <ddaney.cavm@gmail.com>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: Yong Zhang <yong.zhang0@gmail.com>,
	Yong Zhang <yong.zhang@windriver.com>,
	linux-mips@linux-mips.org, huawei.libin@huawei.com
Subject: Re: [PATCH] MIPS: change type of asid_cache to unsigned long
Date: Wed, 27 Aug 2014 15:52:33 -0700	[thread overview]
Message-ID: <53FE6131.5020201@gmail.com> (raw)
In-Reply-To: <20140522134245.GF10287@linux-mips.org>

Regarding this patch (commit e5eb925a1804c4a52994ba57f4f68ee7a9132905), 
the fix is fine for 64-bit systems, as it is impossible to overflow a 
64-bit ASID value.

For 32-bit systems, there is still a problem, we don't see the type 
truncation issue that was present on 64-bit systems, but there can still 
be badness on ASID generation wrap.


Scenario:

  o Long live process (p0) that sleeps for a long time.  It acquires 
what we will call ASID_0 and then is scheduled off the CPU

  o We cycle through 2^32 ASIDs, and the asid_cache wraps around  (not 
difficult to do, just write a program that does nothing but mmap() 
munmap() in a loop).  We have seen this happen every 6 days with ebizzy 
benchmark program.

  o Start new program (p1) that happens to also get ASID_0

  o p0 wakes up, and is now sharing tlb entries with p1, chaos ensues.

A workaround for this would be to use u64 for both 32-bit and 64-bit for 
all ASID related variables.  I have a patch for this, is it worth 
testing on 32-bit systems, and sending it in?

David Daney


On 05/22/2014 06:42 AM, Ralf Baechle wrote:
> On Thu, May 22, 2014 at 10:06:11AM +0800, Yong Zhang wrote:
>
>> On Wed, May 21, 2014 at 01:29:36PM +0200, Ralf Baechle wrote:
>>> On Wed, May 21, 2014 at 01:38:53PM +0800, Yong Zhang wrote:
>>>
>>>> Please check the V2 in which I add the reporter.
>>>> And thanks libin for reporting it :)
>>>
>>> The bug was introduced in 5636919b5c909fee54a6ef5226475ecae012ad02
>>> [MIPS: Outline udelay and fix a few issues.] in 2009 btw.  I think
>>> the intension was to avoid holes in the structure and minimize
>>> the bloat.  I instead applied aptch
>>
>> Could you please show the patch?
>>
>>> which also moves another member
>>> of the struct arond such that no hole will be created in the struct.
>>> This is important because the strcture it accessed fairly frequently
>>> so we want to fit the most important members into as few cache
>>> lines as possible.
>>
>> I have tried to move the struct member around, but I found that the
>> hole cann't be avoided completely because for exampe struct cache_desc
>> is a bit special.
>
> Yes, struct cache_desc is still a problem.  Easily solvable though -
> some of it's members are excessivly large; by using smaller data types
> both the struct and its required alignment will shrink.  But that's
> for another patch; as for this patch my goal to just not make things
> any worse.
>
>    Ralf
>
> ---
>   arch/mips/include/asm/cpu-info.h | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
> index dc2135b..ff2707a 100644
> --- a/arch/mips/include/asm/cpu-info.h
> +++ b/arch/mips/include/asm/cpu-info.h
> @@ -39,14 +39,14 @@ struct cache_desc {
>   #define MIPS_CACHE_PINDEX	0x00000020	/* Physically indexed cache */
>
>   struct cpuinfo_mips {
> -	unsigned int		udelay_val;
> -	unsigned int		asid_cache;
> +	unsigned long		asid_cache;
>
>   	/*
>   	 * Capability and feature descriptor structure for MIPS CPU
>   	 */
>   	unsigned long		options;
>   	unsigned long		ases;
> +	unsigned int		udelay_val;
>   	unsigned int		processor_id;
>   	unsigned int		fpu_id;
>   	unsigned int		msa_id;
>
>

      parent reply	other threads:[~2014-08-27 22:52 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-20  8:09 [PATCH] MIPS: change type of asid_cache to unsigned long Yong Zhang
2014-05-21  5:38 ` Yong Zhang
2014-05-21  5:38   ` Yong Zhang
2014-05-21 11:29   ` Ralf Baechle
2014-05-22  2:06     ` Yong Zhang
2014-05-22 13:42       ` Ralf Baechle
2014-05-23  3:08         ` Yong Zhang
2014-08-27 22:52         ` David Daney [this message]

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=53FE6131.5020201@gmail.com \
    --to=ddaney.cavm@gmail.com \
    --cc=huawei.libin@huawei.com \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    --cc=yong.zhang0@gmail.com \
    --cc=yong.zhang@windriver.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox