From mips@illuminatus.org Tue Oct  1 03:54:44 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 03:54:45 +0200 (CEST)
Received: from h24-83-212-10.vc.shawcable.net ([24.83.212.10]:48633 "EHLO
	bard.illuminatus.org") by linux-mips.org with ESMTP
	id <S1123891AbSJAByo>; Tue, 1 Oct 2002 03:54:44 +0200
Received: from templar ([10.0.0.2])
	by bard.illuminatus.org with esmtp (Exim 3.35 #1 (Debian))
	id 17wBMa-0003DO-00; Mon, 30 Sep 2002 17:58:12 -0700
Subject: Re: CVS Update@ftp.linux-mips.org: linux
From: Mike Nugent <mips@illuminatus.org>
To: Atsushi Nemoto <nemoto@toshiba-tops.co.jp>
Cc: linux-mips@linux-mips.org, ralf@linux-mips.org
In-Reply-To: <20020930.135717.39150888.nemoto@toshiba-tops.co.jp>
References: <20020929014920Z1121744-9213+239@linux-mips.org> 
	<20020930.135717.39150888.nemoto@toshiba-tops.co.jp>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) 
Date: 30 Sep 2002 18:46:41 -0700
Message-Id: <1033436801.13267.47.camel@templar>
Mime-Version: 1.0
Return-Path: <mips@illuminatus.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 315
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: mips@illuminatus.org
Precedence: bulk
X-list: linux-mips


Suggestion for this bug:  Since the except_vec3_r4000 is a fix for the
4k series only, add 'default' statement as below:


On Sun, 2002-09-29 at 21:57, Atsushi Nemoto wrote:
> It seems some necessary codes for non-r4k CPUs were lost by this change.
> 
> > CVSROOT:	/home/cvs
> > Module name:	linux
> > Changes by:	ralf@ftp.linux-mips.org	02/09/29 03:49:20
> > 
> > Modified files:
> > 	arch/mips/kernel: Tag: linux_2_4 traps.c 
> > 	arch/mips/mm   : Tag: linux_2_4 c-sb1.c tlb-sb1.c 
> > 	arch/mips64/kernel: Tag: linux_2_4 traps.c 
> > 	arch/mips64/mm : Tag: linux_2_4 Makefile c-sb1.c loadmmu.c 
> > 	                 tlb-r4k.c tlb-sb1.c tlbex-r4k.S 
> > Added files:
> > 	arch/mips64/mm : Tag: linux_2_4 c-andes.c c-r4k.c pg-andes.c 
> > 	                 pg-r4k.c tlb-andes.c 
> > Removed files:
> > 	arch/mips64/mm : Tag: linux_2_4 andes.c r4xx0.c 
> > 
> > Log message:
> > 	Reorganize arch/mips64/mm along the line of it's 32-bit equivalent.
> 
> This is a patch to revert the change.
> 
> diff -ur linux-mips-cvs/arch/mips/kernel/traps.c linux.new/arch/mips/kernel/traps.c
> --- linux-mips-cvs/arch/mips/kernel/traps.c	Sun Sep 29 19:45:07 2002
> +++ linux.new/arch/mips/kernel/traps.c	Mon Sep 30 13:41:23 2002
> @@ -1015,6 +1015,30 @@
>  			memcpy((void *)(KSEG0 + 0x180), &except_vec3_r4000,
>  			       0x80);
>  		}
> +	} else switch (mips_cpu.cputype) {
> +	case CPU_SB1:
> +		/*
> +		 * XXX - This should be folded in to the "cleaner" handling,
> +		 * above
> +		 */
> +		memcpy((void *)(KSEG0 + 0x180), &except_vec3_r4000, 0x80);
> +		break;
> +	case CPU_R6000:
> +	case CPU_R6000A:
> +	case CPU_R2000:
> +	case CPU_R3000:
> +	case CPU_R3000A:
> +	case CPU_R3041:
> +	case CPU_R3051:
> +	case CPU_R3052:
> +	case CPU_R3081:
> +	case CPU_R3081E:
> +	case CPU_TX3912:
> +	case CPU_TX3922:
> +	case CPU_TX3927:
> +	case CPU_TX39XX:
+     default:
> +		memcpy((void *)(KSEG0 + 0x80), &except_vec3_generic, 0x80);
> +		break;
>  	}
>  
>  	if (mips_cpu.cputype == CPU_R6000 || mips_cpu.cputype == CPU_R6000A) {
> ---
> Atsushi Nemoto
> 
> 
-- 
Mike Nugent
Programmer/Author
mike@illuminatus.org
"I believe the use of noise to make music will increase until we reach a
music produced through the aid of electrical instruments which will make
available for musical purposes any and all sounds that can be heard."
 -- composer John Cage, 1937



From carstenl@mips.com Tue Oct  1 09:38:52 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 09:38:53 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:49315 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1122978AbSJAHiw>;
	Tue, 1 Oct 2002 09:38:52 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g917cfrZ001428;
	Tue, 1 Oct 2002 00:38:41 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id AAA15768;
	Tue, 1 Oct 2002 00:39:01 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g917cZb20128;
	Tue, 1 Oct 2002 09:38:36 +0200 (MEST)
Message-ID: <3D9950FA.78C756EF@mips.com>
Date: Tue, 01 Oct 2002 09:38:34 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Kip Walker <kwalker@broadcom.com>
CC: linux-mips@linux-mips.org
Subject: Re: unaligned exception handling
References: <3D987A87.8B855D01@broadcom.com>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 316
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

You are right there is a potential problem in the 64-bit kernel, when
emulating load/store instructions.
I have previously addressed this problem (and also send a patch).

The problem is the check_axs macro, that checks the access before
actually doing the emulation (any load/stores).
It's a simple copy from the 32-bit kernel, where you do a check for user
space by simple check the most significant bit.
That's fine in the 32-bit world, but it's not sufficient in the 64-bit
case.

Locally I have a check_axs that look like this:

/*
 * User code may only access USEG;
 * Kernel code may access the entire address space, except the area
between
 * USEG (XUSEG) and KSEG0.
 */
#define check_axs(pc,a,s)      \
        if (((pc < KUSIZE) && (((a) | ((a)+(s))) >= KUSIZE)) ||  \
     ((((a) | ((a)+(s))) < K0BASE) &&    \
      (((a) | ((a)+(s))) >= KUSIZE)))    \
  goto sigbus;



Hope that helps you.
/Carsten



Kip Walker wrote:

> After inspecting a strange case in the mips64 kernel with address
> errors, I'm starting to think there's a problem in the do_ade()
> implementation.  I think the 32-bit kernel may have a similar problem,
> but I haven't really inspected it.  The issue is where the kernel's
> emulation of an address error causes another address error (NOT a page
> fault).
>
> Basically, I don't see how the exception table stuff in
> emulate_load_store_insn is going to work.  Consider this scenario:
>
> - user process does a 'sw' (for example) to an illegal address
>   above xuseg but below xsseg
> - do_ade calls emulate_load_store_insn, which tries swl/swr
> - the swl again hits an illegal address, this time in the
>   kernel's context
> - do_ade does NOT check the exception table for the swl
> - emulate_load_store_insn goes to the 'swl' part of the switch
> - die_if_kernel DOES __die before the SIGBUS is delivered.
>
> So I don't see how the ex_table stuff is useful at all.  Shouldn't
> do_ade() do the exception table grovelling before calling
> emulate_load_store_insn?
>
> Kip

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From mips@illuminatus.org Tue Oct  1 10:40:35 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 10:40:36 +0200 (CEST)
Received: from h24-83-212-10.vc.shawcable.net ([24.83.212.10]:12539 "EHLO
	bard.illuminatus.org") by linux-mips.org with ESMTP
	id <S1122978AbSJAIkf>; Tue, 1 Oct 2002 10:40:35 +0200
Received: from templar ([10.0.0.2])
	by bard.illuminatus.org with esmtp (Exim 3.35 #1 (Debian))
	id 17wHnS-0003hp-00
	for <linux-mips@linux-mips.org>; Tue, 01 Oct 2002 00:50:22 -0700
Subject: pckbd_rate
From: Mike Nugent <mips@illuminatus.org>
To: linux-mips@linux-mips.org
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) 
Date: 01 Oct 2002 01:38:50 -0700
Message-Id: <1033461530.13264.86.camel@templar>
Mime-Version: 1.0
Return-Path: <mips@illuminatus.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 317
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: mips@illuminatus.org
Precedence: bulk
X-list: linux-mips



I was compiling 2.4.18 and I ran into this (this was all done after the
symbolic links were set up to the mips directories):

When compiling /usr/src/kernel-source-2.4.18/drivers/char/keyboard.c:

Included in this order
#include <asm/keyboard.h>
...stuff...
#include <linux/vt_kern.h>

/usr/src/kernel-source-2.4.18/include/linux/vt_kern.h:35: `pckbd_rate'
redeclared as different kind of symbol
/usr/src/kernel-source-2.4.18/include/asm/keyboard.h:30: previous
declaration of `pckbd_rate'

in asm/keyboard.h
extern int pckbd_rate(struct kbd_repeat *rep);
#define kbd_rate                pckbd_rate

In that order, but, as I understand, the preprocessor will make a pass
and substitution before the c compiler is called so effectively
extern int kbd_rate(struct kbd_repeat *rep);

and in linux/vt_kern.h

extern int (*kbd_rate)(struct kbd_repeat *rep);

As you can see, the first is the variable and the second is a pointer. 
Which is right?

I commented out the pointer, chosen at random and crashed a bit later at
pc_keyb.c.  So I went back and commented out the first one.  Crashed in
the same place.  So I grabbed my keyboard.h from my 2.4.16 kernel and
copied it in.  It works fine.

Is this just me?

-- 
Mike Nugent
Programmer/Author
mike@illuminatus.org
"I believe the use of noise to make music will increase until we reach a
music produced through the aid of electrical instruments which will make
available for musical purposes any and all sounds that can be heard."
 -- composer John Cage, 1937



From mips@illuminatus.org Tue Oct  1 10:50:20 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 10:50:20 +0200 (CEST)
Received: from h24-83-212-10.vc.shawcable.net ([24.83.212.10]:12795 "EHLO
	bard.illuminatus.org") by linux-mips.org with ESMTP
	id <S1122978AbSJAIuU>; Tue, 1 Oct 2002 10:50:20 +0200
Received: from templar ([10.0.0.2])
	by bard.illuminatus.org with esmtp (Exim 3.35 #1 (Debian))
	id 17wHww-0003ik-00
	for <linux-mips@linux-mips.org>; Tue, 01 Oct 2002 01:00:10 -0700
Subject: scatterlist.h
From: Mike Nugent <mips@illuminatus.org>
To: linux-mips@linux-mips.org
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) 
Date: 01 Oct 2002 01:48:38 -0700
Message-Id: <1033462118.13267.97.camel@templar>
Mime-Version: 1.0
Return-Path: <mips@illuminatus.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 318
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: mips@illuminatus.org
Precedence: bulk
X-list: linux-mips


Next problem  ( I know you all love my by now :)

in drivers/scsi/scsi_merge.c

scsi_merge.c:939: structure has no member named `page'

line 939: sgpnt[count - 1].page = NULL;

(struct scatterlist *sgpnt;  included from scsi.h, which includes
asm/scatterlist.h)


struct scatterlist {
    char *  address;    /* Location data is to be transferred to */
    unsigned int length;

    __u32 dvma_address;
};

Yes!  It's right!  No member page!

From 2.4.16:

struct scatterlist {
	char * address;		/* Location data is to be transferred to */
	struct page * page;	/* Location for highmem page, if any */
	unsigned int length;
	__u32 dvma_address;
};

I suggest we put that variable back into the structure.

There's more to come, but it's almost 2 am and it's bedtime.  I'll send
the next one out tomorrow if no one writes me back to tell me I'm
nuts/not using the right code/can't reproduce the error/etc.


-- 
Mike Nugent
Programmer/Author
mike@illuminatus.org
"I believe the use of noise to make music will increase until we reach a
music produced through the aid of electrical instruments which will make
available for musical purposes any and all sounds that can be heard."
 -- composer John Cage, 1937



From carstenl@mips.com Tue Oct  1 11:05:18 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 11:05:19 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:53157 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123891AbSJAJFS>;
	Tue, 1 Oct 2002 11:05:18 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g91958rZ001701;
	Tue, 1 Oct 2002 02:05:08 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id CAA18692;
	Tue, 1 Oct 2002 02:05:32 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g91957b28748;
	Tue, 1 Oct 2002 11:05:07 +0200 (MEST)
Message-ID: <3D996542.A66BDA70@mips.com>
Date: Tue, 01 Oct 2002 11:05:06 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Mike Nugent <mips@illuminatus.org>
CC: linux-mips@linux-mips.org
Subject: Re: scatterlist.h
References: <1033462118.13267.97.camel@templar>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 319
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

Try to check out the latest sources, I believe this has been fixed already.

/Carsten




Mike Nugent wrote:

> Next problem  ( I know you all love my by now :)
>
> in drivers/scsi/scsi_merge.c
>
> scsi_merge.c:939: structure has no member named `page'
>
> line 939: sgpnt[count - 1].page = NULL;
>
> (struct scatterlist *sgpnt;  included from scsi.h, which includes
> asm/scatterlist.h)
>
> struct scatterlist {
>     char *  address;    /* Location data is to be transferred to */
>     unsigned int length;
>
>     __u32 dvma_address;
> };
>
> Yes!  It's right!  No member page!
>
> >From 2.4.16:
>
> struct scatterlist {
>         char * address;         /* Location data is to be transferred to */
>         struct page * page;     /* Location for highmem page, if any */
>         unsigned int length;
>         __u32 dvma_address;
> };
>
> I suggest we put that variable back into the structure.
>
> There's more to come, but it's almost 2 am and it's bedtime.  I'll send
> the next one out tomorrow if no one writes me back to tell me I'm
> nuts/not using the right code/can't reproduce the error/etc.
>
> --
> Mike Nugent
> Programmer/Author
> mike@illuminatus.org
> "I believe the use of noise to make music will increase until we reach a
> music produced through the aid of electrical instruments which will make
> available for musical purposes any and all sounds that can be heard."
>  -- composer John Cage, 1937

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From carstenl@mips.com Tue Oct  1 12:18:22 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 12:18:22 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:9639 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123891AbSJAKSW>;
	Tue, 1 Oct 2002 12:18:22 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g91AICrZ001889;
	Tue, 1 Oct 2002 03:18:12 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id DAA20712;
	Tue, 1 Oct 2002 03:17:48 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g91AHIb02750;
	Tue, 1 Oct 2002 12:17:21 +0200 (MEST)
Message-ID: <3D99762D.4E6A7F85@mips.com>
Date: Tue, 01 Oct 2002 12:17:17 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Brian Murphy <brian@murphy.dk>
CC: linux-mips <linux-mips@linux-mips.org>,
	Ralf Baechle <ralf@linux-mips.org>
Subject: Re: [PATCH 2.4] Re: ide-dma bug (cache flushing)
References: <3D7FAB4A.4010802@murphy.dk> <3D80F5CF.1040905@murphy.dk>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 320
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

Ralf, could you please apply the patch below.
Please also apply it to include/asm-mips64/pci.h (the 64-bit version).

/Carsten



Brian Murphy wrote:

> It seems like this problem is (yet again) caused by lack of cache flushing.
> The attached patch adds a  dma_cache_wback_inv to pci_map_sg in pci.h
> to the if fork in which sg->address is not set.
>
> This fixes my problem.
>
> Can someone with commit access please apply this patch?
>
> /Brian
>
>   ------------------------------------------------------------------------
> Index: include/asm-mips/pci.h
> ===================================================================
> RCS file: /cvs/linux-mips/include/asm-mips/pci.h,v
> retrieving revision 1.1.1.2
> diff -u -r1.1.1.2 pci.h
> --- include/asm-mips/pci.h      19 Aug 2002 18:00:29 -0000      1.1.1.2
> +++ include/asm-mips/pci.h      12 Sep 2002 20:06:31 -0000
> @@ -200,9 +200,13 @@
>                         dma_cache_wback_inv((unsigned long)sg->address,
>                                             sg->length);
>                         sg->dma_address = bus_to_baddr(hwdev, __pa(sg->address));
> -               } else
> +               } else {
>                         sg->dma_address = page_to_bus(sg->page) +
>                                           sg->offset;
> +                       dma_cache_wback_inv(
> +                               (unsigned long)(page_address(sg->page)+
> +                                               sg->offset), sg->length);
> +               }
>         }
>
>         return nents;

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From ralf@linux-mips.org Tue Oct  1 13:15:47 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 13:15:47 +0200 (CEST)
Received: from p508B7090.dip.t-dialin.net ([80.139.112.144]:23740 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123891AbSJALPr>; Tue, 1 Oct 2002 13:15:47 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g91BFQd00637;
	Tue, 1 Oct 2002 13:15:26 +0200
Date: Tue, 1 Oct 2002 13:15:25 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Carsten Langgaard <carstenl@mips.com>
Cc: Brian Murphy <brian@murphy.dk>,
	linux-mips <linux-mips@linux-mips.org>
Subject: Re: [PATCH 2.4] Re: ide-dma bug (cache flushing)
Message-ID: <20021001131525.A616@linux-mips.org>
References: <3D7FAB4A.4010802@murphy.dk> <3D80F5CF.1040905@murphy.dk> <3D99762D.4E6A7F85@mips.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3D99762D.4E6A7F85@mips.com>; from carstenl@mips.com on Tue, Oct 01, 2002 at 12:17:17PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 321
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Tue, Oct 01, 2002 at 12:17:17PM +0200, Carsten Langgaard wrote:

> Ralf, could you please apply the patch below.
> Please also apply it to include/asm-mips64/pci.h (the 64-bit version).

Looks ok.   The 2.5 version also deserves another thought ...

  Ralf

From ralf@linux-mips.org Tue Oct  1 14:01:42 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 14:01:43 +0200 (CEST)
Received: from p508B7090.dip.t-dialin.net ([80.139.112.144]:48060 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123916AbSJAMBm>; Tue, 1 Oct 2002 14:01:42 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g91C1Ki02361;
	Tue, 1 Oct 2002 14:01:20 +0200
Date: Tue, 1 Oct 2002 14:01:20 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Mike Nugent <mips@illuminatus.org>
Cc: Atsushi Nemoto <nemoto@toshiba-tops.co.jp>,
	linux-mips@linux-mips.org
Subject: Re: CVS Update@ftp.linux-mips.org: linux
Message-ID: <20021001140120.F616@linux-mips.org>
References: <20020929014920Z1121744-9213+239@linux-mips.org> <20020930.135717.39150888.nemoto@toshiba-tops.co.jp> <1033436801.13267.47.camel@templar>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <1033436801.13267.47.camel@templar>; from mips@illuminatus.org on Mon, Sep 30, 2002 at 06:46:41PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 322
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Mon, Sep 30, 2002 at 06:46:41PM -0700, Mike Nugent wrote:

> Suggestion for this bug:  Since the except_vec3_r4000 is a fix for the
> 4k series only, add 'default' statement as below:

The whole switch statement there is ever inflating and covers only a tiny
aspect of the CPU so I simply killed it.

  Ralf

From dinesh_nagpure@ivivity.com Tue Oct  1 14:46:27 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 14:46:28 +0200 (CEST)
Received: from [64.238.111.99] ([64.238.111.99]:57353 "EHLO mail.ivivity.com")
	by linux-mips.org with ESMTP id <S1123891AbSJAMq1>;
	Tue, 1 Oct 2002 14:46:27 +0200
Received: by ATLOPS with Internet Mail Service (5.5.2653.19)
	id <4B1K5AT4>; Tue, 1 Oct 2002 08:46:19 -0400
Message-ID: <AEC4671C8179D61194DE0002B328BDD2070C5C@ATLOPS>
From: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
To: linux-mips@linux-mips.org
Subject: RE: un handled paging request, kernel v2.4.16
Date: Tue, 1 Oct 2002 08:46:18 -0400 
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2653.19)
Content-Type: text/plain;
	charset="iso-8859-1"
Return-Path: <dinesh_nagpure@ivivity.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 323
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dinesh_nagpure@ivivity.com
Precedence: bulk
X-list: linux-mips

Hello again,

I have been searching the mailing archives and haven't yet seen any
problem/mail exchanged about RM5231A. I did saw a mail from Carsten where he
was worried about a probable bug in _save_fp_context function in
arch/mips/kernel/r4k_fpu.S. I am not sure which kernel version he was
looking into then but the one I am using don't have this fix (if it was a
required one). I tried it anyways but it did not work. Also Matt Dharm was
having some crashing problems initially this year(it was a different MIPS
processor though), I have not yet reached the mail where he found his
solution or his mail on what fixed the problem, Matt can you throw some
light here?

Since there is no talk about RM5231A I am wondering if there were no
problems at all or no one have verified it in a while now.

I am also trying to understand where does execution goes after start_thread(
) is called to setup a new thread for execution. Is it put to execution
immediately or later when schedule gets called. Anybody?

Hoping to put this problem to bed soon,
Dinesh
iViVITY Inc.

 
-----Original Message-----
From: Dinesh Nagpure [mailto:dinesh_nagpure@ivivity.com]
Sent: Monday, September 30, 2002 4:22 PM
To: linux-mips@linux-mips.org; gcc-help@gcc.gnu.org
Subject: un handled paging request, kernel v2.4.16


Hi,

In porting Linux kernel version 2.4.16 to our platform using the RM5231A, I
am struggling with this page fault for a couple of days now and would very
much appreciate any input to fix this.

Here is what I see is happening, after completing the initial boot up when
it is time to start the user-mode stuff I get a un handled paging request
fault.

From the printk statements and the Oops dump I can see that execution goes
as far as start_thread( ) function called from load_elf_binary( ) and also
EPC and SP passed to start_thread( ) appear valid.

After putting the thread to execution, load_elf_binary( ) returns zero and
system Oops with a page fault. Control never comes back to
search_binary_handler( )

I can see the load_elf_binary( ) address still on the stack (8015e4ac).

I am running the kernel uncached.

I have already tried 
1) Disabling the use of wait instruction, thinking that it may be the cause.

2) Disabling the FPU with no success.

Could this be a page fault on instruction in delay slot which is not being
handled properly? To avoid this I modified save_fp_context( ) in r4k_fpu.S
but again with no success.

May be I am using a wrong ramdisk.gz image, but the same image works fine on
my Malta board (this one has a 4Kc core), I am creating my ramdisk image
using busybox and tinylogin.

Could this be a toolchain problem? While compiling, I do get warnings which
says:
mcpu option is deprecated, pls use -march and -mtune instead. and then,
the -march option is incompatible to -mipsN and therefore ignored.
All this essentially means it is taking -mtune=r5000 and -mips2 options for
generating/scheduling instructions. 

Tool chain I am using is built from binutils-2.11.92.0.7, gcc-3.0.2 and
glibc-2.2.3 (Were there any recommended versions for building kernel
v2.4.16?)
 

Are there any special flag I should be using to build busybox ramdisk for
RM5231A (which is very unlikely if the ramdisk is working well on a MIPS
Malta board with 4Kc core)

Could this be a hardware bug? ;)

Here are the boot time messages and the Oops dump. Objdump -t of vmlinux is
in the attached file idisx13log

PAGING_INIT : max_dmable_pfn<4096> max_low_pfn<16384>
On node 0 totalpages: 16384
Required map size to hold all the page structs <983100>
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line:  console=ttyS0,38400
Have QED style interrupt
Value in Status reg 0x90000400
time_init : Entered
RTC port based at 0xb411fff0
for 200MHz CPU clock, r4k_offset is
000f4240(1000000)
In idisx_rtc_read_data
In idisx_rtc_read_data
In idisx_rtc_read_data
In idisx_rtc_read_data
In idisx_rtc_read_data
In idisx_rtc_read_data
Value in Status reg 0x90008000
BEFORE console_init
Dinesh : serial_console_setup : Entered............
Dinesh : UART_LCR = 0x93
Dinesh : UART_DLL = 0x6
Dinesh : UART_DLM = 0x0
Dinesh : UART_LCR = 0x13
Dinesh : UART_MCR = 0x3
Primary instruction cache 32kb, linesize 32 bytes.
Primary data cache 32kb, linesize 32 bytes.
offset=lmem_map - mem_map = <0>
AFTER console_init
AFTER init_modules
before kmem_cache_init
before sti
Value in Status reg 0x90008000
Value in Debug reg 0x0
Value in Status reg 0x90008001
before calibrate_delay
Calibrating delay loop... 0.81 BogoMIPS
before mem_init
Memory: 61272k/62244k available (1025k kernel code, 972k reserved, 1041k
data, 6
0k init)
before kmem_cache_sizes_init
before fork_init
before proc_caches_init
before vfs_caches_init
Dentry-cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
before buffer_init
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
before page_cache_init
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
before signals_init
before proc_root_init
before ipc_init
before check_bugs
POSIX conformance testing by UNIFIX
before smp_init
before rest_init
do_basic_setup : Entering
sock_init : Entering
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
start_context_thread : Entering
do_initcalls : Entering
Starting kswapd
do_gettimeofday : Entered
do_fast_gettimeoffset : Entering
do_fast_gettimeoffset : 1
do_fast_gettimeoffset : 2
do_fast_gettimeoffset : 3
do_fast_gettimeoffset : Done
do_gettimeofday : Leaving
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with no serial options enabled
block: 128 slots per queue, batch=32
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
loop: loaded (max 8 devices)
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
prepare_namespace : Entering
RAMDISK: Compressed image found at block 0
Leaving : identify_ramdisk_image
Freeing initrd memory: 976k freed
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 60k freed
Dinesh : Initial console opened successfully
After first dup
After second dup
trying sbin init
do_execve : Entered executing /sbin/init
do_execve : before PTR_ERR
do_execve : before IS_ERR
do_execve : In IS_ERR clause
trying etc/init
do_execve : Entered executing /etc/init
do_execve : before PTR_ERR
do_execve : before IS_ERR
do_execve : In IS_ERR clause
trying bin init
do_execve : Entered executing /bin/init
do_execve : before PTR_ERR
do_execve : before IS_ERR
do_execve : Computing top of mem
do_execve : bprm.p = 0x1fffc
do_execve : before memset on bprm.page 1
do_execve : 7
prepare_binprm : Entered
prepare_binprm : mode = 33261
prepare_binprm : bprm->e_uid = 0
prepare_binprm : bprm->e_gid = 0
prepare_binprm : Clearing capabilities
prepare_binprm : memset of bprm->buf, size 128 chars
prepare_binprm : reading 128 chars from file
kernel_read : Entered
kernel_read : calling get_fs
kernel_read : calling set_fs
kernel_read : calling  read from file
kernel_read : calling set_fs again to restore old_fs
do_execve : 8
do_execve : 9
do_execve : 10
do_execve : 11
do_execve : 12
do_execve : 13
do_execve : 14
do_execve : 15
search_binary_handler : Entered
search_binary_handler : Before set_fs
search_binary_handler : Before for loop of try
search_binary_handler : In for loop with try = 0
search_binary_handler : In for loop searching formats for a match
search_binary_handler : calling fn
fn is 8015e4ac
kernel_read : Entered
kernel_read : calling get_fs
kernel_read : calling set_fs
kernel_read : calling  read from file
kernel_read : calling set_fs again to restore old_fs
load_elf_binary : in for loop1 with i=0 limit=4
load_elf_binary : in for loop1 with i=1 limit=4
load_elf_binary : in for loop1 with i=2 limit=4
load_elf_binary : in for loop1 with i=3 limit=4
load_elf_binary : out of for loop1
load_elf_binary : Before start_thread
load_elf_binary : New Thread info
load_elf_binary : cp0_epc = 0x400190
load_elf_binary : sp = 0x7fff7f40
load_elf_binary : After start thread
load_elf_binary : did not send sigtrap
Unable to handle kernel paging request at virtual address 00000000, epc ==
00000
000, ra == 8014a68c
Oops in fault.c:do_page_fault, line 204:
$0 : 00000000 90008000 00000000 00000000 801ecb28 00000001 00000001 000007f8
$8 : 000007f8 ffffc7f8 000007f8 00000000 00000000 00000000 80318ec1 fffffff4
$16: 8015e4ac 8021b1c0 00000001 8035dd88 00000000 00000000 fffffff8 8035dd38
$24: 00000010 8035dacf                   8035c000 8035dd20 8035def8 8014a68c
Hi : 00000000
Lo : 00000120
epc  : 00000000    Not tainted
Status: 90008003
Cause : 00800408
Process init (pid: 1, stackpage=8035c000)
Stack: 801ecaa8 8015e4ac 0000000a 8035dd24 ffffffff 8020f62c 00000313
fffffced
       8020f650 00000000 90008003 00808400 00000000 80221000 80212d7c
80212d54
       8035def8 00000000 00000000 00000000 800af880 8014a920 801eccbc
00000000
       0000000a 8035dd7c 464c457f 00010101 00000000 00000000 00080002
00000001
       00400190 00000034 0011429c 00000005 00200034 00280004 00120013
70000000
       000000e0 ...
Call Trace: [<801ecaa8>] [<8015e4ac>] [<8014a920>] [<801eccbc>] [<8014be70>]
[<8
01082cc>]
 [<8010c280>] [<801082cc>] [<8010ca24>] [<801e868c>] [<801e8678>]
[<80108c9c>]
 [<80108020>] [<80108c8c>]

Code: (Bad address in epc)

Kernel panic: Attempted to kill init!

 <<idisx13objdump>> 
Thanks,
Dinesh
iViVITY Inc.



From macro@ds2.pg.gda.pl Tue Oct  1 16:04:14 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 16:04:16 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:41403 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123891AbSJAOEO>; Tue, 1 Oct 2002 16:04:14 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id QAA15496;
	Tue, 1 Oct 2002 16:04:37 +0200 (MET DST)
Date: Tue, 1 Oct 2002 16:04:36 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: linux-mips@linux-mips.org
Subject: [resend] System memory /proc/iomem fixes and updates
Message-ID: <Pine.GSO.3.96.1021001155746.13606E-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 324
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

Hello,

 [Sending this for the third time -- if others don't care then at least my
MS02-NV driver depends on proper memory resource reservation.]

 I discovered /proc/iomem is broken for system memory resources.
Apparently since highmem support went in.  Here are fixes and a few
updates as follows:

1. Resource areas are measured in bytes and not pages (that's the problem
metioned above).  Includes fixes for off-by-one errors for upper limits.

2. Moved mips bootmem allocation and resource reservation to bootmem_init
similarly to mips64.

3. Added resource reservation for mips64.

 Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

patch-mips-2.4.19-rc1-20020904-mem-regions-7
diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020904.macro/arch/mips/kernel/setup.c linux-mips-2.4.19-rc1-20020904/arch/mips/kernel/setup.c
--- linux-mips-2.4.19-rc1-20020904.macro/arch/mips/kernel/setup.c	2002-09-03 02:56:40.000000000 +0000
+++ linux-mips-2.4.19-rc1-20020904/arch/mips/kernel/setup.c	2002-09-09 09:51:38.000000000 +0000
@@ -7,7 +7,7 @@
  * Copyright (C) 1995  Waldorf Electronics
  * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001  Ralf Baechle
  * Copyright (C) 1996  Stoned Elipot
- * Copyright (C) 2000, 2001  Maciej W. Rozycki
+ * Copyright (C) 2000, 2001, 2002  Maciej W. Rozycki
  */
 #include <linux/config.h>
 #include <linux/errno.h>
@@ -236,6 +236,235 @@ static inline void parse_mem_cmdline(voi
 	}
 }
 
+
+#define PFN_UP(x)	(((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
+#define PFN_DOWN(x)	((x) >> PAGE_SHIFT)
+#define PFN_PHYS(x)	((x) << PAGE_SHIFT)
+
+#define MAXMEM		HIGHMEM_START
+#define MAXMEM_PFN	PFN_DOWN(MAXMEM)
+
+static inline void bootmem_init(void)
+{
+#ifdef CONFIG_BLK_DEV_INITRD
+	unsigned long tmp;
+	unsigned long *initrd_header;
+#endif
+	unsigned long bootmap_size;
+	unsigned long start_pfn, max_pfn, max_low_pfn, first_usable_pfn;
+	int i;
+
+#ifdef CONFIG_BLK_DEV_INITRD
+	tmp = (((unsigned long)&_end + PAGE_SIZE-1) & PAGE_MASK) - 8;
+	if (tmp < (unsigned long)&_end)
+		tmp += PAGE_SIZE;
+	initrd_header = (unsigned long *)tmp;
+	if (initrd_header[0] == 0x494E5244) {
+		initrd_start = (unsigned long)&initrd_header[2];
+		initrd_end = initrd_start + initrd_header[1];
+	}
+	start_pfn = PFN_UP(__pa((&_end)+(initrd_end - initrd_start) + PAGE_SIZE));
+#else
+	/*
+	 * Partially used pages are not usable - thus
+	 * we are rounding upwards.
+	 */
+	start_pfn = PFN_UP(__pa(&_end));
+#endif	/* CONFIG_BLK_DEV_INITRD */
+
+	/* Find the highest page frame number we have available.  */
+	max_pfn = 0;
+	first_usable_pfn = -1UL;
+	for (i = 0; i < boot_mem_map.nr_map; i++) {
+		unsigned long start, end;
+
+		if (boot_mem_map.map[i].type != BOOT_MEM_RAM)
+			continue;
+
+		start = PFN_UP(boot_mem_map.map[i].addr);
+		end = PFN_DOWN(boot_mem_map.map[i].addr
+		      + boot_mem_map.map[i].size);
+
+		if (start >= end)
+			continue;
+		if (end > max_pfn)
+			max_pfn = end;
+		if (start < first_usable_pfn) {
+			if (start > start_pfn) {
+				first_usable_pfn = start;
+			} else if (end > start_pfn) {
+				first_usable_pfn = start_pfn;
+			}
+		}
+	}
+
+	/*
+	 * Determine low and high memory ranges
+	 */
+	max_low_pfn = max_pfn;
+	if (max_low_pfn > MAXMEM_PFN) {
+		max_low_pfn = MAXMEM_PFN;
+#ifndef CONFIG_HIGHMEM
+		/* Maximum memory usable is what is directly addressable */
+		printk(KERN_WARNING "Warning only %ldMB will be used.\n",
+		       MAXMEM>>20);
+		printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
+#endif
+	}
+
+#ifdef CONFIG_HIGHMEM
+	/*
+	 * Crude, we really should make a better attempt at detecting
+	 * highstart_pfn
+	 */
+	highstart_pfn = highend_pfn = max_pfn;
+	if (max_pfn > MAXMEM_PFN) {
+		highstart_pfn = MAXMEM_PFN;
+		printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
+		       (highend_pfn - highstart_pfn) >> (20 - PAGE_SHIFT));
+	}
+#endif
+
+	/* Initialize the boot-time allocator with low memory only.  */
+	bootmap_size = init_bootmem(first_usable_pfn, max_low_pfn);
+
+	/*
+	 * Register fully available low RAM pages with the bootmem allocator.
+	 */
+	for (i = 0; i < boot_mem_map.nr_map; i++) {
+		unsigned long curr_pfn, last_pfn, size;
+
+		/*
+		 * Reserve usable memory.
+		 */
+		if (boot_mem_map.map[i].type != BOOT_MEM_RAM)
+			continue;
+
+		/*
+		 * We are rounding up the start address of usable memory:
+		 */
+		curr_pfn = PFN_UP(boot_mem_map.map[i].addr);
+		if (curr_pfn >= max_low_pfn)
+			continue;
+		if (curr_pfn < start_pfn)
+			curr_pfn = start_pfn;
+
+		/*
+		 * ... and at the end of the usable range downwards:
+		 */
+		last_pfn = PFN_DOWN(boot_mem_map.map[i].addr
+				    + boot_mem_map.map[i].size);
+
+		if (last_pfn > max_low_pfn)
+			last_pfn = max_low_pfn;
+
+		/*
+		 * Only register lowmem part of lowmem segment with bootmem.
+		 */
+		size = last_pfn - curr_pfn;
+		if (curr_pfn > PFN_DOWN(HIGHMEM_START))
+			continue;
+		if (curr_pfn + size - 1 > PFN_DOWN(HIGHMEM_START))
+			size = PFN_DOWN(HIGHMEM_START) - curr_pfn;
+		if (!size)
+			continue;
+
+		/*
+		 * ... finally, did all the rounding and playing
+		 * around just make the area go away?
+		 */
+		if (last_pfn <= curr_pfn)
+			continue;
+
+		/* Register lowmem ranges */
+		free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
+	}
+
+	/* Reserve the bootmap memory.  */
+	reserve_bootmem(PFN_PHYS(first_usable_pfn), bootmap_size);
+
+#ifdef CONFIG_BLK_DEV_INITRD
+	/* Board specific code should have set up initrd_start and initrd_end */
+	ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
+	if (&__rd_start != &__rd_end) {
+		initrd_start = (unsigned long)&__rd_start;
+		initrd_end = (unsigned long)&__rd_end;
+	}
+	initrd_below_start_ok = 1;
+	if (initrd_start) {
+		unsigned long initrd_size = ((unsigned char *)initrd_end) - ((unsigned char *)initrd_start);
+		printk("Initial ramdisk at: 0x%p (%lu bytes)\n",
+		       (void *)initrd_start,
+		       initrd_size);
+		if (PHYSADDR(initrd_end) > PFN_PHYS(max_low_pfn)) {
+			printk("initrd extends beyond end of memory "
+			       "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
+			       PHYSADDR(initrd_end),
+			       PFN_PHYS(max_low_pfn));
+			initrd_start = initrd_end = 0;
+		}
+	}
+#endif /* CONFIG_BLK_DEV_INITRD  */
+}
+
+static inline void resource_init(void)
+{
+	int i;
+
+	code_resource.start = virt_to_bus(&_ftext);
+	code_resource.end = virt_to_bus(&_etext) - 1;
+	data_resource.start = virt_to_bus(&_fdata);
+	data_resource.end = virt_to_bus(&_edata) - 1;
+
+	/*
+	 * Request address space for all standard RAM.
+	 */
+	for (i = 0; i < boot_mem_map.nr_map; i++) {
+		struct resource *res;
+		unsigned long start, end;
+
+		start = boot_mem_map.map[i].addr;
+		end = boot_mem_map.map[i].addr + boot_mem_map.map[i].size - 1;
+		if (start >= MAXMEM)
+			continue;
+		if (end >= MAXMEM)
+			end = MAXMEM - 1;
+
+		res = alloc_bootmem(sizeof(struct resource));
+		switch (boot_mem_map.map[i].type) {
+		case BOOT_MEM_RAM:
+		case BOOT_MEM_ROM_DATA:
+			res->name = "System RAM";
+			break;
+		case BOOT_MEM_RESERVED:
+		default:
+			res->name = "reserved";
+		}
+
+		res->start = start;
+		res->end = end;
+
+		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+		request_resource(&iomem_resource, res);
+
+		/*
+		 *  We dont't know which RAM region contains kernel data,
+		 *  so we try it repeatedly and let the resource manager
+		 *  test it.
+		 */
+		request_resource(res, &code_resource);
+		request_resource(res, &data_resource);
+	}
+}
+
+#undef PFN_UP
+#undef PFN_DOWN
+#undef PFN_PHYS
+
+#undef MAXMEM
+#undef MAXMEM_PFN
+
+
 void __init setup_arch(char **cmdline_p)
 {
 	void atlas_setup(void);
@@ -247,7 +476,7 @@ void __init setup_arch(char **cmdline_p)
 	void jazz_setup(void);
 	void sni_rm200_pci_setup(void);
 	void ip22_setup(void);
-        void ev96100_setup(void);
+	void ev96100_setup(void);
 	void malta_setup(void);
 	void sead_setup(void);
 	void ikos_setup(void);
@@ -262,15 +491,6 @@ void __init setup_arch(char **cmdline_p)
 	void swarm_setup(void);
 	void hp_setup(void);
 
-	unsigned long bootmap_size;
-	unsigned long start_pfn, max_pfn, max_low_pfn, first_usable_pfn;
-#ifdef CONFIG_BLK_DEV_INITRD
-	unsigned long tmp;
-	unsigned long* initrd_header;
-#endif
-
-	int i;
-
 #ifdef CONFIG_BLK_DEV_FD
 	fd_ops = &no_fd_ops;
 #endif
@@ -441,210 +661,11 @@ void __init setup_arch(char **cmdline_p)
 
 	parse_mem_cmdline();
 
-#define PFN_UP(x)	(((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
-#define PFN_DOWN(x)	((x) >> PAGE_SHIFT)
-#define PFN_PHYS(x)	((x) << PAGE_SHIFT)
-
-#define MAXMEM		HIGHMEM_START
-#define MAXMEM_PFN	PFN_DOWN(MAXMEM)
-
-#ifdef CONFIG_BLK_DEV_INITRD
-	tmp = (((unsigned long)&_end + PAGE_SIZE-1) & PAGE_MASK) - 8;
-	if (tmp < (unsigned long)&_end)
-		tmp += PAGE_SIZE;
-	initrd_header = (unsigned long *)tmp;
-	if (initrd_header[0] == 0x494E5244) {
-		initrd_start = (unsigned long)&initrd_header[2];
-		initrd_end = initrd_start + initrd_header[1];
-	}
-	start_pfn = PFN_UP(__pa((&_end)+(initrd_end - initrd_start) + PAGE_SIZE));
-#else
-	/*
-	 * Partially used pages are not usable - thus
-	 * we are rounding upwards.
-	 */
-	start_pfn = PFN_UP(__pa(&_end));
-#endif	/* CONFIG_BLK_DEV_INITRD */
-
-	/* Find the highest page frame number we have available.  */
-	max_pfn = 0;
-	first_usable_pfn = -1UL;
-	for (i = 0; i < boot_mem_map.nr_map; i++) {
-		unsigned long start, end;
-
-		if (boot_mem_map.map[i].type != BOOT_MEM_RAM)
-			continue;
-
-		start = PFN_UP(boot_mem_map.map[i].addr);
-		end = PFN_DOWN(boot_mem_map.map[i].addr
-		      + boot_mem_map.map[i].size);
-
-		if (start >= end)
-			continue;
-		if (end > max_pfn)
-			max_pfn = end;
-		if (start < first_usable_pfn) {
-			if (start > start_pfn) {
-				first_usable_pfn = start;
-			} else if (end > start_pfn) {
-				first_usable_pfn = start_pfn;
-			}
-		}
-	}
-
-	/*
-	 * Determine low and high memory ranges
-	 */
-	max_low_pfn = max_pfn;
-	if (max_low_pfn > MAXMEM_PFN) {
-		max_low_pfn = MAXMEM_PFN;
-#ifndef CONFIG_HIGHMEM
-		/* Maximum memory usable is what is directly addressable */
-		printk(KERN_WARNING "Warning only %ldMB will be used.\n",
-		       MAXMEM>>20);
-		printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
-#endif
-	}
-
-#ifdef CONFIG_HIGHMEM
-	/*
-	 * Crude, we really should make a better attempt at detecting
-	 * highstart_pfn
-	 */
-	highstart_pfn = highend_pfn = max_pfn;
-	if (max_pfn > MAXMEM_PFN) {
-		highstart_pfn = MAXMEM_PFN;
-		printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
-		       (highend_pfn - highstart_pfn) >> (20 - PAGE_SHIFT));
-	}
-#endif
-
-	/* Initialize the boot-time allocator with low memory only.  */
-	bootmap_size = init_bootmem(first_usable_pfn, max_low_pfn);
-
-	/*
-	 * Register fully available low RAM pages with the bootmem allocator.
-	 */
-	for (i = 0; i < boot_mem_map.nr_map; i++) {
-		unsigned long curr_pfn, last_pfn, size;
-
-		/*
-		 * Reserve usable memory.
-		 */
-		if (boot_mem_map.map[i].type != BOOT_MEM_RAM)
-			continue;
-
-		/*
-		 * We are rounding up the start address of usable memory:
-		 */
-		curr_pfn = PFN_UP(boot_mem_map.map[i].addr);
-		if (curr_pfn >= max_low_pfn)
-			continue;
-		if (curr_pfn < start_pfn)
-			curr_pfn = start_pfn;
-
-		/*
-		 * ... and at the end of the usable range downwards:
-		 */
-		last_pfn = PFN_DOWN(boot_mem_map.map[i].addr
-				    + boot_mem_map.map[i].size);
-
-		if (last_pfn > max_low_pfn)
-			last_pfn = max_low_pfn;
-
-		/*
-		 * Only register lowmem part of lowmem segment with bootmem.
-		 */
-		size = last_pfn - curr_pfn;
-		if (curr_pfn > PFN_DOWN(HIGHMEM_START))
-			continue;
-		if (curr_pfn + size - 1 > PFN_DOWN(HIGHMEM_START))
-			size = PFN_DOWN(HIGHMEM_START) - curr_pfn;
-		if (!size)
-			continue;
-
-		/*
-		 * ... finally, did all the rounding and playing
-		 * around just make the area go away?
-		 */
-		if (last_pfn <= curr_pfn)
-			continue;
-
-		/* Register lowmem ranges */
-		free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
-	}
-
-	/* Reserve the bootmap memory.  */
-	reserve_bootmem(PFN_PHYS(first_usable_pfn), bootmap_size);
-
-#ifdef CONFIG_BLK_DEV_INITRD
-	/* Board specific code should have set up initrd_start and initrd_end */
-	ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
-	if (&__rd_start != &__rd_end) {
-		initrd_start = (unsigned long)&__rd_start;
-		initrd_end = (unsigned long)&__rd_end;
-	}
-	initrd_below_start_ok = 1;
-	if (initrd_start) {
-		unsigned long initrd_size = ((unsigned char *)initrd_end) - ((unsigned char *)initrd_start);
-		printk("Initial ramdisk at: 0x%p (%lu bytes)\n",
-		       (void *)initrd_start,
-		       initrd_size);
-		if (PHYSADDR(initrd_end) > PFN_PHYS(max_low_pfn)) {
-			printk("initrd extends beyond end of memory "
-			       "(0x%lx > 0x%p)\ndisabling initrd\n",
-			       PHYSADDR(initrd_end),
-			       PFN_PHYS(max_low_pfn));
-			initrd_start = initrd_end = 0;
-		}
-	}
-#endif /* CONFIG_BLK_DEV_INITRD  */
+	bootmem_init();
 
 	paging_init();
 
-	code_resource.start = virt_to_bus(&_ftext);
-	code_resource.end = virt_to_bus(&_etext) - 1;
-	data_resource.start = virt_to_bus(&_fdata);
-	data_resource.end = virt_to_bus(&_edata) - 1;
-
-	/*
-	 * Request address space for all standard RAM.
-	 */
-	for (i = 0; i < boot_mem_map.nr_map; i++) {
-		struct resource *res;
-		unsigned long addr_pfn, end_pfn;
-
-		res = alloc_bootmem(sizeof(struct resource));
-		switch (boot_mem_map.map[i].type) {
-		case BOOT_MEM_RAM:
-		case BOOT_MEM_ROM_DATA:
-			res->name = "System RAM";
-			break;
-		case BOOT_MEM_RESERVED:
-		default:
-			res->name = "reserved";
-		}
-		addr_pfn = PFN_UP(boot_mem_map.map[i].addr);
-		end_pfn = PFN_UP(boot_mem_map.map[i].addr+boot_mem_map.map[i].size);
-		if (addr_pfn > max_low_pfn)
-			continue;
-		res->start = boot_mem_map.map[i].addr;
-		if (end_pfn < max_low_pfn) {
-			res->end = res->start + boot_mem_map.map[i].size - 1;
-		} else {
-			res->end = max_low_pfn - 1;
-		}
-		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
-		request_resource(&iomem_resource, res);
-
-		/*
-		 *  We dont't know which RAM region contains kernel data,
-		 *  so we try it repeatedly and let the resource manager
-		 *  test it.
-		 */
-		request_resource(res, &code_resource);
-		request_resource(res, &data_resource);
-	}
+	resource_init();
 }
 
 static int __init fpu_disable(char *s)
diff -up --recursive --new-file linux-mips-2.4.19-rc1-20020904.macro/arch/mips64/kernel/setup.c linux-mips-2.4.19-rc1-20020904/arch/mips64/kernel/setup.c
--- linux-mips-2.4.19-rc1-20020904.macro/arch/mips64/kernel/setup.c	2002-09-03 02:58:10.000000000 +0000
+++ linux-mips-2.4.19-rc1-20020904/arch/mips64/kernel/setup.c	2002-09-08 23:28:19.000000000 +0000
@@ -13,6 +13,7 @@
 #include <linux/config.h>
 #include <linux/errno.h>
 #include <linux/init.h>
+#include <linux/ioport.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -88,8 +89,7 @@ unsigned long mips_machgroup = MACH_GROU
 struct boot_mem_map boot_mem_map;
 
 unsigned char aux_device_present;
-
-extern void load_mmu(void);
+extern char _ftext, _etext, _fdata, _edata, _end;
 
 static char command_line[CL_SIZE] = { 0, };
        char saved_command_line[CL_SIZE];
@@ -119,6 +119,9 @@ extern void load_mmu(void);
 extern ATTRIB_NORET asmlinkage void start_kernel(void);
 extern void prom_init(int, char **, char **, int *);
 
+static struct resource code_resource = { "Kernel code" };
+static struct resource data_resource = { "Kernel data" };
+
 asmlinkage void __init init_arch(int argc, char **argv, char **envp,
 	int *prom_vec)
 {
@@ -243,7 +246,12 @@ static inline void parse_mem_cmdline(voi
 	}
 }
 
-void bootmem_init(void)
+
+#define PFN_UP(x)	(((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
+#define PFN_DOWN(x)	((x) >> PAGE_SHIFT)
+#define PFN_PHYS(x)	((x) << PAGE_SHIFT)
+
+static inline void bootmem_init(void)
 {
 #ifdef CONFIG_BLK_DEV_INITRD
 	unsigned long tmp;
@@ -252,11 +260,6 @@ void bootmem_init(void)
 	unsigned long bootmap_size;
 	unsigned long start_pfn, max_pfn;
 	int i;
-	extern int _end;
-
-#define PFN_UP(x)	(((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
-#define PFN_DOWN(x)	((x) >> PAGE_SHIFT)
-#define PFN_PHYS(x)	((x) << PAGE_SHIFT)
 
 	/*
 	 * Partially used pages are not usable - thus
@@ -349,12 +352,55 @@ void bootmem_init(void)
 			*memory_start_p = initrd_end;
 	}
 #endif
+}
+
+static inline void resource_init(void)
+{
+	int i;
+
+	code_resource.start = virt_to_bus(&_ftext);
+	code_resource.end = virt_to_bus(&_etext) - 1;
+	data_resource.start = virt_to_bus(&_fdata);
+	data_resource.end = virt_to_bus(&_edata) - 1;
+
+	/*
+	 * Request address space for all standard RAM.
+	 */
+	for (i = 0; i < boot_mem_map.nr_map; i++) {
+		struct resource *res;
+
+		res = alloc_bootmem(sizeof(struct resource));
+		switch (boot_mem_map.map[i].type) {
+		case BOOT_MEM_RAM:
+		case BOOT_MEM_ROM_DATA:
+			res->name = "System RAM";
+			break;
+		case BOOT_MEM_RESERVED:
+		default:
+			res->name = "reserved";
+		}
+
+		res->start = boot_mem_map.map[i].addr;
+		res->end = boot_mem_map.map[i].addr +
+			   boot_mem_map.map[i].size - 1;
+
+		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+		request_resource(&iomem_resource, res);
+
+		/*
+		 *  We dont't know which RAM region contains kernel data,
+		 *  so we try it repeatedly and let the resource manager
+		 *  test it.
+		 */
+		request_resource(res, &code_resource);
+		request_resource(res, &data_resource);
+	}
+}
 
 #undef PFN_UP
 #undef PFN_DOWN
 #undef PFN_PHYS
 
-}
 
 void __init setup_arch(char **cmdline_p)
 {
@@ -385,6 +431,8 @@ void __init setup_arch(char **cmdline_p)
 	bootmem_init();
 
 	paging_init();
+
+	resource_init();
 }
 
 int __init fpu_disable(char *s)


From macro@ds2.pg.gda.pl Tue Oct  1 16:33:28 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 16:33:29 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:13244 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123891AbSJAOd1>; Tue, 1 Oct 2002 16:33:27 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id QAA16649;
	Tue, 1 Oct 2002 16:33:53 +0200 (MET DST)
Date: Tue, 1 Oct 2002 16:33:53 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: linux-mips@linux-mips.org
Subject: [patch] A recent prom_printf() breakage
Message-ID: <Pine.GSO.3.96.1021001162700.13606I-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 325
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

Ralf,

 I don't think it is a good idea to force everyone to use a common
prom_printf() workaround for firmware limitations.  DECstations, for
example, already have a suitable function in their ROMs, which we use, and
the new prom_printf() implementation clashes with it.  Also the current
implementation relies on a presence of prom_putchar().  Therefore I
suggest the following change -- I enabled CONFIG_PROM_PRINTF for systems
that seem to provide prom_putchar() -- if there are any others, I see no
problem adding them. 

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

patch-mips-2.4.20-pre6-20020930-prom_printf-0
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips/config-shared.in linux-mips-2.4.20-pre6-20020930/arch/mips/config-shared.in
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips/config-shared.in	2002-09-29 02:56:21.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips/config-shared.in	2002-10-01 00:55:59.000000000 +0000
@@ -354,6 +354,7 @@ if [ "$CONFIG_SGI_IP22" = "y" ]; then
    define_bool CONFIG_ARC_CONSOLE y
    define_bool CONFIG_ARC_MEMORY y
    define_bool CONFIG_ARC_PROMLIB y
+   define_bool CONFIG_PROM_PRINTF y
    define_bool CONFIG_BOARD_SCACHE y
    define_bool CONFIG_BOOT_ELF32 y
    define_bool CONFIG_SWAP_IO_SPACE y
@@ -369,6 +370,7 @@ fi
 if [ "$CONFIG_SGI_IP27" = "y" ]; then
    define_bool CONFIG_BOOT_ELF64 y
    define_bool CONFIG_ARC64 y
+   define_bool CONFIG_PROM_PRINTF y
    #define_bool CONFIG_MAPPED_PCI_IO y
    define_bool CONFIG_NEW_IRQ y
    define_bool CONFIG_PCI y
@@ -378,6 +380,7 @@ fi
 if [ "$CONFIG_SGI_IP32" = "y" ]; then
    define_bool CONFIG_ARC_MEMORY y
    define_bool CONFIG_ARC_PROMLIB y
+   define_bool CONFIG_PROM_PRINTF y
    define_bool CONFIG_ARC32 y
    #define_bool CONFIG_BOARD_SCACHE y
    define_bool CONFIG_BOOT_ELF32 y
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips/lib/Makefile linux-mips-2.4.20-pre6-20020930/arch/mips/lib/Makefile
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips/lib/Makefile	2002-09-29 02:56:23.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips/lib/Makefile	2002-10-01 00:50:00.000000000 +0000
@@ -7,9 +7,9 @@ USE_STANDARD_AS_RULE := true
 L_TARGET = lib.a
 
 obj-y				+= csum_partial.o csum_partial_copy.o \
-				   promlib.o rtc-std.o rtc-no.o memcpy.o \
-				   memset.o watch.o strlen_user.o \
-				   strncpy_user.o strnlen_user.o
+				   rtc-std.o rtc-no.o memcpy.o memset.o \
+				   watch.o strlen_user.o strncpy_user.o \
+				   strnlen_user.o
 
 ifeq ($(CONFIG_CPU_R3000)$(CONFIG_CPU_TX39XX),y)
   obj-y	+= r3k_dump_tlb.o
@@ -21,4 +21,6 @@ obj-$(CONFIG_BLK_DEV_FD)	+= floppy-no.o 
 obj-$(CONFIG_IDE)		+= ide-std.o ide-no.o
 obj-$(CONFIG_PC_KEYB)		+= kbd-std.o kbd-no.o
 
+obj-$(CONFIG_PROM_PRINTF)	+= prom_printf.o
+
 include $(TOPDIR)/Rules.make
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips/lib/prom_printf.c linux-mips-2.4.20-pre6-20020930/arch/mips/lib/prom_printf.c
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips/lib/prom_printf.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips/lib/prom_printf.c	2002-09-28 22:28:38.000000000 +0000
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+
+void prom_printf(char *fmt, ...)
+{
+	va_list args;
+	char ppbuf[1024];
+	char *bptr;
+
+	va_start(args, fmt);
+	vsprintf(ppbuf, fmt, args);
+
+	bptr = ppbuf;
+
+	while (*bptr != 0) {
+		if (*bptr == '\n')
+			prom_putchar('\r');
+
+		prom_putchar(*bptr++);
+	}
+	va_end(args);
+}
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips/lib/promlib.c linux-mips-2.4.20-pre6-20020930/arch/mips/lib/promlib.c
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips/lib/promlib.c	2002-09-28 22:28:38.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips/lib/promlib.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-#include <stdarg.h>
-
-void prom_printf(char *fmt, ...)
-{
-	va_list args;
-	char ppbuf[1024];
-	char *bptr;
-
-	va_start(args, fmt);
-	vsprintf(ppbuf, fmt, args);
-
-	bptr = ppbuf;
-
-	while (*bptr != 0) {
-		if (*bptr == '\n')
-			prom_putchar('\r');
-
-		prom_putchar(*bptr++);
-	}
-	va_end(args);
-}
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips64/lib/Makefile linux-mips-2.4.20-pre6-20020930/arch/mips64/lib/Makefile
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips64/lib/Makefile	2002-09-29 02:56:35.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips64/lib/Makefile	2002-10-01 00:51:31.000000000 +0000
@@ -6,12 +6,15 @@ USE_STANDARD_AS_RULE := true
 
 L_TARGET = lib.a
 
-obj-y	+= csum_partial.o csum_partial_copy.o dump_tlb.o promlib.o rtc-std.o \
-	  rtc-no.o memset.o memcpy.o strlen_user.o strncpy_user.o \
-	  strnlen_user.o watch.o
+obj-y				+= csum_partial.o csum_partial_copy.o \
+				   dump_tlb.o rtc-std.o rtc-no.o memset.o \
+				   memcpy.o strlen_user.o strncpy_user.o \
+				   strnlen_user.o watch.o
 
 obj-$(CONFIG_BLK_DEV_FD)	+= floppy-no.o floppy-std.o
 obj-$(CONFIG_IDE)		+= ide-std.o ide-no.o
 obj-$(CONFIG_PC_KEYB)		+= kbd-std.o kbd-no.o
 
+obj-$(CONFIG_PROM_PRINTF)	+= prom_printf.o
+
 include $(TOPDIR)/Rules.make
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips64/lib/prom_printf.c linux-mips-2.4.20-pre6-20020930/arch/mips64/lib/prom_printf.c
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips64/lib/prom_printf.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips64/lib/prom_printf.c	2002-09-28 22:28:38.000000000 +0000
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+
+void prom_printf(char *fmt, ...)
+{
+	va_list args;
+	char ppbuf[1024];
+	char *bptr;
+
+	va_start(args, fmt);
+	vsprintf(ppbuf, fmt, args);
+
+	bptr = ppbuf;
+
+	while (*bptr != 0) {
+		if (*bptr == '\n')
+			prom_putchar('\r');
+
+		prom_putchar(*bptr++);
+	}
+	va_end(args);
+}
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20020930.macro/arch/mips64/lib/promlib.c linux-mips-2.4.20-pre6-20020930/arch/mips64/lib/promlib.c
--- linux-mips-2.4.20-pre6-20020930.macro/arch/mips64/lib/promlib.c	2002-09-28 22:28:38.000000000 +0000
+++ linux-mips-2.4.20-pre6-20020930/arch/mips64/lib/promlib.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-#include <stdarg.h>
-
-void prom_printf(char *fmt, ...)
-{
-	va_list args;
-	char ppbuf[1024];
-	char *bptr;
-
-	va_start(args, fmt);
-	vsprintf(ppbuf, fmt, args);
-
-	bptr = ppbuf;
-
-	while (*bptr != 0) {
-		if (*bptr == '\n')
-			prom_putchar('\r');
-
-		prom_putchar(*bptr++);
-	}
-	va_end(args);
-}


From barrow_dj@yahoo.com Tue Oct  1 17:06:34 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 17:06:34 +0200 (CEST)
Received: from web10404.mail.yahoo.com ([216.136.130.96]:19811 "HELO
	web10404.mail.yahoo.com") by linux-mips.org with SMTP
	id <S1123907AbSJAPGe>; Tue, 1 Oct 2002 17:06:34 +0200
Message-ID: <20021001150625.51995.qmail@web10404.mail.yahoo.com>
Received: from [159.134.216.102] by web10404.mail.yahoo.com via HTTP; Tue, 01 Oct 2002 08:06:25 PDT
Date: Tue, 1 Oct 2002 08:06:25 -0700 (PDT)
From: "D.J. Barrow" <barrow_dj@yahoo.com>
Subject: Fwd: mips unaligned.c bugfix
To: linux-mips@linux-mips.org
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="0-1906408386-1033484785=:51138"
Return-Path: <barrow_dj@yahoo.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 326
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: barrow_dj@yahoo.com
Precedence: bulk
X-list: linux-mips

--0-1906408386-1033484785=:51138
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

I was advised by Jon Burgess to forward the fix to this mailing
list as well Ralf Baechle said he would look at the fix.

--- "D.J. Barrow" <barrow_dj@yahoo.com> wrote:
> Date: Fri, 27 Sep 2002 09:26:01 -0700 (PDT)
> From: "D.J. Barrow" <barrow_dj@yahoo.com>
> Subject: mips unaligned.c bugfix
> To: Kernel Mailing List <linux-kernel@vger.kernel.org>, 
>     Ralf Baechle <ralf@uni-koblenz.de>
> 
> Hi Ralf & others,
> 
> I found & fixed kernel bug in unaligned.c which was affecting the iptables code 
> in little mips32 endian.
> 
> The patch is against 2.4.17 on oss.sgi.com & should hopefully apply to the latest
> kernel.
> 
> The fixes code for I did mips 64 is untested, I had no way to test them unfortunately.
> 
> An example of the bug is the bug following sequence of mips instructions
> beqz        v0,<destaddr>
> lw          v0,(t3) 
> 
> say reg t3 points to an unaligned address
> 
> In the emulation the v0 register was being loaded & modified before
> the computation of the destination address ( which depended on v0 ) 
> this was incorrect so I had to save the updating of the v0 register
> until the computation of the destination address was done.
> 
> =====
> D.J. Barrow Linux kernel developer
> eMail: dj_barrow@ariasoft.ie 
> Home: +353-22-47196.
> Work: +353-91-758353
> 
> __________________________________________________
> Do you Yahoo!?
> New DSL Internet Access from SBC & Yahoo!
> http://sbc.yahoo.com

> ATTACHMENT part 2 application/x-unknown name=unaligned.diff




=====
D.J. Barrow Linux kernel developer
eMail: dj_barrow@ariasoft.ie 
Home: +353-22-47196.
Apt till end Oct 2002: +353-91-533628

__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com
--0-1906408386-1033484785=:51138
Content-Type: text/plain; name="unaligned.diff"
Content-Description: unaligned.diff
Content-Disposition: inline; filename="unaligned.diff"

--- kernel.orig/arch/mips/kernel/unaligned.c	Tue Jan 15 04:08:09 2002
+++ kernel/arch/mips/kernel/unaligned.c	Fri Sep 27 16:58:22 2002
@@ -8,6 +8,11 @@
  * Copyright (C) 1996, 1998 by Ralf Baechle
  * Copyright (C) 1999 Silicon Graphics, Inc.
  *
+ * Fixes: 
+ *          2002 Denis Joseph Barrow <dj_barrow@ariasoft.ie>
+ *          Fix to do_ade to compute destination addresses correctly 
+ *          after fixing delay slot instructions.
+ * 
  * This file contains exception handler for address error exception with the
  * special capability to execute faulting instructions in software.  The
  * handler does not try to handle the case when the program counter points
@@ -97,13 +102,15 @@
 		goto sigbus;
 
 static inline int emulate_load_store_insn(struct pt_regs *regs,
-	unsigned long addr, unsigned long pc)
+	unsigned long addr, unsigned long pc,
+	unsigned long **regptr,unsigned long *newvalue)
 {
 	union mips_instruction insn;
 	unsigned long value, fixup;
 	unsigned int res;
 
 	regs->regs[0] = 0;
+	*regptr=NULL;
 	/*
 	 * This load never faults.
 	 */
@@ -169,7 +176,8 @@
 			: "r" (addr), "i" (-EFAULT));
 		if (res)
 			goto fault;
-		regs->regs[insn.i_format.rt] = value;
+		*newvalue=value;
+		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case lw_op:
@@ -196,7 +204,8 @@
 			: "r" (addr), "i" (-EFAULT));
 		if (res)
 			goto fault;
-		regs->regs[insn.i_format.rt] = value;
+		*newvalue=value;
+		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case lhu_op:
@@ -227,7 +236,8 @@
 			: "r" (addr), "i" (-EFAULT));
 		if (res)
 			goto fault;
-		regs->regs[insn.i_format.rt] = value;
+		*newvalue=value;
+		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case lwu_op:
@@ -365,7 +375,7 @@
 
 asmlinkage void do_ade(struct pt_regs *regs)
 {
-	unsigned long pc;
+	unsigned long pc,*regptr,newval;
 	extern int do_dsemulret(struct pt_regs *);
 
 	/* 
@@ -395,9 +405,18 @@
 	 * Do branch emulation only if we didn't forward the exception.
 	 * This is all so but ugly ...
 	 */
-	if (!emulate_load_store_insn(regs, regs->cp0_badvaddr, pc))
+	if (!emulate_load_store_insn(regs, regs->cp0_badvaddr, pc,&regptr,&newval))
+	{
 		compute_return_epc(regs);
-
+                /* We need use the regptr complication for delay slot instructions 
+                 * which can miscompute destination addresses
+                 * e.g. consider the sequence 
+                 * beqz        v0,<destaddr>
+                 * lw          v0,(t3) 
+                 */ 
+		if(regptr)
+			*regptr=newval;
+	}
 #ifdef CONFIG_PROC_FS
 	unaligned_instructions++;
 #endif
--- kernel.orig/arch/mips64/kernel/unaligned.c	Sat Jan 26 07:28:35 2002
+++ kernel/arch/mips64/kernel/unaligned.c	Fri Sep 27 17:09:28 2002
@@ -8,6 +8,11 @@
  * Copyright (C) 1996, 1998, 1999 by Ralf Baechle
  * Copyright (C) 1999 Silicon Graphics, Inc.
  *
+ * Fixes: 
+ *          2002 Denis Joseph Barrow <dj_barrow@ariasoft.ie>
+ *          Fix to do_ade to compute destination addresses correctly 
+ *          after fixing delay slot instructions.
+ * 
  * This file contains exception handler for address error exception with the
  * special capability to execute faulting instructions in software.  The
  * handler does not try to handle the case when the program counter points
@@ -97,12 +102,14 @@
 		goto sigbus;
 
 static inline int emulate_load_store_insn(struct pt_regs *regs,
-	unsigned long addr, unsigned long pc)
+	unsigned long addr, unsigned long pc,
+ 	unsigned long **regptr,unsigned long *newvalue)
 {
 	union mips_instruction insn;
 	unsigned long value, fixup;
 
 	regs->regs[0] = 0;
+	*regptr=NULL;
 	/*
 	 * This load never faults.
 	 */
@@ -162,7 +169,8 @@
 			".previous"
 			:"=&r" (value)
 			:"r" (addr), "i" (&&fault));
-		regs->regs[insn.i_format.rt] = value;
+ 		*newvalue=value;
+ 		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case lw_op:
@@ -182,8 +190,9 @@
 			".previous"
 			:"=&r" (value)
 			:"r" (addr), "i" (&&fault));
-			regs->regs[insn.i_format.rt] = value;
-			return 0;
+ 		*newvalue=value;
+ 		*regptr=&regs->regs[insn.i_format.rt];
+		return 0;
 
 	case lhu_op:
 		check_axs(pc, addr, 2);
@@ -206,7 +215,8 @@
 			".previous"
 			:"=&r" (value)
 			:"r" (addr), "i" (&&fault));
-		regs->regs[insn.i_format.rt] = value;
+ 		*newvalue=value;
+ 		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case lwu_op:
@@ -227,7 +237,8 @@
 			:"=&r" (value)
 			:"r" (addr), "i" (&&fault));
 		value &= 0xffffffff;
-		regs->regs[insn.i_format.rt] = value;
+		*newvalue=value;
+ 		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case ld_op:
@@ -249,7 +260,8 @@
 			".previous"
 			:"=&r" (value)
 			:"r" (addr), "i" (&&fault));
-		regs->regs[insn.i_format.rt] = value;
+ 		*newvalue=value;
+ 		*regptr=&regs->regs[insn.i_format.rt];
 		return 0;
 
 	case sh_op:
@@ -398,9 +410,18 @@
 	 * Do branch emulation only if we didn't forward the exception.
 	 * This is all so but ugly ...
 	 */
-	if (!emulate_load_store_insn(regs, regs->cp0_badvaddr, pc))
+	if (!emulate_load_store_insn(regs, regs->cp0_badvaddr, pc,&regptr,&newval))
+	{
 		compute_return_epc(regs);
-
+                /* We need use the regptr complication for delay slot instructions 
+                 * which can miscompute destination addresses
+                 * e.g. consider the sequence 
+                 * beqz        v0,<destaddr>
+                 * lw          v0,(t3) 
+                 */ 
+		if(regptr)
+			*regptr=newval;
+	}
 #ifdef CONFIG_PROC_FS
 	unaligned_instructions++;
 #endif










--0-1906408386-1033484785=:51138--

From macro@ds2.pg.gda.pl Tue Oct  1 18:16:48 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 18:16:49 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:4798 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123907AbSJAQQs>; Tue, 1 Oct 2002 18:16:48 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id SAA19005;
	Tue, 1 Oct 2002 18:17:11 +0200 (MET DST)
Date: Tue, 1 Oct 2002 18:17:11 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Reply-To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: linux-mips@linux-mips.org
Subject: [resend] 2.4: Support R4000 as a distinct CPU type
Message-ID: <Pine.GSO.3.96.1021001163617.13606J-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 327
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

Ralf,

 Here is a new version that takes your recent mips64 cache code rearrange
into account.  OK to apply?

 BTW, how about renaming r5k-sc.c to sc-r5k.c for consistency?

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

---------- Forwarded message ----------
Message-ID: <Pine.GSO.3.96.1020904172031.10619I-100000@delta.ds2.pg.gda.pl>
Date: Wed, 4 Sep 2002 17:57:15 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@uni-koblenz.de>,
    Karsten Merker <karsten@excalibur.cologne.de>,
    linux-mips@linux-mips.org
Subject: [patch] 2.4.19: Support R4000 as a distinct CPU type

Hello,

 Being an early implementation of a CPU family, R4000 contains a number of
interesting "features".  One of them is a problem that affects a few
variations of shift operations (both 32-bit and 64-bit ones) that are
executed after multiply or divide instructions.  Under certain
circumstances the shifts produce incorrect results.  This is documented as
erratum #28 in "MIPS R4000PC/SC Errata, Processor Revision 2.2 and 3.0" 
which is available at the MIPS site (I can't quote it here, sorry, as it's
copyrighted material and I failed to get permission from MIPS). 

 There is a partial workaround for the problem implemented in gcc which
gets activated if the "-mcpu=r4000" option is passed to the compiler. 
Recent problems with the kernel when run on an affected CPU led me to
complete the multiplication part of the workaround (I'm also working on
the division part that is less biting).  A suitable patch for 2.95.x is
available in mipsel-linux and mips64el-linux cross-gcc packages at my
site.

 But to let gcc activate the workaround, kernel Makefiles must pass the
mentioned option.  Here is a suitable patch.  OK to apply?

 I would like to express my gratitude to Karsten, who patiently tested on
his R4000 system a seemingly endless stream of kernels I fed him until I
discovered the reason of a mysterious misbehaviour.  Without his help I
wouldn't be able to resolve the problem.

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

patch-mips-2.4.20-pre6-20021001-r4000-2
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/Documentation/Configure.help linux-mips-2.4.20-pre6-20021001/Documentation/Configure.help
--- linux-mips-2.4.20-pre6-20021001.macro/Documentation/Configure.help	2002-09-12 02:58:51.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/Documentation/Configure.help	2002-09-30 23:28:19.000000000 +0000
@@ -2229,9 +2229,9 @@ CONFIG_PCMCIA_FDOMAIN
 
 # Choice: mipstype
 CPU type
-CONFIG_CPU_R3000
+CONFIG_CPU_MIPS32
   Please make sure to pick the right CPU type. Linux/MIPS is not
-  designed to be generic, i.e. Kernels compiled for R3000 CPUs will
+  designed to be generic, i.e. kernels compiled for R3000 CPUs will
   *not* work on R4000 machines and vice versa.  However, since most
   of the supported machines have an R4000 (or similar) CPU, R4x00
   might be a safe bet.  If the resulting kernel does not work,
@@ -2243,10 +2243,12 @@ CONFIG_CPU_R3000
   R6000    MIPS Technologies R6000-series processors,
            including the 64474, 64475, 64574 and 64575.
 
+  R4000    MIPS Technologies R4000-series processors.
+
   R4300    MIPS Technologies R4300-series processors.
 
-  R4x00    MIPS Technologies R4000-series processors other than 4300,
-           including the 4640, 4650, and 4700.
+  R4x00    MIPS Technologies R4xxx-series processors other than 4000
+           and 4300, including the 4640, 4650, and 4700.
 
   R5000    MIPS Technologies R5000-series processors other than the
            Nevada.
@@ -2260,14 +2262,18 @@ CONFIG_CPU_R6000
   MIPS Technologies R6000-series processors, including the 64474,
   64475, 64574 and 64575.
 
+R4000
+CONFIG_CPU_R4000
+  MIPS Technologies R4000-series processors.
+
 R4300
 CONFIG_CPU_R4300
   MIPS Technologies R4300-series processors.
 
 R4x00
 CONFIG_CPU_R4X00
-  MIPS Technologies R4000-series processors other than 4300, including
-  the 4640, 4650, and 4700.
+  MIPS Technologies R4xxx-series processors other than 4000 and 4300,
+  including the 4640, 4650, and 4700.
 
 R5000
 CONFIG_CPU_R5000
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips/Makefile linux-mips-2.4.20-pre6-20021001/arch/mips/Makefile
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips/Makefile	2002-09-29 02:56:21.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips/Makefile	2002-09-30 23:28:19.000000000 +0000
@@ -57,6 +57,9 @@ endif
 ifdef CONFIG_CPU_R6000
 GCCFLAGS	+= -mcpu=r6000 -mips2 -Wa,--trap
 endif
+ifdef CONFIG_CPU_R4000
+GCCFLAGS	+= -mcpu=r4000 -mips2 -Wa,--trap
+endif
 ifdef CONFIG_CPU_R4300
 GCCFLAGS	+= -mcpu=r4300 -mips2 -Wa,--trap
 endif
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips/config-shared.in linux-mips-2.4.20-pre6-20021001/arch/mips/config-shared.in
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips/config-shared.in	2002-09-29 02:56:21.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips/config-shared.in	2002-09-30 23:28:19.000000000 +0000
@@ -445,6 +445,7 @@ choice 'CPU type' \
 	 MIPS64	CONFIG_CPU_MIPS64 \
 	 R3000	CONFIG_CPU_R3000 \
 	 R39XX	CONFIG_CPU_TX39XX \
+	 R4000	CONFIG_CPU_R4000 \
 	 R41xx	CONFIG_CPU_VR41XX \
 	 R4300	CONFIG_CPU_R4300 \
 	 R4x00	CONFIG_CPU_R4X00 \
@@ -504,7 +505,8 @@ if [ "$CONFIG_CPU_SB1" = "y" ]; then
    define_bool CONFIG_VTAG_ICACHE y
 fi
 
-if [ "$CONFIG_CPU_R4X00"  = "y" -o \
+if [ "$CONFIG_CPU_R4000"  = "y" -o \
+     "$CONFIG_CPU_R4X00"  = "y" -o \
      "$CONFIG_CPU_R5000"  = "y" -o \
      "$CONFIG_CPU_RM7000" = "y" -o \
      "$CONFIG_CPU_R10000" = "y" -o \
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips/dec/prom/init.c linux-mips-2.4.20-pre6-20021001/arch/mips/dec/prom/init.c
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips/dec/prom/init.c	2002-08-06 02:57:08.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips/dec/prom/init.c	2002-09-02 18:38:37.000000000 +0000
@@ -100,7 +100,7 @@ int __init prom_init(int argc, char **ar
 	}
 #endif
 
-#if defined(CONFIG_CPU_R4X00)
+#if defined(CONFIG_CPU_R4000) || defined(CONFIG_CPU_R4X00)
 	if ((mips_cpu.cputype == CPU_R3000) ||
 	    (mips_cpu.cputype == CPU_R3000A)) {
 		prom_printf("Sorry, this kernel is compiled for the wrong CPU type!\n");
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips/mm/Makefile linux-mips-2.4.20-pre6-20021001/arch/mips/mm/Makefile
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips/mm/Makefile	2002-09-03 02:56:40.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips/mm/Makefile	2002-09-30 23:28:19.000000000 +0000
@@ -17,6 +17,7 @@ obj-$(CONFIG_CPU_R3000)		+= pg-r3k.o c-r
 				   tlbex-r3k.o
 obj-$(CONFIG_CPU_TX39XX)	+= pg-r3k.o c-tx39.o tlb-r3k.o tlbex-r3k.o
 obj-$(CONFIG_CPU_TX49XX)	+= pg-r4k.o c-tx49.o tlb-r4k.o tlbex-r4k.o
+obj-$(CONFIG_CPU_R4000)		+= pg-r4k.o c-r4k.o tlb-r4k.o tlbex-r4k.o
 obj-$(CONFIG_CPU_R4300)		+= pg-r4k.o c-r4k.o tlb-r4k.o tlbex-r4k.o
 obj-$(CONFIG_CPU_R4X00)		+= pg-r4k.o c-r4k.o tlb-r4k.o tlbex-r4k.o
 obj-$(CONFIG_CPU_VR41XX)	+= pg-r4k.o c-r4k.o tlb-r4k.o tlbex-r4k.o
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips/mm/loadmmu.c linux-mips-2.4.20-pre6-20021001/arch/mips/mm/loadmmu.c
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips/mm/loadmmu.c	2002-08-06 02:57:32.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips/mm/loadmmu.c	2002-09-02 18:42:30.000000000 +0000
@@ -68,9 +68,9 @@ extern void sb1_tlb_init(void);
 void __init loadmmu(void)
 {
 	if (mips_cpu.options & MIPS_CPU_4KTLB) {
-#if defined(CONFIG_CPU_R4X00) || defined(CONFIG_CPU_VR41XX) || \
-    defined(CONFIG_CPU_R4300) || defined(CONFIG_CPU_R5000) || \
-    defined(CONFIG_CPU_NEVADA)
+#if defined(CONFIG_CPU_R4000) || defined(CONFIG_CPU_VR41XX) || \
+    defined(CONFIG_CPU_R4300) || defined(CONFIG_CPU_R4X00) || \
+    defined(CONFIG_CPU_R5000) || defined(CONFIG_CPU_NEVADA)
 		ld_mmu_r4xx0();
 		r4k_tlb_init();
 #endif
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/Makefile linux-mips-2.4.20-pre6-20021001/arch/mips64/Makefile
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/Makefile	2002-09-03 02:58:10.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips64/Makefile	2002-09-30 23:28:19.000000000 +0000
@@ -46,6 +46,9 @@ endif
 #
 # CPU-dependent compiler/assembler options for optimization.
 #
+ifdef CONFIG_CPU_R4000
+GCCFLAGS	+= -mcpu=r4000 -mips3
+endif
 ifdef CONFIG_CPU_R4300
 GCCFLAGS	+= -mcpu=r4300 -mips3
 endif
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/mm/Makefile linux-mips-2.4.20-pre6-20021001/arch/mips64/mm/Makefile
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/mm/Makefile	2002-10-01 02:56:55.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips64/mm/Makefile	2002-10-01 16:11:06.000000000 +0000
@@ -10,6 +10,7 @@ export-objs			+= umap.o
 obj-y				:= extable.o init.o fault.o loadmmu.o \
 				   tlb-glue-r4k.o tlbex-r4k.o
 
+obj-$(CONFIG_CPU_R4000)		+= c-r4k.o pg-r4k.o tlb-r4k.o
 obj-$(CONFIG_CPU_R4300)		+= c-r4k.o pg-r4k.o tlb-r4k.o
 obj-$(CONFIG_CPU_R4X00)		+= c-r4k.o pg-r4k.o tlb-r4k.o
 obj-$(CONFIG_CPU_R5000)		+= c-r4k.o pg-r4k.o tlb-r4k.o r5k-sc.o
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/mm/loadmmu.c linux-mips-2.4.20-pre6-20021001/arch/mips64/mm/loadmmu.c
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/mm/loadmmu.c	2002-09-29 02:56:35.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips64/mm/loadmmu.c	2002-09-30 23:28:19.000000000 +0000
@@ -60,7 +60,8 @@ extern void r4k_tlb_init(void);
 void __init load_mmu(void)
 {
 	if (mips_cpu.options & MIPS_CPU_4KTLB) {
-#if defined (CONFIG_CPU_R4300)						\
+#if defined (CONFIG_CPU_R4000)						\
+    || defined (CONFIG_CPU_R4300)					\
     || defined (CONFIG_CPU_R4X00)					\
     || defined (CONFIG_CPU_R5000)					\
     || defined (CONFIG_CPU_NEVADA)
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/include/asm-mips64/addrspace.h linux-mips-2.4.20-pre6-20021001/include/asm-mips64/addrspace.h
--- linux-mips-2.4.20-pre6-20021001.macro/include/asm-mips64/addrspace.h	2002-07-26 02:58:05.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/include/asm-mips64/addrspace.h	2002-10-01 16:10:29.000000000 +0000
@@ -82,7 +82,8 @@
 #define CKSSEG			0xffffffffc0000000
 #define CKSEG3			0xffffffffe0000000
 
-#if defined (CONFIG_CPU_R4300)						\
+#if defined (CONFIG_CPU_R4000)						\
+    || defined (CONFIG_CPU_R4300)					\
     || defined (CONFIG_CPU_R4X00)					\
     || defined (CONFIG_CPU_R5000)					\
     || defined (CONFIG_CPU_NEVADA)					\


From macro@ds2.pg.gda.pl Tue Oct  1 18:49:52 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 01 Oct 2002 18:49:53 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:35006 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123907AbSJAQtw>; Tue, 1 Oct 2002 18:49:52 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id SAA19557;
	Tue, 1 Oct 2002 18:50:17 +0200 (MET DST)
Date: Tue, 1 Oct 2002 18:50:17 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: linux-mips@linux-mips.org
Subject: [resend] The R4k generic exception vector for MIPS64
Message-ID: <Pine.GSO.3.96.1021001184524.13606N-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 328
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

Ralf,

 The following patch is needed for the whole except_vec3_r4000 handler to
be copied to its ultimate destination.  It also fixes a number of obvious
bugs within the handler (most notably the BadVaddr truncation).  Plus
minor consistency fixes.  Updated to take your recent trap setup changes
into account.  OK to apply? 

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

patch-mips-2.4.20-pre6-20021001-mips64-vec3_r4000-8
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/kernel/r4k_genex.S linux-mips-2.4.20-pre6-20021001/arch/mips64/kernel/r4k_genex.S
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/kernel/r4k_genex.S	2002-10-01 02:56:55.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips64/kernel/r4k_genex.S	2002-10-01 16:18:17.000000000 +0000
@@ -5,6 +5,7 @@
  *
  * Copyright (C) 1994 - 1999 by Ralf Baechle
  * Copyright (C) 1999 Silicon Graphics
+ * Copyright (C) 2002  Maciej W. Rozycki
  *
  * Low level exception handling
  */
@@ -31,25 +32,28 @@
 	BUILD_HANDLER mcheck mcheck cli verbose		/* #24 */
 	BUILD_HANDLER reserved reserved sti verbose	/* others */
 
+
 	__INIT
 
 /* General exception handler for CPUs with virtual coherency exception.
  *
- * Be careful when changing this, it has to be at most 128 bytes to fit
- * into space reserved for the exception handler.
+ * Be careful when changing this, it has to be at most 256 (as a special
+ * exception) bytes to fit into space reserved for the exception handler.
  */
-	NESTED(except_vec3_r4000, 0, sp)
+	.set	push
 	.set	noat
-#if defined(R5432_CP0_INTERRUPT_WAR)
-	mfc0    k0, CP0_INDEX
-#endif
+NESTED(except_vec3_r4000, 0, sp)
 	mfc0	k1, CP0_CAUSE
-	andi	k1, k1, 0x7c
 	li	k0, 31<<2
+	andi	k1, k1, 0x7c
+	.set	push
+	.set	noreorder
+	.set	nomacro
 	beq	k1, k0, handle_vced
 	 li	k0, 14<<2
 	beq	k1, k0, handle_vcei
 	 dsll	k1, k1, 1
+	.set	pop
 	ld	k0, exception_handlers(k1)
 	jr	k0
 
@@ -60,51 +64,61 @@
  * store will be re-executed.
  */
 handle_vced:
-	mfc0	k0, CP0_BADVADDR
+	dmfc0	k0, CP0_BADVADDR
 	li	k1, -4					# Is this ...
 	and	k0, k1					# ... really needed?
 	mtc0	zero, CP0_TAGLO
 	cache	Index_Store_Tag_D,(k0)
 	cache	Hit_Writeback_Inv_SD,(k0)
-	lui	k0, %hi(vced_count)
-	lw	k1, %lo(vced_count)(k0)
+	dla	k0, vced_count
+	lw	k1, (k0)
 	addiu	k1, 1
-	sw	k1, %lo(vced_count)(k0)
+	sw	k1, (k0)
 	eret
 
 handle_vcei:
-	mfc0	k0, CP0_BADVADDR
+	dmfc0	k0, CP0_BADVADDR
 	cache	Hit_Writeback_Inv_SD,(k0)		# also cleans pi
-	lui	k0, %hi(vcei_count)
-	lw	k1, %lo(vcei_count)(k0)
+	dla	k0, vcei_count
+	lw	k1, (k0)
 	addiu	k1, 1
-	sw	k1, %lo(vcei_count)(k0)
+	sw	k1, (k0)
 	eret
+END(except_vec3_r4000)
+	.set	pop
 
-	END(except_vec3_r4000)
-	.set	at
 
-	/* General exception vector for all other CPUs. */
-	NESTED(except_vec3_generic, 0, sp)
+/* General exception vector for all other CPUs.
+ *
+ * Be careful when changing this, it has to be at most 128 bytes
+ * to fit into space reserved for the exception handler.
+ */
+	.set	push
 	.set	noat
+NESTED(except_vec3_generic, 0, sp)
+#if defined(R5432_CP0_INTERRUPT_WAR)
+	mfc0    k0, CP0_INDEX
+#endif
 	mfc0	k1, CP0_CAUSE
 	andi	k1, k1, 0x7c
 	dsll	k1, k1, 1
 	ld	k0, exception_handlers(k1)
 	jr	k0
-	 nop
-	END(except_vec3_generic)
-	.set	at
+END(except_vec3_generic)
+	.set	pop
+
 
 /*
- * Special interrupt vector for embedded MIPS.  This is a dedicated interrupt
- * vector which reduces interrupt processing overhead.  The jump instruction
- * will be inserted here at initialization time.  This handler may only be 8
- * bytes in size!
+ * Special interrupt vector for MIPS64 ISA & embedded MIPS processors.
+ * This is a dedicated interrupt exception vector which reduces the
+ * interrupt processing overhead.  The jump instruction will be replaced
+ * at the initialization time.
+ *
+ * Be careful when changing this, it has to be at most 128 bytes
+ * to fit into space reserved for the exception handler.
  */
 NESTED(except_vec4, 0, sp)
 1:	j	1b			/* Dummy, will be replaced */
-	 nop
-	END(except_vec4)
+END(except_vec4)
 
 	__FINIT
diff -up --recursive --new-file linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/kernel/traps.c linux-mips-2.4.20-pre6-20021001/arch/mips64/kernel/traps.c
--- linux-mips-2.4.20-pre6-20021001.macro/arch/mips64/kernel/traps.c	2002-10-01 02:56:55.000000000 +0000
+++ linux-mips-2.4.20-pre6-20021001/arch/mips64/kernel/traps.c	2002-10-01 16:20:50.000000000 +0000
@@ -625,8 +625,8 @@ asmlinkage void do_watch(struct pt_regs 
 	 * We use the watch exception where available to detect stack
 	 * overflows.
 	 */
-	dump_tlb_all();
 	show_regs(regs);
+	dump_tlb_all();
 	panic("Caught WATCH exception - probably caused by stack overflow.");
 }
 
@@ -657,8 +657,8 @@ asmlinkage void do_reserved(struct pt_re
 static inline void watch_init(void)
 {
 	if (mips_cpu.options & MIPS_CPU_WATCH) {
-	set_except_vector(23, handle_watch);
-	watch_available = 1;
+		set_except_vector(23, handle_watch);
+		watch_available = 1;
 	}
 }
 
@@ -742,7 +742,7 @@ void __init trap_init(void)
 	 * interrupt processing overhead.  Use it where available.
 	 */
 	if (mips_cpu.options & MIPS_CPU_DIVEC) {
-		memcpy((void *)(KSEG0 + 0x200), &except_vec4, 8);
+		memcpy((void *)(KSEG0 + 0x200), &except_vec4, 0x80);
 		set_cp0_cause(CAUSEF_IV);
 	}
 
@@ -776,9 +776,12 @@ void __init trap_init(void)
 	if (mips_cpu.options & MIPS_CPU_MCHECK)
 		set_except_vector(24, handle_mcheck);
 
-	if (mips_cpu.options & MIPS_CPU_VCE)
+	if (mips_cpu.options & MIPS_CPU_VCE) {
+		/* VCE and DIVEC are mutually exclusive. */
+		if (mips_cpu.options & MIPS_CPU_DIVEC)
+			BUG();
 		memcpy((void *)(KSEG0 + 0x180), &except_vec3_r4000, 0x80);
-	else if (mips_cpu.options & MIPS_CPU_4KEX)
+	} else if (mips_cpu.options & MIPS_CPU_4KEX)
 		memcpy((void *)(KSEG0 + 0x180), &except_vec3_generic, 0x80);
 	else
 		memcpy((void *)(KSEG0 + 0x080), &except_vec3_generic, 0x80);


From root@ugyvitelszolgaltato.hu Wed Oct  2 07:59:49 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 07:59:49 +0200 (CEST)
Received: from [213.163.26.102] ([213.163.26.102]:2317 "EHLO
	tarzan.ugyvitelszolgaltato.hu") by linux-mips.org with ESMTP
	id <S1123915AbSJBF7t>; Wed, 2 Oct 2002 07:59:49 +0200
Received: from atti.ugyvitelszolgaltato.hu (atti.ugyvitelszolgaltato.hu [193.80.82.9])
	by tarzan.ugyvitelszolgaltato.hu (8.9.3/8.9.3/Debian 8.9.3-21) with ESMTP id IAA10428
	for <linux-mips@linux-mips.org>; Wed, 2 Oct 2002 08:40:54 +0200
Received: from root by atti.ugyvitelszolgaltato.hu with local (Exim 3.35 #1 (Debian))
	id 17wcXn-0003E7-00
	for <linux-mips@linux-mips.org>; Wed, 02 Oct 2002 07:59:35 +0200
Date: Wed, 2 Oct 2002 07:59:35 +0200
From: Attila Szabo <trial@ugyvitelszolgaltato.hu>
To: linux-mips@linux-mips.org
Subject: some indy question
Message-ID: <20021002055935.GA12393@csola.ugyvitelszolgaltato.hu>
Mail-Followup-To: linux-mips@linux-mips.org
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Disposition: inline
User-Agent: Mutt/1.3.28i
Organization: Ugyvitelszolgaltato Kft.
X-OS: Linux 2.4.18, Debian Woody
X-Sys: MSI K7T Turbo, AMD Tbird 850MHz, 1GB RAM, Matrox g200, 20GB Hdd
X-WM: Blackbox 0.62
Return-Path: <root@ugyvitelszolgaltato.hu>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 329
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: trial@ugyvitelszolgaltato.hu
Precedence: bulk
X-list: linux-mips

Hi,

When I try to use the external cdrom on my Indy,
the machine produces scsi errors, like command timeout and
I have to reboot with sysrq.
I tried two harddisks but the same.Under Irix it is
working with the same scsi id-s.
Is there a bug around cdrom,sr_mod or something to know
about the external cdroms under 2.4.17 ?
It is working with external harddisk.
I use 2.4.17, woody.
I tried to compile 2.4.18 but the newport console gets
blue and the output stops, otherwise ok.
I tried to compile linux-2.4.19 from cvs, but
it does'nt boot.
Please tell me what's this cdrom error and
which kernel is known to be completely working ?

thank you

-- 
-
-
A t t i l a :: trial@ugyvitelszolgaltato.hu :: S z a b o
-
-

From ica2_ts@csv.ica.uni-stuttgart.de Wed Oct  2 14:21:47 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 14:21:48 +0200 (CEST)
Received: from iris1.csv.ica.uni-stuttgart.de ([129.69.118.2]:97 "EHLO
	iris1.csv.ica.uni-stuttgart.de") by linux-mips.org with ESMTP
	id <S1123915AbSJBMVr>; Wed, 2 Oct 2002 14:21:47 +0200
Received: from rembrandt.csv.ica.uni-stuttgart.de ([129.69.118.42])
	by iris1.csv.ica.uni-stuttgart.de with esmtp (Exim 3.36 #2)
	id 17wiVY-00324z-00
	for linux-mips@linux-mips.org; Wed, 02 Oct 2002 14:21:40 +0200
Received: from ica2_ts by rembrandt.csv.ica.uni-stuttgart.de with local (Exim 3.35 #1 (Debian))
	id 17wiVX-00008g-00
	for <linux-mips@linux-mips.org>; Wed, 02 Oct 2002 14:21:39 +0200
Date: Wed, 2 Oct 2002 14:21:39 +0200
To: linux-mips@linux-mips.org
Subject: Re: some indy question
Message-ID: <20021002122139.GB4801@rembrandt.csv.ica.uni-stuttgart.de>
References: <20021002055935.GA12393@csola.ugyvitelszolgaltato.hu>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20021002055935.GA12393@csola.ugyvitelszolgaltato.hu>
User-Agent: Mutt/1.4i
From: Thiemo Seufer <ica2_ts@csv.ica.uni-stuttgart.de>
Return-Path: <ica2_ts@csv.ica.uni-stuttgart.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 330
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ica2_ts@csv.ica.uni-stuttgart.de
Precedence: bulk
X-list: linux-mips

Attila Szabo wrote:
> Hi,
> 
> When I try to use the external cdrom on my Indy,
> the machine produces scsi errors, like command timeout and
> I have to reboot with sysrq.
> I tried two harddisks but the same.Under Irix it is
> working with the same scsi id-s.
> Is there a bug around cdrom,sr_mod or something to know
> about the external cdroms under 2.4.17 ?
> It is working with external harddisk.
> I use 2.4.17, woody.

FYI, I have similiar problems with both internal and external
cdroms on my I2. The hardware works fine under IRIX.


Thiemo

From carstenl@mips.com Wed Oct  2 15:23:13 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 15:23:14 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:3015 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123915AbSJBNXN>;
	Wed, 2 Oct 2002 15:23:13 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g92DMxrZ006781;
	Wed, 2 Oct 2002 06:22:59 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id GAA22127;
	Wed, 2 Oct 2002 06:23:28 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g92DMxb01621;
	Wed, 2 Oct 2002 15:23:00 +0200 (MEST)
Message-ID: <3D9AF333.BC304A34@mips.com>
Date: Wed, 02 Oct 2002 15:22:59 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: 64-bit kernel patch.
Content-Type: multipart/mixed;
 boundary="------------1D80166B5761164BECAD697A"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 331
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------1D80166B5761164BECAD697A
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

I have a number of patches for the o32 syscall wrapper/conversion
routines, which is needed when running a 64-bit kernel on an o32
userland.
Here is the first one. Ralf, could you please apply it, so I can send
the next one.

/Carsten




--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------1D80166B5761164BECAD697A
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part1.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part1.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.12
diff -u -r1.42.2.12 linux32.c
--- arch/mips64/kernel/linux32.c	27 Sep 2002 23:29:17 -0000	1.42.2.12
+++ arch/mips64/kernel/linux32.c	2 Oct 2002 13:13:42 -0000
@@ -179,7 +179,32 @@
 	return err;
 }
 
-asmlinkage int sys_mmap2(void) {return 0;}
+asmlinkage unsigned long
+sys32_mmap2(unsigned long addr, size_t len, unsigned long prot,
+         unsigned long flags, unsigned long fd, unsigned long pgoff)
+{
+	struct file * file = NULL;
+	unsigned long error;
+
+	error = -EINVAL;
+	if (!(flags & MAP_ANONYMOUS)) {
+		error = -EBADF;
+		file = fget(fd);
+		if (!file)
+			goto out;
+	}
+	flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
+
+	down_write(&current->mm->mmap_sem);
+	error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
+	up_write(&current->mm->mmap_sem);
+	if (file)
+		fput(file);
+
+out:
+	return error;
+}
+
 
 asmlinkage long sys_truncate(const char * path, unsigned long length);
 
Index: arch/mips64/kernel/scall_o32.S
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/scall_o32.S,v
retrieving revision 1.48.2.15
diff -u -r1.48.2.15 scall_o32.S
--- arch/mips64/kernel/scall_o32.S	11 Sep 2002 13:56:36 -0000	1.48.2.15
+++ arch/mips64/kernel/scall_o32.S	2 Oct 2002 13:13:42 -0000
@@ -522,7 +522,7 @@
 	sys	sys_sendfile	4
 	sys	sys_ni_syscall	0
 	sys	sys_ni_syscall	0
-	sys	sys_mmap2	6			/* 4210 */
+	sys	sys32_mmap2	6			/* 4210 */
 	sys	sys_truncate64	2
 	sys	sys_ftruncate64	2
 	sys	sys_newstat	2

--------------1D80166B5761164BECAD697A--


From macro@ds2.pg.gda.pl Wed Oct  2 15:40:05 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 15:40:05 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:34002 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123897AbSJBNkF>; Wed, 2 Oct 2002 15:40:05 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id PAA11227;
	Wed, 2 Oct 2002 15:40:27 +0200 (MET DST)
Date: Wed, 2 Oct 2002 15:40:27 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Reply-To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Carsten Langgaard <carstenl@mips.com>
cc: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
In-Reply-To: <3D9AF333.BC304A34@mips.com>
Message-ID: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 332
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Wed, 2 Oct 2002, Carsten Langgaard wrote:

> I have a number of patches for the o32 syscall wrapper/conversion
> routines, which is needed when running a 64-bit kernel on an o32
> userland.
> Here is the first one. Ralf, could you please apply it, so I can send
> the next one.

 Do you have a fix for sys32_sendmsg/sys32_recvmsg as well?  I just
started working on it and I'd prefer not to do a duplicate work.

 As a side note -- arch/mips64/kernel/linux32.c is a huge collection of
often unrelated functions.  It might be beneficial to split the file
functionally, e.g. into fs32.c, net32.c, etc. or even with a finer grain,
preferably in a subdirectory, e.g. arch/mips64/linux32/.  What do you
think? 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From carstenl@mips.com Wed Oct  2 15:45:15 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 15:45:16 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:32455 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123897AbSJBNpP>;
	Wed, 2 Oct 2002 15:45:15 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g92DiVrZ006824;
	Wed, 2 Oct 2002 06:44:31 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id GAA22768;
	Wed, 2 Oct 2002 06:45:01 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g92DiWb04021;
	Wed, 2 Oct 2002 15:44:32 +0200 (MEST)
Message-ID: <3D9AF840.CDF33026@mips.com>
Date: Wed, 02 Oct 2002 15:44:32 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
CC: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
References: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 333
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

"Maciej W. Rozycki" wrote:

> On Wed, 2 Oct 2002, Carsten Langgaard wrote:
>
> > I have a number of patches for the o32 syscall wrapper/conversion
> > routines, which is needed when running a 64-bit kernel on an o32
> > userland.
> > Here is the first one. Ralf, could you please apply it, so I can send
> > the next one.
>
>  Do you have a fix for sys32_sendmsg/sys32_recvmsg as well?  I just
> started working on it and I'd prefer not to do a duplicate work.

Yes, that's exactly the next one, I will be sending.
So stay tuned.


>
>  As a side note -- arch/mips64/kernel/linux32.c is a huge collection of
> often unrelated functions.  It might be beneficial to split the file
> functionally, e.g. into fs32.c, net32.c, etc. or even with a finer grain,
> preferably in a subdirectory, e.g. arch/mips64/linux32/.  What do you
> think?

That's probably a good idea, but I would like to get my patches out first,
before splitting things up.


>
>
> --
> +  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
> +--------------------------------------------------------------+
> +        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From ralf@linux-mips.org Wed Oct  2 15:46:48 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 15:46:49 +0200 (CEST)
Received: from p508B64CB.dip.t-dialin.net ([80.139.100.203]:10120 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123897AbSJBNqs>; Wed, 2 Oct 2002 15:46:48 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g92Dkcn16948;
	Wed, 2 Oct 2002 15:46:38 +0200
Date: Wed, 2 Oct 2002 15:46:38 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: Carsten Langgaard <carstenl@mips.com>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
Message-ID: <20021002154638.B16482@linux-mips.org>
References: <3D9AF333.BC304A34@mips.com> <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl>; from macro@ds2.pg.gda.pl on Wed, Oct 02, 2002 at 03:40:27PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 334
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 02, 2002 at 03:40:27PM +0200, Maciej W. Rozycki wrote:

>  As a side note -- arch/mips64/kernel/linux32.c is a huge collection of
> often unrelated functions.  It might be beneficial to split the file
> functionally, e.g. into fs32.c, net32.c, etc. or even with a finer grain,
> preferably in a subdirectory, e.g. arch/mips64/linux32/.  What do you
> think? 

Much of the code is so generic it almost deserves to live in a directory
even higher in the hierarchy.  If you look at the 32-bit compat code for
the various 64-bit architectures of Linux (in particular sparc64 and ia64),
it's a single huge cut'n'paste session.  Not much of that code is actually
architecture dependant.

  Ralf

From ralf@linux-mips.org Wed Oct  2 15:48:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 15:48:01 +0200 (CEST)
Received: from p508B64CB.dip.t-dialin.net ([80.139.100.203]:11400 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123897AbSJBNsB>; Wed, 2 Oct 2002 15:48:01 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g92Dlrn16976;
	Wed, 2 Oct 2002 15:47:53 +0200
Date: Wed, 2 Oct 2002 15:47:53 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: linux-mips@linux-mips.org
Subject: Re: [resend] 2.4: Support R4000 as a distinct CPU type
Message-ID: <20021002154753.F17373@linux-mips.org>
References: <Pine.GSO.3.96.1021001163617.13606J-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <Pine.GSO.3.96.1021001163617.13606J-100000@delta.ds2.pg.gda.pl>; from macro@ds2.pg.gda.pl on Tue, Oct 01, 2002 at 06:17:11PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 335
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Tue, Oct 01, 2002 at 06:17:11PM +0200, Maciej W. Rozycki wrote:

>  Here is a new version that takes your recent mips64 cache code rearrange
> into account.  OK to apply?

I'm not sure if that's really a good idea.  Technically it's ok but I expect
users of the R4000 to missconfigure their kernels.  So I wonder if it might
be more appropriate to have just automatically enabled this workaround for
systems that are affected?  If we keep it user-selectable then we at least
want a safety check somewhere in the startup code telling users to rebuild
their code with the workaround enabled.

Having this workaround enabled by default would also ensure Linux
distributions ship working code - you don't want users having to recompile
their whole distribution ...

>  BTW, how about renaming r5k-sc.c to sc-r5k.c for consistency?

Yes.  Though there's a bit of confusion hidden there - the Indy SC code
is named ip22-sc.c - but that at least in a different directory.

  Ralf

From carstenl@mips.com Wed Oct  2 16:03:40 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 16:03:40 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:54983 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123897AbSJBODk>;
	Wed, 2 Oct 2002 16:03:40 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g92E2vrZ006871;
	Wed, 2 Oct 2002 07:02:57 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id HAA23381;
	Wed, 2 Oct 2002 07:03:26 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g92E2wb06206;
	Wed, 2 Oct 2002 16:02:58 +0200 (MEST)
Message-ID: <3D9AFC8F.261F0C37@mips.com>
Date: Wed, 02 Oct 2002 16:02:55 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>
CC: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
References: <3D9AF333.BC304A34@mips.com> <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl> <20021002154638.B16482@linux-mips.org>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 336
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

Ralf Baechle wrote:

> On Wed, Oct 02, 2002 at 03:40:27PM +0200, Maciej W. Rozycki wrote:
>
> >  As a side note -- arch/mips64/kernel/linux32.c is a huge collection of
> > often unrelated functions.  It might be beneficial to split the file
> > functionally, e.g. into fs32.c, net32.c, etc. or even with a finer grain,
> > preferably in a subdirectory, e.g. arch/mips64/linux32/.  What do you
> > think?
>
> Much of the code is so generic it almost deserves to live in a directory
> even higher in the hierarchy.  If you look at the 32-bit compat code for
> the various 64-bit architectures of Linux (in particular sparc64 and ia64),
> it's a single huge cut'n'paste session.  Not much of that code is actually
> architecture dependant.

That would be even better, but unfortunately a lot of the structures used in
the compat code is not exactly the same across architectures :-(
But it should be possible to merges a lot this stuff into a generic
(architecture independent) set of functions.


>
>   Ralf

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From carstenl@mips.com Wed Oct  2 16:05:51 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 16:05:52 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:57287 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123897AbSJBOFv>;
	Wed, 2 Oct 2002 16:05:51 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g92E52rZ006874;
	Wed, 2 Oct 2002 07:05:02 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id HAA23475;
	Wed, 2 Oct 2002 07:05:31 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g92E53b06433;
	Wed, 2 Oct 2002 16:05:03 +0200 (MEST)
Message-ID: <3D9AFD0E.84BA5100@mips.com>
Date: Wed, 02 Oct 2002 16:05:02 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
CC: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
References: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl>
Content-Type: multipart/mixed;
 boundary="------------4DF78B00319C7D722D09F588"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 337
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------4DF78B00319C7D722D09F588
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

Ok, here is the next patch.
It fixes the sys32_sendmsg and sys32_recvmsg.

/Carsten


"Maciej W. Rozycki" wrote:

> On Wed, 2 Oct 2002, Carsten Langgaard wrote:
>
> > I have a number of patches for the o32 syscall wrapper/conversion
> > routines, which is needed when running a 64-bit kernel on an o32
> > userland.
> > Here is the first one. Ralf, could you please apply it, so I can send
> > the next one.
>
>  Do you have a fix for sys32_sendmsg/sys32_recvmsg as well?  I just
> started working on it and I'd prefer not to do a duplicate work.
>
>  As a side note -- arch/mips64/kernel/linux32.c is a huge collection of
> often unrelated functions.  It might be beneficial to split the file
> functionally, e.g. into fs32.c, net32.c, etc. or even with a finer grain,
> preferably in a subdirectory, e.g. arch/mips64/linux32/.  What do you
> think?
>
> --
> +  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
> +--------------------------------------------------------------+
> +        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------4DF78B00319C7D722D09F588
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part2.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part2.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.13
diff -u -r1.42.2.13 linux32.c
--- arch/mips64/kernel/linux32.c	2 Oct 2002 13:32:45 -0000	1.42.2.13
+++ arch/mips64/kernel/linux32.c	2 Oct 2002 13:55:08 -0000
@@ -32,6 +32,7 @@
 #include <linux/dnotify.h>
 #include <linux/module.h>
 #include <net/sock.h>
+#include <net/scm.h>
 
 #include <asm/uaccess.h>
 #include <asm/mman.h>
@@ -1712,6 +1713,7 @@
 	return err;
 }
 
+static int
 do_sys32_msgsnd (int first, int second, int third, void *uptr)
 {
 	struct msgbuf32 *up = (struct msgbuf32 *)uptr;
@@ -2244,7 +2246,7 @@
 /*
  *  Declare the 32-bit version of the msghdr
  */
-
+ 
 struct msghdr32 {
 	unsigned int    msg_name;	/* Socket name			*/
 	int		msg_namelen;	/* Length of name		*/
@@ -2255,74 +2257,132 @@
 	unsigned	msg_flags;
 };
 
-static inline int
-shape_msg(struct msghdr *mp, struct msghdr32 *mp32)
+struct cmsghdr32 {
+        __kernel_size_t32 cmsg_len;
+        int               cmsg_level;
+        int               cmsg_type;
+};
+
+/* Bleech... */
+#define __CMSG32_NXTHDR(ctl, len, cmsg, cmsglen) __cmsg32_nxthdr((ctl),(len),(cmsg),(cmsglen))
+#define CMSG32_NXTHDR(mhdr, cmsg, cmsglen) cmsg32_nxthdr((mhdr), (cmsg), (cmsglen))
+
+#define CMSG32_ALIGN(len) ( ((len)+sizeof(int)-1) & ~(sizeof(int)-1) )
+
+#define CMSG32_DATA(cmsg)	((void *)((char *)(cmsg) + CMSG32_ALIGN(sizeof(struct cmsghdr32))))
+#define CMSG32_SPACE(len) (CMSG32_ALIGN(sizeof(struct cmsghdr32)) + CMSG32_ALIGN(len))
+#define CMSG32_LEN(len) (CMSG32_ALIGN(sizeof(struct cmsghdr32)) + (len))
+
+#define __CMSG32_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr32) ? \
+				    (struct cmsghdr32 *)(ctl) : \
+				    (struct cmsghdr32 *)NULL)
+#define CMSG32_FIRSTHDR(msg)	__CMSG32_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
+
+__inline__ struct cmsghdr32 *__cmsg32_nxthdr(void *__ctl, __kernel_size_t __size,
+					      struct cmsghdr32 *__cmsg, int __cmsg_len)
 {
-	int ret;
-	unsigned int i;
+	struct cmsghdr32 * __ptr;
 
-	if (!access_ok(VERIFY_READ, mp32, sizeof(*mp32)))
-		return(-EFAULT);
-	ret = __get_user(i, &mp32->msg_name);
-	mp->msg_name = (void *)A(i);
-	ret |= __get_user(mp->msg_namelen, &mp32->msg_namelen);
-	ret |= __get_user(i, &mp32->msg_iov);
-	mp->msg_iov = (struct iovec *)A(i);
-	ret |= __get_user(mp->msg_iovlen, &mp32->msg_iovlen);
-	ret |= __get_user(i, &mp32->msg_control);
-	mp->msg_control = (void *)A(i);
-	ret |= __get_user(mp->msg_controllen, &mp32->msg_controllen);
-	ret |= __get_user(mp->msg_flags, &mp32->msg_flags);
-	return(ret ? -EFAULT : 0);
+	__ptr = (struct cmsghdr32 *)(((unsigned char *) __cmsg) +
+				     CMSG32_ALIGN(__cmsg_len));
+	if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
+		return NULL;
+
+	return __ptr;
 }
 
-/*
- *	Verify & re-shape IA32 iovec. The caller must ensure that the
- *      iovec is big enough to hold the re-shaped message iovec.
- *
- *	Save time not doing verify_area. copy_*_user will make this work
- *	in any case.
- *
- *	Don't need to check the total size for overflow (cf net/core/iovec.c),
- *	32-bit sizes can't overflow a 64-bit count.
- */
+__inline__ struct cmsghdr32 *cmsg32_nxthdr (struct msghdr *__msg,
+					    struct cmsghdr32 *__cmsg,
+					    int __cmsg_len)
+{
+	return __cmsg32_nxthdr(__msg->msg_control, __msg->msg_controllen,
+			       __cmsg, __cmsg_len);
+}
 
-static inline int
-verify_iovec32(struct msghdr *m, struct iovec *iov, char *address, int mode)
+static inline int iov_from_user32_to_kern(struct iovec *kiov,
+					  struct iovec32 *uiov32,
+					  int niov)
 {
-	int size, err, ct;
-	struct iovec32 *iov32;
+	int tot_len = 0;
 
-	if(m->msg_namelen)
-	{
-		if(mode==VERIFY_READ)
-		{
-			err=move_addr_to_kernel(m->msg_name, m->msg_namelen, address);
-			if(err<0)
-				goto out;
+	while(niov > 0) {
+		u32 len, buf;
+
+		if(get_user(len, &uiov32->iov_len) ||
+		   get_user(buf, &uiov32->iov_base)) {
+			tot_len = -EFAULT;
+			break;
 		}
+		tot_len += len;
+		kiov->iov_base = (void *)AA(buf);
+		kiov->iov_len = (__kernel_size_t) len;
+		uiov32++;
+		kiov++;
+		niov--;
+	}
+	return tot_len;
+}
 
-		m->msg_name = address;
-	} else
-		m->msg_name = NULL;
+static inline int msghdr_from_user32_to_kern(struct msghdr *kmsg,
+					     struct msghdr32 *umsg)
+{
+	u32 tmp1, tmp2, tmp3;
+	int err;
 
-	err = -EFAULT;
-	size = m->msg_iovlen * sizeof(struct iovec32);
-	if (copy_from_user(iov, m->msg_iov, size))
-		goto out;
-	m->msg_iov=iov;
+	err = get_user(tmp1, &umsg->msg_name);
+	err |= __get_user(tmp2, &umsg->msg_iov);
+	err |= __get_user(tmp3, &umsg->msg_control);
+	if (err)
+		return -EFAULT;
 
-	err = 0;
-	iov32 = (struct iovec32 *)iov;
-	for (ct = m->msg_iovlen; ct-- > 0; ) {
-		iov[ct].iov_len = (__kernel_size_t)iov32[ct].iov_len;
-		iov[ct].iov_base = (void *) A(iov32[ct].iov_base);
-		err += iov[ct].iov_len;
-	}
-out:
+	kmsg->msg_name = (void *)AA(tmp1);
+	kmsg->msg_iov = (struct iovec *)AA(tmp2);
+	kmsg->msg_control = (void *)AA(tmp3);
+
+	err = get_user(kmsg->msg_namelen, &umsg->msg_namelen);
+	err |= get_user(kmsg->msg_iovlen, &umsg->msg_iovlen);
+	err |= get_user(kmsg->msg_controllen, &umsg->msg_controllen);
+	err |= get_user(kmsg->msg_flags, &umsg->msg_flags);
+	
 	return err;
 }
 
+/* I've named the args so it is easy to tell whose space the pointers are in. */
+static int verify_iovec32(struct msghdr *kern_msg, struct iovec *kern_iov,
+			  char *kern_address, int mode)
+{
+	int tot_len;
+
+	if(kern_msg->msg_namelen) {
+		if(mode==VERIFY_READ) {
+			int err = move_addr_to_kernel(kern_msg->msg_name,
+						      kern_msg->msg_namelen,
+						      kern_address);
+			if(err < 0)
+				return err;
+		}
+		kern_msg->msg_name = kern_address;
+	} else
+		kern_msg->msg_name = NULL;
+
+	if(kern_msg->msg_iovlen > UIO_FASTIOV) {
+		kern_iov = kmalloc(kern_msg->msg_iovlen * sizeof(struct iovec),
+				   GFP_KERNEL);
+		if(!kern_iov)
+			return -ENOMEM;
+	}
+
+	tot_len = iov_from_user32_to_kern(kern_iov,
+					  (struct iovec32 *)kern_msg->msg_iov,
+					  kern_msg->msg_iovlen);
+	if(tot_len >= 0)
+		kern_msg->msg_iov = kern_iov;
+	else if(kern_msg->msg_iovlen > UIO_FASTIOV)
+		kfree(kern_iov);
+
+	return tot_len;
+}
+
 extern __inline__ void
 sockfd_put(struct socket *sock)
 {
@@ -2330,177 +2390,385 @@
 }
 
 /* XXX This really belongs in some header file... -DaveM */
-#define MAX_SOCK_ADDR	128		/* 108 for Unix domain -
+#define MAX_SOCK_ADDR	128		/* 108 for Unix domain - 
 					   16 for IP, 16 for IPX,
 					   24 for IPv6,
 					   about 80 for AX.25 */
 
 extern struct socket *sockfd_lookup(int fd, int *err);
 
-/*
- *	BSD sendmsg interface
+/* There is a lot of hair here because the alignment rules (and
+ * thus placement) of cmsg headers and length are different for
+ * 32-bit apps.  -DaveM
  */
-
-int sys32_sendmsg(int fd, struct msghdr32 *msg, unsigned flags)
+static int cmsghdr_from_user32_to_kern(struct msghdr *kmsg,
+				       unsigned char *stackbuf, int stackbuf_size)
 {
-	struct socket *sock;
-	char address[MAX_SOCK_ADDR];
-	struct iovec iovstack[UIO_FASTIOV], *iov = iovstack;
-	unsigned char ctl[sizeof(struct cmsghdr) + 20];	/* 20 is size of ipv6_pktinfo */
-	unsigned char *ctl_buf = ctl;
-	struct msghdr msg_sys;
-	int err, ctl_len, iov_size, total_len;
+	struct cmsghdr32 *ucmsg;
+	struct cmsghdr *kcmsg, *kcmsg_base;
+	__kernel_size_t32 ucmlen;
+	__kernel_size_t kcmlen, tmp;
+
+	kcmlen = 0;
+	kcmsg_base = kcmsg = (struct cmsghdr *)stackbuf;
+	ucmsg = CMSG32_FIRSTHDR(kmsg);
+	while(ucmsg != NULL) {
+		if(get_user(ucmlen, &ucmsg->cmsg_len))
+			return -EFAULT;
 
-	err = -EFAULT;
-	if (shape_msg(&msg_sys, msg))
-		goto out;
+		/* Catch bogons. */
+		if(CMSG32_ALIGN(ucmlen) <
+		   CMSG32_ALIGN(sizeof(struct cmsghdr32)))
+			return -ENOBUFS;
+		if((unsigned long)(((char *)ucmsg - (char *)kmsg->msg_control)
+				   + ucmlen) > kmsg->msg_controllen)
+			return -EINVAL;
+
+		tmp = ((ucmlen - CMSG32_ALIGN(sizeof(*ucmsg))) +
+		       CMSG_ALIGN(sizeof(struct cmsghdr)));
+		kcmlen += tmp;
+		ucmsg = CMSG32_NXTHDR(kmsg, ucmsg, ucmlen);
+	}
+	if(kcmlen == 0)
+		return -EINVAL;
 
-	sock = sockfd_lookup(fd, &err);
-	if (!sock)
-		goto out;
+	/* The kcmlen holds the 64-bit version of the control length.
+	 * It may not be modified as we do not stick it into the kmsg
+	 * until we have successfully copied over all of the data
+	 * from the user.
+	 */
+	if(kcmlen > stackbuf_size)
+		kcmsg_base = kcmsg = kmalloc(kcmlen, GFP_KERNEL);
+	if(kcmsg == NULL)
+		return -ENOBUFS;
+
+	/* Now copy them over neatly. */
+	memset(kcmsg, 0, kcmlen);
+	ucmsg = CMSG32_FIRSTHDR(kmsg);
+	while(ucmsg != NULL) {
+		__get_user(ucmlen, &ucmsg->cmsg_len);
+		tmp = ((ucmlen - CMSG32_ALIGN(sizeof(*ucmsg))) +
+		       CMSG_ALIGN(sizeof(struct cmsghdr)));
+		kcmsg->cmsg_len = tmp;
+		__get_user(kcmsg->cmsg_level, &ucmsg->cmsg_level);
+		__get_user(kcmsg->cmsg_type, &ucmsg->cmsg_type);
+
+		/* Copy over the data. */
+		if(copy_from_user(CMSG_DATA(kcmsg),
+				  CMSG32_DATA(ucmsg),
+				  (ucmlen - CMSG32_ALIGN(sizeof(*ucmsg)))))
+			goto out_free_efault;
+
+		/* Advance. */
+		kcmsg = (struct cmsghdr *)((char *)kcmsg + CMSG_ALIGN(tmp));
+		ucmsg = CMSG32_NXTHDR(kmsg, ucmsg, ucmlen);
+	}
+
+	/* Ok, looks like we made it.  Hook it up and return success. */
+	kmsg->msg_control = kcmsg_base;
+	kmsg->msg_controllen = kcmlen;
+	return 0;
 
-	/* do not move before msg_sys is valid */
-	err = -EINVAL;
-	if (msg_sys.msg_iovlen > UIO_MAXIOV)
-		goto out_put;
+out_free_efault:
+	if(kcmsg_base != (struct cmsghdr *)stackbuf)
+		kfree(kcmsg_base);
+	return -EFAULT;
+}
 
-	/* Check whether to allocate the iovec area*/
-	err = -ENOMEM;
-	iov_size = msg_sys.msg_iovlen * sizeof(struct iovec32);
-	if (msg_sys.msg_iovlen > UIO_FASTIOV) {
-		iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
-		if (!iov)
-			goto out_put;
+static void put_cmsg32(struct msghdr *kmsg, int level, int type,
+		       int len, void *data)
+{
+	struct cmsghdr32 *cm = (struct cmsghdr32 *) kmsg->msg_control;
+	struct cmsghdr32 cmhdr;
+	int cmlen = CMSG32_LEN(len);
+
+	if(cm == NULL || kmsg->msg_controllen < sizeof(*cm)) {
+		kmsg->msg_flags |= MSG_CTRUNC;
+		return;
 	}
 
-	/* This will also move the address data into kernel space */
-	err = verify_iovec32(&msg_sys, iov, address, VERIFY_READ);
-	if (err < 0)
-		goto out_freeiov;
-	total_len = err;
+	if(kmsg->msg_controllen < cmlen) {
+		kmsg->msg_flags |= MSG_CTRUNC;
+		cmlen = kmsg->msg_controllen;
+	}
+	cmhdr.cmsg_level = level;
+	cmhdr.cmsg_type = type;
+	cmhdr.cmsg_len = cmlen;
 
-	err = -ENOBUFS;
+	if(copy_to_user(cm, &cmhdr, sizeof cmhdr))
+		return;
+	if(copy_to_user(CMSG32_DATA(cm), data, cmlen - sizeof(struct cmsghdr32)))
+		return;
+	cmlen = CMSG32_SPACE(len);
+	kmsg->msg_control += cmlen;
+	kmsg->msg_controllen -= cmlen;
+}
+
+static void scm_detach_fds32(struct msghdr *kmsg, struct scm_cookie *scm)
+{
+	struct cmsghdr32 *cm = (struct cmsghdr32 *) kmsg->msg_control;
+	int fdmax = (kmsg->msg_controllen - sizeof(struct cmsghdr32)) / sizeof(int);
+	int fdnum = scm->fp->count;
+	struct file **fp = scm->fp->fp;
+	int *cmfptr;
+	int err = 0, i;
+
+	if (fdnum < fdmax)
+		fdmax = fdnum;
+
+	for (i = 0, cmfptr = (int *) CMSG32_DATA(cm); i < fdmax; i++, cmfptr++) {
+		int new_fd;
+		err = get_unused_fd();
+		if (err < 0)
+			break;
+		new_fd = err;
+		err = put_user(new_fd, cmfptr);
+		if (err) {
+			put_unused_fd(new_fd);
+			break;
+		}
+		/* Bump the usage count and install the file. */
+		get_file(fp[i]);
+		fd_install(new_fd, fp[i]);
+	}
 
-	if (msg_sys.msg_controllen > INT_MAX)
-		goto out_freeiov;
-	ctl_len = msg_sys.msg_controllen;
-	if (ctl_len)
-	{
-		if (ctl_len > sizeof(ctl))
-		{
-			err = -ENOBUFS;
-			ctl_buf = sock_kmalloc(sock->sk, ctl_len, GFP_KERNEL);
-			if (ctl_buf == NULL)
-				goto out_freeiov;
+	if (i > 0) {
+		int cmlen = CMSG32_LEN(i * sizeof(int));
+		if (!err)
+			err = put_user(SOL_SOCKET, &cm->cmsg_level);
+		if (!err)
+			err = put_user(SCM_RIGHTS, &cm->cmsg_type);
+		if (!err)
+			err = put_user(cmlen, &cm->cmsg_len);
+		if (!err) {
+			cmlen = CMSG32_SPACE(i * sizeof(int));
+			kmsg->msg_control += cmlen;
+			kmsg->msg_controllen -= cmlen;
 		}
-		err = -EFAULT;
-		if (copy_from_user(ctl_buf, msg_sys.msg_control, ctl_len))
-			goto out_freectl;
-		msg_sys.msg_control = ctl_buf;
-	}
-	msg_sys.msg_flags = flags;
-
-	if (sock->file->f_flags & O_NONBLOCK)
-		msg_sys.msg_flags |= MSG_DONTWAIT;
-	err = sock_sendmsg(sock, &msg_sys, total_len);
-
-out_freectl:
-	if (ctl_buf != ctl)
-		sock_kfree_s(sock->sk, ctl_buf, ctl_len);
-out_freeiov:
-	if (iov != iovstack)
-		sock_kfree_s(sock->sk, iov, iov_size);
-out_put:
-	sockfd_put(sock);
-out:
-	return err;
+	}
+	if (i < fdnum)
+		kmsg->msg_flags |= MSG_CTRUNC;
+
+	/*
+	 * All of the files that fit in the message have had their
+	 * usage counts incremented, so we just free the list.
+	 */
+	__scm_destroy(scm);
 }
 
-/*
- *	BSD recvmsg interface
+/* In these cases we (currently) can just copy to data over verbatim
+ * because all CMSGs created by the kernel have well defined types which
+ * have the same layout in both the 32-bit and 64-bit API.  One must add
+ * some special cased conversions here if we start sending control messages
+ * with incompatible types.
+ *
+ * SCM_RIGHTS and SCM_CREDENTIALS are done by hand in recvmsg32 right after
+ * we do our work.  The remaining cases are:
+ *
+ * SOL_IP	IP_PKTINFO	struct in_pktinfo	32-bit clean
+ *		IP_TTL		int			32-bit clean
+ *		IP_TOS		__u8			32-bit clean
+ *		IP_RECVOPTS	variable length		32-bit clean
+ *		IP_RETOPTS	variable length		32-bit clean
+ *		(these last two are clean because the types are defined
+ *		 by the IPv4 protocol)
+ *		IP_RECVERR	struct sock_extended_err +
+ *				struct sockaddr_in	32-bit clean
+ * SOL_IPV6	IPV6_RECVERR	struct sock_extended_err +
+ *				struct sockaddr_in6	32-bit clean
+ *		IPV6_PKTINFO	struct in6_pktinfo	32-bit clean
+ *		IPV6_HOPLIMIT	int			32-bit clean
+ *		IPV6_FLOWINFO	u32			32-bit clean
+ *		IPV6_HOPOPTS	ipv6 hop exthdr		32-bit clean
+ *		IPV6_DSTOPTS	ipv6 dst exthdr(s)	32-bit clean
+ *		IPV6_RTHDR	ipv6 routing exthdr	32-bit clean
+ *		IPV6_AUTHHDR	ipv6 auth exthdr	32-bit clean
  */
-
-int
-sys32_recvmsg (int fd, struct msghdr32 *msg, unsigned int flags)
+static void cmsg32_recvmsg_fixup(struct msghdr *kmsg, unsigned long orig_cmsg_uptr)
 {
-	struct socket *sock;
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov=iovstack;
-	struct msghdr msg_sys;
-	unsigned long cmsg_ptr;
-	int err, iov_size, total_len, len;
+	unsigned char *workbuf, *wp;
+	unsigned long bufsz, space_avail;
+	struct cmsghdr *ucmsg;
+
+	bufsz = ((unsigned long)kmsg->msg_control) - orig_cmsg_uptr;
+	space_avail = kmsg->msg_controllen + bufsz;
+	wp = workbuf = kmalloc(bufsz, GFP_KERNEL);
+	if(workbuf == NULL)
+		goto fail;
+
+	/* To make this more sane we assume the kernel sends back properly
+	 * formatted control messages.  Because of how the kernel will truncate
+	 * the cmsg_len for MSG_TRUNC cases, we need not check that case either.
+	 */
+	ucmsg = (struct cmsghdr *) orig_cmsg_uptr;
+	while(((unsigned long)ucmsg) <=
+	      (((unsigned long)kmsg->msg_control) - sizeof(struct cmsghdr))) {
+		struct cmsghdr32 *kcmsg32 = (struct cmsghdr32 *) wp;
+		int clen64, clen32;
+
+		/* UCMSG is the 64-bit format CMSG entry in user-space.
+		 * KCMSG32 is within the kernel space temporary buffer
+		 * we use to convert into a 32-bit style CMSG.
+		 */
+		__get_user(kcmsg32->cmsg_len, &ucmsg->cmsg_len);
+		__get_user(kcmsg32->cmsg_level, &ucmsg->cmsg_level);
+		__get_user(kcmsg32->cmsg_type, &ucmsg->cmsg_type);
+
+		clen64 = kcmsg32->cmsg_len;
+		copy_from_user(CMSG32_DATA(kcmsg32), CMSG_DATA(ucmsg),
+			       clen64 - CMSG_ALIGN(sizeof(*ucmsg)));
+		clen32 = ((clen64 - CMSG_ALIGN(sizeof(*ucmsg))) +
+			  CMSG32_ALIGN(sizeof(struct cmsghdr32)));
+		kcmsg32->cmsg_len = clen32;
+
+		ucmsg = (struct cmsghdr *) (((char *)ucmsg) + CMSG_ALIGN(clen64));
+		wp = (((char *)kcmsg32) + CMSG32_ALIGN(clen32));
+	}
+
+	/* Copy back fixed up data, and adjust pointers. */
+	bufsz = (wp - workbuf);
+	copy_to_user((void *)orig_cmsg_uptr, workbuf, bufsz);
+
+	kmsg->msg_control = (struct cmsghdr *)
+		(((char *)orig_cmsg_uptr) + bufsz);
+	kmsg->msg_controllen = space_avail - bufsz;
 
-	/* kernel mode address */
-	char addr[MAX_SOCK_ADDR];
+	kfree(workbuf);
+	return;
 
-	/* user mode address pointers */
-	struct sockaddr *uaddr;
-	int *uaddr_len;
+fail:
+	/* If we leave the 64-bit format CMSG chunks in there,
+	 * the application could get confused and crash.  So to
+	 * ensure greater recovery, we report no CMSGs.
+	 */
+	kmsg->msg_controllen += bufsz;
+	kmsg->msg_control = (void *) orig_cmsg_uptr;
+}
 
-	err=-EFAULT;
-	if (shape_msg(&msg_sys, msg))
-		goto out;
+asmlinkage int sys32_sendmsg(int fd, struct msghdr32 *user_msg, unsigned user_flags)
+{
+	struct socket *sock;
+	char address[MAX_SOCK_ADDR];
+	struct iovec iov[UIO_FASTIOV];
+	unsigned char ctl[sizeof(struct cmsghdr) + 20];
+	unsigned char *ctl_buf = ctl;
+	struct msghdr kern_msg;
+	int err, total_len;
 
-	sock = sockfd_lookup(fd, &err);
-	if (!sock)
+	if(msghdr_from_user32_to_kern(&kern_msg, user_msg))
+		return -EFAULT;
+	if(kern_msg.msg_iovlen > UIO_MAXIOV)
+		return -EINVAL;
+	err = verify_iovec32(&kern_msg, iov, address, VERIFY_READ);
+	if (err < 0)
 		goto out;
+	total_len = err;
 
-	err = -EINVAL;
-	if (msg_sys.msg_iovlen > UIO_MAXIOV)
-		goto out_put;
+	if(kern_msg.msg_controllen) {
+		err = cmsghdr_from_user32_to_kern(&kern_msg, ctl, sizeof(ctl));
+		if(err)
+			goto out_freeiov;
+		ctl_buf = kern_msg.msg_control;
+	}
+	kern_msg.msg_flags = user_flags;
 
-	/* Check whether to allocate the iovec area*/
-	err = -ENOMEM;
-	iov_size = msg_sys.msg_iovlen * sizeof(struct iovec);
-	if (msg_sys.msg_iovlen > UIO_FASTIOV) {
-		iov = sock_kmalloc(sock->sk, iov_size, GFP_KERNEL);
-		if (!iov)
-			goto out_put;
+	sock = sockfd_lookup(fd, &err);
+	if (sock != NULL) {
+		if (sock->file->f_flags & O_NONBLOCK)
+			kern_msg.msg_flags |= MSG_DONTWAIT;
+		err = sock_sendmsg(sock, &kern_msg, total_len);
+		sockfd_put(sock);
 	}
 
-	/*
-	 *	Save the user-mode address (verify_iovec will change the
-	 *	kernel msghdr to use the kernel address space)
-	 */
+	/* N.B. Use kfree here, as kern_msg.msg_controllen might change? */
+	if(ctl_buf != ctl)
+		kfree(ctl_buf);
+out_freeiov:
+	if(kern_msg.msg_iov != iov)
+		kfree(kern_msg.msg_iov);
+out:
+	return err;
+}
 
-	uaddr = msg_sys.msg_name;
-	uaddr_len = &msg->msg_namelen;
-	err = verify_iovec32(&msg_sys, iov, addr, VERIFY_WRITE);
-	if (err < 0)
-		goto out_freeiov;
-	total_len=err;
+asmlinkage int sys32_recvmsg(int fd, struct msghdr32 *user_msg, unsigned int user_flags)
+{
+	struct iovec iovstack[UIO_FASTIOV];
+	struct msghdr kern_msg;
+	char addr[MAX_SOCK_ADDR];
+	struct socket *sock;
+	struct iovec *iov = iovstack;
+	struct sockaddr *uaddr;
+	int *uaddr_len;
+	unsigned long cmsg_ptr;
+	int err, total_len, len = 0;
 
-	cmsg_ptr = (unsigned long)msg_sys.msg_control;
-	msg_sys.msg_flags = 0;
+	if(msghdr_from_user32_to_kern(&kern_msg, user_msg))
+		return -EFAULT;
+	if(kern_msg.msg_iovlen > UIO_MAXIOV)
+		return -EINVAL;
 
-	if (sock->file->f_flags & O_NONBLOCK)
-		flags |= MSG_DONTWAIT;
-	err = sock_recvmsg(sock, &msg_sys, total_len, flags);
+	uaddr = kern_msg.msg_name;
+	uaddr_len = &user_msg->msg_namelen;
+	err = verify_iovec32(&kern_msg, iov, addr, VERIFY_WRITE);
 	if (err < 0)
-		goto out_freeiov;
-	len = err;
+		goto out;
+	total_len = err;
 
-	if (uaddr != NULL) {
-		err = move_addr_to_user(addr, msg_sys.msg_namelen, uaddr, uaddr_len);
-		if (err < 0)
-			goto out_freeiov;
+	cmsg_ptr = (unsigned long) kern_msg.msg_control;
+	kern_msg.msg_flags = 0;
+
+	sock = sockfd_lookup(fd, &err);
+	if (sock != NULL) {
+		struct scm_cookie scm;
+
+		if (sock->file->f_flags & O_NONBLOCK)
+			user_flags |= MSG_DONTWAIT;
+		memset(&scm, 0, sizeof(scm));
+		err = sock->ops->recvmsg(sock, &kern_msg, total_len,
+					 user_flags, &scm);
+		if(err >= 0) {
+			len = err;
+			if(!kern_msg.msg_control) {
+				if(sock->passcred || scm.fp)
+					kern_msg.msg_flags |= MSG_CTRUNC;
+				if(scm.fp)
+					__scm_destroy(&scm);
+			} else {
+				/* If recvmsg processing itself placed some
+				 * control messages into user space, it's is
+				 * using 64-bit CMSG processing, so we need
+				 * to fix it up before we tack on more stuff.
+				 */
+				if((unsigned long) kern_msg.msg_control != cmsg_ptr)
+					cmsg32_recvmsg_fixup(&kern_msg, cmsg_ptr);
+
+				/* Wheee... */
+				if(sock->passcred)
+					put_cmsg32(&kern_msg,
+						   SOL_SOCKET, SCM_CREDENTIALS,
+						   sizeof(scm.creds), &scm.creds);
+				if(scm.fp != NULL)
+					scm_detach_fds32(&kern_msg, &scm);
+			}
+		}
+		sockfd_put(sock);
 	}
-	err = __put_user(msg_sys.msg_flags, &msg->msg_flags);
-	if (err)
-		goto out_freeiov;
-	err = __put_user((unsigned long)msg_sys.msg_control-cmsg_ptr,
-							 &msg->msg_controllen);
-	if (err)
-		goto out_freeiov;
-	err = len;
 
-out_freeiov:
-	if (iov != iovstack)
-		sock_kfree_s(sock->sk, iov, iov_size);
-out_put:
-	sockfd_put(sock);
+	if(uaddr != NULL && kern_msg.msg_namelen && err >= 0)
+		err = move_addr_to_user(addr, kern_msg.msg_namelen, uaddr, uaddr_len);
+	if(cmsg_ptr != 0 && err >= 0) {
+		unsigned long ucmsg_ptr = ((unsigned long)kern_msg.msg_control);
+		__kernel_size_t32 uclen = (__kernel_size_t32) (ucmsg_ptr - cmsg_ptr);
+		err |= __put_user(uclen, &user_msg->msg_controllen);
+	}
+	if(err >= 0)
+		err = __put_user(kern_msg.msg_flags, &user_msg->msg_flags);
+	if(kern_msg.msg_iov != iov)
+		kfree(kern_msg.msg_iov);
 out:
-	return err;
+	if(err < 0)
+		return err;
+	return len;
 }
 
 asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count);

--------------4DF78B00319C7D722D09F588--


From ralf@linux-mips.org Wed Oct  2 16:06:54 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 16:06:55 +0200 (CEST)
Received: from p508B64CB.dip.t-dialin.net ([80.139.100.203]:22920 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123897AbSJBOGy>; Wed, 2 Oct 2002 16:06:54 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g92E6gU17282;
	Wed, 2 Oct 2002 16:06:42 +0200
Date: Wed, 2 Oct 2002 16:06:42 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Carsten Langgaard <carstenl@mips.com>
Cc: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
Message-ID: <20021002160642.E16482@linux-mips.org>
References: <3D9AF333.BC304A34@mips.com> <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl> <20021002154638.B16482@linux-mips.org> <3D9AFC8F.261F0C37@mips.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3D9AFC8F.261F0C37@mips.com>; from carstenl@mips.com on Wed, Oct 02, 2002 at 04:02:55PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 338
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 02, 2002 at 04:02:55PM +0200, Carsten Langgaard wrote:

> > Much of the code is so generic it almost deserves to live in a directory
> > even higher in the hierarchy.  If you look at the 32-bit compat code for
> > the various 64-bit architectures of Linux (in particular sparc64 and ia64),
> > it's a single huge cut'n'paste session.  Not much of that code is actually
> > architecture dependant.
> 
> That would be even better, but unfortunately a lot of the structures used in
> the compat code is not exactly the same across architectures :-(
> But it should be possible to merges a lot this stuff into a generic
> (architecture independent) set of functions.

True.  The basic plan would be to provide the structure definitions and
some architecture dependencies from headers and keep the generic compat
code in a linux-32 directory.

The syscalls are still fairly harmless - the true pain are all the ioctls
that keep growing and changing like weed ...

  Ralf

From ralf@linux-mips.org Wed Oct  2 16:09:59 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 16:09:59 +0200 (CEST)
Received: from p508B64CB.dip.t-dialin.net ([80.139.100.203]:25480 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123897AbSJBOJ7>; Wed, 2 Oct 2002 16:09:59 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g92E9mJ17324;
	Wed, 2 Oct 2002 16:09:48 +0200
Date: Wed, 2 Oct 2002 16:09:48 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Carsten Langgaard <carstenl@mips.com>
Cc: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
Message-ID: <20021002160948.F16482@linux-mips.org>
References: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl> <3D9AFD0E.84BA5100@mips.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3D9AFD0E.84BA5100@mips.com>; from carstenl@mips.com on Wed, Oct 02, 2002 at 04:05:02PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 339
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 02, 2002 at 04:05:02PM +0200, Carsten Langgaard wrote:

> Ok, here is the next patch.
> It fixes the sys32_sendmsg and sys32_recvmsg.

Ok, in.  Maciej, you can start the chainsawing ;-)

  Ralf

From macro@ds2.pg.gda.pl Wed Oct  2 16:17:43 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 16:17:43 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:20691 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123897AbSJBORn>; Wed, 2 Oct 2002 16:17:43 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id QAA12135;
	Wed, 2 Oct 2002 16:18:08 +0200 (MET DST)
Date: Wed, 2 Oct 2002 16:18:08 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: linux-mips@linux-mips.org
Subject: Re: [resend] 2.4: Support R4000 as a distinct CPU type
In-Reply-To: <20021002154753.F17373@linux-mips.org>
Message-ID: <Pine.GSO.3.96.1021002160212.8947B-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 340
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Wed, 2 Oct 2002, Ralf Baechle wrote:

> >  Here is a new version that takes your recent mips64 cache code rearrange
> > into account.  OK to apply?
> 
> I'm not sure if that's really a good idea.  Technically it's ok but I expect
> users of the R4000 to missconfigure their kernels.  So I wonder if it might

 I plan to write some code to detect various processor bugs, including
this one.  A nice kernel panic will instruct users how to configure the
kernel properly, so this is not an issue.  If you want me to defer the
patch until it's done, I see no problem.  Others may apply the patch as
needed for now.

> be more appropriate to have just automatically enabled this workaround for
> systems that are affected?  If we keep it user-selectable then we at least

 The workaround affects gcc's code generation -- there is no way to change
it at the run time.

> want a safety check somewhere in the startup code telling users to rebuild
> their code with the workaround enabled.

 Of course, as I've written above.

> Having this workaround enabled by default would also ensure Linux
> distributions ship working code - you don't want users having to recompile
> their whole distribution ...

 But the generated code is worse -- it interlocks on a multiplication
flushing the whole benefit of the separate multiply unit down the drain. 
There is room for an improvement here, though. 

 As to compiling userland -- the workaround is the gcc's default for R4000
which is what is selected by "-mips3" among others.  It should probably be
enabled by default for "-mips1" and "-mips2" configurations as well if no
explicit CPU selection options are passed.

 Ultimately we'll want to have a separate setting for the R4400 in the
kernel as well, due to a smaller set of bugs.

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From carstenl@mips.com Wed Oct  2 16:33:57 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 16:33:58 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:25800 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123897AbSJBOd5>;
	Wed, 2 Oct 2002 16:33:57 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g92EXCrZ006941;
	Wed, 2 Oct 2002 07:33:12 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id HAA24415;
	Wed, 2 Oct 2002 07:33:41 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g92EXCb08754;
	Wed, 2 Oct 2002 16:33:13 +0200 (MEST)
Message-ID: <3D9B03A5.5307F659@mips.com>
Date: Wed, 02 Oct 2002 16:33:09 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>
CC: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
References: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl> <3D9AFD0E.84BA5100@mips.com> <20021002160948.F16482@linux-mips.org>
Content-Type: multipart/mixed;
 boundary="------------D7E47A80237233EEC4CA07EC"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 341
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------D7E47A80237233EEC4CA07EC
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

Here is another linux32.c patch.

/Carsten



Ralf Baechle wrote:

> On Wed, Oct 02, 2002 at 04:05:02PM +0200, Carsten Langgaard wrote:
>
> > Ok, here is the next patch.
> > It fixes the sys32_sendmsg and sys32_recvmsg.
>
> Ok, in.  Maciej, you can start the chainsawing ;-)
>
>   Ralf

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------D7E47A80237233EEC4CA07EC
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part3.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part3.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.14
diff -u -r1.42.2.14 linux32.c
--- arch/mips64/kernel/linux32.c	2 Oct 2002 14:09:24 -0000	1.42.2.14
+++ arch/mips64/kernel/linux32.c	2 Oct 2002 14:29:30 -0000
@@ -1598,6 +1598,15 @@
         unsigned short  sem_nsems;              /* no. of semaphores in array */
 };
 
+struct semid64_ds32 {
+	struct ipc64_perm32 sem_perm;
+	__kernel_time_t32 sem_otime;
+	__kernel_time_t32 sem_ctime;
+	unsigned int sem_nsems;
+	unsigned int __unused1;
+	unsigned int __unused2;
+};
+
 struct msqid_ds32
 {
         struct ipc_perm32 msg_perm;
@@ -1655,7 +1664,6 @@
 	u32 pad;
 	int err, err2;
 	struct semid64_ds s;
-	struct semid_ds32 *usp;
 	mm_segment_t old_fs;
 
 	if (!uptr)
@@ -1668,7 +1676,6 @@
 	else
 		fourth.__pad = (void *)A(pad);
 	switch (third & ~IPC_64) {
-
 	case IPC_INFO:
 	case IPC_RMID:
 	case IPC_SET:
@@ -1685,29 +1692,54 @@
 
 	case IPC_STAT:
 	case SEM_STAT:
-		usp = (struct semid_ds32 *)A(pad);
 		fourth.__pad = &s;
 		old_fs = get_fs ();
 		set_fs (KERNEL_DS);
 		err = sys_semctl (first, second, third, fourth);
 		set_fs (old_fs);
-		err2 = put_user(s.sem_perm.key, &usp->sem_perm.key);
-		err2 |= __put_user(s.sem_perm.uid, &usp->sem_perm.uid);
-		err2 |= __put_user(s.sem_perm.gid, &usp->sem_perm.gid);
-		err2 |= __put_user(s.sem_perm.cuid,
-				   &usp->sem_perm.cuid);
-		err2 |= __put_user (s.sem_perm.cgid,
-				    &usp->sem_perm.cgid);
-		err2 |= __put_user (s.sem_perm.mode,
-				    &usp->sem_perm.mode);
-		err2 |= __put_user (s.sem_perm.seq, &usp->sem_perm.seq);
-		err2 |= __put_user (s.sem_otime, &usp->sem_otime);
-		err2 |= __put_user (s.sem_ctime, &usp->sem_ctime);
-		err2 |= __put_user (s.sem_nsems, &usp->sem_nsems);
+
+		if (third & IPC_64) {
+			struct semid64_ds32 *usp64 = (struct semid64_ds32 *) A(pad);
+
+			if (!access_ok(VERIFY_WRITE, usp64, sizeof(*usp64))) {
+				err = -EFAULT;
+				break;
+			}
+			err2 = __put_user(s.sem_perm.key, &usp64->sem_perm.key);
+			err2 |= __put_user(s.sem_perm.uid, &usp64->sem_perm.uid);
+			err2 |= __put_user(s.sem_perm.gid, &usp64->sem_perm.gid);
+			err2 |= __put_user(s.sem_perm.cuid, &usp64->sem_perm.cuid);
+			err2 |= __put_user(s.sem_perm.cgid, &usp64->sem_perm.cgid);
+			err2 |= __put_user(s.sem_perm.mode, &usp64->sem_perm.mode);
+			err2 |= __put_user(s.sem_perm.seq, &usp64->sem_perm.seq);
+			err2 |= __put_user(s.sem_otime, &usp64->sem_otime);
+			err2 |= __put_user(s.sem_ctime, &usp64->sem_ctime);
+			err2 |= __put_user(s.sem_nsems, &usp64->sem_nsems);
+		} else {
+			struct semid_ds32 *usp32 = (struct semid_ds32 *) A(pad);
+
+			if (!access_ok(VERIFY_WRITE, usp32, sizeof(*usp32))) {
+				err = -EFAULT;
+				break;
+			}
+			err2 = __put_user(s.sem_perm.key, &usp32->sem_perm.key);
+			err2 |= __put_user(s.sem_perm.uid, &usp32->sem_perm.uid);
+			err2 |= __put_user(s.sem_perm.gid, &usp32->sem_perm.gid);
+			err2 |= __put_user(s.sem_perm.cuid, &usp32->sem_perm.cuid);
+			err2 |= __put_user(s.sem_perm.cgid, &usp32->sem_perm.cgid);
+			err2 |= __put_user(s.sem_perm.mode, &usp32->sem_perm.mode);
+			err2 |= __put_user(s.sem_perm.seq, &usp32->sem_perm.seq);
+			err2 |= __put_user(s.sem_otime, &usp32->sem_otime);
+			err2 |= __put_user(s.sem_ctime, &usp32->sem_ctime);
+			err2 |= __put_user(s.sem_nsems, &usp32->sem_nsems);
+		}
 		if (err2)
 			err = -EFAULT;
 		break;
 
+	default:
+		err = - EINVAL;
+		break;
 	}
 
 	return err;

--------------D7E47A80237233EEC4CA07EC--


From leop@engr.arizona.edu Wed Oct  2 17:25:34 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 17:25:35 +0200 (CEST)
Received: from [128.196.221.205] ([128.196.221.205]:1195 "EHLO
	localhost.localdomain") by linux-mips.org with ESMTP
	id <S1123912AbSJBPZe>; Wed, 2 Oct 2002 17:25:34 +0200
Received: (from leo@localhost)
	by localhost.localdomain (8.11.6/8.11.6) id g92FPM124579;
	Wed, 2 Oct 2002 08:25:22 -0700
X-Authentication-Warning: localhost.localdomain: leo set sender to leop@engr.arizona.edu using -f
Subject: MIPS emulator
From: Leo Przybylski <leop@engr.arizona.edu>
To: linux-mips@linux-mips.org
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 
Date: 02 Oct 2002 08:25:22 -0700
Message-Id: <1033572322.1262.23.camel@library05>
Mime-Version: 1.0
Return-Path: <leop@engr.arizona.edu>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 342
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: leop@engr.arizona.edu
Precedence: bulk
X-list: linux-mips

Hello,

Is there a MIPS emulator out there? I found an ia-32 emulator
(bochs.sourceforge.net), but I am looking for a MIPS emulator. Does
anyone know of one?

-Leo
http://serverdown.dhs.org




From ralf@linux-mips.org Wed Oct  2 17:49:30 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 17:49:31 +0200 (CEST)
Received: from p508B64CB.dip.t-dialin.net ([80.139.100.203]:47498 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123396AbSJBPta>; Wed, 2 Oct 2002 17:49:30 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g92FnNS19420
	for linux-mips@linux-mips.org; Wed, 2 Oct 2002 17:49:23 +0200
Date: Wed, 2 Oct 2002 17:49:23 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: linux-mips@linux-mips.org
Subject: CVS web
Message-ID: <20021002174923.A19390@linux-mips.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 343
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

linux-mips.org now has a cvs web server also.  The URL is:

http://www.linux-mips.org/cvsweb

You also can just append the repository name directly like

http://www.linux-mips.org/cvsweb/linux

etc.  There's still a few loose ends there, I'm working on them.

Enjoy,

  Ralf

From js@convergence.de Wed Oct  2 18:42:13 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 18:42:13 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:57350 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123396AbSJBQmN>;
	Wed, 2 Oct 2002 18:42:13 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 17wmZQ-0005TD-00; Wed, 02 Oct 2002 18:41:56 +0200
Date: Wed, 2 Oct 2002 18:41:56 +0200
From: Johannes Stezenbach <js@convergence.de>
To: Leo Przybylski <leop@engr.arizona.edu>
Cc: linux-mips@linux-mips.org
Subject: Re: MIPS emulator
Message-ID: <20021002164156.GA20953@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	Leo Przybylski <leop@engr.arizona.edu>, linux-mips@linux-mips.org
References: <1033572322.1262.23.camel@library05>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <1033572322.1262.23.camel@library05>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 344
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Wed, Oct 02, 2002 at 08:25:22AM -0700, Leo Przybylski wrote:
> 
> Is there a MIPS emulator out there? I found an ia-32 emulator
> (bochs.sourceforge.net), but I am looking for a MIPS emulator. Does
> anyone know of one?

http://www.dgate.org/vmips/ claims to emulate a MIPS R3000 processor.
(also on http://vmips.sourceforge.net/)

Johannes

From hjl@lucon.org Wed Oct  2 19:25:34 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 02 Oct 2002 19:25:35 +0200 (CEST)
Received: from sccrmhc03.attbi.com ([204.127.202.63]:52645 "EHLO
	sccrmhc03.attbi.com") by linux-mips.org with ESMTP
	id <S1123396AbSJBRZe>; Wed, 2 Oct 2002 19:25:34 +0200
Received: from lucon.org ([12.234.88.146]) by sccrmhc03.attbi.com
          (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP
          id <20021002172522.FSLK22381.sccrmhc03.attbi.com@lucon.org>;
          Wed, 2 Oct 2002 17:25:22 +0000
Received: by lucon.org (Postfix, from userid 1000)
	id 20BF02C59D; Wed,  2 Oct 2002 10:25:22 -0700 (PDT)
Date: Wed, 2 Oct 2002 10:25:22 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: GNU C Library <libc-alpha@sources.redhat.com>,
	Kenneth Albanowski <kjahds@kjahds.com>,
	Mat Hostetter <mat@lcs.mit.edu>, Warner Losh <imp@village.org>,
	linux-mips@linux-mips.org, Ron Guilmette <rfg@monkeys.com>,
	"Polstra; John" <linux-binutils-in@polstra.com>,
	Ralf Baechle <ralf@informatik.uni-koblenz.de>,
	Linas Vepstas <linas@linas.org>,
	Feher Janos <aries@hal2000.terra.vein.hu>,
	Leonard Zubkoff <lnz@dandelion.com>,
	"Steven J. Hill" <sjhill@cotw.com>, gcc@gcc.gnu.org
Subject: Re: The untested Linux binutils 2.13.90.0.6
Message-ID: <20021002102522.A8689@lucon.org>
References: <20021002102414.A8646@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <20021002102414.A8646@lucon.org>; from hjl@lucon.org on Wed, Oct 02, 2002 at 10:24:14AM -0700
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 345
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 02, 2002 at 10:24:14AM -0700, H. J. Lu wrote:
> I put the untested Linux binutils 2.13.90.0.6 at
> 
> http://ftp.kernel.org/pub/linux/devel/binutils/binutils-2.13.90.0.6.tar.gz
> 

Oops. It should be 

http://ftp.kernel.org/pub/linux/devel/binutils/test/binutils-2.13.90.0.6.tar.gz

> It is based on binutils 2002 1002 in CVS on sourecs.redhat.com. Give it
> a try if you need the new features in it. Please report any problems to
> hjl@lucon.org.
> 
> 
> H.J.

From nemoto@toshiba-tops.co.jp Thu Oct  3 05:14:55 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 03 Oct 2002 05:14:55 +0200 (CEST)
Received: from topsns.toshiba-tops.co.jp ([202.230.225.5]:50193 "HELO
	topsns.toshiba-tops.co.jp") by linux-mips.org with SMTP
	id <S1123898AbSJCDOz>; Thu, 3 Oct 2002 05:14:55 +0200
Received: from inside-ms1.toshiba-tops.co.jp by topsns.toshiba-tops.co.jp
          via smtpd (for [80.63.7.146]) with SMTP; 3 Oct 2002 03:14:53 UT
Received: from srd2sd.toshiba-tops.co.jp (gw-chiba7.toshiba-tops.co.jp [172.17.244.27])
	by topsms.toshiba-tops.co.jp (Postfix) with ESMTP
	id 038B4B46B; Thu,  3 Oct 2002 12:14:38 +0900 (JST)
Received: by srd2sd.toshiba-tops.co.jp (8.9.3/3.5Wbeta-srd2sd) with ESMTP
	id MAA05174; Thu, 3 Oct 2002 12:14:38 +0900 (JST)
Date: Thu, 03 Oct 2002 12:17:05 +0900 (JST)
Message-Id: <20021003.121705.74756199.nemoto@toshiba-tops.co.jp>
To: linux-mips@linux-mips.org, ralf@linux-mips.org
Subject: Re: CVS Update@ftp.linux-mips.org: linux
From: Atsushi Nemoto <nemoto@toshiba-tops.co.jp>
In-Reply-To: <20020930165347Z1122169-9213+249@linux-mips.org>
References: <20020930165347Z1122169-9213+249@linux-mips.org>
X-Fingerprint: EC 9D B9 17 2E 89 D2 25  CE F5 5D 3D 12 29 2A AD
X-Pgp-Public-Key: http://pgp.nic.ad.jp/cgi-bin/pgpsearchkey.pl?op=get&search=0xB6D728B1
Organization: TOSHIBA Personal Computer System Corporation
X-Mailer: Mew version 2.2 on Emacs 21.2 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <nemoto@toshiba-tops.co.jp>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 346
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: nemoto@toshiba-tops.co.jp
Precedence: bulk
X-list: linux-mips

>>>>> On Mon, 30 Sep 2002 18:53:47 +0200, ralf@linux-mips.org said:
> Log message:
> 	More cache code cleanup.

This commit contains following change.  It seems 'addr' argument is
not used.  Isn't this a mistake?

> @@ -123,15 +72,14 @@ static inline void protected_flush_icach
>  	__asm__ __volatile__(
>  		".set noreorder\n\t"
>  		".set mips3\n"
> -		"1:\tcache %1,(%0)\n"
> +		"1:\tcache %0,(%1)\n"
>  		"2:\t.set mips0\n\t"
>  		".set reorder\n\t"
>  		".section\t__ex_table,\"a\"\n\t"
>  		STR(PTR)"\t1b,2b\n\t"
>  		".previous"
>  		:
> -		: "r" (addr),
> -		  "i" (Hit_Invalidate_I));
> +		: "i" (Hit_Invalidate_I), "i" (Hit_Invalidate_I));
>  }

---
Atsushi Nemoto

From carstenl@mips.com Thu Oct  3 08:50:16 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 03 Oct 2002 08:50:17 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:34525 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123921AbSJCGuQ>;
	Thu, 3 Oct 2002 08:50:16 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g936nOrZ010440;
	Wed, 2 Oct 2002 23:49:24 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id XAA05740;
	Wed, 2 Oct 2002 23:49:55 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g936nQb12953;
	Thu, 3 Oct 2002 08:49:27 +0200 (MEST)
Message-ID: <3D9BE875.BF5C15AD@mips.com>
Date: Thu, 03 Oct 2002 08:49:26 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>
CC: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
References: <Pine.GSO.3.96.1021002153025.8947A-100000@delta.ds2.pg.gda.pl> <3D9AFD0E.84BA5100@mips.com> <20021002160948.F16482@linux-mips.org>
Content-Type: multipart/mixed;
 boundary="------------595386A547C6B133862FA84D"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 347
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------595386A547C6B133862FA84D
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

Here is the next patch in line.

/Carsten



Ralf Baechle wrote:

> On Wed, Oct 02, 2002 at 04:05:02PM +0200, Carsten Langgaard wrote:
>
> > Ok, here is the next patch.
> > It fixes the sys32_sendmsg and sys32_recvmsg.
>
> Ok, in.  Maciej, you can start the chainsawing ;-)
>
>   Ralf

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------595386A547C6B133862FA84D
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part4.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part4.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.15
diff -u -r1.42.2.15 linux32.c
--- arch/mips64/kernel/linux32.c	2 Oct 2002 14:40:23 -0000	1.42.2.15
+++ arch/mips64/kernel/linux32.c	3 Oct 2002 06:44:51 -0000
@@ -2803,6 +2803,27 @@
 	return len;
 }
 
+extern asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
+
+asmlinkage int sys32_sendfile(int out_fd, int in_fd, __kernel_off_t32 *offset, s32 count)
+{
+	mm_segment_t old_fs = get_fs();
+	int ret;
+	off_t of;
+	
+	if (offset && get_user(of, offset))
+		return -EFAULT;
+		
+	set_fs(KERNEL_DS);
+	ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count);
+	set_fs(old_fs);
+	
+	if (offset && put_user(of, offset))
+		return -EFAULT;
+		
+	return ret;
+}
+
 asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count);
 
 asmlinkage ssize_t sys32_readahead(int fd, u32 pad0, u64 a2, u64 a3,
Index: arch/mips64/kernel/scall_o32.S
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/scall_o32.S,v
retrieving revision 1.48.2.16
diff -u -r1.48.2.16 scall_o32.S
--- arch/mips64/kernel/scall_o32.S	2 Oct 2002 13:32:45 -0000	1.48.2.16
+++ arch/mips64/kernel/scall_o32.S	3 Oct 2002 06:44:51 -0000
@@ -519,7 +519,7 @@
 	sys	sys_capget	2
 	sys	sys_capset	2			/* 4205 */
 	sys	sys32_sigaltstack	0
-	sys	sys_sendfile	4
+	sys	sys32_sendfile	4
 	sys	sys_ni_syscall	0
 	sys	sys_ni_syscall	0
 	sys	sys32_mmap2	6			/* 4210 */

--------------595386A547C6B133862FA84D--


From ralf@linux-mips.org Thu Oct  3 11:41:30 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 03 Oct 2002 11:41:31 +0200 (CEST)
Received: from p508B682B.dip.t-dialin.net ([80.139.104.43]:59283 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123926AbSJCJla>; Thu, 3 Oct 2002 11:41:30 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g939fBN13750;
	Thu, 3 Oct 2002 11:41:11 +0200
Date: Thu, 3 Oct 2002 11:41:11 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Atsushi Nemoto <nemoto@toshiba-tops.co.jp>
Cc: linux-mips@linux-mips.org
Subject: Re: CVS Update@ftp.linux-mips.org: linux
Message-ID: <20021003114111.A13703@linux-mips.org>
References: <20020930165347Z1122169-9213+249@linux-mips.org> <20021003.121705.74756199.nemoto@toshiba-tops.co.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <20021003.121705.74756199.nemoto@toshiba-tops.co.jp>; from nemoto@toshiba-tops.co.jp on Thu, Oct 03, 2002 at 12:17:05PM +0900
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 348
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Thu, Oct 03, 2002 at 12:17:05PM +0900, Atsushi Nemoto wrote:

> This commit contains following change.  It seems 'addr' argument is
> not used.  Isn't this a mistake?

Yes, it is.  Fixed,

  Ralf

From macro@ds2.pg.gda.pl Thu Oct  3 13:39:11 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 03 Oct 2002 13:39:12 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:23020 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123930AbSJCLjL>; Thu, 3 Oct 2002 13:39:11 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id NAA07121;
	Thu, 3 Oct 2002 13:39:34 +0200 (MET DST)
Date: Thu, 3 Oct 2002 13:39:33 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: Carsten Langgaard <carstenl@mips.com>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
In-Reply-To: <20021002160948.F16482@linux-mips.org>
Message-ID: <Pine.GSO.3.96.1021003133548.7000A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 349
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Wed, 2 Oct 2002, Ralf Baechle wrote:

> > Ok, here is the next patch.
> > It fixes the sys32_sendmsg and sys32_recvmsg.
> 
> Ok, in.  Maciej, you can start the chainsawing ;-)

 Hmm, I couldn't test it as init now crashes with a SIGSEGV soon after
starting.  I had no time to investigate it further.  I fear it might be
related, though -- /dev/initctl communication? 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From atulsrivastava9@rediffmail.com Thu Oct  3 15:08:27 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 03 Oct 2002 15:08:27 +0200 (CEST)
Received: from webmail25.rediffmail.com ([203.199.83.147]:11682 "HELO
	webmail25.rediffmail.com") by linux-mips.org with SMTP
	id <S1123930AbSJCNI1>; Thu, 3 Oct 2002 15:08:27 +0200
Received: (qmail 20896 invoked by uid 510); 3 Oct 2002 13:12:42 -0000
Date: 3 Oct 2002 13:12:42 -0000
Message-ID: <20021003131242.20895.qmail@webmail25.rediffmail.com>
Received: from unknown (203.197.186.247) by rediffmail.com via HTTP; 03 Oct 2002 13:12:42 -0000
MIME-Version: 1.0
From: "atul srivastava" <atulsrivastava9@rediffmail.com>
Reply-To: "atul srivastava" <atulsrivastava9@rediffmail.com>
To: linux-mips@linux-mips.org
Subject: idt-mips tlb initialisation for PCI access..
Content-type: text/plain;
	format=flowed
Content-Disposition: inline
Return-Path: <atulsrivastava9@rediffmail.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 350
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: atulsrivastava9@rediffmail.com
Precedence: bulk
X-list: linux-mips

Hello,

my understanding of PCI access and related TLB initialisation 
(from bootloader to OS) is as follow:-

1.typically in bootloader PCI bridge is initialised
for IO amd MEM space windows.

2.also TLB entry is setup for virtual - > physical mapping.
examplesake if my PCI memory window is at 0x40000000 .

I would setup a TLB entry for this with appropiate index VPN and 
PFN.

3.now i am all set to access PCI space ..am i right..?

now my question is that after OS comes up initially it calls 
tlb_flush_all() ..should it again explicitly initialise the TLB 
entries in xxx_setup()..

if yes does the the following lines are doing the same..
offcourse adresses may have to changed in my BSP.

/* map 0xe0000000 virtual to 0x40000000 phys for PCI */

write_32bit_cp0_register(CP0_WIRED, 0); /* clear any                     
                          previous stuff */
add_wired_entry(0x01000017, 0x01040017,xe0000000,PM_16M);

Best Regards,
Atul
__________________________________________________________
Give your Company an email address like
ravi @ ravi-exports.com.  Sign up for Rediffmail Pro today!
Know more. http://www.rediffmailpro.com/signup/


From carstenl@mips.com Fri Oct  4 08:40:29 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 08:40:30 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:43512 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123253AbSJDGk3>;
	Fri, 4 Oct 2002 08:40:29 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g946diNf014923;
	Thu, 3 Oct 2002 23:39:44 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id XAA20483;
	Thu, 3 Oct 2002 23:40:12 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g946dhb24938;
	Fri, 4 Oct 2002 08:39:43 +0200 (MEST)
Message-ID: <3D9D37AC.B239FA5D@mips.com>
Date: Fri, 04 Oct 2002 08:39:40 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
CC: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
References: <Pine.GSO.3.96.1021003133548.7000A-100000@delta.ds2.pg.gda.pl>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 351
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

Hmm, are you sure it's related ?
It works fine for me, and it fixes the problems I had before I added this
fix.

/Carsten


"Maciej W. Rozycki" wrote:

> On Wed, 2 Oct 2002, Ralf Baechle wrote:
>
> > > Ok, here is the next patch.
> > > It fixes the sys32_sendmsg and sys32_recvmsg.
> >
> > Ok, in.  Maciej, you can start the chainsawing ;-)
>
>  Hmm, I couldn't test it as init now crashes with a SIGSEGV soon after
> starting.  I had no time to investigate it further.  I fear it might be
> related, though -- /dev/initctl communication?
>
> --
> +  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
> +--------------------------------------------------------------+
> +        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From carstenl@mips.com Fri Oct  4 09:50:47 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 09:50:48 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:47609 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123253AbSJDHur>;
	Fri, 4 Oct 2002 09:50:47 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g947oYNf015123;
	Fri, 4 Oct 2002 00:50:34 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id AAA22296;
	Fri, 4 Oct 2002 00:51:05 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g947oab28640;
	Fri, 4 Oct 2002 09:50:37 +0200 (MEST)
Message-ID: <3D9D484B.4C149BD8@mips.com>
Date: Fri, 04 Oct 2002 09:50:36 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Promblem with PREF (prefetching) in memcpy
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 352
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

I think we have a problem with the PREF instructions spread out in the
memcpy function.
We are prefetching outside the area we are copying. That's usually not a
problem, but if we are prefetching outside the physical memory area
(with an unmapped kseg address), anything could happen.
We could get a bus error (which we potentially could handle), but even
worse we could have mapped the PCI space immediately following the the
RAM area and then anything could happen.

So I think, we either need to make sure not to prefetch outside a page
boundary or we make sure the last page in physical memory doesn't get
use for unmapped kernel addresses.

Any comments ?

/Carsten



--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From dom@mudchute.algor.co.uk Fri Oct  4 13:53:43 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 13:53:43 +0200 (CEST)
Received: from alg133.algor.co.uk ([62.254.210.133]:42210 "EHLO
	oval.algor.co.uk") by linux-mips.org with ESMTP id <S1123253AbSJDLxn>;
	Fri, 4 Oct 2002 13:53:43 +0200
Received: from mudchute.algor.co.uk (pubfw.algor.co.uk [62.254.210.129])
	by oval.algor.co.uk (8.11.6/8.10.1) with ESMTP id g94BrRr05492;
	Fri, 4 Oct 2002 12:53:28 +0100 (BST)
Received: (from dom@localhost)
	by mudchute.algor.co.uk (8.8.5/8.8.5) id MAA12052;
	Fri, 4 Oct 2002 12:53:22 +0100 (BST)
Date: Fri, 4 Oct 2002 12:53:22 +0100 (BST)
Message-Id: <200210041153.MAA12052@mudchute.algor.co.uk>
From: Dominic Sweetman <dom@algor.co.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: Carsten Langgaard <carstenl@mips.com>
Cc: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
In-Reply-To: <3D9D484B.4C149BD8@mips.com>
References: <3D9D484B.4C149BD8@mips.com>
X-Mailer: VM 6.34 under 19.16 "Lille" XEmacs Lucid
Return-Path: <dom@mudchute.algor.co.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 353
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dom@algor.co.uk
Precedence: bulk
X-list: linux-mips


Carsten Langgaard (carstenl@mips.com) writes:

> I think we have a problem with the PREF instructions spread out in the
> memcpy function.

Not really.  The MIPS32 manual (for example):

 "PREF does not cause addressing-related exceptions. If it does happen
  to raise an exception condition, the exception condition is
  ignored. If an addressing-related exception condition is raised and
  ignored, no data movement occurs."
  
  PREF never generates a memory operation for a location with an
  uncached memory access type."

For a Linux user program, at least, memory pages are "memory-like":
reads are guaranteed to be side-effect free, so any outlying
prefetches are harmless.  It's hard to see any circumstance where an
accessible cacheable location would lead to bad side-effects on read.

-- 
Dominic Sweetman, 
MIPS Technologies (UK) - formerly Algorithmics
The Fruit Farm, Ely Road, Chittering, CAMBS CB5 9PH, ENGLAND
phone: +44 1223 706200 / fax: +44 1223 706250 / direct: +44 1223 706205
http://www.algor.co.uk

From carstenl@mips.com Fri Oct  4 14:11:29 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:11:29 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:22526 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123253AbSJDML3>;
	Fri, 4 Oct 2002 14:11:29 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94CB7Nf016191;
	Fri, 4 Oct 2002 05:11:07 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id FAA29129;
	Fri, 4 Oct 2002 05:11:37 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g94CB7b26187;
	Fri, 4 Oct 2002 14:11:07 +0200 (MEST)
Message-ID: <3D9D855B.12128FA2@mips.com>
Date: Fri, 04 Oct 2002 14:11:07 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Dominic Sweetman <dom@algor.co.uk>
CC: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
References: <3D9D484B.4C149BD8@mips.com> <200210041153.MAA12052@mudchute.algor.co.uk>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 354
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

Dominic Sweetman wrote:

> Carsten Langgaard (carstenl@mips.com) writes:
>
> > I think we have a problem with the PREF instructions spread out in the
> > memcpy function.
>
> Not really.  The MIPS32 manual (for example):
>
>  "PREF does not cause addressing-related exceptions. If it does happen
>   to raise an exception condition, the exception condition is
>   ignored. If an addressing-related exception condition is raised and
>   ignored, no data movement occurs."

Is a bus error exception an address related exception ?
I'm afraid some implementation think it's not.


>
>   PREF never generates a memory operation for a location with an
>   uncached memory access type."
>
> For a Linux user program, at least, memory pages are "memory-like":
> reads are guaranteed to be side-effect free, so any outlying
> prefetches are harmless.  It's hard to see any circumstance where an
> accessible cacheable location would lead to bad side-effects on read.

What about an UART RX register, we might loose a character ?
You can also configure you system, so you get a external interrupt from you
system controller in case of a bus error, there is no way the CPU can
relate this interrupt to the prefetching.




>
>
> --
> Dominic Sweetman,
> MIPS Technologies (UK) - formerly Algorithmics
> The Fruit Farm, Ely Road, Chittering, CAMBS CB5 9PH, ENGLAND
> phone: +44 1223 706200 / fax: +44 1223 706250 / direct: +44 1223 706205
> http://www.algor.co.uk

--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From alan@lxorguk.ukuu.org.uk Fri Oct  4 14:27:55 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:27:56 +0200 (CEST)
Received: from pc1-cwma1-5-cust51.swa.cable.ntl.com ([80.5.120.51]:9719 "EHLO
	irongate.swansea.linux.org.uk") by linux-mips.org with ESMTP
	id <S1123253AbSJDM1z>; Fri, 4 Oct 2002 14:27:55 +0200
Received: from irongate.swansea.linux.org.uk (localhost [127.0.0.1])
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5) with ESMTP id g94CaBbg031901;
	Fri, 4 Oct 2002 13:36:11 +0100
Received: (from alan@localhost)
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5/Submit) id g94Ca9JW031899;
	Fri, 4 Oct 2002 13:36:09 +0100
X-Authentication-Warning: irongate.swansea.linux.org.uk: alan set sender to alan@lxorguk.ukuu.org.uk using -f
Subject: Re: Promblem with PREF (prefetching) in memcpy
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Carsten Langgaard <carstenl@mips.com>
Cc: Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
In-Reply-To: <3D9D855B.12128FA2@mips.com>
References: <3D9D484B.4C149BD8@mips.com>
	<200210041153.MAA12052@mudchute.algor.co.uk>  <3D9D855B.12128FA2@mips.com>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) 
Date: 04 Oct 2002 13:36:08 +0100
Message-Id: <1033734968.31839.5.camel@irongate.swansea.linux.org.uk>
Mime-Version: 1.0
Return-Path: <alan@lxorguk.ukuu.org.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 355
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: alan@lxorguk.ukuu.org.uk
Precedence: bulk
X-list: linux-mips

On Fri, 2002-10-04 at 13:11, Carsten Langgaard wrote:
> Is a bus error exception an address related exception ?
> I'm afraid some implementation think it's not.
> 

So you need an option for broken systems, no new news 8)

> What about an UART RX register, we might loose a character ?
> You can also configure you system, so you get a external interrupt from you
> system controller in case of a bus error, there is no way the CPU can
> relate this interrupt to the prefetching.

The use of memcpy for I/O space isnt permitted in Linux, thats why we
have memcpy_*_io stuff. Thus prefetches should never touch 'special'
spaces. (On x86 the older Athlons corrupt their cache if you do this so
its not a mips specific matter)



From hartvige@mips.com Fri Oct  4 14:34:13 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:34:14 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:46590 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123253AbSJDMeN>;
	Fri, 4 Oct 2002 14:34:13 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94CXrNf016262;
	Fri, 4 Oct 2002 05:33:53 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id FAA29752;
	Fri, 4 Oct 2002 05:34:23 -0700 (PDT)
Received: (from hartvige@localhost)
	by copfs01.mips.com (8.11.4/8.9.0) id g94CXrQ29071;
	Fri, 4 Oct 2002 14:33:53 +0200 (MEST)
From: Hartvig Ekner <hartvige@mips.com>
Message-Id: <200210041233.g94CXrQ29071@copfs01.mips.com>
Subject: Re: Promblem with PREF (prefetching) in memcpy
To: dom@algor.co.uk (Dominic Sweetman)
Date: Fri, 4 Oct 2002 14:33:53 +0200 (MEST)
Cc: carstenl@mips.com (Carsten Langgaard),
	ralf@linux-mips.org (Ralf Baechle), linux-mips@linux-mips.org
In-Reply-To: <200210041153.MAA12052@mudchute.algor.co.uk> from "Dominic Sweetman" at Oct 04, 2002 12:53:22 PM
X-Mailer: ELM [version 2.5 PL1]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <hartvige@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 356
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hartvige@mips.com
Precedence: bulk
X-list: linux-mips

Hi Dom,

this problem occurs in kernel space (kseg0), not user space. In user space
there is no problem due to the TLB "protection" of PREFs going outside the
process working set, but that doesn't help in kernel mode.

/Hartvig

Dominic Sweetman writes:
> 
> 
> Carsten Langgaard (carstenl@mips.com) writes:
> 
> > I think we have a problem with the PREF instructions spread out in the
> > memcpy function.
> 
> Not really.  The MIPS32 manual (for example):
> 
>  "PREF does not cause addressing-related exceptions. If it does happen
>   to raise an exception condition, the exception condition is
>   ignored. If an addressing-related exception condition is raised and
>   ignored, no data movement occurs."
>   
>   PREF never generates a memory operation for a location with an
>   uncached memory access type."
> 
> For a Linux user program, at least, memory pages are "memory-like":
> reads are guaranteed to be side-effect free, so any outlying
> prefetches are harmless.  It's hard to see any circumstance where an
> accessible cacheable location would lead to bad side-effects on read.
> 
> -- 
> Dominic Sweetman, 
> MIPS Technologies (UK) - formerly Algorithmics
> The Fruit Farm, Ely Road, Chittering, CAMBS CB5 9PH, ENGLAND
> phone: +44 1223 706200 / fax: +44 1223 706250 / direct: +44 1223 706205
> http://www.algor.co.uk

From kevink@mips.com Fri Oct  4 14:34:33 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:34:33 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:46846 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123916AbSJDMeP>;
	Fri, 4 Oct 2002 14:34:15 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94CXxNf016266;
	Fri, 4 Oct 2002 05:33:59 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id FAA29757;
	Fri, 4 Oct 2002 05:34:28 -0700 (PDT)
Message-ID: <00dd01c26ba2$b18f55b0$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Dominic Sweetman" <dom@algor.co.uk>,
	"Carsten Langgaard" <carstenl@mips.com>
Cc: "Ralf Baechle" <ralf@linux-mips.org>, <linux-mips@linux-mips.org>
References: <3D9D484B.4C149BD8@mips.com> <200210041153.MAA12052@mudchute.algor.co.uk>
Subject: Re: Promblem with PREF (prefetching) in memcpy
Date: Fri, 4 Oct 2002 14:36:39 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 357
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

From: "Dominic Sweetman" <dom@algor.co.uk>
> Carsten Langgaard (carstenl@mips.com) writes:
> 
> > I think we have a problem with the PREF instructions spread out in the
> > memcpy function.
> 
> Not really.  The MIPS32 manual (for example):
> 
>  "PREF does not cause addressing-related exceptions. If it does happen
>   to raise an exception condition, the exception condition is
>   ignored. If an addressing-related exception condition is raised and
>   ignored, no data movement occurs."
>   
>   PREF never generates a memory operation for a location with an
>   uncached memory access type."
> 
> For a Linux user program, at least, memory pages are "memory-like":
> reads are guaranteed to be side-effect free, so any outlying
> prefetches are harmless.  It's hard to see any circumstance where an
> accessible cacheable location would lead to bad side-effects on read.

In case Carsten's reply wasn't clear enough, there is a loophole
in the spec:  kseg0.  There is no TLB access to cause a TLB
exception (which would suppress the operation and be nullifed),
If the prefetch address is correctly aligned, so that there is no
address exception.  In typical use, kseg0 is cacheable, which
means that the second paragraph you quote does not apply.
A prefetch to a well-formed, cacheable kseg0 address which 
has no primary storage behind it (e.g. 0x04000000 on a system
with 64M of physical memory) should, according to the spec,
cause a cache fill to be initiated for the line at that address,
which will result in a bus error, if not a flat-out system hang.

            Regards,

            Kevin K.

From kevink@mips.com Fri Oct  4 14:34:56 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:34:56 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:47614 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123396AbSJDMe4>;
	Fri, 4 Oct 2002 14:34:56 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94CYcNf016270;
	Fri, 4 Oct 2002 05:34:38 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id FAA29779;
	Fri, 4 Oct 2002 05:35:05 -0700 (PDT)
Message-ID: <00e001c26ba2$c7e6c960$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Dominic Sweetman" <dom@algor.co.uk>,
	"Carsten Langgaard" <carstenl@mips.com>
Cc: "Ralf Baechle" <ralf@linux-mips.org>, <linux-mips@linux-mips.org>
References: <3D9D484B.4C149BD8@mips.com> <200210041153.MAA12052@mudchute.algor.co.uk>
Subject: Re: Promblem with PREF (prefetching) in memcpy
Date: Fri, 4 Oct 2002 14:37:16 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 358
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

From: "Dominic Sweetman" <dom@algor.co.uk>
> Carsten Langgaard (carstenl@mips.com) writes:
> 
> > I think we have a problem with the PREF instructions spread out in the
> > memcpy function.
> 
> Not really.  The MIPS32 manual (for example):
> 
>  "PREF does not cause addressing-related exceptions. If it does happen
>   to raise an exception condition, the exception condition is
>   ignored. If an addressing-related exception condition is raised and
>   ignored, no data movement occurs."
>   
>   PREF never generates a memory operation for a location with an
>   uncached memory access type."
> 
> For a Linux user program, at least, memory pages are "memory-like":
> reads are guaranteed to be side-effect free, so any outlying
> prefetches are harmless.  It's hard to see any circumstance where an
> accessible cacheable location would lead to bad side-effects on read.

In case Carsten's reply wasn't clear enough, there is a loophole
in the spec:  kseg0.  There is no TLB access to cause a TLB
exception (which would suppress the operation and be nullifed),
If the prefetch address is correctly aligned, so that there is no
address exception.  In typical use, kseg0 is cacheable, which
means that the second paragraph you quote does not apply.
A prefetch to a well-formed, cacheable kseg0 address which 
has no primary storage behind it (e.g. 0x04000000 on a system
with 64M of physical memory) should, according to the spec,
cause a cache fill to be initiated for the line at that address,
which will result in a bus error, if not a flat-out system hang.

            Regards,

            Kevin K.

From dg@treblig.org Fri Oct  4 14:36:02 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:36:03 +0200 (CEST)
Received: from parcelfarce.linux.theplanet.co.uk ([195.92.249.252]:41991 "EHLO
	www.linux.org.uk") by linux-mips.org with ESMTP id <S1123396AbSJDMgC>;
	Fri, 4 Oct 2002 14:36:02 +0200
Received: from dsl-212-23-14-246.zen.co.uk ([212.23.14.246] helo=gallifrey.home.treblig.org)
	by www.linux.org.uk with esmtp (Exim 3.33 #5)
	id 17xRgR-0005VB-00; Fri, 04 Oct 2002 13:35:55 +0100
Received: from dg by gallifrey.home.treblig.org with local (Exim 3.36 #1 (Debian))
	id 17xRgQ-0007CR-00; Fri, 04 Oct 2002 13:35:54 +0100
Date: Fri, 4 Oct 2002 13:35:54 +0100
From: "Dr. David Alan Gilbert" <gilbertd@treblig.org>
To: Carsten Langgaard <carstenl@mips.com>
Cc: Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
Message-ID: <20021004123554.GD710@gallifrey>
References: <3D9D484B.4C149BD8@mips.com> <200210041153.MAA12052@mudchute.algor.co.uk> <3D9D855B.12128FA2@mips.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <3D9D855B.12128FA2@mips.com>
User-Agent: Mutt/1.4i
X-Chocolate: 70 percent or better cocoa solids preferably
X-Operating-System: Linux/2.4.18 (i686)
X-Uptime: 13:34:03 up 2 days, 15:01,  1 user,  load average: 0.00, 0.02, 0.14
Return-Path: <dg@treblig.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 359
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: gilbertd@treblig.org
Precedence: bulk
X-list: linux-mips

* Carsten Langgaard (carstenl@mips.com) wrote:

> > For a Linux user program, at least, memory pages are "memory-like":
> > reads are guaranteed to be side-effect free, so any outlying
> > prefetches are harmless.  It's hard to see any circumstance where an
> > accessible cacheable location would lead to bad side-effects on read.
> 
> What about an UART RX register, we might loose a character ?
> You can also configure you system, so you get a external interrupt from you
> system controller in case of a bus error, there is no way the CPU can
> relate this interrupt to the prefetching.

Well those woudn't be cacheable (hmm what happens to a prefetch on none
cached areas?) and also you could argue that you shouldn't be proding
UARTs from user space (although you could equally argue that it is
perfectly valid - but if you were doing it you probably wouldn't
be attacking them with a memcpy).

Dave
 ---------------- Have a happy GNU millennium! ----------------------   
/ Dr. David Alan Gilbert    | Running GNU/Linux on Alpha,68K| Happy  \ 
\ gro.gilbert @ treblig.org | MIPS,x86,ARM, SPARC and HP-PA | In Hex /
 \ _________________________|_____ http://www.treblig.org   |_______/

From carstenl@mips.com Fri Oct  4 14:36:22 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:36:23 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:52222 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123920AbSJDMgQ>;
	Fri, 4 Oct 2002 14:36:16 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94CZxNf016273;
	Fri, 4 Oct 2002 05:36:00 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id FAA29822;
	Fri, 4 Oct 2002 05:36:29 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g94CZxb29382;
	Fri, 4 Oct 2002 14:35:59 +0200 (MEST)
Message-ID: <3D9D8B2E.8258A952@mips.com>
Date: Fri, 04 Oct 2002 14:35:58 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
CC: Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
References: <3D9D484B.4C149BD8@mips.com>
		<200210041153.MAA12052@mudchute.algor.co.uk>  <3D9D855B.12128FA2@mips.com> <1033734968.31839.5.camel@irongate.swansea.linux.org.uk>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 360
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

Alan Cox wrote:

> On Fri, 2002-10-04 at 13:11, Carsten Langgaard wrote:
> > Is a bus error exception an address related exception ?
> > I'm afraid some implementation think it's not.
> >
>
> So you need an option for broken systems, no new news 8)
>
> > What about an UART RX register, we might loose a character ?
> > You can also configure you system, so you get a external interrupt from you
> > system controller in case of a bus error, there is no way the CPU can
> > relate this interrupt to the prefetching.
>
> The use of memcpy for I/O space isnt permitted in Linux, thats why we
> have memcpy_*_io stuff. Thus prefetches should never touch 'special'
> spaces. (On x86 the older Athlons corrupt their cache if you do this so
> its not a mips specific matter)

That's exactly the problem.
The actually loads and stores in memcpy is fine, it's the prefetching that
prefetch too much.

/Carsten


--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com




From ralf@linux-mips.org Fri Oct  4 14:39:26 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:39:27 +0200 (CEST)
Received: from p508B493B.dip.t-dialin.net ([80.139.73.59]:43681 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123397AbSJDMj0>; Fri, 4 Oct 2002 14:39:26 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g94CcjF15967;
	Fri, 4 Oct 2002 14:38:45 +0200
Date: Fri, 4 Oct 2002 14:38:45 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Hartvig Ekner <hartvige@mips.com>
Cc: Dominic Sweetman <dom@algor.co.uk>,
	Carsten Langgaard <carstenl@mips.com>,
	linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
Message-ID: <20021004143845.A15883@linux-mips.org>
References: <200210041153.MAA12052@mudchute.algor.co.uk> <200210041233.g94CXrQ29071@copfs01.mips.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <200210041233.g94CXrQ29071@copfs01.mips.com>; from hartvige@mips.com on Fri, Oct 04, 2002 at 02:33:53PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 361
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 04, 2002 at 02:33:53PM +0200, Hartvig Ekner wrote:

> this problem occurs in kernel space (kseg0), not user space. In user space
> there is no problem due to the TLB "protection" of PREFs going outside the
> process working set, but that doesn't help in kernel mode.

Assume a userspace device driver having some hardware mapped immediately
following a ordinary memory mapping.  In that case it would be possible
for prefetch to run from the one into the next mapping - boom.

  Ralf

From macro@ds2.pg.gda.pl Fri Oct  4 14:43:14 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:43:15 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:16271 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123397AbSJDMnO>; Fri, 4 Oct 2002 14:43:14 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id OAA07129;
	Fri, 4 Oct 2002 14:43:35 +0200 (MET DST)
Date: Fri, 4 Oct 2002 14:43:35 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Carsten Langgaard <carstenl@mips.com>
cc: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch.
In-Reply-To: <3D9D37AC.B239FA5D@mips.com>
Message-ID: <Pine.GSO.3.96.1021004142443.6208B-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 362
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Fri, 4 Oct 2002, Carsten Langgaard wrote:

> Hmm, are you sure it's related ?

 No, I wasn't -- as I wrote I had no time to investigate it further and I
was asking for comments from people.  Now I'm sure it is not. 

> It works fine for me, and it fixes the problems I had before I added this
> fix.

 Yep, it works here with openssh, which used not to work before.  Thanks a
lot. 

 The reason of the failure was a recent r4kcache.h breakage -- this is the
kind of mistakes that makes me consider a run-time check a necessity even
for supposedly trivial and innocent changes (well, a compilation should
actually suffice for lone comment updates). 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From kevink@mips.com Fri Oct  4 14:58:08 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 14:58:09 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:9727 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123397AbSJDM6I>;
	Fri, 4 Oct 2002 14:58:08 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94CvmNf016336;
	Fri, 4 Oct 2002 05:57:48 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id FAA00368;
	Fri, 4 Oct 2002 05:58:16 -0700 (PDT)
Message-ID: <00fe01c26ba6$04943480$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Alan Cox" <alan@lxorguk.ukuu.org.uk>,
	"Carsten Langgaard" <carstenl@mips.com>
Cc: "Dominic Sweetman" <dom@algor.co.uk>,
	"Ralf Baechle" <ralf@linux-mips.org>, <linux-mips@linux-mips.org>
References: <3D9D484B.4C149BD8@mips.com><200210041153.MAA12052@mudchute.algor.co.uk>  <3D9D855B.12128FA2@mips.com> <1033734968.31839.5.camel@irongate.swansea.linux.org.uk>
Subject: Re: Promblem with PREF (prefetching) in memcpy
Date: Fri, 4 Oct 2002 15:00:18 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 363
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

> On Fri, 2002-10-04 at 13:11, Carsten Langgaard wrote:
> > Is a bus error exception an address related exception ?
> > I'm afraid some implementation think it's not.
> 
> So you need an option for broken systems, no new news 8)

Alas, it's not so simple.  Bus errors are often not even
precise exceptions, which is to say, they cannot be
associated with a specific causing instruction.

> > What about an UART RX register, we might loose a character ?
> > You can also configure you system, so you get a external interrupt from you
> > system controller in case of a bus error, there is no way the CPU can
> > relate this interrupt to the prefetching.
> 
> The use of memcpy for I/O space isnt permitted in Linux, thats why we
> have memcpy_*_io stuff. Thus prefetches should never touch 'special'
> spaces. (On x86 the older Athlons corrupt their cache if you do this so
> its not a mips specific matter)

The issue isn't that anyone would deliberately use memcpy() in I/O
space.  Rather, it's that memcpy() prefetches quite a ways ahead,
and if one has I/O space assigned just after the end of physical
memory, Bad Things might happen on a perfectly legal memcpy()
that references the last couple hundred bytes of memory in a 
way that not even a clever and well-informed bus error handler 
could undo.

            Kevin K.

From macro@ds2.pg.gda.pl Fri Oct  4 15:01:05 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:01:06 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:9616 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123397AbSJDNBF>; Fri, 4 Oct 2002 15:01:05 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id PAA07942;
	Fri, 4 Oct 2002 15:01:17 +0200 (MET DST)
Date: Fri, 4 Oct 2002 15:01:17 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
cc: Carsten Langgaard <carstenl@mips.com>,
	Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
In-Reply-To: <1033734968.31839.5.camel@irongate.swansea.linux.org.uk>
Message-ID: <Pine.GSO.3.96.1021004145625.6208C-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 364
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On 4 Oct 2002, Alan Cox wrote:

> > Is a bus error exception an address related exception ?
> > I'm afraid some implementation think it's not.
> 
> So you need an option for broken systems, no new news 8)

 For MIPS a bus error exception is not an address related exception by
definition (not surprising, anyway).  Specifically, the BadVaddr register
is not set upon one.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From alan@lxorguk.ukuu.org.uk Fri Oct  4 15:01:25 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:01:25 +0200 (CEST)
Received: from pc1-cwma1-5-cust51.swa.cable.ntl.com ([80.5.120.51]:36599 "EHLO
	irongate.swansea.linux.org.uk") by linux-mips.org with ESMTP
	id <S1123928AbSJDNBY>; Fri, 4 Oct 2002 15:01:24 +0200
Received: from irongate.swansea.linux.org.uk (localhost [127.0.0.1])
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5) with ESMTP id g94D9jbg032108;
	Fri, 4 Oct 2002 14:09:45 +0100
Received: (from alan@localhost)
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5/Submit) id g94D9h79032106;
	Fri, 4 Oct 2002 14:09:43 +0100
X-Authentication-Warning: irongate.swansea.linux.org.uk: alan set sender to alan@lxorguk.ukuu.org.uk using -f
Subject: Re: Promblem with PREF (prefetching) in memcpy
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Carsten Langgaard <carstenl@mips.com>
Cc: Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
In-Reply-To: <3D9D8B2E.8258A952@mips.com>
References: <3D9D484B.4C149BD8@mips.com>
	<200210041153.MAA12052@mudchute.algor.co.uk>  <3D9D855B.12128FA2@mips.com>
	<1033734968.31839.5.camel@irongate.swansea.linux.org.uk> 
	<3D9D8B2E.8258A952@mips.com>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) 
Date: 04 Oct 2002 14:09:43 +0100
Message-Id: <1033736983.31861.26.camel@irongate.swansea.linux.org.uk>
Mime-Version: 1.0
Return-Path: <alan@lxorguk.ukuu.org.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 365
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: alan@lxorguk.ukuu.org.uk
Precedence: bulk
X-list: linux-mips

On Fri, 2002-10-04 at 13:35, Carsten Langgaard wrote:
> That's exactly the problem.
> The actually loads and stores in memcpy is fine, it's the prefetching that
> prefetch too much.

Then fix your prefetching code 8). We had problems with that on x86 too,
prefetching off the last page into ISA space -> death. Was umm fun to
debug


From alan@lxorguk.ukuu.org.uk Fri Oct  4 15:07:11 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:07:11 +0200 (CEST)
Received: from pc1-cwma1-5-cust51.swa.cable.ntl.com ([80.5.120.51]:43255 "EHLO
	irongate.swansea.linux.org.uk") by linux-mips.org with ESMTP
	id <S1123397AbSJDNHL>; Fri, 4 Oct 2002 15:07:11 +0200
Received: from irongate.swansea.linux.org.uk (localhost [127.0.0.1])
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5) with ESMTP id g94DFWbg032146;
	Fri, 4 Oct 2002 14:15:32 +0100
Received: (from alan@localhost)
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5/Submit) id g94DFUZL032144;
	Fri, 4 Oct 2002 14:15:30 +0100
X-Authentication-Warning: irongate.swansea.linux.org.uk: alan set sender to alan@lxorguk.ukuu.org.uk using -f
Subject: Re: Promblem with PREF (prefetching) in memcpy
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: "Kevin D. Kissell" <kevink@mips.com>
Cc: Carsten Langgaard <carstenl@mips.com>,
	Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
In-Reply-To: <00fe01c26ba6$04943480$10eca8c0@grendel>
References: <3D9D484B.4C149BD8@mips.com><200210041153.MAA12052@mudchute.algor.co.uk> 
	<3D9D855B.12128FA2@mips.com>
	<1033734968.31839.5.camel@irongate.swansea.linux.org.uk> 
	<00fe01c26ba6$04943480$10eca8c0@grendel>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) 
Date: 04 Oct 2002 14:15:30 +0100
Message-Id: <1033737330.31861.30.camel@irongate.swansea.linux.org.uk>
Mime-Version: 1.0
Return-Path: <alan@lxorguk.ukuu.org.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 366
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: alan@lxorguk.ukuu.org.uk
Precedence: bulk
X-list: linux-mips

On Fri, 2002-10-04 at 14:00, Kevin D. Kissell wrote:
> The issue isn't that anyone would deliberately use memcpy() in I/O
> space.  Rather, it's that memcpy() prefetches quite a ways ahead,
> and if one has I/O space assigned just after the end of physical
> memory, Bad Things might happen on a perfectly legal memcpy()
> that references the last couple hundred bytes of memory in a 
> way that not even a clever and well-informed bus error handler 
> could undo.

Then your memcpy function is IMHO broken. Fix it to note prefetch beyond
the end of the area you actually will copy and life should be a lot
better


From hartvige@mips.com Fri Oct  4 15:07:30 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:07:31 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:22527 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123930AbSJDNHR>;
	Fri, 4 Oct 2002 15:07:17 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94D72Nf016373;
	Fri, 4 Oct 2002 06:07:02 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id GAA00681;
	Fri, 4 Oct 2002 06:07:31 -0700 (PDT)
Received: (from hartvige@localhost)
	by copfs01.mips.com (8.11.4/8.9.0) id g94D72G02838;
	Fri, 4 Oct 2002 15:07:02 +0200 (MEST)
From: Hartvig Ekner <hartvige@mips.com>
Message-Id: <200210041307.g94D72G02838@copfs01.mips.com>
Subject: Re: Promblem with PREF (prefetching) in memcpy
To: alan@lxorguk.ukuu.org.uk (Alan Cox)
Date: Fri, 4 Oct 2002 15:07:02 +0200 (MEST)
Cc: carstenl@mips.com (Carsten Langgaard),
	dom@algor.co.uk (Dominic Sweetman),
	ralf@linux-mips.org (Ralf Baechle), linux-mips@linux-mips.org
In-Reply-To: <1033736983.31861.26.camel@irongate.swansea.linux.org.uk> from "Alan Cox" at Oct 04, 2002 02:09:43 PM
X-Mailer: ELM [version 2.5 PL1]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <hartvige@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 367
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hartvige@mips.com
Precedence: bulk
X-list: linux-mips

Yes, I think that must be the safest solution.

Any kernel routine which uses PREF instructions (but actually also user
space code as Ralf's example pointed out), must guarantee that it does
not issue prefetches to addresses which it is not specifically being
asked to mess around with. 

The other solutions seem too fragile, and will break at some point.

/Hartvig

Alan Cox writes:
> 
> On Fri, 2002-10-04 at 13:35, Carsten Langgaard wrote:
> > That's exactly the problem.
> > The actually loads and stores in memcpy is fine, it's the prefetching that
> > prefetch too much.
> 
> Then fix your prefetching code 8). We had problems with that on x86 too,
> prefetching off the last page into ISA space -> death. Was umm fun to
> debug
> 
> 
> 


-- 
 _    _   _____  ____     Hartvig Ekner        Mailto:hartvige@mips.com
 |\  /| | |____)(____                          Direct: +45 4486 5503
 | \/ | | |     _____)    MIPS Denmark         Switch: +45 4486 5555
T E C H N O L O G I E S   http://www.mips.com  Fax...: +45 4486 5556

From kevink@mips.com Fri Oct  4 15:13:30 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:13:30 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:27391 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123397AbSJDNNa>;
	Fri, 4 Oct 2002 15:13:30 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94DDDNf016389;
	Fri, 4 Oct 2002 06:13:13 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id GAA00806;
	Fri, 4 Oct 2002 06:13:42 -0700 (PDT)
Message-ID: <010e01c26ba8$2c9400d0$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Alan Cox" <alan@lxorguk.ukuu.org.uk>
Cc: "Carsten Langgaard" <carstenl@mips.com>,
	"Dominic Sweetman" <dom@algor.co.uk>,
	"Ralf Baechle" <ralf@linux-mips.org>, <linux-mips@linux-mips.org>
References: <3D9D484B.4C149BD8@mips.com><200210041153.MAA12052@mudchute.algor.co.uk> <3D9D855B.12128FA2@mips.com><1033734968.31839.5.camel@irongate.swansea.linux.org.uk> <00fe01c26ba6$04943480$10eca8c0@grendel> <1033737330.31861.30.camel@irongate.swansea.linux.org.uk>
Subject: Re: Promblem with PREF (prefetching) in memcpy
Date: Fri, 4 Oct 2002 15:15:41 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 368
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

From: "Alan Cox" <alan@lxorguk.ukuu.org.uk>
> On Fri, 2002-10-04 at 14:00, Kevin D. Kissell wrote:
> > The issue isn't that anyone would deliberately use memcpy() in I/O
> > space.  Rather, it's that memcpy() prefetches quite a ways ahead,
> > and if one has I/O space assigned just after the end of physical
> > memory, Bad Things might happen on a perfectly legal memcpy()
> > that references the last couple hundred bytes of memory in a 
> > way that not even a clever and well-informed bus error handler 
> > could undo.
> 
> Then your memcpy function is IMHO broken. Fix it to note prefetch beyond
> the end of the area you actually will copy and life should be a lot
> better

Which is excatly the point that Carsten was raising when he started this thread!

The question is how, i.e. throttle memcpy or thow away a "guard band" of RAM?

            Regards,

            Kevin K. 

From ralf@linux-mips.org Fri Oct  4 15:17:47 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:17:48 +0200 (CEST)
Received: from p508B493B.dip.t-dialin.net ([80.139.73.59]:26274 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123397AbSJDNRr>; Fri, 4 Oct 2002 15:17:47 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g94DHIb16581;
	Fri, 4 Oct 2002 15:17:18 +0200
Date: Fri, 4 Oct 2002 15:17:18 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Carsten Langgaard <carstenl@mips.com>,
	Dominic Sweetman <dom@algor.co.uk>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
Message-ID: <20021004151718.A16064@linux-mips.org>
References: <1033734968.31839.5.camel@irongate.swansea.linux.org.uk> <Pine.GSO.3.96.1021004145625.6208C-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <Pine.GSO.3.96.1021004145625.6208C-100000@delta.ds2.pg.gda.pl>; from macro@ds2.pg.gda.pl on Fri, Oct 04, 2002 at 03:01:17PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 369
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 04, 2002 at 03:01:17PM +0200, Maciej W. Rozycki wrote:

> > > Is a bus error exception an address related exception ?
> > > I'm afraid some implementation think it's not.
> > 
> > So you need an option for broken systems, no new news 8)
> 
>  For MIPS a bus error exception is not an address related exception by
> definition (not surprising, anyway).  Specifically, the BadVaddr register
> is not set upon one.

A particular pain is the exception can be delayed almost arbitrarily due to
posted writes.  So quite frequently there is no easy association between
the machine state at exception time and the cause ...

  Ralf

From dom@mudchute.algor.co.uk Fri Oct  4 15:29:37 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:29:38 +0200 (CEST)
Received: from alg133.algor.co.uk ([62.254.210.133]:5603 "EHLO
	oval.algor.co.uk") by linux-mips.org with ESMTP id <S1123397AbSJDN3h>;
	Fri, 4 Oct 2002 15:29:37 +0200
Received: from mudchute.algor.co.uk (pubfw.algor.co.uk [62.254.210.129])
	by oval.algor.co.uk (8.11.6/8.10.1) with ESMTP id g94DTTr09207;
	Fri, 4 Oct 2002 14:29:29 +0100 (BST)
Received: (from dom@localhost)
	by mudchute.algor.co.uk (8.8.5/8.8.5) id OAA12180;
	Fri, 4 Oct 2002 14:29:24 +0100 (BST)
Date: Fri, 4 Oct 2002 14:29:24 +0100 (BST)
Message-Id: <200210041329.OAA12180@mudchute.algor.co.uk>
From: Dominic Sweetman <dom@algor.co.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: Carsten Langgaard <carstenl@mips.com>
Cc: Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
In-Reply-To: <3D9D855B.12128FA2@mips.com>
References: <3D9D484B.4C149BD8@mips.com>
	<200210041153.MAA12052@mudchute.algor.co.uk>
	<3D9D855B.12128FA2@mips.com>
X-Mailer: VM 6.34 under 19.16 "Lille" XEmacs Lucid
Return-Path: <dom@mudchute.algor.co.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 370
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dom@algor.co.uk
Precedence: bulk
X-list: linux-mips


Carsten Langgaard (carstenl@mips.com) writes:

> >  "PREF does not cause addressing-related exceptions. If it does happen
> >   to raise an exception condition, the exception condition is
> >   ignored. If an addressing-related exception condition is raised and
> >   ignored, no data movement occurs."
> 
> Is a bus error exception an address related exception ?

Yes.

I agree some MIPS documentation has been ambiguous on the
subject, probably because from the chip designer's point of view the
address is generated early and internally, and the data turns up
later.  It's ambiguous whether the BadVaddr register will be correctly
set on a bus error (it is on most Big MIPS CPUs, I believe).

But that's beside the point.  PREF should plainly never cause an
exception because of a bus error.

> I'm afraid some implementation think it's not.

That would be a bug.

So let's suppose you've got that bug.  And you've got a program
running in cacheable memory, and PREF wanders off the edge of the
region.

If you were running mapped, you surely wouldn't have a spurious
cacheable mapping to single-cycle memory...

In kseg0, you might step into a different physical address region.
It's good practice to reserve a 'guard' area of address space between
general memory and I/O registers, of course.  If the hardware doesn't
do it, maybe the software could, by simply refusing to allocate the
highest addressable 4Kbytes of memory for general purposes.

Some systems idly decode a cache refill in a non-memory region as one
or a sequence of reads, causing a bus error.

I count that as one CPU bug and two system misfeatures.  The solution,
I guess, is a "bogus bus error" handler.

> What about an UART RX register, we might loose a character ?

Yes, without a guard region and with cache refills cheerfully decoded
to bogus single-cycle reads, you can get bogus reads.  With a
careless-enough memory map, you might read something with a side
effect.  

> You can also configure you system, so you get a external interrupt
> from you system controller in case of a bus error, there is no way
> the CPU can relate this interrupt to the prefetching.

Yes, that's true; interrupts on bus errors are vaguely useful for
post-mortem diagnosis, but useless for recovery.

-- 
Dominic Sweetman, 
MIPS Technologies (UK) - formerly Algorithmics
The Fruit Farm, Ely Road, Chittering, CAMBS CB5 9PH, ENGLAND
phone: +44 1223 706200 / fax: +44 1223 706250 / direct: +44 1223 706205
http://www.algor.co.uk

From macro@ds2.pg.gda.pl Fri Oct  4 15:32:04 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:32:04 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:8593 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123397AbSJDNcE>; Fri, 4 Oct 2002 15:32:04 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id PAA08767;
	Fri, 4 Oct 2002 15:32:30 +0200 (MET DST)
Date: Fri, 4 Oct 2002 15:32:29 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Ralf Baechle <ralf@linux-mips.org>
cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
	Carsten Langgaard <carstenl@mips.com>,
	Dominic Sweetman <dom@algor.co.uk>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
In-Reply-To: <20021004151718.A16064@linux-mips.org>
Message-ID: <Pine.GSO.3.96.1021004152054.6208E-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 371
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Fri, 4 Oct 2002, Ralf Baechle wrote:

> >  For MIPS a bus error exception is not an address related exception by
> > definition (not surprising, anyway).  Specifically, the BadVaddr register
> > is not set upon one.
> 
> A particular pain is the exception can be delayed almost arbitrarily due to
> posted writes.  So quite frequently there is no easy association between
> the machine state at exception time and the cause ...

 Hmm, I'm not sure if it's permitted to signal a bus exception for
asynchronous write cycles.  At least the R3k and the R4000/R4400
specifications explictly forbid them and state that a general interrupt
has to be used in such a case instead (and at least the DECstations get
this circuitry right -- all of them have a dedicated gp interrupt input
for bus errors on a write).  Later chips might have relaxed this
requirement though -- I don't know at the moment.

 Anyway, the address which is involved in the cycle resulting in a bus
exception is always valid and the reason lies elsewhere -- e.g. it may be
a bus timeout or a data ECC error. 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From alan@lxorguk.ukuu.org.uk Fri Oct  4 15:35:47 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:35:47 +0200 (CEST)
Received: from pc1-cwma1-5-cust51.swa.cable.ntl.com ([80.5.120.51]:36856 "EHLO
	irongate.swansea.linux.org.uk") by linux-mips.org with ESMTP
	id <S1123397AbSJDNfr>; Fri, 4 Oct 2002 15:35:47 +0200
Received: from irongate.swansea.linux.org.uk (localhost [127.0.0.1])
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5) with ESMTP id g94Di8bg032222;
	Fri, 4 Oct 2002 14:44:09 +0100
Received: (from alan@localhost)
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5/Submit) id g94Di7GQ032220;
	Fri, 4 Oct 2002 14:44:07 +0100
X-Authentication-Warning: irongate.swansea.linux.org.uk: alan set sender to alan@lxorguk.ukuu.org.uk using -f
Subject: Re: Promblem with PREF (prefetching) in memcpy
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: "Kevin D. Kissell" <kevink@mips.com>
Cc: Carsten Langgaard <carstenl@mips.com>,
	Dominic Sweetman <dom@algor.co.uk>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
In-Reply-To: <010e01c26ba8$2c9400d0$10eca8c0@grendel>
References: <3D9D484B.4C149BD8@mips.com><200210041153.MAA12052@mudchute.algor.co.uk>
	<3D9D855B.12128FA2@mips.com><1033734968.31839.5.camel@irongate.swansea.linux
	 .org.uk> <00fe01c26ba6$04943480$10eca8c0@grendel>
	<1033737330.31861.30.camel@irongate.swansea.linux.org.uk> 
	<010e01c26ba8$2c9400d0$10eca8c0@grendel>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) 
Date: 04 Oct 2002 14:44:06 +0100
Message-Id: <1033739046.31861.35.camel@irongate.swansea.linux.org.uk>
Mime-Version: 1.0
Return-Path: <alan@lxorguk.ukuu.org.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 372
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: alan@lxorguk.ukuu.org.uk
Precedence: bulk
X-list: linux-mips

On Fri, 2002-10-04 at 14:15, Kevin D. Kissell wrote:
> Which is excatly the point that Carsten was raising when he started this thread!
> 
> The question is how, i.e. throttle memcpy or thow away a "guard band" of RAM?


The x86 code basically says

	while(over 320 bytes left)
	{
		prefetch ahead
		copy bits
	}
	while(bytes left)
		copy bits

You also have to watch the prefetching in the tcp checksum code. We hit
an x86 bug there also very recently. That one is new but shows up with
the zero copy tcp nfs


From macro@ds2.pg.gda.pl Fri Oct  4 15:45:44 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 15:45:44 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:31889 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123397AbSJDNpo>; Fri, 4 Oct 2002 15:45:44 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id PAA09075;
	Fri, 4 Oct 2002 15:46:06 +0200 (MET DST)
Date: Fri, 4 Oct 2002 15:46:06 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Dominic Sweetman <dom@algor.co.uk>
cc: Carsten Langgaard <carstenl@mips.com>,
	Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
In-Reply-To: <200210041329.OAA12180@mudchute.algor.co.uk>
Message-ID: <Pine.GSO.3.96.1021004153416.6208F-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 373
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Fri, 4 Oct 2002, Dominic Sweetman wrote:

> > You can also configure you system, so you get a external interrupt
> > from you system controller in case of a bus error, there is no way
> > the CPU can relate this interrupt to the prefetching.
> 
> Yes, that's true; interrupts on bus errors are vaguely useful for
> post-mortem diagnosis, but useless for recovery.

 Why do you think so?  Bus errors on reads are synchronous, so if the
handler can judge the error is recoverable (e.g. it was a correctable ECC
error), you can just restart.

 Bus errors on writes are asynchronous, but you may record the necessary
details (the cycle type, the address and the data involved) in chipset
registers and if the handler judges the conditions are recoverable, it may
fix up the error -- e.g. mark the page of physical memory as bad and
substitute another one, copying all other valid data plus the bits that
caused the failure. 

 A system has to be designed to handle such cases, though.  And obviously
if you get one of these errors as a result of a severe hardware damage,
you may not be able to recover, anyway.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From kevink@mips.com Fri Oct  4 16:14:33 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 16:14:34 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:21120 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123397AbSJDOOd>;
	Fri, 4 Oct 2002 16:14:33 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g94EEONf016525;
	Fri, 4 Oct 2002 07:14:24 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id HAA02433;
	Fri, 4 Oct 2002 07:14:51 -0700 (PDT)
Message-ID: <016201c26bb0$b8609a30$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Alan Cox" <alan@lxorguk.ukuu.org.uk>
Cc: <linux-mips@linux-mips.org>
References: <3D9D484B.4C149BD8@mips.com><200210041153.MAA12052@mudchute.algor.co.uk><3D9D855B.12128FA2@mips.com><1033734968.31839.5.camel@irongate.swansea.linux .org.uk> <00fe01c26ba6$04943480$10eca8c0@grendel><1033737330.31861.30.camel@irongate.swansea.linux.org.uk> <010e01c26ba8$2c9400d0$10eca8c0@grendel> <1033739046.31861.35.camel@irongate.swansea.linux.org.uk>
Subject: Re: Promblem with PREF (prefetching) in memcpy
Date: Fri, 4 Oct 2002 16:17:01 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 374
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

From: "Alan Cox" <alan@lxorguk.ukuu.org.uk>
> On Fri, 2002-10-04 at 14:15, Kevin D. Kissell wrote:
> > Which is excatly the point that Carsten was raising when he started this thread!
> > 
> > The question is how, i.e. throttle memcpy or thow away a "guard band" of RAM?
> 
> 
> The x86 code basically says
> 
> while(over 320 bytes left)
> {
> prefetch ahead
> copy bits
> }
> while(bytes left)
> copy bits

Which is safe, simple, and efficient, but does seem to have the property
that there's a "cursed" page in the system that can be randomly allocated
and which will be curiously slow on memcopy().  That might or might not
be a problem in the embedded application space.

            Regards,

            Kevin K.

From dom@mudchute.algor.co.uk Fri Oct  4 16:24:34 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 16:24:35 +0200 (CEST)
Received: from alg133.algor.co.uk ([62.254.210.133]:18915 "EHLO
	oval.algor.co.uk") by linux-mips.org with ESMTP id <S1123397AbSJDOYe>;
	Fri, 4 Oct 2002 16:24:34 +0200
Received: from mudchute.algor.co.uk (pubfw.algor.co.uk [62.254.210.129])
	by oval.algor.co.uk (8.11.6/8.10.1) with ESMTP id g94EONr10421;
	Fri, 4 Oct 2002 15:24:23 +0100 (BST)
Received: (from dom@localhost)
	by mudchute.algor.co.uk (8.8.5/8.8.5) id PAA12242;
	Fri, 4 Oct 2002 15:24:18 +0100 (BST)
Date: Fri, 4 Oct 2002 15:24:18 +0100 (BST)
Message-Id: <200210041424.PAA12242@mudchute.algor.co.uk>
From: Dominic Sweetman <dom@algor.co.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: "Kevin D. Kissell" <kevink@mips.com>
Cc: "Dominic Sweetman" <dom@algor.co.uk>,
	"Carsten Langgaard" <carstenl@mips.com>,
	"Ralf Baechle" <ralf@linux-mips.org>, <linux-mips@linux-mips.org>
Subject: Re: Promblem with PREF (prefetching) in memcpy
In-Reply-To: <00dd01c26ba2$b18f55b0$10eca8c0@grendel>
References: <3D9D484B.4C149BD8@mips.com>
	<200210041153.MAA12052@mudchute.algor.co.uk>
	<00dd01c26ba2$b18f55b0$10eca8c0@grendel>
X-Mailer: VM 6.34 under 19.16 "Lille" XEmacs Lucid
Return-Path: <dom@mudchute.algor.co.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 375
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dom@algor.co.uk
Precedence: bulk
X-list: linux-mips


> A prefetch to a well-formed, cacheable kseg0 address which 
> has no primary storage behind it (e.g. 0x04000000 on a system
> with 64M of physical memory) should, according to the spec,
> cause a cache fill to be initiated for the line at that address,

True (at the CPU boundary).

The system, having decoded the prefetch address and discovered it
accesses the 'launch at once on read' I/O register is not obliged to
resolve its dilemma by reading it.

It's not even obliged to generate a bus error: it's often less harmful
to just ignore it and pacify the CPU with some rubbish data...

... but let's suppose it doesn't:

> which will result in a bus error...

I assume that this is not theoretical, and that at least one MTI core
fails to ignore bus-error on prefetch?  (I take it that you're *not*
arguing that this would be wrong).  Oops.

If you enable bus errors, you must expect to have a bus error
exception handler - and one of its jobs is to quietly ignore the bogus
ones.

There are lots of other system hardware or software workarounds.

> ... if not a flat-out system hang.

It's not good to design such suicide regions into the memory
map... surely there's no MTI hardware which does *that*?

Dominic.

From alan@lxorguk.ukuu.org.uk Fri Oct  4 16:46:21 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 04 Oct 2002 16:46:21 +0200 (CEST)
Received: from pc1-cwma1-5-cust51.swa.cable.ntl.com ([80.5.120.51]:50937 "EHLO
	irongate.swansea.linux.org.uk") by linux-mips.org with ESMTP
	id <S1123397AbSJDOqV>; Fri, 4 Oct 2002 16:46:21 +0200
Received: from irongate.swansea.linux.org.uk (localhost [127.0.0.1])
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5) with ESMTP id g94Esnbg032394;
	Fri, 4 Oct 2002 15:54:50 +0100
Received: (from alan@localhost)
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5/Submit) id g94EsgKN032392;
	Fri, 4 Oct 2002 15:54:42 +0100
X-Authentication-Warning: irongate.swansea.linux.org.uk: alan set sender to alan@lxorguk.ukuu.org.uk using -f
Subject: Re: Promblem with PREF (prefetching) in memcpy
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: "Kevin D. Kissell" <kevink@mips.com>
Cc: linux-mips@linux-mips.org
In-Reply-To: <016201c26bb0$b8609a30$10eca8c0@grendel>
References: <3D9D484B.4C149BD8@mips.com><200210041153.MAA12052@mudchute.algor.co.uk><3D9
	 D855B.12128FA2@mips.com><1033734968.31839.5.camel@irongate.swansea.linux
	.org.uk>
	<00fe01c26ba6$04943480$10eca8c0@grendel><1033737330.31861.30.camel@irongate.
	 swansea.linux.org.uk> <010e01c26ba8$2c9400d0$10eca8c0@grendel>
	<1033739046.31861.35.camel@irongate.swansea.linux.org.uk> 
	<016201c26bb0$b8609a30$10eca8c0@grendel>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) 
Date: 04 Oct 2002 15:54:42 +0100
Message-Id: <1033743282.32384.37.camel@irongate.swansea.linux.org.uk>
Mime-Version: 1.0
Return-Path: <alan@lxorguk.ukuu.org.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 376
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: alan@lxorguk.ukuu.org.uk
Precedence: bulk
X-list: linux-mips

On Fri, 2002-10-04 at 15:17, Kevin D. Kissell wrote:
> Which is safe, simple, and efficient, but does seem to have the property
> that there's a "cursed" page in the system that can be randomly allocated
> and which will be curiously slow on memcopy().  That might or might not
> be a problem in the embedded application space.

Im curious why you think that. Its the same speed for all pages and all
copies. If anything it is more efficient because we don't drag 320 bytes
of crap across the bus that we dont actually want anyway.



From kwalker@broadcom.com Sat Oct  5 00:07:06 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 00:07:07 +0200 (CEST)
Received: from mms3.broadcom.com ([63.70.210.38]:63505 "HELO mms3.broadcom.com")
	by linux-mips.org with SMTP id <S1123253AbSJDWHG>;
	Sat, 5 Oct 2002 00:07:06 +0200
Received: from 63.70.210.1 by mms3.broadcom.com with ESMTP (Broadcom
 MMS-3 SMTP Relay (MMS v4.7);); Fri, 04 Oct 2002 15:06:29 -0700
X-Server-Uuid: 1e1caf3a-b686-11d4-a6a3-00508bfc9ae5
Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com
 [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP
 id PAA00429 for <linux-mips@linux-mips.org>; Fri, 4 Oct 2002 15:06:29
 -0700 (PDT)
Received: from dt-sj3-158.sj.broadcom.com (dt-sj3-158 [10.21.64.158]) by
 mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id
 g94M6NER016770 for <linux-mips@linux-mips.org>; Fri, 4 Oct 2002 15:06:
 28 -0700 (PDT)
Received: from broadcom.com (IDENT:kwalker@localhost [127.0.0.1]) by
 dt-sj3-158.sj.broadcom.com (8.9.3/8.9.3) with ESMTP id PAA06214 for
 <linux-mips@linux-mips.org>; Fri, 4 Oct 2002 15:06:23 -0700
Message-ID: <3D9E10DF.C4C305B2@broadcom.com>
Date: Fri, 04 Oct 2002 15:06:23 -0700
From: "Kip Walker" <kwalker@broadcom.com>
Organization: Broadcom Corp. BPBU
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.5-beta4va3.20 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: linux-mips@linux-mips.org
Subject: do_ri and EPC adjustment
X-WSS-ID: 1180CF6F74208-01-01
Content-Type: text/plain; 
 charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <kwalker@broadcom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 377
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kwalker@broadcom.com
Precedence: bulk
X-list: linux-mips

Sorry if this has already been discussed, but why does do_ri() adjust
the EPC in compute_return_epc() before delivering the SIGILL to a user
process?

Kip


From ralf@linux-mips.org Sat Oct  5 01:43:59 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 01:44:00 +0200 (CEST)
Received: from p508B51F7.dip.t-dialin.net ([80.139.81.247]:47528 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123253AbSJDXn7>; Sat, 5 Oct 2002 01:43:59 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g94NhjF24250;
	Sat, 5 Oct 2002 01:43:45 +0200
Date: Sat, 5 Oct 2002 01:43:45 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: "Kevin D. Kissell" <kevink@mips.com>
Cc: Dominic Sweetman <dom@algor.co.uk>,
	Carsten Langgaard <carstenl@mips.com>,
	linux-mips@linux-mips.org
Subject: Re: Promblem with PREF (prefetching) in memcpy
Message-ID: <20021005014345.B15883@linux-mips.org>
References: <3D9D484B.4C149BD8@mips.com> <200210041153.MAA12052@mudchute.algor.co.uk> <00dd01c26ba2$b18f55b0$10eca8c0@grendel>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <00dd01c26ba2$b18f55b0$10eca8c0@grendel>; from kevink@mips.com on Fri, Oct 04, 2002 at 02:36:39PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 378
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 04, 2002 at 02:36:39PM +0200, Kevin D. Kissell wrote:

> In case Carsten's reply wasn't clear enough, there is a loophole
> in the spec:  kseg0.  There is no TLB access to cause a TLB
> exception (which would suppress the operation and be nullifed),
> If the prefetch address is correctly aligned, so that there is no
> address exception.  In typical use, kseg0 is cacheable, which
> means that the second paragraph you quote does not apply.
> A prefetch to a well-formed, cacheable kseg0 address which 
> has no primary storage behind it (e.g. 0x04000000 on a system
> with 64M of physical memory) should, according to the spec,
> cause a cache fill to be initiated for the line at that address,
> which will result in a bus error, if not a flat-out system hang.

Traditionally the kernel leaves the last page of memory unused but this
has been lost in the many changes to the memory initialization code.
It's still a good idea with all the broken I/O chips and PCI bridges out
there - and can avoid a hard to track bug.

That only leaves stuff usermode device drivers that are using cachable
mappings in the dangerzone.  That should be a rare case, if at all.

  Ralf

From ralf@linux-mips.org Sat Oct  5 14:51:56 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 14:51:57 +0200 (CEST)
Received: from p508B51F7.dip.t-dialin.net ([80.139.81.247]:58801 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123897AbSJEMv4>; Sat, 5 Oct 2002 14:51:56 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g95CpiW31720;
	Sat, 5 Oct 2002 14:51:44 +0200
Date: Sat, 5 Oct 2002 14:51:42 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Kip Walker <kwalker@broadcom.com>
Cc: linux-mips@linux-mips.org
Subject: Re: do_ri and EPC adjustment
Message-ID: <20021005145142.A31477@linux-mips.org>
References: <3D9E10DF.C4C305B2@broadcom.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3D9E10DF.C4C305B2@broadcom.com>; from kwalker@broadcom.com on Fri, Oct 04, 2002 at 03:06:23PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 379
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 04, 2002 at 03:06:23PM -0700, Kip Walker wrote:

> Sorry if this has already been discussed, but why does do_ri() adjust
> the EPC in compute_return_epc() before delivering the SIGILL to a user
> process?

The original reason was to avoid having knowledge weather to skip over an
instruction or not from the signal return path.  For various reasons this
seems a wrong decission.

  Ralf

From hartvige@mips.com Sat Oct  5 17:13:10 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 17:13:11 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:15768 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123897AbSJEPNK>;
	Sat, 5 Oct 2002 17:13:10 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g95FCnNf020329;
	Sat, 5 Oct 2002 08:12:49 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id IAA20225;
	Sat, 5 Oct 2002 08:13:19 -0700 (PDT)
Received: (from hartvige@localhost)
	by copfs01.mips.com (8.11.4/8.9.0) id g95FCmI11618;
	Sat, 5 Oct 2002 17:12:48 +0200 (MEST)
From: Hartvig Ekner <hartvige@mips.com>
Message-Id: <200210051512.g95FCmI11618@copfs01.mips.com>
Subject: Re: Promblem with PREF (prefetching) in memcpy
To: ralf@linux-mips.org (Ralf Baechle)
Date: Sat, 5 Oct 2002 17:12:47 +0200 (MEST)
Cc: kevink@mips.com (Kevin D. Kissell),
	dom@algor.co.uk (Dominic Sweetman),
	carstenl@mips.com (Carsten Langgaard), linux-mips@linux-mips.org
In-Reply-To: <20021005014345.B15883@linux-mips.org> from "Ralf Baechle" at Oct 05, 2002 01:43:45 AM
X-Mailer: ELM [version 2.5 PL1]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <hartvige@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 380
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hartvige@mips.com
Precedence: bulk
X-list: linux-mips

I still say we should fix memcpy() (and everything else using prefetches)
never to prefetch anything it hasn't been asked to touch.

Apart from the performance loss of the current practice which Alan pointed
out, I think there is another very good reason to fix it: SW coherency.

Unless we want to do writeback/invalidate both before & after ownership
of buffers are given/taken from DMA IO devices, we need to get rid of 
the prefetches to unwanted areas. 

So that's two good arguments for fixing memcpy() as I see it. I haven't
really heard any arguments against it?

Whether the last page of physical memory needs to be thrown away or not seems
like a separate issue. Is this also done in x86 world? What are the issues
you're thinking about Ralf? Are there devices which will read/write beyond 
what they have been asked to?

/Hartvig


Ralf Baechle writes:
> 
> On Fri, Oct 04, 2002 at 02:36:39PM +0200, Kevin D. Kissell wrote:
> 
> > In case Carsten's reply wasn't clear enough, there is a loophole
> > in the spec:  kseg0.  There is no TLB access to cause a TLB
> > exception (which would suppress the operation and be nullifed),
> > If the prefetch address is correctly aligned, so that there is no
> > address exception.  In typical use, kseg0 is cacheable, which
> > means that the second paragraph you quote does not apply.
> > A prefetch to a well-formed, cacheable kseg0 address which 
> > has no primary storage behind it (e.g. 0x04000000 on a system
> > with 64M of physical memory) should, according to the spec,
> > cause a cache fill to be initiated for the line at that address,
> > which will result in a bus error, if not a flat-out system hang.
> 
> Traditionally the kernel leaves the last page of memory unused but this
> has been lost in the many changes to the memory initialization code.
> It's still a good idea with all the broken I/O chips and PCI bridges out
> there - and can avoid a hard to track bug.
> 
> That only leaves stuff usermode device drivers that are using cachable
> mappings in the dangerzone.  That should be a rare case, if at all.
> 
>   Ralf
> 
> 


-- 
 _    _   _____  ____     Hartvig Ekner        Mailto:hartvige@mips.com
 |\  /| | |____)(____                          Direct: +45 4486 5503
 | \/ | | |     _____)    MIPS Denmark         Switch: +45 4486 5555
T E C H N O L O G I E S   http://www.mips.com  Fax...: +45 4486 5556

From alan@lxorguk.ukuu.org.uk Sat Oct  5 17:47:32 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 17:47:33 +0200 (CEST)
Received: from pc1-cwma1-5-cust51.swa.cable.ntl.com ([80.5.120.51]:55293 "EHLO
	irongate.swansea.linux.org.uk") by linux-mips.org with ESMTP
	id <S1123897AbSJEPrc>; Sat, 5 Oct 2002 17:47:32 +0200
Received: from irongate.swansea.linux.org.uk (localhost [127.0.0.1])
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5) with ESMTP id g95FuJbg004134;
	Sat, 5 Oct 2002 16:56:20 +0100
Received: (from alan@localhost)
	by irongate.swansea.linux.org.uk (8.12.5/8.12.5/Submit) id g95FuHJZ004132;
	Sat, 5 Oct 2002 16:56:17 +0100
X-Authentication-Warning: irongate.swansea.linux.org.uk: alan set sender to alan@lxorguk.ukuu.org.uk using -f
Subject: Re: Promblem with PREF (prefetching) in memcpy
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Hartvig Ekner <hartvige@mips.com>
Cc: Ralf Baechle <ralf@linux-mips.org>,
	"Kevin D. Kissell" <kevink@mips.com>,
	Dominic Sweetman <dom@algor.co.uk>,
	Carsten Langgaard <carstenl@mips.com>,
	linux-mips@linux-mips.org
In-Reply-To: <200210051512.g95FCmI11618@copfs01.mips.com>
References: <200210051512.g95FCmI11618@copfs01.mips.com>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.8 (1.0.8-10) 
Date: 05 Oct 2002 16:56:16 +0100
Message-Id: <1033833377.4103.0.camel@irongate.swansea.linux.org.uk>
Mime-Version: 1.0
Return-Path: <alan@lxorguk.ukuu.org.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 381
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: alan@lxorguk.ukuu.org.uk
Precedence: bulk
X-list: linux-mips

On Sat, 2002-10-05 at 16:12, Hartvig Ekner wrote:
> Whether the last page of physical memory needs to be thrown away or not seems
> like a separate issue. Is this also done in x86 world? What are the issues
> you're thinking about Ralf? Are there devices which will read/write beyond 
> what they have been asked to?

For x86 it isnt done. There are no real wins for prefetching off the end
of memory on x86. Also its important on x86 we don't prefetch into other
memory as we may pull stuff out of the cache of other processors on an
SMP box, and that is expensive


From hjl@lucon.org Sat Oct  5 18:53:41 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 18:53:41 +0200 (CEST)
Received: from 12-234-88-146.client.attbi.com ([12.234.88.146]:60630 "EHLO
	lucon.org") by linux-mips.org with ESMTP id <S1123897AbSJEQxl>;
	Sat, 5 Oct 2002 18:53:41 +0200
Received: by lucon.org (Postfix, from userid 1000)
	id 4B43D2C59D; Sat,  5 Oct 2002 09:53:35 -0700 (PDT)
Date: Sat, 5 Oct 2002 09:53:35 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: "Steven J. Hill" <sjhill@realitydiluted.com>
Cc: linux-mips@linux-mips.org
Subject: gcc 3.2 is available for RedHat 7.3/mips/mipsel
Message-ID: <20021005095335.B4079@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 382
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

The gcc 3.2 mips/mipsel binary rpms for RedHat 7.3 are at

ftp://ftp.linux-mips.org/pub/linux/mips/redhat/7.3/test/

They come from my RedHat 8.0 MIPS port. The simple install instructions
are in INSTALL. I am interested in any feedbacks.


H.J.

From hjl@lucon.org Sat Oct  5 18:56:00 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 18:56:00 +0200 (CEST)
Received: from 12-234-88-146.client.attbi.com ([12.234.88.146]:61654 "EHLO
	lucon.org") by linux-mips.org with ESMTP id <S1123897AbSJEQ4A>;
	Sat, 5 Oct 2002 18:56:00 +0200
Received: by lucon.org (Postfix, from userid 1000)
	id 00E312C59D; Sat,  5 Oct 2002 09:55:53 -0700 (PDT)
Date: Sat, 5 Oct 2002 09:55:53 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: linux-mips@linux-mips.org
Subject: [hjl@lucon.org: Re: Does swap on IDE HD work on malta/mipsel?]
Message-ID: <20021005095553.A4302@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 383
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

My emails sent to linux-mips.org were bounced back. Has swap on IDE HD
been fixed?


H.J.
----- Forwarded message from "H. J. Lu" <hjl@lucon.org> -----

Date: Sat, 28 Sep 2002 00:34:11 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: linux-mips@linux-mips.org
Cc: Ralf Baechle <ralf@linux-mips.org>
Subject: Re: Does swap on IDE HD work on malta/mipsel?
User-Agent: Mutt/1.2.5.1i

On Fri, Sep 27, 2002 at 11:03:07PM -0700, H. J. Lu wrote:
> I compiled today's 2.4 kernel from CVS. Swap on IDE HD doesn't work. I
> got
> 
> # mkswap /dev/hda3
> Setting up swapspace version 1, size = 512060K
> # swapon /dev/hda3
> swapon: /dev/hda3: Invalid argument
> 
> and kernel reported
> 
> Unable to find swap-space signature
> 
> BTW, it used to work fine.
> 

After switching to 2.4.19 with

# cvs update -A -r linux_2_4_19 -dP

swap works fine.


H.J.

----- End forwarded message -----

From hjl@lucon.org Sat Oct  5 20:41:55 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 05 Oct 2002 20:41:56 +0200 (CEST)
Received: from 12-234-88-146.client.attbi.com ([12.234.88.146]:14295 "EHLO
	lucon.org") by linux-mips.org with ESMTP id <S1123897AbSJESlz>;
	Sat, 5 Oct 2002 20:41:55 +0200
Received: by lucon.org (Postfix, from userid 1000)
	id 0D0C72C59D; Sat,  5 Oct 2002 11:41:49 -0700 (PDT)
Date: Sat, 5 Oct 2002 11:41:48 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: linux-mips@linux-mips.org
Subject: Re: [hjl@lucon.org: Re: Does swap on IDE HD work on malta/mipsel?]
Message-ID: <20021005114148.A8625@lucon.org>
References: <20021005095553.A4302@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <20021005095553.A4302@lucon.org>; from hjl@lucon.org on Sat, Oct 05, 2002 at 09:55:53AM -0700
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 384
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

Swap seems to work on IDE HD with today's kernel.


H.J.
On Sat, Oct 05, 2002 at 09:55:53AM -0700, H. J. Lu wrote:
> My emails sent to linux-mips.org were bounced back. Has swap on IDE HD
> been fixed?
> 
> 
> H.J.
> ----- Forwarded message from "H. J. Lu" <hjl@lucon.org> -----
> 
> Date: Sat, 28 Sep 2002 00:34:11 -0700
> From: "H. J. Lu" <hjl@lucon.org>
> To: linux-mips@linux-mips.org
> Cc: Ralf Baechle <ralf@linux-mips.org>
> Subject: Re: Does swap on IDE HD work on malta/mipsel?
> User-Agent: Mutt/1.2.5.1i
> 
> On Fri, Sep 27, 2002 at 11:03:07PM -0700, H. J. Lu wrote:
> > I compiled today's 2.4 kernel from CVS. Swap on IDE HD doesn't work. I
> > got
> > 
> > # mkswap /dev/hda3
> > Setting up swapspace version 1, size = 512060K
> > # swapon /dev/hda3
> > swapon: /dev/hda3: Invalid argument
> > 
> > and kernel reported
> > 
> > Unable to find swap-space signature
> > 
> > BTW, it used to work fine.
> > 
> 
> After switching to 2.4.19 with
> 
> # cvs update -A -r linux_2_4_19 -dP
> 
> swap works fine.
> 
> 
> H.J.
> 
> ----- End forwarded message -----

From matthewhray@yahoo.com Mon Oct  7 02:30:41 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 02:30:42 +0200 (CEST)
Received: from web21008.mail.yahoo.com ([216.136.227.62]:3673 "HELO
	web21008.mail.yahoo.com") by linux-mips.org with SMTP
	id <S1123396AbSJGAal>; Mon, 7 Oct 2002 02:30:41 +0200
Message-ID: <20021007003035.52804.qmail@web21008.mail.yahoo.com>
Received: from [66.25.129.208] by web21008.mail.yahoo.com via HTTP; Sun, 06 Oct 2002 17:30:35 PDT
Date: Sun, 6 Oct 2002 17:30:35 -0700 (PDT)
From: "Matthew H. Ray" <matthewhray@yahoo.com>
Subject: Indigo 2 PROM question
To: linux-mips@linux-mips.org
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <matthewhray@yahoo.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 385
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: matthewhray@yahoo.com
Precedence: bulk
X-list: linux-mips

When I first got my Indigo2, it booted to the monitor
and keyboard and gave me access to the PROM.  I have
since installed Debian over a serial console and I can
no longer get it to use the monitor at all at boot
time (I'm thinking about trying to get the GU1-Extreme
to work).  Over the serial console, I've tried setting
the ConsoleOut=monitor(0), but that doesn't seem to do
the trick.  Is there a PROM guide written up somewhere
(the manuals from SGI are lacking in that feature)? 
Any suggestions will be appreciated.

Thanks,
Matthew H. Ray

__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com

From ilya@theIlya.com Mon Oct  7 03:27:35 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 03:27:36 +0200 (CEST)
Received: from 12-234-207-60.client.attbi.com ([12.234.207.60]:64192 "HELO
	gateway.total-knowledge.com") by linux-mips.org with SMTP
	id <S1123396AbSJGB1f>; Mon, 7 Oct 2002 03:27:35 +0200
Received: (qmail 2865 invoked by uid 502); 7 Oct 2002 01:27:28 -0000
Received: from localhost (sendmail-bs@127.0.0.1)
  by localhost with SMTP; 7 Oct 2002 01:27:28 -0000
Date: Sun, 6 Oct 2002 18:27:23 -0700 (PDT)
From: ilya@theIlya.com
X-X-Sender: ilya@ns2.total-knowledge.com
To: "Matthew H. Ray" <matthewhray@yahoo.com>
cc: linux-mips@linux-mips.org
Subject: Re: Indigo 2 PROM question
In-Reply-To: <20021007003035.52804.qmail@web21008.mail.yahoo.com>
Message-ID: <Pine.LNX.4.44.0210061827090.2842-100000@ns2.total-knowledge.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <ilya@theIlya.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 386
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ilya@theIlya.com
Precedence: bulk
X-list: linux-mips

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

setenv console g

- --------------------------------------------
Ilya Volynets
Chief Technology Officer
Total Knowledge
http://www.total-knowledge.com/
|===|
|?!.|
|===|

On Sun, 6 Oct 2002, Matthew H. Ray wrote:

> When I first got my Indigo2, it booted to the monitor
> and keyboard and gave me access to the PROM.  I have
> since installed Debian over a serial console and I can
> no longer get it to use the monitor at all at boot
> time (I'm thinking about trying to get the GU1-Extreme
> to work).  Over the serial console, I've tried setting
> the ConsoleOut=monitor(0), but that doesn't seem to do
> the trick.  Is there a PROM guide written up somewhere
> (the manuals from SGI are lacking in that feature)?
> Any suggestions will be appreciated.
>
> Thanks,
> Matthew H. Ray
>
> __________________________________________________
> Do you Yahoo!?
> Faith Hill - Exclusive Performances, Videos & More
> http://faith.yahoo.com
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
Comment: pgpenvelope 2.9.0 - http://pgpenvelope.sourceforge.net/

iD8DBQE9oOMA84S94bALfyURAnG9AJ9frIELStlExMIETFWON4SoYY4nUgCfZAtb
g7ug2kauywEYi5ZmAflTjhU=
=FLs5
-----END PGP SIGNATURE-----


From Colin.Helliwell@Zarlink.Com Mon Oct  7 09:48:44 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 09:48:45 +0200 (CEST)
Received: from newgate1.zarlink.com ([209.226.172.66]:50309 "EHLO
	semigate.zarlink.com") by linux-mips.org with ESMTP
	id <S1123396AbSJGHso>; Mon, 7 Oct 2002 09:48:44 +0200
Received: from ottmta01.zarlink.com (ottmta01 [134.199.14.110])
	by semigate.zarlink.com (8.10.2+Sun/8.10.2) with ESMTP id g977mbE24161
	for <linux-mips@linux-mips.org>; Mon, 7 Oct 2002 03:48:37 -0400 (EDT)
Subject: MIPS32/MIPS4K kernel compilation settings
To: linux-mips@linux-mips.org
X-Mailer: Lotus Notes Release 5.0.8  June 18, 2001
Message-ID: <OFFFD113F8.B40CC667-ON80256C4B.0028865D@zarlink.com>
From: Colin.Helliwell@Zarlink.Com
Date: Mon, 7 Oct 2002 08:48:26 +0100
X-MIMETrack: Serialize by Router on ottmta01/Semi(Release 5.0.11  |July 24, 2002) at 10/07/2002
 03:48:37 AM
MIME-Version: 1.0
Content-type: text/plain; charset=us-ascii
Return-Path: <Colin.Helliwell@Zarlink.Com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 387
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: Colin.Helliwell@Zarlink.Com
Precedence: bulk
X-list: linux-mips

Was just wondering why the (2.4.19) kernel compilation for MIPS4K systems
appears to be using the "-mips2" compiler setting - shouldn't it be using
-mips4 or -mips32 to get the full instruction set?
Thanks.





From yoichi_yuasa@montavista.co.jp Mon Oct  7 14:07:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 14:07:02 +0200 (CEST)
Received: from r-bu.iij4u.or.jp ([210.130.0.89]:11466 "EHLO r-bu.iij4u.or.jp")
	by linux-mips.org with ESMTP id <S1123396AbSJGMHB>;
	Mon, 7 Oct 2002 14:07:01 +0200
Received: from pudding ([202.216.29.50])
	by r-bu.iij4u.or.jp (8.11.6+IIJ/8.11.6) with SMTP id g97C6mq05247;
	Mon, 7 Oct 2002 21:06:49 +0900 (JST)
Date: Mon, 7 Oct 2002 21:04:16 +0900
From: Yoichi Yuasa <yoichi_yuasa@montavista.co.jp>
To: ralf@linux-mips.org
Cc: linux-mips@linux-mips.org
Subject: control reaches end of non-void function
Message-Id: <20021007210416.5cbf7f20.yoichi_yuasa@montavista.co.jp>
Organization: MontaVista Software Japan, Inc.
X-Mailer: Sylpheed version 0.8.3 (GTK+ 1.2.10; i686-pc-linux-gnu)
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="Multipart_Mon__7_Oct_2002_21:04:16_+0900_084fb308"
Return-Path: <yoichi_yuasa@montavista.co.jp>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 388
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: yoichi_yuasa@montavista.co.jp
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.

--Multipart_Mon__7_Oct_2002_21:04:16_+0900_084fb308
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hello Ralf,

When "mask" doesn't match in the switch conditions,
msg2str in arch/mips/lib/dump_tlb.c doesn't return value.

Please apply this patch.


Yoichi
--Multipart_Mon__7_Oct_2002_21:04:16_+0900_084fb308
Content-Type: text/plain;
 name="msg2str.patch"
Content-Disposition: attachment;
 filename="msg2str.patch"
Content-Transfer-Encoding: 7bit

diff -aruN --exclude=CVS --exclude=.cvsignore linux.orig/arch/mips/lib/dump_tlb.c linux/arch/mips/lib/dump_tlb.c
--- linux.orig/arch/mips/lib/dump_tlb.c	Sat Feb 23 10:41:28 2002
+++ linux/arch/mips/lib/dump_tlb.c	Mon Oct  7 19:54:18 2002
@@ -32,6 +32,8 @@
 	case PM_256M:	return "256Mb";
 #endif
 	}
+
+	return "unknown";
 }
 
 void dump_tlb(int first, int last)

--Multipart_Mon__7_Oct_2002_21:04:16_+0900_084fb308--

From ralf@linux-mips.org Mon Oct  7 14:19:02 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 14:19:03 +0200 (CEST)
Received: from p508B7444.dip.t-dialin.net ([80.139.116.68]:65155 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123396AbSJGMTC>; Mon, 7 Oct 2002 14:19:02 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g97CIi509981;
	Mon, 7 Oct 2002 14:18:44 +0200
Date: Mon, 7 Oct 2002 14:18:44 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Colin.Helliwell@Zarlink.Com
Cc: linux-mips@linux-mips.org
Subject: Re: MIPS32/MIPS4K kernel compilation settings
Message-ID: <20021007141844.A9410@linux-mips.org>
References: <OFFFD113F8.B40CC667-ON80256C4B.0028865D@zarlink.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <OFFFD113F8.B40CC667-ON80256C4B.0028865D@zarlink.com>; from Colin.Helliwell@Zarlink.Com on Mon, Oct 07, 2002 at 08:48:26AM +0100
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 389
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Mon, Oct 07, 2002 at 08:48:26AM +0100, Colin.Helliwell@Zarlink.Com wrote:

> Was just wondering why the (2.4.19) kernel compilation for MIPS4K systems
> appears to be using the "-mips2" compiler setting - shouldn't it be using
> -mips4 or -mips32 to get the full instruction set?

Because we want MIPS II only ;-)

There are serious problems with the use of 64-bit stuff in the 32-bit
kernel, so we can't use mips3, mips4 or mips64.  -mips32 works but is not
supported by all toolchains.  Anyway, mips32 doesn't deliver much that isn't
already part of MIPS II.

  Ralf

From js@convergence.de Mon Oct  7 16:48:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 16:48:01 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:14084 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123396AbSJGOsB>;
	Mon, 7 Oct 2002 16:48:01 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 17yZAj-0004Mp-00
	for <linux-mips@linux-mips.org>; Mon, 07 Oct 2002 16:47:49 +0200
Date: Mon, 7 Oct 2002 16:47:49 +0200
From: Johannes Stezenbach <js@convergence.de>
To: linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021007144749.GB16641@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	linux-mips@linux-mips.org
References: <20020916164034.GA12489@convergence.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20020916164034.GA12489@convergence.de>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 390
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

Hi all,

On Mon, Sep 16, 2002 at 06:40:34PM +0200, I wrote:
> 
> The NEC VR41xx CPU has no LL/SC instructions, so they must
> be emulated by the kernel, which slows down the test-and-set
> and compare-and-swap operations (used by linux-threads)
> considerably. For the VR41xx (and other CPUs which have
> branch-likely instructions), there exisits a workaround
> which enables userspace-only atomic operations, with minor
> help from the kernel: The kernel must guarantee that register
> k1 is not equal to some magic value after every transition
> to userspace.
> 
> Two things were left open in July:
> - find out the minimal amount of changes to the kernel
>   to guarantee k1 != MAGIC after eret
> - determine how to tell glibc to use the branch-likely
>   workaround instead of emulated LL/SC

Since there have been no follow-ups I must assume that
this topic is no longer of interest. Is this so? Or
is the way I approach it deemed inappropriate?


Regards,
Johannes

From kevink@mips.com Mon Oct  7 18:20:06 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 18:20:07 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:25538 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123396AbSJGQUG>;
	Mon, 7 Oct 2002 18:20:06 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g97GJINf025009;
	Mon, 7 Oct 2002 09:19:18 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id JAA28486;
	Mon, 7 Oct 2002 09:19:53 -0700 (PDT)
Message-ID: <01fd01c26e1d$add77240$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Johannes Stezenbach" <js@convergence.de>,
	<linux-mips@linux-mips.org>
References: <20020916164034.GA12489@convergence.de> <20021007144749.GB16641@convergence.de>
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Date: Mon, 7 Oct 2002 18:21:52 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 391
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

> Hi all,
> 
> On Mon, Sep 16, 2002 at 06:40:34PM +0200, I wrote:
> > 
> > The NEC VR41xx CPU has no LL/SC instructions, so they must
> > be emulated by the kernel, which slows down the test-and-set
> > and compare-and-swap operations (used by linux-threads)
> > considerably. For the VR41xx (and other CPUs which have
> > branch-likely instructions), there exisits a workaround
> > which enables userspace-only atomic operations, with minor
> > help from the kernel: The kernel must guarantee that register
> > k1 is not equal to some magic value after every transition
> > to userspace.
> > 
> > Two things were left open in July:
> > - find out the minimal amount of changes to the kernel
> >   to guarantee k1 != MAGIC after eret
> > - determine how to tell glibc to use the branch-likely
> >   workaround instead of emulated LL/SC
> 
> Since there have been no follow-ups I must assume that
> this topic is no longer of interest. Is this so? Or
> is the way I approach it deemed inappropriate?

When I first proposed the branch-likely hack last winter,
I thought it might be worth while to do a through code
inspection to determine what set of values could never
be returned in k1 (or k0 for all I care) if an exception
was taken, such that there would be no mods to the
kernel required whatsoever.  I spent a little time going 
down that path, and it does look at first glance as if one 
could guarantee that one will never come out of an exception 
with k1 equal to 0xffdadaff in current oss/linux-mips cvs
sources, but the guys at Sony, who have a big interest in 
this technique, given that the PS2 has no LL/SC,
prefered a more conservative approach which explicitly
clobbered the selective register on all exceptions,
even if it meant some small performance impact.
That's probably going to be a more reliable design,
though I would still consider leaving the TLB refill handler
untouched and counting on the fact that k1 must contain
a non-lethal EntryLo value on return from the exception.

As for glibc, the possibilities are numerous and I'm not
the guy who'd have to make it work.

            Regards,

            Kevin K.

From js@convergence.de Mon Oct  7 20:43:53 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 20:43:54 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:22020 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123396AbSJGSnx>;
	Mon, 7 Oct 2002 20:43:53 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 17ycr2-0004ad-00; Mon, 07 Oct 2002 20:43:44 +0200
Date: Mon, 7 Oct 2002 20:43:44 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Kevin D. Kissell" <kevink@mips.com>
Cc: linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021007184344.GA17548@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20020916164034.GA12489@convergence.de> <20021007144749.GB16641@convergence.de> <01fd01c26e1d$add77240$10eca8c0@grendel>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <01fd01c26e1d$add77240$10eca8c0@grendel>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 392
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Mon, Oct 07, 2002 at 06:21:52PM +0200, Kevin D. Kissell wrote:
>
> When I first proposed the branch-likely hack last winter,
> I thought it might be worth while to do a through code
> inspection to determine what set of values could never
> be returned in k1 (or k0 for all I care) if an exception
> was taken, such that there would be no mods to the
> kernel required whatsoever.  I spent a little time going 
> down that path, and it does look at first glance as if one 
> could guarantee that one will never come out of an exception 
> with k1 equal to 0xffdadaff in current oss/linux-mips cvs
> sources, but the guys at Sony, who have a big interest in 
> this technique, given that the PS2 has no LL/SC,
> prefered a more conservative approach which explicitly
> clobbered the selective register on all exceptions,
> even if it meant some small performance impact.
> That's probably going to be a more reliable design,
> though I would still consider leaving the TLB refill handler
> untouched and counting on the fact that k1 must contain
> a non-lethal EntryLo value on return from the exception.

In my original posting from Mon, Sep 16, 2002 (maybe I should
have reposted it in full?), a had appended a patch which
leaves the TLB handlers alone (k1 always ends up with an EntryLo value,
thus bit 31 is guaranteed to be 0), but explicitly sets k1 to zero in
RESTORE_SP_AND_RET.

> As for glibc, the possibilities are numerous and I'm not
> the guy who'd have to make it work.

The question is how the glibc can detect if
a) the CPU does not have LL/SC
b) the kernel guarantees k1 != MAGIC

I think the kernel should announce this explicitly.
In my patch from Sep 16 I used a sysctl, but that's
probably bad because glibc would rely on a real new
include/linux/sysctl.h.

I need some advice on this (maybe add a line to /proc/cpuinfo,
or create a new /proc entry? or add a sysmips call to get
this info?).

I also want to know if there's public interest to get such
a change in the kernel. If yes, I will try to get a matching
patch into glibc. If no, I will just post the current patch I
use to the list for the hackers to pick up.


Regards,
Johannes

From drow@false.org Mon Oct  7 20:51:26 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 20:51:27 +0200 (CEST)
Received: from crack.them.org ([65.125.64.184]:525 "EHLO crack.them.org")
	by linux-mips.org with ESMTP id <S1123396AbSJGSv0>;
	Mon, 7 Oct 2002 20:51:26 +0200
Received: from nevyn.them.org ([66.93.61.169] ident=mail)
	by crack.them.org with asmtp (Exim 3.12 #1 (Debian))
	id 17ydtq-0000xj-00; Mon, 07 Oct 2002 14:50:42 -0500
Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian))
	id 17ycye-0004KP-00; Mon, 07 Oct 2002 14:51:36 -0400
Date: Mon, 7 Oct 2002 14:51:36 -0400
From: Daniel Jacobowitz <dan@debian.org>
To: Johannes Stezenbach <js@convergence.de>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021007185136.GA16501@nevyn.them.org>
References: <20020916164034.GA12489@convergence.de> <20021007144749.GB16641@convergence.de> <01fd01c26e1d$add77240$10eca8c0@grendel> <20021007184344.GA17548@convergence.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20021007184344.GA17548@convergence.de>
User-Agent: Mutt/1.5.1i
Return-Path: <drow@false.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 393
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dan@debian.org
Precedence: bulk
X-list: linux-mips

On Mon, Oct 07, 2002 at 08:43:44PM +0200, Johannes Stezenbach wrote:
> The question is how the glibc can detect if
> a) the CPU does not have LL/SC
> b) the kernel guarantees k1 != MAGIC
> 
> I think the kernel should announce this explicitly.
> In my patch from Sep 16 I used a sysctl, but that's
> probably bad because glibc would rely on a real new
> include/linux/sysctl.h.
> 
> I need some advice on this (maybe add a line to /proc/cpuinfo,
> or create a new /proc entry? or add a sysmips call to get
> this info?).

You should be using an "aux vector"; see how PowerPC provides current
glibc with the size of a cache line.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

From brian@murphy.dk Mon Oct  7 21:44:50 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 21:44:51 +0200 (CEST)
Received: from port48.ds1-vbr.adsl.cybercity.dk ([212.242.58.113]:38222 "EHLO
	ubik.localnet") by linux-mips.org with ESMTP id <S1123396AbSJGTou>;
	Mon, 7 Oct 2002 21:44:50 +0200
Received: from murphy.dk (brm@brian.localnet [10.0.0.2])
	by ubik.localnet (8.12.3/8.12.3/Debian -4) with ESMTP id g97Jij6m024516
	for <linux-mips@linux-mips.org>; Mon, 7 Oct 2002 21:44:45 +0200
Message-ID: <3DA1E42C.3050900@murphy.dk>
Date: Mon, 07 Oct 2002 21:44:44 +0200
From: Brian Murphy <brian@murphy.dk>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020623 Debian/1.0.0-0.woody.1
X-Accept-Language: en
MIME-Version: 1.0
To: Linux-MIPS <linux-mips@linux-mips.org>
Subject: rsync suggestion
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Return-Path: <brian@murphy.dk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 394
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: brian@murphy.dk
Precedence: bulk
X-list: linux-mips

Is there any chance, Ralf, of an rsync server for the kernel cvs?
This  really speeds up making diffs and so on and removes load
from the central cvs server.

Anyone else like the idea?

/Brian


From brian@murphy.dk Mon Oct  7 21:47:36 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 21:47:36 +0200 (CEST)
Received: from port48.ds1-vbr.adsl.cybercity.dk ([212.242.58.113]:40782 "EHLO
	ubik.localnet") by linux-mips.org with ESMTP id <S1123396AbSJGTrg>;
	Mon, 7 Oct 2002 21:47:36 +0200
Received: from murphy.dk (brm@brian.localnet [10.0.0.2])
	by ubik.localnet (8.12.3/8.12.3/Debian -4) with ESMTP id g97JlU6m024532
	for <linux-mips@linux-mips.org>; Mon, 7 Oct 2002 21:47:30 +0200
Message-ID: <3DA1E4D2.9080400@murphy.dk>
Date: Mon, 07 Oct 2002 21:47:30 +0200
From: Brian Murphy <brian@murphy.dk>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020623 Debian/1.0.0-0.woody.1
X-Accept-Language: en
MIME-Version: 1.0
To: Linux-MIPS <linux-mips@linux-mips.org>
Subject: 2.5 status
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Return-Path: <brian@murphy.dk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 395
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: brian@murphy.dk
Precedence: bulk
X-list: linux-mips

What is the status of 2.5? Is there anyone who has a 2.5
kernel running on a mips(el) machine?

I have some problems with it and I'm wondering if they
are shared before I put too much work into it.

/Brian


From joey@infodrom.org Mon Oct  7 22:08:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 22:08:01 +0200 (CEST)
Received: from luonnotar.infodrom.org ([195.124.48.78]:42513 "EHLO
	luonnotar.infodrom.org") by linux-mips.org with ESMTP
	id <S1123396AbSJGUIB>; Mon, 7 Oct 2002 22:08:01 +0200
Received: by luonnotar.infodrom.org (Postfix, from userid 10)
	id E2C76366B53; Mon,  7 Oct 2002 22:07:54 +0200 (CEST)
Received: at Infodrom Oldenburg (/\##/\ Smail-3.2.0.102 1998-Aug-2 #2)
	from infodrom.org by finlandia.Infodrom.North.DE
	via smail from stdin
	id <m17ye2B-000pXcC@finlandia.Infodrom.North.DE>
	for linux-mips@linux-mips.org; Mon, 7 Oct 2002 21:59:19 +0200 (CEST) 
Date: Mon, 7 Oct 2002 21:59:19 +0200
From: Martin Schulze <joey@infodrom.org>
To: Brian Murphy <brian@murphy.dk>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Subject: Re: rsync suggestion
Message-ID: <20021007195919.GU21571@finlandia.infodrom.north.de>
References: <3DA1E42C.3050900@murphy.dk>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
In-Reply-To: <3DA1E42C.3050900@murphy.dk>
User-Agent: Mutt/1.4i
Return-Path: <joey@infodrom.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 396
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: joey@infodrom.org
Precedence: bulk
X-list: linux-mips

Brian Murphy wrote:
> Is there any chance, Ralf, of an rsync server for the kernel cvs?
> This  really speeds up making diffs and so on and removes load
> from the central cvs server.
> 
> Anyone else like the idea?

I like it.  But I don't count, so there's not much point in it...

Regards,

	Joey

-- 
In the beginning was the word, and the word was content-type: text/plain

From joey@infodrom.org Mon Oct  7 22:08:20 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 07 Oct 2002 22:08:21 +0200 (CEST)
Received: from luonnotar.infodrom.org ([195.124.48.78]:43025 "EHLO
	luonnotar.infodrom.org") by linux-mips.org with ESMTP
	id <S1123891AbSJGUIB>; Mon, 7 Oct 2002 22:08:01 +0200
Received: by luonnotar.infodrom.org (Postfix, from userid 10)
	id 03369366B57; Mon,  7 Oct 2002 22:07:55 +0200 (CEST)
Received: at Infodrom Oldenburg (/\##/\ Smail-3.2.0.102 1998-Aug-2 #2)
	from infodrom.org by finlandia.Infodrom.North.DE
	via smail from stdin
	id <m17ye2y-000pXcC@finlandia.Infodrom.North.DE>
	for linux-mips@linux-mips.org; Mon, 7 Oct 2002 22:00:08 +0200 (CEST) 
Date: Mon, 7 Oct 2002 22:00:08 +0200
From: Martin Schulze <joey@infodrom.org>
To: Brian Murphy <brian@murphy.dk>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Subject: Re: 2.5 status
Message-ID: <20021007200008.GV21571@finlandia.infodrom.north.de>
References: <3DA1E4D2.9080400@murphy.dk>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
In-Reply-To: <3DA1E4D2.9080400@murphy.dk>
User-Agent: Mutt/1.4i
Return-Path: <joey@infodrom.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 397
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: joey@infodrom.org
Precedence: bulk
X-list: linux-mips

Brian Murphy wrote:
> What is the status of 2.5? Is there anyone who has a 2.5
> kernel running on a mips(el) machine?
> 
> I have some problems with it and I'm wondering if they
> are shared before I put too much work into it.

I've heard that at least DECstation support is said to be broken/missing
/whatever from 2.5.  That didn't sound promising to me, unfortunately.

Regards,

	Joey

-- 
In the beginning was the word, and the word was content-type: text/plain

From matthewhray@yahoo.com Tue Oct  8 01:38:34 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 01:38:34 +0200 (CEST)
Received: from web21008.mail.yahoo.com ([216.136.227.62]:32620 "HELO
	web21008.mail.yahoo.com") by linux-mips.org with SMTP
	id <S1123917AbSJGXie>; Tue, 8 Oct 2002 01:38:34 +0200
Message-ID: <20021007233826.83839.qmail@web21008.mail.yahoo.com>
Received: from [66.25.129.208] by web21008.mail.yahoo.com via HTTP; Mon, 07 Oct 2002 16:38:26 PDT
Date: Mon, 7 Oct 2002 16:38:26 -0700 (PDT)
From: "Matthew H. Ray" <matthewhray@yahoo.com>
Subject: Re: Indigo 2 PROM question
To: ilya@theIlya.com
Cc: linux-mips@linux-mips.org
In-Reply-To: <Pine.LNX.4.44.0210061827090.2842-100000@ns2.total-knowledge.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <matthewhray@yahoo.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 398
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: matthewhray@yahoo.com
Precedence: bulk
X-list: linux-mips


--- ilya@theIlya.com wrote:

> setenv console g

Exactly what I needed.

Thanks,
Matthew H. Ray

__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com

From matthewhray@yahoo.com Tue Oct  8 01:40:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 01:40:02 +0200 (CEST)
Received: from web21003.mail.yahoo.com ([216.136.227.57]:59534 "HELO
	web21003.mail.yahoo.com") by linux-mips.org with SMTP
	id <S1123917AbSJGXkB>; Tue, 8 Oct 2002 01:40:01 +0200
Message-ID: <20021007233953.66195.qmail@web21003.mail.yahoo.com>
Received: from [66.25.129.208] by web21003.mail.yahoo.com via HTTP; Mon, 07 Oct 2002 16:39:53 PDT
Date: Mon, 7 Oct 2002 16:39:53 -0700 (PDT)
From: "Matthew H. Ray" <matthewhray@yahoo.com>
Subject: Indigo2 GUI1-Extreme Documentation
To: linux-mips@linux-mips.org
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <matthewhray@yahoo.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 399
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: matthewhray@yahoo.com
Precedence: bulk
X-list: linux-mips

I've installed Debian on my Indigo2 and I'm interested
in hacking on the video card in my system (a
GUI1-Extreme with the HQ 2.1 chipset).  I've searched
around quite a bit and have found little if any
documentation.  Can anyone direct me to any
documentation I might have missed, or is there simply
none to be found whatsoever?  Is there any chance of
the mailing list archive being resurrected?  Nothing
but broken links from the linux-mips.org webpage.

Thanks,
Matthew H. Ray

__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com

From ilya@theIlya.com Tue Oct  8 02:25:51 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 02:25:52 +0200 (CEST)
Received: from 12-234-207-60.client.attbi.com ([12.234.207.60]:23490 "HELO
	gateway.total-knowledge.com") by linux-mips.org with SMTP
	id <S1123917AbSJHAZv>; Tue, 8 Oct 2002 02:25:51 +0200
Received: (qmail 13122 invoked by uid 502); 8 Oct 2002 00:25:39 -0000
Received: from localhost (sendmail-bs@127.0.0.1)
  by localhost with SMTP; 8 Oct 2002 00:25:39 -0000
Date: Mon, 7 Oct 2002 17:25:33 -0700 (PDT)
From: ilya@theIlya.com
X-X-Sender: ilya@ns2.total-knowledge.com
To: "Matthew H. Ray" <matthewhray@yahoo.com>
cc: linux-mips@linux-mips.org
Subject: Re: Indigo2 GUI1-Extreme Documentation
In-Reply-To: <20021007233953.66195.qmail@web21003.mail.yahoo.com>
Message-ID: <Pine.LNX.4.44.0210071723290.14851-100000@ns2.total-knowledge.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <ilya@theIlya.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 400
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ilya@theIlya.com
Precedence: bulk
X-list: linux-mips

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

If there were any docs abvailable, there would be driver already :)
Your only chance to get info is bash it out of SGI... If that info still
exists there... Extreme is what, 10 years old? Something like that... If
someone could enlighten me on history here :)

- --------------------------------------------
Ilya Volynets
Chief Technology Officer
Total Knowledge
http://www.total-knowledge.com/
|===|
|?!.|
|===|

On Mon, 7 Oct 2002, Matthew H. Ray wrote:

> I've installed Debian on my Indigo2 and I'm interested
> in hacking on the video card in my system (a
> GUI1-Extreme with the HQ 2.1 chipset).  I've searched
> around quite a bit and have found little if any
> documentation.  Can anyone direct me to any
> documentation I might have missed, or is there simply
> none to be found whatsoever?  Is there any chance of
> the mailing list archive being resurrected?  Nothing
> but broken links from the linux-mips.org webpage.
>
> Thanks,
> Matthew H. Ray
>
> __________________________________________________
> Do you Yahoo!?
> Faith Hill - Exclusive Performances, Videos & More
> http://faith.yahoo.com
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
Comment: pgpenvelope 2.9.0 - http://pgpenvelope.sourceforge.net/

iD8DBQE9oiYC84S94bALfyURApgRAKDtYdtEAE5pxJPgxu1wf8zxLpbFvACgqtMe
XpsCrXdYAB1Besk/A9DevYY=
=hg3g
-----END PGP SIGNATURE-----


From ralf@linux-mips.org Tue Oct  8 05:19:41 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 05:19:42 +0200 (CEST)
Received: from p508B7444.dip.t-dialin.net ([80.139.116.68]:14733 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123925AbSJHDTl>; Tue, 8 Oct 2002 05:19:41 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g983JQo08153;
	Tue, 8 Oct 2002 05:19:26 +0200
Date: Tue, 8 Oct 2002 05:19:26 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Brian Murphy <brian@murphy.dk>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Subject: Re: 2.5 status
Message-ID: <20021008051926.A8115@linux-mips.org>
References: <3DA1E4D2.9080400@murphy.dk>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3DA1E4D2.9080400@murphy.dk>; from brian@murphy.dk on Mon, Oct 07, 2002 at 09:47:30PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 401
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Mon, Oct 07, 2002 at 09:47:30PM +0200, Brian Murphy wrote:

> What is the status of 2.5? Is there anyone who has a 2.5
> kernel running on a mips(el) machine?
> 
> I have some problems with it and I'm wondering if they
> are shared before I put too much work into it.

Only O2 is using mips64 atm, so it's horribly raw and untested.

  Ralf

From ralf@linux-mips.org Tue Oct  8 05:22:09 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 05:22:10 +0200 (CEST)
Received: from p508B7444.dip.t-dialin.net ([80.139.116.68]:16525 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123925AbSJHDWJ>; Tue, 8 Oct 2002 05:22:09 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g983Lqa08194;
	Tue, 8 Oct 2002 05:21:52 +0200
Date: Tue, 8 Oct 2002 05:21:52 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: "Matthew H. Ray" <matthewhray@yahoo.com>
Cc: linux-mips@linux-mips.org
Subject: Re: Indigo2 GUI1-Extreme Documentation
Message-ID: <20021008052152.B8115@linux-mips.org>
References: <20021007233953.66195.qmail@web21003.mail.yahoo.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <20021007233953.66195.qmail@web21003.mail.yahoo.com>; from matthewhray@yahoo.com on Mon, Oct 07, 2002 at 04:39:53PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 402
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Mon, Oct 07, 2002 at 04:39:53PM -0700, Matthew H. Ray wrote:

> I've installed Debian on my Indigo2 and I'm interested
> in hacking on the video card in my system (a
> GUI1-Extreme with the HQ 2.1 chipset).  I've searched
> around quite a bit and have found little if any
> documentation.  Can anyone direct me to any
> documentation I might have missed, or is there simply
> none to be found whatsoever?  Is there any chance of
> the mailing list archive being resurrected?  Nothing
> but broken links from the linux-mips.org webpage.

linux-mips.org moved to it's own machine.  We do keep archives on the
machine but atm they're not accessible as HTML.

  Ralf

From petkan@dce.bg Tue Oct  8 09:00:55 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 09:00:55 +0200 (CEST)
Received: from ns.dce.bg ([212.50.14.242]:27140 "EHLO mastika.dce.bg")
	by linux-mips.org with ESMTP id <S1123927AbSJHHAz>;
	Tue, 8 Oct 2002 09:00:55 +0200
Received: from localhost ([127.0.0.1])
	by mastika.dce.bg with esmtp (Exim 3.36 #1 (Debian))
	id 17yoMP-0000EB-00
	for <linux-mips@linux-mips.org>; Tue, 08 Oct 2002 10:00:53 +0300
Date: Tue, 8 Oct 2002 10:00:52 +0300 (EEST)
From: Petko Manolov <petkan@dce.bg>
To: linux-mips@linux-mips.org
Subject: cvs problem
Message-ID: <Pine.LNX.4.44.0210080957010.877-100000@mastika.dce.bg>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <petkan@dce.bg>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 403
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: petkan@dce.bg
Precedence: bulk
X-list: linux-mips

	Hi there,

is it just me or the cvs repository is out of order?  When i try to
checkout the linux kernel with:
	cvs -d:pserver:cvs@oss.sgi.com:/cvs co linux
I get:
	cvs server: cannot find module `linux' - ignored
	cvs [checkout aborted]: cannot expand modules

Other modules (such as gdb) are working.  Any ideas?..


		Petko


From ilya@theIlya.com Tue Oct  8 09:16:14 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 09:16:15 +0200 (CEST)
Received: from 12-234-207-60.client.attbi.com ([12.234.207.60]:1731 "HELO
	gateway.total-knowledge.com") by linux-mips.org with SMTP
	id <S1123927AbSJHHQO>; Tue, 8 Oct 2002 09:16:14 +0200
Received: (qmail 16835 invoked by uid 502); 8 Oct 2002 07:16:04 -0000
Received: from localhost (sendmail-bs@127.0.0.1)
  by localhost with SMTP; 8 Oct 2002 07:16:04 -0000
Date: Tue, 8 Oct 2002 00:15:58 -0700 (PDT)
From: ilya@theIlya.com
X-X-Sender: ilya@ns2.total-knowledge.com
To: Petko Manolov <petkan@dce.bg>
cc: linux-mips@linux-mips.org
Subject: Re: cvs problem
In-Reply-To: <Pine.LNX.4.44.0210080957010.877-100000@mastika.dce.bg>
Message-ID: <Pine.LNX.4.44.0210080014280.14851-100000@ns2.total-knowledge.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <ilya@theIlya.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 404
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ilya@theIlya.com
Precedence: bulk
X-list: linux-mips

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tue, 8 Oct 2002, Petko Manolov wrote:

> 	Hi there,
Hello.
> is it just me or the cvs repository is out of order?
It is both of you :)
CVS have moved to ftp.linux-mips.org

> When i try to
> checkout the linux kernel with:
> 	cvs -d:pserver:cvs@oss.sgi.com:/cvs co linux
cvs -d :pserver:cvs@ftp.linux-mips.org:/home/cvs co linux
it should be.

> I get:
> 	cvs server: cannot find module `linux' - ignored
> 	cvs [checkout aborted]: cannot expand modules
>
> Other modules (such as gdb) are working.  Any ideas?..
>
>
> 		Petko
>
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
Comment: pgpenvelope 2.9.0 - http://pgpenvelope.sourceforge.net/

iD8DBQE9ooYz84S94bALfyURAopRAJ9b7j9MKAzBKXkI5nepuCv2GoCwMwCfUseA
CRaQMfO3X4GsYvDVGn4T/Ns=
=Jt7C
-----END PGP SIGNATURE-----


From kevink@mips.com Tue Oct  8 09:37:46 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 08 Oct 2002 09:37:47 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:21974 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123927AbSJHHhq>;
	Tue, 8 Oct 2002 09:37:46 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g987ZSNf028100;
	Tue, 8 Oct 2002 00:35:28 -0700 (PDT)
Received: from grendel (grendel [192.168.236.16])
	by newman.mips.com (8.9.3/8.9.0) with SMTP id AAA07277;
	Tue, 8 Oct 2002 00:36:03 -0700 (PDT)
Message-ID: <004e01c26e9d$abfa65b0$10eca8c0@grendel>
From: "Kevin D. Kissell" <kevink@mips.com>
To: "Johannes Stezenbach" <js@convergence.de>
Cc: <linux-mips@linux-mips.org>
References: <20020916164034.GA12489@convergence.de> <20021007144749.GB16641@convergence.de> <01fd01c26e1d$add77240$10eca8c0@grendel> <20021007184344.GA17548@convergence.de>
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Date: Tue, 8 Oct 2002 09:38:17 +0200
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.50.4807.1700
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4910.0300
Return-Path: <kevink@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 405
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kevink@mips.com
Precedence: bulk
X-list: linux-mips

> On Mon, Oct 07, 2002 at 06:21:52PM +0200, Kevin D. Kissell wrote:
> >
> > When I first proposed the branch-likely hack last winter,
> > I thought it might be worth while to do a through code
> > inspection to determine what set of values could never
> > be returned in k1 (or k0 for all I care) if an exception
> > was taken, such that there would be no mods to the
> > kernel required whatsoever.  I spent a little time going 
> > down that path, and it does look at first glance as if one 
> > could guarantee that one will never come out of an exception 
> > with k1 equal to 0xffdadaff in current oss/linux-mips cvs
> > sources, but the guys at Sony, who have a big interest in 
> > this technique, given that the PS2 has no LL/SC,
> > prefered a more conservative approach which explicitly
> > clobbered the selective register on all exceptions,
> > even if it meant some small performance impact.
> > That's probably going to be a more reliable design,
> > though I would still consider leaving the TLB refill handler
> > untouched and counting on the fact that k1 must contain
> > a non-lethal EntryLo value on return from the exception.
> 
> In my original posting from Mon, Sep 16, 2002 (maybe I should
> have reposted it in full?), a had appended a patch which
> leaves the TLB handlers alone (k1 always ends up with an EntryLo value,
> thus bit 31 is guaranteed to be 0), but explicitly sets k1 to zero in
> RESTORE_SP_AND_RET.

Note that you've still got a handful of erets that aren't
generated by RESTORE_SP_AND_RET that we
would need to "hunt down and kill" if we were serious
about nailing all non-TLB-miss cases explicitly.
(gdb-stub.S, head.S).

> > As for glibc, the possibilities are numerous and I'm not
> > the guy who'd have to make it work.
> 
> The question is how the glibc can detect if
> a) the CPU does not have LL/SC
> b) the kernel guarantees k1 != MAGIC
> 
> I think the kernel should announce this explicitly.
> In my patch from Sep 16 I used a sysctl, but that's
> probably bad because glibc would rely on a real new
> include/linux/sysctl.h.
> 
> I need some advice on this (maybe add a line to /proc/cpuinfo,
> or create a new /proc entry? or add a sysmips call to get
> this info?).

/proc/cpuinfo strikes me as being a better mechanism
than creating a new system call variant, but again, I
would defer to a large measure to the glibc maintainers.
If we do enhance cpuinfo, I note that there are some
other parameters that seem to be in the queue to go
into that data structure, and that they should presumably
be swept up in any such revision.  Is there a reason why
/proc/cpuinfo information doesn't have a version field
to let users know what level of information they are getting,
by the way?

> I also want to know if there's public interest to get such
> a change in the kernel. If yes, I will try to get a matching
> patch into glibc. If no, I will just post the current patch I
> use to the list for the hackers to pick up.

There is certainly interest at MIPS in seeing this mod 
propagated. I'd really like to see the Playstation 2 running 
something a lot closer to manistream MIPS/Linux, which 
isn't going to happen so long as the only choices on offer 
for synchronization on LL/SC-less CPUs are system calls 
and OS emulation of LL/SC.  People running Linux 
on Vr41xx-based PDAs would get a performance benefit 
as well.  Keep in mind that the majority of developers on
this list have either CPUs that support LL/SC, or really
old systems that have neither LL/SC nor branch likely,
which may account for a lack of enthusiasm for the project,
particuarly coming as it does not too long after a long 
debate on system calls versus emulation.

            Regards,

            Kevin K. 

From ralf@uni-koblenz.de Wed Oct  9 14:20:07 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 09 Oct 2002 14:20:08 +0200 (CEST)
Received: from p508B750A.dip.t-dialin.net ([80.139.117.10]:8105 "EHLO
	p508B750A.dip.t-dialin.net") by linux-mips.org with ESMTP
	id <S1123396AbSJIMUH>; Wed, 9 Oct 2002 14:20:07 +0200
Received: (ralf@3ffe:8260:2020:2::20) by ralf.linux-mips.org
	id <S867025AbSJIMTx>; Wed, 9 Oct 2002 14:19:53 +0200
Date: Wed, 9 Oct 2002 14:19:53 +0200
From: Ralf Baechle <ralf@uni-koblenz.de>
To: Rob Lembree <lembree@metrolink.com>
Cc: linux-mips@linux-mips.org
Subject: Re: hints on wait queue bug?
Message-ID: <20021009141953.B3611@bacchus.dhis.org>
References: <1030652956.1536.21.camel@ripple.nh.metrolink.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <1030652956.1536.21.camel@ripple.nh.metrolink.com>; from lembree@metrolink.com on Thu, Aug 29, 2002 at 04:29:16PM -0400
X-Accept-Language: de,en,fr
Return-Path: <ralf@uni-koblenz.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 406
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@uni-koblenz.de
Precedence: bulk
X-list: linux-mips

On Thu, Aug 29, 2002 at 04:29:16PM -0400, Rob Lembree wrote:

> I've got a problem where lots of io to the console seems
> to break something in the kernel, resulting in a segfault,
> along with a kernel error.
> 
> I dove into it, and found that it's related to wait queue
> stuff.  I turned on the wait queue debugging, and got the
> following, just prior to things going off the deep end.
> 
> bad magic 802ccb24 (should be 802ccb2c), kernel BUG at sched.c:729!
> 
> Is there some tutorial on this stuff somewhere (besides
> reading the code -- I'm doing that now!)  
> 
> Has this stuff changed a great deal since 2.4.5 (when this
> code last worked correctly)?

No.  Typicall such bugs are caused by memory corruption but as in your
case the magic number which is an address is only off by eight bytes
you might also consider a tool bug, so I suggest disassembling the
kernel binary and checking if it's getting initialized correctly.

  Ralf

From Colin.Helliwell@Zarlink.Com Wed Oct  9 15:04:08 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 09 Oct 2002 15:04:09 +0200 (CEST)
Received: from newgate1.zarlink.com ([209.226.172.66]:55907 "EHLO
	semigate.zarlink.com") by linux-mips.org with ESMTP
	id <S1123396AbSJINEI>; Wed, 9 Oct 2002 15:04:08 +0200
Received: from ottmta01.zarlink.com (ottmta01 [134.199.14.110])
	by semigate.zarlink.com (8.10.2+Sun/8.10.2) with ESMTP id g99D3wx14474;
	Wed, 9 Oct 2002 09:03:58 -0400 (EDT)
Subject: Re: hints on wait queue bug?
To: linux-mips@linux-mips.org, Rob Lembree <lembree@metrolink.com>
X-Mailer: Lotus Notes Release 5.0.8  June 18, 2001
Message-ID: <OFCA4057FB.AF21BBC1-ON80256C4D.0046ED5D@zarlink.com>
From: Colin.Helliwell@Zarlink.Com
Date: Wed, 9 Oct 2002 14:03:54 +0100
X-MIMETrack: Serialize by Router on ottmta01/Semi(Release 5.0.11  |July 24, 2002) at 10/09/2002
 09:04:00 AM
MIME-Version: 1.0
Content-type: text/plain; charset=us-ascii
Return-Path: <Colin.Helliwell@Zarlink.Com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 407
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: Colin.Helliwell@Zarlink.Com
Precedence: bulk
X-list: linux-mips


Does your code use the DECLARE_WAIT_QUEUE_HEAD macro?
If so : I had a similar-sounding problem (on a PowerPC platform) where if
this macro was used to declare+initialise the queue, the initialisation did
not occur correctly. Performing the initialisation separately at runtime
with "init_waitqueue_head(&wqh)" corrects the problem. Our working
assumption is that it was perhaps a PPC gcc bug (I have seen mention of it
on a PPC msg board), but it could be more widespread. I have a piece of
test code which showed the problem, if you want to try it.




                                                                                                                                           
                      Ralf Baechle                                                                                                         
                      <ralf@uni-koblenz.de>        To:       Rob Lembree <lembree@metrolink.com>                                           
                      Sent by:                     cc:       linux-mips@linux-mips.org                                                     
                      linux-mips-bounce@lin        Subject:  Re: hints on wait queue bug?                                                  
                      ux-mips.org                                                                                                          
                                                                                                                                           
                                                                                                                                           
                      09-Oct-2002 01:19 PM                                                                                                 
                                                                                                                                           
                                                                                                                                           




On Thu, Aug 29, 2002 at 04:29:16PM -0400, Rob Lembree wrote:

> I've got a problem where lots of io to the console seems
> to break something in the kernel, resulting in a segfault,
> along with a kernel error.
>
> I dove into it, and found that it's related to wait queue
> stuff.  I turned on the wait queue debugging, and got the
> following, just prior to things going off the deep end.
>
> bad magic 802ccb24 (should be 802ccb2c), kernel BUG at sched.c:729!
>
> Is there some tutorial on this stuff somewhere (besides
> reading the code -- I'm doing that now!)
>
> Has this stuff changed a great deal since 2.4.5 (when this
> code last worked correctly)?

No.  Typicall such bugs are caused by memory corruption but as in your
case the magic number which is an address is only off by eight bytes
you might also consider a tool bug, so I suggest disassembling the
kernel binary and checking if it's getting initialized correctly.

  Ralf







From carstenl@mips.com Thu Oct 10 13:29:13 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 10 Oct 2002 13:29:14 +0200 (CEST)
Received: from ftp.mips.com ([206.31.31.227]:64910 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123398AbSJJL3N>;
	Thu, 10 Oct 2002 13:29:13 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g9ABQwNf009581;
	Thu, 10 Oct 2002 04:26:59 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id EAA17783;
	Thu, 10 Oct 2002 04:27:35 -0700 (PDT)
Received: from mips.com (IDENT:carstenl@coplin20 [192.168.205.90])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g9ABQub14332;
	Thu, 10 Oct 2002 13:26:57 +0200 (MEST)
Message-ID: <3DA563FF.4484A818@mips.com>
Date: Thu, 10 Oct 2002 13:26:55 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.9-31-P3-UP-WS-jg i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: 64-bit kernel patch
Content-Type: multipart/mixed;
 boundary="------------A9737B481F110F90A6C1E29B"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 408
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------A9737B481F110F90A6C1E29B
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

Here is yet another patch for the 64-bit syscall wrapper.

/Carsten


--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------A9737B481F110F90A6C1E29B
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part5.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part5.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.16
diff -u -r1.42.2.16 linux32.c
--- arch/mips64/kernel/linux32.c	3 Oct 2002 09:38:26 -0000	1.42.2.16
+++ arch/mips64/kernel/linux32.c	10 Oct 2002 11:22:40 -0000
@@ -751,12 +751,17 @@
 	int ret;
 	struct statfs s;
 	mm_segment_t old_fs = get_fs();
-
-	set_fs (KERNEL_DS);
-	ret = sys_statfs((const char *)path, &s);
-	set_fs (old_fs);
-	if (put_statfs(buf, &s))
-		return -EFAULT;
+	char *pth;
+	
+	pth = getname (path);
+	ret = PTR_ERR(pth);
+	if (!IS_ERR(pth)) {
+		set_fs (KERNEL_DS);
+		ret = sys_statfs((const char *)path, &s);
+		set_fs (old_fs);
+		if (!ret && put_statfs(buf, &s))
+			return -EFAULT;
+	}
 	return ret;
 }
 
@@ -1652,6 +1657,19 @@
         unsigned short          shm_nattch;
 };
 
+struct shmid64_ds32 {
+	struct ipc64_perm32 shm_perm;
+	__kernel_size_t32 shm_segsz;
+	__kernel_time_t32 shm_atime;
+	__kernel_time_t32 shm_dtime;
+	__kernel_time_t32 shm_ctime;
+	__kernel_pid_t32 shm_cpid;
+	__kernel_pid_t32 shm_lpid;
+	unsigned int shm_nattch;
+	unsigned int __unused1;
+	unsigned int __unused2;
+};
+
 struct ipc_kludge32 {
 	u32 msgp;
 	s32 msgtyp;
@@ -1945,7 +1963,8 @@
 	int err = -EFAULT, err2;
 	struct shmid_ds s;
 	struct shmid64_ds s64;
-	struct shmid_ds32 *up = (struct shmid_ds32 *)uptr;
+	struct shmid_ds32 *up32 = (struct shmid_ds32 *)uptr;
+	struct shmid64_ds32 *up64 = (struct shmid64_ds32 *)uptr;
 	mm_segment_t old_fs;
 	struct shm_info32 {
 		int used_ids;
@@ -1954,18 +1973,24 @@
 	} *uip = (struct shm_info32 *)uptr;
 	struct shm_info si;
 
-	switch (second) {
-
+	switch (second & ~IPC_64) {
 	case IPC_INFO:
+		second = IPC_INFO; /* So that we don't have to translate it */
 	case IPC_RMID:
 	case SHM_LOCK:
 	case SHM_UNLOCK:
 		err = sys_shmctl (first, second, (struct shmid_ds *)uptr);
 		break;
 	case IPC_SET:
-		err = get_user (s.shm_perm.uid, &up->shm_perm.uid);
-		err |= __get_user (s.shm_perm.gid, &up->shm_perm.gid);
-		err |= __get_user (s.shm_perm.mode, &up->shm_perm.mode);
+		if (second & IPC_64) {
+			err = get_user(s.shm_perm.uid, &up64->shm_perm.uid);
+			err |= get_user(s.shm_perm.gid, &up64->shm_perm.gid);
+			err |= get_user(s.shm_perm.mode, &up64->shm_perm.mode);
+		} else {
+			err = get_user(s.shm_perm.uid, &up32->shm_perm.uid);
+			err |= get_user(s.shm_perm.gid, &up32->shm_perm.gid);
+			err |= get_user(s.shm_perm.mode, &up32->shm_perm.mode);
+		}
 		if (err)
 			break;
 		old_fs = get_fs ();
@@ -1982,23 +2007,45 @@
 		set_fs (old_fs);
 		if (err < 0)
 			break;
-		err2 = put_user (s64.shm_perm.key, &up->shm_perm.key);
-		err2 |= __put_user (s64.shm_perm.uid, &up->shm_perm.uid);
-		err2 |= __put_user (s64.shm_perm.gid, &up->shm_perm.gid);
-		err2 |= __put_user (s64.shm_perm.cuid,
-				    &up->shm_perm.cuid);
-		err2 |= __put_user (s64.shm_perm.cgid,
-				    &up->shm_perm.cgid);
-		err2 |= __put_user (s64.shm_perm.mode,
-				    &up->shm_perm.mode);
-		err2 |= __put_user (s64.shm_perm.seq, &up->shm_perm.seq);
-		err2 |= __put_user (s64.shm_atime, &up->shm_atime);
-		err2 |= __put_user (s64.shm_dtime, &up->shm_dtime);
-		err2 |= __put_user (s64.shm_ctime, &up->shm_ctime);
-		err2 |= __put_user (s64.shm_segsz, &up->shm_segsz);
-		err2 |= __put_user (s64.shm_nattch, &up->shm_nattch);
-		err2 |= __put_user (s64.shm_cpid, &up->shm_cpid);
-		err2 |= __put_user (s64.shm_lpid, &up->shm_lpid);
+		if (second & IPC_64) {
+			if (!access_ok(VERIFY_WRITE, up64, sizeof(*up64))) {
+				err = -EFAULT;
+				break;
+			}
+			err2 = __put_user(s64.shm_perm.key, &up64->shm_perm.key);
+			err2 |= __put_user(s64.shm_perm.uid, &up64->shm_perm.uid);
+			err2 |= __put_user(s64.shm_perm.gid, &up64->shm_perm.gid);
+			err2 |= __put_user(s64.shm_perm.cuid, &up64->shm_perm.cuid);
+			err2 |= __put_user(s64.shm_perm.cgid, &up64->shm_perm.cgid);
+			err2 |= __put_user(s64.shm_perm.mode, &up64->shm_perm.mode);
+			err2 |= __put_user(s64.shm_perm.seq, &up64->shm_perm.seq);
+			err2 |= __put_user(s64.shm_atime, &up64->shm_atime);
+			err2 |= __put_user(s64.shm_dtime, &up64->shm_dtime);
+			err2 |= __put_user(s64.shm_ctime, &up64->shm_ctime);
+			err2 |= __put_user(s64.shm_segsz, &up64->shm_segsz);
+			err2 |= __put_user(s64.shm_nattch, &up64->shm_nattch);
+			err2 |= __put_user(s64.shm_cpid, &up64->shm_cpid);
+			err2 |= __put_user(s64.shm_lpid, &up64->shm_lpid);
+		} else {
+			if (!access_ok(VERIFY_WRITE, up32, sizeof(*up32))) {
+				err = -EFAULT;
+				break;
+			}
+			err2 = __put_user(s64.shm_perm.key, &up32->shm_perm.key);
+			err2 |= __put_user(s64.shm_perm.uid, &up32->shm_perm.uid);
+			err2 |= __put_user(s64.shm_perm.gid, &up32->shm_perm.gid);
+			err2 |= __put_user(s64.shm_perm.cuid, &up32->shm_perm.cuid);
+			err2 |= __put_user(s64.shm_perm.cgid, &up32->shm_perm.cgid);
+			err2 |= __put_user(s64.shm_perm.mode, &up32->shm_perm.mode);
+			err2 |= __put_user(s64.shm_perm.seq, &up32->shm_perm.seq);
+			err2 |= __put_user(s64.shm_atime, &up32->shm_atime);
+			err2 |= __put_user(s64.shm_dtime, &up32->shm_dtime);
+			err2 |= __put_user(s64.shm_ctime, &up32->shm_ctime);
+			err2 |= __put_user(s64.shm_segsz, &up32->shm_segsz);
+			err2 |= __put_user(s64.shm_nattch, &up32->shm_nattch);
+			err2 |= __put_user(s64.shm_cpid, &up32->shm_cpid);
+			err2 |= __put_user(s64.shm_lpid, &up32->shm_lpid);
+		}
 		if (err2)
 			err = -EFAULT;
 		break;
@@ -2022,7 +2069,11 @@
 			err = -EFAULT;
 		break;
 
+	default:
+		err = - EINVAL;
+		break;
 	}
+
 	return err;
 }
 

--------------A9737B481F110F90A6C1E29B--


From ralf@linux-mips.org Thu Oct 10 13:41:33 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 10 Oct 2002 13:41:34 +0200 (CEST)
Received: from p508B72B4.dip.t-dialin.net ([80.139.114.180]:43141 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123935AbSJJLld>; Thu, 10 Oct 2002 13:41:33 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9ABfDR03602;
	Thu, 10 Oct 2002 13:41:13 +0200
Date: Thu, 10 Oct 2002 13:41:12 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Carsten Langgaard <carstenl@mips.com>
Cc: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	linux-mips@linux-mips.org
Subject: Re: 64-bit kernel patch
Message-ID: <20021010134112.A2121@linux-mips.org>
References: <3DA563FF.4484A818@mips.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3DA563FF.4484A818@mips.com>; from carstenl@mips.com on Thu, Oct 10, 2002 at 01:26:55PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 409
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Thu, Oct 10, 2002 at 01:26:55PM +0200, Carsten Langgaard wrote:

> Here is yet another patch for the 64-bit syscall wrapper.

Thanks for this obvious fix ...

  Ralf

From atulsrivastava9@rediffmail.com Thu Oct 10 15:03:12 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 10 Oct 2002 15:03:13 +0200 (CEST)
Received: from webmail23.rediffmail.com ([203.199.83.145]:43974 "HELO
	webmail23.rediffmail.com") by linux-mips.org with SMTP
	id <S1123398AbSJJNDM>; Thu, 10 Oct 2002 15:03:12 +0200
Received: (qmail 25650 invoked by uid 510); 10 Oct 2002 13:07:04 -0000
Date: 10 Oct 2002 13:07:04 -0000
Message-ID: <20021010130704.25649.qmail@webmail23.rediffmail.com>
Received: from unknown (202.54.89.103) by rediffmail.com via HTTP; 10 Oct 2002 13:07:04 -0000
MIME-Version: 1.0
From: "atul srivastava" <atulsrivastava9@rediffmail.com>
Reply-To: "atul srivastava" <atulsrivastava9@rediffmail.com>
To: linux-mips@linux-mips.org
Subject: ioremapping pci mem window points to same location
Content-type: text/plain;
	format=flowed
Content-Disposition: inline
Return-Path: <atulsrivastava9@rediffmail.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 410
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: atulsrivastava9@rediffmail.com
Precedence: bulk
X-list: linux-mips

Hello,

in asm-mips/io.h
ioremap() just mask the first three bits then add the KSEG offset. 
[ (address & 0x1fffffff) + KSEG ]

suppose my pci bridge provides two memory windows
physical 40000000  to 40ffffff   and
physical 60000000  to 60ffffff

doesn't after iorremapping addresses in above two ranges
will point to same location after applying mathematics
of ioremap() ..how i will take care of this ..should i use only 
one window at a time.

Best Regards,
Ashish
__________________________________________________________
Give your Company an email address like
ravi @ ravi-exports.com.  Sign up for Rediffmail Pro today!
Know more. http://www.rediffmailpro.com/signup/


From hjl@lucon.org Thu Oct 10 19:23:28 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 10 Oct 2002 19:23:29 +0200 (CEST)
Received: from 12-234-88-146.client.attbi.com ([12.234.88.146]:40168 "EHLO
	lucon.org") by linux-mips.org with ESMTP id <S1122961AbSJJRX2>;
	Thu, 10 Oct 2002 19:23:28 +0200
Received: by lucon.org (Postfix, from userid 1000)
	id 8C6052C4EC; Thu, 10 Oct 2002 10:23:17 -0700 (PDT)
Date: Thu, 10 Oct 2002 10:23:17 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: linux-mips@linux-mips.org
Subject: PATCH: Support strace
Message-ID: <20021010102317.A20613@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 411
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

strace includes <asm/system.h>. gcc doesn't like asmlinkage. This patch
helps strace.


H.J.
--- include/asm-mips/system.h.kernel	Sat Oct  5 10:39:23 2002
+++ include/asm-mips/system.h	Thu Oct 10 09:47:51 2002
@@ -24,6 +24,8 @@
 #include <asm/addrspace.h>
 #include <asm/ptrace.h>
 
+#ifdef __KERNEL__
+
 __asm__ (
 	".macro\t__sti\n\t"
 	".set\tpush\n\t"
@@ -322,4 +324,6 @@ extern void __die_if_kernel(const char *
 #define die_if_kernel(msg, regs)					\
 	__die_if_kernel(msg, regs, __FILE__ ":", __FUNCTION__, __LINE__)
 
+#endif /* __KERNEL__ */
+
 #endif /* _ASM_SYSTEM_H */

From lyle@zevion.com Fri Oct 11 19:35:04 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 11 Oct 2002 19:35:04 +0200 (CEST)
Received: from medtron.medtronic.COM ([144.15.157.122]:13726 "EHLO
	medtron.medtronic.com") by linux-mips.org with ESMTP
	id <S1123398AbSJKRfE>; Fri, 11 Oct 2002 19:35:04 +0200
Received: from RADIUM (localhost [127.0.0.1])
	by medtron.medtronic.com (8.10.1/8.10.1) with SMTP id g9BHYrw16860
	for <linux-mips@linux-mips.org>; Fri, 11 Oct 2002 12:34:53 -0500 (CDT)
From: "Lyle Bainbridge" <lyle@zevion.com>
To: <linux-mips@linux-mips.org>
Subject: GCC 3.2 to build mips-linux kernel
Date: Fri, 11 Oct 2002 12:34:53 -0500
Message-ID: <NCBBKGDBOEEBDOELAFOFAEPMDAAA.lyle@zevion.com>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Importance: Normal
Return-Path: <lyle@zevion.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 412
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: lyle@zevion.com
Precedence: bulk
X-list: linux-mips


I built a mips-linix 2.4.18 kernel for an AU1500 board using:
  gcc-3.2  /   binutils-2.13   /   glibc-2.2.5

It builds and executes but is unsuccessful during startup.
I have attached the log at the end of this message.  It
appears to have skipped a number of steps.  I noticed that
a working kernel built with gcc 2.95.3 is 800K larger.
(~3MB versus !2.2MB).

I'm a little confused, and wondered if the 3.2 compiler requires
some patching to work for mips-linux.

Any advice would be appreciated.

Lyle Bainbridge

Kernel Startup Log follows:

init arch
init prom
init cpu
CPU revision is: 01030200
Primary instruction cache 16kb, linesize 32 bytes (4 ways)
Primary data cache 16kb, linesize 32 bytes (4 ways)
Linux version 2.4.18-mips (Lyle Bainbridge@RADIUM) (gcc version 3.2) #1 Fri
Oct
11 01:48:42 2002
Determined physical RAM map:
 memory: 02000000 @ 00000000 (usable)
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line:  console=ttyS0,38400
calculating r4koff... 003c6ea4(3960484)
CPU frequency 396.05 MHz
Calibrating delay loop... 395.67 BogoMIPS
Memory: 29476k/32768k available (1309k kernel code, 3292k reserved, 96k
data, 20
0k init, 0k highmem)
Dentry-cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode-cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Kernel panic: can't allocate root vfsmount
In idle task - not syncing


From hjl@lucon.org Fri Oct 11 19:53:50 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 11 Oct 2002 19:53:51 +0200 (CEST)
Received: from 12-234-88-146.client.attbi.com ([12.234.88.146]:57069 "EHLO
	lucon.org") by linux-mips.org with ESMTP id <S1123398AbSJKRxu>;
	Fri, 11 Oct 2002 19:53:50 +0200
Received: by lucon.org (Postfix, from userid 1000)
	id BDDCA2C4EC; Fri, 11 Oct 2002 10:53:32 -0700 (PDT)
Date: Fri, 11 Oct 2002 10:53:32 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: Lyle Bainbridge <lyle@zevion.com>
Cc: linux-mips@linux-mips.org
Subject: Re: GCC 3.2 to build mips-linux kernel
Message-ID: <20021011105332.A11498@lucon.org>
References: <NCBBKGDBOEEBDOELAFOFAEPMDAAA.lyle@zevion.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <NCBBKGDBOEEBDOELAFOFAEPMDAAA.lyle@zevion.com>; from lyle@zevion.com on Fri, Oct 11, 2002 at 12:34:53PM -0500
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 413
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 11, 2002 at 12:34:53PM -0500, Lyle Bainbridge wrote:
> 
> I built a mips-linix 2.4.18 kernel for an AU1500 board using:
>   gcc-3.2  /   binutils-2.13   /   glibc-2.2.5
		^^^^^^^^^^^^^^^
		Bad choice.
> 
> It builds and executes but is unsuccessful during startup.
> I have attached the log at the end of this message.  It
> appears to have skipped a number of steps.  I noticed that
> a working kernel built with gcc 2.95.3 is 800K larger.
> (~3MB versus !2.2MB).
> 
> I'm a little confused, and wondered if the 3.2 compiler requires
> some patching to work for mips-linux.
> 

gcc 3.2 I released for Linux/mips builds 2.4.20-pre6 kernel for malta
just fine. But you are strongly recommended to use my latest Linux
binutils.


H.J.

From hjl@lucon.org Sat Oct 12 07:50:54 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 12 Oct 2002 07:50:57 +0200 (CEST)
Received: from 12-234-88-146.client.attbi.com ([12.234.88.146]:36225 "EHLO
	lucon.org") by linux-mips.org with ESMTP id <S1123795AbSJLFuy>;
	Sat, 12 Oct 2002 07:50:54 +0200
Received: by lucon.org (Postfix, from userid 1000)
	id CA0102C4EC; Fri, 11 Oct 2002 22:50:45 -0700 (PDT)
Date: Fri, 11 Oct 2002 22:50:45 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: GNU C Library <libc-alpha@sources.redhat.com>, gcc@gcc.gnu.org,
	Kenneth Albanowski <kjahds@kjahds.com>,
	Mat Hostetter <mat@lcs.mit.edu>, Warner Losh <imp@village.org>,
	linux-mips@linux-mips.org, Ron Guilmette <rfg@monkeys.com>,
	"Polstra; John" <linux-binutils-in@polstra.com>,
	Ralf Baechle <ralf@linux-mips.org>,
	Linas Vepstas <linas@linas.org>,
	Feher Janos <aries@hal2000.terra.vein.hu>,
	Leonard Zubkoff <lnz@dandelion.com>,
	"Steven J. Hill" <sjhill@cotw.com>
Subject: The Linux binutils 2.13.90.0.10 is released
Message-ID: <20021011225045.A1291@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 414
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

This is the beta release of binutils 2.13.90.0.10 for Linux, which is
based on binutils 2002 1010 in CVS on sourecs.redhat.com plus various
changes. It is purely for Linux.

The Linux/mips support is added. You have to use

# rpm --target=[mips|mipsel] -ta binutils-xx.xx.xx.xx.xx.tar.gz

to build it. Or you can read mips/README in the source tree to apply
the mips patches and build it by hand.

FYI, the binutils man pages now are generated from the texinfo files
during the build. As the result, those man pages may be changed for
each build even if you only have done

# ..../configure ...
# make

That means you may have many failures on the man pages when you apply
the binutils diffs next time. Those failures can be safely ignored.
You should remove all those man pages from your source tree by

# find -name *.1 | xargs rm -f
# find -name *.1.rej | xargs rm -f
# find -name *.man | xargs rm -f
# find -name *.man.rej | xargs rm -f

Please report any bugs related to binutils 2.13.90.0.10 to hjl@lucon.org.

For arm-linux targets, there are some important differences in behaviour 
between these tools and binutils 2.9.1.0.x.  The linker emulation name has 
changed from elf32arm{26} to armelf_linux{26}.  Also, the "-p" flag must be 
passed with the linker when working with object files (or static libraries) 
created using older versions of the assembler.  If this flag is omitted the 
linker will silently generate bad output when given old input files.

To get the correct behaviour from gcc, amend the *link section of your specs 
file as follows:

*link:
%{h*} %{version:-v}    %{b} %{Wl,*:%*}    %{static:-Bstatic}    %{shared:-shared}    %{symbolic:-Bsymbolic}    %{rdynamic:-export-dynamic}    %{!dynamic-linker: -dynamic-linker /lib/ld-linux.so.2}    -X    %{mbig-endian:-EB} %{mapcs-26:-m armelf_linux26} %{!mapcs-26:-m armelf_linux} -p


Changes from binutils 2.13.90.0.4:

1. Update from binutils 2002 1010.
2. More ELF/PPC linker bug fixes.
3. Fix an ELF/alpha linker bug.
4. Fix an ELF/sparc linker bug to support Solaris.
5. More TLS updates.

Changes from binutils 2.13.90.0.3:

1. Update from binutils 2002 0814.
2. Fix symbol versioning bugs for gcc 3.2.
3. Fix mips gas.

Changes from binutils 2.13.90.0.2:

1. Update from binutils 2002 0809.
2. Fix a mips gas compatibility bug.
3. Fix an x86 TLS bfd bug.
4. Fix an x86 PIC gas bug.
5. Improve symbol versioning support.

Changes from binutils 2.12.90.0.15:

1. Update from binutils 2002 0802.
2. Initial support for mips n32 ABI.
3. Fix some x86 TLS bugs.

Changes from binutils 2.12.90.0.14:

1. Update from binutils 2002 0717.
2. Fix an ia64 assembler bug.
3. Fix a symbol versioning bug.
4. You have to upgrade to modutils 2.4.19 or apply the modutils patch
enclosed here in order to support System.map generated by the new nm.

Changes from binutils 2.12.90.0.12:

1. Update from binutils 2002 0627.
2. Fix a linker bug which leads to the incorrect Linux 2.2 kernel.

Changes from binutils 2.12.90.0.11:

1. Update from binutils 2002 0618.
2. Fix a mips assembler bug.

Changes from binutils 2.12.90.0.9:

1. Update from binutils 2002 0608.
2. Fix an ELF/mips SHF_MERGE bug.

Changes from binutils 2.12.90.0.7:

1. Update from binutils 2002 0526.
2. Support "-z muldefs".

Changes from binutils 2.12.90.0.4:

1. Update from binutils 2002 0423.
2. ELF EH frame bug fix.
3. MIPS ELF visibility bug fix.

Changes from binutils 2.12.90.0.3:

1. Update from binutils 2002 0408.
2. Bug fixes for ELF/sparc.
3. Bug fixes for ELF/CRIS.

Changes from binutils 2.12.90.0.1:

1. Update from binutils 2002 0323.
2. Fix linking a.out relocatable files with ELF.
3. Fix a PPC altivec assembler bug.

Changes from binutils 2.11.93.0.2:

1. Update from binutils 2002 0307.
2. Add the .preinit_array/.init_array/.fini_array support.
3. Fix eh_frame.
4. Turn on combreloc by default.
5. Enable gprof for Linux/mips.

Changes from binutils 2.11.92.0.12.3:

1. Update from binutils 2002 0207.
2. Fix a weak symbol alpha linker bug for glibc.
3. More support for gcc 3.1.

Changes from binutils 2.11.92.0.12:

1. Fix a regression in 2.11.92.0.12 when linking with none-ELF object
files.

Changes from binutils 2.11.92.0.10:

1. Update from binutils 2001 1121.
2. Fix a linker symbol version bug for common symbols.
3. Update handling relocations against the discarded sections. You may
need to apply the kernel patch enclosed here to your kernel source. If
you still see things like

drivers/char/char.o(.data+0x46b4): undefined reference to `local symbols in discarded section .text.exit'

in the final kernel link, that means you have compiled a driver into
the kernel which has a reference to the symbol in a discarded section.
Kernel 2.4.17 or above should work fine.

4. Support "-march=xxx -mipsN" for mips gas if they are compatible.

Changes from binutils 2.11.92.0.7:

1. Update from binutils 2001 1021.
2. Fix the ELF/PPC linker.
3. Fix the ELF/cris linker.
4. Fix ELF strip.

Changes from binutils 2.11.92.0.5:

1. Update from binutils 2001 1016.
2. Fix all breakages introduced in 2.11.92.0.12.

Changes from binutils 2.11.90.0.31:

1. Update from binutils 2001 1005.
2. Support gcc 3.1 for ia64.
3. Support prelink for ELF/PPC.
4. Fix an ELF/x86 linker bug for Oracle.
5. Fix a weak symbol bug.
6. Support locale.

Changes from binutils 2.11.90.0.29:

1. Update from binutils 2001 0830.
2. Fix a mips linker bug.

Changes from binutils 2.11.90.0.27:

1. Update from binutils 2001 0827.
2. Fix an alpha assembler bug.
3. Fix an ia64 linker bug.
4. Fix a mips linker bug.
5. Support `-z combreloc|nocombreloc' in linker.

Changes from binutils 2.11.90.0.25:

1. Update from binutils 2001 0810.
2. Fix an x86 linker bug.

Changes from binutils 2.11.90.0.24:

1. Update from binutils 2001 0726.
2. Fix an x86 assembler bug.
3. "make check" in the windres test in binutils may call uudecode. We
are working on it.
4. "make check" fails the windres test in binutils if the i386/pe
is enabled in bfd. Fixed in the next release.
5. "make check" has 2 failures in the ld-selective test in ld on
Linux/alpha. They should be marked xfail. Fixed in the next release.

Changes from binutils 2.11.90.0.23:

1. Update from binutils 2001 0714.
2. Fix Sparc/ElF for Linux/sparc.
3. Fix Alpha/ELF for gcc 3.0.

Changes from binutils 2.11.90.0.19:

1. Update from binutils 2001 0706.
2. Fix objcopy/strip broken by accident.
3. Avoid COPY relocs on ia32.
4. Fix the ia64 assembler.
5. This release may not work on Linux/sparc due to the unaligned
relocation changes, which are not handled by all versions of glibc.
The current glibc in CVS on sourceware should be ok. The last known
working binutils for Linux/sparc is 2.11.90.0.8. We are working on it.

Changes from binutils 2.11.90.0.15:

1. Update from binutils 2001 0620.
2. Fix a static linking the PIC object files on ia32.
3. Add the verion script support for --export-dynamic. It can be used
to selectively export dynamic symbols from the executables.

Changes from binutils 2.11.90.0.8:

1. Update from binutils 2001 0610.
2. Fix a gas bug for gcc 3.0.

Changes from binutils 2.11.90.0.7:

1. Update from binutils 2001 0512.
2. Fix some P/III SSE 2 assembler bugs.
3. Fix DT_NEEDED and symbol version bugs.
4. Support hidden versioned symbols in DSOs.

Changes from binutils 2.11.90.0.6:

1. Update from binutils 2001 0427.
2. Fix the -Bsymbolic bug introduced in binutils 2.11.90.0.5.

Changes from binutils 2.11.90.0.5:

1. Update from binutils 2001 0425.
2. Update "ld --multilib-dir PATH".

Changes from binutils 2.11.90.0.4:

1. Update from binutils 2001 0414.
2. Fix an ia64 assembler bug.
3. Change Linux/MIPS to use the SVR4 MIPS ABI instead of the IRIX ABI.
since there are no supports for the IRIX ABI in glibc. The current
Linux/MIPS targets are elf64-tradlittlemips for little endian MIPS
instead of elf32-littlemips and elf64-tradbigmips for big endian MIPS
instead of elf32-bigmips. Glibc, gcc and kernel may have to be modified
for this change. 

Changes from binutils 2.11.90.0.1:

1. Update from binutils 2001 0401.
2. Fix a gas bug for the gcc from the CVS main trunk. It involves some
changes in gas. I compiled kernel 2.2.18, gcc and glibc under
Linux/ia32. The resulting binaries work fine. 
3. Fix the linker core dump on unsupported ELF binaries.

Changes from binutils 2.10.91.0.4:

1. Update from binutils 2001 0309.

Changes from binutils 2.10.91.0.2:

1. Update from binutils 2001 0223.
2. More ia64 bug fixes.

Changes from binutils 2.10.1.0.7:

1. Update from binutils 2001 0215.
2. More ia64 bug fixes. Support EFI and "ld -relax" on ia64.
3. Fix a weak definition, -Bsymbolic, non-PIC bug for ia32.

Changes from binutils 2.10.1.0.4:

1. Update from binutils 2001 0206.
2. Enable the IA64 support.
3. Now you need to use

# ld --oformat TARGET

instead of

# ld -oformat TARGET

The Linux kernel build may be affected. BTW

# ld --oformat TARGET

should work with all previous releases of binutils.

Changes from binutils 2.10.1.0.2:

1. Update from binutils 2000 1221.

Changes from binutils 2.10.0.33:

1. Update from binutils 2000 1119.
2. It has some symbol versioning related updates.

Changes from binutils 2.10.0.32:

1. Update from binutils 2000 1018.
2. A proper ELF/PPC visibility fix.
3. m68k-a.out is supposed to be fixed.

Changes from binutils 2.10.0.31:

1. Update from binutils 2000 1014.
2. An ELF/PPC weak symbol bug fix.
3. A new linkonce section name approach.
4. m68k-a.out is still broken. To be fixed.

Changes from binutils 2.10.0.29:

1. Update from binutils 2000 1011.
2. Back out the linkonce section name change so that C++ will work.
A different approach is being worked on.
3. m68k-a.out is known to be broken. To be fixed.

Changes from binutils 2.10.0.26:

1. Update from binutils 2000 1008.

Changes from binutils 2.10.0.24:

1. Update from binutils 2000 0907.

Changes from binutils 2.10.0.18:

1. Update from binutils 2000 0823. Fix DT_RPATH/DT_RUNPATH handling.
Fix the ELF/ia32 DSO not compiled with PIC.
2. Try to fix the ELF visibility bug on PPC with glibc 2.2.

Changes from binutils 2.10.0.12:

1. Update from binutils 2000 0720.
2. Fix the DT_NEEDED link bug.
3. Add the new DT_XXXX dynamic tags. Glibc 2.2 will use them at least
on libpthread.so.

Changes from binutils 2.10.0.9:

1. Update from binutils 2000 0701. Fix the parallel build in ld when PE
is enabled.

Changes from binutils 2.9.5.0.46:

1. Update from binutils 2000 0617. The demangler support for the new
g++ ABI. Minor fix for the ELF visibility. Fix linking non-ELF
relocatable object files under ELF with symbol versioning.
2. Support for linking PE relocatable object files under ia32/ELF.

Changes from binutils 2.9.5.0.42:

1. Update from binutils 2000 0604. The ELF visibility attribuite should
work correctly now.
2. The ia32 assembler has changed the way it assembles the "jmp"
instructions to the global symbols. The old assembler will optimize the
jump to the global symbol defined in the same source file so that no
relocation will be used. The new assembler will use relocation for
global jumps. It will mainly affect PIC asm code. The segment like

	.globl  __setjmp
__setjmp:
	...
	jmp __sigsetjmp
	...
	.globl __sigsetjmp
__sigsetjmp:

is no longer PIC safe since "jmp __sigsetjmp" jumps to a global symbol
and relocation will be used. Instead, it can be changed to

	.globl  __setjmp
__setjmp:
	...
	jmp sigsetjmp
	...
	.globl __sigsetjmp
__sigsetjmp:
sigsetjmp:

so that "jmp sigsetjmp" jumps to a local symbol and the new assembler
will optimize out the relocation.

Changes from binutils 2.9.5.0.41:

1. Update from binutils 2000 0512.
2. Add testsuite for ELF visibility.

Changes from binutils 2.9.5.0.37:

1. Update from binutils 2000 0502.
2. Support STV_HIDDEN and STV_INTERNAL.

Changes from binutils 2.9.5.0.35:

1. Update from binutils 2000 0418.
2. Fix an ld demangle style option bug.

Changes from binutils 2.9.5.0.34:

1. Update from binutils 2000 0412. Fix a relocation bug which affects
the Linux kernel compilation.
2. An ELF/PPC linker script update.

Changes from binutils 2.9.5.0.33:

1. Update from binutils 2000 0404. Fix the bug report bug.

Changes from binutils 2.9.5.0.32:

1. Update from binutils 2000 0403. Fix the 16bit ia32 assembler bug.

Changes from binutils 2.9.5.0.31:

1. Update from binutils 2000 0331. Fix the Linux/ARM assembler bug.
2. Fix a Debian assembler security bug.

Changes from binutils 2.9.5.0.29:

1. Update from binutils 2000 0319.
2. An ELF/alpha bug is fixed.

Changes from binutils 2.9.5.0.27:

1. Update from binutils 2000 0301.
2. A demangler bug is fixed.
3. A better fix for undefined symbols with -Bsymbolic when building
shared library.

Changes from binutils 2.9.5.0.24:

1. Update from binutils 2000 0204.
2. Added -taso to linker on alpha.
3. Fixed a -shared -Bsymbolic bug when PIC is not used.

Changes from binutils 2.9.5.0.22:

1. Update from binutils 2000 0113.
2. A symbol version bug is fixed.
3. A -Bsymbolic bug is fixed.

Changes from binutils 2.9.5.0.21:

1. Update from binutils 1999 1202.
2. Remove a MIPS/ELF change.
3. Enable SOM for HPPA.

Changes from binutils 2.9.5.0.19:

1. Update from binutils 1999 1122. An ia32 gas bug is fixed.

Changes from binutils 2.9.5.0.16:

1. Update from binutils 1999 1104.
2. i370 is changed to use EM_S370 and ELFOSABI_LINUX. Update readelf.
3. Fix Compaq's demangler support.

Changes from binutils 2.9.5.0.14:

1. Update from binutils 1999 1012. A gas bug which affects Linux 2.3.21
is fixed.
2. i370 update.
3. The new demangler code. You should use "--style=xxx" to select the
demnangle style instead of "--lang=xxx".

Changes from binutils 2.9.5.0.13:

1. Update from binutils 1999 0925.
2. Fix a -s and linker script bug.

Changes from binutils 2.9.5.0.12:

1. Update from binutils 1999 0922.
2. i370 update.

Changes from binutils 2.9.5.0.11:

1. Update from binutils 1999 0910. It fixed a PIC linker bug on ix86
   and sparc introduced in the last release.
2. i370 update.

Changes from binutils 2.9.5.0.10:

1. Update from binutils 1999 0906. It fixed a PIC linker bug on ix86
   and sparc.
2. Remove elf/hppa since it is WIP.

Changes from binutils 2.9.5.0.8:

1. Update from binutils 1999 0831. It allows spaces around '(' and ')'
   in x86 FP register names.

Changes from binutils 2.9.5.0.7:

1. Update from binutils 1999 0821.
2. Some MIPS changes.

Changes from binutils 2.9.5.0.6:

1. Update from binutils 1999 0813.
2. i370 update.

Changes from binutils 2.9.5.0.5:

1. Update from binutils 1999 0809. An ELF/Sparc ld bug is fixed.

Changes from binutils 2.9.5.0.4:

1. Update from binutils 1999 0806. A Solaris/Sparc gas bug is fixed.
2. Remove mips gas patches from binutils 2.9.1.0.25.

Changes from binutils 2.9.5.0.3:

1. Update from binutils 1999 0801.
2. Support for real mode x86 gcc.

Changes from binutils 2.9.4.0.8:

1. Update from binutils 1999 0719. A libc 5 related bug fix.
2. Fix a typo in mips gas.

Changes from binutils 2.9.4.0.7:

1. Update from binutils 1999 0710. A weak symbol bug

http://egcs.cygnus.com/ml/egcs-bugs/1999-07/msg00129.html

is fixed.

Changes from binutils 2.9.4.0.6:

1. Update from binutils 1999 0626.

Changes from binutils 2.9.4.0.5:

1. Update from binutils 1999 0620.
2. Remove my fwait fix and use the one in cvs.
3. Use "--only-section=section" instead of "--extract-section=section".
   for objcopy.

Changes from binutils 2.9.4.0.4:

1. Update from binutils 1999 0612.
2. Remove various temporary fixes of mine since those bugs are fixed
   now.

Changes from binutils 2.9.4.0.3:

1. Update from binutils 1999 0611.
2. Remove my ELF/Alpha bfd changes.
3. Use the local symbol copy fix in binutils 1999 0611.

Changes from binutils 2.9.4.0.2:

1. Update from binutils 1999 0607.
2. Remove my Sparc hacks.
3. Fix local symbol copy.

Changes from binutils 2.9.4.0.1:

1. Update from binutils 1999 0606.
2. Restore relocation overflow checking in binutils 2.9.1.0.25 so that
   Linux kernel can build.
3. Fix i370 for the new gas.

Changes from binutils 1999 0605:

1. Fix a -Bsymbolic bug for Linux/alpha.
2. Add ELF/i370.
3. Fix 8/16-bit relocations for i386.
4. Add --redefine-sym=old_form=new_form to objcopy.
5. Add "-j section" for objcopy.
6. Fix i386 disassembler for fwait.
7. Fix a Sparc asm bug.
8. Add Ada demangle support.
9. Fix MIPS/ELF bugs.
10. Add some vxworks suppport.
11. Fix a.out assembler.

The file list:

1. binutils-2.13.90.0.10.tar.gz. Source code.
2. binutils-2.13.90.0.4-2.13.90.0.10.diff.gz. Patch against the
   previous beta source code.
3. binutils-2.13.90.0.10-1.i386.rpm. IA-32 binary RPM for RedHat 7.3.

There is no separate source rpm. You can do

# rpm -ta binutils-2.13.90.0.10.tar.gz

to create both binary and source rpms.

The primary sites for the beta Linux binutils are:

1. http://ftp.kernel.org/pub/linux/devel/binutils/

Thanks.


H.J. Lu
hjl@lucon.org
10/10/2002
----
> On Mon, Jul 15, 2002 at 04:35:47PM +0930, Alan Modra wrote:
> > Something you might like to warn about in your next release..
> > 
> > The 2002-07-05 bfd change exposes a bug in modutils.  depmod scans the
> > output of nm for a `?' symbol type when looking for certain symbols.
> > nm used to return `?' for symbols in sections other than some standard
> > sections like .text and .data.  Now, nm returns a better guess as to
> > the symbol type.
> 

No, but it parses System.map, which is generated by nm.  This was in
modutils-2.4.16.  Fix follows.

diff -urp modutils-2.4.16.orig/depmod/depmod.c modutils-2.4.16/depmod/depmod.c
--- modutils-2.4.16.orig/depmod/depmod.c	2002-04-28 17:23:35.000000000 +0930
+++ modutils-2.4.16/depmod/depmod.c	2002-07-15 16:41:20.000000000 +0930
@@ -1060,12 +1060,9 @@ static int addksyms(char *file_syms)
 		if (!isspace(*line))	/* Adressless symbol? */
 			p = strtok(NULL, " \t\n");
 		/* The second word is either the symbol name or a type */
-		if (p && strlen(p) == 1) { /* System.map */
+		if (p && p[0] && !p[1]) { /* System.map */
 			is_mapfile = 1;
-			if (*p != '?')
-				p = NULL;
-			else
-				p = strtok(NULL, " \t\n");
+			p = strtok(NULL, " \t\n");
 		} else { /* /proc/ksyms copy */
 			if (p && strtok(NULL, " \t\n"))
 				p = NULL;
@@ -1083,7 +1080,7 @@ static int addksyms(char *file_syms)
 			if (!isspace(*line))	/* Adressless symbol? */
 				p = strtok(NULL, " \t\n");
 			if (is_mapfile) {
-				if (*p != '?')
+				if (!p || !p[0] || p[1])
 					continue;
 				p = strtok(NULL, " \t\n");
 				/* Sparc has symbols like '.div' that need to be


-- 
Alan Modra
IBM OzLabs - Linux Technology Centre

From flo@rfc822.org Sat Oct 12 18:01:39 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 12 Oct 2002 18:01:39 +0200 (CEST)
Received: from noose.gt.owl.de ([62.52.19.4]:22027 "HELO noose.gt.owl.de")
	by linux-mips.org with SMTP id <S1123795AbSJLQBj>;
	Sat, 12 Oct 2002 18:01:39 +0200
Received: by noose.gt.owl.de (Postfix, from userid 10)
	id 6F700A72; Sat, 12 Oct 2002 18:01:30 +0200 (CEST)
Received: by paradigm.rfc822.org (Postfix, from userid 1000)
	id 1403437103; Sat, 12 Oct 2002 17:47:39 +0200 (CEST)
Date: Sat, 12 Oct 2002 17:47:39 +0200
From: Florian Lohoff <flo@rfc822.org>
To: Brian Murphy <brian@murphy.dk>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Subject: Re: rsync suggestion
Message-ID: <20021012154739.GA26994@paradigm.rfc822.org>
References: <3DA1E42C.3050900@murphy.dk>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="rwEMma7ioTxnRzrJ"
Content-Disposition: inline
In-Reply-To: <3DA1E42C.3050900@murphy.dk>
User-Agent: Mutt/1.3.28i
Organization: rfc822 - pure communication
Return-Path: <flo@rfc822.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 415
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: flo@rfc822.org
Precedence: bulk
X-list: linux-mips


--rwEMma7ioTxnRzrJ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mon, Oct 07, 2002 at 09:44:44PM +0200, Brian Murphy wrote:
> Is there any chance, Ralf, of an rsync server for the kernel cvs?
> This  really speeds up making diffs and so on and removes load
> from the central cvs server.
>=20
> Anyone else like the idea?

Yep - Would use it too.

Flo
--=20
Florian Lohoff                  flo@rfc822.org             +49-5201-669912
                        Heisenberg may have been here.

--rwEMma7ioTxnRzrJ
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9qEQaUaz2rXW+gJcRAvWLAJ9v9hQFdR7Rr4MKLR/Dx2H+eH9sTACcC6Es
2qgwSUlZvQWVWJmucNVS260=
=68ID
-----END PGP SIGNATURE-----

--rwEMma7ioTxnRzrJ--

From jbglaw@dvmwest.gt.owl.de Sun Oct 13 09:24:03 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sun, 13 Oct 2002 09:24:04 +0200 (CEST)
Received: from dvmwest.gt.owl.de ([62.52.24.140]:39687 "EHLO dvmwest.gt.owl.de")
	by linux-mips.org with ESMTP id <S1123903AbSJMHYD>;
	Sun, 13 Oct 2002 09:24:03 +0200
Received: by dvmwest.gt.owl.de (Postfix, from userid 1001)
	id CE758133FA; Sun, 13 Oct 2002 09:23:51 +0200 (CEST)
Date: Sun, 13 Oct 2002 09:23:51 +0200
From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
To: Linux-MIPS <linux-mips@linux-mips.org>
Subject: Re: rsync suggestion
Message-ID: <20021013072351.GC30418@lug-owl.de>
Mail-Followup-To: Linux-MIPS <linux-mips@linux-mips.org>
References: <3DA1E42C.3050900@murphy.dk>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="3cI6DWK3Xt33P8nt"
Content-Disposition: inline
In-Reply-To: <3DA1E42C.3050900@murphy.dk>
User-Agent: Mutt/1.4i
X-Operating-System: Linux mail 2.4.18 
x-gpg-fingerprint: 250D 3BCF 7127 0D8C A444  A961 1DBD 5E75 8399 E1BB
x-gpg-key: wwwkeys.de.pgp.net
Return-Path: <jbglaw@dvmwest.gt.owl.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 416
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: jbglaw@lug-owl.de
Precedence: bulk
X-list: linux-mips


--3cI6DWK3Xt33P8nt
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mon, 2002-10-07 21:44:44 +0200, Brian Murphy <brian@murphy.dk>
wrote in message <3DA1E42C.3050900@murphy.dk>:
> Is there any chance, Ralf, of an rsync server for the kernel cvs?
> This  really speeds up making diffs and so on and removes load
> from the central cvs server.
>=20
> Anyone else like the idea?

/me did use it, too...

MfG, JBG

--=20
   - Eine Freie Meinung in einem Freien Kopf f=FCr
   - einen Freien Staat voll Freier B=FCrger
   						Gegen Zensur im Internet
Jan-Benedict Glaw   .   jbglaw@lug-owl.de   .   +49-172-7608481
	 -- New APT-Proxy written in shell script --
	   http://lug-owl.de/~jbglaw/software/ap2/

--3cI6DWK3Xt33P8nt
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.0 (GNU/Linux)

iD8DBQE9qR+HHb1edYOZ4bsRAtcHAJ40kY0quBTJcSn683651HiLjFNVuQCcD5ai
VA4BuP4pQADLeK684JsrqJ4=
=1LY4
-----END PGP SIGNATURE-----

--3cI6DWK3Xt33P8nt--

From rsandifo@redhat.com Mon Oct 14 18:09:49 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 18:09:50 +0200 (CEST)
Received: from dell-paw-3.cambridge.redhat.com ([195.224.55.237]:45554 "EHLO
	executor.cambridge.redhat.com") by linux-mips.org with ESMTP
	id <S1122169AbSJNQJt>; Mon, 14 Oct 2002 18:09:49 +0200
Received: from talisman.cambridge.redhat.com (talisman.cambridge.redhat.com [172.16.18.81])
	by executor.cambridge.redhat.com (Postfix) with ESMTP
	id 7D07EABAF8; Mon, 14 Oct 2002 17:09:40 +0100 (BST)
Received: (from rsandifo@localhost)
	by talisman.cambridge.redhat.com (8.11.6/8.11.0) id g9EG9cA12332;
	Mon, 14 Oct 2002 17:09:38 +0100
X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f
To: "H. J. Lu" <hjl@lucon.org>
Cc: aoliva@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021012113423.A27894@lucon.org>
	<20021013145423.A10174@lucon.org> <20021014082810.A28682@lucon.org>
From: Richard Sandiford <rsandifo@redhat.com>
Date: 14 Oct 2002 17:09:38 +0100
In-Reply-To: <20021014082810.A28682@lucon.org>
Message-ID: <wvnit05ovct.fsf@talisman.cambridge.redhat.com>
Lines: 11
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <rsandifo@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 417
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: rsandifo@redhat.com
Precedence: bulk
X-list: linux-mips

"H. J. Lu" <hjl@lucon.org> writes:
> Can gcc be be modified not to generate noreorder/nomacro for branchs if
> gas is used?

Sounds like you're suggesting gcc should leave gas to fill delay slots?

gcc is usually much better at filling delay slots than gas is.  gas just
looks at the previous instruction to see if it's suitable.  gcc can pull
pull instructions from the branch target instead.

Richard

From aoliva@redhat.com Mon Oct 14 18:19:44 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 18:19:44 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:25488 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122169AbSJNQTo>; Mon, 14 Oct 2002 18:19:44 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9EGJTP18758;
	Mon, 14 Oct 2002 12:19:30 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9EGJTxB008477;
	Mon, 14 Oct 2002 14:19:29 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9EGJSuZ008473;
	Mon, 14 Oct 2002 14:19:28 -0200
To: "H. J. Lu" <hjl@lucon.org>
Cc: linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021012113423.A27894@lucon.org>
	<20021013145423.A10174@lucon.org> <20021014082810.A28682@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 14 Oct 2002 14:19:28 -0200
In-Reply-To: <20021014082810.A28682@lucon.org>
Message-ID: <ord6qd3sdr.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 12
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 418
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> 2. Is noreorder/nomacro really needed for gas? If I remeber right, it
> is safe for gas to use

If you've already filled in delay slots, yes.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From rsandifo@redhat.com Mon Oct 14 18:35:08 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 18:35:09 +0200 (CEST)
Received: from dell-paw-3.cambridge.redhat.com ([195.224.55.237]:4851 "EHLO
	executor.cambridge.redhat.com") by linux-mips.org with ESMTP
	id <S1122169AbSJNQfI>; Mon, 14 Oct 2002 18:35:08 +0200
Received: from talisman.cambridge.redhat.com (talisman.cambridge.redhat.com [172.16.18.81])
	by executor.cambridge.redhat.com (Postfix) with ESMTP
	id ECFA5ABAF8; Mon, 14 Oct 2002 17:35:00 +0100 (BST)
Received: (from rsandifo@localhost)
	by talisman.cambridge.redhat.com (8.11.6/8.11.0) id g9EGZ0h20736;
	Mon, 14 Oct 2002 17:35:00 +0100
X-Authentication-Warning: talisman.cambridge.redhat.com: rsandifo set sender to rsandifo@redhat.com using -f
To: "H. J. Lu" <hjl@lucon.org>
Cc: aoliva@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021012113423.A27894@lucon.org>
	<20021013145423.A10174@lucon.org> <20021014082810.A28682@lucon.org>
	<wvnit05ovct.fsf@talisman.cambridge.redhat.com>
	<20021014091649.A29353@lucon.org>
From: Richard Sandiford <rsandifo@redhat.com>
Date: 14 Oct 2002 17:35:00 +0100
In-Reply-To: <20021014091649.A29353@lucon.org>
Message-ID: <wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
Lines: 46
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <rsandifo@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 419
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: rsandifo@redhat.com
Precedence: bulk
X-list: linux-mips

"H. J. Lu" <hjl@lucon.org> writes:
> > gcc is usually much better at filling delay slots than gas is.  gas just
> > looks at the previous instruction to see if it's suitable.  gcc can pull
> > pull instructions from the branch target instead.
> 
> I don't think so. Please check out g++.dg/opt/longbranch1.C. gcc 3.2
> generates:
> 
> $L7488:
>         lw      $2,52($fp)
>         .set    noreorder
>         .set    nomacro
> 
>         bne     $2,$0,$L7493
>         nop
>         j       $L2
>         nop
> 
>         .set    macro
>         .set    reorder
> $L7493:
> 
> It is no better than gas and disables the branch relaxation. I don't
> why gcc shouldn't let gas handle it in this case. That is gcc should
> never fill the delay slot with nop.

Huh?  Obviously there are going to be cases when neither gcc nor
gas can fill a slot.  Just because you've found one doesn't mean
that gcc never fills a delay that gas wouldn't.  Compare gcc's
dbr_schedule with gas's append_insn.

The fact gcc fills this slot with a nop is just incidental.
gcc is not written on the assumption that the assembler will
relax branches.  It's easy to see it filling that slot with
a non-nop in other cases.  And, what's more, filling it with
a non-nop that gas wouldn't consider.

When you said:

> Can gcc be be modified not to generate noreorder/nomacro for branchs if
> gas is used?

you seemed to be arguing that gcc should start relying on
branch relaxation, but that really seems the wrong way to go.

Richard

From davem@redhat.com Mon Oct 14 19:20:27 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 19:20:28 +0200 (CEST)
Received: from pizda.ninka.net ([216.101.162.242]:26523 "EHLO pizda.ninka.net")
	by linux-mips.org with ESMTP id <S1122169AbSJNRU1>;
	Mon, 14 Oct 2002 19:20:27 +0200
Received: from localhost (IDENT:davem@localhost.localdomain [127.0.0.1])
	by pizda.ninka.net (8.9.3/8.9.3) with ESMTP id KAA29478;
	Mon, 14 Oct 2002 10:13:19 -0700
Date: Mon, 14 Oct 2002 10:13:18 -0700 (PDT)
Message-Id: <20021014.101318.31058876.davem@redhat.com>
To: hjl@lucon.org
Cc: rsandifo@redhat.com, aoliva@redhat.com, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
From: "David S. Miller" <davem@redhat.com>
In-Reply-To: <20021014101640.A30133@lucon.org>
References: <20021014091649.A29353@lucon.org>
	<wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
	<20021014101640.A30133@lucon.org>
X-FalunGong: Information control.
X-Mailer: Mew version 2.1 on Emacs 21.1 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <davem@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 420
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: davem@redhat.com
Precedence: bulk
X-list: linux-mips

   From: "H. J. Lu" <hjl@lucon.org>
   Date: Mon, 14 Oct 2002 10:16:40 -0700
   
   The problem here is when gcc fills the delay slot with nop, it kills
   branch relaxation. My request is gcc never fills the delay slot with
   nop. If gcc can't find any insn to fill, don't emit .set noreorder.

Why not work on making gcc fill the delay slot with something
suitable if you think the branch relaxer can do better for
your testcase?

From aoliva@redhat.com Mon Oct 14 19:43:40 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 19:43:41 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:48880 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122169AbSJNRnk>; Mon, 14 Oct 2002 19:43:40 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9EHhUP03017;
	Mon, 14 Oct 2002 13:43:30 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9EHhTxB010739;
	Mon, 14 Oct 2002 15:43:29 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9EHhQEi010735;
	Mon, 14 Oct 2002 14:43:26 -0300
To: "H. J. Lu" <hjl@lucon.org>
Cc: Richard Sandiford <rsandifo@redhat.com>, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021012113423.A27894@lucon.org>
	<20021013145423.A10174@lucon.org> <20021014082810.A28682@lucon.org>
	<wvnit05ovct.fsf@talisman.cambridge.redhat.com>
	<20021014091649.A29353@lucon.org>
	<wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
	<20021014101640.A30133@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 14 Oct 2002 14:43:26 -0300
In-Reply-To: <20021014101640.A30133@lucon.org>
Message-ID: <orhefo3oht.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 13
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 421
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> The problem here is when gcc fills the delay slot with nop, it kills
> branch relaxation.

It wouldn't if only the delay slot was enclosed in .set nomacro.
Could we change this?

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From aoliva@redhat.com Mon Oct 14 19:58:15 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 19:58:16 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:26111 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122169AbSJNR6P>; Mon, 14 Oct 2002 19:58:15 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9EHw5P05660;
	Mon, 14 Oct 2002 13:58:05 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9EHw4xB011031;
	Mon, 14 Oct 2002 15:58:04 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9EHw4TO011027;
	Mon, 14 Oct 2002 14:58:04 -0300
To: "H. J. Lu" <hjl@lucon.org>
Cc: Richard Sandiford <rsandifo@redhat.com>, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021012113423.A27894@lucon.org>
	<20021013145423.A10174@lucon.org> <20021014082810.A28682@lucon.org>
	<wvnit05ovct.fsf@talisman.cambridge.redhat.com>
	<20021014091649.A29353@lucon.org>
	<wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
	<20021014101640.A30133@lucon.org>
	<orhefo3oht.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014105055.B30830@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 14 Oct 2002 14:58:04 -0300
In-Reply-To: <20021014105055.B30830@lucon.org>
Message-ID: <orzntg298z.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 39
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 422
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> On Mon, Oct 14, 2002 at 02:43:26PM -0300, Alexandre Oliva wrote:
>> On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:
>> 
>> > The problem here is when gcc fills the delay slot with nop, it kills
>> > branch relaxation.
>> 
>> It wouldn't if only the delay slot was enclosed in .set nomacro.

> What do you mean by that?

Instead of:

.set noreorder
.set nomacro
b foo
nop
.set macro
.set reorder

perhaps we could emit:

.set noreorder
b foo
.set nomacro
nop
.set macro
.set reorder


Since b foo wouldn't be affected by nomacro, branch relaxing could
fix it up (the relaxations are delay-slot-safe).

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From aoliva@redhat.com Mon Oct 14 21:37:55 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 21:37:55 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:18802 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122169AbSJNThz>; Mon, 14 Oct 2002 21:37:55 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9EJbgP22805;
	Mon, 14 Oct 2002 15:37:42 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9EJbfxB012456;
	Mon, 14 Oct 2002 17:37:41 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9EJbb6h012452;
	Mon, 14 Oct 2002 16:37:37 -0300
To: "H. J. Lu" <hjl@lucon.org>
Cc: Richard Sandiford <rsandifo@redhat.com>, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021012113423.A27894@lucon.org>
	<20021013145423.A10174@lucon.org> <20021014082810.A28682@lucon.org>
	<wvnit05ovct.fsf@talisman.cambridge.redhat.com>
	<20021014091649.A29353@lucon.org>
	<wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
	<20021014101640.A30133@lucon.org>
	<orhefo3oht.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014105055.B30830@lucon.org>
	<orzntg298z.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014110118.B30940@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 14 Oct 2002 16:37:37 -0300
In-Reply-To: <20021014110118.B30940@lucon.org>
Message-ID: <orelas24n2.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 14
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 423
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> Why do we need nop? Why do we need noreorder?

We need reorder to indicate that the delay slot is already filled.  I
used nop just because it was the easiest form of delay-slot filling I
could think of.  Think of any other valid delay-slot filling
instruction in there.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From davem@redhat.com Mon Oct 14 21:42:22 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 21:42:23 +0200 (CEST)
Received: from pizda.ninka.net ([216.101.162.242]:44188 "EHLO pizda.ninka.net")
	by linux-mips.org with ESMTP id <S1123903AbSJNTmW>;
	Mon, 14 Oct 2002 21:42:22 +0200
Received: from localhost (IDENT:davem@localhost.localdomain [127.0.0.1])
	by pizda.ninka.net (8.9.3/8.9.3) with ESMTP id MAA30498;
	Mon, 14 Oct 2002 12:35:11 -0700
Date: Mon, 14 Oct 2002 12:35:10 -0700 (PDT)
Message-Id: <20021014.123510.00003943.davem@redhat.com>
To: hjl@lucon.org
Cc: aoliva@redhat.com, rsandifo@redhat.com, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
From: "David S. Miller" <davem@redhat.com>
In-Reply-To: <20021014123940.A32333@lucon.org>
References: <20021014110118.B30940@lucon.org>
	<orelas24n2.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014123940.A32333@lucon.org>
X-FalunGong: Information control.
X-Mailer: Mew version 2.1 on Emacs 21.1 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <davem@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 424
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: davem@redhat.com
Precedence: bulk
X-list: linux-mips

   From: "H. J. Lu" <hjl@lucon.org>
   Date: Mon, 14 Oct 2002 12:39:40 -0700
   
   Can gcc not to emit nop nor noreorder when it tries to fill the delay
   slot with nop?

All the surrounding instructions scheduled by GCC are within
noreorder sections aren't they?

If so, the assembler has nothing to put into the delay
slot.

If not, you have a valid point, we should just remit the branch
by itself with no reorder/macro section attributes.

From davem@redhat.com Mon Oct 14 21:58:43 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 21:58:43 +0200 (CEST)
Received: from pizda.ninka.net ([216.101.162.242]:55452 "EHLO pizda.ninka.net")
	by linux-mips.org with ESMTP id <S1123903AbSJNT6n>;
	Mon, 14 Oct 2002 21:58:43 +0200
Received: from localhost (IDENT:davem@localhost.localdomain [127.0.0.1])
	by pizda.ninka.net (8.9.3/8.9.3) with ESMTP id MAA30656;
	Mon, 14 Oct 2002 12:51:35 -0700
Date: Mon, 14 Oct 2002 12:51:34 -0700 (PDT)
Message-Id: <20021014.125134.98070597.davem@redhat.com>
To: hjl@lucon.org
Cc: aoliva@redhat.com, rsandifo@redhat.com, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
From: "David S. Miller" <davem@redhat.com>
In-Reply-To: <20021014125549.A32575@lucon.org>
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
X-FalunGong: Information control.
X-Mailer: Mew version 2.1 on Emacs 21.1 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <davem@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 425
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: davem@redhat.com
Precedence: bulk
X-list: linux-mips

   From: "H. J. Lu" <hjl@lucon.org>
   Date: Mon, 14 Oct 2002 12:55:49 -0700

           .set    noreorder
           .set    nomacro
   
           bne     $2,$0,$L7493
           nop
           j       $L2
           nop
   
           .set    macro
           .set    reorder
   
   answer your question?
   
   
What instruction would you like to place in the bne's delay
slot?  'j' cannot go into a delay slot.

And likewise, 'bne' cannot go into j's delay slot.

From aoliva@redhat.com Mon Oct 14 22:21:09 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 22:21:10 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:52641 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1123903AbSJNUVJ>; Mon, 14 Oct 2002 22:21:09 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9EKKwP29562;
	Mon, 14 Oct 2002 16:20:58 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9EKKvxB013362;
	Mon, 14 Oct 2002 18:20:57 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9EKKtQn013358;
	Mon, 14 Oct 2002 17:20:55 -0300
To: "H. J. Lu" <hjl@lucon.org>
Cc: "David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 14 Oct 2002 17:20:55 -0300
In-Reply-To: <20021014130932.A32693@lucon.org>
Message-ID: <orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 16
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 426
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> If gcc just emits

> 	bne     $2,$0,$L7493
> 	j       $L2

IIRC, that's exactly what GCC will emit if you don't tell it to try to
fill delay slots.  If it tries to fill delay slots and fails, I doubt
the assembler is going to succeed at that.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From matz@suse.de Mon Oct 14 23:04:17 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 23:04:17 +0200 (CEST)
Received: from ns.suse.de ([213.95.15.193]:23569 "EHLO Cantor.suse.de")
	by linux-mips.org with ESMTP id <S1123903AbSJNVER>;
	Mon, 14 Oct 2002 23:04:17 +0200
Received: from Hermes.suse.de (Charybdis.suse.de [213.95.15.201])
	by Cantor.suse.de (Postfix) with ESMTP
	id B7E79145E1; Mon, 14 Oct 2002 23:04:10 +0200 (MEST)
Date: Mon, 14 Oct 2002 23:04:06 +0200 (CEST)
From: Michael Matz <matz@suse.de>
To: Alexandre Oliva <aoliva@redhat.com>
Cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	<rsandifo@redhat.com>, <linux-mips@linux-mips.org>,
	<gcc@gcc.gnu.org>, <binutils@sources.redhat.com>
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
Message-ID: <Pine.LNX.4.33.0210142301560.20702-100000@wotan.suse.de>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <matz@suse.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 427
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: matz@suse.de
Precedence: bulk
X-list: linux-mips

Hi,

On 14 Oct 2002, Alexandre Oliva wrote:

> > If gcc just emits
>
> > 	bne     $2,$0,$L7493
> > 	j       $L2
>
> IIRC, that's exactly what GCC will emit if you don't tell it to try to
> fill delay slots.  If it tries to fill delay slots and fails, I doubt
> the assembler is going to succeed at that.

I think that isn't hj's point.  He wanta gas to take advantage of
relaxation, and gcc is hindering that for no good reason.  I admit I have
no idea of Mips, though, so I don't know if relaxation somehow is
depending on delay slot filling at all ;-)


Ciao,
Michael.


From aoliva@redhat.com Mon Oct 14 23:06:38 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 23:06:39 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:32220 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1123903AbSJNVGi>; Mon, 14 Oct 2002 23:06:38 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9EL6PP06213;
	Mon, 14 Oct 2002 17:06:25 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9EL6OxB027317;
	Mon, 14 Oct 2002 19:06:24 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9EL6OLZ027196;
	Mon, 14 Oct 2002 18:06:24 -0300
To: "H. J. Lu" <hjl@lucon.org>
Cc: "David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014132352.A489@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 14 Oct 2002 18:06:24 -0300
In-Reply-To: <20021014132352.A489@lucon.org>
Message-ID: <orof9wzq5r.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 21
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 428
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> On Mon, Oct 14, 2002 at 05:20:55PM -0300, Alexandre Oliva wrote:

>> If it tries to fill delay slots and fails, I doubt the assembler is
>> going to succeed at that.

> Is that a way to tell gcc not to fill the delay slots with nop? If gcc
> has nothing else to fill, do nothing and let gas do its thing.

See above.  You'd be just wasting time.  If you have a testcase in
which gcc tries to fill the delay slot and fails even though it could,
you've found a bug in gcc, and this bug should be fixed.  Wasting time
in the assembler trying again to do what gcc should have done is
silly.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From echristo@redhat.com Mon Oct 14 23:29:13 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 14 Oct 2002 23:29:13 +0200 (CEST)
Received: from mx2.redhat.com ([12.150.115.133]:47632 "EHLO mx2.redhat.com")
	by linux-mips.org with ESMTP id <S1123903AbSJNV3N>;
	Mon, 14 Oct 2002 23:29:13 +0200
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id g9ELSOs08647;
	Mon, 14 Oct 2002 17:28:24 -0400
Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15])
	by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9ELT0l05213;
	Mon, 14 Oct 2002 17:29:00 -0400
Received: from dhcp-172-16-25-153.sfbay.redhat.com (dhcp-172-16-25-153.sfbay.redhat.com [172.16.25.153])
	by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g9ELSxD08821;
	Mon, 14 Oct 2002 14:28:59 -0700
Subject: Re: MIPS gas relaxation still doesn't work
From: Eric Christopher <echristo@redhat.com>
To: "H. J. Lu" <hjl@lucon.org>
Cc: Alexandre Oliva <aoliva@redhat.com>,
	"David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
In-Reply-To: <20021014132352.A489@lucon.org>
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br> 
	<20021014132352.A489@lucon.org>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) 
Date: 14 Oct 2002 14:25:00 -0700
Message-Id: <1034630700.18841.0.camel@ghostwheel>
Mime-Version: 1.0
Return-Path: <echristo@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 429
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: echristo@redhat.com
Precedence: bulk
X-list: linux-mips

On Mon, 2002-10-14 at 13:23, H. J. Lu wrote:
> On Mon, Oct 14, 2002 at 05:20:55PM -0300, Alexandre Oliva wrote:
> > On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:
> > 
> > > If gcc just emits
> > 
> > > 	bne     $2,$0,$L7493
> > > 	j       $L2
> > 
> > IIRC, that's exactly what GCC will emit if you don't tell it to try to
> > fill delay slots.  If it tries to fill delay slots and fails, I doubt
> > the assembler is going to succeed at that.
> 
> Is that a way to tell gcc not to fill the delay slots with nop? If gcc
> has nothing else to fill, do nothing and let gas do its thing.
> 

Read mips_output_conditional_branch ()

-eric

-- 
Yeah, I used to play basketball...


From aoliva@redhat.com Tue Oct 15 07:00:20 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 07:00:21 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:17318 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1123944AbSJOFAU>; Tue, 15 Oct 2002 07:00:20 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9F506P32511;
	Tue, 15 Oct 2002 01:00:06 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9F505xB011056;
	Tue, 15 Oct 2002 03:00:05 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9F503xn011052;
	Tue, 15 Oct 2002 02:00:03 -0300
To: "H. J. Lu" <hjl@lucon.org>
Cc: "David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014132352.A489@lucon.org>
	<orof9wzq5r.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014141442.A1158@lucon.org>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 15 Oct 2002 02:00:03 -0300
In-Reply-To: <20021014141442.A1158@lucon.org>
Message-ID: <orbs5wz48c.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 38
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 430
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:

> Have you ever tried g++.dg/opt/longbranch1.C in gcc 3.2 for ELF/mips?

Yes, I have, and it has failed in the past.  I don't know about the
current status and, frankly, I don't understand what point you're
trying to make waving your hands in the general direction of
longbranch1.C while discussing whether gas would have any chance of
filling a delay slot that gcc has failed to fill.

> If you want, I can tell you where you can find a complete cross
> toolchain for Linux/mips hosted on Linux/x86.

Thanks, I've built such toolchains more than once a day lately :-)

I know the problem that branch relaxation is intended to solve: it's a
work around for a long-standing bug in the compiler.  In that it
apparently assumes that the expansion of certain macros is shorter
than they actually are, so it ends up not doing branch shortening in
some necessary situations.  This gets even worse with mips16, in which
we don't do branch shortening, and the assembler doesn't do branch
relaxation.

But while you're trying to paper over the problem, others are
rewriting the mips back end so as to not make use of macros, such that
instruction lengths will be more accurate and then branch shortening
will (hopefully) work correctly.

The compiler is the right place in which to fix out-of-range jumps,
because the compiler has better information on how to reduce the
performance impact of such transformation.  It can be fixed in the
assembler, but it can't be done as efficiently.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From aoliva@redhat.com Tue Oct 15 07:01:21 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 07:01:22 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:30630 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1123944AbSJOFBV>; Tue, 15 Oct 2002 07:01:21 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9F51BP32662;
	Tue, 15 Oct 2002 01:01:11 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9F51AxB011078;
	Tue, 15 Oct 2002 03:01:10 -0200
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9F51Ai9011074;
	Tue, 15 Oct 2002 02:01:10 -0300
To: Eric Christopher <echristo@redhat.com>
Cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014132352.A489@lucon.org> <1034630700.18841.0.camel@ghostwheel>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 15 Oct 2002 02:01:10 -0300
In-Reply-To: <1034630700.18841.0.camel@ghostwheel>
Message-ID: <or7kgkz46h.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 30
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 431
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 14, 2002, Eric Christopher <echristo@redhat.com> wrote:

> On Mon, 2002-10-14 at 13:23, H. J. Lu wrote:
>> On Mon, Oct 14, 2002 at 05:20:55PM -0300, Alexandre Oliva wrote:
>> > On Oct 14, 2002, "H. J. Lu" <hjl@lucon.org> wrote:
>> > 
>> > > If gcc just emits
>> > 
>> > > 	bne     $2,$0,$L7493
>> > > 	j       $L2
>> > 
>> > IIRC, that's exactly what GCC will emit if you don't tell it to try to
>> > fill delay slots.  If it tries to fill delay slots and fails, I doubt
>> > the assembler is going to succeed at that.
>> 
>> Is that a way to tell gcc not to fill the delay slots with nop? If gcc
>> has nothing else to fill, do nothing and let gas do its thing.

> Read mips_output_conditional_branch ()

That part I'm familiar with.  The part I'm not familiar with is
whether this would trigger problems in say the SGI assembler, or
whether such reordering of .sets would violate some MIPS assembler
specification I'm not familiar with.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From mips@illuminatus.org Tue Oct 15 08:57:49 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 08:57:50 +0200 (CEST)
Received: from h24-83-212-10.vc.shawcable.net ([24.83.212.10]:31476 "EHLO
	bard.illuminatus.org") by linux-mips.org with ESMTP
	id <S1122978AbSJOG5t>; Tue, 15 Oct 2002 08:57:49 +0200
Received: from templar ([10.0.0.2])
	by bard.illuminatus.org with esmtp (Exim 3.35 #1 (Debian))
	id 181Krv-0005OO-00; Mon, 14 Oct 2002 23:07:51 -0700
Subject: Re: Indigo2 GUI1-Extreme Documentation
From: Mike Nugent <mips@illuminatus.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: "Matthew H. Ray" <matthewhray@yahoo.com>, linux-mips@linux-mips.org
In-Reply-To: <20021008052152.B8115@linux-mips.org>
References: <20021007233953.66195.qmail@web21003.mail.yahoo.com> 
	<20021008052152.B8115@linux-mips.org>
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Ximian Evolution 1.0.3 (1.0.3-6) 
Date: 14 Oct 2002 23:55:54 -0700
Message-Id: <1034664955.12679.3.camel@templar>
Mime-Version: 1.0
Return-Path: <mips@illuminatus.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 432
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: mips@illuminatus.org
Precedence: bulk
X-list: linux-mips


How would these be accessible then?  I was told that there are no specs
for the Extreme card anywhere.  If we have something on this archived
somewhere, I'd love to take a peek.

Thanks.

On Mon, 2002-10-07 at 20:21, Ralf Baechle wrote:
> On Mon, Oct 07, 2002 at 04:39:53PM -0700, Matthew H. Ray wrote:
> 
> > I've installed Debian on my Indigo2 and I'm interested
> > in hacking on the video card in my system (a
> > GUI1-Extreme with the HQ 2.1 chipset).  I've searched
> > around quite a bit and have found little if any
> > documentation.  Can anyone direct me to any
> > documentation I might have missed, or is there simply
> > none to be found whatsoever?  Is there any chance of
> > the mailing list archive being resurrected?  Nothing
> > but broken links from the linux-mips.org webpage.
> 
> linux-mips.org moved to it's own machine.  We do keep archives on the
> machine but atm they're not accessible as HTML.
> 
>   Ralf
> 
> 
-- 
Mike Nugent
Programmer/Author
mike@illuminatus.org
"I believe the use of noise to make music will increase until we reach a
music produced through the aid of electrical instruments which will make
available for musical purposes any and all sounds that can be heard."
 -- composer John Cage, 1937



From dom@algor.co.uk Tue Oct 15 10:15:40 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 10:15:41 +0200 (CEST)
Received: from alg133.algor.co.uk ([62.254.210.133]:28613 "EHLO
	oval.algor.co.uk") by linux-mips.org with ESMTP id <S1122978AbSJOIPk>;
	Tue, 15 Oct 2002 10:15:40 +0200
Received: from gladsmuir.algor.co.uk (pubfw.algor.co.uk [62.254.210.129])
	by oval.algor.co.uk (8.11.6/8.10.1) with ESMTP id g9F8FLr20663;
	Tue, 15 Oct 2002 09:15:26 +0100 (BST)
From: Dominic Sweetman <dom@algor.co.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <15787.52889.454591.611223@gladsmuir.algor.co.uk>
Date: Tue, 15 Oct 2002 09:15:21 +0100
To: Alexandre Oliva <aoliva@redhat.com>
Cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com, nigel@algor.co.uk
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <orbs5wz48c.fsf@free.redhat.lsd.ic.unicamp.br>
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014132352.A489@lucon.org>
	<orof9wzq5r.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014141442.A1158@lucon.org>
	<orbs5wz48c.fsf@free.redhat.lsd.ic.unicamp.br>
X-Mailer: VM 6.92 under 21.1 (patch 14) "Cuyahoga Valley" XEmacs Lucid
Return-Path: <dom@algor.co.uk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 433
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dom@algor.co.uk
Precedence: bulk
X-list: linux-mips


Alexandre,

> I know the problem that branch relaxation [aka delay-slot filling by
> the assembler] is intended to solve: it's a
> work around for a long-standing bug in the compiler.  In that it
> apparently assumes that the expansion of certain macros is shorter
> than they actually are, so it ends up not doing branch shortening in
> some necessary situations.  This gets even worse with mips16, in which
> we don't do branch shortening, and the assembler doesn't do branch
> relaxation.

This true - but it isn't why it's there.  Getting the assembler
involved goes back to the early 1980s roots of the MIPS project:

o It saved putting novel and interesting code into compilers.  A safe
  and quick hack to the assembler probably catches more than half the
  delay slots available; anything other than very clever compiler work
  might do little better.  Nobody should forget that most 
  'commercial' compilers are even more ghastly than gcc.

o It concealed the deeply unfamiliar and counter-intuitive "delay
  slot" from the assembler programmer.

o At the time, MIPS' assembler was related to a DoD initiative to
  write mission-critical software via a
  slightly-higher-than-machine-language assembly code - a kind of
  "what if Ada doesn't work?" project.  As such, there was good reason
  to get the *compiler* to target assembler language.

The first GCC ports for MIPS were quick hacks using the MIPS
assembler. They made liberal use of what were effectively macro
instructions.  RISC CPUs were kind of new, and back-end coders quailed
at a machine which had no register-to-register move and where even the
nop is an alias.  More pernicious, as you say, is the use of macros
such as "la" or even "lw" which expand different ways...

Which got a whole lot worse when gcc/gas was hacked again for position
independent code and the bulk of that work was done in the assembler.

> But while you're trying to paper over the problem, others are
> rewriting the mips back end so as to not make use of macros, such that
> instruction lengths will be more accurate and then branch shortening
> will (hopefully) work correctly.

Other pressures, unfortunately, operate the other way; you could
generate substantially better position-independent MIPS code if you
were prepared to avoid committing the final instruction sequence until
the link which produced the executable or shared object...

But getting the assembler macros out of the compiler is a long-overdue
reform.

Algorithmics (now part of MIPS) have been chiselling away at this for
a long while, but opportunistically rather than as a focussed problem.
Moreover, our limited resource + the poor state of standard gcc
releases (at least up to two years ago) meant that producing a decent
usable compiler always took us so long that by the time it worked our
codebase was too old to facilitate changes going back.  We do have a
lot of useful changes for MIPS, and aim to resynchronise to 3.x and 
make a substantial attempt to get those changes back into the main
source trees, perhaps in 6 months time.

Meanwhile, do you have some sense of a plausible team and a schedule
for this reform in the 3.1.x codebase?

-- 
Dominic Sweetman
MIPS Technologies (formerly Algorithmics Ltd)
The Fruit Farm, Ely Road, Chittering, CAMBS CB5 9PH, ENGLAND
phone +44 1223 706200/fax +44 1223 706250/direct +44 1223 706205
http://www.algor.co.uk


From lubovskyamit@yahoo.com Tue Oct 15 11:42:04 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 11:42:05 +0200 (CEST)
Received: from web10908.mail.yahoo.com ([216.136.131.44]:52266 "HELO
	web10908.mail.yahoo.com") by linux-mips.org with SMTP
	id <S1122978AbSJOJmE>; Tue, 15 Oct 2002 11:42:04 +0200
Message-ID: <20021015094153.19319.qmail@web10908.mail.yahoo.com>
Received: from [192.114.47.50] by web10908.mail.yahoo.com via HTTP; Tue, 15 Oct 2002 02:41:53 PDT
Date: Tue, 15 Oct 2002 02:41:53 -0700 (PDT)
From: amit lubovsky <lubovskyamit@yahoo.com>
Subject: threads problems
To: linux-mips@linux-mips.org
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="0-1963388454-1034674913=:18525"
Return-Path: <lubovskyamit@yahoo.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 434
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: lubovskyamit@yahoo.com
Precedence: bulk
X-list: linux-mips

--0-1963388454-1034674913=:18525
Content-Type: text/plain; charset=us-ascii


Hi,

I have encountered problems to run applications with threads on mips-5kc with gcc-2.95.3 and gcc-3.0.1.

Is this a well known problem with therse compilers?, any suggestion?

Thanks.

Amit.



---------------------------------
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos, & more
faith.yahoo.com
--0-1963388454-1034674913=:18525
Content-Type: text/html; charset=us-ascii

<P>Hi,</P>
<P>I have encountered problems to run applications with threads on mips-5kc with gcc-2.95.3 and gcc-3.0.1.</P>
<P>Is this a well known problem with therse compilers?, any suggestion?</P>
<P>Thanks.</P>
<P>Amit.<FONT size=2></P></FONT><p><br><hr size=1>Do you Yahoo!?<br>
<a href="http://faith.yahoo.com">Faith Hill</a> - Exclusive Performances, Videos, & more<br>
<a href="http://faith.yahoo.com">faith.yahoo.com</a>
--0-1963388454-1034674913=:18525--

From ralf@linux-mips.org Tue Oct 15 13:13:45 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 13:13:46 +0200 (CEST)
Received: from p508B724A.dip.t-dialin.net ([80.139.114.74]:14764 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1122978AbSJOLNp>; Tue, 15 Oct 2002 13:13:45 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9FBDIn03565;
	Tue, 15 Oct 2002 13:13:18 +0200
Date: Tue, 15 Oct 2002 13:13:17 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Mike Nugent <mips@illuminatus.org>
Cc: "Matthew H. Ray" <matthewhray@yahoo.com>, linux-mips@linux-mips.org
Subject: Re: Indigo2 GUI1-Extreme Documentation
Message-ID: <20021015131317.A3307@linux-mips.org>
References: <20021007233953.66195.qmail@web21003.mail.yahoo.com> <20021008052152.B8115@linux-mips.org> <1034664955.12679.3.camel@templar>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <1034664955.12679.3.camel@templar>; from mips@illuminatus.org on Mon, Oct 14, 2002 at 11:55:54PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 435
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Mon, Oct 14, 2002 at 11:55:54PM -0700, Mike Nugent wrote:

> How would these be accessible then?  I was told that there are no specs
> for the Extreme card anywhere.  If we have something on this archived
> somewhere, I'd love to take a peek.

I was thinking about setting up a nice web archive but for the moment I've
just put the mbox list archives as they're kept by majordomo into
ftp.linux-mips.org:/pub/linux/mips/archives/linux-mips.org/.

But don't waste your time digging for non-XL graphics documentation in
the archive.  There's none.

  Ralf

From macro@ds2.pg.gda.pl Tue Oct 15 16:17:40 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 16:17:41 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:48042 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJOORk>; Tue, 15 Oct 2002 16:17:40 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id QAA16296;
	Tue, 15 Oct 2002 16:18:00 +0200 (MET DST)
Date: Tue, 15 Oct 2002 16:17:59 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Martin Schulze <joey@infodrom.org>
cc: Linux-MIPS <linux-mips@linux-mips.org>
Subject: Re: 2.5 status
In-Reply-To: <20021007200008.GV21571@finlandia.infodrom.north.de>
Message-ID: <Pine.GSO.3.96.1021015161329.13513B-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 436
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Mon, 7 Oct 2002, Martin Schulze wrote:

> I've heard that at least DECstation support is said to be broken/missing
> /whatever from 2.5.  That didn't sound promising to me, unfortunately.

 It might be better with the recent updates of the SCSI driver.  I don't
feel like wasting my time on 2.5 until our tree is close to the Linus'
one, though.  I only apply patches that I prepare for 2.4 -- hopefully
they are going to work. 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From aoliva@redhat.com Tue Oct 15 16:28:38 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 16:28:39 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:48039 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122978AbSJOO2i>; Tue, 15 Oct 2002 16:28:38 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9FESHP06844;
	Tue, 15 Oct 2002 10:28:17 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9FESFGj025422;
	Tue, 15 Oct 2002 11:28:16 -0300
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9FDmsSh025957;
	Tue, 15 Oct 2002 10:48:54 -0300
To: Dominic Sweetman <dom@algor.co.uk>
Cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com, nigel@algor.co.uk
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014132352.A489@lucon.org>
	<orof9wzq5r.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014141442.A1158@lucon.org>
	<orbs5wz48c.fsf@free.redhat.lsd.ic.unicamp.br>
	<15787.52889.454591.611223@gladsmuir.algor.co.uk>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 15 Oct 2002 10:48:53 -0300
In-Reply-To: <15787.52889.454591.611223@gladsmuir.algor.co.uk>
Message-ID: <oradlfx16i.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 54
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 437
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 15, 2002, Dominic Sweetman <dom@algor.co.uk> wrote:

> Alexandre,

>> I know the problem that branch relaxation [aka delay-slot filling by
>> the assembler] is intended to solve

You got something wrong when you added this editor note.  Branch
relaxation and delay-slot filling are an entirely different issues.
Compare branch relaxation, that turns:

beq $t4,foo
[.... lots of code such that the branch is out of range....]
foo:

into

bne $t4,0f,foo
nop
j foo
nop
0:
[.... lots of code that won't make the jump out of range....]
foo:


with delay-slot filling, that turns:

move $a0,$s3
jal foo

into

jal foo
move $a0,$s3


See any resemblance?  Me neither.


The rest of your posting seems to be based on the mis-assumption that
branch relaxation and delay-slot filling are the same thing, so I'll
refrain from making further comments.


As for schedule, it's definitely not for 3.1, since 3.1 is already
out, and so is 3.2, and even 3.3 is already feature-frozen.  As the
name of the mips rewrite branch says, it's targeted at 3.4.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From macro@ds2.pg.gda.pl Tue Oct 15 17:17:07 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 17:17:08 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:43948 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJOPRH>; Tue, 15 Oct 2002 17:17:07 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id RAA17372;
	Tue, 15 Oct 2002 17:17:24 +0200 (MET DST)
Date: Tue, 15 Oct 2002 17:17:24 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Reply-To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: "Kevin D. Kissell" <kevink@mips.com>
cc: Johannes Stezenbach <js@convergence.de>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
In-Reply-To: <01fd01c26e1d$add77240$10eca8c0@grendel>
Message-ID: <Pine.GSO.3.96.1021015171049.16503A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 438
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Mon, 7 Oct 2002, Kevin D. Kissell wrote:

> That's probably going to be a more reliable design,
> though I would still consider leaving the TLB refill handler
> untouched and counting on the fact that k1 must contain
> a non-lethal EntryLo value on return from the exception.

 Well, there is a "nop" just before the "eret" in all R4k-style TLB
exception handlers.  I see no problem to use the slot for explicit
clobbering of k0 or k1 with a single instruction like "li" or "lui". 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From macro@ds2.pg.gda.pl Tue Oct 15 17:36:11 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 17:36:11 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:23213 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJOPgL>; Tue, 15 Oct 2002 17:36:11 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id RAA17792;
	Tue, 15 Oct 2002 17:36:30 +0200 (MET DST)
Date: Tue, 15 Oct 2002 17:36:29 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Johannes Stezenbach <js@convergence.de>
cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
In-Reply-To: <20021007184344.GA17548@convergence.de>
Message-ID: <Pine.GSO.3.96.1021015171817.16503B-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 439
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Mon, 7 Oct 2002, Johannes Stezenbach wrote:

> The question is how the glibc can detect if
> a) the CPU does not have LL/SC
> b) the kernel guarantees k1 != MAGIC

 Well, since the relevant code will mostly be inlined, you don't really
need either as you can't select an alternative anyway.  The relevant
variant will be selected at the build time as it's already being done for
the ll/sc and sysmips() variants.  You may consider marking binaries as
using your approach so that the kernel refuses to run them if unsupported,
but for MIPS it isn't performed for any functionality so far, so you'd
have to study how other ports do that and which way is most suitable. 

> I also want to know if there's public interest to get such
> a change in the kernel. If yes, I will try to get a matching
> patch into glibc. If no, I will just post the current patch I
> use to the list for the hackers to pick up.

 Well, the kernel changes should be trivial, with no performance impact if
written carefully, so they might get included even if only a few people
are interested.  Send a proposal.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From js@convergence.de Tue Oct 15 18:50:53 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 18:50:54 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:53509 "EHLO
	hell") by linux-mips.org with ESMTP id <S1122978AbSJOQux>;
	Tue, 15 Oct 2002 18:50:53 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181Utz-0005XY-00; Tue, 15 Oct 2002 18:50:39 +0200
Date: Tue, 15 Oct 2002 18:50:39 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021015165039.GC21220@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <01fd01c26e1d$add77240$10eca8c0@grendel> <Pine.GSO.3.96.1021015171049.16503A-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <Pine.GSO.3.96.1021015171049.16503A-100000@delta.ds2.pg.gda.pl>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 440
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Tue, Oct 15, 2002 at 05:17:24PM +0200, Maciej W. Rozycki wrote:
> On Mon, 7 Oct 2002, Kevin D. Kissell wrote:
> 
> > That's probably going to be a more reliable design,
> > though I would still consider leaving the TLB refill handler
> > untouched and counting on the fact that k1 must contain
> > a non-lethal EntryLo value on return from the exception.
> 
>  Well, there is a "nop" just before the "eret" in all R4k-style TLB
> exception handlers.  I see no problem to use the slot for explicit
> clobbering of k0 or k1 with a single instruction like "li" or "lui". 

Now that you say it it's pretty obvious...

Thanks,
Johannes

From js@convergence.de Tue Oct 15 19:21:15 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 19:21:15 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:55301 "EHLO
	hell") by linux-mips.org with ESMTP id <S1122978AbSJORVP>;
	Tue, 15 Oct 2002 19:21:15 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181VNU-0005Yg-00; Tue, 15 Oct 2002 19:21:08 +0200
Date: Tue, 15 Oct 2002 19:21:08 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021015172108.GD21220@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20021007184344.GA17548@convergence.de> <Pine.GSO.3.96.1021015171817.16503B-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <Pine.GSO.3.96.1021015171817.16503B-100000@delta.ds2.pg.gda.pl>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 441
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Tue, Oct 15, 2002 at 05:36:29PM +0200, Maciej W. Rozycki wrote:
> On Mon, 7 Oct 2002, Johannes Stezenbach wrote:
> 
> > The question is how the glibc can detect if
> > a) the CPU does not have LL/SC
> > b) the kernel guarantees k1 != MAGIC
> 
>  Well, since the relevant code will mostly be inlined, you don't really
> need either as you can't select an alternative anyway.  The relevant
> variant will be selected at the build time as it's already being done for
> the ll/sc and sysmips() variants.  You may consider marking binaries as
> using your approach so that the kernel refuses to run them if unsupported,
> but for MIPS it isn't performed for any functionality so far, so you'd
> have to study how other ports do that and which way is most suitable. 

Well, in the (experimental) glibc-patch I posted here on
Fri, 19 Jul 2002 14:38:29 +0200 (Subject: LL/SC benchmarking),
I had some code that lets one chose the implementation
(sysmips vs. LL/SC vs. beql_k1) at run-time, based on the
existence of some "signaling" files. This was used for benchmarking.

The ability to choose the implementation at run time sacrifices
inlining, but has obvious performance benefits for the VR41XX-like
platforms. It's also not a special MIPS thing,
e.g. linuxthreads/sysdeps/<platform>/pt-machine.h has the
HAS_COMPARE_AND_SWAP / TEST_FOR_COMPARE_AND_SWAP hooks,
used by e.g. i386.

But all that is of interest only, if VR41XX-like platforms
would use a glibc from a binary distribution like RedHat or
Debian (I use Debian for development, but have a custom
compiled glibc for production use).
But it seems that this isn't the case?

> > I also want to know if there's public interest to get such
> > a change in the kernel. If yes, I will try to get a matching
> > patch into glibc. If no, I will just post the current patch I
> > use to the list for the hackers to pick up.
> 
>  Well, the kernel changes should be trivial, with no performance impact if
> written carefully, so they might get included even if only a few people
> are interested.  Send a proposal.

Yes, the kernel changes are not difficult. The difficulty was
to find out the minimal necessary changes.


Regards,
Johannes

From js@convergence.de Tue Oct 15 19:52:12 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 19:52:13 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:56069 "EHLO
	hell") by linux-mips.org with ESMTP id <S1122978AbSJORwM>;
	Tue, 15 Oct 2002 19:52:12 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181VrR-0005bx-00; Tue, 15 Oct 2002 19:52:05 +0200
Date: Tue, 15 Oct 2002 19:52:05 +0200
From: Johannes Stezenbach <js@convergence.de>
To: Daniel Jacobowitz <dan@debian.org>
Cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021015175205.GA21538@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	Daniel Jacobowitz <dan@debian.org>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20020916164034.GA12489@convergence.de> <20021007144749.GB16641@convergence.de> <01fd01c26e1d$add77240$10eca8c0@grendel> <20021007184344.GA17548@convergence.de> <20021007185136.GA16501@nevyn.them.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20021007185136.GA16501@nevyn.them.org>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 442
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Mon, Oct 07, 2002 at 02:51:36PM -0400, Daniel Jacobowitz wrote:
> On Mon, Oct 07, 2002 at 08:43:44PM +0200, Johannes Stezenbach wrote:
> > The question is how the glibc can detect if
> > a) the CPU does not have LL/SC
> > b) the kernel guarantees k1 != MAGIC
> 
> You should be using an "aux vector"; see how PowerPC provides current
> glibc with the size of a cache line.

It took me a while to figure out how aux vectors work.

It seems to me that MIPS does not use the hardware capabilities
field of the aux vector at all. TO use it, one would
have to

- add a field to struct cpuinfo_mips in include/asm-mips/processor.h,
  and set it in arch/mips/kernel/setup.c after CPU probing;
- define ELF_HWCAP in include/asm-mips/elf.h to return
  something useful from the new cpuinfo_mips field

Or, to just use it to signal "use beql k1, MAGIC instead of LL/SC",
one could just define ELF_HWCAP dependent on kernel-Config.

Anyway, we would have to document the meaning of the HWCAP bits
as part of the kernel ABI.

i386 uses this, as you can see by running e.g.
  $ LD_SHOW_AUXV=1 ls
provided you have glibc-2.2.5.

glibc/sysdeps/generic/dl-sysdep.c then reads it into dl_hwcap,
and it's up to platform specific code to use it.


Regards,
Johannes

From macro@ds2.pg.gda.pl Tue Oct 15 21:37:40 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 21:37:40 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:21430 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJOThk>; Tue, 15 Oct 2002 21:37:40 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id VAA23561;
	Tue, 15 Oct 2002 21:37:54 +0200 (MET DST)
Date: Tue, 15 Oct 2002 21:37:53 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Reply-To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Alexandre Oliva <aoliva@redhat.com>
cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <orbs5wz48c.fsf@free.redhat.lsd.ic.unicamp.br>
Message-ID: <Pine.GSO.3.96.1021015203905.20626A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 443
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On 15 Oct 2002, Alexandre Oliva wrote:

> The compiler is the right place in which to fix out-of-range jumps,
> because the compiler has better information on how to reduce the
> performance impact of such transformation.  It can be fixed in the
> assembler, but it can't be done as efficiently.

 Except that the compiler does not always have the knowledge, particularly
when inline assembly bits (insolvable) or macros such as "la" (unless gcc
gets a full-blown ABI-dependent machinery implemented) are involved.

 I think at least for the former case gas should be let relax jumps and
branches freely, so the ".set nomacro" statement should be moved to affect
instructions in delay slots only, as you suggested.

 For the latter, gas could be able to move parts of macro expansions into
delay slots and it sometimes succeeds, though it isn't particularly good
at it.  Try to assemble e.g.: "bar: lw $2,foo; b bar" for o32/PIC and for
n32/PIC.  It can't be optimized by gcc, if to be emitted, any further
currently and gas (2.13) fails that miserably for the former: 

lw.o:     file format elf32-tradlittlemips

Disassembly of section .text:

00000000 <bar>:
   0:	8f820000 	lw	v0,0(gp)
			0: R_MIPS_GOT16	foo
   4:	00000000 	nop
   8:	8c420000 	lw	v0,0(v0)
   c:	1000fffc 	b	0 <bar>
  10:	00000000 	nop
	...

but it succeeds for the latter!:

lw64.o:     file format elf64-tradlittlemips

Disassembly of section .text:

0000000000000000 <bar>:
   0:	df820000 	ld	v0,0(gp)
			0: R_MIPS_GOT_PAGE	foo
   4:	64420000 	daddiu	v0,v0,0
			4: R_MIPS_GOT_OFST	foo
   8:	1000fffd 	b	0 <bar>
   c:	8c420000 	lw	v0,0(v0)

So there is still a small gain from letting gas try to fill slots usefully
when gcc can't.  Therefore, I agree with H. J. here -- if gcc is about to
put a "nop" into a branch delay, it'd better give it up together with the
".set noreorder" directive, letting gas try again if it can come with
something better.  This isn't ever going to hurt, whether gcc gets smarter
or not, unless gas stops filling delay slots one day, which is unlikely, I
hope.

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From wilson@redhat.com Tue Oct 15 21:59:15 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 21:59:16 +0200 (CEST)
Received: from mx2.redhat.com ([12.150.115.133]:11794 "EHLO mx2.redhat.com")
	by linux-mips.org with ESMTP id <S1122978AbSJOT7P>;
	Tue, 15 Oct 2002 21:59:15 +0200
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id g9FJwRs14927;
	Tue, 15 Oct 2002 15:58:27 -0400
Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15])
	by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9FJx0l10139;
	Tue, 15 Oct 2002 15:59:01 -0400
Received: from tonopah.toronto.redhat.com (tonopah.toronto.redhat.com [172.16.14.91])
	by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g9FJwwD09263;
	Tue, 15 Oct 2002 12:58:58 -0700
Received: (from wilson@localhost)
	by tonopah.toronto.redhat.com (8.11.6/8.11.6) id g9FJwv418168;
	Tue, 15 Oct 2002 15:58:57 -0400
X-Authentication-Warning: tonopah.toronto.redhat.com: wilson set sender to wilson@redhat.com using -f
To: "H. J. Lu" <hjl@lucon.org>
Cc: Alexandre Oliva <aoliva@redhat.com>,
	Richard Sandiford <rsandifo@redhat.com>,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014082810.A28682@lucon.org>
	<wvnit05ovct.fsf@talisman.cambridge.redhat.com>
	<20021014091649.A29353@lucon.org>
	<wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
	<20021014101640.A30133@lucon.org>
	<orhefo3oht.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014105055.B30830@lucon.org>
	<orzntg298z.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014110118.B30940@lucon.org>
	<orelas24n2.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014123940.A32333@lucon.org>
From: Jim Wilson <wilson@redhat.com>
Date: 15 Oct 2002 15:58:57 -0400
In-Reply-To: <20021014123940.A32333@lucon.org>
Message-ID: <xwusmz7xym6.fsf@tonopah.toronto.redhat.com>
Lines: 16
User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <wilson@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 444
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: wilson@redhat.com
Precedence: bulk
X-list: linux-mips

>Can gcc not to emit nop nor noreorder when it tries to fill the delay
>slot with nop?

You never want the assembler to try to fill delay slots.  Consider a compiler
optimization like software pipelining.  The compiler will schedule instructions
inside a loop with full knowledge of the target pipeline to give maximum
performance.  Then the assembler picks a random instruction from the loop,
puts it in a branch delay slot, and now your code runs twice as slow because
the assembler introduced pipeline stalls.  Of course, gcc isn't good enough
yet to have this problem yet, but we will get there eventually.  Meanwhile, we
need to get out of the habit of relying on assembler optimizations.  In the
long run, assembler optimizations are bad, and we need to stop using them as
soon as possible.  Gcc should emit .set nomacro/noreorder/noat/etc at the
begining of its assembly output, and never turn them on.

Jim

From pkoning@equallogic.com Tue Oct 15 22:02:59 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 22:03:00 +0200 (CEST)
Received: from cygnus.equallogic.com ([65.170.102.10]:32777 "HELO
	cygnus.equallogic.com") by linux-mips.org with SMTP
	id <S1123930AbSJOUC7>; Tue, 15 Oct 2002 22:02:59 +0200
Received: from cygnus.equallogic.com (localhost.localdomain [127.0.0.1])
	by cygnus.equallogic.com (8.11.6/8.11.6) with ESMTP id g9FK2qN05645
	for <linux-mips@linux-mips.org>; Tue, 15 Oct 2002 16:02:52 -0400
Received: from deneb.dev.equallogic.com (deneb.dev.equallogic.com [172.16.1.99])
	by cygnus.equallogic.com (8.11.6/8.11.6) with ESMTP id g9FK2pk05633;
	Tue, 15 Oct 2002 16:02:51 -0400
Received: from pkoning.dev.equallogic.com.equallogic.com (localhost.localdomain [127.0.0.1])
	by deneb.dev.equallogic.com (8.11.6/8.11.6) with ESMTP id g9FK2om19272;
	Tue, 15 Oct 2002 16:02:51 -0400
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <15788.29802.865689.741487@pkoning.dev.equallogic.com>
Date: Tue, 15 Oct 2002 16:02:50 -0400
From: Paul Koning <pkoning@equallogic.com>
To: wilson@redhat.com
Cc: hjl@lucon.org, aoliva@redhat.com, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014082810.A28682@lucon.org>
	<wvnit05ovct.fsf@talisman.cambridge.redhat.com>
	<20021014091649.A29353@lucon.org>
	<wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com>
	<20021014101640.A30133@lucon.org>
	<orhefo3oht.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014105055.B30830@lucon.org>
	<orzntg298z.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014110118.B30940@lucon.org>
	<orelas24n2.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014123940.A32333@lucon.org>
	<xwusmz7xym6.fsf@tonopah.toronto.redhat.com>
X-Mailer: VM 7.07 under 21.1 (patch 14) "Cuyahoga Valley" XEmacs Lucid
Return-Path: <pkoning@equallogic.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 445
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: pkoning@equallogic.com
Precedence: bulk
X-list: linux-mips

>>>>> "Jim" == Jim Wilson <wilson@redhat.com> writes:

 >> Can gcc not to emit nop nor noreorder when it tries to fill the
 >> delay slot with nop?

 Jim> You never want the assembler to try to fill delay slots.
 Jim> Consider a compiler optimization like software pipelining. ...
 Jim>  Meanwhile, we need to get out of
 Jim> the habit of relying on assembler optimizations.  In the long
 Jim> run, assembler optimizations are bad, and we need to stop using
 Jim> them as soon as possible.  Gcc should emit .set
 Jim> nomacro/noreorder/noat/etc at the begining of its assembly
 Jim> output, and never turn them on.

Makes sense to me.  As an assembly language programmer, I do the same
thing in handwritten code, for the same reasons.

      paul


From wilson@redhat.com Tue Oct 15 22:19:31 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 22:19:32 +0200 (CEST)
Received: from mx2.redhat.com ([12.150.115.133]:33042 "EHLO mx2.redhat.com")
	by linux-mips.org with ESMTP id <S1122978AbSJOUTb>;
	Tue, 15 Oct 2002 22:19:31 +0200
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id g9FKIhs15013;
	Tue, 15 Oct 2002 16:18:43 -0400
Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15])
	by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9FKJHl10229;
	Tue, 15 Oct 2002 16:19:17 -0400
Received: from tonopah.toronto.redhat.com (tonopah.toronto.redhat.com [172.16.14.91])
	by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g9FKJDD10189;
	Tue, 15 Oct 2002 13:19:14 -0700
Received: (from wilson@localhost)
	by tonopah.toronto.redhat.com (8.11.6/8.11.6) id g9FKJCs24087;
	Tue, 15 Oct 2002 16:19:12 -0400
X-Authentication-Warning: tonopah.toronto.redhat.com: wilson set sender to wilson@redhat.com using -f
To: Dominic Sweetman <dom@algor.co.uk>
Cc: Alexandre Oliva <aoliva@redhat.com>, "H. J. Lu" <hjl@lucon.org>,
	"David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com, nigel@algor.co.uk
Subject: Re: MIPS gas relaxation still doesn't work
References: <20021014123940.A32333@lucon.org>
	<20021014.123510.00003943.davem@redhat.com>
	<20021014125549.A32575@lucon.org>
	<20021014.125134.98070597.davem@redhat.com>
	<20021014130932.A32693@lucon.org>
	<orwuokzs9k.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014132352.A489@lucon.org>
	<orof9wzq5r.fsf@free.redhat.lsd.ic.unicamp.br>
	<20021014141442.A1158@lucon.org>
	<orbs5wz48c.fsf@free.redhat.lsd.ic.unicamp.br>
	<15787.52889.454591.611223@gladsmuir.algor.co.uk>
From: Jim Wilson <wilson@redhat.com>
Date: 15 Oct 2002 16:19:12 -0400
In-Reply-To: <15787.52889.454591.611223@gladsmuir.algor.co.uk>
Message-ID: <xwuof9vxxof.fsf@tonopah.toronto.redhat.com>
Lines: 53
User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <wilson@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 446
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: wilson@redhat.com
Precedence: bulk
X-list: linux-mips

Your historical info is only partly accurate.

You are right about the beginning part.  In the beginning there was MIPS,
and MIPS wrote a toolchain that tried to be friendly to assembly language
programmers.  Because of this, some optimizations, mainly instruction
scheduling and delay-slot filling, were implemented in the assembler instead
of the compiler, so that they would be usuable to assembly language
programmers.  Since gcc/binutils usually follows conventions set by the
vendor, gcc/binutils did things the same way.

Later, gcc started using its own instruction scheduler and delay-slot filling
optimization passes, but we never fully moved away from relying on assembler
optimizations.

>The first GCC ports for MIPS were quick hacks using the MIPS
>assembler. They made liberal use of what were effectively macro
>instructions. 

I think this is inaccurate in a number of ways.  It is a gcc convention
to use the native assembler whenever possible, and be compatible with the
native assembler language.  We write our own assembler only when the native
one isn't good enough to bootstrap gcc, or when there is no other native
assembler, e.g. embedded and linux targets.  Similarly, we create our own
assembler language only when there isn't an existing one we can use.  So there
was nothing wrong with using the MIPS/SGI assembler for the original gcc ports.
Also, gcc followed the conventions set by the MIPS/SGI compilers, which used
macro instructions very heavily.  Thus gcc used macro instructions heavily
also.  In hindsight this was a mistake, but at the time it wasn't so obvious.

>Which got a whole lot worse when gcc/gas was hacked again for position
>independent code and the bulk of that work was done in the assembler.

I agree everything got a lot uglier when PIC support was added.  However,
it was SGI that did it first in the assembler, and gcc/gas just followed
exactly the conventions that were defined and implemented by SGI, in order
to maintain compatibility with SGI systems.

When we added PIC support for embedded systems, it was just more of the same.

>But getting the assembler macros out of the compiler is a long-overdue
>reform.

Definitely.

SGI eventually realized their original toolchain design was limiting their
performance, and when SGI introduced their 64-bit Irix6 workstations, they
used this as an excuse to write a new compiler from scratch in which all
optimizations were performed in the compiler, and no assembler optimizations
were used at all.  Gcc has unfortunately not made the switch over yet, but
people are working on it.  Once again, we are following conventions defined
by SGI.

Jim

From macro@ds2.pg.gda.pl Tue Oct 15 22:28:34 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 22:28:35 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:19128 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJOU2e>; Tue, 15 Oct 2002 22:28:34 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id WAA24825;
	Tue, 15 Oct 2002 22:28:43 +0200 (MET DST)
Date: Tue, 15 Oct 2002 22:28:42 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Paul Koning <pkoning@equallogic.com>
cc: wilson@redhat.com, hjl@lucon.org, aoliva@redhat.com,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <15788.29802.865689.741487@pkoning.dev.equallogic.com>
Message-ID: <Pine.GSO.3.96.1021015221315.23692A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 447
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Tue, 15 Oct 2002, Paul Koning wrote:

>  Jim> them as soon as possible.  Gcc should emit .set
>  Jim> nomacro/noreorder/noat/etc at the begining of its assembly
>  Jim> output, and never turn them on.
> 
> Makes sense to me.  As an assembly language programmer, I do the same
> thing in handwritten code, for the same reasons.

 Hmm, how do you select right relocations that depend on the ABI selected? 
A common macro like "lw $2,foo" may expand in three different ways
depending on which one of "-mabi=<o32|n32|64>" is used and other three
ones for "-KPIC", plus possibly more depending on other options or "foo"
itself.  Good luck handling it with "ifdefs".

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From aoliva@redhat.com Tue Oct 15 23:50:05 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 15 Oct 2002 23:50:06 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:42465 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122978AbSJOVuF>; Tue, 15 Oct 2002 23:50:05 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9FLnLP31831;
	Tue, 15 Oct 2002 17:49:22 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9FLnLGj006177;
	Tue, 15 Oct 2002 18:49:21 -0300
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9FLnIkJ006173;
	Tue, 15 Oct 2002 18:49:18 -0300
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: Paul Koning <pkoning@equallogic.com>, wilson@redhat.com,
	hjl@lucon.org, rsandifo@redhat.com, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <Pine.GSO.3.96.1021015221315.23692A-100000@delta.ds2.pg.gda.pl>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 15 Oct 2002 18:49:17 -0300
In-Reply-To: <Pine.GSO.3.96.1021015221315.23692A-100000@delta.ds2.pg.gda.pl>
Message-ID: <orof9vqso2.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 11
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 448
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 15, 2002, "Maciej W. Rozycki" <macro@ds2.pg.gda.pl> wrote:

>  Hmm, how do you select right relocations that depend on the ABI selected? 

Err...  With logic similar to that the assembler uses? :-)

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From wilson@redhat.com Wed Oct 16 00:32:43 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 00:32:44 +0200 (CEST)
Received: from mx2.redhat.com ([12.150.115.133]:49668 "EHLO mx2.redhat.com")
	by linux-mips.org with ESMTP id <S1124020AbSJOWcn>;
	Wed, 16 Oct 2002 00:32:43 +0200
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id g9FMVqs15664;
	Tue, 15 Oct 2002 18:31:52 -0400
Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15])
	by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9FMWQl10964;
	Tue, 15 Oct 2002 18:32:26 -0400
Received: from tonopah.toronto.redhat.com (tonopah.toronto.redhat.com [172.16.14.91])
	by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g9FMWND14971;
	Tue, 15 Oct 2002 15:32:23 -0700
Received: (from wilson@localhost)
	by tonopah.toronto.redhat.com (8.11.6/8.11.6) id g9FMWNU07028;
	Tue, 15 Oct 2002 18:32:23 -0400
X-Authentication-Warning: tonopah.toronto.redhat.com: wilson set sender to wilson@redhat.com using -f
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: Alexandre Oliva <aoliva@redhat.com>, "H. J. Lu" <hjl@lucon.org>,
	"David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <Pine.GSO.3.96.1021015203905.20626A-100000@delta.ds2.pg.gda.pl>
From: Jim Wilson <wilson@redhat.com>
Date: 15 Oct 2002 18:32:22 -0400
In-Reply-To: <Pine.GSO.3.96.1021015203905.20626A-100000@delta.ds2.pg.gda.pl>
Message-ID: <xwun0pfwcy1.fsf@tonopah.toronto.redhat.com>
Lines: 57
User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <wilson@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 449
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: wilson@redhat.com
Precedence: bulk
X-list: linux-mips

> Except that the compiler does not always have the knowledge, particularly
>when inline assembly bits (insolvable) or macros such as "la" (unless gcc
>gets a full-blown ABI-dependent machinery implemented) are involved.

There is a natural conflict between compiler optimization and assembler
optimization/assembler macro expansion.  If you want the best possible
compiler optimization, then you need to be willing to give up use of
assembler optimizations and assembler macros.  That includes uses in extended
asms.  We can make that work if we have to, but it is better if we don't have
to.

> For the latter, gas could be able to move parts of macro expansions into
>delay slots and it sometimes succeeds, though it isn't particularly good
>at it.

This is ISA confusion.  When you ask gas to generate o32/PIC code, it assumes
the least common denominator, which is the R2000.  The R2000 does not have
hardware interlocks on loads.  It requires a nop in between a load and the
instruction that uses the result of the load.  Therefore, we can not put a
load in a delay slot unless we know that the instruction at the branch target
does not use the result of the load.  Since gas doesn't bother to construct
a control flow graph, we have no idea what is at the branch target, and
therefore we can't put a load in the branch delay slot.

When you ask gas to generate n32/PIC code, the least common denominator is
the R4000, which does have hardware interlocks on loads, and thus we can put
a load into a delay slot.

If you ask gas to generate R4000 o32/PIC code, it will fill the delay slot
exactly like you wanted, but the code may fail at run time on some mips
processors.

> It can't be optimized by gcc, if to be emitted,

It can be optimized if we use direct cpu instructions instead of relying
on assembler macros.  Then gcc would know about the load instructions, and
would be able to place one in the branch delay slot (assuming a R4000 or
better target).

The MIPS gcc target is the only one that has this problem, because it is the
only one that relies on assembler macros for PIC support.

>So there is still a small gain from letting gas try to fill slots usefully
>when gcc can't. ...
> This isn't ever going to hurt, whether gcc gets smarter
>or not,

Yes it can hurt.  If gcc decides the optimal code for a loop requires putting
a nop in a branch delay slot, then the assembler would hurt performance if
it put another instruction there.

If your main concern is only extended asm code writting using assembler macros,
then that can be fixed by turning on assembler optimization within the
extended asm code.  In the long run though, you are better off if you stop
using assembler macros.

Jim

From rth@redhat.com Wed Oct 16 00:43:22 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 00:43:23 +0200 (CEST)
Received: from mx2.redhat.com ([12.150.115.133]:59908 "EHLO mx2.redhat.com")
	by linux-mips.org with ESMTP id <S1122978AbSJOWnW>;
	Wed, 16 Oct 2002 00:43:22 +0200
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id g9FMgYs15719;
	Tue, 15 Oct 2002 18:42:34 -0400
Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15])
	by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9FMhDl11018;
	Tue, 15 Oct 2002 18:43:14 -0400
Received: from localhost.localdomain (frothingslosh.sfbay.redhat.com [172.16.24.27])
	by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g9FMhDD15320;
	Tue, 15 Oct 2002 15:43:13 -0700
Received: (from rth@localhost)
	by localhost.localdomain (8.11.6/8.11.6) id g9FMhBw25531;
	Tue, 15 Oct 2002 15:43:11 -0700
X-Authentication-Warning: localhost.localdomain: rth set sender to rth@redhat.com using -f
Date: Tue, 15 Oct 2002 15:43:11 -0700
From: Richard Henderson <rth@redhat.com>
To: "H. J. Lu" <hjl@lucon.org>
Cc: Alexandre Oliva <aoliva@redhat.com>,
	Richard Sandiford <rsandifo@redhat.com>,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
Message-ID: <20021015224311.GL25225@redhat.com>
Mail-Followup-To: Richard Henderson <rth@redhat.com>,
	"H. J. Lu" <hjl@lucon.org>, Alexandre Oliva <aoliva@redhat.com>,
	Richard Sandiford <rsandifo@redhat.com>, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
References: <wvnit05ovct.fsf@talisman.cambridge.redhat.com> <20021014091649.A29353@lucon.org> <wvnfzv9ou6j.fsf@talisman.cambridge.redhat.com> <20021014101640.A30133@lucon.org> <orhefo3oht.fsf@free.redhat.lsd.ic.unicamp.br> <20021014105055.B30830@lucon.org> <orzntg298z.fsf@free.redhat.lsd.ic.unicamp.br> <20021014110118.B30940@lucon.org> <orelas24n2.fsf@free.redhat.lsd.ic.unicamp.br> <20021014123940.A32333@lucon.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20021014123940.A32333@lucon.org>
User-Agent: Mutt/1.4i
Return-Path: <rth@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 450
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: rth@redhat.com
Precedence: bulk
X-list: linux-mips

On Mon, Oct 14, 2002 at 12:39:40PM -0700, H. J. Lu wrote:
> Can gcc not to emit nop nor noreorder when it tries to fill the delay
> slot with nop?

Because Ideally, gcc will emit

	.set nomacro
	.set noreorder

at the top of the assembly file and never change it.
I hope Eric's mips-rewrite-branch makes it this far.


r~

From aoliva@redhat.com Wed Oct 16 02:17:27 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 02:17:28 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:27693 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1122978AbSJPAR1>; Wed, 16 Oct 2002 02:17:27 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9G0GiP22602;
	Tue, 15 Oct 2002 20:16:45 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9G0GiGj008455;
	Tue, 15 Oct 2002 21:16:44 -0300
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9G0GeI9008451;
	Tue, 15 Oct 2002 21:16:40 -0300
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <Pine.GSO.3.96.1021015203905.20626A-100000@delta.ds2.pg.gda.pl>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 15 Oct 2002 21:16:40 -0300
In-Reply-To: <Pine.GSO.3.96.1021015203905.20626A-100000@delta.ds2.pg.gda.pl>
Message-ID: <ork7kjqluf.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 17
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 451
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 15, 2002, "Maciej W. Rozycki" <macro@ds2.pg.gda.pl> wrote:

>  I think at least for the former case gas should be let relax jumps and
> branches freely, so the ".set nomacro" statement should be moved to affect
> instructions in delay slots only, as you suggested.

Except that, with the current implementation of branch relaxation,
when you enable it, each branch will mark the end of a frag, so the
assembler will be effectively unable to fill delay slots anyway, since
it won't bring instructions from the previous frag to the beginning of
the new frag.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From macro@ds2.pg.gda.pl Wed Oct 16 12:25:20 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 12:25:20 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:29907 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJPKZU>; Wed, 16 Oct 2002 12:25:20 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id MAA15358;
	Wed, 16 Oct 2002 12:25:30 +0200 (MET DST)
Date: Wed, 16 Oct 2002 12:25:30 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Alexandre Oliva <aoliva@redhat.com>
cc: Paul Koning <pkoning@equallogic.com>, wilson@redhat.com,
	hjl@lucon.org, rsandifo@redhat.com, linux-mips@linux-mips.org,
	gcc@gcc.gnu.org, binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <orof9vqso2.fsf@free.redhat.lsd.ic.unicamp.br>
Message-ID: <Pine.GSO.3.96.1021016121633.14774B-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 452
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On 15 Oct 2002, Alexandre Oliva wrote:

> >  Hmm, how do you select right relocations that depend on the ABI selected? 
> 
> Err...  With logic similar to that the assembler uses? :-)

 Except that at the assembly level you cannot guess which switches were
passed to gas.  You may try to guess with cpp, but it isn't able to get at
whatever is passed with "-Wa".  Also you have to reflect all the
conditional paths from the "asm" sections of specs in the "cpp" ones,
which is fragile. 

 Pretty tough at the moment, I'd say.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From macro@ds2.pg.gda.pl Wed Oct 16 13:03:07 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 13:03:08 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:45524 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJPLDH>; Wed, 16 Oct 2002 13:03:07 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id NAA16398;
	Wed, 16 Oct 2002 13:03:27 +0200 (MET DST)
Date: Wed, 16 Oct 2002 13:03:27 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Jim Wilson <wilson@redhat.com>
cc: Alexandre Oliva <aoliva@redhat.com>, "H. J. Lu" <hjl@lucon.org>,
	"David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <xwun0pfwcy1.fsf@tonopah.toronto.redhat.com>
Message-ID: <Pine.GSO.3.96.1021016124113.14774D-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 453
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On 15 Oct 2002, Jim Wilson wrote:

> There is a natural conflict between compiler optimization and assembler
> optimization/assembler macro expansion.  If you want the best possible
> compiler optimization, then you need to be willing to give up use of
> assembler optimizations and assembler macros.  That includes uses in extended
> asms.  We can make that work if we have to, but it is better if we don't have
> to.

 If gcc can fully handle all possible cases that gas does, I see no
problem.  That may be beneficial if done well, but will require care to
track changes done to both code generation engines to make sure they are
in sync.  If gcc keeps the recent good habit of frequent releases, then
it's perfecty acceptable.

> This is ISA confusion.  When you ask gas to generate o32/PIC code, it assumes
> the least common denominator, which is the R2000.  The R2000 does not have
> hardware interlocks on loads.  It requires a nop in between a load and the
> instruction that uses the result of the load.  Therefore, we can not put a
> load in a delay slot unless we know that the instruction at the branch target
> does not use the result of the load.  Since gas doesn't bother to construct
> a control flow graph, we have no idea what is at the branch target, and
> therefore we can't put a load in the branch delay slot.

 I'm sorry, I missed the load delay slot property first and only some time
later I recalled it (shame on me -- I even own an R3k system ;-) ).  Still
for "-mips2" the code is not exactly perfect:

la2.o:     file format elf32-tradlittlemips

Disassembly of section .text:

00000000 <bar>:
   0:	8f820000 	lw	v0,0(gp)
			0: R_MIPS_GOT16	foo
   4:	00000000 	nop
   8:	1000fffd 	b	0 <bar>
   c:	8c420000 	lw	v0,0(v0)

The "nop" is unnecessary.

> It can be optimized if we use direct cpu instructions instead of relying
> on assembler macros.  Then gcc would know about the load instructions, and
> would be able to place one in the branch delay slot (assuming a R4000 or
> better target).

 To nitpick, actually an R6000 suffices. ;-)

> The MIPS gcc target is the only one that has this problem, because it is the
> only one that relies on assembler macros for PIC support.

 So it does for non-PIC.

> Yes it can hurt.  If gcc decides the optimal code for a loop requires putting
> a nop in a branch delay slot, then the assembler would hurt performance if
> it put another instruction there.

 Once it only emits machine instructions and it can really judge the "nop"
is a win -- I agree.  Still it may emit ".set reorder; .set macro" if it
cannot judge for some reason.

> If your main concern is only extended asm code writting using assembler macros,
> then that can be fixed by turning on assembler optimization within the
> extended asm code.  In the long run though, you are better off if you stop
> using assembler macros.

 As soon as gcc supports plain machine instructions well, as I wrote in
another mail, I see no showstopper problems.  Though putting a "nop" 
surrounded with an "ifdef" clause in all load delay slots you cannot
usefully fill is not nice -- maybe a "%" code could be added to gcc to let
an assembly programmer express these "nop" fillers in a way gcc would know
about them and be able to remove them if unneeded. 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From macro@ds2.pg.gda.pl Wed Oct 16 13:06:12 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 13:06:13 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:56532 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJPLGM>; Wed, 16 Oct 2002 13:06:12 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id NAA16489;
	Wed, 16 Oct 2002 13:06:30 +0200 (MET DST)
Date: Wed, 16 Oct 2002 13:06:30 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Alexandre Oliva <aoliva@redhat.com>
cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <ork7kjqluf.fsf@free.redhat.lsd.ic.unicamp.br>
Message-ID: <Pine.GSO.3.96.1021016130338.14774E-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 454
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On 15 Oct 2002, Alexandre Oliva wrote:

> Except that, with the current implementation of branch relaxation,
> when you enable it, each branch will mark the end of a frag, so the
> assembler will be effectively unable to fill delay slots anyway, since
> it won't bring instructions from the previous frag to the beginning of
> the new frag.

 Too bad.  But the marking could get disabled if ".set nomacro" was on for
a branch, couldn't it?

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From macro@ds2.pg.gda.pl Wed Oct 16 14:20:25 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 14:20:25 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:34007 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1122978AbSJPMUZ>; Wed, 16 Oct 2002 14:20:25 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id OAA19086;
	Wed, 16 Oct 2002 14:20:42 +0200 (MET DST)
Date: Wed, 16 Oct 2002 14:20:42 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Reply-To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Johannes Stezenbach <js@convergence.de>
cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
In-Reply-To: <20021015172108.GD21220@convergence.de>
Message-ID: <Pine.GSO.3.96.1021016140828.14774I-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 455
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Tue, 15 Oct 2002, Johannes Stezenbach wrote:

> The ability to choose the implementation at run time sacrifices
> inlining, but has obvious performance benefits for the VR41XX-like
> platforms. It's also not a special MIPS thing,
> e.g. linuxthreads/sysdeps/<platform>/pt-machine.h has the
> HAS_COMPARE_AND_SWAP / TEST_FOR_COMPARE_AND_SWAP hooks,
> used by e.g. i386.

 It also introduces an indirect call (jump?) overhead.  Anyway, you don't
need to sacrifice anything.  We may simply assume the universally
compatible way is the R3k one (be it sysmips() or whatever, if it gets
replaced).  Then there is the branch-likely way, which requires
branch-likely support (thus excludes R3k-class processors).  Then there is
the ll/sc way, which requires ll/sc (thus excludes R3k-class processors
and ones that lack the ll/sc instructions).  And you select the minimum
set of features required at the build time. 

> But all that is of interest only, if VR41XX-like platforms
> would use a glibc from a binary distribution like RedHat or
> Debian (I use Debian for development, but have a custom
> compiled glibc for production use).

 I wouldn't care of distributions -- if one really needs optimized
binaries it may make them be build somehow (either by doing the task
oneself or by convincing someone else).

> Yes, the kernel changes are not difficult. The difficulty was
> to find out the minimal necessary changes.

 You need to spot all kernel exit points.  Until we have R6k support it
means "eret" instructions. 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +



From js@convergence.de Wed Oct 16 14:52:49 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 14:52:49 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:15878 "EHLO
	hell") by linux-mips.org with ESMTP id <S1122978AbSJPMwt>;
	Wed, 16 Oct 2002 14:52:49 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181nf7-0006Zh-00; Wed, 16 Oct 2002 14:52:33 +0200
Date: Wed, 16 Oct 2002 14:52:33 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021016125233.GA25227@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20021015172108.GD21220@convergence.de> <Pine.GSO.3.96.1021016140828.14774I-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <Pine.GSO.3.96.1021016140828.14774I-100000@delta.ds2.pg.gda.pl>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 456
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Wed, Oct 16, 2002 at 02:20:42PM +0200, Maciej W. Rozycki wrote:
> 
>  It also introduces an indirect call (jump?) overhead.  Anyway, you don't
> need to sacrifice anything.  We may simply assume the universally
> compatible way is the R3k one (be it sysmips() or whatever, if it gets
> replaced).  Then there is the branch-likely way, which requires
> branch-likely support (thus excludes R3k-class processors).  Then there is
> the ll/sc way, which requires ll/sc (thus excludes R3k-class processors
> and ones that lack the ll/sc instructions).  And you select the minimum
> set of features required at the build time. 

sysmips is history with current glibc since the Linux kernel emulates
LL/SC for CPUs that don't have it. This emulation is actually faster than
sysmips. (You'd think it's slower because it's one syscall vs. two
emulated instructions. But with LL/SC glibc can use test-and-set
which enables a more efficient linux-threads mutex implementation.)

AFAIK, current Linux distributions based on glibc-2.2.5 were built for
R3K be default and thus used sysmips even on platforms which have
LL/SC.

> > But all that is of interest only, if VR41XX-like platforms
> > would use a glibc from a binary distribution like RedHat or
> > Debian (I use Debian for development, but have a custom
> > compiled glibc for production use).
> 
>  I wouldn't care of distributions -- if one really needs optimized
> binaries it may make them be build somehow (either by doing the task
> oneself or by convincing someone else).

OK, that simplifies the issue. I will prepare a patches for
Linux and glibc.


Regards,
Johannes

From aoliva@redhat.com Wed Oct 16 15:39:29 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 15:39:30 +0200 (CEST)
Received: from nat-pool-rdu.redhat.com ([66.187.233.200]:22073 "EHLO
	lacrosse.corp.redhat.com") by linux-mips.org with ESMTP
	id <S1123253AbSJPNj3>; Wed, 16 Oct 2002 15:39:29 +0200
Received: from free.redhat.lsd.ic.unicamp.br (aoliva2.cipe.redhat.com [10.0.1.156])
	by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id g9GDbqP21139;
	Wed, 16 Oct 2002 09:37:56 -0400
Received: from free.redhat.lsd.ic.unicamp.br (localhost.localdomain [127.0.0.1])
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5) with ESMTP id g9GDbZjk004840;
	Wed, 16 Oct 2002 10:37:35 -0300
Received: (from aoliva@localhost)
	by free.redhat.lsd.ic.unicamp.br (8.12.5/8.12.5/Submit) id g9GDaS3C004822;
	Wed, 16 Oct 2002 10:36:28 -0300
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <Pine.GSO.3.96.1021016130338.14774E-100000@delta.ds2.pg.gda.pl>
From: Alexandre Oliva <aoliva@redhat.com>
Organization: GCC Team, Red Hat
Date: 16 Oct 2002 10:36:28 -0300
In-Reply-To: <Pine.GSO.3.96.1021016130338.14774E-100000@delta.ds2.pg.gda.pl>
Message-ID: <ork7kiy083.fsf@free.redhat.lsd.ic.unicamp.br>
Lines: 23
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <aoliva@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 457
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: aoliva@redhat.com
Precedence: bulk
X-list: linux-mips

On Oct 16, 2002, "Maciej W. Rozycki" <macro@ds2.pg.gda.pl> wrote:

> On 15 Oct 2002, Alexandre Oliva wrote:
>> Except that, with the current implementation of branch relaxation,
>> when you enable it, each branch will mark the end of a frag, so the
>> assembler will be effectively unable to fill delay slots anyway, since
>> it won't bring instructions from the previous frag to the beginning of
>> the new frag.

>  Too bad.  But the marking could get disabled if ".set nomacro" was on for
> a branch, couldn't it?

Err...  Yes, indeed, this is already the case, now that I think of
it.  Only when the branch is a relaxation candidate does it become the
end of a variable-sized frag.  Branches within nomacro sections are
not relaxed in the current implementation, so we handle them just as
before.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer

From macro@ds2.pg.gda.pl Wed Oct 16 16:12:53 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 16:12:54 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:18651 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123253AbSJPOMx>; Wed, 16 Oct 2002 16:12:53 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id QAA22148;
	Wed, 16 Oct 2002 16:13:07 +0200 (MET DST)
Date: Wed, 16 Oct 2002 16:13:07 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Alexandre Oliva <aoliva@redhat.com>
cc: "H. J. Lu" <hjl@lucon.org>, "David S. Miller" <davem@redhat.com>,
	rsandifo@redhat.com, linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
In-Reply-To: <ork7kiy083.fsf@free.redhat.lsd.ic.unicamp.br>
Message-ID: <Pine.GSO.3.96.1021016160858.19873D-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 458
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On 16 Oct 2002, Alexandre Oliva wrote:

> >  Too bad.  But the marking could get disabled if ".set nomacro" was on for
> > a branch, couldn't it?
> 
> Err...  Yes, indeed, this is already the case, now that I think of
> it.  Only when the branch is a relaxation candidate does it become the
> end of a variable-sized frag.  Branches within nomacro sections are
> not relaxed in the current implementation, so we handle them just as
> before.

 OK then.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From js@convergence.de Wed Oct 16 18:30:49 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 18:30:49 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:38662 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123253AbSJPQat>;
	Wed, 16 Oct 2002 18:30:49 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181r4A-0006uy-00; Wed, 16 Oct 2002 18:30:38 +0200
Date: Wed, 16 Oct 2002 18:30:38 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021016163038.GA26585@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20021015172108.GD21220@convergence.de> <Pine.GSO.3.96.1021016140828.14774I-100000@delta.ds2.pg.gda.pl> <20021016125233.GA25227@convergence.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20021016125233.GA25227@convergence.de>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 459
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

I wrote:

> sysmips is history with current glibc since the Linux kernel emulates
> LL/SC for CPUs that don't have it. This emulation is actually faster than
> sysmips. (You'd think it's slower because it's one syscall vs. two
> emulated instructions. But with LL/SC glibc can use test-and-set
                                                      ^^^^^^^^^^^^
> which enables a more efficient linux-threads mutex implementation.)

Oops, I meant compare-and-swap.


Johannes

From wilson@redhat.com Wed Oct 16 18:43:45 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 18:43:45 +0200 (CEST)
Received: from mx2.redhat.com ([12.150.115.133]:27155 "EHLO mx2.redhat.com")
	by linux-mips.org with ESMTP id <S1123253AbSJPQnp>;
	Wed, 16 Oct 2002 18:43:45 +0200
Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26])
	by mx2.redhat.com (8.11.6/8.11.6) with ESMTP id g9GGgrs20888;
	Wed, 16 Oct 2002 12:42:53 -0400
Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15])
	by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g9GGhYl15006;
	Wed, 16 Oct 2002 12:43:34 -0400
Received: from tonopah.toronto.redhat.com (tonopah.toronto.redhat.com [172.16.14.91])
	by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g9GGhVD06062;
	Wed, 16 Oct 2002 09:43:31 -0700
Received: (from wilson@localhost)
	by tonopah.toronto.redhat.com (8.11.6/8.11.6) id g9GGhUf08543;
	Wed, 16 Oct 2002 12:43:30 -0400
X-Authentication-Warning: tonopah.toronto.redhat.com: wilson set sender to wilson@redhat.com using -f
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: Alexandre Oliva <aoliva@redhat.com>, "H. J. Lu" <hjl@lucon.org>,
	"David S. Miller" <davem@redhat.com>, rsandifo@redhat.com,
	linux-mips@linux-mips.org, gcc@gcc.gnu.org,
	binutils@sources.redhat.com
Subject: Re: MIPS gas relaxation still doesn't work
References: <Pine.GSO.3.96.1021016124113.14774D-100000@delta.ds2.pg.gda.pl>
From: Jim Wilson <wilson@redhat.com>
Date: 16 Oct 2002 12:43:30 -0400
In-Reply-To: <Pine.GSO.3.96.1021016124113.14774D-100000@delta.ds2.pg.gda.pl>
Message-ID: <xwu1y6qqqq5.fsf@tonopah.toronto.redhat.com>
Lines: 13
User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Return-Path: <wilson@redhat.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 460
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: wilson@redhat.com
Precedence: bulk
X-list: linux-mips

>  Still for "-mips2" the code is not exactly perfect:

I'm guessing that gas is only doing one pass.  When it first looks at the
first load, the nop is necessary.  When it later moves the second load into
the branch delay slot, it doesn't go back and check to see if the nop after
the first load is still necessary.  To get this perfect, we would have to
add global optimization support to gas, so that it considered all nop
insertions and branch delay slot filling all at the same time, and iterated
until it got the best code.  I think it is pointless to do this kind of
stuff in an assembler when we already have an optimizing compiler that already
has infrastructure to do this kind of stuff.

Jim

From js@convergence.de Wed Oct 16 20:11:53 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 20:11:54 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:47110 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123253AbSJPSLx>;
	Wed, 16 Oct 2002 20:11:53 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181sdr-00072G-00; Wed, 16 Oct 2002 20:11:35 +0200
Date: Wed, 16 Oct 2002 20:11:35 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021016181135.GA26994@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20021007184344.GA17548@convergence.de> <Pine.GSO.3.96.1021015171817.16503B-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <Pine.GSO.3.96.1021015171817.16503B-100000@delta.ds2.pg.gda.pl>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 461
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Tue, Oct 15, 2002 at 05:36:29PM +0200, Maciej W. Rozycki wrote:
>  Well, the kernel changes should be trivial, with no performance impact if
> written carefully, so they might get included even if only a few people
> are interested.  Send a proposal.

Here's patch for the kernel. Tested on a VR41XX, but my glibc
patch needs some cleanup and so will be posted seperately.

I thought "explicit is better than implicit" and thus added
many small changes depending on CONFIG_CPU_USERSPACE_LLSC_EMUL
before every eret.

The changes in tlbex-r4k.S are not stricly necessary, since
in current code k1 always ends up with a CP0_ENTRYLO value
with has bit31 == 0, which is sufficient for the glibc-patch.
Also, the 'move k1,zero' does not add any overhead and thus
could be done unconditionally.
But i thought that adding the #ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
prevents possible future changes from accidentally breaking this.

The patch is only for the VR41XX. I'm not shure what other CPUs
fall into the same category. If I read binutils/opcodes/mips-opc.c
correctly, then the TX39XX, while not being ISA2, has beql.

Please tell me if the patch is acceptable.

Possible options:
- don't mess with tlbex-r4k.S
- or unconditonally replace the 'nop's before 'eret's in tlbex-r4k.S with
  'move k1,zero' plus a comment
- drop the CONFIG_CPU_USERSPACE_LLSC_EMUL configuration option and
  always clear k1 in RESTORE_SP_AND_RET for the VR41XX


Regards,
Johannes

From js@convergence.de Wed Oct 16 20:23:46 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 16 Oct 2002 20:23:46 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:50438 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123253AbSJPSXq>;
	Wed, 16 Oct 2002 20:23:46 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 181spU-00075K-00; Wed, 16 Oct 2002 20:23:36 +0200
Date: Wed, 16 Oct 2002 20:23:35 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021016182335.GA27216@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20021007184344.GA17548@convergence.de> <Pine.GSO.3.96.1021015171817.16503B-100000@delta.ds2.pg.gda.pl> <20021016181135.GA26994@convergence.de>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="X1bOJ3K7DJ5YkBrT"
Content-Disposition: inline
In-Reply-To: <20021016181135.GA26994@convergence.de>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 462
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips


--X1bOJ3K7DJ5YkBrT
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Wed, Oct 16, 2002 at 08:11:35PM +0200, Johannes Stezenbach wrote:
> Here's patch for the kernel.

Now with the patch...

Johannes

--X1bOJ3K7DJ5YkBrT
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="linux-mips-nollsc.patch"

Index: Documentation/Configure.help
===================================================================
RCS file: /home/cvs/linux/Documentation/Attic/Configure.help,v
retrieving revision 1.109.2.9
diff -u -r1.109.2.9 Configure.help
--- Documentation/Configure.help	3 Oct 2002 01:27:58 -0000	1.109.2.9
+++ Documentation/Configure.help	16 Oct 2002 17:44:12 -0000
@@ -2349,6 +2349,20 @@
   for better performance, N if you don't know.  You must say Y here
   for multiprocessor machines.
 
+Support userspace ll/sc emulation
+CONFIG_CPU_USERSPACE_LLSC_EMUL
+  Say Y here if your CPU does not have the Load Linked (ll)
+  and Store Conditional (sc) instructions, but supports
+  the Branch Likely instructions, e.g. the NEC VR41xx CPUs.
+  Then the kernel guarantees that the k1 register is 0 after
+  any transition from kernel to userspace, which enables an
+  optimized system library to implement a userspace-only
+  ll/sc emulation.
+
+  If you don't run multithreaded software or don't have a
+  matching libpthread, you don't need it.
+  If in doubt, say N.
+
 lld and scd instructions available
 CONFIG_CPU_HAS_LLDSCD
   Say Y here if your CPU has the lld and scd instructions, the 64-bit
Index: arch/mips/config-shared.in
===================================================================
RCS file: /home/cvs/linux/arch/mips/config-shared.in,v
retrieving revision 1.1.2.23
diff -u -r1.1.2.23 config-shared.in
--- arch/mips/config-shared.in	6 Oct 2002 12:28:03 -0000	1.1.2.23
+++ arch/mips/config-shared.in	16 Oct 2002 17:44:12 -0000
@@ -547,6 +547,11 @@
 dep_bool 'Override CPU Options' CONFIG_CPU_ADVANCED $CONFIG_MIPS32
 if [ "$CONFIG_CPU_ADVANCED" = "y" ]; then
    bool '  ll/sc Instructions available' CONFIG_CPU_HAS_LLSC
+   if [ "$CONFIG_CPU_HAS_LLSC" = "n" ]; then
+      bool '    Support userspace atomic ops for MIPS2 CPUs' CONFIG_CPU_USERSPACE_LLSC_EMUL
+   else
+      define_bool CONFIG_CPU_USERSPACE_LLSC_EMUL n
+   fi
    bool '  lld/scd Instructions available' CONFIG_CPU_HAS_LLDSCD
    bool '  Writeback Buffer available' CONFIG_CPU_HAS_WB
 else
@@ -562,6 +567,11 @@
 	 define_bool CONFIG_CPU_HAS_LLDSCD n
 	 define_bool CONFIG_CPU_HAS_WB n
       fi
+      if [ "$CONFIG_CPU_VR41XX" = "y" ]; then
+         define_bool CONFIG_CPU_USERSPACE_LLSC_EMUL y
+      else
+         define_bool CONFIG_CPU_USERSPACE_LLSC_EMUL n
+      fi
    else
       if [ "$CONFIG_CPU_MIPS32" = "y" ]; then
 	 define_bool CONFIG_CPU_HAS_LLSC y
@@ -572,6 +582,7 @@
 	 define_bool CONFIG_CPU_HAS_LLDSCD y
 	 define_bool CONFIG_CPU_HAS_WB n
       fi
+      define_bool CONFIG_CPU_USERSPACE_LLSC_EMUL n
    fi
 fi
 if [ "$CONFIG_CPU_R3000" = "y" ]; then
Index: arch/mips/mm/tlbex-r4k.S
===================================================================
RCS file: /home/cvs/linux/arch/mips/mm/tlbex-r4k.S,v
retrieving revision 1.2.2.10
diff -u -r1.2.2.10 tlbex-r4k.S
--- arch/mips/mm/tlbex-r4k.S	2 Oct 2002 19:42:04 -0000	1.2.2.10
+++ arch/mips/mm/tlbex-r4k.S	16 Oct 2002 17:44:12 -0000
@@ -182,7 +182,11 @@
 	b	1f
 	tlbwr					# write random tlb entry
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	eret					# return from trap
 	END(except_vec0_r4000)
 
@@ -207,7 +211,11 @@
 	P_MTC0	k1, CP0_ENTRYLO1
 	nop
 	tlbwr
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	eret
 	END(except_vec0_r4600)
 
@@ -244,7 +252,11 @@
 	nop					# QED specified nops
 	nop
 	tlbwr					# write random tlb entry
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop					# traditional nop
+#endif
 	eret					# return from trap
 	END(except_vec0_nevada)
 
@@ -276,7 +288,12 @@
 	P_MTC0	k1, CP0_ENTRYLO1		# load it
 	b	1f
 	tlbwr					# write random tlb entry
-1:	nop
+1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
+	nop
+#endif
 2:	eret					# return from trap
 	END(except_vec0_sb1_m3)
 #endif /* BCM1250_M3_WAR */
@@ -308,7 +325,11 @@
 	bltzl	k0, 1f
 	tlbwr
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	eret
 	END(except_vec0_r45k_bvahwbug)
 
@@ -340,7 +361,11 @@
 	bltzl	k0, 1f
 	tlbwr
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	eret
 	END(except_vec0_r4k_mphwbug)
 #endif
@@ -371,7 +396,11 @@
 	b	1f
 	tlbwr
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	eret
 	END(except_vec0_r4k_250MHZhwbug)
 
@@ -405,7 +434,11 @@
 	bltzl	k0, 1f
 	tlbwr
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	eret
 	END(except_vec0_r4k_MP250MHZhwbug)
 #endif
@@ -456,7 +489,11 @@
 	b	1f
 	 tlbwi
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	.set	mips3
 	eret
 	.set	mips0
@@ -482,7 +519,11 @@
 	b	1f
 	 tlbwi
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	.set	mips3
 	eret
 	.set	mips0
@@ -513,7 +554,11 @@
 	b	1f
 	 tlbwi
 1:
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+	move k1, zero
+#else
 	nop
+#endif
 	.set	mips3
 	eret
 	.set	mips0
Index: include/asm-mips/stackframe.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/stackframe.h,v
retrieving revision 1.18.2.2
diff -u -r1.18.2.2 stackframe.h
--- include/asm-mips/stackframe.h	5 Aug 2002 23:53:37 -0000	1.18.2.2
+++ include/asm-mips/stackframe.h	16 Oct 2002 17:44:13 -0000
@@ -201,8 +201,15 @@
 		lw	$3,  PT_R3(sp);                  \
 		lw	$2,  PT_R2(sp)
 
+#ifdef CONFIG_CPU_USERSPACE_LLSC_EMUL
+#define CLEAR_K1 move k1,$0;
+#else
+#define CLEAR_K1
+#endif
+
 #define RESTORE_SP_AND_RET                               \
 		lw	sp,  PT_R29(sp);                 \
+		CLEAR_K1                                 \
 		.set	mips3;				 \
 		eret;					 \
 		.set	mips0

--X1bOJ3K7DJ5YkBrT--

From kwalker@broadcom.com Thu Oct 17 01:54:06 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 01:54:06 +0200 (CEST)
Received: from mms2.broadcom.com ([63.70.210.59]:5 "EHLO mms2")
	by linux-mips.org with ESMTP id <S1123891AbSJPXyG>;
	Thu, 17 Oct 2002 01:54:06 +0200
Received: from 63.70.210.1 by mms2 with ESMTP (Broadcom MMS2 SMTP Relay
 (MMS v5.0)); Wed, 16 Oct 2002 16:51:27 -0700
X-Server-Uuid: 59F48136-7074-4F4B-B709-D7F3B6466DB0
Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com
 [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP
 id QAA22273 for <linux-mips@linux-mips.org>; Wed, 16 Oct 2002 16:53:48
 -0700 (PDT)
Received: from dt-sj3-158.sj.broadcom.com (dt-sj3-158 [10.21.64.158]) by
 mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id
 g9GNrlER004016 for <linux-mips@linux-mips.org>; Wed, 16 Oct 2002 16:53:
 47 -0700 (PDT)
Received: from broadcom.com (IDENT:kwalker@localhost [127.0.0.1]) by
 dt-sj3-158.sj.broadcom.com (8.9.3/8.9.3) with ESMTP id QAA14850 for
 <linux-mips@linux-mips.org>; Wed, 16 Oct 2002 16:53:47 -0700
Message-ID: <3DADFC0B.81C8C058@broadcom.com>
Date: Wed, 16 Oct 2002 16:53:47 -0700
From: "Kip Walker" <kwalker@broadcom.com>
Organization: Broadcom Corp. BPBU
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.5-beta4va3.20 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: linux-mips@linux-mips.org
Subject: break_cow and cache flushing
X-WSS-ID: 11B324F5126344-01-01
Content-Type: text/plain;
 charset=us-ascii
Content-Transfer-Encoding: 7bit
Return-Path: <kwalker@broadcom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 463
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kwalker@broadcom.com
Precedence: bulk
X-list: linux-mips


Can anyone comment on the following observations:

1) 'flush_cache_page' seems to be intended for flushing virtually
indexed dcaches when a virtual->physical mapping changes (based on
PAddr)
2) 'flush_page_to_ram' is also related to avoiding virtual aliasing in
the dcache (based on VAddr)
3) 'flush_icache_page' seems to be intended for making the icache
coherent with the dcache after an executable page has been filled
4) 'break_cow' may copy an executable page that is marked executable,
for example a stack page (which has VM_EXEC) and might contain a live
signal trampoline

On a CPU with writeback physically indexed/tagged dcache and virtually
indexed icache that isn't coherent with the dcache, (1) and (2) are NOPs
and (3) must writeback the dcache and flush the icache.

BUT either my understanding of (1) or (2) is wrong, or 'break_cow' needs
to do a 'flush_icache_page' when the page is executable.  Consider the
following (evil) case.

A process takes a signal, and calls 'fork' from the handler.  The signal
trampoline is sitting in the stack, and both processes end up with the
stack page COW.  The parent ends up breaking the COW and so it gets the
new copy of the page, but if the caches aren't flushed, it may execute
garbage from the old contents of the new stack page.

Whew.

I've verified that doing a 'flush_icache_page' in 'break_cow' whenever
an executable page is copied (which shouldn't be too often, I'd guess)
and leaving 'flush_cache_page' and 'flush_page_to_ram' as NOPs seems
stable (and fixes the previously crashing case described above).

Kip


From ralf@linux-mips.org Thu Oct 17 04:04:54 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 04:04:55 +0200 (CEST)
Received: from p508B6FF8.dip.t-dialin.net ([80.139.111.248]:15295 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123891AbSJQCEy>; Thu, 17 Oct 2002 04:04:54 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9H24iq26685;
	Thu, 17 Oct 2002 04:04:44 +0200
Date: Thu, 17 Oct 2002 04:04:44 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Kip Walker <kwalker@broadcom.com>
Cc: linux-mips@linux-mips.org
Subject: Re: break_cow and cache flushing
Message-ID: <20021017040444.A26285@linux-mips.org>
References: <3DADFC0B.81C8C058@broadcom.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3DADFC0B.81C8C058@broadcom.com>; from kwalker@broadcom.com on Wed, Oct 16, 2002 at 04:53:47PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 464
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 16, 2002 at 04:53:47PM -0700, Kip Walker wrote:

> BUT either my understanding of (1) or (2) is wrong, or 'break_cow' needs
> to do a 'flush_icache_page' when the page is executable.  Consider the
> following (evil) case.

Ok, didn't get hold of Rik but another mm guy.  He agrees that fix is what
should be used.

Coincidentally that also explains a problem the ia64 guys were seeing :-)

  Ralf

From ralf@linux-mips.org Thu Oct 17 04:10:06 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 04:10:06 +0200 (CEST)
Received: from p508B6FF8.dip.t-dialin.net ([80.139.111.248]:19135 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123891AbSJQCKG>; Thu, 17 Oct 2002 04:10:06 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9H29vk26805;
	Thu, 17 Oct 2002 04:09:57 +0200
Date: Thu, 17 Oct 2002 04:09:56 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Kip Walker <kwalker@broadcom.com>
Cc: linux-mips@linux-mips.org
Subject: Re: break_cow and cache flushing
Message-ID: <20021017040956.B26285@linux-mips.org>
References: <3DADFC0B.81C8C058@broadcom.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3DADFC0B.81C8C058@broadcom.com>; from kwalker@broadcom.com on Wed, Oct 16, 2002 at 04:53:47PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 465
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 16, 2002 at 04:53:47PM -0700, Kip Walker wrote:

To add a few technical details ...

> 1) 'flush_cache_page' seems to be intended for flushing virtually
> indexed dcaches when a virtual->physical mapping changes (based on
> PAddr)

Yes.

> 2) 'flush_page_to_ram' is also related to avoiding virtual aliasing in
> the dcache (based on VAddr)

Yes again.

Note that flush_page_to_ram is deprecated and should be implement as empty
function for all architecture and the other flushing mechanisms be used
instead.

> 3) 'flush_icache_page' seems to be intended for making the icache
> coherent with the dcache after an executable page has been filled

Yes.

> 4) 'break_cow' may copy an executable page that is marked executable,
> for example a stack page (which has VM_EXEC) and might contain a live
> signal trampoline

Yes.

> On a CPU with writeback physically indexed/tagged dcache and virtually
> indexed icache that isn't coherent with the dcache, (1) and (2) are NOPs
> and (3) must writeback the dcache and flush the icache.

Yes, where this is getting complicated by some CPUs where remote i-caches
are coherent but the local isn't.

  Ralf

From nigel@aims.com.au Thu Oct 17 05:03:07 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 05:03:08 +0200 (CEST)
Received: from eth0.lnk.aims.com.au ([203.31.73.253]:23560 "EHLO
	postoffice.aims.com.au") by linux-mips.org with ESMTP
	id <S1123891AbSJQDDH>; Thu, 17 Oct 2002 05:03:07 +0200
Received: from postoffice.aims.com.au (nts-ts1.aims.private [192.168.10.2])
	by postoffice.aims.com.au  with ESMTP id g9H32luP068456
	for <linux-mips@linux-mips.org>; Thu, 17 Oct 2002 14:02:48 +1100 (EST)
	(envelope-from nigel@aims.com.au)
Received: from ntsts1 by aims.com.au
	with SMTP (MDaemon.v3.5.3.R)
	for <linux-mips@linux-mips.org>; Thu, 17 Oct 2002 13:49:05 +1100
Reply-To: <nigel@aims.com.au>
From: "Nigel Weeks" <nigel@aims.com.au>
To: "Linux-Mips \(E-mail\)" <linux-mips@linux-mips.org>
Subject: RE: break_cow and cache flushing
Date: Thu, 17 Oct 2002 13:49:03 +1100
Message-ID: <000901c27587$c1988c30$020aa8c0@aims.private>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="US-ASCII"
Content-Transfer-Encoding: 7bit
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2911.0)
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700
Importance: Normal
In-Reply-To: <3DADFC0B.81C8C058@broadcom.com>
X-Return-Path: nigel@aims.com.au
X-MDaemon-Deliver-To: linux-mips@linux-mips.org
X-Virus-Scanned: by amavisd-milter (http://amavis.org/)
Return-Path: <nigel@aims.com.au>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 466
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: nigel@aims.com.au
Precedence: bulk
X-list: linux-mips

MOO!, Don't hurt me, MOOOO!!!!

(cow collapses against the fence, twitching and subsiding into silience, as
the farmer loads the offcut onto the carry-all)



sorry, just had to...


-----Original Message-----
From: linux-mips-bounce@linux-mips.org
[mailto:linux-mips-bounce@linux-mips.org]On Behalf Of Kip Walker
Sent: Thursday, 17 October 2002 10:54
To: linux-mips@linux-mips.org
Subject: break_cow and cache flushing



Can anyone comment on the following observations:

1) 'flush_cache_page' seems to be intended for flushing virtually
indexed dcaches when a virtual->physical mapping changes (based on
PAddr)
2) 'flush_page_to_ram' is also related to avoiding virtual aliasing in
the dcache (based on VAddr)
3) 'flush_icache_page' seems to be intended for making the icache
coherent with the dcache after an executable page has been filled
4) 'break_cow' may copy an executable page that is marked executable,
for example a stack page (which has VM_EXEC) and might contain a live
signal trampoline

On a CPU with writeback physically indexed/tagged dcache and virtually
indexed icache that isn't coherent with the dcache, (1) and (2) are NOPs
and (3) must writeback the dcache and flush the icache.

BUT either my understanding of (1) or (2) is wrong, or 'break_cow' needs
to do a 'flush_icache_page' when the page is executable.  Consider the
following (evil) case.

A process takes a signal, and calls 'fork' from the handler.  The signal
trampoline is sitting in the stack, and both processes end up with the
stack page COW.  The parent ends up breaking the COW and so it gets the
new copy of the page, but if the caches aren't flushed, it may execute
garbage from the old contents of the new stack page.

Whew.

I've verified that doing a 'flush_icache_page' in 'break_cow' whenever
an executable page is copied (which shouldn't be too often, I'd guess)
and leaving 'flush_cache_page' and 'flush_page_to_ram' as NOPs seems
stable (and fixes the previously crashing case described above).

Kip



From raiko@niisi.msk.ru Thu Oct 17 11:45:19 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 11:45:19 +0200 (CEST)
Received: from t111.niisi.ras.ru ([193.232.173.111]:14156 "EHLO
	t111.niisi.ras.ru") by linux-mips.org with ESMTP
	id <S1123891AbSJQJpT>; Thu, 17 Oct 2002 11:45:19 +0200
Received: from t06.niisi.ras.ru (t06.niisi.ras.ru [193.232.173.6])
	by t111.niisi.ras.ru (8.9.1/8.9.1) with ESMTP id MAA04049;
	Thu, 17 Oct 2002 12:43:51 +0300
Received: (from uucp@localhost) by t06.niisi.ras.ru (8.7.6/8.7.3) with UUCP id NAA31589; Thu, 17 Oct 2002 13:04:06 +0300
Received: from niisi.msk.ru (t34 [193.232.173.34])
	by niisi.msk.ru (8.12.5/8.12.5) with ESMTP id g9H9fnpa003692;
	Thu, 17 Oct 2002 13:41:50 +0400 (MSK)
Message-ID: <3DAE872E.D5EF0E4D@niisi.msk.ru>
Date: Thu, 17 Oct 2002 13:47:26 +0400
From: "Gleb O. Raiko" <raiko@niisi.msk.ru>
Organization: NIISI RAN
X-Mailer: Mozilla 4.79 [en] (WinNT; U)
X-Accept-Language: en,ru
MIME-Version: 1.0
To: Johannes Stezenbach <js@convergence.de>
CC: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
References: <20021015172108.GD21220@convergence.de> <Pine.GSO.3.96.1021016140828.14774I-100000@delta.ds2.pg.gda.pl> <20021016125233.GA25227@convergence.de> <20021016163038.GA26585@convergence.de>
Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: 7bit
Return-Path: <raiko@niisi.msk.ru>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 467
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: raiko@niisi.msk.ru
Precedence: bulk
X-list: linux-mips

Johannes Stezenbach wrote:
> 
> I wrote:
> 
> > sysmips is history with current glibc since the Linux kernel emulates
> > LL/SC for CPUs that don't have it. This emulation is actually faster than
> > sysmips. (You'd think it's slower because it's one syscall vs. two
> > emulated instructions. But with LL/SC glibc can use test-and-set
>                                                       ^^^^^^^^^^^^
> > which enables a more efficient linux-threads mutex implementation.)
> 
> Oops, I meant compare-and-swap.

Implement new sysmips then.

Regards,
Gleb.

From macro@ds2.pg.gda.pl Thu Oct 17 13:57:30 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 13:57:31 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:395 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1124014AbSJQL5a>; Thu, 17 Oct 2002 13:57:30 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id NAA24886;
	Thu, 17 Oct 2002 13:57:30 +0200 (MET DST)
Date: Thu, 17 Oct 2002 13:57:29 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Johannes Stezenbach <js@convergence.de>
cc: "Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
In-Reply-To: <20021016181135.GA26994@convergence.de>
Message-ID: <Pine.GSO.3.96.1021017134232.24495A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 468
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Wed, 16 Oct 2002, Johannes Stezenbach wrote:

> The patch is only for the VR41XX. I'm not shure what other CPUs
> fall into the same category. If I read binutils/opcodes/mips-opc.c
> correctly, then the TX39XX, while not being ISA2, has beql.

 I think I have TX39XX docs somewhere -- I may check if that's true.

> Please tell me if the patch is acceptable.
> 
> Possible options:
> - don't mess with tlbex-r4k.S
> - or unconditonally replace the 'nop's before 'eret's in tlbex-r4k.S with
>   'move k1,zero' plus a comment

 I'd go for that, so that VR41XX user binaries work fine on real MIPS II+
processors as well.  There is no performance nor space impact for
tlbex-r4k.S and for stackframe.h the single-instruction impact is not
critical, or I believe there is a single free slot in RESTORE_SOME that
may be reused (after a bit of restructuring to make sure
RESTORE_SP_AND_RET isn't used alone). 

> - drop the CONFIG_CPU_USERSPACE_LLSC_EMUL configuration option and
>   always clear k1 in RESTORE_SP_AND_RET for the VR41XX

 And this one as well.  There is no need for a separate config option --
lone comments in place should suffice.

 But you may ask Ralf before making further changes as he is the one to
decide if the patch goes in. 

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From macro@ds2.pg.gda.pl Thu Oct 17 14:03:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 14:03:02 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:18059 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123891AbSJQMDB>; Thu, 17 Oct 2002 14:03:01 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id OAA25029;
	Thu, 17 Oct 2002 14:02:35 +0200 (MET DST)
Date: Thu, 17 Oct 2002 14:02:35 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: "Gleb O. Raiko" <raiko@niisi.msk.ru>
cc: Johannes Stezenbach <js@convergence.de>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
In-Reply-To: <3DAE872E.D5EF0E4D@niisi.msk.ru>
Message-ID: <Pine.GSO.3.96.1021017135738.24495B-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 469
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Thu, 17 Oct 2002, Gleb O. Raiko wrote:

> Implement new sysmips then.

 I'm not sure if that's a good idea.  Glibc alone uses test_and_set(),
exchange_and_add(), atomic_add() and compare_and_swap().  Do you want a
separate syscall for each of these functions?  I think the ll/sc emulation
may be the best solution after all.  At least it's most flexible and not
much slower if at all.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From rajeshbv@intotoinc.com Thu Oct 17 14:53:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 14:53:02 +0200 (CEST)
Received: from [202.56.196.162] ([202.56.196.162]:51045 "EHLO
	brahma.intotoind.com") by linux-mips.org with ESMTP
	id <S1123891AbSJQMxB>; Thu, 17 Oct 2002 14:53:01 +0200
Received: (from rajeshbv@localhost)
	by brahma.intotoind.com (8.11.6/8.11.6) id g9HCqDn20758;
	Thu, 17 Oct 2002 18:22:13 +0530
Received: from localhost (rajeshbv@localhost)
	by brahma.intotoind.com (8.11.6/8.11.6) with ESMTP id g9HCqBR20751;
	Thu, 17 Oct 2002 18:22:11 +0530
X-Authentication-Warning: brahma.intotoind.com: rajeshbv owned process doing -bs
Date: Thu, 17 Oct 2002 18:22:11 +0530 (IST)
From: Venkata Rajesh Bikkina <rajeshbv@intotoinc.com>
X-X-Sender: <rajeshbv@brahma.intotoind.com>
To: <linux-mips@linux-mips.org>
cc: <rajeshbv@intotoinc.com>
Subject: Problems in Remote Debugging
Message-ID: <Pine.LNX.4.33.0210171821230.20688-100000@brahma.intotoind.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
X-Virus-Scanned: by AMaViS perl-11
Return-Path: <rajeshbv@intotoinc.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 470
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: rajeshbv@intotoinc.com
Precedence: bulk
X-list: linux-mips

Hi All,

I am using "insmod" part of busybox version 0.51 to insert my driver 
module into 2.4.3 linux on 79S334 board.

For remote debugging we need to do insert the module with "-m" option, 
which is not supported by this version of busybox.
So can anybody who are working with this option, can send across the 
binary for me. I want the LITTLE ENDIAN version.

Secondly, i am using "mips_fp_le-gdb" from montavista for remote 
debugging. The problem i am facing with this gdb is "Ctrl+C" is not 
working. Is there any alternative to make it work ?

Regards,
--Rajesh




From js@convergence.de Thu Oct 17 15:11:54 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 15:11:55 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:10244 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123891AbSJQNLy>;
	Thu, 17 Oct 2002 15:11:54 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 182AQl-0000SZ-00; Thu, 17 Oct 2002 15:11:15 +0200
Date: Thu, 17 Oct 2002 15:11:15 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Cc: "Gleb O. Raiko" <raiko@niisi.msk.ru>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021017131115.GA1689@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Gleb O. Raiko" <raiko@niisi.msk.ru>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <3DAE872E.D5EF0E4D@niisi.msk.ru> <Pine.GSO.3.96.1021017135738.24495B-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <Pine.GSO.3.96.1021017135738.24495B-100000@delta.ds2.pg.gda.pl>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 471
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Thu, Oct 17, 2002 at 02:02:35PM +0200, Maciej W. Rozycki wrote:
> On Thu, 17 Oct 2002, Gleb O. Raiko wrote:
> 
> > Implement new sysmips then.
> 
>  I'm not sure if that's a good idea.  Glibc alone uses test_and_set(),
> exchange_and_add(), atomic_add() and compare_and_swap().  Do you want a
> separate syscall for each of these functions?  I think the ll/sc emulation
> may be the best solution after all.  At least it's most flexible and not
> much slower if at all.

Depends on your usage pattern. E.g. we don't run software that uses
atomicity.h (i.e. no C++ code), but heavily use pthread_mutex_lock() etc.
The few uses of atomicity.h internal to glibc don't warrant
any optimizations. So, if the beql-Method would not exist, I would
consider implementing a new sysmips for compare_and_swap().


Regards,
Johannes

From js@convergence.de Thu Oct 17 15:25:51 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 15:25:52 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:10500 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123891AbSJQNZv>;
	Thu, 17 Oct 2002 15:25:51 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 182Aen-0000Tc-00; Thu, 17 Oct 2002 15:25:45 +0200
Date: Thu, 17 Oct 2002 15:25:45 +0200
From: Johannes Stezenbach <js@convergence.de>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021017132545.GA1813@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	Ralf Baechle <ralf@linux-mips.org>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <20021016181135.GA26994@convergence.de> <Pine.GSO.3.96.1021017134232.24495A-100000@delta.ds2.pg.gda.pl>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <Pine.GSO.3.96.1021017134232.24495A-100000@delta.ds2.pg.gda.pl>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 472
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

Hello Ralf,

On Thu, Oct 17, 2002 at 01:57:29PM +0200, Maciej W. Rozycki wrote:
> On Wed, 16 Oct 2002, Johannes Stezenbach wrote:
> 
> > The patch is only for the VR41XX. I'm not shure what other CPUs
> > fall into the same category. If I read binutils/opcodes/mips-opc.c
> > correctly, then the TX39XX, while not being ISA2, has beql.
> 
>  I think I have TX39XX docs somewhere -- I may check if that's true.
> 
> > Please tell me if the patch is acceptable.
> > 
> > Possible options:
> > - don't mess with tlbex-r4k.S
> > - or unconditonally replace the 'nop's before 'eret's in tlbex-r4k.S with
> >   'move k1,zero' plus a comment
> 
>  I'd go for that, so that VR41XX user binaries work fine on real MIPS II+
> processors as well.  There is no performance nor space impact for
> tlbex-r4k.S and for stackframe.h the single-instruction impact is not
> critical, or I believe there is a single free slot in RESTORE_SOME that
> may be reused (after a bit of restructuring to make sure
> RESTORE_SP_AND_RET isn't used alone). 

This also would prevent me from shooting myself in the foot by accidentally
running a VR41XX user binaries on a kernel with "clear k1" support disabled ;-)

> > - drop the CONFIG_CPU_USERSPACE_LLSC_EMUL configuration option and
> >   always clear k1 in RESTORE_SP_AND_RET for the VR41XX
> 
>  And this one as well.  There is no need for a separate config option --
> lone comments in place should suffice.
> 
>  But you may ask Ralf before making further changes as he is the one to
> decide if the patch goes in. 

If this is OK with you, I would prepare a patch that just
unconditionally clears k1 before every eret in tlbex-r4k.S
and stackframe.h according to Maciej's suggestions, and adds
a comment explaining its purpose.


Regards,
Johannes

From raiko@niisi.msk.ru Thu Oct 17 15:28:54 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 15:28:54 +0200 (CEST)
Received: from t111.niisi.ras.ru ([193.232.173.111]:11633 "EHLO
	t111.niisi.ras.ru") by linux-mips.org with ESMTP
	id <S1123891AbSJQN2y>; Thu, 17 Oct 2002 15:28:54 +0200
Received: from t06.niisi.ras.ru (t06.niisi.ras.ru [193.232.173.6])
	by t111.niisi.ras.ru (8.9.1/8.9.1) with ESMTP id QAA07029;
	Thu, 17 Oct 2002 16:28:45 +0300
Received: (from uucp@localhost) by t06.niisi.ras.ru (8.7.6/8.7.3) with UUCP id QAA00434; Thu, 17 Oct 2002 16:48:40 +0300
Received: from niisi.msk.ru (t34 [193.232.173.34])
	by niisi.msk.ru (8.12.5/8.12.5) with ESMTP id g9HDPhpa013526;
	Thu, 17 Oct 2002 17:25:43 +0400 (MSK)
Message-ID: <3DAEBBD3.333275FC@niisi.msk.ru>
Date: Thu, 17 Oct 2002 17:32:03 +0400
From: "Gleb O. Raiko" <raiko@niisi.msk.ru>
Organization: NIISI RAN
X-Mailer: Mozilla 4.79 [en] (WinNT; U)
X-Accept-Language: en,ru
MIME-Version: 1.0
To: Johannes Stezenbach <js@convergence.de>
CC: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
References: <3DAE872E.D5EF0E4D@niisi.msk.ru> <Pine.GSO.3.96.1021017135738.24495B-100000@delta.ds2.pg.gda.pl> <20021017131115.GA1689@convergence.de>
Content-Type: text/plain; charset=koi8-r
Content-Transfer-Encoding: 7bit
Return-Path: <raiko@niisi.msk.ru>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 473
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: raiko@niisi.msk.ru
Precedence: bulk
X-list: linux-mips

Johannes Stezenbach wrote:
> 
> On Thu, Oct 17, 2002 at 02:02:35PM +0200, Maciej W. Rozycki wrote:
> > On Thu, 17 Oct 2002, Gleb O. Raiko wrote:
> >
> > > Implement new sysmips then.
> >
> >  I'm not sure if that's a good idea.  Glibc alone uses test_and_set(),
> > exchange_and_add(), atomic_add() and compare_and_swap().  Do you want a
> > separate syscall for each of these functions?  I think the ll/sc emulation
> > may be the best solution after all.  At least it's most flexible and not
> > much slower if at all.
> 
> Depends on your usage pattern. E.g. we don't run software that uses
> atomicity.h (i.e. no C++ code), but heavily use pthread_mutex_lock() etc.
> The few uses of atomicity.h internal to glibc don't warrant
> any optimizations. So, if the beql-Method would not exist, I would
> consider implementing a new sysmips for compare_and_swap().

I didn't look at newer glibc sources (read: greater than 2.0.6), so the
question. Why  is the difference between compare_and_swap and
test_and_set so huge that it eats an exception penalty? ;-)

Regards,
Gleb.

From js@convergence.de Thu Oct 17 16:13:24 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 17 Oct 2002 16:13:24 +0200 (CEST)
Received: from buserror-extern.convergence.de ([212.84.236.66]:21508 "EHLO
	hell") by linux-mips.org with ESMTP id <S1123891AbSJQONY>;
	Thu, 17 Oct 2002 16:13:24 +0200
Received: from js by hell with local (Exim 3.35 #1 (Debian))
	id 182BOY-0000Xj-00; Thu, 17 Oct 2002 16:13:02 +0200
Date: Thu, 17 Oct 2002 16:13:02 +0200
From: Johannes Stezenbach <js@convergence.de>
To: "Gleb O. Raiko" <raiko@niisi.msk.ru>
Cc: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
Subject: Re: Once again: test_and_set for CPUs w/o LL/SC
Message-ID: <20021017141302.GA2039@convergence.de>
Mail-Followup-To: Johannes Stezenbach <js@convergence.de>,
	"Gleb O. Raiko" <raiko@niisi.msk.ru>,
	"Maciej W. Rozycki" <macro@ds2.pg.gda.pl>,
	"Kevin D. Kissell" <kevink@mips.com>, linux-mips@linux-mips.org
References: <3DAE872E.D5EF0E4D@niisi.msk.ru> <Pine.GSO.3.96.1021017135738.24495B-100000@delta.ds2.pg.gda.pl> <20021017131115.GA1689@convergence.de> <3DAEBBD3.333275FC@niisi.msk.ru>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <3DAEBBD3.333275FC@niisi.msk.ru>
User-Agent: Mutt/1.4i
Return-Path: <js@convergence.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 474
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: js@convergence.de
Precedence: bulk
X-list: linux-mips

On Thu, Oct 17, 2002 at 05:32:03PM +0400, Gleb O. Raiko wrote:
> Johannes Stezenbach wrote:
> > 
> > On Thu, Oct 17, 2002 at 02:02:35PM +0200, Maciej W. Rozycki wrote:
> > > On Thu, 17 Oct 2002, Gleb O. Raiko wrote:
> > >
> > > > Implement new sysmips then.
> > >
> > >  I'm not sure if that's a good idea.  Glibc alone uses test_and_set(),
> > > exchange_and_add(), atomic_add() and compare_and_swap().  Do you want a
> > > separate syscall for each of these functions?  I think the ll/sc emulation
> > > may be the best solution after all.  At least it's most flexible and not
> > > much slower if at all.
> > 
> > Depends on your usage pattern. E.g. we don't run software that uses
> > atomicity.h (i.e. no C++ code), but heavily use pthread_mutex_lock() etc.
> > The few uses of atomicity.h internal to glibc don't warrant
> > any optimizations. So, if the beql-Method would not exist, I would
> > consider implementing a new sysmips for compare_and_swap().
> 
> I didn't look at newer glibc sources (read: greater than 2.0.6), so the
> question. Why  is the difference between compare_and_swap and
> test_and_set so huge that it eats an exception penalty? ;-)

It is not. I wrote:
  ... But with LL/SC glibc can use compare-and-swap
  which enables a more efficient linux-threads mutex implementation.

This is what makes the difference, at least for glibc-2.2.5. Just
grep for HAS_COMPARE_AND_SWAP in your linuxthreads sources.

Current glibc from CVS (both HEAD an 2.2 branch) doesn't use sysmips
anymore, they rely on LL/SC (emulated or not).


Regards,
Johannes

From prettygood@cs.stanford.edu Fri Oct 18 03:18:56 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 18 Oct 2002 03:18:57 +0200 (CEST)
Received: from sj-msg-core-4.cisco.com ([171.71.163.54]:25269 "EHLO
	sj-msg-core-4.cisco.com") by linux-mips.org with ESMTP
	id <S1123905AbSJRBS4>; Fri, 18 Oct 2002 03:18:56 +0200
Received: from bbozarth-lnx.cisco.com (bbozarth-lnx.cisco.com [128.107.165.13])
	by sj-msg-core-4.cisco.com (8.12.2/8.12.2) with ESMTP id g9I1Imot016566
	for <linux-mips@linux-mips.org>; Thu, 17 Oct 2002 18:18:48 -0700 (PDT)
Received: from localhost (bbozarth@localhost)
	by bbozarth-lnx.cisco.com (8.11.6/8.11.6) with ESMTP id g9I1Imf02344
	for <linux-mips@linux-mips.org>; Thu, 17 Oct 2002 18:18:48 -0700
X-Authentication-Warning: bbozarth-lnx.cisco.com: bbozarth owned process doing -bs
Date: Thu, 17 Oct 2002 18:18:47 -0700 (PDT)
From: Brad Bozarth <prettygood@cs.stanford.edu>
X-X-Sender: bbozarth@bbozarth-lnx.cisco.com
Reply-To: prettygood@cs.stanford.edu
To: linux-mips@linux-mips.org
Subject: [patch] atomic.h
Message-ID: <Pine.LNX.4.44.0210171814120.493-100000@bbozarth-lnx.cisco.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <prettygood@cs.stanford.edu>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 475
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: prettygood@cs.stanford.edu
Precedence: bulk
X-list: linux-mips

The atomic_inc_and_test has a typo, diff below:

atomic.h ~/netapp/new/linux/include/asm-mips/atomic.h                           
--- atomic.hFri Sep 27 14:48:34 2002                                            
+++ /users/bbozarth/netapp/new/linux/include/asm-mips/atomic.hThu Oct 17 
18:12:\46 2002                                                                         
@@ -228,7 +228,7 @@                                                               
* other cases.  Note that the guaranteed                                        
* useful range of an atomic_t is only 24 bits.                                  
*/                                                                            
-#define atomic_inc_and_test(v) (atomic_inc_return(1, (v)) == 0)                
+#define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0)                                                                                                 
/*                                                                               
* atomic_dec_and_test - decrement by 1 and test




From kwalker@broadcom.com Fri Oct 18 17:19:35 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 18 Oct 2002 17:19:36 +0200 (CEST)
Received: from mms2.broadcom.com ([63.70.210.59]:5894 "EHLO mms2.broadcom.com")
	by linux-mips.org with ESMTP id <S1123396AbSJRPTf>;
	Fri, 18 Oct 2002 17:19:35 +0200
Received: from 63.70.210.1 by mms2.broadcom.com with ESMTP (Broadcom
 MMS2 SMTP Relay (MMS v5.0)); Fri, 18 Oct 2002 08:16:50 -0700
X-Server-Uuid: 59F48136-7074-4F4B-B709-D7F3B6466DB0
Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com
 [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP
 id IAA23973 for <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 08:19:11
 -0700 (PDT)
Received: from dt-sj3-158.sj.broadcom.com (dt-sj3-158 [10.21.64.158]) by
 mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id
 g9IFJAER027796 for <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 08:19:
 11 -0700 (PDT)
Received: from broadcom.com (IDENT:kwalker@localhost [127.0.0.1]) by
 dt-sj3-158.sj.broadcom.com (8.9.3/8.9.3) with ESMTP id IAA25964 for
 <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 08:19:10 -0700
Message-ID: <3DB0266E.810D9D28@broadcom.com>
Date: Fri, 18 Oct 2002 08:19:10 -0700
From: "Kip Walker" <kwalker@broadcom.com>
Organization: Broadcom Corp. BPBU
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.5-beta4va3.20 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: linux-mips@linux-mips.org
Subject: [patch] mips, mips64 signal trampoline
X-WSS-ID: 11AEFA6854601-01-01
Content-Type: multipart/mixed;
 boundary=------------F593A8437330795766F1454A
Return-Path: <kwalker@broadcom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 476
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kwalker@broadcom.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------F593A8437330795766F1454A
Content-Type: text/plain;
 charset=us-ascii
Content-Transfer-Encoding: 7bit

It looks like the RA setup by setup_frame and setup_rt_frame in
arch/mips64/kernel/signal.c and signal32.c can be wrong.  Same for
arch/mips/kernel/signal.c

signal32.c, 32-bit signal.c: sa_restorer is overriden
signal.c: regs->regs[31] is pointed at the sigframe's code, even though
there isn't code in the frame, and a comment says that sa_restorer is
always used.

Patch for 2.4 attached.

Kip
--------------F593A8437330795766F1454A
Content-Type: text/plain;
 charset=us-ascii;
 name=signal.patch
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename=signal.patch

Index: arch/mips64/kernel/signal.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/signal.c,v
retrieving revision 1.19.2.5
diff -u -r1.19.2.5 signal.c
--- arch/mips64/kernel/signal.c	18 Sep 2002 13:03:07 -0000	1.19.2.5
+++ arch/mips64/kernel/signal.c	18 Oct 2002 15:11:25 -0000
@@ -338,13 +338,12 @@
 	regs->regs[ 5] = 0;
 	regs->regs[ 6] = (unsigned long) &frame->sf_sc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->sf_code;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->sf_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
         return;
 
@@ -402,13 +401,12 @@
 	regs->regs[ 5] = (unsigned long) &frame->rs_info;
 	regs->regs[ 6] = (unsigned long) &frame->rs_uc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->rs_code;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->rs_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
 	return;
 
Index: arch/mips64/kernel/signal32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/signal32.c,v
retrieving revision 1.20.2.9
diff -u -r1.20.2.9 signal32.c
--- arch/mips64/kernel/signal32.c	2 Oct 2002 12:21:45 -0000	1.20.2.9
+++ arch/mips64/kernel/signal32.c	18 Oct 2002 15:11:25 -0000
@@ -589,6 +589,7 @@
 		err |= __put_user(0x0000000c                 ,
 		                  frame->sf_code + 1);
 		flush_cache_sigtramp((unsigned long) frame->sf_code);
+		regs->regs[31] = (unsigned long) frame->sf_code;
 	}
 
 	err |= setup_sigcontext(regs, &frame->sf_sc);
@@ -610,7 +611,6 @@
 	regs->regs[ 5] = 0;
 	regs->regs[ 6] = (unsigned long) &frame->sf_sc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->sf_code;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
@@ -653,6 +653,7 @@
 		err |= __put_user(0x0000000c                 ,
 		                  frame->rs_code + 1);
 		flush_cache_sigtramp((unsigned long) frame->rs_code);
+		regs->regs[31] = (unsigned long) frame->rs_code;
 	}
 
 	/* Convert (siginfo_t -> siginfo_t32) and copy to user. */
@@ -687,7 +688,6 @@
 	regs->regs[ 5] = (unsigned long) &frame->rs_info;
 	regs->regs[ 6] = (unsigned long) &frame->rs_uc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->rs_code;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG

--------------F593A8437330795766F1454A--


From kwalker@broadcom.com Fri Oct 18 17:57:16 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 18 Oct 2002 17:57:17 +0200 (CEST)
Received: from mms2.broadcom.com ([63.70.210.59]:21520 "EHLO mms2.broadcom.com")
	by linux-mips.org with ESMTP id <S1122962AbSJRP5Q>;
	Fri, 18 Oct 2002 17:57:16 +0200
Received: from 63.70.210.1 by mms2.broadcom.com with ESMTP (Broadcom
 MMS2 SMTP Relay (MMS v5.0)); Fri, 18 Oct 2002 08:54:42 -0700
X-Server-Uuid: 59F48136-7074-4F4B-B709-D7F3B6466DB0
Received: from mail-sj1-5.sj.broadcom.com (mail-sj1-5.sj.broadcom.com
 [10.16.128.236]) by mon-irva-11.broadcom.com (8.9.1/8.9.1) with ESMTP
 id IAA28603 for <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 08:57:02
 -0700 (PDT)
Received: from dt-sj3-158.sj.broadcom.com (dt-sj3-158 [10.21.64.158]) by
 mail-sj1-5.sj.broadcom.com (8.12.4/8.12.4/SSF) with ESMTP id
 g9IFv2ER028194 for <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 08:57:
 02 -0700 (PDT)
Received: from broadcom.com (IDENT:kwalker@localhost [127.0.0.1]) by
 dt-sj3-158.sj.broadcom.com (8.9.3/8.9.3) with ESMTP id IAA26095 for
 <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 08:57:02 -0700
Message-ID: <3DB02F4E.E4C5242A@broadcom.com>
Date: Fri, 18 Oct 2002 08:57:02 -0700
From: "Kip Walker" <kwalker@broadcom.com>
Organization: Broadcom Corp. BPBU
X-Mailer: Mozilla 4.79 [en] (X11; U; Linux 2.4.5-beta4va3.20 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: linux-mips@linux-mips.org
Subject: Re: [patch] mips, mips64 signal trampoline
References: <3DB0266E.810D9D28@broadcom.com>
X-WSS-ID: 11AEF14856445-01-01
Content-Type: multipart/mixed;
 boundary=------------783AD2CEE61C3F4611CC8F09
Return-Path: <kwalker@broadcom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 477
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: kwalker@broadcom.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------783AD2CEE61C3F4611CC8F09
Content-Type: text/plain;
 charset=us-ascii
Content-Transfer-Encoding: 7bit


OK, the patch was broken because it changed regs->regs[31] before the
setup_sigcontext.  I think this one actually fixes a problem instead of
introducing one.  :-)  Somebody sent the 32-bit part of the patch around
a long time ago, but it doesn't seem to have gotten into CVS yet.

Kip

Kip Walker wrote:
> 
> It looks like the RA setup by setup_frame and setup_rt_frame in
> arch/mips64/kernel/signal.c and signal32.c can be wrong.  Same for
> arch/mips/kernel/signal.c
> 
> signal32.c, 32-bit signal.c: sa_restorer is overriden
> signal.c: regs->regs[31] is pointed at the sigframe's code, even though
> there isn't code in the frame, and a comment says that sa_restorer is
> always used.
> 
> Patch for 2.4 attached.
>
--------------783AD2CEE61C3F4611CC8F09
Content-Type: text/plain;
 charset=us-ascii;
 name=signal.patch
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename=signal.patch

Index: arch/mips/kernel/signal.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/kernel/signal.c,v
retrieving revision 1.39.2.9
diff -u -r1.39.2.9 signal.c
--- arch/mips/kernel/signal.c	5 Aug 2002 23:53:33 -0000	1.39.2.9
+++ arch/mips/kernel/signal.c	18 Oct 2002 15:52:26 -0000
@@ -461,6 +461,7 @@
 	int signr, sigset_t *set)
 {
 	struct sigframe *frame;
+	unsigned long ra;
 	int err = 0;
 
 	frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -470,7 +471,7 @@
 	/* Set up to return from userspace.  If provided, use a stub already
 	   in userspace.  */
 	if (ka->sa.sa_flags & SA_RESTORER)
-		regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
+		ra = (unsigned long) ka->sa.sa_restorer;
 	else {
 		/*
 		 * Set up the return code ...
@@ -483,6 +484,7 @@
 		err |= __put_user(0x0000000c                 ,
 		                  frame->sf_code + 1);
 		flush_cache_sigtramp((unsigned long) frame->sf_code);
+		ra = (unsigned long) frame->sf_code;
 	}
 
 	err |= setup_sigcontext(regs, &frame->sf_sc);
@@ -504,13 +506,13 @@
 	regs->regs[ 5] = 0;
 	regs->regs[ 6] = (unsigned long) &frame->sf_sc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->sf_code;
+	regs->regs[31] = ra;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->sf_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
         return;
 
@@ -524,6 +526,7 @@
 	int signr, sigset_t *set, siginfo_t *info)
 {
 	struct rt_sigframe *frame;
+	unsigned long ra;
 	int err = 0;
 
 	frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -533,7 +536,7 @@
 	/* Set up to return from userspace.  If provided, use a stub already
 	   in userspace.  */
 	if (ka->sa.sa_flags & SA_RESTORER)
-		regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
+		ra = (unsigned long) ka->sa.sa_restorer;
 	else {
 		/*
 		 * Set up the return code ...
@@ -546,6 +549,7 @@
 		err |= __put_user(0x0000000c                 ,
 		                  frame->rs_code + 1);
 		flush_cache_sigtramp((unsigned long) frame->rs_code);
+		ra = (unsigned long) frame->rs_code;
 	}
 
 	/* Create siginfo.  */
@@ -580,13 +584,13 @@
 	regs->regs[ 5] = (unsigned long) &frame->rs_info;
 	regs->regs[ 6] = (unsigned long) &frame->rs_uc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->rs_code;
+	regs->regs[31] = ra;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->rs_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
 	return;
 
Index: arch/mips64/kernel/signal.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/signal.c,v
retrieving revision 1.19.2.5
diff -u -r1.19.2.5 signal.c
--- arch/mips64/kernel/signal.c	18 Sep 2002 13:03:07 -0000	1.19.2.5
+++ arch/mips64/kernel/signal.c	18 Oct 2002 15:52:26 -0000
@@ -313,12 +313,6 @@
 	if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))
 		goto give_sigsegv;
 
-	/*
-	 * Set up to return from userspace.  On mips64 we always use a stub 
-	 * already provided by userspace and ignore SA_RESTORER.
-	 */
-	regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
-
 	err |= setup_sigcontext(regs, &frame->sf_sc);
 	err |= __copy_to_user(&frame->sf_mask, set, sizeof(*set));
 	if (err)
@@ -331,20 +325,21 @@
 	 *   a1 = 0 (should be cause)
 	 *   a2 = pointer to struct sigcontext
 	 *
-	 * $25 and c0_epc point to the signal handler, $29 points to the
-	 * struct sigframe.
+	 * $25 and c0_epc point to the signal handler, $29 points to
+	 * the struct sigframe.  On mips64 we always use a stub
+	 * already provided by userspace and ignore SA_RESTORER.
 	 */
 	regs->regs[ 4] = signr;
 	regs->regs[ 5] = 0;
 	regs->regs[ 6] = (unsigned long) &frame->sf_sc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->sf_code;
+	regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->sf_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
         return;
 
@@ -364,12 +359,6 @@
 	if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))
 		goto give_sigsegv;
 
-	/*
-	 * Set up to return from userspace.  On mips64 we always use a stub 
-	 * already provided by userspace and ignore SA_RESTORER.
-	 */
-	regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
-
 	/* Create siginfo.  */
 	err |= copy_siginfo_to_user(&frame->rs_info, info);
 
@@ -396,19 +385,20 @@
 	 *   a2 = pointer to ucontext
 	 *
 	 * $25 and c0_epc point to the signal handler, $29 points to
-	 * the struct rt_sigframe.
+	 * the struct rt_sigframe.  On mips64 we always use a stub
+	 * already provided by userspace and ignore SA_RESTORER.
 	 */
 	regs->regs[ 4] = signr;
 	regs->regs[ 5] = (unsigned long) &frame->rs_info;
 	regs->regs[ 6] = (unsigned long) &frame->rs_uc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->rs_code;
+	regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->rs_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
 	return;
 
Index: arch/mips64/kernel/signal32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/signal32.c,v
retrieving revision 1.20.2.9
diff -u -r1.20.2.9 signal32.c
--- arch/mips64/kernel/signal32.c	2 Oct 2002 12:21:45 -0000	1.20.2.9
+++ arch/mips64/kernel/signal32.c	18 Oct 2002 15:52:26 -0000
@@ -567,6 +567,7 @@
 			       int signr, sigset_t *set)
 {
 	struct sigframe *frame;
+	unsigned long ra;
 	int err = 0;
 
 	frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -576,7 +577,7 @@
 	/* Set up to return from userspace.  If provided, use a stub already
 	   in userspace.  */
 	if (ka->sa.sa_flags & SA_RESTORER)
-		regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
+		ra = (unsigned long) ka->sa.sa_restorer;
 	else {
 		/*
 		 * Set up the return code ...
@@ -589,6 +590,7 @@
 		err |= __put_user(0x0000000c                 ,
 		                  frame->sf_code + 1);
 		flush_cache_sigtramp((unsigned long) frame->sf_code);
+		ra = (unsigned long) frame->sf_code;
 	}
 
 	err |= setup_sigcontext(regs, &frame->sf_sc);
@@ -610,13 +612,13 @@
 	regs->regs[ 5] = 0;
 	regs->regs[ 6] = (unsigned long) &frame->sf_sc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->sf_code;
+	regs->regs[31] = ra;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->sf_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
         return;
 
@@ -631,6 +633,7 @@
 				  sigset_t *set, siginfo_t *info)
 {
 	struct rt_sigframe32 *frame;
+	unsigned long ra;
 	int err = 0;
 
 	frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -640,7 +643,7 @@
 	/* Set up to return from userspace.  If provided, use a stub already
 	   in userspace.  */
 	if (ka->sa.sa_flags & SA_RESTORER)
-		regs->regs[31] = (unsigned long) ka->sa.sa_restorer;
+		ra = (unsigned long) ka->sa.sa_restorer;
 	else {
 		/*
 		 * Set up the return code ...
@@ -653,6 +656,7 @@
 		err |= __put_user(0x0000000c                 ,
 		                  frame->rs_code + 1);
 		flush_cache_sigtramp((unsigned long) frame->rs_code);
+		ra = (unsigned long) frame->rs_code;
 	}
 
 	/* Convert (siginfo_t -> siginfo_t32) and copy to user. */
@@ -687,13 +691,13 @@
 	regs->regs[ 5] = (unsigned long) &frame->rs_info;
 	regs->regs[ 6] = (unsigned long) &frame->rs_uc;
 	regs->regs[29] = (unsigned long) frame;
-	regs->regs[31] = (unsigned long) frame->rs_code;
+	regs->regs[31] = ra;
 	regs->cp0_epc = regs->regs[25] = (unsigned long) ka->sa.sa_handler;
 
 #if DEBUG_SIG
 	printk("SIG deliver (%s:%d): sp=0x%p pc=0x%lx ra=0x%p\n",
 	       current->comm, current->pid,
-	       frame, regs->cp0_epc, frame->rs_code);
+	       frame, regs->cp0_epc, regs->regs[31]);
 #endif
 	return;
 

--------------783AD2CEE61C3F4611CC8F09--


From dinesh_nagpure@ivivity.com Fri Oct 18 18:02:28 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 18 Oct 2002 18:02:29 +0200 (CEST)
Received: from [64.238.111.99] ([64.238.111.99]:52750 "EHLO mail.ivivity.com")
	by linux-mips.org with ESMTP id <S1122962AbSJRQC2>;
	Fri, 18 Oct 2002 18:02:28 +0200
Received: by ATLOPS with Internet Mail Service (5.5.2653.19)
	id <414L5NCG>; Fri, 18 Oct 2002 12:02:20 -0400
Message-ID: <AEC4671C8179D61194DE0002B328BDD2070C7A@ATLOPS>
From: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
To: linux-mips@linux-mips.org
Subject: memcpy( ) and alignment.
Date: Fri, 18 Oct 2002 12:02:19 -0400
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2653.19)
Content-Type: text/plain;
	charset="iso-8859-1"
Return-Path: <dinesh_nagpure@ivivity.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 478
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dinesh_nagpure@ivivity.com
Precedence: bulk
X-list: linux-mips

Hello,

While compiling Kernel v2.4.16 for RM5231A using gcc-3.0.2, I am running
into some problems which I think are related to gcc, as a result memcpy( )
does not work well for me. Here is what happens,

I see all zeros in tty_std_termios.c_cc even after memcpy( ) is called to
copy the default termios string.

The code snippet is as below:
void __init console_init(void)
{

   memset(ldiscs, 0, sizeof(ldiscs));
  (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);

   memset(&tty_std_termios, 0, sizeof(struct termios));
   memcpy(tty_std_termios.c_cc, INIT_C_CC, NCCS);


   printk("tty_std_termios is at %p\n", &tty_std_termios);
		|
		few more printk( ) calls etc.
}

The tty_std_termios is of type struct termios which is defined as below:

typedef unsigned char cc_t;
typedef unsigned long speed_t;
typedef unsigned long tcflag_t;

/*
 * The ABI says nothing about NCC but seems to use NCCS as
 * replacement for it in struct termio
 */
#define NCCS    23
struct termios {
        tcflag_t c_iflag;               /* input mode flags */
        tcflag_t c_oflag;               /* output mode flags */
        tcflag_t c_cflag;               /* control mode flags */
        tcflag_t c_lflag;               /* local mode flags */

        // cc_t c_cc[NCCS];                /* control characters */

        /*
         * Seems nonexistent in the ABI, but Linux assumes existence ...
         */
        cc_t c_line;                    /* line discipline */
        cc_t c_cc[NCCS];                /* control characters */
};

And the source string is:
#define INIT_C_CC 
"\003\034\177\025\1\0\0\0\021\023\032\0\022\017\027\026\004\0"

Because of the c_line member, c_cc is not word aligned and memcpy somehow
fails to do a copy there. If I swap c_cc and c_line memcpy does work. I also
tried -mmemcpy switch with the same results. Assembly dump shows proper
pointers being passed (unaligned) to memcpy but it fails. Swapping the
structure members can't be my solution because this must be happening at
many other places.

Is this really coming from GCC? Is there a way to fix this? 

Any hints/pointers will be greatly appreciated.

Dinesh


 

From prettygood@cs.stanford.edu Sat Oct 19 00:51:56 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 19 Oct 2002 00:51:57 +0200 (CEST)
Received: from sj-msg-core-1.cisco.com ([171.71.163.11]:63898 "EHLO
	sj-msg-core-1.cisco.com") by linux-mips.org with ESMTP
	id <S1124008AbSJRWv4>; Sat, 19 Oct 2002 00:51:56 +0200
Received: from bbozarth-lnx.cisco.com (bbozarth-lnx.cisco.com [128.107.165.13])
	by sj-msg-core-1.cisco.com (8.12.2/8.12.2) with ESMTP id g9IMpkIm010307
	for <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 15:51:46 -0700 (PDT)
Received: from localhost (bbozarth@localhost)
	by bbozarth-lnx.cisco.com (8.11.6/8.11.6) with ESMTP id g9IMpkT04178
	for <linux-mips@linux-mips.org>; Fri, 18 Oct 2002 15:51:46 -0700
X-Authentication-Warning: bbozarth-lnx.cisco.com: bbozarth owned process doing -bs
Date: Fri, 18 Oct 2002 15:51:46 -0700 (PDT)
From: Brad Bozarth <prettygood@cs.stanford.edu>
X-X-Sender: bbozarth@bbozarth-lnx.cisco.com
Reply-To: prettygood@cs.stanford.edu
To: linux-mips@linux-mips.org
Subject: atomic_add_negative?
Message-ID: <Pine.LNX.4.44.0210181549240.2223-100000@bbozarth-lnx.cisco.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <prettygood@cs.stanford.edu>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 479
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: prettygood@cs.stanford.edu
Precedence: bulk
X-list: linux-mips

The current atomic.h says this is not implemented for mips...  would this 
work - modeled after the rest of the atomic_blah_and_test ?

/*
 * atomic_add_negative - add and test if negative
 * @v: pointer of type atomic_t
 * @i: integer value to add
 *
 * Atomically adds @i to @v and returns true
 * if the result is negative, or false when
 * result is greater than or equal to zero.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
#define atomic_add_negative(i,v) (atomic_add_return(i, (v)) < 0)


From joey@infodrom.org Sat Oct 19 18:47:20 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 19 Oct 2002 18:47:21 +0200 (CEST)
Received: from luonnotar.infodrom.org ([195.124.48.78]:2061 "EHLO
	luonnotar.infodrom.org") by linux-mips.org with ESMTP
	id <S1123900AbSJSQrU>; Sat, 19 Oct 2002 18:47:20 +0200
Received: by luonnotar.infodrom.org (Postfix, from userid 10)
	id 42E8A366B55; Sat, 19 Oct 2002 18:47:11 +0200 (CEST)
Received: at Infodrom Oldenburg (/\##/\ Smail-3.2.0.102 1998-Aug-2 #2)
	from infodrom.org by finlandia.Infodrom.North.DE
	via smail from stdin
	id <m182wiA-000pG2C@finlandia.Infodrom.North.DE>
	for ralf@linux-mips.org; Sat, 19 Oct 2002 18:44:26 +0200 (CEST) 
Date: Sat, 19 Oct 2002 18:44:26 +0200
From: Martin Schulze <joey@infodrom.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: [patch] Update DECstation FB description
Message-ID: <20021019164426.GQ14430@finlandia.infodrom.north.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
User-Agent: Mutt/1.4i
Return-Path: <joey@infodrom.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 480
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: joey@infodrom.org
Precedence: bulk
X-list: linux-mips

Moin Ralf,

please apply the patch below from Karsten Merker which corrects
and update the description for three DECstation framebuffers.

Regards,

	Joey



Index: Configure.help
===================================================================
RCS file: /home/cvs/linux/Documentation/Attic/Configure.help,v
retrieving revision 1.109.2.9
diff -u -r1.109.2.9 Configure.help
--- Configure.help	3 Oct 2002 01:27:58 -0000	1.109.2.9
+++ Configure.help	19 Oct 2002 16:42:28 -0000
@@ -4416,21 +4416,20 @@
 
 Maxine (Personal DECstation) onboard framebuffer support
 CONFIG_FB_MAXINE
-  Say Y here to directly support the on-board framebuffer in the
-  Maxine (5000/20, /25, /33) version of the DECstation.  There is a
-  page dedicated to Linux on DECstations at <http://decstation.unix-ag.org/>.
+  Support for the onboard framebuffer (1024x768x8) in the Personal
+  DECstation series (Personal DECstation 5000/20, /25, /33, /50,
+  Codename "Maxine").
 
 PMAG-BA TURBOchannel framebuffer support
 CONFIG_FB_PMAG_BA
-  Say Y here to directly support the on-board PMAG-BA framebuffer in
-  the 5000/1xx versions of the DECstation.  There is a page dedicated
-  to Linux on DECstations at <http://decstation.unix-ag.org/>.
+  Support for the PMAG-BA TURBOchannel framebuffer card (1024x864x8)
+  used mainly in the MIPS-based DECstation series.
 
 PMAGB-B TURBOchannel framebuffer support
 CONFIG_FB_PMAGB_B
-  Say Y here to directly support the on-board PMAGB-B framebuffer in
-  the 5000/1xx versions of the DECstation.  There is a page dedicated
-  to Linux on DECstations at <http://decstation.unix-ag.org/>.
+  Support for the PMAGB-B TURBOchannel framebuffer card used mainly
+  in the MIPS-based DECstation series. The card is currently only 
+  supported in 1280x1024x8 mode.  
 
 FutureTV PCI card
 CONFIG_ARCH_FTVPCI

-- 
Every use of Linux is a proper use of Linux.  -- Jon "Maddog" Hall

From joey@infodrom.org Sat Oct 19 18:57:15 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 19 Oct 2002 18:57:16 +0200 (CEST)
Received: from luonnotar.infodrom.org ([195.124.48.78]:3085 "EHLO
	luonnotar.infodrom.org") by linux-mips.org with ESMTP
	id <S1123900AbSJSQ5P>; Sat, 19 Oct 2002 18:57:15 +0200
Received: by luonnotar.infodrom.org (Postfix, from userid 10)
	id 8BAA3366B55; Sat, 19 Oct 2002 18:57:09 +0200 (CEST)
Received: at Infodrom Oldenburg (/\##/\ Smail-3.2.0.102 1998-Aug-2 #2)
	from infodrom.org by finlandia.Infodrom.North.DE
	via smail from stdin
	id <m182woQ-000okWC@finlandia.Infodrom.North.DE>
	for ralf@linux-mips.org; Sat, 19 Oct 2002 18:50:54 +0200 (CEST) 
Date: Sat, 19 Oct 2002 18:50:54 +0200
From: Martin Schulze <joey@infodrom.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: [patch] Correct colour handling
Message-ID: <20021019165053.GR14430@finlandia.infodrom.north.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
User-Agent: Mutt/1.4i
Return-Path: <joey@infodrom.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 481
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: joey@infodrom.org
Precedence: bulk
X-list: linux-mips

Moin Ralf,

please apply the patch below which will correct colour handling.  The
outcome of this patch will only be visible with a monochrome graphics
card since they can see what is written on the screen again.

As you can see, not all occasions where the currently used colour is
changed, isn't protected by the 'if (can_do_color)' check.  Some
occurrences though use it.

This patch is done basically by Thiemo Seufer during this years'
Oldenburg meeting.

Regards,

	Joey


Index: console.c
===================================================================
RCS file: /home/cvs/linux/drivers/char/console.c,v
retrieving revision 1.37.2.2
diff -u -r1.37.2.2 console.c
--- console.c	26 Jun 2002 22:35:32 -0000	1.37.2.2
+++ console.c	19 Oct 2002 16:47:01 -0000
@@ -1046,7 +1046,8 @@
 	underline = 0;
 	reverse = 0;
 	blink = 0;
-	color = def_color;
+	if (can_do_color)
+		color = def_color;
 }
 
 /* console_sem is held */
@@ -1119,7 +1120,8 @@
 				  * with white underscore (Linux - use
 				  * default foreground).
 				  */
-				color = (def_color & 0x0f) | background;
+			        if (can_do_color)
+					color = (def_color & 0x0f) | background;
 				underline = 1;
 				break;
 			case 39: /* ANSI X3.64-1979 (SCO-ish?)
@@ -1127,11 +1129,13 @@
 				  * Reset colour to default? It did this
 				  * before...
 				  */
-				color = (def_color & 0x0f) | background;
+			        if (can_do_color)
+					color = (def_color & 0x0f) | background;
 				underline = 0;
 				break;
 			case 49:
-				color = (def_color & 0xf0) | foreground;
+			  	if (can_do_color)
+					color = (def_color & 0xf0) | foreground;
 				break;
 			default:
 				if (par[i] >= 30 && par[i] <= 37)
@@ -1274,9 +1278,11 @@
 			}
 			break;
 		case 8:	/* store colors as defaults */
-			def_color = attr;
-			if (hi_font_mask == 0x100)
-				def_color >>= 1;
+			if (can_do_color) {
+				def_color = attr;
+				if (hi_font_mask == 0x100)
+					def_color >>= 1;
+			}
 			default_attr(currcons);
 			update_attr(currcons);
 			break;
-- 
Every use of Linux is a proper use of Linux.  -- Jon "Maddog" Hall

From joey@infodrom.org Sat Oct 19 19:07:15 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sat, 19 Oct 2002 19:07:16 +0200 (CEST)
Received: from luonnotar.infodrom.org ([195.124.48.78]:5133 "EHLO
	luonnotar.infodrom.org") by linux-mips.org with ESMTP
	id <S1123900AbSJSRHP>; Sat, 19 Oct 2002 19:07:15 +0200
Received: by luonnotar.infodrom.org (Postfix, from userid 10)
	id 1FC92366B55; Sat, 19 Oct 2002 19:07:10 +0200 (CEST)
Received: at Infodrom Oldenburg (/\##/\ Smail-3.2.0.102 1998-Aug-2 #2)
	from infodrom.org by finlandia.Infodrom.North.DE
	via smail from stdin
	id <m182x2c-000og9C@finlandia.Infodrom.North.DE>
	for ralf@linux-mips.org; Sat, 19 Oct 2002 19:05:34 +0200 (CEST) 
Date: Sat, 19 Oct 2002 19:05:34 +0200
From: Martin Schulze <joey@infodrom.org>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: [patch] Correct monochrome selection
Message-ID: <20021019170534.GS14430@finlandia.infodrom.north.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
User-Agent: Mutt/1.4i
Return-Path: <joey@infodrom.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 482
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: joey@infodrom.org
Precedence: bulk
X-list: linux-mips

Hi Ralf,

please apply the patch below which will add proper handling for
monochrome graphic cards.

Both changes are required since there are graphic cards out in the
voi^Wwild that are monochrome but have bits_per_pixel set to something
else than 1, e.g. PMAG-AA which uses 8 bits per pixel but ignores 7 of
it.

Since currently no such card is supported, this change wasn't
required.  However, we developed support for the PMAG-AA card and we
would like to add support for it to the Linux kernel, of course.

Regards,

	Joey


Index: fbcon.c
===================================================================
RCS file: /home/cvs/linux/drivers/video/fbcon.c,v
retrieving revision 1.28.2.4
diff -u -r1.28.2.4 fbcon.c
--- fbcon.c	2 Oct 2002 13:28:31 -0000	1.28.2.4
+++ fbcon.c	19 Oct 2002 16:57:40 -0000
@@ -711,7 +711,8 @@
     if ((p->var.yres % fontheight(p)) &&
 	(p->var.yres_virtual % fontheight(p) < p->var.yres % fontheight(p)))
 	p->vrows--;
-    conp->vc_can_do_color = p->var.bits_per_pixel != 1;
+    conp->vc_can_do_color = (p->fb_info->fix.visual != FB_VISUAL_MONO10 &&
+			     p->fb_info->fix.visual != FB_VISUAL_MONO01);
     conp->vc_complement_mask = conp->vc_can_do_color ? 0x7700 : 0x0800;
     if (charcnt == 256) {
     	conp->vc_hi_font_mask = 0;
@@ -2177,7 +2178,12 @@
 					   p->fb_info);
 	}
 	
-    if (depth >= 8) {
+    if (p->visual == FB_VISUAL_MONO10 ||
+	p->visual == FB_VISUAL_MONO01) {
+	logo = linux_logo_bw;
+	logo_depth = 1;
+    }
+    else if (depth >= 8) {
 	logo = linux_logo;
 	logo_depth = 8;
     }

-- 
Every use of Linux is a proper use of Linux.  -- Jon "Maddog" Hall

From ica2_ts@csv.ica.uni-stuttgart.de Sun Oct 20 14:02:53 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Sun, 20 Oct 2002 14:02:53 +0200 (CEST)
Received: from iris1.csv.ica.uni-stuttgart.de ([129.69.118.2]:18314 "EHLO
	iris1.csv.ica.uni-stuttgart.de") by linux-mips.org with ESMTP
	id <S1123905AbSJTMCx>; Sun, 20 Oct 2002 14:02:53 +0200
Received: from rembrandt.csv.ica.uni-stuttgart.de ([129.69.118.42])
	by iris1.csv.ica.uni-stuttgart.de with esmtp (Exim 3.36 #2)
	id 183Emz-003KXz-00; Sun, 20 Oct 2002 14:02:37 +0200
Received: from ica2_ts by rembrandt.csv.ica.uni-stuttgart.de with local (Exim 3.35 #1 (Debian))
	id 183Emy-0001yz-00; Sun, 20 Oct 2002 14:02:36 +0200
Date: Sun, 20 Oct 2002 14:02:36 +0200
To: Martin Schulze <joey@infodrom.org>
Cc: linux-mips@linux-mips.org
Subject: Re: [patch] Correct colour handling
Message-ID: <20021020120236.GA7562@rembrandt.csv.ica.uni-stuttgart.de>
References: <20021019165053.GR14430@finlandia.infodrom.north.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20021019165053.GR14430@finlandia.infodrom.north.de>
User-Agent: Mutt/1.4i
From: Thiemo Seufer <ica2_ts@csv.ica.uni-stuttgart.de>
Return-Path: <ica2_ts@csv.ica.uni-stuttgart.de>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 483
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ica2_ts@csv.ica.uni-stuttgart.de
Precedence: bulk
X-list: linux-mips

Martin Schulze wrote:
> Moin Ralf,
> 
> please apply the patch below which will correct colour handling.  The
> outcome of this patch will only be visible with a monochrome graphics
> card since they can see what is written on the screen again.
> 
> As you can see, not all occasions where the currently used colour is
> changed, isn't protected by the 'if (can_do_color)' check.  Some
> occurrences though use it.
> 
> This patch is done basically by Thiemo Seufer during this years'
> Oldenburg meeting.

This is not-so-true, I didn't even touch the keyboard. ;-)


Thiemo

From carstenl@mips.com Mon Oct 21 09:34:50 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 21 Oct 2002 09:34:51 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:55244 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123398AbSJUHeu>;
	Mon, 21 Oct 2002 09:34:50 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g9L7YRNf022742;
	Mon, 21 Oct 2002 00:34:31 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id AAA25293;
	Mon, 21 Oct 2002 00:35:16 -0700 (PDT)
Received: from mips.com (copsun17 [192.168.205.27])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g9L7YPb02749;
	Mon, 21 Oct 2002 09:34:28 +0200 (MEST)
Message-ID: <3DB3AE01.72BA1957@mips.com>
Date: Mon, 21 Oct 2002 09:34:25 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.77 [en] (X11; U; SunOS 5.8 sun4u)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: 64 bit syscall wrapper.
Content-Type: multipart/mixed;
 boundary="------------850021AF6C4530B6EA325B07"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 484
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------850021AF6C4530B6EA325B07
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

Here's yet another patch for the 64 bit syscall wrapper.

/Carsten


--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------850021AF6C4530B6EA325B07
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part6.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part6.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.17
diff -u -r1.42.2.17 linux32.c
--- arch/mips64/kernel/linux32.c	10 Oct 2002 11:38:43 -0000	1.42.2.17
+++ arch/mips64/kernel/linux32.c	21 Oct 2002 07:30:54 -0000
@@ -2147,81 +2147,42 @@
 	unsigned int __unused[4];
 };
 
-asmlinkage long sys32_sysctl(struct sysctl_args32 *uargs32)
+asmlinkage long sys32_sysctl(struct sysctl_args32 *args)
 {
-	struct __sysctl_args kargs;
-	struct sysctl_args32 kargs32;
-	mm_segment_t old_fs;
-	int name[CTL_MAXNAME];
-	size_t oldlen[1];
-	int err, ret;
-
-	ret = -EFAULT;
-
-	memset(&kargs, 0, sizeof (kargs));
-
-	err = get_user(kargs32.name, &uargs32->name);
-	err |= __get_user(kargs32.nlen, &uargs32->nlen);
-	err |= __get_user(kargs32.oldval, &uargs32->oldval);
-	err |= __get_user(kargs32.oldlenp, &uargs32->oldlenp);
-	err |= __get_user(kargs32.newval, &uargs32->newval);
-	err |= __get_user(kargs32.newlen, &uargs32->newlen);
-	if (err)
-		goto out;
-
-	if (kargs32.nlen == 0 || kargs32.nlen >= CTL_MAXNAME) {
-		ret = -ENOTDIR;
-		goto out;
-	}
-
-	kargs.name = name;
-	kargs.nlen = kargs32.nlen;
-	if (copy_from_user(kargs.name, (int *)A(kargs32.name),
-			   kargs32.nlen * sizeof(name) / sizeof(name[0])))
-		goto out;
-
-	if (kargs32.oldval) {
-		if (!kargs32.oldlenp || get_user(oldlen[0],
-						 (int *)A(kargs32.oldlenp)))
+	struct sysctl_args32 tmp;
+	int error;
+	size_t oldlen, *oldlenp = NULL;
+	unsigned long addr = (((long)&args->__unused[0]) + 7) & ~7;
+
+	if (copy_from_user(&tmp, args, sizeof(tmp)))
+		return -EFAULT;
+
+	if (tmp.oldval && tmp.oldlenp) {
+		/* Duh, this is ugly and might not work if sysctl_args
+		   is in read-only memory, but do_sysctl does indirectly
+		   a lot of uaccess in both directions and we'd have to
+		   basically copy the whole sysctl.c here, and
+		   glibc's __sysctl uses rw memory for the structure
+		   anyway.  */
+		if (get_user(oldlen, (u32 *)A(tmp.oldlenp)) ||
+		    put_user(oldlen, (size_t *)addr))
 			return -EFAULT;
-		kargs.oldlenp = oldlen;
-		kargs.oldval = kmalloc(oldlen[0], GFP_KERNEL);
-		if (!kargs.oldval) {
-			ret = -ENOMEM;
-			goto out;
-		}
+		oldlenp = (size_t *)addr;
 	}
 
-	if (kargs32.newval && kargs32.newlen) {
-		kargs.newval = kmalloc(kargs32.newlen, GFP_KERNEL);
-		if (!kargs.newval) {
-			ret = -ENOMEM;
-			goto out;
+	lock_kernel();
+	error = do_sysctl((int *)A(tmp.name), tmp.nlen, (void *)A(tmp.oldval),
+			  oldlenp, (void *)A(tmp.newval), tmp.newlen);
+	unlock_kernel();
+	if (oldlenp) {
+		if (!error) {
+			if (get_user(oldlen, (size_t *)addr) ||
+			    put_user(oldlen, (u32 *)A(tmp.oldlenp)))
+				error = -EFAULT;
 		}
-		if (copy_from_user(kargs.newval, (int *)A(kargs32.newval),
-				   kargs32.newlen))
-			goto out;
-	}
-
-	old_fs = get_fs(); set_fs (KERNEL_DS);
-	ret = sys_sysctl(&kargs);
-	set_fs (old_fs);
-
-	if (ret)
-		goto out;
-
-	if (kargs.oldval) {
-		if (put_user(oldlen[0], (int *)A(kargs32.oldlenp)) ||
-		    copy_to_user((int *)A(kargs32.oldval), kargs.oldval,
-				 oldlen[0]))
-			ret = -EFAULT;
+		copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused));
 	}
-out:
-	if (kargs.oldval)
-		kfree(kargs.oldval);
-	if (kargs.newval)
-		kfree(kargs.newval);
-	return ret;
+	return error;
 }
 
 asmlinkage long sys32_newuname(struct new_utsname * name)

--------------850021AF6C4530B6EA325B07--


From carstenl@mips.com Mon Oct 21 10:06:04 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Mon, 21 Oct 2002 10:06:04 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:3791 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123398AbSJUIGE>;
	Mon, 21 Oct 2002 10:06:04 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g9L85rNf022881;
	Mon, 21 Oct 2002 01:05:53 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id BAA26210;
	Mon, 21 Oct 2002 01:06:42 -0700 (PDT)
Received: from mips.com (copsun17 [192.168.205.27])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g9L85sb04966;
	Mon, 21 Oct 2002 10:05:55 +0200 (MEST)
Message-ID: <3DB3B562.2083ADE9@mips.com>
Date: Mon, 21 Oct 2002 10:05:54 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.77 [en] (X11; U; SunOS 5.8 sun4u)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: get_insn_opcode broken in the 64-bit kernel
Content-Type: multipart/mixed;
 boundary="------------29DB5335C8E5A533037676ED"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 485
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------29DB5335C8E5A533037676ED
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

The get_insn_opcode is broken in the 64-bit kernel, the patch below fix
the problem.

/Carsten


--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------29DB5335C8E5A533037676ED
Content-Type: text/plain; charset=iso-8859-15;
 name="get_insn_opcode.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="get_insn_opcode.patch"

Index: arch/mips64/kernel/traps.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/traps.c,v
retrieving revision 1.30.2.33
diff -u -r1.30.2.33 traps.c
--- arch/mips64/kernel/traps.c	2 Oct 2002 14:45:46 -0000	1.30.2.33
+++ arch/mips64/kernel/traps.c	21 Oct 2002 08:03:45 -0000
@@ -463,11 +463,11 @@
 
 static inline int get_insn_opcode(struct pt_regs *regs, unsigned int *opcode)
 {
-	unsigned long *epc;
+	unsigned int *epc;
 
-	epc = (unsigned long *) regs->cp0_epc +
+	epc = (unsigned int *) regs->cp0_epc +
 	      ((regs->cp0_cause & CAUSEF_BD) != 0);
-	if (!get_user(opcode, epc))
+	if (!get_user(*opcode, epc))
 		return 0;
 
 	force_sig(SIGSEGV, current);

--------------29DB5335C8E5A533037676ED--


From justin.wojdacki@analog.com Tue Oct 22 01:33:09 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 22 Oct 2002 01:33:10 +0200 (CEST)
Received: from nwd2mime2.analog.com ([137.71.25.114]:62985 "EHLO
	nwd2mime2.analog.com") by linux-mips.org with ESMTP
	id <S1123907AbSJUXdJ>; Tue, 22 Oct 2002 01:33:09 +0200
Received: from nwd2gtw1 (unverified) by nwd2mime2.analog.com
 (Content Technologies SMTPRS 4.2.10) with SMTP id <T5e14da5972894719720a5@nwd2mime2.analog.com> for <linux-mips@linux-mips.org>;
 Mon, 21 Oct 2002 19:32:59 -0400
Received: from nwd2mhb1 ([137.71.5.12]) by nwd2gtw1; Mon, 21 Oct 2002 19:32:58 -0400 (EDT)
Received: from golf.cpgdesign.analog.com ([137.71.139.100]) by nwd2mhb1.analog.com with ESMTP (8.9.3 (PHNE_18979)/8.7.1) id TAA21677 for <linux-mips@linux-mips.org>; Mon, 21 Oct 2002 19:32:57 -0400 (EDT)
Received: from ws4.cpgdesign.analog.com (ws4 [137.71.139.26])
	by golf.cpgdesign.analog.com (8.9.1/8.9.1) with ESMTP id QAA04733
	for <linux-mips@linux-mips.org>; Mon, 21 Oct 2002 16:32:55 -0700 (PDT)
Received: from analog.com (localhost [127.0.0.1])
	by ws4.cpgdesign.analog.com (8.9.1/8.9.1) with ESMTP id QAA00677
	for <linux-mips@linux-mips.org>; Mon, 21 Oct 2002 16:32:55 -0700 (PDT)
Message-ID: <3DB48EA7.D74447B4@analog.com>
Date: Mon, 21 Oct 2002 16:32:55 -0700
From: Justin Wojdacki <justin.wojdacki@analog.com>
Reply-To: justin.wojdacki@analog.com
Organization: Analog Devices, Communications Processors Group
X-Mailer: Mozilla 4.75 [en] (X11; U; SunOS 5.8 sun4u)
X-Accept-Language: en
MIME-Version: 1.0
To: linux-mips@linux-mips.org
Subject: Will this board run Linux?
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-Path: <justin.wojdacki@analog.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 486
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: justin.wojdacki@analog.com
Precedence: bulk
X-list: linux-mips


Okay, I just scored from work some old gear that isn't in use. One of
the things in question is a SBC based around an NEC Vr5000. The back
of the board has the labels "Smart Modular Tech" and "PCB Jupiter Rev
01". In addition to the CPU, it's got a Dallas Semiconductor RTC,
several Zilog and Altera chips, 2 COM + 1 Parallel Port, Ethernet,
SCSI, a few 72 pin SIMM sockets, and a PCI slot. The ethernet chip is
an Intel 82596DX-25. The SCSI is driven by an LSI 53C810A. 

The obvious question then is, does this board already run linux? I
haven't been able to find any documentation on it yet, so if the
answer is "No", but somebody knows about this board, I'd look into
doing the porting work.

-- 
-------------------------------------------------
Justin Wojdacki        
justin.wojdacki@analog.com         (408) 350-5032
Communications Processors Group -- Analog Devices

From atulsrivastava9@rediffmail.com Tue Oct 22 13:44:43 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 22 Oct 2002 13:44:44 +0200 (CEST)
Received: from webmail22.rediffmail.com ([203.199.83.144]:35983 "HELO
	webmail22.rediffmail.com") by linux-mips.org with SMTP
	id <S1123916AbSJVLon>; Tue, 22 Oct 2002 13:44:43 +0200
Received: (qmail 26270 invoked by uid 510); 22 Oct 2002 11:45:57 -0000
Date: 22 Oct 2002 11:45:57 -0000
Message-ID: <20021022114557.26269.qmail@webmail22.rediffmail.com>
Received: from unknown (203.200.7.244) by rediffmail.com via HTTP; 22 Oct 2002 11:45:57 -0000
MIME-Version: 1.0
From: "atul srivastava" <atulsrivastava9@rediffmail.com>
Reply-To: "atul srivastava" <atulsrivastava9@rediffmail.com>
To: linux-mips@linux-mips.org
Subject: {swapper:1] illegal instruction at ... 
Content-type: text/plain;
	format=flowed
Content-Disposition: inline
Return-Path: <atulsrivastava9@rediffmail.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 487
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: atulsrivastava9@rediffmail.com
Precedence: bulk
X-list: linux-mips

Hello,
I have just now enabled the nfs mount of root file system.
after this when I boot i get so many repeated messages like..

[swapper:1] Illegal instruction d0c62bd0 at 800f7c6c ra=
800f4860
[swapper:1] Illegal instruction 0031c78 at 800f5b5c at 
ra=8002d954
......
and similar many illegal instructions at different addresses.

in System.map if i watch for these adreses they are mostly from 
routines in linux/net/* and linux/net/ipv4/* directories.

what are the chances for it be compiler problem.

version of mips-linux-gcc complier that i get from
"mips-linux-gcc -v" is
gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release)

can somebody suggest me something..

Best Regards,
Atul



__________________________________________________________
Give your Company an email address like
ravi @ ravi-exports.com.  Sign up for Rediffmail Pro today!
Know more. http://www.rediffmailpro.com/signup/


From vincent.stehle@stepmind.com Tue Oct 22 14:05:19 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Tue, 22 Oct 2002 14:05:20 +0200 (CEST)
Received: from ppp-104.net10.magic.fr ([195.154.128.104]:10769 "HELO
	volvic.sud.stepmind.com") by linux-mips.org with SMTP
	id <S1123916AbSJVMFT>; Tue, 22 Oct 2002 14:05:19 +0200
Received: (qmail 8815 invoked from network); 22 Oct 2002 11:56:58 -0000
Received: from eku.sud.stepmind.com (HELO stepmind.com) (192.168.1.103)
  by volvic.sud.stepmind.com with SMTP; 22 Oct 2002 11:56:58 -0000
Message-ID: <3DB53D09.9010503@stepmind.com>
Date: Tue, 22 Oct 2002 13:56:57 +0200
From: =?ISO-8859-1?Q?Vincent_Stehl=E9?= <vincent.stehle@stepmind.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.2b) Gecko/20021021
X-Accept-Language: fr, en, de
MIME-Version: 1.0
To: linux-mips@linux-mips.org
Subject: Re: {swapper:1] illegal instruction at ...
References: <20021022114557.26269.qmail@webmail22.rediffmail.com>
In-Reply-To: <20021022114557.26269.qmail@webmail22.rediffmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Return-Path: <vincent.stehle@stepmind.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 488
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: vincent.stehle@stepmind.com
Precedence: bulk
X-list: linux-mips

atul srivastava wrote:
> I have just now enabled the nfs mount of root file system.
> after this when I boot i get so many repeated messages like..
> 
> [swapper:1] Illegal instruction d0c62bd0 at 800f7c6c ra=
> 800f4860
> [swapper:1] Illegal instruction 0031c78 at 800f5b5c at ra=8002d954
[..]
> can somebody suggest me something..

As it seems your problem has something to do with the swapper, are you 
also trying to swap over nfs ? I think you need patches for that:

   http://www.instmath.rwth-aachen.de/~heine/nfs-swap/nfs-swap.html

-- 
  Vincent Stehlé


From bbozarth@cisco.com Wed Oct 23 05:42:44 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 05:42:44 +0200 (CEST)
Received: from sj-msg-core-1.cisco.com ([171.71.163.11]:34200 "EHLO
	sj-msg-core-1.cisco.com") by linux-mips.org with ESMTP
	id <S1121744AbSJWDmo>; Wed, 23 Oct 2002 05:42:44 +0200
Received: from bbozarth-lnx.cisco.com (bbozarth-lnx.cisco.com [128.107.165.13])
	by sj-msg-core-1.cisco.com (8.12.2/8.12.2) with ESMTP id g9N3gaIm019068
	for <linux-mips@linux-mips.org>; Tue, 22 Oct 2002 20:42:36 -0700 (PDT)
Received: from localhost (bbozarth@localhost)
	by bbozarth-lnx.cisco.com (8.11.6/8.11.6) with ESMTP id g9N3gZF21734
	for <linux-mips@linux-mips.org>; Tue, 22 Oct 2002 20:42:35 -0700
Date: Tue, 22 Oct 2002 20:42:35 -0700 (PDT)
From: Bradley Bozarth <bbozarth@cisco.com>
To: linux-mips@linux-mips.org
Subject: 64 bit jiffies
Message-ID: <Pine.LNX.4.44.0210222038460.31553-100000@bbozarth-lnx.cisco.com>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <bbozarth@cisco.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 489
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: bbozarth@cisco.com
Precedence: bulk
X-list: linux-mips

There was a thread on lkml in May which resulted in the 32 bit jiffies 
value using the bottom of the jiffies_64 - this equivalence being done in 
linker scripts.  It was stated, however, that MIPS wasn't handled because 
it had a funky sed generated linker script for multiple endiannesses.  
So is mips currently broken in 2.5?  Has anyone looked at this - I would 
be willing to figure out a fix but thought I'd see if someone has ideas or 
has already dealt with it...

thanks,
brad


From dinesh_nagpure@ivivity.com Wed Oct 23 12:47:44 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 12:47:44 +0200 (CEST)
Received: from [64.238.111.99] ([64.238.111.99]:31756 "EHLO mail.ivivity.com")
	by linux-mips.org with ESMTP id <S1123924AbSJWKro>;
	Wed, 23 Oct 2002 12:47:44 +0200
Received: by ATLOPS with Internet Mail Service (5.5.2653.19)
	id <414L5PWQ>; Wed, 23 Oct 2002 06:47:28 -0400
Message-ID: <AEC4671C8179D61194DE0002B328BDD2070C8C@ATLOPS>
From: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
To: "'linux-mips@linux-mips.org'" <linux-mips@linux-mips.org>
Subject: KSeg0 coherency policy selection.
Date: Wed, 23 Oct 2002 06:47:27 -0400
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2653.19)
Content-Type: text/plain;
	charset="iso-8859-1"
Return-Path: <dinesh_nagpure@ivivity.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 490
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dinesh_nagpure@ivivity.com
Precedence: bulk
X-list: linux-mips

Hello,

I am almost done with my porting of kernel 2.4.16 to our platform using
RM5231A. But I had to make a couple of very basic hacks and I am trying to
understand if there is any way I can avoid them.
First the memcpy wouldn't work for me properly, both the compiler generated
and also the one under arch/mips/lib/memcpy.c, so I had to change the lib
version to do byte copy. I know this is a very crude change but things
worked.
Second, the Kseg0 coherency algorithm selection in the function
ld_mmu_r4xx0( ) seems to be improper for RM5231A, This function sets the CP0
config register K0 field to 3 which as per RM5231A user manual is Cacheable,
noncoherent, write back policy Should this not be set to 0, which is
cacheable, non-coherent, write-through, no write allocate? 
Also from the knowledge base I understand there is a cache aliasing problem
associated with RM5231A when page size is set to 4KB. The document
recommends to invalidate the cache before retiring a virtual page OR
coloring of the pages. Can someone tell me if this fix is already taken care
of? For me when I enable caching under "Kernel hacking" my kernel crashes
with page fault, when it tries to run bin/init, consistently.

Thanks
Dinesh



From macro@ds2.pg.gda.pl Wed Oct 23 16:03:48 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 16:03:49 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:56733 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123926AbSJWODs>; Wed, 23 Oct 2002 16:03:48 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id QAA06859;
	Wed, 23 Oct 2002 16:04:12 +0200 (MET DST)
Date: Wed, 23 Oct 2002 16:04:11 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
cc: "'linux-mips@linux-mips.org'" <linux-mips@linux-mips.org>
Subject: Re: KSeg0 coherency policy selection.
In-Reply-To: <AEC4671C8179D61194DE0002B328BDD2070C8C@ATLOPS>
Message-ID: <Pine.GSO.3.96.1021023154603.3179C-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 491
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Wed, 23 Oct 2002, Dinesh Nagpure wrote:

> I am almost done with my porting of kernel 2.4.16 to our platform using
> RM5231A. But I had to make a couple of very basic hacks and I am trying to
> understand if there is any way I can avoid them.

 The kernel is almost a year old -- there were numerous fixes since then. 
Consider grabbing a recent (currently 2.4.20-pre6) version from the CVS. 
What I'm writing below refers to the current 2.4.x kernel. 

> First the memcpy wouldn't work for me properly, both the compiler generated
> and also the one under arch/mips/lib/memcpy.c, so I had to change the lib
> version to do byte copy. I know this is a very crude change but things
> worked.

 You mean arch/mips/lib/memcpy.S, don't you?  There were problems detected
and fixed there this year.

> Second, the Kseg0 coherency algorithm selection in the function
> ld_mmu_r4xx0( ) seems to be improper for RM5231A, This function sets the CP0
> config register K0 field to 3 which as per RM5231A user manual is Cacheable,
> noncoherent, write back policy Should this not be set to 0, which is
> cacheable, non-coherent, write-through, no write allocate? 

 See CONF_CM_DEFAULT in include/asm-mips/pgtable-bits.h for how to select
the KSEG0 caching policy in ld_mmu_r4xx0().  If that is not appropriate,
you probably need a separate function to do the initialization (e.g. 
ld_mmu_rm5231()) in a separate file (e.g. arch/mips/mm/c-rm5231.c).

> Also from the knowledge base I understand there is a cache aliasing problem
> associated with RM5231A when page size is set to 4KB. The document
> recommends to invalidate the cache before retiring a virtual page OR
> coloring of the pages. Can someone tell me if this fix is already taken care
> of? For me when I enable caching under "Kernel hacking" my kernel crashes
> with page fault, when it tries to run bin/init, consistently.

 I can't help here, but you definitely want to upgrade your kernel before
going any further -- you may hit bugs that were fixed long ago and you may
try handling problems someone else already resolved.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From Geert.Uytterhoeven@sonycom.com Wed Oct 23 16:13:04 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 16:13:04 +0200 (CEST)
Received: from mail2.sonytel.be ([195.0.45.172]:13023 "EHLO mail.sonytel.be")
	by linux-mips.org with ESMTP id <S1123926AbSJWONE>;
	Wed, 23 Oct 2002 16:13:04 +0200
Received: from vervain.sonytel.be (mail.sonytel.be [10.17.0.27])
	by mail.sonytel.be (8.9.0/8.8.6) with ESMTP id QAA15889;
	Wed, 23 Oct 2002 16:12:38 +0200 (MET DST)
Date: Wed, 23 Oct 2002 16:12:39 +0200 (MEST)
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Martin Schulze <joey@infodrom.org>
cc: Ralf Baechle <ralf@linux-mips.org>,
	Linux/MIPS Development <linux-mips@linux-mips.org>
Subject: Re: [patch] Correct monochrome selection
In-Reply-To: <20021019170534.GS14430@finlandia.infodrom.north.de>
Message-ID: <Pine.GSO.4.21.0210231612060.2882-100000@vervain.sonytel.be>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <Geert.Uytterhoeven@sonycom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 492
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: geert@linux-m68k.org
Precedence: bulk
X-list: linux-mips

On Sat, 19 Oct 2002, Martin Schulze wrote:
> please apply the patch below which will add proper handling for
> monochrome graphic cards.
> 
> Both changes are required since there are graphic cards out in the
> voi^Wwild that are monochrome but have bits_per_pixel set to something
> else than 1, e.g. PMAG-AA which uses 8 bits per pixel but ignores 7 of
> it.
> 
> Since currently no such card is supported, this change wasn't
> required.  However, we developed support for the PMAG-AA card and we
> would like to add support for it to the Linux kernel, of course.

HP300 TopCat uses a similar scheme, and is supported by Linux/m68k.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


From ralf@linux-mips.org Wed Oct 23 16:27:11 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 16:27:12 +0200 (CEST)
Received: from p508B4F39.dip.t-dialin.net ([80.139.79.57]:60638 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123926AbSJWO1L>; Wed, 23 Oct 2002 16:27:11 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9NEQqp30477;
	Wed, 23 Oct 2002 16:26:52 +0200
Date: Wed, 23 Oct 2002 16:26:52 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Bradley Bozarth <bbozarth@cisco.com>
Cc: linux-mips@linux-mips.org
Subject: Re: 64 bit jiffies
Message-ID: <20021023162652.A27187@linux-mips.org>
References: <Pine.LNX.4.44.0210222038460.31553-100000@bbozarth-lnx.cisco.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <Pine.LNX.4.44.0210222038460.31553-100000@bbozarth-lnx.cisco.com>; from bbozarth@cisco.com on Tue, Oct 22, 2002 at 08:42:35PM -0700
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 493
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Tue, Oct 22, 2002 at 08:42:35PM -0700, Bradley Bozarth wrote:

> There was a thread on lkml in May which resulted in the 32 bit jiffies 
> value using the bottom of the jiffies_64 - this equivalence being done in 
> linker scripts.  It was stated, however, that MIPS wasn't handled because 
> it had a funky sed generated linker script for multiple endiannesses.  
> So is mips currently broken in 2.5?  Has anyone looked at this - I would 
> be willing to figure out a fix but thought I'd see if someone has ideas or 
> has already dealt with it...

This is long fixed in the 2.5 branch of CVS.

  Ralf

From joey@infodrom.org Wed Oct 23 16:37:18 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 16:37:19 +0200 (CEST)
Received: from luonnotar.infodrom.org ([195.124.48.78]:2317 "EHLO
	luonnotar.infodrom.org") by linux-mips.org with ESMTP
	id <S1123926AbSJWOhS>; Wed, 23 Oct 2002 16:37:18 +0200
Received: by luonnotar.infodrom.org (Postfix, from userid 10)
	id 88DCA366B57; Wed, 23 Oct 2002 16:37:11 +0200 (CEST)
Received: at Infodrom Oldenburg (/\##/\ Smail-3.2.0.102 1998-Aug-2 #2)
	from infodrom.org by finlandia.Infodrom.North.DE
	via smail from stdin
	id <m184MUx-000og9C@finlandia.Infodrom.North.DE>
	for geert@linux-m68k.org; Wed, 23 Oct 2002 16:28:39 +0200 (CEST) 
Date: Wed, 23 Oct 2002 16:28:39 +0200
From: Martin Schulze <joey@infodrom.org>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Linux/MIPS Development <linux-mips@linux-mips.org>
Subject: Re: [patch] Correct monochrome selection
Message-ID: <20021023142839.GG14430@finlandia.infodrom.north.de>
References: <20021019170534.GS14430@finlandia.infodrom.north.de> <Pine.GSO.4.21.0210231612060.2882-100000@vervain.sonytel.be>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
In-Reply-To: <Pine.GSO.4.21.0210231612060.2882-100000@vervain.sonytel.be>
User-Agent: Mutt/1.4i
Return-Path: <joey@infodrom.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 494
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: joey@infodrom.org
Precedence: bulk
X-list: linux-mips

Geert Uytterhoeven wrote:
> On Sat, 19 Oct 2002, Martin Schulze wrote:
> > please apply the patch below which will add proper handling for
> > monochrome graphic cards.
> > 
> > Both changes are required since there are graphic cards out in the
> > voi^Wwild that are monochrome but have bits_per_pixel set to something
> > else than 1, e.g. PMAG-AA which uses 8 bits per pixel but ignores 7 of
> > it.
> > 
> > Since currently no such card is supported, this change wasn't
> > required.  However, we developed support for the PMAG-AA card and we
> > would like to add support for it to the Linux kernel, of course.
> 
> HP300 TopCat uses a similar scheme, and is supported by Linux/m68k.

*cough*  Is there a working machine running Linux out somewhere?  If
so, I wonder why this oddity wasn't noted/didn't appear etc.

HP300 is not a really working port iirc.

Regards,

	Joey

-- 
If nothing changes, everything will remain the same.  -- Barne's Law

From Geert.Uytterhoeven@sonycom.com Wed Oct 23 16:46:14 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 16:46:14 +0200 (CEST)
Received: from mail2.sonytel.be ([195.0.45.172]:5617 "EHLO mail.sonytel.be")
	by linux-mips.org with ESMTP id <S1123926AbSJWOqO>;
	Wed, 23 Oct 2002 16:46:14 +0200
Received: from vervain.sonytel.be (mail.sonytel.be [10.17.0.27])
	by mail.sonytel.be (8.9.0/8.8.6) with ESMTP id QAA19357;
	Wed, 23 Oct 2002 16:46:06 +0200 (MET DST)
Date: Wed, 23 Oct 2002 16:46:06 +0200 (MEST)
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Martin Schulze <joey@infodrom.org>
cc: Linux/MIPS Development <linux-mips@linux-mips.org>,
	Linux/m68k <linux-m68k@lists.linux-m68k.org>,
	Linux Frame Buffer Device Development 
	<linux-fbdev-devel@lists.sourceforge.net>
Subject: Re: [patch] Correct monochrome selection
In-Reply-To: <20021023142839.GG14430@finlandia.infodrom.north.de>
Message-ID: <Pine.GSO.4.21.0210231642200.2882-100000@vervain.sonytel.be>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <Geert.Uytterhoeven@sonycom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 495
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: geert@linux-m68k.org
Precedence: bulk
X-list: linux-mips

On Wed, 23 Oct 2002, Martin Schulze wrote:
> Geert Uytterhoeven wrote:
> > On Sat, 19 Oct 2002, Martin Schulze wrote:
> > > please apply the patch below which will add proper handling for
> > > monochrome graphic cards.
> > > 
> > > Both changes are required since there are graphic cards out in the
> > > voi^Wwild that are monochrome but have bits_per_pixel set to something
> > > else than 1, e.g. PMAG-AA which uses 8 bits per pixel but ignores 7 of
> > > it.
> > > 
> > > Since currently no such card is supported, this change wasn't
> > > required.  However, we developed support for the PMAG-AA card and we
> > > would like to add support for it to the Linux kernel, of course.
> > 
> > HP300 TopCat uses a similar scheme, and is supported by Linux/m68k.
> 
> *cough*  Is there a working machine running Linux out somewhere?  If
> so, I wonder why this oddity wasn't noted/didn't appear etc.

drivers/video/hpfb.c sets fb_var_screeninfo.bits_per_pixel to 1 instead of 8,
and relies on an unmerged[*] hack to drivers/video/fbcon.c to display the
monochrome penguin logo.

> HP300 is not a really working port iirc.

Yes, it depends a lot on your definition of `working' :-)

Gr{oetje,eeting}s,

						Geert

[*] Available from Linux/m68k CVS http://linux-m68k-cvs.apia.dhs.org/
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


From ralf@linux-mips.org Wed Oct 23 18:02:35 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 18:02:36 +0200 (CEST)
Received: from p508B4F39.dip.t-dialin.net ([80.139.79.57]:15072 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123926AbSJWQCf>; Wed, 23 Oct 2002 18:02:35 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9NG2Me32422;
	Wed, 23 Oct 2002 18:02:22 +0200
Date: Wed, 23 Oct 2002 18:02:22 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
Cc: "'linux-mips@linux-mips.org'" <linux-mips@linux-mips.org>
Subject: Re: KSeg0 coherency policy selection.
Message-ID: <20021023180222.B27187@linux-mips.org>
References: <AEC4671C8179D61194DE0002B328BDD2070C8C@ATLOPS>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <AEC4671C8179D61194DE0002B328BDD2070C8C@ATLOPS>; from dinesh_nagpure@ivivity.com on Wed, Oct 23, 2002 at 06:47:27AM -0400
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 496
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Wed, Oct 23, 2002 at 06:47:27AM -0400, Dinesh Nagpure wrote:

> I am almost done with my porting of kernel 2.4.16 to our platform using
> RM5231A. But I had to make a couple of very basic hacks and I am trying to
> understand if there is any way I can avoid them.
> First the memcpy wouldn't work for me properly, both the compiler generated
> and also the one under arch/mips/lib/memcpy.c, so I had to change the lib
> version to do byte copy. I know this is a very crude change but things
> worked.

Memcpy.c?  I assume that's a typo.  We retired the C version of memcopy like
5 years ago.  Memcpy.S recently received a few fixes but those were only
rather estotheric special cases; chances are these bugs are not what's
hitting you.

> Second, the Kseg0 coherency algorithm selection in the function
> ld_mmu_r4xx0( ) seems to be improper for RM5231A, This function sets the CP0
> config register K0 field to 3 which as per RM5231A user manual is Cacheable,
> noncoherent, write back policy Should this not be set to 0, which is
> cacheable, non-coherent, write-through, no write allocate? 

Caching algorithem 3 is should be right for every uniprocessor MIPS system.
The only cache coherency attributes that are standard accross all MIPS CPUs
are modes 2 and 3.

> Also from the knowledge base I understand there is a cache aliasing problem
> associated with RM5231A when page size is set to 4KB. The document
> recommends to invalidate the cache before retiring a virtual page OR
> coloring of the pages. Can someone tell me if this fix is already taken care
> of? For me when I enable caching under "Kernel hacking" my kernel crashes
> with page fault, when it tries to run bin/init, consistently.

There have been fixes in that are as well since 2.4.16 but nothing that
explains crashes as early as when booting init.

  Ralf

From ralf@linux-mips.org Wed Oct 23 18:06:59 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 18:07:00 +0200 (CEST)
Received: from p508B4F39.dip.t-dialin.net ([80.139.79.57]:18912 "EHLO
	dea.linux-mips.net") by linux-mips.org with ESMTP
	id <S1123926AbSJWQG7>; Wed, 23 Oct 2002 18:06:59 +0200
Received: (from ralf@localhost)
	by dea.linux-mips.net (8.11.6/8.11.6) id g9NG6nK32511;
	Wed, 23 Oct 2002 18:06:49 +0200
Date: Wed, 23 Oct 2002 18:06:49 +0200
From: Ralf Baechle <ralf@linux-mips.org>
To: =?iso-8859-1?Q?Vincent_Stehl=E9?= <vincent.stehle@stepmind.com>
Cc: linux-mips@linux-mips.org
Subject: Re: {swapper:1] illegal instruction at ...
Message-ID: <20021023180649.C27187@linux-mips.org>
References: <20021022114557.26269.qmail@webmail22.rediffmail.com> <3DB53D09.9010503@stepmind.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3DB53D09.9010503@stepmind.com>; from vincent.stehle@stepmind.com on Tue, Oct 22, 2002 at 01:56:57PM +0200
Return-Path: <ralf@linux-mips.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 497
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: ralf@linux-mips.org
Precedence: bulk
X-list: linux-mips

On Tue, Oct 22, 2002 at 01:56:57PM +0200, Vincent Stehlé wrote:

> > after this when I boot i get so many repeated messages like..
> > 
> > [swapper:1] Illegal instruction d0c62bd0 at 800f7c6c ra=
> > 800f4860
> > [swapper:1] Illegal instruction 0031c78 at 800f5b5c at ra=8002d954
> [..]
> > can somebody suggest me something..

Just a few items to check:

 - memory hw problem
 - memory controller configuration
 - caches not properly flushed
 - memory corruption

> As it seems your problem has something to do with the swapper, are you 
> also trying to swap over nfs ? I think you need patches for that:
> 
>    http://www.instmath.rwth-aachen.de/~heine/nfs-swap/nfs-swap.html

Those patches are broken.  If you're using those patches, don't even
expect to dream about things working ...

  Ralf

From dinesh_nagpure@ivivity.com Wed Oct 23 20:05:23 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 20:05:23 +0200 (CEST)
Received: from [64.238.111.99] ([64.238.111.99]:14600 "EHLO mail.ivivity.com")
	by linux-mips.org with ESMTP id <S1123926AbSJWSFX>;
	Wed, 23 Oct 2002 20:05:23 +0200
Received: by ATLOPS with Internet Mail Service (5.5.2653.19)
	id <VPJJFDWV>; Wed, 23 Oct 2002 14:05:10 -0400
Message-ID: <AEC4671C8179D61194DE0002B328BDD2070C8D@ATLOPS>
From: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
To: "'Maciej W. Rozycki'" <macro@ds2.pg.gda.pl>,
	Dinesh Nagpure <dinesh_nagpure@ivivity.com>
Cc: "'linux-mips@linux-mips.org'" <linux-mips@linux-mips.org>
Subject: RE: KSeg0 coherency policy selection.
Date: Wed, 23 Oct 2002 14:05:09 -0400
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2653.19)
Content-Type: text/plain;
	charset="iso-8859-1"
Return-Path: <dinesh_nagpure@ivivity.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 498
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dinesh_nagpure@ivivity.com
Precedence: bulk
X-list: linux-mips

:) my typo. Infact there is no memcpy.c under arch/mips/lib. I may not have
the liberty to upgrade to the latest kernel version but I sure want to try
using arch/mips/lib from a newer version, If that's not of "Don't do that"
kind. Are there any changes made lately in the way I can download sources
from the anonymous cvs server at oss.sgi.com?

I tried following the instructions :
   cvs -d :pserver:cvs@oss.sgi.com:/cvs login
   (Only needed the first time you use anonymous CVS, the password is "cvs")
   cvs -d :pserver:cvs@oss.sgi.com:/cvs co linux

where you insert linux, libc, gdb or faq for <repository>. 

That responded with :
	cvs server : can not find module 'linux' - ignored
	cvs [checkout aborted] can not expand modules.

Thanks,
Dinesh

-----Original Message-----
From: Maciej W. Rozycki [mailto:macro@ds2.pg.gda.pl]
Sent: Wednesday, October 23, 2002 10:04 AM
To: Dinesh Nagpure
Cc: 'linux-mips@linux-mips.org'
Subject: Re: KSeg0 coherency policy selection.


On Wed, 23 Oct 2002, Dinesh Nagpure wrote:

> I am almost done with my porting of kernel 2.4.16 to our platform using
> RM5231A. But I had to make a couple of very basic hacks and I am trying to
> understand if there is any way I can avoid them.

 The kernel is almost a year old -- there were numerous fixes since then. 
Consider grabbing a recent (currently 2.4.20-pre6) version from the CVS. 
What I'm writing below refers to the current 2.4.x kernel. 

> First the memcpy wouldn't work for me properly, both the compiler
generated
> and also the one under arch/mips/lib/memcpy.c, so I had to change the lib
> version to do byte copy. I know this is a very crude change but things
> worked.

 You mean arch/mips/lib/memcpy.S, don't you?  There were problems detected
and fixed there this year.

> Second, the Kseg0 coherency algorithm selection in the function
> ld_mmu_r4xx0( ) seems to be improper for RM5231A, This function sets the
CP0
> config register K0 field to 3 which as per RM5231A user manual is
Cacheable,
> noncoherent, write back policy Should this not be set to 0, which is
> cacheable, non-coherent, write-through, no write allocate? 

 See CONF_CM_DEFAULT in include/asm-mips/pgtable-bits.h for how to select
the KSEG0 caching policy in ld_mmu_r4xx0().  If that is not appropriate,
you probably need a separate function to do the initialization (e.g. 
ld_mmu_rm5231()) in a separate file (e.g. arch/mips/mm/c-rm5231.c).

> Also from the knowledge base I understand there is a cache aliasing
problem
> associated with RM5231A when page size is set to 4KB. The document
> recommends to invalidate the cache before retiring a virtual page OR
> coloring of the pages. Can someone tell me if this fix is already taken
care
> of? For me when I enable caching under "Kernel hacking" my kernel crashes
> with page fault, when it tries to run bin/init, consistently.

 I can't help here, but you definitely want to upgrade your kernel before
going any further -- you may hit bugs that were fixed long ago and you may
try handling problems someone else already resolved.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

From macro@ds2.pg.gda.pl Wed Oct 23 20:46:35 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Wed, 23 Oct 2002 20:46:36 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:38054 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123927AbSJWSqf>; Wed, 23 Oct 2002 20:46:35 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id UAA12991;
	Wed, 23 Oct 2002 20:46:58 +0200 (MET DST)
Date: Wed, 23 Oct 2002 20:46:57 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: Dinesh Nagpure <dinesh_nagpure@ivivity.com>
cc: "'linux-mips@linux-mips.org'" <linux-mips@linux-mips.org>
Subject: RE: KSeg0 coherency policy selection.
In-Reply-To: <AEC4671C8179D61194DE0002B328BDD2070C8D@ATLOPS>
Message-ID: <Pine.GSO.3.96.1021023204431.3179J-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 499
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Wed, 23 Oct 2002, Dinesh Nagpure wrote:

> I tried following the instructions :
>    cvs -d :pserver:cvs@oss.sgi.com:/cvs login
>    (Only needed the first time you use anonymous CVS, the password is "cvs")
>    cvs -d :pserver:cvs@oss.sgi.com:/cvs co linux
> 
> where you insert linux, libc, gdb or faq for <repository>. 
> 
> That responded with :
> 	cvs server : can not find module 'linux' - ignored
> 	cvs [checkout aborted] can not expand modules.

 The tree was moved -- try ":pserver:cvs@ftp.linux-mips.org:/home/cvs",
instead.

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From atulsrivastava9@rediffmail.com Thu Oct 24 15:41:59 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 24 Oct 2002 15:42:00 +0200 (CEST)
Received: from webmail24.rediffmail.com ([203.199.83.146]:32402 "HELO
	webmail24.rediffmail.com") by linux-mips.org with SMTP
	id <S1123927AbSJXNl7>; Thu, 24 Oct 2002 15:41:59 +0200
Received: (qmail 16415 invoked by uid 510); 24 Oct 2002 13:43:22 -0000
Date: 24 Oct 2002 13:43:22 -0000
Message-ID: <20021024134322.16414.qmail@webmail24.rediffmail.com>
Received: from unknown (203.197.186.246) by rediffmail.com via HTTP; 24 Oct 2002 13:43:22 -0000
MIME-Version: 1.0
From: "atul srivastava" <atulsrivastava9@rediffmail.com>
Reply-To: "atul srivastava" <atulsrivastava9@rediffmail.com>
To: linux-mips@linux-mips.org
Subject: ramdisk loading scheme...
Content-type: text/plain;
	format=flowed
Content-Disposition: inline
Return-Path: <atulsrivastava9@rediffmail.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 500
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: atulsrivastava9@rediffmail.com
Precedence: bulk
X-list: linux-mips

which is better scheme..

either to include compressed ramdisk in kernel image image itself 
identified by binary_ramdisk_gz_start symbol
or load ramdisk seperately.

I am using compressed ramdisk image as part
of vmlinux and later converting it into a binary image
as reqd. by bootloader.

in this piece of System.map file it shows that
ramdisk is included at the end of data section(_edata).

000000800f3f08 D prom_console_driver
00000000800f4000 D __rd_start
00000000800f4000 D _binary_ramdisk_gz_
0000000080187960 D __rd_end
0000000080187960 D _binary_ramdisk_gz_
0000000080188000 A __bss_start
0000000080188000 A _edata

this is done by following Makefile and ld.script

in Makefile i have
ramdisk.o: ramdisk.gz ld.script
         $(LD) -no-warn-mismatch -T ld.script -b binary -        o 
$@ ramdisk.gz

in ld.script I have ,

OUTPUT_FORMAT("elf32-bigmips")
OUTPUT_ARCH(mips)
SECTIONS
{
   .initrd :
   {
        *(.data)
   }
}


one question is that is it necessary to include comprese ramdisk 
at the end of data section ..?

rd_image_load is zero which i think is alright as it indicates the 
offset in ram (device that holds initrd).

i am facing problems in execving the /bin/sh in main.c as it 
accesses some wrong address in do_page_fault
i doubt there may be some issues when i am uncompressing the 
ramdisk and all though i am being reported for corect length and 
crc for ramdisk in boot messages.

Best Regards,
Atul


__________________________________________________________
Give your Company an email address like
ravi @ ravi-exports.com.  Sign up for Rediffmail Pro today!
Know more. http://www.rediffmailpro.com/signup/


From juszczec@hotmail.com Thu Oct 24 17:18:11 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 24 Oct 2002 17:18:12 +0200 (CEST)
Received: from f132.law10.hotmail.com ([64.4.15.132]:28172 "EHLO hotmail.com")
	by linux-mips.org with ESMTP id <S1123927AbSJXPSL>;
	Thu, 24 Oct 2002 17:18:11 +0200
Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC;
	 Thu, 24 Oct 2002 08:18:03 -0700
Received: from 24.209.43.84 by lw10fd.law10.hotmail.msn.com with HTTP;
	Thu, 24 Oct 2002 15:18:03 GMT
X-Originating-IP: [24.209.43.84]
From: "Mark and Janice Juszczec" <juszczec@hotmail.com>
To: linux-mips@linux-mips.org
Subject: digest settings
Date: Thu, 24 Oct 2002 15:18:03 +0000
Mime-Version: 1.0
Content-Type: text/plain; format=flowed
Message-ID: <F132DXjDE3yiMTDTZae00010f2b@hotmail.com>
X-OriginalArrivalTime: 24 Oct 2002 15:18:03.0749 (UTC) FILETIME=[8C239150:01C27B70]
Return-Path: <juszczec@hotmail.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 501
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: juszczec@hotmail.com
Precedence: bulk
X-list: linux-mips




Hello all,

I've just subscribed to the list.  Is there a way to specify digest mode for 
email delivery?
Can you let me know one way or another, so I can check that my email is 
making it to the list?

My address is juszczec@hotmail.com

Thanks

Mark



_________________________________________________________________
Get faster connections -- switch to MSN Internet Access! 
http://resourcecenter.msn.com/access/plans/default.asp


From soeren.laursen@scrooge.dk Fri Oct 25 10:02:35 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 10:02:35 +0200 (CEST)
Received: from 213.237.12.36.adsl.ynoe.worldonline.dk ([213.237.12.36]:58444
	"EHLO HUGIN") by linux-mips.org with ESMTP id <S1122978AbSJYICf>;
	Fri, 25 Oct 2002 10:02:35 +0200
Received: from amavis by HUGIN with scanned-ok (Exim 3.12 #1 (Debian))
	id 184zQI-0001X0-00
	for <linux-mips@linux-mips.org>; Fri, 25 Oct 2002 10:02:26 +0200
Received: from athlon-pc ([10.0.0.2] helo=athlon-800)
	by HUGIN with esmtp (Exim 3.12 #1 (Debian))
	id 184zQ6-0001Wi-00; Fri, 25 Oct 2002 10:02:14 +0200
From: "Soeren Laursen" <soeren.laursen@scrooge.dk>
To: "Aric" <aricwang@svanetworks.com>, linux-mips@linux-mips.org
Date: Fri, 25 Oct 2002 10:05:19 +0200
MIME-Version: 1.0
Subject: Re: Where can I get the latest Full Kernel source for MIPS (VR4131/VR4122)?
Reply-to: soeren.laursen@scrooge.dk
Message-ID: <3DB9175F.4418.1A5D28@localhost>
Priority: normal
In-reply-to: <001501c27bfb$c0a48390$4a48a8c0@rd06>
X-mailer: Pegasus Mail for Windows (v4.01)
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body
X-Virus-Scanned: by AMaViS perl-11
Return-Path: <soeren.laursen@scrooge.dk>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 502
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: soeren.laursen@scrooge.dk
Precedence: bulk
X-list: linux-mips

http://www.linux-mips.org/kernel.html

Regards,

Soeren Laursen
From:           	"Aric" <aricwang@svanetworks.com>
To:             	<linux-cvs@linux-mips.org>
Copies to:      	<joeg@clearcore.net>
Subject:        	Where can I get the latest Full Kernel source for 
MIPS (VR4131/VR4122)?
Date sent:      	Fri, 25 Oct 2002 15:54:29 +0800
Send reply to:  	linux-mips@linux-mips.org

> 
> thank you very much.
> Where can I get the latest full kernel source for MIPS (VR4131/VR4122). The
> code from sourceforge is not full, and the code from linux-vr is old.
> 
> The source code on cvsweb(http://www.linux-mips.org/cvsweb/) is 2.4.20-pre6.
> Where can I get this version for MIPS?
> 
> 
> 



From geert@linux-m68k.org Fri Oct 25 10:14:55 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 10:14:56 +0200 (CEST)
Received: from mail2.sonytel.be ([195.0.45.172]:40660 "EHLO mail.sonytel.be")
	by linux-mips.org with ESMTP id <S1122978AbSJYIOz>;
	Fri, 25 Oct 2002 10:14:55 +0200
Received: from vervain.sonytel.be (mail.sonytel.be [10.17.0.26])
	by mail.sonytel.be (8.9.0/8.8.6) with ESMTP id KAA25572;
	Fri, 25 Oct 2002 10:14:36 +0200 (MET DST)
Date: Fri, 25 Oct 2002 10:14:37 +0200 (MEST)
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Aric <aricwang@svanetworks.com>
cc: Linux/MIPS Development <linux-mips@linux-mips.org>
Subject: Re: can not check out linux repository
In-Reply-To: <000601c27bed$ce019130$4a48a8c0@rd06>
Message-ID: <Pine.GSO.4.21.0210251013470.9034-100000@vervain.sonytel.be>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <geert@linux-m68k.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 503
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: geert@linux-m68k.org
Precedence: bulk
X-list: linux-mips

On Fri, 25 Oct 2002, Aric wrote:
> I can't check out the linux directory by execute the following commands:
> 
> c:\> cvs -d :pserver:cvs@oss.sgi.com:/cvs login
>  enter password: cvs

Please use `:pserver:cvs@ftp.linux-mips.org:/home/cvs' instead. The server was
moved.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds



From Geert.Uytterhoeven@sonycom.com Fri Oct 25 10:17:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 10:17:02 +0200 (CEST)
Received: from mail2.sonytel.be ([195.0.45.172]:5589 "EHLO mail.sonytel.be")
	by linux-mips.org with ESMTP id <S1122978AbSJYIRB>;
	Fri, 25 Oct 2002 10:17:01 +0200
Received: from vervain.sonytel.be (mail.sonytel.be [10.17.0.26])
	by mail.sonytel.be (8.9.0/8.8.6) with ESMTP id KAA25739;
	Fri, 25 Oct 2002 10:16:55 +0200 (MET DST)
Date: Fri, 25 Oct 2002 10:16:56 +0200 (MEST)
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: webmaster@linux-mips.org
cc: Linux/MIPS Development <linux-mips@linux-mips.org>
Subject: Re: Where can I get the latest Full Kernel source for MIPS
 (VR4131/VR4122)?
In-Reply-To: <3DB9175F.4418.1A5D28@localhost>
Message-ID: <Pine.GSO.4.21.0210251015370.9034-100000@vervain.sonytel.be>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <Geert.Uytterhoeven@sonycom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 504
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: geert@linux-m68k.org
Precedence: bulk
X-list: linux-mips

On Fri, 25 Oct 2002, Soeren Laursen wrote:
> http://www.linux-mips.org/kernel.html

Can someone please update the CVS server location in that document? It moved to
linux-mips.org a while ago.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


From Geert.Uytterhoeven@sonycom.com Fri Oct 25 10:18:50 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 10:18:51 +0200 (CEST)
Received: from mail2.sonytel.be ([195.0.45.172]:41173 "EHLO mail.sonytel.be")
	by linux-mips.org with ESMTP id <S1122978AbSJYISu>;
	Fri, 25 Oct 2002 10:18:50 +0200
Received: from vervain.sonytel.be (mail.sonytel.be [10.17.0.26])
	by mail.sonytel.be (8.9.0/8.8.6) with ESMTP id KAA25909
	for <linux-mips@linux-mips.org>; Fri, 25 Oct 2002 10:18:44 +0200 (MET DST)
Date: Fri, 25 Oct 2002 10:18:45 +0200 (MEST)
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Linux/MIPS Development <linux-mips@linux-mips.org>
Subject: Re: Where can I get the latest Full Kernel source for MIPS
 (VR4131/VR4122)?
In-Reply-To: <Pine.GSO.4.21.0210251015370.9034-100000@vervain.sonytel.be>
Message-ID: <Pine.GSO.4.21.0210251018010.9034-100000@vervain.sonytel.be>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <Geert.Uytterhoeven@sonycom.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 505
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: geert@linux-m68k.org
Precedence: bulk
X-list: linux-mips

On Fri, 25 Oct 2002, Geert Uytterhoeven wrote:
> On Fri, 25 Oct 2002, Soeren Laursen wrote:
> > http://www.linux-mips.org/kernel.html
> 
> Can someone please update the CVS server location in that document? It moved to
> linux-mips.org a while ago.

And BTW, webmaster@linux-mips.org (mentioned on the web pages) bounces.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


From juszczec@hotmail.com Fri Oct 25 14:21:24 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 14:21:24 +0200 (CEST)
Received: from f173.law10.hotmail.com ([64.4.15.173]:35588 "EHLO hotmail.com")
	by linux-mips.org with ESMTP id <S1123253AbSJYMVY>;
	Fri, 25 Oct 2002 14:21:24 +0200
Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC;
	 Fri, 25 Oct 2002 05:21:12 -0700
Received: from 63.121.54.5 by lw10fd.law10.hotmail.msn.com with HTTP;
	Fri, 25 Oct 2002 12:21:11 GMT
X-Originating-IP: [63.121.54.5]
From: "Mark and Janice Juszczec" <juszczec@hotmail.com>
To: linux-mips@linux-mips.org
Subject: cross gcj for mipsel
Date: Fri, 25 Oct 2002 12:21:11 +0000
Mime-Version: 1.0
Content-Type: text/plain; format=flowed
Message-ID: <F173QojAOq79phiaJcp0000aab1@hotmail.com>
X-OriginalArrivalTime: 25 Oct 2002 12:21:12.0274 (UTC) FILETIME=[019EBB20:01C27C21]
Return-Path: <juszczec@hotmail.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 506
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: juszczec@hotmail.com
Precedence: bulk
X-list: linux-mips


Hello all

Is a cross gcj (x86 to mipsel) available anywhere?  If not, are there any 
instructions for building one?

Thanks

Mark
juszczec@hotmail.com



_________________________________________________________________
Internet access plans that fit your lifestyle -- join MSN. 
http://resourcecenter.msn.com/access/plans/default.asp


From carstenl@mips.com Fri Oct 25 15:10:27 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 15:10:28 +0200 (CEST)
Received: from mx2.mips.com ([206.31.31.227]:22465 "EHLO mx2.mips.com")
	by linux-mips.org with ESMTP id <S1123253AbSJYNK1>;
	Fri, 25 Oct 2002 15:10:27 +0200
Received: from newman.mips.com (ns-dmz [206.31.31.225])
	by mx2.mips.com (8.12.5/8.12.5) with ESMTP id g9PDACNf014041;
	Fri, 25 Oct 2002 06:10:12 -0700 (PDT)
Received: from copfs01.mips.com (copfs01 [192.168.205.101])
	by newman.mips.com (8.9.3/8.9.0) with ESMTP id GAA28500;
	Fri, 25 Oct 2002 06:11:09 -0700 (PDT)
Received: from mips.com (copsun17 [192.168.205.27])
	by copfs01.mips.com (8.11.4/8.9.0) with ESMTP id g9PDAEb26567;
	Fri, 25 Oct 2002 15:10:14 +0200 (MEST)
Message-ID: <3DB942B5.830DD21D@mips.com>
Date: Fri, 25 Oct 2002 15:10:13 +0200
From: Carsten Langgaard <carstenl@mips.com>
X-Mailer: Mozilla 4.77 [en] (X11; U; SunOS 5.8 sun4u)
X-Accept-Language: en
MIME-Version: 1.0
To: Ralf Baechle <ralf@linux-mips.org>, linux-mips@linux-mips.org
Subject: Yet another 64-bit conversion patch
Content-Type: multipart/mixed;
 boundary="------------7369D79D6DBC87FB62B6FA45"
Return-Path: <carstenl@mips.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 507
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: carstenl@mips.com
Precedence: bulk
X-list: linux-mips

This is a multi-part message in MIME format.
--------------7369D79D6DBC87FB62B6FA45
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 7bit

Here is a conversion patch for the sysinfo syscall.

/Carsten


--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com



--------------7369D79D6DBC87FB62B6FA45
Content-Type: text/plain; charset=iso-8859-15;
 name="syscall_wrapper.part7.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="syscall_wrapper.part7.patch"

Index: arch/mips64/kernel/linux32.c
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/linux32.c,v
retrieving revision 1.42.2.18
diff -u -r1.42.2.18 linux32.c
--- arch/mips64/kernel/linux32.c	21 Oct 2002 12:57:58 -0000	1.42.2.18
+++ arch/mips64/kernel/linux32.c	25 Oct 2002 09:54:17 -0000
@@ -661,6 +661,46 @@
 	return sys32_wait4(pid, stat_addr, options, NULL);
 }
 
+struct sysinfo32 {
+        s32 uptime;
+        u32 loads[3];
+        u32 totalram;
+        u32 freeram;
+        u32 sharedram;
+        u32 bufferram;
+        u32 totalswap;
+        u32 freeswap;
+        unsigned short procs;
+        char _f[22];
+};
+
+extern asmlinkage int sys_sysinfo(struct sysinfo *info);
+
+asmlinkage int sys32_sysinfo(struct sysinfo32 *info)
+{
+	struct sysinfo s;
+	int ret, err;
+	mm_segment_t old_fs = get_fs ();
+	
+	set_fs (KERNEL_DS);
+	ret = sys_sysinfo(&s);
+	set_fs (old_fs);
+	err = put_user (s.uptime, &info->uptime);
+	err |= __put_user (s.loads[0], &info->loads[0]);
+	err |= __put_user (s.loads[1], &info->loads[1]);
+	err |= __put_user (s.loads[2], &info->loads[2]);
+	err |= __put_user (s.totalram, &info->totalram);
+	err |= __put_user (s.freeram, &info->freeram);
+	err |= __put_user (s.sharedram, &info->sharedram);
+	err |= __put_user (s.bufferram, &info->bufferram);
+	err |= __put_user (s.totalswap, &info->totalswap);
+	err |= __put_user (s.freeswap, &info->freeswap);
+	err |= __put_user (s.procs, &info->procs);
+	if (err)
+		return -EFAULT;
+	return ret;
+}
+
 #define RLIM_INFINITY32	0x7fffffff
 #define RESOURCE32(x) ((x > RLIM_INFINITY32) ? RLIM_INFINITY32 : x)
 
Index: arch/mips64/kernel/scall_o32.S
===================================================================
RCS file: /home/cvs/linux/arch/mips64/kernel/scall_o32.S,v
retrieving revision 1.48.2.17
diff -u -r1.48.2.17 scall_o32.S
--- arch/mips64/kernel/scall_o32.S	3 Oct 2002 09:38:26 -0000	1.48.2.17
+++ arch/mips64/kernel/scall_o32.S	25 Oct 2002 09:54:17 -0000
@@ -428,7 +428,7 @@
 	sys	sys_ni_syscall	0	/* sys_vm86 */
 	sys	sys32_wait4	4
 	sys	sys_swapoff	1			/* 4115 */
-	sys	sys_sysinfo	1
+	sys	sys32_sysinfo	1
 	sys	sys32_ipc		6
 	sys	sys_fsync	1
 	sys	sys32_sigreturn	0

--------------7369D79D6DBC87FB62B6FA45--


From sjhill@realitydiluted.com Fri Oct 25 18:38:36 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 18:38:36 +0200 (CEST)
Received: from real.realitydiluted.com ([208.242.241.164]:4331 "EHLO
	real.realitydiluted.com") by linux-mips.org with ESMTP
	id <S1123253AbSJYQig>; Fri, 25 Oct 2002 18:38:36 +0200
Received: from localhost.localdomain ([127.0.0.1] helo=realitydiluted.com)
	by real.realitydiluted.com with esmtp (Exim 3.22 #1 (Red Hat Linux))
	id 1857Te-0003cg-00; Fri, 25 Oct 2002 11:38:26 -0500
Message-ID: <3DB97381.8070501@realitydiluted.com>
Date: Fri, 25 Oct 2002 11:38:25 -0500
From: "Steven J. Hill" <sjhill@realitydiluted.com>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020913 Debian/1.1-1
X-Accept-Language: en
MIME-Version: 1.0
To: linux-mips@linux-mips.org
CC: binutils@sources.redhat.com
Subject: Problems generating shared library for MIPS using binutils-2.13...
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Return-Path: <sjhill@realitydiluted.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 508
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: sjhill@realitydiluted.com
Precedence: bulk
X-list: linux-mips

Greetings.

I'm doing something stupid here, so please help me out. I am trying
to create a shared library with gcc passing parameters to the linker
and it is not working.

I compiled all the object files with '-mips2' and then I attempt to
create the shared library with:

    mipsel-linux-gcc -shared -Wl,-Amips2,-soname,libz.so.1 \
       -o libz.so.1.1.4 adler32.o compress.o crc32.o gzio.o \
       uncompr.o deflate.o trees.o zutil.o inflate.o infblock.o \
       inftrees.o infcodes.o infutil.o inffast.o

The object files are all mips2, but the generated '.so' object
is mips1?! What am I not understanding? I am using binutils-2.13,
gcc-3.2 and uClibc-0.9.15. The use of uClibc is not the problem.

-Steve


From drow@false.org Fri Oct 25 18:43:58 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 18:43:59 +0200 (CEST)
Received: from crack.them.org ([65.125.64.184]:19471 "EHLO crack.them.org")
	by linux-mips.org with ESMTP id <S1123253AbSJYQn6>;
	Fri, 25 Oct 2002 18:43:58 +0200
Received: from nevyn.them.org ([66.93.61.169] ident=mail)
	by crack.them.org with asmtp (Exim 3.12 #1 (Debian))
	id 1858UG-0002dB-00; Fri, 25 Oct 2002 12:43:09 -0500
Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian))
	id 1857Z4-0005n2-00; Fri, 25 Oct 2002 12:44:02 -0400
Date: Fri, 25 Oct 2002 12:44:02 -0400
From: Daniel Jacobowitz <dan@debian.org>
To: "Steven J. Hill" <sjhill@realitydiluted.com>
Cc: linux-mips@linux-mips.org, binutils@sources.redhat.com
Subject: Re: Problems generating shared library for MIPS using binutils-2.13...
Message-ID: <20021025164402.GB6451@nevyn.them.org>
Mail-Followup-To: "Steven J. Hill" <sjhill@realitydiluted.com>,
	linux-mips@linux-mips.org, binutils@sources.redhat.com
References: <3DB97381.8070501@realitydiluted.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <3DB97381.8070501@realitydiluted.com>
User-Agent: Mutt/1.5.1i
Return-Path: <drow@false.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 509
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dan@debian.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 25, 2002 at 11:38:25AM -0500, Steven J. Hill wrote:
> Greetings.
> 
> I'm doing something stupid here, so please help me out. I am trying
> to create a shared library with gcc passing parameters to the linker
> and it is not working.
> 
> I compiled all the object files with '-mips2' and then I attempt to
> create the shared library with:
> 
>    mipsel-linux-gcc -shared -Wl,-Amips2,-soname,libz.so.1 \
>       -o libz.so.1.1.4 adler32.o compress.o crc32.o gzio.o \
>       uncompr.o deflate.o trees.o zutil.o inflate.o infblock.o \
>       inftrees.o infcodes.o infutil.o inffast.o
> 
> The object files are all mips2, but the generated '.so' object
> is mips1?! What am I not understanding? I am using binutils-2.13,
> gcc-3.2 and uClibc-0.9.15. The use of uClibc is not the problem.

More information:

Add -Wl,-v and give us the linker command line.

Is every object or library mentioned on that line already marked as
MIPS-2 by readelf?  Even crt*, libc*?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

From sjhill@realitydiluted.com Fri Oct 25 18:55:07 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 18:55:08 +0200 (CEST)
Received: from real.realitydiluted.com ([208.242.241.164]:13547 "EHLO
	real.realitydiluted.com") by linux-mips.org with ESMTP
	id <S1123253AbSJYQzH>; Fri, 25 Oct 2002 18:55:07 +0200
Received: from localhost.localdomain ([127.0.0.1] helo=realitydiluted.com)
	by real.realitydiluted.com with esmtp (Exim 3.22 #1 (Red Hat Linux))
	id 1857jB-0003dT-00; Fri, 25 Oct 2002 11:54:29 -0500
Message-ID: <3DB97744.2010707@realitydiluted.com>
Date: Fri, 25 Oct 2002 11:54:28 -0500
From: "Steven J. Hill" <sjhill@realitydiluted.com>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020913 Debian/1.1-1
X-Accept-Language: en
MIME-Version: 1.0
To: Daniel Jacobowitz <dan@debian.org>
CC: linux-mips@linux-mips.org, binutils@sources.redhat.com
Subject: Re: Problems generating shared library for MIPS using binutils-2.13...
References: <3DB97381.8070501@realitydiluted.com> <20021025164402.GB6451@nevyn.them.org>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Return-Path: <sjhill@realitydiluted.com>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 510
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: sjhill@realitydiluted.com
Precedence: bulk
X-list: linux-mips

Daniel Jacobowitz wrote:
> 
> More information:
> 
> Add -Wl,-v and give us the linker command line.
> 
> Is every object or library mentioned on that line already marked as
> MIPS-2 by readelf?  Even crt*, libc*?
>
I knew I was being stupid, crt* and libc* are mips1 *sigh*. Looks
like I have more work to do for my build system. Below is the verbose
output, but I think that's the problem for sure.

-Steve

mipsel-linux-gcc -shared -Wl,-v,-Amips2,-soname,libz.so.1 -o 
libz.so.1.1.4 adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o 
trees.o zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o 
inffast.o
collect2 version 3.2 (MIPSel GNU/Linux with ELF)
/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/../../../../mipsel-linux/bin/ld 
--eh-frame-hdr -EL -shared -o libz.so.1.1.4 
/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/../../../../mipsel-linux/lib/crti.o 
/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/crtbeginS.o 
-L/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2 
-L/opt/toolchains/uclibc/bin/../lib/gcc-lib 
-L/opt/toolchains/uclibc-crosstools-1.0.0/lib/gcc-lib/mipsel-linux/3.2 
-L/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/../../../../mipsel-linux/lib 
-L/opt/toolchains/uclibc-crosstools-1.0.0/lib/gcc-lib/mipsel-linux/3.2/../../../../mipsel-linux/lib 
-L/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/../../.. -v 
-Amips2 -soname libz.so.1 adler32.o compress.o crc32.o gzio.o uncompr.o 
deflate.o trees.o zutil.o inflate.o infblock.o inftrees.o infcodes.o 
infutil.o inffast.o -lgcc -lc -lgcc 
/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/crtendS.o 
/opt/toolchains/uclibc/bin/../lib/gcc-lib/mipsel-linux/3.2/../../../../mipsel-linux/lib/crtn.o
GNU ld version 2.13




From macro@ds2.pg.gda.pl Fri Oct 25 19:07:10 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 19:07:11 +0200 (CEST)
Received: from delta.ds2.pg.gda.pl ([213.192.72.1]:64238 "EHLO
	delta.ds2.pg.gda.pl") by linux-mips.org with ESMTP
	id <S1123253AbSJYRHK>; Fri, 25 Oct 2002 19:07:10 +0200
Received: from localhost by delta.ds2.pg.gda.pl (8.9.3/8.9.3) with SMTP id TAA02561;
	Fri, 25 Oct 2002 19:06:51 +0200 (MET DST)
Date: Fri, 25 Oct 2002 19:06:50 +0200 (MET DST)
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
To: "Steven J. Hill" <sjhill@realitydiluted.com>
cc: Daniel Jacobowitz <dan@debian.org>, linux-mips@linux-mips.org,
	binutils@sources.redhat.com
Subject: Re: Problems generating shared library for MIPS using binutils-2.13...
In-Reply-To: <3DB97744.2010707@realitydiluted.com>
Message-ID: <Pine.GSO.3.96.1021025185639.1121A-100000@delta.ds2.pg.gda.pl>
Organization: Technical University of Gdansk
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: <macro@ds2.pg.gda.pl>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 511
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: macro@ds2.pg.gda.pl
Precedence: bulk
X-list: linux-mips

On Fri, 25 Oct 2002, Steven J. Hill wrote:

> > Is every object or library mentioned on that line already marked as
> > MIPS-2 by readelf?  Even crt*, libc*?
> >
> I knew I was being stupid, crt* and libc* are mips1 *sigh*. Looks
> like I have more work to do for my build system. Below is the verbose
> output, but I think that's the problem for sure.

 Hmm, that's strange as a single mips2 object among mips1 ones should make
an executable/shared library be marked as mips2 and not mips1.  I wouldn't
worry in the long run, though, as I think this should be fixed in the
trunk as Richard Sandiford was working in these areas recently.  You might
want to do a verification to be sure, though. 

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +


From hjl@lucon.org Fri Oct 25 19:50:56 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 19:50:57 +0200 (CEST)
Received: from p508B69CC.dip.t-dialin.net ([80.139.105.204]:38800 "EHLO
	p508B69CC.dip.t-dialin.net") by linux-mips.org with ESMTP
	id <S1123253AbSJYRu4>; Fri, 25 Oct 2002 19:50:56 +0200
Received: from sccrmhc01.attbi.com ([IPv6:::ffff:204.127.202.61]:14738 "EHLO
	sccrmhc01.attbi.com") by ralf.linux-mips.org with ESMTP
	id <S867025AbSJYRuu>; Fri, 25 Oct 2002 19:50:50 +0200
Received: from lucon.org ([12.234.88.146]) by sccrmhc01.attbi.com
          (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP
          id <20021025175035.HITW27756.sccrmhc01.attbi.com@lucon.org>;
          Fri, 25 Oct 2002 17:50:35 +0000
Received: by lucon.org (Postfix, from userid 1000)
	id 289E32C4EC; Fri, 25 Oct 2002 10:50:34 -0700 (PDT)
Date: Fri, 25 Oct 2002 10:50:34 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: "Steven J. Hill" <sjhill@realitydiluted.com>
Cc: linux-mips@linux-mips.org, binutils@sources.redhat.com
Subject: Re: Problems generating shared library for MIPS using binutils-2.13...
Message-ID: <20021025105034.A16528@lucon.org>
References: <3DB97381.8070501@realitydiluted.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <3DB97381.8070501@realitydiluted.com>; from sjhill@realitydiluted.com on Fri, Oct 25, 2002 at 11:38:25AM -0500
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 512
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 25, 2002 at 11:38:25AM -0500, Steven J. Hill wrote:
> Greetings.
> 
> I'm doing something stupid here, so please help me out. I am trying
> to create a shared library with gcc passing parameters to the linker
> and it is not working.
> 
> I compiled all the object files with '-mips2' and then I attempt to
> create the shared library with:
> 
>     mipsel-linux-gcc -shared -Wl,-Amips2,-soname,libz.so.1 \
>        -o libz.so.1.1.4 adler32.o compress.o crc32.o gzio.o \
>        uncompr.o deflate.o trees.o zutil.o inflate.o infblock.o \
>        inftrees.o infcodes.o infutil.o inffast.o
> 
> The object files are all mips2, but the generated '.so' object
> is mips1?! What am I not understanding? I am using binutils-2.13,
> gcc-3.2 and uClibc-0.9.15. The use of uClibc is not the problem.
> 

That is a bug in the FSF binutils. I believe I fixed it in my Linux
binutils:

http://sources.redhat.com/ml/binutils/2001-10/msg00526.html

Please try my Linux binutils. 


H.J.

From hjl@lucon.org Fri Oct 25 19:59:01 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 19:59:02 +0200 (CEST)
Received: from rwcrmhc53.attbi.com ([204.127.198.39]:11693 "EHLO
	rwcrmhc53.attbi.com") by linux-mips.org with ESMTP
	id <S1123253AbSJYR7B>; Fri, 25 Oct 2002 19:59:01 +0200
Received: from lucon.org ([12.234.88.146]) by rwcrmhc53.attbi.com
          (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP
          id <20021025175853.GDRJ9096.rwcrmhc53.attbi.com@lucon.org>;
          Fri, 25 Oct 2002 17:58:53 +0000
Received: by lucon.org (Postfix, from userid 1000)
	id 4EBC12C4EC; Fri, 25 Oct 2002 10:58:53 -0700 (PDT)
Date: Fri, 25 Oct 2002 10:58:53 -0700
From: "H. J. Lu" <hjl@lucon.org>
To: Mark and Janice Juszczec <juszczec@hotmail.com>
Cc: linux-mips@linux-mips.org
Subject: Re: cross gcj for mipsel
Message-ID: <20021025105853.A16659@lucon.org>
References: <F173QojAOq79phiaJcp0000aab1@hotmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5.1i
In-Reply-To: <F173QojAOq79phiaJcp0000aab1@hotmail.com>; from juszczec@hotmail.com on Fri, Oct 25, 2002 at 12:21:11PM +0000
Return-Path: <hjl@lucon.org>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 513
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: hjl@lucon.org
Precedence: bulk
X-list: linux-mips

On Fri, Oct 25, 2002 at 12:21:11PM +0000, Mark and Janice Juszczec wrote:
> 
> Hello all
> 
> Is a cross gcj (x86 to mipsel) available anywhere?  If not, are there any 

I have one:

# ls -l /export/tools-3.2/bin/mipsel-linux-gcj 
-rwxr-xr-x    1 hjl      users      321336 Oct 19 18:48 /export/tools-3.2/bin/mipsel-linux-gcj

> instructions for building one?

You can try the spec file in my old toolchain src rpm, which is based
on gcc 2.96. I am working on a new one based on gcc 3.2 for my RedHat
8.0/mips port.


H.J.

From dennisn@pe.net Fri Oct 25 20:30:50 2002
Received: with ECARTIS (v1.0.0; list linux-mips); Fri, 25 Oct 2002 20:30:51 +0200 (CEST)
Received: from shell1.pe.net ([64.38.64.7]:36494 "EHLO shell1.pe.net")
	by linux-mips.org with ESMTP id <S1123253AbSJYSau>;
	Fri, 25 Oct 2002 20:30:50 +0200
Received: from localhost (dennisn@localhost)
	by shell1.pe.net (8.11.6/8.11.3) with SMTP id g9PIUaR28957
	for <linux-mips@linux-mips.org>; Fri, 25 Oct 2002 11:30:38 -0700 (PDT)
Date: Fri, 25 Oct 2002 11:30:36 -0700 (PDT)
From: Dennis Newbold <dennisn@pe.net>
X-Sender: dennisn@shell1
To: linux-mips@linux-mips.org
Subject: GCC generating wrong assembly code?
Message-ID: <Pine.GSO.3.96.1021025110042.28181A-101000@shell1>
MIME-Version: 1.0
Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-851401618-1035570636=:28181"
Return-Path: <dennisn@pe.net>
X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0)
X-Orcpt: rfc822;linux-mips@linux-mips.org
Original-Recipient: rfc822;linux-mips@linux-mips.org
X-archive-position: 514
X-ecartis-version: Ecartis v1.0.0
Sender: linux-mips-bounce@linux-mips.org
Errors-to: linux-mips-bounce@linux-mips.org
X-original-sender: dennisn@pe.net
Precedence: bulk
X-list: linux-mips

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-1035570636=:28181
Content-Type: TEXT/PLAIN; charset=US-ASCII

Dear Linux-mips list members:

     I'm trying to build gcj (GNU Java ahead-of-time compiler) from
the sources.  It ran for quite awhile, and then on a particular file,
it got about 20 "Error: branch out of range" errors from the gas
assembler.  I'm hoping that someone on this list that understands gcc
and mips assembler better than I can suggest a command-line switch or
some other way to get gcc to generate code which does not result in
this error.

Details:  source file, and assembler output file are in the attached zip
file.  Command line used to invoke gcc is:

gcc -c -g -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes
-Wmissing-prototypes -Wtraditional -fno-common -DHAVE_CONFIG_H -I.
-I../../gcc/gcc -I../../gcc/gcc/config -I../../gcc/include
../../gcc/gcc/expr.c

Assembly output file was produced using the above command line, replacing
"-c" with "-S".

I'm building it with  gcc 2.95.3 and GNU make vers. 3.75 on a Linux-mips
system. The configure script says that the cpu type is
mipsel-pc-linux-gnu.  In any case, the processor is the QED (now
PMC-Sierra) RM5230.

Also, if anyone has successfully built gcj for a MIPS system, and would
mind sending me a copy of the binary executable(s), that would work too.

Please send any replies directly to me (dennisn@pe.net), as I'm not
subscribed to the mailing list.  Thanks alot.

Dennis Newbold
dennisn@pe.net

---------------------------------------------
|                                           |
|     The way to be happy is to be good     |
|                                           |
---------------------------------------------

---559023410-851401618-1035570636=:28181
Content-Type: APPLICATION/ZIP; name="expr.zip"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.1021025113036.28181B@shell1>
Content-Description: 

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
RyMqFwOscgZr0q0fmejxiVbF7Fe2+XQoaKVW+/NuWR8zqC925+1jefRNsdwg
i6fDsQLA15yAFQc8mwB0AEN92R+XhGnMUHqrA+JE+FwN3paJhvc67ZkhA/Ia
0fPl3+fqRA11nYnngG9Y/Tk7pZ0epki3bPp73d4G09E0DvIIlh5MMCknw6zZ
EHd0TwYWvy4KhKqbdUWRng0Tv3oqdFiaektyxqfjcr1aFXTUNhySiGr9b0nV
ZttBt/qFghGqNxplTU3SFZG2iFcaDuuCgYVPiJgaBvuCgYek7XRcVNN5jgi0
qXcv6v85z5eko1NzGKrEUdc3k2TIQ/hnvlzyQTr93xsmU5eYluVXqQ9TXrLz
eilNoylPwtNltTwF692eqpshmvIUbGGjcnN5Cnab9e6LzOBJDHtuA80iWvIE
bUR9M3ZLnqAD175ZYUuemqo2opbBkBhWFRdguAgYC1j2xjc8sXO0Hu1q22x3
jSUPblmvTiPdlrVbNMvX6G/LCp7W21Iavy3rV708br7IDPLqLtgpJzHIC7ha
Ftt59aWzhLZ3yVCVtEIqHV3ualkVj2vyKJqYB0PrWbT9VL0zFa6sxpfyuzQR
btdMXrCL5J0saXBHuwwnF116mp30msPQpR7knXQHM6+FeNc3E2fhUhpNDGk5
orSop7MNujXLvuDZzo9f4OFzU6cZK3a4Yvum0f/dFMd9UT2eV76JANpEAF1R
k9soDn1xIhSHffXjCKBpkUNA5djFajN/qupDhmpxt1kW8KG+YddSa7TEcQSU
i2/Qx3lVEsyPHIJfjutT2eDi2GkrhHBx+rS4EC+OIMIx2EaMOIRqWDDT8SPQ
av617VR3m04fcQaeD02NoatSCyHIsHivfAVgo4ZiuLxH+Pr1DpOumBrvjNIz
uz0mzTR5L9hJ5A4Icbl0OBcyfQNehctdnI84djfn7Q7xkAVhuAIW5925KpcI
syzMhdvjhwZbYVvsENyFUelSJdmPb8Jbw8Ytx/75Ep/M9vjQLzkW+/2XdVms
98XqvFuc1vtdxcwX3kqzaV190+v/bqn9lbANtka+pQHUCeS2UZXlF9+ChVpm
f2UI04DnwFxbFlCbWD1ZWd1writD8+rnlgMVVJURdKIotur2voIZtOWy4QNh
/bBmvuVx0OT38c6IfKyP7ejU7/W5upwnp7uvV9hNkv9zulv6Nz+3EfYX1eK5
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
87DzCb76e1j+mUVc+BHFatkq9XF5+fI+fDQ0E8o348X96/e8uc1tv9f0Mj8z
cPnHdLn3Mv/5XA5fZhZeZvovM6mzWehk1WRL7bubygc4fYANpswOv0L5ants
OGXh9ugrXP8r3PhlfgEmO3zZwvog5TQvKwiqfZn2GYvTcH3C7dHLWP9l/cvl
7M56VLUq1q/KNPXfwvtv4QvdzfvC9ddYin5vYtibr6bxzvF+b7LfW57O2/v7
0xNu3arXmfDtYF7VeDB+y1vZb9bfm1KPexPz6trBtPc3nzQLvc2raAbTbvu9
jWnCg/C+M4Np728pOdxSHgTyne7PtupvGTWNh6bmtdP9RVB94sfLvd7mU+Sd
7i+C6tO+GtO+x916p/qLoPq0rxZo38y8RvUXQfVpX8mF3uZVkINVWKD50Gww
3X2aVws0b+bFk4Pp7tO8WqB539vgBFZ9mh9dXpgAy8cv6W+FweUlzuLc8CW6
v0X08FTxCTSjSdb9HaLZuDM+XH/d3yCaDzubVcYRDer+/tBisbPB9tD97aHz
9vhy/3z76f708bEQ6Xyg4IgZaNXvMa+pF5vLNfWhTSNGpYcimw8WGjFL3d8h
Ou+QoHDFgZRdmnw0lA+1VOh92Ol8i/Lb6a5+wO+FwZQP5TcfaDE66HR/q+jh
YeK9Xu8GIpHp75TBZd1nBXogZM9q6p+ePl69XM3/Xt3NtPOd1yP/DjGPn27v
P333h9vny/88PT08Xz7+Yb76cvrlpXh6vvDr46xZ5Ycu/u+bL/fXHpn8+3wR
VUtqnIJwSs3yWv7pT/91/r9P19fhP69u/en6Dz76G0buhzAFZe/lu/yK6m3f
/enm6erzKaqaPjErWlh/vnp6/usf5lf+MGvv/q//Ol38MEtS85/zvPww9/t0
9dc/2Ln556vnP383/fJxmoS3Tcxr7fuEq+Dtmkfjv+b08t39rE09PH08Pc2/
rx+9/fO7YAMIN9Ot6JJGtdWbGOaHn05BF/uBI2QSiwEpyT/iv2CaigszzbjS
gTLLfd6Sk3/rEDpeeN5uwiu/h9LeCdE+zju1yUG06XwLfLDJYEJNbwotAxki
g1X5C4PiWCzYw7htHR8++jvac4L9p4wziuacEDNQd3UVEe5IV6ruyrRdYcZz
0VXAtylTn6CrlCJkowkxBDXUbXlEqyHDMPUwZIFRAV9Uf3LI02i+2RRGLv8E
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
LObe5g8dHD+yz8HkiIPNnc3HzOB0ln0GJocGBjWJeUUHHF71GZgaMTA1STfu
rM+/1EgUUpNiw+9UfZlGjTbR3JkYroDqbxI13iTaDIlD9TeBGm8CMy/A4DxS
/T0wuDxkIWrySufoHf2tUZwGXV7mVcXRSo+OcsU8BxwtaX8fqOE+YN7BNFrS
/j4YXR4PmLnhSuv+7tDD3eHrIb8byAq6vzt0sTuajevLwr4byAq6vz30kEB8
EdJ3A7au+9tDi4WhzSszMKjq/v4YXBYDQ1LeTbVZMBSie1cswX0oN/XeFA/w
+qS+91I6eaA464lJMJSaemdao+Hl5/apgtiLp65+oU9VCsHd6f7Ty0/koREZ
Dg/EOBcDVSreHR3lengwxk4HZNc/GEeXF94hhuxK99mEHrMJ7yobiAW6zw/0
SN4P5WyGEovpMwSTScn7Rr4+PH2MLvaiW68WlrJpo1oG9PpKJp7J5PLDl5ub
09N7kcVQFvTCQr72L3tf3me1cum78fpnMRSvbZUy/O38THVf1HoA+C/LJ2Qh
QrZzNDzu4xwMzIWmz9DKPXj18uVzyYR4kPcLVkC8qPMjYqxvmT7bG10efhcP
Fp2Bk8T02Z4ZSgse5i9Pf9tbXy4wQw7hUejGS9XnvWa4bT1IWp7xtrc+EzDD
o9eDd40Xp88FTCbL+Z+nF0+6ZZfe08cKopmVSvIIr+1vsZ9iD3HZaIq+k/a+
qrZYZOiE+qSsPVg45MGDthl2/7FCBI72nM4zA9ZqhmwPJq7fzPbZnh3KQXGO
ByzZ9gUhO95fS44o2+cbdigI8SVHlO3vfTtUFHyq2dAFYvt73473ftD0By4Q
29/7drj3fZLBKDiH2/7et8O974PbhyY/29/7drj3fWD10ORn+3t/cNkMjvhB
hNT0/Xd/eprPkqv536u720/33/nQ1L9DZIan2/tP30H8X4hD+kPznC6f+8cf
//Hyv//T5b/+27/8z7/7t8v/0T5r2mf/9e/+5h/+5l/igy+nX16K5+cLvz6m
aMXw6ov/2ydVecXs++Iqxn7S9AOJwbZ52v/0p/86/9+n6+vwn0dM+dP1vAgC
Z9sPYgqRlC/fFe+o3/fdn26erj6fQjRoqGcZS/P+fPX0/Nc/zALJD0+nT/Nf
+r/Of84caf5T2osf5p6frub7c/PPV89//m765eM0q8LBwCR9n3AVIrMnn2gL
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
KtYajlmF2cQq+phi21iFATLPedbnARkoYZDMh5hiyCpg2EBHqbKGTyrq4Jqn
WACmkfKpxQOzrWRKdRUxNoyjl09SWwdmV0lDd8mi+GIDhUyt1i9Q66dGEsy+
kpCJxtTv/BCXZyv7qy1HO3O94WBnrjcc7MzVhsOdKTcp+4cO8Q+wMzFI5+wD
SKKyXxDd4iFeK6rUUIdZgDIZ6jirVQRWpSHVe13Ue11ifPqUwmgx7md+haLW
PQsGNDU1W13gVlfUwIeJegqyRZju7L849kpn/zaFRZQ8oiFuQqz5CJFCVh4m
p6Qh6pGGuBWwphV3/AJRiylm/Cm+ldxkDg9K1SyQ9tR22qMmGsxtUymxR+g+
x+mXTlISYqkVVfgs5B0pVPjMNhLdahw+SqJyC4kOzJvbSBSUc2sPkyiGsxVz
OMBXrjlezVAkhqArKmo74IGqAGZogLjq+ChZofPJZXS+FAgZYg0lJq2kLeQD
8GKoahUhDM6OFDYpVQyLkhAeJTA8SlEJCnP6VMoPSJNSZw1JSFdXVKByuFNT
OoDos6wacEpf/PQQswdPn05Pj0ur29hPJKSqKypxOZAIFSmVkvfmc7OF23UM
Y34HNV5krM9WcAlw18kyPFvG8GyJwYOKHp+YYKjczlkKu+Hu4evl9fPL4iRB
xF7lRuQIyPmMLEQCkVggEgQP0OTM1ZjQqKf4qEvBkoqlv+I9hXmjmpzCegL6
0HvdbAOBW0GEoCaHhp5g+TW42ZgdC9wbsYXfVuBW4lyBe7XlSOBebzgQuNcb
DgTu1YZDgVttMg0PkJk3CdynUAHBU87R40clC3EmumpkOYFMRCnfobAiS41Z
JwcSjCfkv3+4vX9Y5pG1lxy3Z4yOV5g4qIl0oyeQbnQnbfkcL7gCTB9NhB09
gT6sUdhxYN3m03CfbsUDfeN9qs/ep2sth/t0teFon642HO3TtYbjfbrJMjtA
U922Tx3s08OKsULLbEF0jRBXK8YVqIcmQqHGzFsN9leefWgtbM8YqOoMv5na
ZCcs3rHbcXaK4IyaTd+f7ThTaCEspqVNidbVfCcg1DirRGjVDAWKnNSaYqVq
SVFZ6IRIrRozY1OZZpVNCyqmWysUnGmBco05sEVF5ga/tecNnDj1BmaBkNXo
J9rja7xc3d4/X4Zk658e7j6eni5XJOVKaldgm6S1zzVm04ayvvXpFFfd4unk
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
wdz4Y1wFp95+y8Ki8j5uNB/utDDCPiK64P1ty4fw6j7UfICILngfE3pwuZic
2/uPp1+qtwhWT/7V09PVr/UTPKOmzw98fPh8dXtfP1GAl89PeJnzw8OX+3qV
hczw4gGd/zaWfK0fUhnmu/1mMZwp/w12xGPjF46WuM8k+JBJxNkY8Yhwd/iu
Po/gQx4R53VAAX0WwYcsIsx/H5Bd8D6H4GMO4ddpgLbO+xxgdDmv6v3pa/UO
PYTEF7x/fPMxF/DMe4DLLvrbXIy3uZ2GaO1ivJ99KzFkRP7uiHJEf1+PLi8M
wWQo984QzMIQ+kf34PIsAvZh08G6GmHTf7q6/+hrGF0/fH58uD/dv1w+LsCm
d55OsOmdewVseucu6nfE2msgy49NmZb2wKb3Rtl9fwmb7rFhK9T03wNouhli
pusGMl03iOmpOg4ApqfiOICXLpfg0k1pXGTEXG4Y2A0Ymstz3sAAvyfqzAEN
5p1whS8gmsYCzkaoiRR8HcZlN3qwK+mpQPbgF+D7kfGWLCJBctmnBNkxz998
+zuoeiTIphDV9vD9+e/99Ph1XpBgtPDekoXfYWwLv4+2/8vvv/z+y++//N7O
b9zK7x4/Cgd++AUuXwcuYSfhX3AJOw3/on2WEeeTgXxnxlgb3pS8s9Ee7KL7
2QFAjkNbNSO+KQNJv942EM8c1TlzaERTU2NSvE04gp6qeCY3cDcOUIg2RSOo
6DkyJDV4r7dRTymcKU+h2ByMQKKZGCO+HgPVAxkDoH1A6J3/MHTV6lBVjCo5
06sua6+63OdV1xNbaznwqq+3HHjVNzTse9U3NOx71dcbjrzqemJbyFwecKqr
ayBzzFY6N+hGTymSKdOc7PvUO4FMTVrTG+V/6YlvmdAj6V+vOKEpiikn7Qm9
lW9UQUy/+FrE/CLGMVWif3LZ81ynFI4JPQk8Hohb1nDwLvstXWSaNecMww6o
L5TjmaXgIyU+Sx2d6dkIRRfCuXf5H3XjftSN91E1zkfZ9T2axvXY03uDW5Fn
12NPS4/PvOs1R/W7pz7/PUPPo5ncxVLrl8rv6J8eGG6GJj9//A/NPX2bnhja
9PzxNKrNJ4bGu9hqZLgJd0d2m75pb3S5b1X06ZvEHnPz8HR9unx4PD3Ns58s
MdXVwgZTXUfqpp54idq9Ocv6Uo+peWdpcfEhz6XFxRtXosVFZovL/Iq+xYVF
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
PiDT8HjoKqnWkYfJI+NXwAkZ5FTpU9sloDv9vnXPofDWqZRfKGsKVy2GgmP1
WuN6aSvrFSfpQNxtuUwOc9RxIU6G4UdK8p2RYij3Vov6ZNHJydLRydLoZKnW
McZyRpXyIpYC9dwrq4Amvkm4756eYQT1fuFHnhXQ6IGp1rHGwkilDzOThIu3
viaWaSznYx8zrcEdVWy7hhx09F6w3VG4Ndp878WBuuHA5ZFUfCSsF1GtZw2g
zk7ZLTf/C7j5Nq86Pubma0yyqNZFx+IV9Jf+C6YJV9sY3yZFqFo/DmtylF+T
gJJvIECtWrvSQaIRDdpRKzVIQgOtiS5Y4LU8fXxkYB3dWlAudlk5PLK2jvSE
n2Q/ucwt0tNf8TszYwPKPi7LcQV3WOE8vMG4JxUgvKl5sLrZYlTNJW43D0+j
OTV9u1vjplsrBcAC3eqxXUTktMQ9aw0UQA8cv2rEqLcTerpqe9x6ZJIz49CU
7l/JBf+eG92/zow1rBnaWdCwPCUhx6PbI9jDKbkcb6yqF03VYRVVLyqVvcDR
Ed1PvZifXTUuZiXXtVnjEsiAyFSuXEw+mMuVVcn8a+XK+FUMfxSvaQasf8ki
clAAM38PlZd6DdTid6golrl+lBmyxvXz3ydwgqvvT6PjcNoslYgsgCLTWkoe
MimL/VLG53QCHIO0/uPrbAqOLsvVzR+vp+3yib0ztzogI5J2dRIWONsroHSq
+t4TXU/x6+nXW1/njyI/6SH7c/SUNV3Kw3D5Tv94fb7+8jqlcK7u7k8P56Ks
Ot2aWwE1UArqUxj4hVhVpemLWCXXjsIXiQAjETXGqB10keVyZ2W83mQS09GH
SdD/a+k3jcHPJf2m8yvlCbesaDIx3cPrLNxRTc2Pa9Laqfb3+EK6eKECjH42
PgxCINOXrI245ZJRkRkZFRVa17q1rrHsae3Y+vC85kei8WLBUdSTr/vwu7U+
SaunW2VzzKkofrWg7xYdH78XCLXJ0JOZAjuITjuxE/JR42ToAc22ZFgUsPn7
kQAD5WK6cT30gPoRQ9rLgftw/fj16tenp7+//FlmolT1qOWe16ZRLukIy8FW
mlVWex8/qezfMY17pLE+yCxaTV+0EcY0ToIGpFZnxMo9O4qSpks2zoTGYqS1
Y4PgypebRelF2sZl0AKYfdHFVRlrHp/fDM2lesbX1+f7mx87tli8aeMEaAHx
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
x7fvVzd/XE0DLl6uvj6frl9Pz7u8GE8aFzWVw4Is1WpM6LUXKvxUK7ML6n10
ZeKywHroVvtDH7TQQ1pEGdUGZr50q+49HLwawD40FtHrrSJ6U2x++cG7OxOu
I0DNoKWcCQ4p4UxwSAlngkFKOhOOGaBW+XXPdCYMFDb4bh/cpQB1VkRvqkM6
xaPnr7OCVFVIf4yPqaYMHKVfTW5KNuFH6NZY8aDklwqwc5W8rg+4jKVBYOHV
Z/u6/GkqtI+/Sya+K/VU2syo1JLagj/1po7zBSM0xkvSbEWN7qzlluXLtBye
sqNeu5pM5Unr7dbv6tZY82DazKV1E0OAf+Ew8adbW8zD4aBpW6wx6M8aoSR0
a4NBX/b4Fd501d6bbbL967cGmEcNvxZfLix8hxa+bq0VbOPU0Hqgt1oPTN2A
aT6wAdN1tEsxaElNf7xdikNKafqOdinHa5cyPQ2YNsLLydCv6bFdKuPEivE+
oIRNt7Z4wCPAk64Kp2iiiJmggnrb8l7dms8BHAu9EnAoHB8HHq9pTU7s5cbi
mvXyXgtlMdiq21He69ADNq0pix2ypq1XLnUjmsOmPeQDaFiDZRqbTR66zkTp
j8tE+Y5CMAYtpRs5pIRu5JASupFBSurGZJnu6EbdkYmyATi+G0vIp0KwvMlD
Dx+rG01rpGF/91wFcynd6N9DN5rWesTW8qXSgtCNXsA1GmNQDWBmoaIjdOMs
V9Ovu3Wjx9iAaSxHNcDJtVQmrOtGL6NpjYM6hWnsRyVwp1O0K980l4LtRczf
NKepwoJwgyXRCFrqNTwElgyY5vRSEk+eVeTUKQq98hC2OcGUhEPD1sipHqak
eYwi2+bEURJWwoq1h8B5T/VDNKeOwvJjK+uHAGQqDzCuAWBcA261bQRRYYmT
xRKnzQ6VGhzKfCA4VOgYGsWgpY4wDilxhHFIiSOMQUoeYYE3NMocB4eSg7+L
iinLJxw8wgIOjdJ5h0oFDvWO8K0zwuokII3eVzCDWEyJ0Ba+NaBStK22h0nE
E579LHVms4OgBqE0HwhCGTpQjRi0pNQdRzXikFJS14FqFHioRuY4CKUcggCp
6zYcAxZPmryDoAKhfHfD0bamicJDFKqYzGZlfA18bD4Q+Dh0AB8zaEnJOQ58
zCGlJKcD+DjwgI/NceDjUXIkSE73JOKAwMcmr4wvGE/V5SmqTh+68tsqfVjA
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
Y92C3qpbCDWwcvhAYOXQUVHPoKXkhUNKyAuHlJAXBikpL4EXDA09wMonSAa4
7gLNgMHQjBMrxmvqFkKNgx/KTpP35cuOnmsGLcmXx3uuOaQUX3b0XAdeEDLb
yw/lSwxCavF5jc8uWXCWFHcbuHMQQJOARRChfqd/bKVvQw3cGI4DN3ZXZIaO
sWsMWlJAjo9d45BSAtIxdi3woJhCD3DjCbJYrjuSFhCKKePEivFaxV3jS4fj
+NL9fKk6+HKfluRLBinFlwxSii/3SWm+5HV8hB586QvyJXZ86FSLk3Ne1KZt
psJDLFZCpkJvlQeEGi86HMaL7i+cDHqfluTjfVqSjxmkFB8zSCk+3iel+ZjX
iRF68KJPkAXFigRWq2mR2gz5B5utpgF7NTJerVizrTrTb1B1luyXNsUBU5KV
hBSH3iouCDWkazgK6dpdxxnMLikpU7ukpEjtU1IStU9JCdQuJS1PzMxfD5br
CUCU+scjB8z8ZSxYcdzRqrMAcAuyTWrAWNjxK+D/zQR43RAbjjbEdlddBrtL
SvL/LinJ//uUFP/vU1L8v0tJ8z8zt9fTCXu6Bv7vrroMmNvTeea76oRNCYcj
VWcTMEkM/ocIExAQJkC2CTkYIz5+BYKxmfuuwSXDYXDJ3nLM4HZJScHYJSUF
Y5+SEox9SkowdilpwWBm4npQJU+AHtY/PzxgJk7nSW9dJr3fFlN43Zpq83Qe
02wpT9dRbqYGxAA6Um42U88Po9p0oIesnEogQ5cqN5tuC0pFtRlFD2kOBTXe
ejPLXyN3hsPInb3ZwPGtDpeysmjXFQuPdFWz8EhXVQuLlNAtQMvRLR1BsjsA
L/OdUeTpaVG35Fn+CrnzTbL8qs2Ve4glK8iVm81ceY3bGQ7jdl5AOmSHdOzT
ktLBIKWkg0FKScc+KS0dzBByD27nHdTA+M5Q3fS0IB0mz5W/BW7nxPVtVjxA
cCJD6D1YcabazE0Az09B5sZsDbMJNZBmOAykeQFpUx3Stk9LShuDlJI2Bikl
bfuktLQxA+M9QJp30IkdOh3A6WlR2vKMZsF4b1T6rNpwOwz4ViqBjW1VnKk2
sBigZE3ZquIsILCaaqMxAe3Spczn3DFX5XO1fm1AExT8WrNZYFNDVmYfvL/Y
H+54YNGSYn+044FHSon94Y4HoGWIfQ9k5R3EfUK/CYpxT5MX2FSAlBc7ZBuf
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
kVI697gjKgeuI3rcQNfCR9HVS7TmqM5dHNG8erBC5Kkwg2VW7rw2EhuaWeYs
7fPTt6vtWviiVWe04EB6WntPo1rTWBy9YMZPhCh3rSGnIRSUJujozYJDXw/5
+Li+aDkcLyTi0JJyd7iQiEVKyd3xQqJIy5G7433ROg6pnvipW+5SIZHOCw6J
vugodkkK367msJ38IbH2PU3+0Bsocj9V8FQOx4uTOLSk7BwuTmKRUrJzvDhJ
DszipI7gqRY3IDv9fkIqTtKGCp6+K4qcNC7g4dN651hKb90iNin3tLLQ8lMz
zAS/LaM7iKwOv9LFZlX4BYVi2cdUAi/q/kAfWzv0Q2K9v02pn5SGLQ9/McA1
Wi9LQywGQeTWfRo5AJP5bp9GYOyknWQgsQ57mWSQXqj0LNoRBtKADwAjDPSA
Kax2csHy2+iFzCH/+NQv3z+N9/vT9LYv3//l8en1X16ff7y8nm7/5dfT8yk+
1fgyo4IeMra4+z5+UjKbGj+ZEHaWTyb+HHJmktN1hvw6curYDfl1xNTVO7ls
yyd+/MTnVxbT1CCfX1lMg4U8XjkGg6c3e/k+Hy3zak7u6f/n9Hj7p1w6//X/
vjuBK37/z9Of/iX77lP87i/5z+dVffmX/5Z99vn/ksN/+6RG8/WTVbaU/ezn
n79L/d9G+Rzwd0P6NsZxxx8M2Q/0J738YGp7/fw95N+Pkpi+H7+eJnQ9j5ew
NvuNnYYO4o+evg+f5ztIH7/1n/4ydUtnPxArP7DLbabk8dovsgcdj97P83vi
L8L8i+VdfzxOs51Ot98/i+VXbph+ZWz+QqfPIbuTE/MvloedTvrPQqrsJ3L6
ic4e99f7l6u5YfezdC77oZp/uDz1y48b2IL85Zyef7Y8+tPz/df7x6kkj/qx
Wt5gfMnRvy9e0sw/yV/h8fX0j9divZydfiThJR7/ZSpymTZzMphGAU+0V1cl
nXcznV6ns/ixlBo//lv6uL2clvMSySH7wZfPsv5e2PXbufXbOfp2M5dkvFrf
Lmzdzq/fzpO3UzO7FT8obhe/p24X1m8X6NvNvDFo8nZ643ZiWL2dGOjbzaww
kHsXv6duJ9ZvJ8jbjb70X2QIlrqdFlu3k+u3k/Tt5Hw7klW03LqdWr+dom+n
ptt5klX0liAIvX67hRPufjx+maK5+T3N4PN71tdcdMCoQm1YyITKV6YmW1cB
Itu259d/5CrNTFKwbGx9vXUZpz4mFZdRZuup10VbkKJttM1Fu77cuugKUnTh
cmL96eS6aEpSNM1ovk47u66l5broyUX0frt++HEq9mg0H6cLDusXJKUI6Nz6
3sp1KZGklODliGValwKpycuZeZns+iZKs345msXMLE+WWPV1wZDk2WjsLBeW
WPN1AaA+pnfI+q27rMuFpOUi6K01WJcLSctFMBs7pNblQtFyES9n1tlRrcuF
Io8kvNw6O6r1I0fRWxEvp4mXXRcWRQsLXG59K9S6sChaWOBy64yi1oVF0cIS
L6eIrVgXFkULC1yO2Ip1qVCLoTjNqisUXphVA2EfK5L/7TALLWEfq3X+VyT/
22E2euT6out1/tck/9thlk7CitDr/K9J/reDnS+3vuh6nf81yf9WzE9HnKl6
nf+Jjzd2SM5LOqzvkF4XC02KhZWznTgQO7QuFpoUCzs5PNITxpBeFwtNioWd
HJrxcsQOrYuFJv0nO3kQ0hN2hV4/LDS9FWp+WcIA1evComlhUXa+3PpWmHVh
MbSwTP6L9ITtYtaFxdDCovx8ufWtMOvCYmhh0ZPC88TJaNalwpCHxWhazZdb
31mzLhWGlgoTn47YinWpMLRUxMsR57ZZlwpDS4WZpYI4t826VBhaKmZDzRPn
tlmXCkNLhZ23gji3zbpUmEwqKv9qfN35eut7YdfFIguktdebxYw4ua3YJVxf
drsuAdTHtJy5Yesu64JhacFwautt1wXD0oLh5s0l7Aq7LhiWFgw/KxXC3LDr
gmFJwXCzueEJc8OuC4YlBcMN09noCXPDrguGJQXDzeaGr6J3eWgWfkFYEHZd
dCx5oDgh88ut3RB+sb7+bl22HHnkOBGff9i44fQLR9gHbv1QcqSwOOHny20s
afwFcUa7del05LHl5JAv2NoN5184wsZw6/LrSPl1IuTPv/qGYWtJ1yXckRLu
ZvsyPf/qG4qtG67rALfogNenq+fT64/nx1y5Omnyi07JhuvfTrdX94/ff7xe
3d0/nB6vv50+K5lRzKzkh4ri4f7x9PiUJRScnAwhRxhCjtYmcmYdwuJxtNqI
dJaKhc7fk7FQR+sPuC7BWevagfp4XXltvVTIb77yUlupB7+uSTytSeagqiMM
ML+uJzytJ2ZL3RUmVfH0ais87Wl1ANddZxG/LuzUx4QuovlzNqGdoUL88/f0
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
PSpbNaFHZbMi8qhsVkQela2K2KPSXGjl7xCTwV5Hh4o6GxViy4VWuxmTIZ6O
5/AnkWZHV71K/solD93j01zunZX3hz7pVHxzdHqqdMrN861YqwieoO4k7bwi
i/hjJ/LHyj1LDC557gL+2Nu0xO7sJS4IiGoS7e6Qbg3uh7gEykcnsU5+NI/e
8DWmi1Zgjp43nY52fZ6rVKOhkNHdptOJELe5Rr5NER+PfjadacoVSiqzkFc3
pvO25Q0UQqo50OIhX7PMEqScZx3bTDiuEENUBGvjJ4nRG5iSi89FmU0WaJdq
d443uiN27s6htmrCnWOrJtw5NiuinWOzIto5tirinUPtESvn3BFzaecwZ8eD
swUJUhEduiO2ciTGw3GwZP2RmE3RfMSoQ6fk4XNRJnuTwYXWIgZ4s5sQNd68
+72TCfRmVcgFm1UhG2zXRHywXRMxwmZNzAl6DyecdSHCpWtOJZ/46axQsPcV
+fUXIto4Crtv27VbRPguMeQStWbfbNH6yNLqCZN1zDQtkJUK193dBuPpw6Py
Eehh+n1+aVrkw7JJx7M1G6EqNkcqEqNBlvKY64C7+a0NMBi/xr9+d3/3j8Pl
8+H28Hx4uD6sfU8XcTIOI/c/2ngpDboWBSqzSyWwUYSIQbUI2fuOaCcme+GO
aidOoosHii6fcIpRs7dJrRMSTuLVr4dL78A4cupcxtaK0RRIuWx1QXGYiy+H
18uZSV8v7x5eHnZ0JWtdUoz6qs2ro4cPi22rcJIb/9bV3yamIoyjSp6YnZ8P
Y0//EpZxIlMJh63Ss2CrIYZMVn78o2Lt8qfl6PZ2gW3Kqd0g8bWJfWNqKYtv
iKQrP89zWSImVfcHxdDnFD2tSsT0/HrfSKHL2/urL1uiyJUEe9V89Jchqu+V
SQj5/wsIHm2lUNLb3/Oa531L9oZEWZjBfpFTZqYl6iewRkKKJf/mYNLIKZlN
wo10FC3Q9Alxqq4fn/5++fo4S7jVCcp2dUsetgZVpExOLmWE13KwTeSUlDQ5
9SSTU0910QJiu7nBQeuTU5LhcpFZMciQy841OQh+OSUzUfK34TQ9NhPlbjKg
C/Jjrvpyf5+qskzvX71C+fnu1QMiMpyi0E4YkE/RtdxsEhevV89e3Hmiful2
RR53xZZYvDl8/xqezE352+LttulcP3ueNqsqfovcqpJ3WjnsdDLlP5mLNuha
TFNqZNhpZMrJoWXZaZbpPo6UO2Fbf4aY8q4jh11Hskxsaj/1iolFmJAz6d8M
npXDniNzRFJZcrwzUyW2PZZKa9krlniM+5oJjgfDqGbChImJx+8Ll/ivgo8d
78GWlia2JoKlDx5Hw8wwwbH4U3HiNz4kOWx1MoewlHmrc1UaiPe6tnquMSgm
uVkVGIM7qgJjcE9N2hjcU5M2BnfURMZgrLpt3pxze/U6xtSbiehMY1BMxd1a
019Db7IYg++nXjbMMqofOZ6qtCOLrFoSkRjFKCz0kQ0BkyQ0lKROmtAiRUcF
iGcxXRSg6rDhr3Y8bvCtpubUqLPwJJRVkcNd/LOu9cZjJSZTxK7cI3aDJll2
6GUCElRUjSqQSEqjYkWsyl7fy8lBZ4WaJ0kVjl512Hdl/mnCTxW2/m95V9ZV
6fw/nglN1oT45fBw+fz6++W//j//83/978v/+3/+72PJUY1qWr7apTixjuSh
kRpVj3wjS4m40IuTwWtPl6/PV0+/DkpI8jKqUQnJ11tUvnPiGLGfUAEqdl9j
RnvLvlMoMTX3z6FcBBdxdx1D3UTotsw5ds+Qi+X+eT2P3UVcyvnDR+fPsmyj
5pavCim1zcM9B7OJEiM5O4lgUSlhi1yvX2NRSQpXBQmxk3VmNeqC+VKFWmTo
ojM33x368G+O6k8GrysDvtu0Pg3Z2CjyQlT2SLRfCNKuk+lpNW4rMvNx2VYM
eR2B80BXSg36EONDzTJeXo+X5/GKUDWXhYZ4HrxXTi89BOivjNfxIqZFTsrW
Zlb9PHl65p1Qa2XIWw5ZEkMudTwv/5/+BQssoP0CefYXRMIbdQSZN3W3YcrZ
il1Z8Cn4dhPb6lFbUIltdZEaJfRqx7Vqk68L55dgoeMLSQhFccqqQzcOe01V
ZKySNR89ahY6gZB0PlJz5cPH3bq8XMjmTOWRT0c2hJRHPpVvDocCIlyh6QzM
xSpKr7o4PZZ4NWcqiO+lKfcQswYDoUdlxCRJqDOqywlsjb7V/fCzrVFmNqsi
a3S7KrJGd9QE1uiOmsAa3a4JrVG277DtnGvitxH8I016i7ldWpcbtS5Wztxq
+itjK1KemSx6ZxHGbPoM3Sa7MsVuTarg529396uKXx+JJLBkPmLSo86dz+l0
2SV2nW+hGI4xRP4R7YAYjqGdKCx41PJ49jnrUQM1WTyqsfO42S2qiKqDZ2TX
5nh1d3NafXejYmnS1qfzbV23gPx6eMRbXZs/Wwbx0z1i21WRDNpRE8igHTWB
DNquCWUQ3+cRO+P2vJpUkkHmXMuPLx6xCtkMbs8TIFM9Gjv5PN3HtUt8GW0z
XtSW0TjJ59e6u6GbBtCqZiKrUdVN+Va9a98gFctY+imvRyMGas4vrj++5vqb
5/3uy0NA/R955q1Hrdhm/WQLDRljcBHHKIKb+IGLJiorDTqgPBNAIynnZtSh
bfLZhChxgUR4Urzz0aIZlVWbdgnDNseesJNmVGJdktKmKLHvbS+bUUt0SUBX
MYKPtJcXNOv/MfbyWw75x9jLPLmfzKDBqHzsbeR3+8i3M6kb+1Gk81kzaDgq
H8WbEpPEtKJNdjrN7ePz9WHvYW2lK4p8RGsG5UZNmYH1eTMtq5nm1UzP0kAi
iml+6uVz8dx2zZSDnwWHe3j4z2+Hb4dtUFMsEtVuEeVPJWw9ieaZG3ZPNaXd
05iTpU7x7+07YQ5al1+o9qijiOdhs1YsbdYhDlVQXZfLCwDk8tsY/i2cVhye
r+4vH5/mfx7WjZWWyUWRiisYDD9LQ0W5oyIB3ogVW0UiKGHFkSOiQhWwed2L
wZkf/TxiSQfZ0VvkiDhR+ajoGAZdgAq8DCketgi+tToRNoBwGz1ooO4pdrMA
AYrqGAlk0G1UynKsjQPsWymfCUR2eLq/mifg8J/f7n69nKXE8+Hl5QhgSejO
DuqNYklGWQLYQeCGZNEj1IB4OUaElog4sfNBg1IZfWLZIAH+T9ulUrxIO2h4
KmfntWWA77VL5RNqO2h4Kh+0WwFpcZRYl7777Y3g7faUOMRRm8nZKe2Z2syu
PbaN46S630fsskvFc7bZxEoti4+6UIYg2MXJ38HNsvljRx0mp0u0Ops/Kpo/
IkLJBM+gcjtu4zkUsC3bODKDcvQpO+6z+eTd2pE+T4HaqdaNVH62VmnePKKT
Xpj8kaMsz+Hv7Ahx7Tpstrhq6M+vvx9lL/thpfG4UaLnY1Y3SnTCBwORAmVv
DI6zdOvSU+5w7XJi2ZjkJXJXu/UHb5jI/XPZ+IA6kdfYuLpdLTMIxOR4+Hz3
8Ph0LMrDjbuOTKyy3F6Q7R0Z2ZNv1DZFMrfcKONlYiDHgXgdPunr3es+8Rp7
zpQwSvZ8rugWtKUl+d6NclWmrSlguwMMPfuT3ShhysvpGg0/Puab7WK+6ZpI
mhAK+XyrhFC4/+24qHBGt1HhhogVIewbX8LCDWE14gsfh4o5XsYQ8uKWTyUy
nGIXaxXb0HDzy1VouMeX109PrCrlF0ssmLsvPs5FX76Eknl8mj75YeQQJ0q2
oeEenxhRvkRIeT18fWpfUFWwt/mFX6/uvx2IN6oh5g8+3DSxWJRuw7W9/nL3
chmQK5+4MdV7pg1wduf9+59Y9UIXksyj2T+5ekSujSE2T8rl3JcXw3U78/yV
SGI+0N/dw5f7yI/NW6wJ5fX56uby5dvneRdqXqoicA2BZHBAJ1UHDhrj08Ri
EN3IgohOFkd08vPiULgbENHJ4ohOhi+BwMbBG742eBAsx+IQTEbgOGEWR2IL
1WAEIF+qQSRDCwI3wefVIObNvuERZ5fIXUM/IGSThSGbPMb8o0YzH0vBRzkQ
scnBiE0egAgDdzkQksktYYUeDr95gVe3qKuYXkOLHA7EsJUgXKEUfjWIteYg
a/ozSxyDK5TCzgBjwufLF3uLv6Yb736qR9FLZ8VEE7vr+fDy7f51eEOg1QM8
j55747EKR+Wzqd1/uHuYNZmneYv1YVDnWtf/cXl187d5+y8Bq+AbVeQq+E7W
R0ajRWWda5EZx4SwwuNeGUsT1KqLaTXliFZ8iWg1UQGtVFKY56V764BWbTyr
aYlexdvgVZYKOxVnczTwcmQoVwy863ndsrJsl4OmqY7a7UYjL8fkcdHeCrf1
9muQ9Wd0EYBbVQ+vbFDpxKLzYcqMb37ETS3aDiKWf2cuq4OeVtf4hAoPJ+rw
cNf3h6tnsjYZKC5yJq5UWBO/UvEmfikz52gv67zU7iTmXBn62mhq9lQde9rM
nnJhz1m60QHn2Pvwp2r50/siU7y5JlTcPPomUtzMsMXKSZHj5IQ42EyjtyDF
HDJTDtCTrwSaaTSPy8vFPJ6V9Luv4aro5/vDPz6kU5PlamW41/DoLdow/ZdP
j3ez9v/cu3+kpOQHd5xA2/t7Kb2PVRYEvIzefinzV4wWeYpJZKYc+84t9zCu
vz0/z1R2mSn88uZwfZ+9Bx0ACeGPGt8HC3nChvgIQja3zwXpm5EXAB6zNIrR
MTomclEljo7eiIcxBrMXslxCr6aog8WQ4TAmO54dSdUQxcPjbE/d3z0chrVU
/Vou52qhZqxWluhlaECkpR89IkalpS9giIXeeH03SfYbmSQKVF0g2uozE6p/
yjwu8gXql3pf3Llh+g/KxDz6aUxmyeynWfh39NOUl9PysmP9NI3PpZZF953s
aXZh1e3CKyI8bK5y2YZXdqH46seVxvL2srIv1DvxvDFtNTaoydAo9VLmI4pc
70CYYfhcE3v4zeP6Bg7Kq90bvJHpZ9SrbWaf0/RqNGI4jnrT9m5tUqeuNu2Z
Ar/rpu03omrTZrps2kK3m7botGzehXstPnFi0x7VbqvTOqyp3cnjG4VSJyFN
anpUxFOkGbMkioRNp1PSTsrb1PSo+NksfdzYdIORCAEmZDh2uApnY/pCsKpX
WeZJhAui9RVQEqgoyha4fjW0zz80HNjoi0iakU43t890SmPGVIHKxVMas1zo
27MRmNzgqJu5pNWkK4AhoMNRsl3oVrYL3sp2TnrT5dTKdsTjQVqrRbAj6RTf
+4iayWIHiYxans/SCsvIXpr+7dvXp7vbeXKK/CxPKolZnuV1GLRLnZBnpkr7
cYyMXMZR9fX/73IwRb1uzjFVc5hnxux/OkXWMQwBG+SAbp4Kn8+U4xdgncV9
44NKphPsz6RLbSEowA/gxIWSAk/phfcWyo4lH5dXM8kuxFdxlJ74xfhqf2bl
31r8jvdXnw/3c/lUlYsLCTmwY7+B9zLjDcqtZpnx1BmMV3r5/1hum+UGBVGz
zHJ6YLk6kEiHljmW5QaFSLPMchHwr45zH74xy0V+Mz2/RWYzidk6TmvYjGU2
wzzGNniMRR6jvIey9h6mOV9xFZZVWcwK/7s1I/yTzJmDTqlF5kx7qtkQRlD6
aXjTdswpPSdG9tQ78keYd2JP2/JnlT9Cmo5Bpek4VDYZJph/0Pj4zPxg6px+
BR5BcrHt2LjcE4rpImQdy9yMGQC1yHydc7q7JYysBCHsXxrATKg+pgvUIhkF
fMrqbiNjxvwkWuYarEiOAJkJoLlN4THmwtCKpQbHCHwx9EyMkMerKGbB1lHM
DBVq5HuLP736ELFCyl8uIe/lJGD6TDVz8YeElxcDF4uGn317/ou+PP0202Fw
mynR/A7D/P9+/7Dfwl9O+AON561/S+8qWPn9/vX5eeNnG/wyvTE9mPXvEx7y
/gda3x/9W4RUTO/3/lb9o/u3x/G7cLL7fRz9j+21/CD9Lf/6t5m631257cpF
S49Sdvxq9fpv17XvOv7rvlf6aK4N/01nzccwP7pbX2XPWu/T6Cto23G3Torz
mHhLpyxdZgnuoOJlI5WPN8f0RjpBKUy+zlKrf0lf8mewXw7Pl/84PD+u2lud
c3eJWLZokGlcMWCtqq7A1cGKQkix8dq3GRMr6RSzyPCqL/LKgEpO7DG9j1ZZ
RVzM0C77fNAYt61N30ue6dHqTFmEDDf98mTH75gWSOfTZ16uDTpClU7h2dqE
IFVqm+NS4rTxLpaf+8JdhLBUqzVRtIvNmijYxXZFEOtiuyIIdbFZEUa6yPmv
4km+BCf5TaKdIwNdXIf0TU4PR/nHZqcXypUD/YXqdHvFYVdKnCUTVDMXWia6
H03IlBLH8GRCsmmCdG9aoIUBQIstuq8idbU/99F9iJq2WhPR/WZNRPfbFQHd
b1cEdL9ZEdK9nvbQvaERLPvo3iW6F+fSvZ4S3ddUZ/jxdN8mUhvofsyAplPA
KJMzoLGJQbrfmxtwg+6tbOjeyiPpnm3VhHS/VRPS/WZFRPebFRHdb1XEdM/2
0D3IrLiP7q8S3cuz6Z4Vul+orsusuIvuQ5RBKSDdj266DLXKKdDYxDHdt9EF
l5/H0b3jDd07fiTd862akO63akK636yI6H6zIqL7rYqY7vkuuj89qKBKIe5j
0Jbz6J4Xul+orqGynXQf1k2OpFLwpjoaPjobZGNqL52i7RlRQlLoNMoUwlVn
yN6Yl0unkGBGiMxGgvK8/1bd3I2O973pNBFL7Yzwrc0eqgAJIfcE+FY3U6QK
O51NFaZQxTKJXUJI0UCOw0UOPxJ2e5uWaDS4U6CyuSgvkfyU/1JQ5r1Ztsdz
pZ49Wept1YRSb7MiknqbFZHU26qIpZ7dQ9/npHlUNywReD7QOjmOobaFwKts
1BOw72p8YKbJnTkfz5Yau2xmlA5yn9h4u1l1ZVar6JBdVkhBXlXwYiOmrhIh
ddVfciimEprR6CRXRk9YijxohOr2DTPFfcOkEBwmRSQ0aT8xMv2bQnWYsr+M
rrKMQxQ6iyy9IrK6KNDTj1HUjNmqiUTWZk0ksrYrApG1XRGIrM2KUGSZXVty
G9H1WJGVLBR39p5slj1ZfyIIK461Elk1euG+RS8cCyQas1Fql/fy3qVrskt3
zJSoXVbwbOYhg3kI57D8vjzkTuahrZqQhzYrIh7arIh4aKsi5qF9GxTjp/PQ
Iem1Tp/NQ8sGVaUtbgiNTugV+ScElvvl8f7m8Hx5f+fR0c1wwg2rlSOiODND
I5EjRj9wyvdqRPED